From 570638629b524cf89824310adcecb34de2e15a7b Mon Sep 17 00:00:00 2001 From: Jakob MG Date: Wed, 12 Oct 2011 01:21:25 +0200 Subject: [PATCH] get rid of some unused turret codepaths & options for better preformance --- qcsrc/client/tturrets.qc | 6 +- .../server/tturrets/include/turrets_early.qh | 34 +++------ .../server/tturrets/system/system_aimprocs.qc | 19 +---- qcsrc/server/tturrets/system/system_damage.qc | 2 +- qcsrc/server/tturrets/system/system_main.qc | 71 ++++++------------- qcsrc/server/tturrets/system/system_misc.qc | 3 +- .../tturrets/units/unit_fusionreactor.qc | 2 +- qcsrc/server/tturrets/units/unit_hellion.qc | 2 +- qcsrc/server/tturrets/units/unit_hk.qc | 2 +- qcsrc/server/tturrets/units/unit_mlrs.qc | 2 +- qcsrc/server/tturrets/units/unit_plasma.qc | 4 +- qcsrc/server/tturrets/units/unit_tessla.qc | 2 +- 12 files changed, 47 insertions(+), 102 deletions(-) diff --git a/qcsrc/client/tturrets.qc b/qcsrc/client/tturrets.qc index 16d13cf22..8fc65b360 100644 --- a/qcsrc/client/tturrets.qc +++ b/qcsrc/client/tturrets.qc @@ -304,9 +304,9 @@ void turret_construct() self.tur_head.movetype = MOVETYPE_NOCLIP; self.draw = turret_draw; self.entremove = turret_remove; - self.drawmask = MASK_NORMAL; - self.tur_head.drawmask = MASK_NORMAL; - + self.drawmask = MASK_NORMAL; + self.tur_head.drawmask = MASK_NORMAL; + self.anim_start_time = 0; if(self.turret_type == TID_EWHEEL || self.turret_type == TID_WALKER) { self.gravity = 1; diff --git a/qcsrc/server/tturrets/include/turrets_early.qh b/qcsrc/server/tturrets/include/turrets_early.qh index d52c00307..9d108c6ae 100644 --- a/qcsrc/server/tturrets/include/turrets_early.qh +++ b/qcsrc/server/tturrets/include/turrets_early.qh @@ -75,26 +75,16 @@ vector real_origin(entity ent); .float aim_flags; /// Dont aim. #define TFL_AIM_NO 1 -/// Go for ground, not direct hit -//#define TFL_AIM_GROUND 2 /// Go for ground, not direct hit, but only if target is on ground. -#define TFL_AIM_GROUND2 4 -/// Use balistic aim. FIXME: not implemented -#define TFL_AIM_BALISTIC 8 +#define TFL_AIM_GROUNDGROUND 2 /// Try to predict target movement (does not account for gravity) -#define TFL_AIM_LEAD 16 +#define TFL_AIM_LEAD 4 /// Compensate for shot traveltime when lead -#define TFL_AIM_SHOTTIMECOMPENSATE 32 -/// Aim slightly in front of target -#define TFL_AIM_INFRONT 64 -/// Aim slightly behind target -#define TFL_AIM_BEHIND 128 -/// blend real and predicted z positions. (fake bounce prediction) -// #define TFL_AIM_ZEASE 256 +#define TFL_AIM_SHOTTIMECOMPENSATE 8 /// Try to do real prediction of targets z pos at impact. -#define TFL_AIM_ZPREDICT 512 +#define TFL_AIM_ZPREDICT 16 /// Simply aim at target's current location -#define TFL_AIM_SIMPLE 1024 +#define TFL_AIM_SIMPLE 32 /// track (turn and pitch head) flags .float track_flags; @@ -111,7 +101,7 @@ vector real_origin(entity ent); #define TFL_TRACKTYPE_STEPMOTOR 1 /// Smoth absolute movement. Looks ok, fair accuracy. #define TFL_TRACKTYPE_FLUIDPRECISE 2 -/// Simulated inertia. "Wobbly mode" Looks kool, can mean really bad accuracy depending on how the feilds below are set +/// Simulated inertia. "Wobbly mode" Looks kool, can mean really bad accuracy depending on how the fields below are set #define TFL_TRACKTYPE_FLUIDINERTIA 3 /// TFL_TRACKTYPE_FLUIDINERTIA: pitch multiplier .float track_accel_pitch; @@ -122,8 +112,6 @@ vector real_origin(entity ent); /// How prefire check is preformed .float firecheck_flags; -/// Dont kill the world -#define TFL_FIRECHECK_WORLD 2 /// Dont kill the dead #define TFL_FIRECHECK_DEAD 4 /// Range limits apply @@ -147,7 +135,7 @@ vector real_origin(entity ent); /// Check own .attack_finished_single vs time #define TFL_FIRECHECK_REFIRE 4096 /// Move the acctual target to aimspot before tracing impact (and back after) -#define TFL_FIRECHECK_VERIFIED 8192 +//#define TFL_FIRECHECK_VERIFIED 8192 /// Dont do any chekcs #define TFL_FIRECHECK_NO 16384 @@ -203,7 +191,8 @@ vector real_origin(entity ent); #define TFL_TURRCAPS_ISTURRET 65536 /// Ammo types needed and/or provided -.float ammo_flags; +//.float ammo_flags; +#define ammo_flags currentammo /// Has and needs no ammo #define TFL_AMMO_NONE 64 /// Uses power @@ -237,8 +226,6 @@ vector real_origin(entity ent); #define TFL_DMG_HEADSHAKE 128 /// Die and stay dead. #define TFL_DMG_DEATH_NORESPAWN 256 -/// Supress std turret gibs on death -#define TFL_DMG_DEATH_NOGIBS 512 // Spawnflags /// Spawn in teambased modes @@ -265,9 +252,6 @@ vector real_origin(entity ent); /// Defend this entity (or ratehr this entitys position) .entity tur_defend; -/// on/off toggle. -.float tur_active; - /// and shoot from here. (can be non constant, think MLRS) .vector tur_shotorg; diff --git a/qcsrc/server/tturrets/system/system_aimprocs.qc b/qcsrc/server/tturrets/system/system_aimprocs.qc index 843af3d5a..a291e3ab1 100644 --- a/qcsrc/server/tturrets/system/system_aimprocs.qc +++ b/qcsrc/server/tturrets/system/system_aimprocs.qc @@ -3,18 +3,9 @@ supports: TFL_AIM_NO -TFL_AIM_GROUND2 +TFL_AIM_GROUNDGROUND TFL_AIM_LEAD TFL_AIM_SHOTTIMECOMPENSATE -TFL_AIM_INFRONT -TFL_AIM_BEHIND - -not supported: -TFL_AIM_BALISTIC - -removed -TFL_AIM_ZEASE -TFL_AIM_GROUND */ vector turret_stdproc_aim_generic() { @@ -32,12 +23,6 @@ vector turret_stdproc_aim_generic() // Baseline pre_pos = real_origin(self.enemy); - if (self.aim_flags & TFL_AIM_INFRONT) // Aim a bit in front of the target - pre_pos = pre_pos + (normalize(self.enemy.velocity) * 64); - - if (self.aim_flags & TFL_AIM_BEHIND) // Aim a bit behind the target - pre_pos = pre_pos - (normalize(self.enemy.velocity) * 32); - // Lead? if (self.aim_flags & TFL_AIM_LEAD) { @@ -73,7 +58,7 @@ vector turret_stdproc_aim_generic() pre_pos = pre_pos + self.enemy.velocity * mintime; } - if(self.aim_flags & TFL_AIM_GROUND2) + if(self.aim_flags & TFL_AIM_GROUNDGROUND) { //tracebox(pre_pos + '0 0 32',self.enemy.mins,self.enemy.maxs,pre_pos -'0 0 64',MOVE_WORLDONLY,self.enemy); traceline(pre_pos + '0 0 32',pre_pos -'0 0 64',MOVE_WORLDONLY,self.enemy); diff --git a/qcsrc/server/tturrets/system/system_damage.qc b/qcsrc/server/tturrets/system/system_damage.qc index de8e5c8fa..48f76219b 100644 --- a/qcsrc/server/tturrets/system/system_damage.qc +++ b/qcsrc/server/tturrets/system/system_damage.qc @@ -88,7 +88,7 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo return; // Inactive turrets take no damage. (hm..) - if not (self.tur_active) + if not (self.active) return; if (teamplay) diff --git a/qcsrc/server/tturrets/system/system_main.qc b/qcsrc/server/tturrets/system/system_main.qc index 91956fb45..cc01f29d3 100644 --- a/qcsrc/server/tturrets/system/system_main.qc +++ b/qcsrc/server/tturrets/system/system_main.qc @@ -227,20 +227,20 @@ void turret_do_updates(entity t_turret) self.tur_dist_enemy = vlen(self.tur_shotorg - enemy_pos); self.tur_dist_aimpos = vlen(self.tur_shotorg - self.tur_aimpos); - if((self.firecheck_flags & TFL_FIRECHECK_VERIFIED) && (self.enemy)) + /*if((self.firecheck_flags & TFL_FIRECHECK_VERIFIED) && (self.enemy)) { oldpos = self.enemy.origin; - setorigin(self.enemy,self.tur_aimpos); - tracebox(self.tur_shotorg, '-1 -1 -1','1 1 1',self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos),MOVE_NORMAL,self); - setorigin(self.enemy,oldpos); + setorigin(self.enemy, self.tur_aimpos); + tracebox(self.tur_shotorg, '-1 -1 -1', '1 1 1', self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos), MOVE_NORMAL,self); + setorigin(self.enemy, oldpos); if(trace_ent == self.enemy) self.tur_dist_impact_to_aimpos = 0; else self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos); } - else - tracebox(self.tur_shotorg, '-1 -1 -1','1 1 1', self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos),MOVE_NORMAL,self); + else*/ + tracebox(self.tur_shotorg, '-1 -1 -1','1 1 1', self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos), MOVE_NORMAL,self); self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos) - (vlen(self.enemy.maxs - self.enemy.mins) * 0.5); self.tur_impactent = trace_ent; @@ -332,7 +332,7 @@ void turret_stdproc_track() if (self.track_flags == TFL_TRACK_NO) return; - if not (self.tur_active) + if not (self.active) target_angle = self.idle_aim - ('1 0 0' * self.aim_maxpitch); else if (self.enemy == world) { @@ -480,7 +480,11 @@ void turret_stdproc_track() float turret_stdproc_firecheck() { // This one just dont care =) - if (self.firecheck_flags & TFL_FIRECHECK_NO) return 1; + if (self.firecheck_flags & TFL_FIRECHECK_NO) + return 1; + + if (self.enemy == world) + return 0; // Ready? if (self.firecheck_flags & TFL_FIRECHECK_REFIRE) @@ -497,11 +501,6 @@ float turret_stdproc_firecheck() if (self.enemy.deadflag != DEAD_NO) return 0; - // Plz stop killing the world! - if (self.firecheck_flags & TFL_FIRECHECK_WORLD) - if (self.enemy == world) - return 0; - // Own ammo? if (self.firecheck_flags & TFL_FIRECHECK_OWM_AMMO) if (self.ammo < self.shot_dmg) @@ -545,9 +544,9 @@ float turret_stdproc_firecheck() if (self.ammo < (self.shot_dmg * self.shot_volly)) return 0; - if(self.firecheck_flags & TFL_FIRECHECK_VERIFIED) + /*if(self.firecheck_flags & TFL_FIRECHECK_VERIFIED) if(self.tur_impactent != self.enemy) - return 0; + return 0;*/ return 1; } @@ -787,7 +786,7 @@ void turret_think() // Inactive turrets needs to run the think loop, // So they can handle animation and wake up if need be. - if not (self.tur_active) + if not (self.active) { turret_stdproc_track(); return; @@ -968,9 +967,9 @@ void turret_stdproc_use() self.team = activator.team; if(self.team == 0) - self.tur_active = 0; + self.active = ACTIVE_NOT; else - self.tur_active = 1; + self.active = ACTIVE_ACTIVE; } @@ -1029,32 +1028,10 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa if not (e) { e = spawn(); - - /* - setorigin(e,'0 0 0'); - setmodel(e,"models/turrets/plasma.md3"); - vector v; - v = gettaginfo(e,gettagindex(e,"tag_fire")); - if(v == '0 0 0') - { - //objerror("^1ERROR: Engine is borken! Turrets will NOT work. force g_turrets to 0 to run maps with turrets anyway."); - //crash(); - } - setmodel(e,""); - */ - e.classname = "turret_manager"; e.think = turrets_manager_think; e.nextthink = time + 2; } - - /* - if(csqc_shared) - { - dprint("WARNING: turret requested csqc_shared but this is not implemented. Expect strange things to happen.\n"); - csqc_shared = 0; - } - */ if not (self.spawnflags & TSF_SUSPENDED) droptofloor_builtin(); @@ -1166,9 +1143,9 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa self.shot_volly_refire = bound(self.shot_refire, self.shot_volly_refire, 60); if not (self.firecheck_flags) - self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | + self.firecheck_flags = TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_LOS | TFL_FIRECHECK_AIMDIST | TFL_FIRECHECK_TEAMCECK | - TFL_FIRECHECK_OWM_AMMO | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_WORLD; + TFL_FIRECHECK_OWM_AMMO | TFL_FIRECHECK_REFIRE; // Range stuff. if not (self.target_range) @@ -1205,7 +1182,7 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa { self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE; if(self.turrcaps_flags & TFL_TURRCAPS_RADIUSDMG) - self.aim_flags |= TFL_AIM_GROUND2; + self.aim_flags |= TFL_AIM_GROUNDGROUND; } if not (self.track_type) @@ -1381,7 +1358,7 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa self.classname = "turret_main"; - self.tur_active = 1; + self.active = ACTIVE_ACTIVE; // In ONS mode, and linked to a ONS ent. need to call the use to set team. if (g_onslaught && ee) @@ -1391,10 +1368,8 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa } turret_link(); - turret_stdproc_respawn(); - - if (!turret_tag_fire_update()) - dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n"); + turret_stdproc_respawn(); + turret_tag_fire_update(); return 1; } diff --git a/qcsrc/server/tturrets/system/system_misc.qc b/qcsrc/server/tturrets/system/system_misc.qc index b870e0f55..1c0a3bad5 100644 --- a/qcsrc/server/tturrets/system/system_misc.qc +++ b/qcsrc/server/tturrets/system/system_misc.qc @@ -113,7 +113,8 @@ vector angleofs3(vector from, vector from_a, entity to) * Update self.tur_shotorg by getting up2date bone info * NOTICE this func overwrites the global v_forward, v_right and v_up vectors. */ -float turret_tag_fire_update() +#define turret_tag_fire_update() self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire"));v_forward = normalize(v_forward) +float turret_tag_fire_update_s() { if(!self.tur_head) { diff --git a/qcsrc/server/tturrets/units/unit_fusionreactor.qc b/qcsrc/server/tturrets/units/unit_fusionreactor.qc index e499a29c6..8118b8f23 100644 --- a/qcsrc/server/tturrets/units/unit_fusionreactor.qc +++ b/qcsrc/server/tturrets/units/unit_fusionreactor.qc @@ -62,7 +62,7 @@ void turret_fusionreactor_dinit() self.turrcaps_flags = TFL_TURRCAPS_SUPPORT | TFL_TURRCAPS_AMMOSOURCE; self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE; self.target_select_flags = TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_OWNTEAM | TFL_TARGETSELECT_RANGELIMTS; - self.firecheck_flags = TFL_FIRECHECK_OWM_AMMO | TFL_FIRECHECK_OTHER_AMMO | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_WORLD; + self.firecheck_flags = TFL_FIRECHECK_OWM_AMMO | TFL_FIRECHECK_OTHER_AMMO | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_DEAD; self.shoot_flags = TFL_SHOOT_HITALLVALID; self.aim_flags = TFL_AIM_NO; self.track_flags = TFL_TRACK_NO; diff --git a/qcsrc/server/tturrets/units/unit_hellion.qc b/qcsrc/server/tturrets/units/unit_hellion.qc index c5d57dd62..08bfad2a6 100644 --- a/qcsrc/server/tturrets/units/unit_hellion.qc +++ b/qcsrc/server/tturrets/units/unit_hellion.qc @@ -98,7 +98,7 @@ void turret_hellion_dinit() self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_FASTPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL; self.aim_flags = TFL_AIM_SIMPLE; self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK ; - self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_TEAMCECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF | TFL_FIRECHECK_OWM_AMMO; + self.firecheck_flags = TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_TEAMCECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF | TFL_FIRECHECK_OWM_AMMO; self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE; if (turret_stdproc_init("hellion_std", "models/turrets/base.md3", "models/turrets/hellion.md3", TID_HELLION) == 0) diff --git a/qcsrc/server/tturrets/units/unit_hk.qc b/qcsrc/server/tturrets/units/unit_hk.qc index a4d81d354..d61289dcb 100644 --- a/qcsrc/server/tturrets/units/unit_hk.qc +++ b/qcsrc/server/tturrets/units/unit_hk.qc @@ -293,7 +293,7 @@ void turret_hk_dinit() self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE; self.aim_flags = TFL_AIM_SIMPLE; self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TRIGGERTARGET | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK; - self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_TEAMCECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF; + self.firecheck_flags = TFL_FIRECHECK_DEAD | TFL_FIRECHECK_TEAMCECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF; self.shoot_flags = TFL_SHOOT_CLEARTARGET; if (turret_stdproc_init("hk_std", "models/turrets/base.md3", "models/turrets/hk.md3", TID_HK) == 0) diff --git a/qcsrc/server/tturrets/units/unit_mlrs.qc b/qcsrc/server/tturrets/units/unit_mlrs.qc index 57c080838..65c0ed058 100644 --- a/qcsrc/server/tturrets/units/unit_mlrs.qc +++ b/qcsrc/server/tturrets/units/unit_mlrs.qc @@ -29,7 +29,7 @@ void turret_mlrs_dinit() self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL; self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE; - self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;// | TFL_AIM_GROUND2; + self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE; if (turret_stdproc_init("mlrs_std", "models/turrets/base.md3", "models/turrets/mlrs.md3", TID_MLRS) == 0) { diff --git a/qcsrc/server/tturrets/units/unit_plasma.qc b/qcsrc/server/tturrets/units/unit_plasma.qc index fef7d1307..d5abf654b 100644 --- a/qcsrc/server/tturrets/units/unit_plasma.qc +++ b/qcsrc/server/tturrets/units/unit_plasma.qc @@ -48,7 +48,7 @@ void turret_plasma_std_init() self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE; // How to aim - self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2; + self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUNDGROUND; self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL; if (turret_stdproc_init("plasma_std", "models/turrets/base.md3", "models/turrets/plasma.md3", TID_PLASMA) == 0) @@ -77,7 +77,7 @@ void turret_plasma_dual_init() self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE; // How to aim at targets - self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2 ; + self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUNDGROUND ; self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL; if (turret_stdproc_init("plasma_dual", "models/turrets/base.md3", "models/turrets/plasmad.md3", TID_PLASMA_DUAL) == 0) diff --git a/qcsrc/server/tturrets/units/unit_tessla.qc b/qcsrc/server/tturrets/units/unit_tessla.qc index 23c34dc5d..454557010 100644 --- a/qcsrc/server/tturrets/units/unit_tessla.qc +++ b/qcsrc/server/tturrets/units/unit_tessla.qc @@ -101,7 +101,7 @@ void turret_tesla_fire() void turret_tesla_postthink() { - if not (self.tur_active) + if not (self.active) { self.tur_head.avelocity = '0 0 0'; return; -- 2.39.2