From 4cd637ac663c8fa0861be46fed4053087d0d2ce9 Mon Sep 17 00:00:00 2001 From: tzork Date: Fri, 12 Jun 2009 08:05:49 +0000 Subject: [PATCH] Get rid of g_turrets_unit_ewheel_std_target_range_fire, fix g_turrets_targetscan_mindelay add g_turrets_targetscan_maxdelay git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6995 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/movelib.qc | 13 ++- data/qcsrc/server/tturrets/include/turrets.qh | 11 +-- .../server/tturrets/include/turrets_early.qh | 12 +-- .../server/tturrets/system/system_aimprocs.qc | 4 +- .../server/tturrets/system/system_damage.qc | 7 +- .../server/tturrets/system/system_main.qc | 85 ++++++++++++++----- .../tturrets/system/system_scoreprocs.qc | 17 ++-- .../server/tturrets/units/unit_ewheel.qc | 2 +- data/qcsrc/server/tturrets/units/unit_flac.qc | 2 +- .../tturrets/units/unit_fusionreactor.qc | 4 +- .../server/tturrets/units/unit_hellion.qc | 2 +- data/qcsrc/server/tturrets/units/unit_hk.qc | 2 +- .../server/tturrets/units/unit_machinegun.qc | 2 +- data/qcsrc/server/tturrets/units/unit_mlrs.qc | 2 +- .../server/tturrets/units/unit_phaser.qc | 6 +- .../server/tturrets/units/unit_plasma.qc | 5 +- .../server/tturrets/units/unit_tessla.qc | 2 +- .../server/tturrets/units/unit_walker.qc | 4 +- data/turrets.cfg | 14 +-- data/unit_ewheel.cfg | 5 +- data/unit_flac.cfg | 3 +- data/unit_fusreac.cfg | 1 - data/unit_hellion.cfg | 3 +- data/unit_hk.cfg | 5 +- data/unit_machinegun.cfg | 3 +- data/unit_mlrs.cfg | 5 +- data/unit_phaser.cfg | 1 - data/unit_plasma.cfg | 10 +-- data/unit_plasma2.cfg | 3 +- data/unit_tesla.cfg | 3 +- data/unit_walker.cfg | 11 ++- 31 files changed, 149 insertions(+), 100 deletions(-) diff --git a/data/qcsrc/server/movelib.qc b/data/qcsrc/server/movelib.qc index 9ca9477cf..e028e0bf6 100644 --- a/data/qcsrc/server/movelib.qc +++ b/data/qcsrc/server/movelib.qc @@ -169,14 +169,17 @@ void movelib_beak_simple(float force) { float mspeed; vector mdir; + float vz; mspeed = max(0,vlen(self.velocity) - force); mdir = normalize(self.velocity); + vz = self.velocity_z; self.velocity = mdir * mspeed; + self.velocity_z = vz; } -void movelib_groundalign4point(float spring_length,float spring_up) +void movelib_groundalign4point(float spring_length,float spring_up,float blendrate) { vector a,b,c,d,e,r,push_angle, ahead,side; @@ -219,9 +222,13 @@ void movelib_groundalign4point(float spring_length,float spring_up) push_angle_z = (b_z - a_z) * 45; push_angle_z += (d_z - c_z) * 45; - self.angles_x += push_angle_x * 0.95; - self.angles_z += push_angle_z * 0.95; + //self.angles_x += push_angle_x * 0.95; + //self.angles_z += push_angle_z * 0.95; + self.angles_x = ((1-blendrate) * self.angles_x) + (push_angle_x * blendrate); + self.angles_z = ((1-blendrate) * self.angles_z) + (push_angle_z * blendrate); + + //a = self.origin; setorigin(self,r); } diff --git a/data/qcsrc/server/tturrets/include/turrets.qh b/data/qcsrc/server/tturrets/include/turrets.qh index 8e67ada65..fa70be21b 100644 --- a/data/qcsrc/server/tturrets/include/turrets.qh +++ b/data/qcsrc/server/tturrets/include/turrets.qh @@ -17,12 +17,13 @@ #include "../units/unit_mlrs.qc" /// Basic multibay RL #include "../units/unit_hellion.qc" /// Seeking missiles MLRS #include "../units/unit_flac.qc" /// anti missile turret -#include "../units/unit_phaser.qc" /// ZzzapT -#include "../units/unit_hk.qc" /// Hunter killers +#include "../units/unit_phaser.qc" /// ZzzapT +#include "../units/unit_hk.qc" /// Hunter killers #include "../units/unit_machinegun.qc" /// whacka -#include "../units/unit_tessla.qc" /// Chain lightning capabale turret -#include "../units/unit_walker.qc" -#include "../units/unit_ewheel.qc" +#include "../units/unit_tessla.qc" /// Chain lightning capabale turret +#include "../units/unit_walker.qc" /// Moving minigun-rocket-meele err thing +#include "../units/unit_ewheel.qc" /// A evil wheel. with guns on. +//#include "../units/unit_repulsor.qc" /// Fires a wave that knocks foes back //#include "../units/unit_hive.qc" #endif // TTURRETS_ENABLED diff --git a/data/qcsrc/server/tturrets/include/turrets_early.qh b/data/qcsrc/server/tturrets/include/turrets_early.qh index 3700df9e2..d1b1f6915 100644 --- a/data/qcsrc/server/tturrets/include/turrets_early.qh +++ b/data/qcsrc/server/tturrets/include/turrets_early.qh @@ -264,7 +264,7 @@ vector real_origin(entity ent); // Aim from this point, //.vector tur_aimorg; -/// and shoot from here. (could be non constant, think MLRS) +/// and shoot from here. (can be non constant, think MLRS) .vector tur_shotorg; /// Aim at this spot @@ -273,8 +273,8 @@ vector real_origin(entity ent); /// Predicted time the round will impact .float tur_impacttime; -/// Predicted place the round will impact -.vector tur_impactpoint; +// Predicted place the round will impact +//.vector tur_impactpoint; // unused /// What entity the aimtrace hit, if any. .entity tur_impactent; @@ -318,8 +318,8 @@ vector real_origin(entity ent); .float target_range; /// Dont consider targets closer then .float target_range_min; -/// Engage fire routine on targets within -.float target_range_fire; +// Engage fire routine on targets within +//.float target_range_fire; // no practical use aymore, work with target_range insted. /// Targets closer to this are prefered .float target_range_optimal; @@ -340,6 +340,8 @@ vector real_origin(entity ent); .float target_select_playerbias; /// Field of view //.float target_select_fov; +/// Last thimestamp this surret aquierd a valid target +.float target_select_time; /* * Aim refers to real aiming, not gun pos (thats done by track) diff --git a/data/qcsrc/server/tturrets/system/system_aimprocs.qc b/data/qcsrc/server/tturrets/system/system_aimprocs.qc index 89b736445..0f35b8739 100644 --- a/data/qcsrc/server/tturrets/system/system_aimprocs.qc +++ b/data/qcsrc/server/tturrets/system/system_aimprocs.qc @@ -58,7 +58,7 @@ vector turret_stdproc_aim_generic() } - // tnx and all credit to Rudolf "div0" Polzer for this solution. + // tnx to Rudolf "div0" Polzer for this solution. // hmm tobad it dont work. /* vector q; @@ -69,7 +69,7 @@ vector turret_stdproc_aim_generic() impact_time = q_y; */ - prep = pre_pos + (self.enemy.velocity * (impact_time+mintime)); + prep = pre_pos + (self.enemy.velocity * (impact_time + mintime)); if(self.aim_flags & TFL_AIM_ZPREDICT) if not(self.enemy.flags & FL_ONGROUND) diff --git a/data/qcsrc/server/tturrets/system/system_damage.qc b/data/qcsrc/server/tturrets/system/system_damage.qc index 6ce99a783..603934196 100644 --- a/data/qcsrc/server/tturrets/system/system_damage.qc +++ b/data/qcsrc/server/tturrets/system/system_damage.qc @@ -144,6 +144,8 @@ void turret_stdproc_die() self.alpha = -1; self.tur_head.alpha = self.alpha; + self.customizeentityforclient = SUB_False; + self.tur_head.customizeentityforclient = SUB_False; self.event_damage = SUB_Null; self.tur_head.event_damage = SUB_Null; @@ -246,7 +248,10 @@ void turret_stdproc_respawn() self.tur_head.solid = self.solid; self.alpha = 1; - self.tur_head.alpha = self.alpha; + self.tur_head.alpha = self.alpha; + self.customizeentityforclient = SUB_True; + self.tur_head.customizeentityforclient = SUB_True; + self.takedamage = DAMAGE_AIM; self.tur_head.takedamage = self.takedamage; diff --git a/data/qcsrc/server/tturrets/system/system_main.qc b/data/qcsrc/server/tturrets/system/system_main.qc index 285244372..ebf7217c3 100644 --- a/data/qcsrc/server/tturrets/system/system_main.qc +++ b/data/qcsrc/server/tturrets/system/system_main.qc @@ -1,8 +1,26 @@ #define cvar_base "g_turrets_unit_" -void load_unit_settings(entity ent,string unitname,float is_reload) +/* +float turret_customizeentityforclient() +{ +} + +float Turret_SendEntity(entity to, float sf) { + WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET); + WriteCoord(MSG_ENTITY, self.tur_head.angles_x); + WriteCoord(MSG_ENTITY, self.tur_head.angles_y); + WriteByte(MSG_ENTITY, self.tur_head.frame); + + //WriteCoord(MSG_ENTITY, self.tur_head.angles_z); + + return TRUE; +} +*/ + +void load_unit_settings(entity ent,string unitname,float is_reload) +{ string sbase; // dprint("Reloading turret ",e_turret.netname,"\n"); @@ -44,7 +62,7 @@ void load_unit_settings(entity ent,string unitname,float is_reload) ent.target_range = cvar(strcat(sbase,"_target_range")) * ent.turret_scale_range; ent.target_range_min = cvar(strcat(sbase,"_target_range_min")) * ent.turret_scale_range; - ent.target_range_fire = cvar(strcat(sbase,"_target_range_fire")) * ent.turret_scale_range; + //ent.target_range_fire = cvar(strcat(sbase,"_target_range_fire")) * ent.turret_scale_range; ent.target_range_optimal = cvar(strcat(sbase,"_target_range_optimal")) * ent.turret_scale_range; ent.target_select_rangebias = cvar(strcat(sbase,"_target_select_rangebias")); @@ -96,7 +114,7 @@ void turret_stdproc_nothing() **/ void turret_do_updates(entity t_turret) { - vector enemy_pos; + vector enemy_pos,oldpos; entity oldself; oldself = self; @@ -106,7 +124,7 @@ void turret_do_updates(entity t_turret) turret_tag_fire_update(); - self.tur_shotdir_updated = v_forward; + self.tur_shotdir_updated = normalize(v_forward); self.tur_dist_enemy = vlen(self.tur_shotorg - enemy_pos); self.tur_dist_aimpos = vlen(self.tur_shotorg - self.tur_aimpos); @@ -114,7 +132,7 @@ void turret_do_updates(entity t_turret) if(self.firecheck_flags & TFL_FIRECHECK_VERIFIED) if(self.enemy) { - enemy_pos = self.enemy.origin; + oldpos = self.enemy.origin; setorigin(self.enemy,self.tur_aimpos); } @@ -124,11 +142,11 @@ void turret_do_updates(entity t_turret) if(self.firecheck_flags & TFL_FIRECHECK_VERIFIED) if(self.enemy) - setorigin(self.enemy,enemy_pos); + setorigin(self.enemy,oldpos); - self.tur_impactpoint = trace_endpos; + //self.tur_impactpoint = trace_endpos; self.tur_impactent = trace_ent; - self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos); + self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos) - (vlen(self.enemy.maxs - self.enemy.mins)*0.5); self.tur_impacttime = vlen(self.tur_shotorg - trace_endpos) / self.shot_speed; self = oldself; @@ -388,7 +406,7 @@ float turret_stdproc_firecheck() if (self.firecheck_flags & TFL_FIRECHECK_DISTANCES) { // Not close enougth? - if (self.tur_dist_aimpos > self.target_range_fire) return 0; + //if (self.tur_dist_aimpos > self.target_range_fire) return 0; // To close? if (self.tur_dist_aimpos < self.target_range_min) return 0; @@ -400,7 +418,9 @@ float turret_stdproc_firecheck() // aim<->predicted impact if (self.firecheck_flags & TFL_FIRECHECK_AIMDIST) - if (self.tur_dist_impact_to_aimpos > self.aim_firetolerance_dist) return 0; + if (self.tur_dist_impact_to_aimpos > self.aim_firetolerance_dist) + if (self.tur_impactent != self.enemy) + return 0; // Volly status if (self.shot_volly > 1) @@ -702,7 +722,7 @@ void turret_think() } else if(self.shoot_flags & TFL_SHOOT_CUSTOM) { - // This one is doing something oddball. assume its handles what needs to be handled. + // This one is doing something.. oddball. assume its handles what needs to be handled. // Predict? if not((self.aim_flags & TFL_AIM_NO)) @@ -745,10 +765,14 @@ void turret_think() } // Check if we have a vailid enemy, and try to find one if we dont. - if ((turret_validate_target(self,self.enemy,self.target_validate_flags) <= 0) && (self.cnt < time)) + if( ((self.target_select_time + cvar("g_turrets_targetscan_maxdelay")) < time) + || (turret_validate_target(self,self.enemy,self.target_validate_flags) <= 0) ) + if not (self.target_select_time + cvar("g_turrets_targetscan_mindelay") > time) { self.enemy = turret_select_target(); - self.cnt = time + cvar("g_turrets_targetscan_mindelay"); + //if(self.enemy) + self.target_select_time = time; + } @@ -824,7 +848,7 @@ void turret_stdproc_fire() } /* - When .used a turret switched team to activator.team. + When .used a turret switch team to activator.team. If activator is world, the turrets goes inactive. */ void turret_stdproc_use() @@ -840,17 +864,28 @@ void turret_stdproc_use() } +void turret_link() +{ + //Net_LinkEntity(self, FALSE, 0, Turret_SendEntity); + self.think = turret_think; + self.nextthink = time; +} + /* * Standard turret initialization. use this! * (unless you have a very good reason not to) -* Any special stuff like multiple cannon models should be done -* after this is proc called. -* if the return value is 0, the turret _must_ be removed. +* if the return value is 0, the turret should be removed. */ -float turret_stdproc_init (string cvar_base_name) +float turret_stdproc_init (string cvar_base_name, float csqc_shared) { entity e,ee; + if(csqc_shared) + { + dprint("turrets: csqc_shared requested but not implemented. expect strange things to happen.\n"); + csqc_shared = 0; + } + // Are turrets allowed atm? if (cvar("g_turrets") == 0) return 0; @@ -975,12 +1010,12 @@ float turret_stdproc_init (string cvar_base_name) self.target_range_min = self.shot_radius * 2; self.target_range_min = bound(0,self.target_range_min,MAX_SHOT_DISTANCE); - if (!self.target_range_fire) - self.target_range_fire = self.target_range * 0.8; - self.target_range_fire = bound(0,self.target_range_fire,MAX_SHOT_DISTANCE); + //if (!self.target_range_fire) + // self.target_range_fire = self.target_range * 0.8; + //self.target_range_fire = bound(0,self.target_range_fire,MAX_SHOT_DISTANCE); if (!self.target_range_optimal) - self.target_range_optimal = self.target_range_fire * 0.5; + self.target_range_optimal = self.target_range * 0.5; self.target_range_optimal = bound(0,self.target_range_optimal,MAX_SHOT_DISTANCE); @@ -1185,7 +1220,11 @@ float turret_stdproc_init (string cvar_base_name) self.bot_attack = TRUE; // Initiate the main AI loop - self.think = turret_think; + if(csqc_shared) + self.think = turret_link; + else + self.think = turret_think; + self.nextthink = time + self.ticrate; self.tur_head.team = self.team; diff --git a/data/qcsrc/server/tturrets/system/system_scoreprocs.qc b/data/qcsrc/server/tturrets/system/system_scoreprocs.qc index 3051370dc..bcc63054b 100644 --- a/data/qcsrc/server/tturrets/system/system_scoreprocs.qc +++ b/data/qcsrc/server/tturrets/system/system_scoreprocs.qc @@ -36,11 +36,12 @@ float turret_stdproc_targetscore_generic(entity e_turret,entity e_target) float d_dist; // Defendmode Distance float score; // Total score + float d_score; // Distance score - //float da_score; // Distance from aimpoint score float a_score; // Angular score float m_score; // missile score float p_score; // player score + //float da_score; // Distance from aimpoint score float ikr; // ideal kill range @@ -92,12 +93,15 @@ float turret_stdproc_targetscore_generic(entity e_turret,entity e_target) (m_score * e_turret.target_select_missilebias) + (p_score * e_turret.target_select_playerbias); - if(e_turret.target_range_fire < vlen(e_turret.tur_shotorg - real_origin(e_target))) - score *= 0.1; + if(e_turret.target_range < vlen(e_turret.tur_shotorg - real_origin(e_target))) + { + dprint("Wtf?\n"); + score *= 0.001; + } -#ifdef TURRET_DEBUG - string sd,sv,sa,sm,sp,ss; - string sdt,svt,sat,smt,spt; +#ifndef TURRET_DEBUG + string sd,sa,sm,sp,ss; + string sdt,sat,smt,spt; sd = ftos(d_score); d_score *= e_turret.target_select_rangebias; @@ -123,7 +127,6 @@ float turret_stdproc_targetscore_generic(entity e_turret,entity e_target) ss = ftos(score); bprint("^3Target scores^7 \[ ",e_turret.netname, " \] ^3for^7 \[ ", e_target.netname," \]\n"); bprint("^5Range:\[ ",sd, " \]^2+bias:\[ ",sdt," \]\n"); - //bprint("^5Volly:\[ ",sv, " \]^2+bias:\[ ",svt," \]\n"); bprint("^5Angle:\[ ",sa, " \]^2+bias:\[ ",sat," \]\n"); bprint("^5Missile:\[ ",sm," \]^2+bias:\[ ",smt," \]\n"); bprint("^5Player:\[ ",sp, " \]^2+bias:\[ ",spt," \]\n"); diff --git a/data/qcsrc/server/tturrets/units/unit_ewheel.qc b/data/qcsrc/server/tturrets/units/unit_ewheel.qc index 2ea51a8ef..5251edb21 100644 --- a/data/qcsrc/server/tturrets/units/unit_ewheel.qc +++ b/data/qcsrc/server/tturrets/units/unit_ewheel.qc @@ -439,7 +439,7 @@ void turret_ewheel_dinit() self.turret_respawnhook = ewheel_respawnhook; self.turret_diehook = ewheel_diehook; - if (turret_stdproc_init("ewheel_std") == 0) + if (turret_stdproc_init("ewheel_std",0) == 0) { remove(self); return; diff --git a/data/qcsrc/server/tturrets/units/unit_flac.qc b/data/qcsrc/server/tturrets/units/unit_flac.qc index 45430e762..fca20979e 100644 --- a/data/qcsrc/server/tturrets/units/unit_flac.qc +++ b/data/qcsrc/server/tturrets/units/unit_flac.qc @@ -91,7 +91,7 @@ void turret_flac_dinit() self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE; self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE; - if (turret_stdproc_init("flac_std") == 0) + if (turret_stdproc_init("flac_std",0) == 0) { remove(self); return; diff --git a/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc b/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc index 107e087c8..021e09a43 100644 --- a/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc +++ b/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc @@ -11,7 +11,7 @@ float turret_fusionreactor_firecheck() if (self.ammo < self.shot_dmg) return 0; if (self.enemy.ammo >= self.enemy.ammo_max) return 0; - if (self.tur_dist_aimpos > self.target_range_fire) return 0; + if (self.tur_dist_aimpos > self.target_range) return 0; if (self.tur_dist_aimpos < self.target_range_min) return 0; return 1; @@ -49,7 +49,7 @@ void turret_fusionreactor_dinit() self.aim_flags = TFL_AIM_NO; self.track_flags = TFL_TRACK_NO; self.turret_respawnhook = turret_fusionreactor_respawnhook; - if (turret_stdproc_init("fusreac_std") == 0) + if (turret_stdproc_init("fusreac_std",0) == 0) { remove(self); return; diff --git a/data/qcsrc/server/tturrets/units/unit_hellion.qc b/data/qcsrc/server/tturrets/units/unit_hellion.qc index ed2beb854..45819f963 100644 --- a/data/qcsrc/server/tturrets/units/unit_hellion.qc +++ b/data/qcsrc/server/tturrets/units/unit_hellion.qc @@ -188,7 +188,7 @@ void turret_hellion_dinit() 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.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE; - if (turret_stdproc_init("hellion_std") == 0) + if (turret_stdproc_init("hellion_std",0) == 0) { remove(self); return; diff --git a/data/qcsrc/server/tturrets/units/unit_hk.qc b/data/qcsrc/server/tturrets/units/unit_hk.qc index b9a7757a1..cb66db4f1 100644 --- a/data/qcsrc/server/tturrets/units/unit_hk.qc +++ b/data/qcsrc/server/tturrets/units/unit_hk.qc @@ -433,7 +433,7 @@ void turret_hk_dinit() self.shoot_flags = TFL_SHOOT_CLEARTARGET; - if (turret_stdproc_init("hk_std") == 0) + if (turret_stdproc_init("hk_std",0) == 0) { remove(self); return; diff --git a/data/qcsrc/server/tturrets/units/unit_machinegun.qc b/data/qcsrc/server/tturrets/units/unit_machinegun.qc index 9f0c8ffc8..81006bbd7 100644 --- a/data/qcsrc/server/tturrets/units/unit_machinegun.qc +++ b/data/qcsrc/server/tturrets/units/unit_machinegun.qc @@ -42,7 +42,7 @@ void turret_machinegun_std_init() else self.aim_flags |= TFL_AIM_SHOTTIMECOMPENSATE; - if (turret_stdproc_init("machinegun_std") == 0) + if (turret_stdproc_init("machinegun_std",0) == 0) { remove(self); return; diff --git a/data/qcsrc/server/tturrets/units/unit_mlrs.qc b/data/qcsrc/server/tturrets/units/unit_mlrs.qc index 606663bf9..efb086d53 100644 --- a/data/qcsrc/server/tturrets/units/unit_mlrs.qc +++ b/data/qcsrc/server/tturrets/units/unit_mlrs.qc @@ -103,7 +103,7 @@ void turret_mlrs_dinit() self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE; self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_INFRONT; - if (turret_stdproc_init("mlrs_std") == 0) + if (turret_stdproc_init("mlrs_std",0) == 0) { remove(self); return; diff --git a/data/qcsrc/server/tturrets/units/unit_phaser.qc b/data/qcsrc/server/tturrets/units/unit_phaser.qc index b45b8f9c9..76aeef781 100644 --- a/data/qcsrc/server/tturrets/units/unit_phaser.qc +++ b/data/qcsrc/server/tturrets/units/unit_phaser.qc @@ -62,7 +62,7 @@ void beam_think() self = self.owner; //w_deathtypestring = "was phased out of existence"; FireImoBeam ( self.tur_shotorg, - self.tur_shotorg + self.tur_shotdir_updated * self.target_range_fire, + self.tur_shotorg + self.tur_shotdir_updated * self.target_range, '-1 -1 -1' * self.shot_radius, '1 1 1' * self.shot_radius, self.shot_force, @@ -89,7 +89,7 @@ void turret_phaser_attack() beam.nextthink = time; beam.owner = self; beam.shot_dmg = self.shot_dmg / (self.shot_speed / beam.ticrate); - beam.scale = self.target_range_fire / 256; + beam.scale = self.target_range / 256; beam.movetype = MOVETYPE_NONE; beam.enemy = self.enemy; beam.bot_dodge = TRUE; @@ -116,7 +116,7 @@ void turret_phaser_dinit() self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE; self.aim_flags = TFL_AIM_ZEASE | TFL_AIM_LEAD; - if (turret_stdproc_init("phaser_std") == 0) + if (turret_stdproc_init("phaser_std",0) == 0) { remove(self); return; diff --git a/data/qcsrc/server/tturrets/units/unit_plasma.qc b/data/qcsrc/server/tturrets/units/unit_plasma.qc index f2d2022f2..f1e4837b6 100644 --- a/data/qcsrc/server/tturrets/units/unit_plasma.qc +++ b/data/qcsrc/server/tturrets/units/unit_plasma.qc @@ -127,7 +127,7 @@ void turret_plasma_std_init() self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2; self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL; - if (turret_stdproc_init("plasma_std") == 0) + if (turret_stdproc_init("plasma_std",FALSE) == 0) { remove(self); return; @@ -143,6 +143,7 @@ void turret_plasma_std_init() setmodel(self,"models/turrets/base.md3"); setmodel(self.tur_head,"models/turrets/plasma.md3"); + // self.tur_head.alpha = -1; if (!turret_tag_setup()) dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n"); @@ -167,7 +168,7 @@ void turret_plasma_dual_init() self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2 ; self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL; - if (turret_stdproc_init("plasma_dual") == 0) + if (turret_stdproc_init("plasma_dual",0) == 0) { remove(self); return; diff --git a/data/qcsrc/server/tturrets/units/unit_tessla.qc b/data/qcsrc/server/tturrets/units/unit_tessla.qc index 7f1fc9ea6..9f2899aab 100644 --- a/data/qcsrc/server/tturrets/units/unit_tessla.qc +++ b/data/qcsrc/server/tturrets/units/unit_tessla.qc @@ -144,7 +144,7 @@ void turret_tesla_dinit() self.aim_flags = TFL_AIM_NO; self.track_flags = TFL_TRACK_NO; - if (turret_stdproc_init("tesla_std") == 0) + if (turret_stdproc_init("tesla_std",0) == 0) { remove(self); return; diff --git a/data/qcsrc/server/tturrets/units/unit_walker.qc b/data/qcsrc/server/tturrets/units/unit_walker.qc index 14360dd01..e24f8107e 100644 --- a/data/qcsrc/server/tturrets/units/unit_walker.qc +++ b/data/qcsrc/server/tturrets/units/unit_walker.qc @@ -256,7 +256,7 @@ void walker_animate() self.velocity_z = vz; if (self.flags & FL_ONGROUND) - movelib_groundalign4point(300,100); + movelib_groundalign4point(300,100,0.25); } @@ -939,7 +939,7 @@ void turret_walker_dinit() self.turret_diehook = walker_diehook; self.ticrate = 0.05; - if (turret_stdproc_init("walker_std") == 0) + if (turret_stdproc_init("walker_std",0) == 0) { remove(self); return; diff --git a/data/turrets.cfg b/data/turrets.cfg index 41042527b..d2e1015bd 100644 --- a/data/turrets.cfg +++ b/data/turrets.cfg @@ -6,13 +6,16 @@ set g_turrets_nofire 0 // Dont let turrets look for new targets more frequently then this set g_turrets_targetscan_mindelay 0.1 +// Do a targetscan at least this often regarless. +set g_turrets_targetscan_maxdelay 1 + // Turrets with no target returns to their idle aim after this much time. set g_turrets_aimidle_delay 5 // --- Units --- -// Machinegun on a stick. -exec unit_machinegun.cfg +// Machinegun on a stick. +exec unit_machinegun.cfg // Hunter killer rocket turret. "smart rockets" exec unit_hk.cfg @@ -27,7 +30,7 @@ exec unit_mlrs.cfg exec unit_flac.cfg // Support unit. Recharges friendly energy based turrets in range -exec unit_fusreac.cfg +exec unit_fusreac.cfg // "Electro" turret. exec unit_plasma.cfg @@ -41,14 +44,15 @@ exec unit_tesla.cfg // Fires a constant beam that slows down and slowly damages its target. exec unit_phaser.cfg -// The bastred son of a turret and a quake monster. +// The bastred son of a turret and a quake monster. // A walking minigun with longrage missiles and closerange meele attack. exec unit_walker.cfg // OMG! Its the Evil Wheel! :O exec unit_ewheel.cfg -// not exec'd: gauss +// +exec unit_repulsor.cfg set g_turrets_reloadcvars 0 // reload when this cfg has been exec'd alias g_turrets_reload "set g_turrets_reloadcvars 1" diff --git a/data/unit_ewheel.cfg b/data/unit_ewheel.cfg index f0fbfd0a2..bb8788221 100644 --- a/data/unit_ewheel.cfg +++ b/data/unit_ewheel.cfg @@ -1,4 +1,4 @@ -set g_turrets_unit_ewheel_std_health 200 +set g_turrets_unit_ewheel_std_health 200 set g_turrets_unit_ewheel_std_respawntime 30 // dgr / sec @@ -20,7 +20,6 @@ set g_turrets_unit_ewheel_std_shot_volly 2 set g_turrets_unit_ewheel_std_shot_volly_refire 1 set g_turrets_unit_ewheel_std_target_range 5000 -set g_turrets_unit_ewheel_std_target_range_fire 3500 set g_turrets_unit_ewheel_std_target_range_optimal 900 set g_turrets_unit_ewheel_std_target_range_min 0.1 @@ -39,4 +38,4 @@ set g_turrets_unit_ewheel_std_aim_speed 90 set g_turrets_unit_ewheel_std_aim_maxrot 20 set g_turrets_unit_ewheel_std_aim_maxpitch 45 -set g_turrets_unit_ewheel_std_track_type 1 \ No newline at end of file +set g_turrets_unit_ewheel_std_track_type 1 diff --git a/data/unit_flac.cfg b/data/unit_flac.cfg index 3f91dfccb..86ac00d49 100644 --- a/data/unit_flac.cfg +++ b/data/unit_flac.cfg @@ -1,4 +1,4 @@ -set g_turrets_unit_flac_std_health 700 +set g_turrets_unit_flac_std_health 700 set g_turrets_unit_flac_std_respawntime 90 set g_turrets_unit_flac_std_shot_dmg 25 @@ -12,7 +12,6 @@ set g_turrets_unit_flac_std_shot_volly_refire 0 set g_turrets_unit_flac_std_target_range 4000 set g_turrets_unit_flac_std_target_range_min 500 -set g_turrets_unit_flac_std_target_range_fire 3900 set g_turrets_unit_flac_std_target_range_optimal 1250 set g_turrets_unit_flac_std_target_select_rangebias 0.25 diff --git a/data/unit_fusreac.cfg b/data/unit_fusreac.cfg index 6f78cbd13..7b5c305b1 100644 --- a/data/unit_fusreac.cfg +++ b/data/unit_fusreac.cfg @@ -7,7 +7,6 @@ set g_turrets_unit_fusreac_std_shot_refire 0.1 set g_turrets_unit_fusreac_std_target_range 1024 set g_turrets_unit_fusreac_std_target_range_min 1 -set g_turrets_unit_fusreac_std_target_range_fire 1024 set g_turrets_unit_fusreac_std_ammo_max 300 set g_turrets_unit_fusreac_std_ammo 0 diff --git a/data/unit_hellion.cfg b/data/unit_hellion.cfg index 19a4af4f9..fa6fd8932 100644 --- a/data/unit_hellion.cfg +++ b/data/unit_hellion.cfg @@ -1,4 +1,4 @@ -set g_turrets_unit_hellion_std_health 500 +set g_turrets_unit_hellion_std_health 500 set g_turrets_unit_hellion_std_respawntime 90 set g_turrets_unit_hellion_std_shot_dmg 50 @@ -16,7 +16,6 @@ set g_turrets_unit_hellion_std_shot_volly_refire 4 set g_turrets_unit_hellion_std_target_range 6000 set g_turrets_unit_hellion_std_target_range_min 150 -set g_turrets_unit_hellion_std_target_range_fire 5000 set g_turrets_unit_hellion_std_target_range_optimal 4500 set g_turrets_unit_hellion_std_target_select_rangebias 0.7 diff --git a/data/unit_hk.cfg b/data/unit_hk.cfg index e68215844..0db1aa5b7 100644 --- a/data/unit_hk.cfg +++ b/data/unit_hk.cfg @@ -1,4 +1,4 @@ -set g_turrets_unit_hk_std_health 500 +set g_turrets_unit_hk_std_health 500 set g_turrets_unit_hk_std_respawntime 90 set g_turrets_unit_hk_std_shot_dmg 120 @@ -19,7 +19,6 @@ set g_turrets_unit_hk_std_shot_volly_refire 0 set g_turrets_unit_hk_std_target_range 6000 set g_turrets_unit_hk_std_target_range_min 220 -set g_turrets_unit_hk_std_target_range_fire 5000 set g_turrets_unit_hk_std_target_range_optimal 5000 set g_turrets_unit_hk_std_target_select_rangebias 0.5 @@ -35,7 +34,7 @@ set g_turrets_unit_hk_std_ammo_recharge 16 set g_turrets_unit_hk_std_aim_firetolerance_dist 500 set g_turrets_unit_hk_std_aim_speed 100 set g_turrets_unit_hk_std_aim_maxrot 360 -set g_turrets_unit_hk_std_aim_maxpitch 20 +set g_turrets_unit_hk_std_aim_maxpitch 20 set g_turrets_unit_hk_std_track_type 3 set g_turrets_unit_hk_std_track_accel_pitch 0.25 diff --git a/data/unit_machinegun.cfg b/data/unit_machinegun.cfg index 008c6ade9..b337f893d 100644 --- a/data/unit_machinegun.cfg +++ b/data/unit_machinegun.cfg @@ -1,4 +1,4 @@ -set g_turrets_unit_machinegun_std_health 256 +set g_turrets_unit_machinegun_std_health 256 set g_turrets_unit_machinegun_std_respawntime 60 set g_turrets_unit_machinegun_std_shot_dmg 10 @@ -12,7 +12,6 @@ set g_turrets_unit_machinegun_std_shot_volly_refire 1 set g_turrets_unit_machinegun_std_target_range 4500 set g_turrets_unit_machinegun_std_target_range_min 2 -set g_turrets_unit_machinegun_std_target_range_fire 3000 set g_turrets_unit_machinegun_std_target_range_optimal 1000 set g_turrets_unit_machinegun_std_target_select_rangebias 0.25 diff --git a/data/unit_mlrs.cfg b/data/unit_mlrs.cfg index 03e834b95..231596604 100644 --- a/data/unit_mlrs.cfg +++ b/data/unit_mlrs.cfg @@ -1,4 +1,4 @@ -set g_turrets_unit_mlrs_std_health 500 +set g_turrets_unit_mlrs_std_health 500 set g_turrets_unit_mlrs_std_respawntime 60 set g_turrets_unit_mlrs_std_shot_dmg 70 @@ -13,7 +13,6 @@ set g_turrets_unit_mlrs_std_shot_volly_refire 2.5 set g_turrets_unit_mlrs_std_target_range 3000 set g_turrets_unit_mlrs_std_target_range_min 500 -set g_turrets_unit_mlrs_std_target_range_fire 2000 set g_turrets_unit_mlrs_std_target_range_optimal 500 set g_turrets_unit_mlrs_std_target_select_rangebias 0.25 @@ -34,4 +33,4 @@ set g_turrets_unit_mlrs_std_aim_maxpitch 15 set g_turrets_unit_mlrs_std_track_type 3 set g_turrets_unit_mlrs_std_track_accel_pitch 0.25 set g_turrets_unit_mlrs_std_track_accel_rot 0.8 -set g_turrets_unit_mlrs_std_track_blendrate 0.3 \ No newline at end of file +set g_turrets_unit_mlrs_std_track_blendrate 0.3 diff --git a/data/unit_phaser.cfg b/data/unit_phaser.cfg index e52e22fc4..a50d06751 100644 --- a/data/unit_phaser.cfg +++ b/data/unit_phaser.cfg @@ -13,7 +13,6 @@ set g_turrets_unit_phaser_std_shot_volly_refire 5 set g_turrets_unit_phaser_std_target_range 3000 set g_turrets_unit_phaser_std_target_range_min 0 -set g_turrets_unit_phaser_std_target_range_fire 3000 set g_turrets_unit_phaser_std_target_range_optimal 1500 set g_turrets_unit_phaser_std_target_select_rangebias 0.85 diff --git a/data/unit_plasma.cfg b/data/unit_plasma.cfg index 6b0192f92..127328545 100644 --- a/data/unit_plasma.cfg +++ b/data/unit_plasma.cfg @@ -1,4 +1,4 @@ -set g_turrets_unit_plasma_std_health 500 +set g_turrets_unit_plasma_std_health 500 set g_turrets_unit_plasma_std_respawntime 60 // Do this mutch damage @@ -22,8 +22,6 @@ set g_turrets_unit_plasma_std_shot_volly_refire 0 set g_turrets_unit_plasma_std_target_range 3500 // But no close then this set g_turrets_unit_plasma_std_target_range_min 200 -// If this or closer, fire -set g_turrets_unit_plasma_std_target_range_fire 3000 // If we have a choise, prefer the ones closer to this distance set g_turrets_unit_plasma_std_target_range_optimal 500 @@ -50,12 +48,12 @@ set g_turrets_unit_plasma_std_aim_firetolerance_dist 100 // Aim how fast. for track_type 1 this is dgr/sec, for 2 & 3 its the maximum angle speed added each second set g_turrets_unit_plasma_std_aim_speed 200 // Max rottation of head -set g_turrets_unit_plasma_std_aim_maxrot 360 +set g_turrets_unit_plasma_std_aim_maxrot 360 // Max pitch of head set g_turrets_unit_plasma_std_aim_maxpitch 30 -// How the head turns. -// 1 = hard steps, good for aiming preformace, bad for visuals. +// How the head turns. +// 1 = hard steps, good for aiming preformace, bad for visuals. // 2 = smooth w/o inertia // 3 = smmoth with simulated inertia set g_turrets_unit_plasma_std_track_type 3 diff --git a/data/unit_plasma2.cfg b/data/unit_plasma2.cfg index 646a10a66..a547fdb19 100644 --- a/data/unit_plasma2.cfg +++ b/data/unit_plasma2.cfg @@ -1,4 +1,4 @@ -set g_turrets_unit_plasma_dual_health 500 +set g_turrets_unit_plasma_dual_health 500 set g_turrets_unit_plasma_dual_respawntime 60 set g_turrets_unit_plasma_dual_shot_dmg 80 @@ -13,7 +13,6 @@ set g_turrets_unit_plasma_dual_shot_volly_refire 0 set g_turrets_unit_plasma_dual_target_range 3000 set g_turrets_unit_plasma_dual_target_range_min 80 -set g_turrets_unit_plasma_dual_target_range_fire 2500 set g_turrets_unit_plasma_dual_target_range_optimal 1000 set g_turrets_unit_plasma_dual_target_select_rangebias 0.2 diff --git a/data/unit_tesla.cfg b/data/unit_tesla.cfg index 481e944a7..e005f372d 100644 --- a/data/unit_tesla.cfg +++ b/data/unit_tesla.cfg @@ -1,4 +1,4 @@ -set g_turrets_unit_tesla_std_health 1000 +set g_turrets_unit_tesla_std_health 1000 set g_turrets_unit_tesla_std_respawntime 120 set g_turrets_unit_tesla_std_shot_dmg 100 @@ -10,7 +10,6 @@ set g_turrets_unit_tesla_std_shot_volly_refire 2.5 set g_turrets_unit_tesla_std_target_range_min 0 set g_turrets_unit_tesla_std_target_range 1000 -set g_turrets_unit_tesla_std_target_range_fire 1000 set g_turrets_unit_tesla_std_target_select_playerbias 1 set g_turrets_unit_tesla_std_target_select_missilebias 1 diff --git a/data/unit_walker.cfg b/data/unit_walker.cfg index 93ed4f054..1dca3bb70 100644 --- a/data/unit_walker.cfg +++ b/data/unit_walker.cfg @@ -1,4 +1,4 @@ -set g_turrets_unit_walker_std_health 500 +set g_turrets_unit_walker_std_health 500 set g_turrets_unit_walker_std_respawntime 60 set g_turrets_unit_walker_speed_run 300 @@ -20,7 +20,6 @@ set g_turrets_unit_walker_std_shot_volly 10 set g_turrets_unit_walker_std_shot_volly_refire 1 set g_turrets_unit_walker_std_target_range 5000 -set g_turrets_unit_walker_std_target_range_fire 2000 set g_turrets_unit_walker_std_target_range_optimal 100 set g_turrets_unit_walker_std_target_range_min 0 @@ -34,9 +33,9 @@ set g_turrets_unit_walker_std_ammo_max 4000 set g_turrets_unit_walker_std_ammo 500 set g_turrets_unit_walker_std_ammo_recharge 100 -set g_turrets_unit_walker_std_aim_firetolerance_dist 64 +set g_turrets_unit_walker_std_aim_firetolerance_dist 100 set g_turrets_unit_walker_std_aim_speed 45 -set g_turrets_unit_walker_std_aim_maxrot 90 +set g_turrets_unit_walker_std_aim_maxrot 90 set g_turrets_unit_walker_std_aim_maxpitch 15 // Head (minigun) is attached. must use tractype 1 @@ -52,7 +51,7 @@ set g_turrets_unit_walker_std_rocket_force 150 set g_turrets_unit_walker_std_rocket_tunrate 0.4 set g_turrets_unit_walker_std_rocket_speed 900 -// Meele attack. Only happens when theres a target directly in front +// Meele attack. Only happens when theres a target directly in front set g_turrets_unit_walker_std_meele_range 150 set g_turrets_unit_walker_std_meele_dmg 100 -set g_turrets_unit_walker_std_meele_force 600 \ No newline at end of file +set g_turrets_unit_walker_std_meele_force 600 -- 2.39.2