From 09f6c6c9046180b4bbdf679dd755cd2f9e874c3e Mon Sep 17 00:00:00 2001 From: tzork Date: Mon, 11 Jan 2010 17:20:13 +0000 Subject: [PATCH] All turrets: Get rid of TFL_TURRCAPS_HEADATTACHED, all turrets use attached heads now. Walker & eWheel: Get rid of verbstack and use .framegroups git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8494 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- .../turrets/walker_body.md3.framegroups | 12 + data/qcsrc/server/miscfunctions.qc | 41 +- .../server/tturrets/include/turrets_early.qh | 2 +- .../server/tturrets/system/system_damage.qc | 48 +- .../server/tturrets/system/system_main.qc | 230 +++--- .../server/tturrets/system/system_misc.qc | 4 +- .../server/tturrets/units/unit_ewheel.qc | 165 ++-- .../server/tturrets/units/unit_walker.qc | 702 ++++++------------ data/unit_ewheel.cfg | 7 +- data/unit_walker.cfg | 9 +- 10 files changed, 450 insertions(+), 770 deletions(-) create mode 100644 data/models/turrets/walker_body.md3.framegroups diff --git a/data/models/turrets/walker_body.md3.framegroups b/data/models/turrets/walker_body.md3.framegroups new file mode 100644 index 000000000..590155efb --- /dev/null +++ b/data/models/turrets/walker_body.md3.framegroups @@ -0,0 +1,12 @@ +1 1 1 0 // ANIM_NO +35 55 20 1 // ANIM_TURN +5 25 20 1 // ANIM_WALK +5 25 40 1 // ANIM_RUN +35 55 20 1 // ANIM_STRAFE_L +65 85 20 1 // ANIM_STRAFE_R +95 100 20 0 // ANIM_JUMP +100 107 20 0 // ANIM_LAND +90 95 20 0 // ANIM_PAIN +123 140 40 0 // ANIM_MEELE +146 151 20 1 // ANIM_SWIM +5 25 20 1 // ANIM_ROAM diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 78142b076..196eac8c4 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -131,10 +131,10 @@ string GetAdvancedDeathReports(entity enPlayer) // Extra fragmessage information strPlayerPingColor = "^1"; else strPlayerPingColor = "^2"; - + if((cvar("sv_fragmessage_information_stats")) && (enPlayer.health >= 1)) strMessage = strcat(strMessage, "\n^7(Health ^1", ftos(nPlayerHealth), "^7 / Armor ^2", ftos(nPlayerArmor), "^7)"); - + if(cvar("sv_fragmessage_information_ping")) { if(clienttype(enPlayer) == CLIENTTYPE_BOT) // Bots have no ping strMessage = strcat(strMessage, "\n^7(^2Bot"); @@ -144,7 +144,7 @@ string GetAdvancedDeathReports(entity enPlayer) // Extra fragmessage information if(cvar("sv_fragmessage_information_handicap") == 2) if(nPlayerHandicap <= 1) strMessage = strcat(strMessage, "^7 / Handicap ^2Off^7)"); - else + else strMessage = strcat(strMessage, "^7 / Handicap ^2", ftos(nPlayerHandicap), "^7)"); else if not(nPlayerHandicap <= 1) strMessage = strcat(strMessage, "^7 / Handicap ^2", ftos(nPlayerHandicap), "^7)"); @@ -154,7 +154,7 @@ string GetAdvancedDeathReports(entity enPlayer) // Extra fragmessage information if(cvar("sv_fragmessage_information_handicap") == 2) if(nPlayerHandicap <= 1) strMessage = strcat(strMessage, "\n^7(Handicap ^2Off^7)"); - else + else strMessage = strcat(strMessage, "\n^7(Handicap ^2", ftos(nPlayerHandicap), "^7)"); else if(nPlayerHandicap > 1) strMessage = strcat(strMessage, "\n^7(Handicap ^2", ftos(nPlayerHandicap), "^7)"); @@ -233,7 +233,7 @@ void relocate_spawnpoint() PL_MAX = stov(cvar_string("sv_player_maxs")); PL_CROUCH_VIEW_OFS = stov(cvar_string("sv_player_crouch_viewoffset")); PL_CROUCH_MIN = stov(cvar_string("sv_player_crouch_mins")); - PL_CROUCH_MAX = stov(cvar_string("sv_player_crouch_maxs")); + PL_CROUCH_MAX = stov(cvar_string("sv_player_crouch_maxs")); // nudge off the floor setorigin(self, self.origin + '0 0 1'); @@ -448,7 +448,7 @@ string formatmessage(string msg) n = n - 1; p1 = strstr(msg, "%", p); // NOTE: this destroys msg as it's a tempstring! p2 = strstr(msg, "\\", p); // NOTE: this destroys msg as it's a tempstring! - + if (p1 < 0) p1 = p2; @@ -456,7 +456,7 @@ string formatmessage(string msg) p2 = p1; p = min(p1, p2); - + if (p < 0) break; @@ -2833,3 +2833,30 @@ float cvar_normal(string n) } #endif #define cvar_set_normal cvar_set_builtin + +void defer_think() +{ + entity oself; + + oself = self; + self = self.owner; + oself.think = SUB_Remove; + oself.nextthink = time; + + oself.use(); +} + +/* + Execute func() after time + fdelay. + self when func is executed = self when defer is called +*/ +void defer(float fdelay, void() func) +{ + entity e; + + e = spawn(); + e.owner = self; + e.use = func; + e.think = defer_think; + e.nextthink = time + fdelay; +} diff --git a/data/qcsrc/server/tturrets/include/turrets_early.qh b/data/qcsrc/server/tturrets/include/turrets_early.qh index 186a2735a..25cba992c 100644 --- a/data/qcsrc/server/tturrets/include/turrets_early.qh +++ b/data/qcsrc/server/tturrets/include/turrets_early.qh @@ -197,7 +197,7 @@ vector real_origin(entity ent); #define TFL_TURRCAPS_MOVE 16384 /// Will roam arround even if not chasing anyting #define TFL_TURRCAPS_ROAM 32768 -#define TFL_TURRCAPS_HEADATTACHED 65536 +#define TFL_TURRCAPS_ISTURRET 65536 /// Ammo types needed and/or provided .float ammo_flags; diff --git a/data/qcsrc/server/tturrets/system/system_damage.qc b/data/qcsrc/server/tturrets/system/system_damage.qc index 2df9efaba..9600c583c 100644 --- a/data/qcsrc/server/tturrets/system/system_damage.qc +++ b/data/qcsrc/server/tturrets/system/system_damage.qc @@ -148,9 +148,7 @@ void turret_stdproc_die() self.tur_head.customizeentityforclient = SUB_False; self.event_damage = SUB_Null; - self.tur_head.event_damage = SUB_Null; self.takedamage = DAMAGE_NO; - self.tur_head.takedamage = self.takedamage; self.effects = 0; self.tur_head.effects = self.effects; @@ -240,30 +238,23 @@ void turret_stdproc_respawn() } self.deadflag = DEAD_NO; - self.tur_head.deadflag = self.deadflag; self.effects = 0; self.tur_head.effects = self.effects; self.solid = SOLID_BBOX; - self.tur_head.solid = self.solid; self.alpha = 1; 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; - self.event_damage = turret_stdproc_damage; - self.tur_head.event_damage = self.event_damage; self.avelocity = '0 0 0'; self.tur_head.avelocity = self.avelocity; self.tur_head.angles = self.idle_aim; self.health = self.tur_health; - self.tur_head.health = self.tur_health; self.enemy = world; self.volly_counter = self.shot_volly; @@ -282,26 +273,19 @@ void turret_stdproc_respawn() */ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce) { - entity baseent; - - if (self.owner) - baseent = self.owner; - else - baseent = self; // Enougth allready! if (self.health <= 0) return; // Inactive turrets take no damage. (hm..) - if not (baseent.tur_active) + if not (self.tur_active) return; if (teamplay != 0) if (self.team == attacker.team) { // This does not happen anymore. Re-enable if you fix that. - //if(attacker.flags & FL_CLIENT) if(clienttype(attacker) == CLIENTTYPE_REAL) sprint(attacker, "\{1}Turret tells you: I'm on your team!\n"); @@ -314,17 +298,16 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo self.health = self.health - damage; // thorw head slightly off aim when hit? - if (self.classname == "turret_head") - if (baseent.damage_flags & TFL_DMG_HEADSHAKE) - { - //baseent.tur_aimoff_x += (random() * damage); - //baseent.tur_aimoff_y += ((random()*0.75) * damage); - self.angles_x = self.angles_x + (-0.5 + random()) * damage; - self.angles_y = self.angles_y + (-0.5 + random()) * damage; - } + if (self.damage_flags & TFL_DMG_HEADSHAKE) + { + //baseent.tur_aimoff_x += (random() * damage); + //baseent.tur_aimoff_y += ((random()*0.75) * damage); + self.tur_head.angles_x = self.tur_head.angles_x + (-0.5 + random()) * damage; + self.tur_head.angles_y = self.tur_head.angles_y + (-0.5 + random()) * damage; + } - if (baseent.turrcaps_flags & TFL_TURRCAPS_MOVE) - baseent.velocity = baseent.velocity + vforce; + if (self.turrcaps_flags & TFL_TURRCAPS_MOVE) + self.velocity = self.velocity + vforce; // FIXME: Better damage feedback // Start burning when we have 10% or less health left @@ -333,11 +316,10 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo if (self.health <= 0) { - baseent.event_damage = SUB_Null; - baseent.tur_head.event_damage = SUB_Null; - baseent.takedamage = DAMAGE_NO; - baseent.tur_head.takedamage = baseent.takedamage; - baseent.nextthink = time; - baseent.think = turret_stdproc_die; + self.event_damage = SUB_Null; + self.tur_head.event_damage = SUB_Null; + self.takedamage = DAMAGE_NO; + self.nextthink = time; + self.think = turret_stdproc_die; } } diff --git a/data/qcsrc/server/tturrets/system/system_main.qc b/data/qcsrc/server/tturrets/system/system_main.qc index 028c96e6c..450a14fcf 100644 --- a/data/qcsrc/server/tturrets/system/system_main.qc +++ b/data/qcsrc/server/tturrets/system/system_main.qc @@ -42,10 +42,7 @@ void load_unit_settings(entity ent,string unitname,float is_reload) ent.enemy = world; ent.tur_head.avelocity = '0 0 0'; - if (ent.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED) - ent.tur_head.angles = '0 0 0'; - else - ent.tur_head.angles = ent.angles; + ent.tur_head.angles = '0 0 0'; } ent.health = cvar(strcat(sbase,"_health")) * ent.turret_scale_health; @@ -232,7 +229,6 @@ void turret_stdproc_track() { vector target_angle; // This is where we want to aim vector move_angle; // This is where we can aim - vector a_off; float f_tmp; if (self.track_flags == TFL_TRACK_NO) @@ -243,10 +239,7 @@ void turret_stdproc_track() else if (self.enemy == world) { if(time > self.lip) - if (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED) - target_angle = self.idle_aim + self.angles; - else - target_angle = self.idle_aim; + target_angle = self.idle_aim + self.angles; else target_angle = vectoangles(normalize(self.tur_aimpos - self.tur_shotorg)); } @@ -261,19 +254,11 @@ void turret_stdproc_track() self.tur_head.angles_y = safeangle(self.tur_head.angles_y); // Find the diffrence between where we currently aim and where we want to aim - if (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED) - { - move_angle = target_angle - (self.angles + self.tur_head.angles); - move_angle = shortangle_vxy(move_angle,(self.angles + self.tur_head.angles)); - a_off = '0 0 0'; + move_angle = target_angle - (self.angles + self.tur_head.angles); + move_angle = shortangle_vxy(move_angle,(self.angles + self.tur_head.angles)); + + - } - else - { - move_angle = target_angle - self.tur_head.angles; - move_angle = shortangle_vxy(move_angle,self.tur_head.angles); - a_off = self.angles; - } switch(self.track_type) { @@ -282,21 +267,21 @@ void turret_stdproc_track() if (self.track_flags & TFL_TRACK_PITCH) { self.tur_head.angles_x += bound(-f_tmp,move_angle_x, f_tmp); - if(self.tur_head.angles_x + a_off_x > self.aim_maxpitch) - self.tur_head.angles_x = a_off_x + self.aim_maxpitch; + if(self.tur_head.angles_x > self.aim_maxpitch) + self.tur_head.angles_x = self.aim_maxpitch; - if(self.tur_head.angles_x + a_off_x < -self.aim_maxpitch) - self.tur_head.angles_x = a_off_x - self.aim_maxpitch; + if(self.tur_head.angles_x < -self.aim_maxpitch) + self.tur_head.angles_x = self.aim_maxpitch; } if (self.track_flags & TFL_TRACK_ROT) { self.tur_head.angles_y += bound(-f_tmp, move_angle_y, f_tmp); - if((self.tur_head.angles_y - a_off_y) > self.aim_maxrot) - self.tur_head.angles_y = a_off_y + self.aim_maxrot; + if(self.tur_head.angles_y > self.aim_maxrot) + self.tur_head.angles_y = self.aim_maxrot; - if((self.tur_head.angles_y - a_off_y) < -self.aim_maxrot) - self.tur_head.angles_y = a_off_y - self.aim_maxrot; + if(self.tur_head.angles_y < -self.aim_maxrot) + self.tur_head.angles_y = self.aim_maxrot; } return; @@ -320,15 +305,15 @@ void turret_stdproc_track() if (self.track_flags & TFL_TRACK_PITCH) { self.tur_head.avelocity_x = move_angle_x; - if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) + a_off_x > self.aim_maxpitch) + if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) > self.aim_maxpitch) { self.tur_head.avelocity_x = 0; - self.tur_head.angles_x = a_off_x + self.aim_maxpitch; + self.tur_head.angles_x = self.aim_maxpitch; } - if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) + a_off_x < -self.aim_maxpitch) + if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) < -self.aim_maxpitch) { self.tur_head.avelocity_x = 0; - self.tur_head.angles_x = a_off_x - self.aim_maxpitch; + self.tur_head.angles_x = self.aim_maxpitch; } } @@ -338,16 +323,16 @@ void turret_stdproc_track() { self.tur_head.avelocity_y = move_angle_y; - if(((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate)- a_off_y) > self.aim_maxrot) + if((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate) > self.aim_maxrot) { self.tur_head.avelocity_y = 0; - self.tur_head.angles_y = a_off_y + self.aim_maxrot; + self.tur_head.angles_y = self.aim_maxrot; } - if(((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate) - a_off_y) < -self.aim_maxrot) + if((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate) < -self.aim_maxrot) { self.tur_head.avelocity_y = 0; - self.tur_head.angles_y = a_off_y - self.aim_maxrot; + self.tur_head.angles_y = self.aim_maxrot; } } @@ -552,15 +537,10 @@ float turret_validate_target(entity e_turret,entity e_target,float validate_flag } // Can we even aim this thing? - if(e_turret.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED) - { - tvt_thadv = angleofs3(e_turret.tur_head.origin,e_turret.angles + e_turret.tur_head.angles ,e_target); - //tvt_thadv = angleofs(e_turret.angles,e_target); - } - else - { - tvt_thadv = angleofs(e_turret.tur_head,e_target); - } + tvt_thadv = angleofs3(e_turret.tur_head.origin,e_turret.angles + e_turret.tur_head.angles ,e_target); + //tvt_thadv = angleofs(e_turret.angles,e_target); + + tvt_tadv = shortangle_vxy(angleofs(e_turret,e_target),e_turret.angles); tvt_thadf = vlen(tvt_thadv); @@ -864,7 +844,6 @@ void turret_fire() self.attack_finished_single = time + self.shot_volly_refire; } - #ifdef TURRET_DEBUG if (self.enemy) paint_target3(self.tur_aimpos, 64, self.tur_dbg_rvec, self.tur_impacttime + 0.25); #endif @@ -898,6 +877,7 @@ void turret_link() self.think = turret_think; self.nextthink = time; } + void turrets_manager_think() { self.nextthink = time + 1; @@ -908,9 +888,8 @@ void turrets_manager_think() e = nextent(world); while (e) { - if (e.tur_head != world) + if (e.turrcaps_flags & TFL_TURRCAPS_ISTURRET) { - load_unit_settings(e,e.cvar_basename,1); if(e.turret_postthink) e.turret_postthink(); @@ -929,8 +908,7 @@ void turrets_manager_think() */ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base, string head) { - entity e,ee; - + entity e, ee; e = find(world, classname, "turret_manager"); if not (e) @@ -941,10 +919,9 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base e.nextthink = time + 2; } - if(csqc_shared) { - dprint("turrets: csqc_shared requested but not implemented. expect strange things to happen.\n"); + dprint("WARNING: turret requested csqc_shared but this is not implemented. Expect strange things to happen.\n"); csqc_shared = 0; } @@ -952,9 +929,6 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base if (cvar("g_turrets") == 0) return 0; - // Better more then once then never. - // turret_gibs_precash(); - // Terrainbase spawnflag. This puts a enlongated model // under the turret, so it looks ok on uneaven surfaces. if (self.spawnflags & TSF_TERRAINBASE) @@ -964,16 +938,15 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base setmodel(tb,"models/turrets/terrainbase.md3"); setorigin(tb,self.origin); tb.solid = SOLID_BBOX; - //makestatic(tb); } self.cvar_basename = cvar_base_name; - load_unit_settings(self,self.cvar_basename,0); + load_unit_settings(self,self.cvar_basename, 0); // Handle turret teams. if (cvar("g_assault") != 0) { - if (!self.team) + if not (self.team) self.team = 14; // Assume turrets are on the defending side if not explicitly set otehrwize } else if not (teamplay) @@ -990,8 +963,6 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base else if(!self.team) self.team = MAX_SHOT_DISTANCE; // Group all turrets into the same team iso they dont kill eachother. - - /* * Try to guess some reasonaly defaults * for missing params and do sanety checks @@ -1000,9 +971,9 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base * as possible beforehand. */ if (self.turrcaps_flags & TFL_TURRCAPS_SUPPORT) - if (!self.ticrate) self.ticrate = 0.2; // Support units generaly dont need to have a high speed ai-loop + if not (self.ticrate) self.ticrate = 0.2; // Support units generaly dont need to have a high speed ai-loop else - if (!self.ticrate) self.ticrate = 0.1; // 10 fps for normal turrets + if not (self.ticrate) self.ticrate = 0.1; // 10 fps for normal turrets self.ticrate = bound(sys_frametime,self.ticrate,60); // keep it sane @@ -1010,64 +981,64 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base if (self.netname == "") self.netname = self.classname; - if (!self.respawntime) + if not (self.respawntime) self.respawntime = 60; self.respawntime = max(-1,self.respawntime); - if (!self.health) + if not (self.health) self.health = 1000; self.tur_health = max(1,self.health); - if (!self.turrcaps_flags) + if not (self.turrcaps_flags) self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL; if (!self.damage_flags) self.damage_flags = TFL_DMG_YES | TFL_DMG_RETALIATE | TFL_DMG_AIMSHAKE; // Shot stuff. - if (!self.shot_refire) + if not (self.shot_refire) self.shot_refire = 1; self.shot_refire = bound(0.01,self.shot_refire,9999); - if (!self.shot_dmg) + if not (self.shot_dmg) self.shot_dmg = self.shot_refire * 50; self.shot_dmg = max(1,self.shot_dmg); - if (!self.shot_radius) + if not (self.shot_radius) self.shot_radius = self.shot_dmg * 0.5; self.shot_radius = max(1,self.shot_radius); - if (!self.shot_speed) + if not (self.shot_speed) self.shot_speed = 2500; self.shot_speed = max(1,self.shot_speed); - if (!self.shot_spread) + if not (self.shot_spread) self.shot_spread = 0.0125; self.shot_spread = bound(0.0001,self.shot_spread,500); - if (!self.shot_force) + if not (self.shot_force) self.shot_force = self.shot_dmg * 0.5 + self.shot_radius * 0.5; self.shot_force = bound(0.001,self.shot_force,MAX_SHOT_DISTANCE * 0.5); - if (!self.shot_volly) + if not (self.shot_volly) self.shot_volly = 1; self.shot_volly = bound(1,self.shot_volly,floor(self.ammo_max / self.shot_dmg)); - if (!self.shot_volly_refire) + if not (self.shot_volly_refire) self.shot_volly_refire = self.shot_refire * self.shot_volly; self.shot_volly_refire = bound(self.shot_refire,self.shot_volly_refire,60); - if (!self.firecheck_flags) + if not (self.firecheck_flags) self.firecheck_flags = TFL_FIRECHECK_WORLD | 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; // Range stuff. - if (!self.target_range) + if not (self.target_range) self.target_range = self.shot_speed * 0.5; self.target_range = bound(0,self.target_range,MAX_SHOT_DISTANCE); - if (!self.target_range_min) + if not (self.target_range_min) self.target_range_min = self.shot_radius * 2; self.target_range_min = bound(0,self.target_range_min,MAX_SHOT_DISTANCE); @@ -1075,29 +1046,29 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base // 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) + if not (self.target_range_optimal) self.target_range_optimal = self.target_range * 0.5; self.target_range_optimal = bound(0,self.target_range_optimal,MAX_SHOT_DISTANCE); // Aim stuff. - if (!self.aim_maxrot) + if not (self.aim_maxrot) self.aim_maxrot = 90; self.aim_maxrot = bound(0,self.aim_maxrot,360); - if (!self.aim_maxpitch) + if not (self.aim_maxpitch) self.aim_maxpitch = 20; self.aim_maxpitch = bound(0,self.aim_maxpitch,90); - if (!self.aim_speed) + if not (self.aim_speed) self.aim_speed = 36; self.aim_speed = bound(0.1,self.aim_speed, 1000); - if (!self.aim_firetolerance_dist) + if not (self.aim_firetolerance_dist) self.aim_firetolerance_dist = 5 + (self.shot_radius * 2); self.aim_firetolerance_dist = bound(0.1,self.aim_firetolerance_dist,MAX_SHOT_DISTANCE); - if (!self.aim_flags) + if not (self.aim_flags) { self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE; if(self.turrcaps_flags & TFL_TURRCAPS_RADIUSDMG) @@ -1105,7 +1076,8 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base } // Sill the most tested (and aim-effective) - if (!self.track_type) self.track_type = TFL_TRACKTYPE_STEPMOTOR; + if not (self.track_type) + self.track_type = TFL_TRACKTYPE_STEPMOTOR; if (self.track_type != TFL_TRACKTYPE_STEPMOTOR) { @@ -1113,17 +1085,17 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base // Can inmapt aim preformance alot. // needs a bit diffrent aimspeed - if (!self.aim_speed) + if not (self.aim_speed) self.aim_speed = 180; self.aim_speed = bound(0.1,self.aim_speed, 1000); - if (!self.track_accel_pitch) + if not (self.track_accel_pitch) self.track_accel_pitch = 0.5; - if (!self.track_accel_rot) + if not (self.track_accel_rot) self.track_accel_rot = 0.5; - if (!self.track_blendrate) + if not (self.track_blendrate) self.track_blendrate = 0.35; } @@ -1132,25 +1104,25 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base // Target selection stuff. - if (!self.target_select_rangebias) + if not (self.target_select_rangebias) self.target_select_rangebias = 1; self.target_select_rangebias = bound(-10,self.target_select_rangebias,10); - if (!self.target_select_samebias) + if not (self.target_select_samebias) self.target_select_samebias = 1; self.target_select_samebias = bound(-10,self.target_select_samebias,10); - if (!self.target_select_anglebias) + if not (self.target_select_anglebias) self.target_select_anglebias = 1; self.target_select_anglebias = bound(-10,self.target_select_anglebias,10); - if (!self.target_select_missilebias) + if not (self.target_select_missilebias) self.target_select_missilebias = -10; self.target_select_missilebias = bound(-10,self.target_select_missilebias,10); self.target_select_playerbias = bound(-10,self.target_select_playerbias,10); - if (!self.target_select_flags) + if not (self.target_select_flags) { self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_ANGLELIMITS; @@ -1168,22 +1140,22 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base // Ammo stuff - if (!self.ammo_max) + if not (self.ammo_max) self.ammo_max = self.shot_dmg * 10; self.ammo_max = max(self.shot_dmg,self.ammo_max); - if (!self.ammo) + if not (self.ammo) self.ammo = self.shot_dmg * 5; self.ammo = bound(0,self.ammo,self.ammo_max); - if (!self.ammo_recharge) + if not (self.ammo_recharge) self.ammo_recharge = self.shot_dmg * 0.5; self.ammo_recharge = max(0,self.ammo_recharge); // Convert the recharge from X per sec to X per ticrate self.ammo_recharge = self.ammo_recharge * self.ticrate; - if (!self.ammo_flags) + if not (self.ammo_flags) self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE; // Damage stuff @@ -1205,12 +1177,25 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base setmodel(self,base); setmodel(self.tur_head,head); - setsize(self,'-32 -32 0','32 32 32'); - setsize(self.tur_head,'-32 -32 0','32 32 32'); + setsize(self,'-32 -32 0','32 32 64'); + setsize(self.tur_head,'0 0 0','0 0 0'); + + setorigin(self.tur_head,'0 0 0'); + setattachment(self.tur_head, self, "tag_head"); + if (!self.health) + self.health = 150; + + self.tur_health = self.health; + self.solid = SOLID_BBOX; + self.tur_head.solid = SOLID_NOT; + self.takedamage = DAMAGE_AIM; + self.tur_head.takedamage = DAMAGE_NO; + self.movetype = MOVETYPE_NOCLIP; + self.tur_head.movetype = MOVETYPE_NOCLIP; // Defend mode? - if(!self.tur_defend) + if not (self.tur_defend) if (self.target != "") { self.tur_defend = find(world, targetname, self.target); @@ -1221,43 +1206,11 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base } } -// Put pices in place - if not (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED) - setorigin(self.tur_head,self.origin); - // In target defend mode, aim on the spot to defend when idle. - if(self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED) - { - if (self.tur_defend) - self.idle_aim = self.tur_head.angles + angleofs(self.tur_head,self.tur_defend); - else - self.idle_aim = '0 0 0'; - } + if (self.tur_defend) + self.idle_aim = self.tur_head.angles + angleofs(self.tur_head,self.tur_defend); else - { - if (self.tur_defend) - self.idle_aim = self.tur_head.angles + angleofs(self.tur_head,self.tur_defend); - else - self.idle_aim = self.angles; - } - - if not (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED) - self.tur_head.angles = self.idle_aim; - - if (!self.health) - self.health = 150; - - self.tur_health = self.health; - self.tur_head.health = self.health; - - self.solid = SOLID_BBOX; - self.tur_head.solid = SOLID_BBOX; - - self.takedamage = DAMAGE_AIM; - self.tur_head.takedamage = DAMAGE_AIM; - - self.movetype = MOVETYPE_NOCLIP; - self.tur_head.movetype = MOVETYPE_NOCLIP; + self.idle_aim = '0 0 0'; // Team color if (self.team == COLOR_TEAM1) self.colormod = '1.4 0.8 0.8'; @@ -1269,19 +1222,14 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base self.turret_score_target = turret_stdproc_targetscore_support; self.turret_firecheckfunc = turret_stdproc_firecheck; self.turret_firefunc = turret_stdproc_fire; - //self.turret_postthink = turret_stdproc_nothing; self.event_damage = turret_stdproc_damage; - self.tur_head.event_damage = turret_stdproc_damage; } else { self.turret_score_target = turret_stdproc_targetscore_generic; self.turret_firecheckfunc = turret_stdproc_firecheck; self.turret_firefunc = turret_stdproc_fire; - //self.turret_postthink = turret_stdproc_nothing; self.event_damage = turret_stdproc_damage; - self.tur_head.event_damage = turret_stdproc_damage; - //self.turret_addtarget = turret_stdproc_false; } self.use = turret_stdproc_use; @@ -1311,6 +1259,8 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base #endif // Its all good. + self.turrcaps_flags |= TFL_TURRCAPS_ISTURRET; + self.classname = "turret_main"; self.tur_active = 1; diff --git a/data/qcsrc/server/tturrets/system/system_misc.qc b/data/qcsrc/server/tturrets/system/system_misc.qc index 822b24e54..161bdcbcc 100644 --- a/data/qcsrc/server/tturrets/system/system_misc.qc +++ b/data/qcsrc/server/tturrets/system/system_misc.qc @@ -271,7 +271,9 @@ float turret_tag_setup() return 0; } - setorigin(self.tur_head,gettaginfo(self,gettagindex(self,"tag_head"))); + //if not(self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED) + // setorigin(self.tur_head,gettaginfo(self,gettagindex(self,"tag_head"))); + self.tur_shotorg = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire")); v_forward = normalize(v_forward); diff --git a/data/qcsrc/server/tturrets/units/unit_ewheel.qc b/data/qcsrc/server/tturrets/units/unit_ewheel.qc index 1025c58e1..e3ea90448 100644 --- a/data/qcsrc/server/tturrets/units/unit_ewheel.qc +++ b/data/qcsrc/server/tturrets/units/unit_ewheel.qc @@ -4,6 +4,19 @@ #define ewheel_amin_bck_slow 3 #define ewheel_amin_bck_fast 4 +float ewheel_speed_fast; +float ewheel_speed_slow; +float ewheel_speed_slower; +float ewheel_speed_stop; + +void turret_ewheel_loadcvars() +{ + ewheel_speed_fast = cvar("g_turrets_unit_ewheel_speed_fast"); + ewheel_speed_slow = cvar("g_turrets_unit_ewheel_speed_slow"); + ewheel_speed_slower = cvar("g_turrets_unit_ewheel_speed_slower"); + ewheel_speed_stop = cvar("g_turrets_unit_ewheel_speed_stop"); +} + void turret_ewheel_projectile_explode() { vector org2; @@ -15,7 +28,7 @@ void turret_ewheel_projectile_explode() float d; d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world); - self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg; + self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg; #else RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world); @@ -49,7 +62,6 @@ void ewheel_attack() proj.solid = SOLID_BBOX; proj.movetype = MOVETYPE_FLYMISSILE; proj.velocity = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed; - //proj.angles = vectoangles(proj.velocity); proj.touch = turret_ewheel_projectile_explode; proj.enemy = self.enemy; proj.flags = FL_PROJECTILE | FL_NOTARGET; @@ -64,77 +76,43 @@ void ewheel_attack() } -/* -float ewheel_moveverb_roam(float eval) +void ewheel_move_path() { - switch (eval) - { - case VCM_EVAL: - - if (!self.enemy) - return verb.verb_static_value; - - return VS_CALL_NO; - - case VCM_DO: - self.angles_z = 0; - makevectors(self.angles); - self.moveto = v_forward * 128; - self.steerto = steerlib_beamsteer(v_forward,1024,32,36,128); - self.frame += 1; - movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_fast"),0.4); - - return VS_CALL_YES_DOING; - - case VCM_REMOVE: - } - - return VS_CALL_YES_DONE; -} -*/ + // Are we close enougth to a path node to switch to the next? + if (vlen(self.origin - self.pathcurrent.origin) < 64) + if (self.pathcurrent.path_next == world) + { + // Path endpoint reached + pathlib_deletepath(self.pathcurrent.owner); + self.pathcurrent = world; -void ewheel_move_path() -{ - // Do we have a path? - if not(self.pathcurrent) - return; - else - { - // Are we close enougth to a path node to switch to the next? - if (vlen(self.origin - self.pathcurrent.origin) < 64) - if (self.pathcurrent.path_next == world) + if (self.pathgoal) { - // Path endpoint reached - pathlib_deletepath(self.pathcurrent.owner); - self.pathcurrent = world; + if (self.pathgoal.use) + self.pathgoal.use(); - if (self.pathgoal) + if (self.pathgoal.enemy) { - if (self.pathgoal.use) - self.pathgoal.use(); - - if (self.pathgoal.enemy) - { - self.pathcurrent = pathlib_astar(self.pathgoal.origin,self.pathgoal.enemy.origin); - self.pathgoal = self.pathgoal.enemy; - } + self.pathcurrent = pathlib_astar(self.pathgoal.origin,self.pathgoal.enemy.origin); + self.pathgoal = self.pathgoal.enemy; } - else - self.pathgoal = world; } else - self.pathcurrent = self.pathcurrent.path_next; - } + self.pathgoal = world; + } + else + self.pathcurrent = self.pathcurrent.path_next; + if (self.pathcurrent) { self.moveto = self.pathcurrent.origin; - self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95); + self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95); - movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_fast"),0.4); + movelib_move_simple(v_forward, ewheel_speed_fast, 0.4); return; } @@ -154,69 +132,38 @@ void ewheel_move_enemy() if ( self.tur_head.spawnshieldtime < 1 ) { self.frame = ewheel_amin_fwd_fast; - movelib_move_simple(v_forward ,cvar("g_turrets_unit_ewheel_speed_fast"),0.4); + movelib_move_simple(v_forward, ewheel_speed_fast, 0.4); } else if (self.tur_head.spawnshieldtime < 2) { self.frame = ewheel_amin_fwd_slow; - movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slow"),0.4); + movelib_move_simple(v_forward, ewheel_speed_slow, 0.4); } else { self.frame = ewheel_amin_fwd_slow; - movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slower"),0.4); + movelib_move_simple(v_forward, ewheel_speed_slower, 0.4); } } else if (self.tur_dist_enemy < self.target_range_optimal * 0.5) { self.frame = ewheel_amin_bck_slow; - movelib_move_simple(v_forward * -1,cvar("g_turrets_unit_ewheel_speed_slow"),0.4); + movelib_move_simple(v_forward * -1, ewheel_speed_slow, 0.4); } else { self.frame = ewheel_amin_stop; - movelib_beak_simple(cvar("g_turrets_unit_ewheel_speed_stop")); + movelib_beak_simple(ewheel_speed_stop); } - - } -/* -float ewheel_moveverb_runaway(float eval) -{ - switch (eval) - { - case VCM_EVAL: - if (self.spawnflags & TSF_NO_PATHBREAK) - if (self.pathcurrent) - return VS_CALL_NO; - - if (self.enemy) - if (self.health < 50) - return verb.verb_static_value; - - return VS_CALL_NO; - - case VCM_DO: - self.steerto = (steerlib_push(self.enemy.origin) * 0.7) + (steerlib_traceavoid_flat(0.3, 500, '0 0 128') * 0.3); - self.moveto = self.origin + self.steerto * 1000; - - self.frame += 2; - movelib_move_simple(v_forward ,cvar("g_turrets_unit_ewheel_speed_fast"),0.4); - - return VS_CALL_YES_DOING; - } - - return VS_CALL_YES_DONE; -} -*/ void ewheel_move_idle() { self.frame = 0; if (vlen(self.velocity)) - movelib_beak_simple(cvar("g_turrets_unit_ewheel_speed_stop")); + movelib_beak_simple(ewheel_speed_stop); } void ewheel_postthink() @@ -245,14 +192,13 @@ void ewheel_postthink() // Simulate banking self.angles_z = bound(-45,real_angle_y * -2.5,45); - if(self.pathcurrent) - ewheel_move_path(); - else if(self.enemy) + if(self.enemy) ewheel_move_enemy(); + else if(self.pathcurrent) + ewheel_move_path(); else ewheel_move_idle(); - //verbstack_pop(self.verbs_move); self.velocity_z = vz; } @@ -284,7 +230,9 @@ void ewheel_respawnhook() void ewheel_diehook() { - turret_trowgib2(self.origin,self.velocity + v_up * 400,'-0.6 -0.2 -02',self,time + random() * 2 +3); + turret_trowgib2(self.origin,self.velocity + '0 0 400', '-0.6 -0.2 -02', self, 3 + time + random() * 2); + + self.velocity = '0 0 0'; if (self.pathcurrent) pathlib_deletepath(self.pathcurrent.owner); @@ -323,9 +271,9 @@ void turret_ewheel_dinit() } self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE; - self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_ROAM | TFL_TURRCAPS_HEADATTACHED; - + self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_ROAM ; self.turret_respawnhook = ewheel_respawnhook; + self.turret_diehook = ewheel_diehook; if (turret_stdproc_init("ewheel_std",0,"models/turrets/ewheel-base2.md3","models/turrets/ewheel-gun1.md3") == 0) @@ -343,9 +291,7 @@ void turret_ewheel_dinit() self.solid = SOLID_SLIDEBOX; self.takedamage = DAMAGE_AIM; - setattachment(self.tur_head,self,"tag_head"); - setsize(self,'-32 -32 0','32 32 48'); - setsize(self.tur_head,'0 0 0','0 0 0'); + setsize(self,'-32 -32 0', '32 32 48'); self.pos1 = self.origin; @@ -356,15 +302,6 @@ void turret_ewheel_dinit() self.turret_postthink = ewheel_postthink; self.tur_head.frame = 1; - //self.verbs_move = spawn(); - //self.verbs_move.owner = self; - - //verbstack_push(self.verbs_move, ewheel_moveverb_roam, WVM_IDLE, 0, self); - //verbstack_push(self.verbs_move, ewheel_moveverb_idle, WVM_IDLE, 0, self); - //verbstack_push(self.verbs_move, ewheel_moveverb_enemy, WVM_ENEMY, 0, self); - //verbstack_push(self.verbs_move, ewheel_moveverb_path, WVM_PATH, 0, self); - //verbstack_push(self.verbs_move, ewheel_moveverb_runaway,WVM_PANIC, 0, self); - // Convert from dgr / sec to dgr / tic self.tur_head.aim_speed = cvar("g_turrets_unit_ewheel_turnrate"); self.tur_head.aim_speed = self.tur_head.aim_speed / (1 / self.ticrate); @@ -395,6 +332,8 @@ void spawnfunc_turret_ewheel() precache_model ("models/turrets/ewheel-base2.md3"); precache_model ("models/turrets/ewheel-gun1.md3"); + turret_ewheel_loadcvars(); + self.think = turret_ewheel_dinit; self.nextthink = time + 0.5; } diff --git a/data/qcsrc/server/tturrets/units/unit_walker.qc b/data/qcsrc/server/tturrets/units/unit_walker.qc index 4866a5bab..e459d3259 100644 --- a/data/qcsrc/server/tturrets/units/unit_walker.qc +++ b/data/qcsrc/server/tturrets/units/unit_walker.qc @@ -1,44 +1,62 @@ #define ANIM_NO 0 -#define ANIM_REVERSE 1 +#define ANIM_TURN 1 #define ANIM_WALK 2 #define ANIM_RUN 3 #define ANIM_STRAFE_L 4 #define ANIM_STRAFE_R 5 -#define ANIM_TURN 6 -#define ANIM_JUMP 7 -#define ANIM_LAND 8 -#define ANIM_PAIN 9 -#define ANIM_MEELE 10 -#define ANIM_SWIM 11 -#define ANIM_ROAM 12 - -#define WVM_IDLE_UP 25 -#define WVM_IDLE 50 - -#define WVM_PATH 1000 -#define WVM_ENEMY 2000 -#define WVM_STOP 3000 -#define WVM_DODGE 4000 -#define WVM_PANIC 10000 -#define walker_verbs_move verbs_move - -#define WVA_MINIGUN 100 -#define WVA_ROCKET 500 -#define WVA_MEELE 1000 -#define walker_verbs_attack verbs_attack - -#define WVI_IDLE 1 -#define WVI_ROAM 10 -#define walker_verbs_idle verbs_idle +#define ANIM_JUMP 6 +#define ANIM_LAND 7 +#define ANIM_PAIN 8 +#define ANIM_MEELE 9 +#define ANIM_SWIM 10 +#define ANIM_ROAM 11 .float animflag; .entity wkr_spawn; -#define WALKER_MIN '-70 -70 5' -#define WALKER_MAX '70 70 90' +#define WALKER_MIN '-70 -70 0' +#define WALKER_MAX '70 70 95' #define WALKER_PATH(s,e) pathlib_astar(s,e) +float walker_meele_dmg; +float walker_meele_force; + +float walker_speed_stop; +float walker_speed_walk; +float walker_speed_run; +float walker_speed_jump; +float walker_speed_roam; +float walker_speed_swim; + +float walker_std_rocket_dmg; +float walker_std_rocket_radius; +float walker_std_rocket_force; +float walker_std_rocket_speed; +float walker_std_rocket_turnrate; + +void walker_loadcvars() +{ + walker_meele_dmg = cvar("g_turrets_unit_walker_std_meele_dmg"); + walker_meele_force = cvar("g_turrets_unit_walker_std_meele_force"); + + walker_speed_stop = cvar("g_turrets_unit_walker_speed_stop"); + walker_speed_walk = cvar("g_turrets_unit_walker_speed_walk"); + walker_speed_run = cvar("g_turrets_unit_walker_speed_run"); + walker_speed_jump = cvar("g_turrets_unit_walker_speed_jump"); + walker_speed_roam = cvar("g_turrets_unit_walker_speed_roam"); + walker_speed_swim = cvar("g_turrets_unit_walker_speed_swim"); + + walker_std_rocket_dmg = cvar("g_turrets_unit_walker_std_rocket_dmg"); + walker_std_rocket_radius = cvar("g_turrets_unit_walker_std_rocket_radius"); + walker_std_rocket_force = cvar("g_turrets_unit_walker_std_rocket_force"); + walker_std_rocket_speed = cvar("g_turrets_unit_walker_std_rocket_speed"); + walker_std_rocket_turnrate = cvar("g_turrets_unit_walker_std_rocket_turnrate"); + +} + + + float walker_firecheck() { if (self.animflag == ANIM_MEELE) @@ -55,16 +73,30 @@ void walker_meele_do_dmg() where = self.origin + v_forward * 128; //w_deathtypestring = "tried to hug the cute spider thingy."; - e = findradius(where,64); + e = findradius(where,32); while (e) { if (turret_validate_target(self,e,self.target_validate_flags)) if (e != self && e.owner != self) - Damage(e,self,self,cvar("g_turrets_unit_walker_std_meele_dmg"),DEATH_TURRET,'0 0 0', v_forward * cvar("g_turrets_unit_walker_std_meele_force") ); + Damage(e, self, self, walker_meele_dmg ,DEATH_TURRET,'0 0 0', v_forward * walker_meele_force); e = e.chain; } } +void walker_setnoanim() +{ + self.frame = ANIM_NO; + self.animflag = self.owner.frame; + dprint("walker_setnoanim\n"); + +} + +void walker_dly_meele_do_dmg() +{ + walker_meele_do_dmg(); + dprint("walker_dly_meele_do_dmg\n"); + +} void walker_animate() { @@ -84,179 +116,102 @@ void walker_animate() { case ANIM_NO: - if (self.frame != 0) - self.frame = 0; - - movelib_beak_simple(cvar("g_turrets_unit_walker_speed_stop")); - + self.frame = 0; + movelib_beak_simple(walker_speed_stop); break; + /* case ANIM_REVERSE: if ((self.frame < 5) || (self.frame > 25)) self.frame = 25; self.frame = self.frame -1; - movelib_move_simple(v_forward * -1 ,cvar("g_turrets_unit_walker_speed_walk"),0.6); + movelib_move_simple(v_forward * -1, walker_speed_walk, 0.6); if (self.frame < 5) self.frame = 25; break; + */ case ANIM_TURN: - - if ((self.frame < 30) || (self.frame > 55)) - self.frame = 30; - - self.frame = self.frame + 1; - - self.angles_y += bound(-15,shortangle_f(real_angle_y,self.angles_y),15); - - movelib_beak_simple(cvar("g_turrets_unit_walker_speed_stop")); - - if (self.frame > 55) - self.frame = 35; - + self.frame = ANIM_TURN; + self.angles_y += bound(-15, shortangle_f(real_angle_y, self.angles_y), 15); + movelib_beak_simple(walker_speed_stop); break; case ANIM_WALK: - if ((self.frame < 5) || (self.frame > 25)) - self.frame = 5; - - self.frame = self.frame +1; - self.angles_y += bound(-10,shortangle_f(real_angle_y,self.angles_y),10); - movelib_move_simple(v_forward ,cvar("g_turrets_unit_walker_speed_walk"),0.6); - - if (self.frame > 25) - self.frame = 5; - - break; - - case ANIM_ROAM: - if ((self.frame < 5) || (self.frame > 25)) - self.frame = 5; - - self.frame = self.frame +1; - - self.angles_y += bound(-5,shortangle_f(real_angle_y,self.angles_y),5); - - movelib_move_simple(v_forward ,cvar("g_turrets_unit_walker_speed_roam"),0.5); - - if (self.frame > 25) - self.frame = 5; - - break; - - case ANIM_SWIM: - if ((self.frame < 142) || (self.frame > 151)) - self.frame = 142; - - self.frame = self.frame +1; - - self.angles_y += bound(-10,shortangle_f(real_angle_y,self.angles_y),10); - self.angles_x += bound(-10,shortangle_f(real_angle_x,self.angles_x),10); - - movelib_move_simple(v_forward, cvar("g_turrets_unit_walker_speed_swim"),0.3); - vz = self.velocity_z + sin(time * 4) * 8; - - if (self.frame > 151) - self.frame = 146; - + self.frame = ANIM_WALK; + self.angles_y += bound(-10, shortangle_f(real_angle_y, self.angles_y), 10); + movelib_move_simple(v_forward, walker_speed_walk, 0.6); break; case ANIM_RUN: - - if ((self.frame < 5) || (self.frame > 25)) - self.frame = 5; - - self.angles_y += bound(-5,shortangle_f(real_angle_y,self.angles_y),5); - movelib_move_simple(v_forward, cvar("g_turrets_unit_walker_speed_run"),0.6); - - if (self.frame > 25) - self.frame = 5; - + self.frame = ANIM_RUN; + self.angles_y += bound(-5, shortangle_f(real_angle_y, self.angles_y), 5); + movelib_move_simple(v_forward, walker_speed_run, 0.6); break; case ANIM_STRAFE_L: - if ((self.frame < 30) || (self.frame > 55)) - self.frame = 30; - - self.frame = self.frame + 1; - self.angles_y += bound(-2.5,shortangle_f(real_angle_y,self.angles_y),2.5); - movelib_move_simple(v_right * -1, cvar("g_turrets_unit_walker_speed_walk"),0.8); - - if (self.frame > 55) - self.frame = 35; + self.frame = ANIM_STRAFE_L; + self.angles_y += bound(-2.5, shortangle_f(real_angle_y, self.angles_y), 2.5); + movelib_move_simple(v_right * -1, walker_speed_walk, 0.8); break; case ANIM_STRAFE_R: - if ((self.frame < 60) || (self.frame > 65)) - self.frame = 60; - - self.frame = self.frame + 1; - self.angles_y += bound(-2.5,shortangle_f(real_angle_y,self.angles_y),2.5); - movelib_move_simple(v_right, cvar("g_turrets_unit_walker_speed_walk"),0.8); - - if (self.frame > 85) - self.frame = 65; - + self.frame = ANIM_STRAFE_R; + self.angles_y += bound(-2.5, shortangle_f(real_angle_y, self.angles_y), 2.5); + movelib_move_simple(v_right, walker_speed_walk, 0.8); break; case ANIM_JUMP: - if ((self.frame < 95) || (self.frame > 100)) - self.frame = 95; - - self.velocity += '0 0 1' * cvar("g_turrets_unit_walker_speed_jump"); - - if (self.frame > 100) - self.frame = self.frame + 1; - + self.frame = ANIM_JUMP; + self.velocity += '0 0 1' * walker_speed_jump; break; case ANIM_LAND: - if ((self.frame < 100) || (self.frame > 107)) - self.frame = 100; - - self.frame = self.frame + 1; - - if (self.frame > 107) - self.animflag = ANIM_NO; - + self.frame = ANIM_LAND; break; case ANIM_PAIN: - if ((self.frame < 60) || (self.frame > 95)) - self.frame = 90; - - self.frame = self.frame + 1; + if(self.frame != ANIM_PAIN) + defer(0.25,walker_setnoanim); - if (self.frame > 95) - self.animflag = ANIM_NO; + self.frame = ANIM_PAIN; break; case ANIM_MEELE: - if ((self.frame < 123) || (self.frame > 140)) - self.frame = 123; + if(self.frame != ANIM_MEELE) + { + defer(0.41, walker_setnoanim); + defer(0.21, walker_dly_meele_do_dmg); + } - movelib_beak_simple(cvar("g_turrets_unit_walker_speed_stop")); + self.frame = ANIM_MEELE; + movelib_beak_simple(walker_speed_stop); + break; - self.frame = self.frame + 2; + case ANIM_SWIM: + self.frame = ANIM_SWIM; + self.angles_y += bound(-10, shortangle_f(real_angle_y, self.angles_y), 10); + self.angles_x += bound(-10, shortangle_f(real_angle_x, self.angles_x), 10); + movelib_move_simple(v_forward, walker_speed_swim, 0.3); + vz = self.velocity_z + sin(time * 4) * 8; + break; - if (self.frame == 133) - walker_meele_do_dmg(); + case ANIM_ROAM: + self.frame = ANIM_ROAM; + self.angles_y += bound(-5, shortangle_f(real_angle_y, self.angles_y), 5); + movelib_move_simple(v_forward ,walker_speed_roam, 0.5); + break; - if (self.frame > 140) - { - self.animflag = ANIM_NO; - self.frame = 0; - } } self.velocity_z = vz; if (self.flags & FL_ONGROUND) - movelib_groundalign4point(300,100,0.25); + movelib_groundalign4point(300, 100, 0.25); } @@ -277,8 +232,7 @@ void walker_rocket_explode() org2 = findbetterlocation (self.origin, 16); pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1); - //w_deathtypestring = "got blasted to oblivion"; - RadiusDamage (self, self.owner, cvar("g_turrets_unit_walker_std_rocket_dmg"), 0, cvar("g_turrets_unit_walker_std_rocket_radius"), world, cvar("g_turrets_unit_walker_std_rocket_force"), DEATH_TURRET, world); + RadiusDamage (self, self.owner, walker_std_rocket_dmg, 0, walker_std_rocket_radius, world,walker_std_rocket_force, DEATH_TURRET, world); remove (self); } @@ -291,7 +245,7 @@ void walker_rocket_damage (entity inflictor, entity attacker, float damage, floa walker_rocket_explode(); } -#define WALKER_ROCKET_MOVE movelib_move_simple(newdir,cvar("g_turrets_unit_walker_std_rocket_speed"),cvar("g_turrets_unit_walker_std_rocket_tunrate")); UpdateCSQCProjectile(self) +#define WALKER_ROCKET_MOVE movelib_move_simple(newdir, walker_std_rocket_speed, walker_std_rocket_turnrate); UpdateCSQCProjectile(self) void walker_rocket_loop(); void walker_rocket_think() { @@ -333,12 +287,12 @@ void walker_rocket_think() return; } - m_speed = vlen(self.velocity) + cvar("g_turrets_unit_walker_std_rocket_speed_add"); + m_speed = vlen(self.velocity); // Enemy dead? just keep on the current heading then. if ((self.enemy == world) || (self.enemy.deadflag != DEAD_NO)) { - // Make sure we dont return to tracking a respawned player + // Make sure we dont return to tracking a respawned entity self.enemy = world; } @@ -450,7 +404,7 @@ void walker_fire_rocket(vector org) rocket.nextthink = time;// + 0.25; rocket.movetype = MOVETYPE_FLY; - rocket.velocity = normalize((v_forward + v_up * 0.5) + (randomvec() * 0.2)) * cvar("g_turrets_unit_walker_std_rocket_speed"); + rocket.velocity = normalize((v_forward + v_up * 0.5) + (randomvec() * 0.2)) * walker_std_rocket_speed; rocket.angles = vectoangles(rocket.velocity); rocket.touch = walker_rocket_explode; rocket.flags = FL_PROJECTILE; @@ -494,326 +448,139 @@ void rv_think() self = oldself; } -float walker_moveverb_path(float eval) +void walker_move_path() { - switch (eval) - { - case VCM_EVAL: - - if (self.animflag == ANIM_MEELE) - return VS_CALL_NO; - - if (self.pathcurrent) - return verb.verb_static_value; + // Are we close enougth to a path node to switch to the next? + if (vlen(self.origin - self.pathcurrent.origin) < 64) + if (self.pathcurrent.path_next == world) + { + // Path endpoint reached + pathlib_deletepath(self.pathcurrent.owner); + self.pathcurrent = world; - return VS_CALL_NO; + if (self.pathgoal) + { + if (self.pathgoal.use) + self.pathgoal.use(); - case VCM_DO: - // Do we have a path? - if not(self.pathcurrent) - { - return VS_CALL_NO; - } - else - { - // Are we close enougth to a path node to switch to the next? - if (vlen(self.origin - self.pathcurrent.origin) < 64) - if (self.pathcurrent.path_next == world) + if (self.pathgoal.enemy) { - // Path endpoint reached - pathlib_deletepath(self.pathcurrent.owner); - self.pathcurrent = world; - - if (self.pathgoal) - { - if (self.pathgoal.use) - self.pathgoal.use(); - - if (self.pathgoal.enemy) - { - self.pathcurrent = WALKER_PATH(self.pathgoal.origin,self.pathgoal.enemy.origin); - self.pathgoal = self.pathgoal.enemy; - } - } - else - self.pathgoal = world; + self.pathcurrent = WALKER_PATH(self.pathgoal.origin,self.pathgoal.enemy.origin); + self.pathgoal = self.pathgoal.enemy; } - else - self.pathcurrent = self.pathcurrent.path_next; - } - - - if (self.pathcurrent) - { - switch (self.waterlevel) - { - case 0: - self.animflag = ANIM_WALK; - case 1: - case 2: - if (self.animflag == ANIM_WALK) - self.animflag = ANIM_WALK; - else - self.animflag = ANIM_SWIM; - break; - case 3: - self.animflag = ANIM_SWIM; } - - self.moveto = self.pathcurrent.origin; - self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95); - - return VS_CALL_YES_DOING; + else + self.pathgoal = world; } else - return VS_CALL_YES_DONE; - - case VCM_REMOVE: - - if (self.pathcurrent) - pathlib_deletepath(self.pathcurrent.owner); - - self.pathcurrent = world; - - return VS_CALL_YES_DONE; - } + self.pathcurrent = self.pathcurrent.path_next; - return VS_CALL_YES_DONE; -} - -float walker_moveverb_enemy(float eval) -{ - switch (eval) + switch (self.waterlevel) { - case VCM_EVAL: - - if (self.enemy) - if (self.spawnflags & TSF_NO_PATHBREAK) - if (self.pathcurrent) - return VS_CALL_NO; - - if (self.animflag == ANIM_MEELE) - return VS_CALL_NO; - - if (self.enemy == world) - return VS_CALL_NO; - - //if (tracewalk(self.enemy, self.origin, self.mins, self.maxs, self.enemy.origin, MOVE_NORMAL)) - return verb.verb_static_value; - - //return VS_CALL_NO; - - case VCM_DO: - switch (self.waterlevel) - { - case 0: - if (self.tur_dist_enemy > 500) - self.animflag = ANIM_RUN; - else - self.animflag = ANIM_WALK; - case 1: - case 2: - if (self.animflag != ANIM_SWIM) - self.animflag = ANIM_WALK; - else - self.animflag = ANIM_SWIM; - break; - case 3: + case 0: + self.animflag = ANIM_WALK; + case 1: + case 2: + if (self.animflag == ANIM_WALK) + self.animflag = ANIM_WALK; + else self.animflag = ANIM_SWIM; - } - - self.moveto = self.enemy.origin; - self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95); - - return VS_CALL_YES_DOING; + break; + case 3: + self.animflag = ANIM_SWIM; } - return VS_CALL_YES_DONE; -} - -float walker_moveverb_idle_pause(float eval) -{ - switch (eval) - { - case VCM_EVAL: - - if (self.animflag == ANIM_MEELE) - return VS_CALL_NO; - - return verb.verb_static_value; - - case VCM_DO: + self.moveto = self.pathcurrent.origin; + self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95); - self.moveto = self.origin; - self.steerto = v_forward; - self.animflag = ANIM_NO; - - return VS_CALL_YES_DOING; - } - - return VS_CALL_YES_DONE; } -float walker_moveverb_idle_roam(float eval) +void walker_move_enemy() { - switch (eval) + switch (self.waterlevel) { - case VCM_EVAL: - - if (self.animflag == ANIM_MEELE) - return VS_CALL_NO; - - return verb.verb_static_value; - - case VCM_DO: - if(verb.wait < time) - { - trace_fraction = 0; - while(trace_fraction != 1.0) - { - self.moveto = self.origin + (v_forward * 256); - self.moveto += v_right * (random() * 256); - self.moveto -= v_right * (random() * 256); - - tracebox(self.origin+'0 0 64',self.mins,self.maxs,self.moveto + '0 0 64',MOVE_NORMAL,self); - } - verb.wait = time + 10; - } + case 0: + if (self.tur_dist_enemy > 500) + self.animflag = ANIM_RUN; + else + self.animflag = ANIM_WALK; + case 1: + case 2: + if (self.animflag != ANIM_SWIM) + self.animflag = ANIM_WALK; else - { - if(verb.wait - time < 9) - if(vlen(self.moveto - self.origin) < 32) - { - verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause, WVM_IDLE + WVM_IDLE_UP, random() * (verb.wait - time), self); - self.animflag = ANIM_NO; - return VS_CALL_REMOVE; - } - } - - self.steerto = steerlib_attract(self.moveto,256); - te_lightning1(self,self.origin + '0 0 64',self.moveto + '0 0 64'); - - - - switch (self.waterlevel) - { - case 0: - self.animflag = ANIM_ROAM; - case 1: - case 2: - if (self.animflag != ANIM_SWIM) - self.animflag = ANIM_ROAM; - - break; - case 3: self.animflag = ANIM_SWIM; - } - - return VS_CALL_YES_DOING; + break; + case 3: + self.animflag = ANIM_SWIM; } - return VS_CALL_YES_DONE; + self.moveto = self.enemy.origin; + self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95); + } -float walker_moveverb_idle(float eval) +void walker_move_idle_pause() { - switch (eval) - { - case VCM_EVAL: - - if (self.animflag == ANIM_MEELE) - return VS_CALL_NO; - - return verb.verb_static_value; - - case VCM_DO: - - //if (random() < 0.5) - verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause, WVM_IDLE + WVM_IDLE_UP, random() * 5, self); - //else - // verbstack_push(self.walker_verbs_move, walker_moveverb_idle_roam, WVM_IDLE + WVM_IDLE_UP, random() * 15); - - return VS_CALL_YES_DOING; - } - - return VS_CALL_YES_DONE; + self.moveto = self.origin; + self.steerto = v_forward; + self.animflag = ANIM_NO; } -float walker_attackverb_meele(float eval) +void walker_move_idle_roam() { - switch (eval) - { - case VCM_EVAL: - - vector wish_angle; - - if (cvar("g_turrets_nofire")) - return VS_CALL_NO; +} - if (self.animflag == ANIM_SWIM || self.animflag == ANIM_MEELE) - return VS_CALL_NO; +void walker_move_idle() +{ +} - if (!self.enemy) - return VS_CALL_NO; +float walker_attack_meele() +{ - wish_angle = angleofs(self,self.enemy); + vector wish_angle; - if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_meele_range")) - if (fabs(wish_angle_y) < 15) - return verb.verb_static_value; - return VS_CALL_NO; + if (self.animflag == ANIM_SWIM || self.animflag == ANIM_MEELE) + return 0; - case VCM_DO: + wish_angle = angleofs(self,self.enemy); - self.moveto = self.enemy.origin; - self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95); - self.animflag = ANIM_MEELE; + if (self.tur_dist_enemy > cvar("g_turrets_unit_walker_std_meele_range")) + return 0; + else + if (fabs(wish_angle_y) > 15) + return 0; - return VS_CALL_YES_DOING; - } + self.moveto = self.enemy.origin; + self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95); + self.animflag = ANIM_MEELE; - return VS_CALL_YES_DONE; + return 1; } -float walker_attackverb_rockets(float eval) +float walker_attack_rockets() { - switch (eval) - { - case VCM_EVAL: - if (self.tur_head.attack_finished_single > time) - return VS_CALL_NO; - - if not(self.enemy) - return VS_CALL_NO; - - if (cvar("g_turrets_nofire")) - return VS_CALL_NO; - - if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_rockets_range_min")) - return VS_CALL_NO; - - if (self.tur_dist_enemy > cvar("g_turrets_unit_walker_std_rockets_range")) - return VS_CALL_NO; - - return verb.verb_static_value; + if (self.tur_head.attack_finished_single > time) + return 0; - case VCM_DO: + if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_rockets_range_min")) + return 0; - entity rv; + if (self.tur_dist_enemy > cvar("g_turrets_unit_walker_std_rockets_range")) + return 0; - rv = spawn(); - rv.think = rv_think; - rv.nextthink = time; - rv.cnt = 4; - rv.owner = self; + entity rv; - self.tur_head.attack_finished_single = time + cvar("g_turrets_unit_walker_std_rocket_refire"); + rv = spawn(); + rv.think = rv_think; + rv.nextthink = time; + rv.cnt = 4; + rv.owner = self; - return VS_CALL_YES_DONE; - } + self.tur_head.attack_finished_single = time + cvar("g_turrets_unit_walker_std_rocket_refire"); - return VS_CALL_YES_DONE; + return 1; } void walker_postthink() @@ -823,8 +590,25 @@ void walker_postthink() makevectors(self.angles); self.angles_x *= -1; - verbstack_pop(self.walker_verbs_attack); - verbstack_pop(self.walker_verbs_move); + if ((self.spawnflags & TSF_NO_PATHBREAK) && self.pathcurrent) + walker_move_path(); + else if (self.enemy == world) + { + if(self.pathcurrent) + walker_move_path(); + else + walker_move_idle_pause(); + } + else + { + if not (self.animflag == ANIM_MEELE) + if not (walker_attack_rockets()) + walker_attack_meele(); + + if not (self.animflag == ANIM_MEELE) + walker_move_enemy(); + } + walker_animate(); } @@ -833,7 +617,6 @@ void walker_attack() { entity flash; - //w_deathtypestring = "was miniguned"; sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM); fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, cvar("g_balance_uzi_bulletconstant")); endFireBallisticBullet(); @@ -853,7 +636,7 @@ void walker_attack() flash.alpha = 1; flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION; - self.uzi_bulletcounter = self.uzi_bulletcounter = 0; + self.uzi_bulletcounter = 0; } self.uzi_bulletcounter = self.uzi_bulletcounter + 1; @@ -894,8 +677,8 @@ void walker_respawnhook() void walker_diehook() { - turret_trowgib2(self.origin,self.velocity + v_up * 200,'-0.6 -0.2 -02',self,time + random() * 1); - turret_trowgib2(self.origin + '0 0 64',self.velocity + v_forward * 150 + v_up * 150,'-0.2 -0.2 -02',self.tur_head,time + random() * 2 + 3); + turret_trowgib2(self.origin, self.velocity + v_up * 200, '-0.6 -0.2 -02', self,time + random() * 1); + turret_trowgib2(self.origin + '0 0 64', self.velocity + v_forward * 150 + v_up * 150, '-0.2 -0.2 -02', self.tur_head, 3 + time + random() * 2); if (self.pathcurrent) pathlib_deletepath(self.pathcurrent.owner); @@ -903,18 +686,8 @@ void walker_diehook() self.pathcurrent = world; if (self.damage_flags & TFL_DMG_DEATH_NORESPAWN) - { remove(self.wkr_spawn); - verbstack_flush(self.walker_verbs_move); - verbstack_flush(self.walker_verbs_attack); - verbstack_flush(self.walker_verbs_idle); - - remove(self.walker_verbs_move); - remove(self.walker_verbs_attack); - remove(self.walker_verbs_idle); - } - } void turret_walker_dinit() @@ -926,7 +699,7 @@ void turret_walker_dinit() self.wkr_spawn = spawn(); self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE; - self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_HEADATTACHED; + self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE ; self.aim_flags = TFL_AIM_LEAD; if (cvar("g_antilag_bullets")) @@ -944,18 +717,7 @@ void turret_walker_dinit() remove(self); return; } - setsize(self.tur_head,'0 0 0','0 0 0'); - self.walker_verbs_move = spawn(); - self.walker_verbs_attack = spawn(); - self.walker_verbs_idle = spawn(); - - verbstack_push(self.walker_verbs_move, walker_moveverb_idle, WVM_IDLE, 0, self); - verbstack_push(self.walker_verbs_move, walker_moveverb_enemy, WVM_ENEMY, 0, self); - verbstack_push(self.walker_verbs_move, walker_moveverb_path, WVM_PATH, 0, self); - - verbstack_push(self.walker_verbs_attack, walker_attackverb_meele, WVA_MEELE, 0, self); - verbstack_push(self.walker_verbs_attack, walker_attackverb_rockets, WVA_ROCKET, 0, self); self.damage_flags |= TFL_DMG_DEATH_NOGIBS; @@ -969,16 +731,16 @@ void turret_walker_dinit() setmodel(self.wkr_spawn,"models/turrets/walker_spawn.md3"); - setattachment(self.tur_head,self,"tag_head"); - self.wkr_spawn.angles = self.angles; self.wkr_spawn.solid = SOLID_NOT; - traceline(self.origin + '0 0 16', self.origin - '0 0 10000', MOVE_WORLDONLY, self); - setorigin(self.wkr_spawn,trace_endpos + '0 0 4'); - setorigin(self,self.wkr_spawn.origin); + setsize(self, WALKER_MIN, WALKER_MAX); + + setorigin(self,self.origin); + traceline(self.origin + '0 0 128', self.origin - '0 0 10000', MOVE_NORMAL, self); - setsize(self,WALKER_MIN,WALKER_MAX); + setorigin(self.wkr_spawn, trace_endpos + '0 0 4'); + setorigin(self, self.wkr_spawn.origin); self.idle_aim = '0 0 0'; self.turret_firecheckfunc = walker_firecheck; @@ -1007,6 +769,8 @@ void turret_walker_dinit() void spawnfunc_turret_walker() { + walker_loadcvars(); + g_turrets_common_precash(); precache_model ("models/turrets/walker_head_minigun.md3"); diff --git a/data/unit_ewheel.cfg b/data/unit_ewheel.cfg index a6d2a8634..df0562af9 100644 --- a/data/unit_ewheel.cfg +++ b/data/unit_ewheel.cfg @@ -9,12 +9,12 @@ set g_turrets_unit_ewheel_speed_slow 150 set g_turrets_unit_ewheel_speed_slower 50 set g_turrets_unit_ewheel_speed_stop 25 -set g_turrets_unit_ewheel_std_shot_dmg 20 +set g_turrets_unit_ewheel_std_shot_dmg 30 set g_turrets_unit_ewheel_std_shot_refire 0.1 set g_turrets_unit_ewheel_std_shot_spread 0.025 -set g_turrets_unit_ewheel_std_shot_force 50 +set g_turrets_unit_ewheel_std_shot_force 125 set g_turrets_unit_ewheel_std_shot_radius 50 -set g_turrets_unit_ewheel_std_shot_speed 3000 +set g_turrets_unit_ewheel_std_shot_speed 9000 set g_turrets_unit_ewheel_std_shot_volly 2 set g_turrets_unit_ewheel_std_shot_volly_refire 1 @@ -40,3 +40,4 @@ set g_turrets_unit_ewheel_std_aim_maxpitch 45 set g_turrets_unit_ewheel_std_track_type 1 set g_turrets_unit_ewheel_std_track_accel_pitch 0 +set g_turrets_unit_ewheel_std_track_accel_rot 0 diff --git a/data/unit_walker.cfg b/data/unit_walker.cfg index 136e4166e..607553c8e 100644 --- a/data/unit_walker.cfg +++ b/data/unit_walker.cfg @@ -48,11 +48,14 @@ set g_turrets_unit_walker_std_rocket_refire 10 set g_turrets_unit_walker_std_rocket_dmg 50 set g_turrets_unit_walker_std_rocket_radius 150 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_turnrate 0.4 set g_turrets_unit_walker_std_rocket_speed 900 -set g_turrets_unit_walker_std_rocket_speed_add 0 // 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_range 100 set g_turrets_unit_walker_std_meele_dmg 100 set g_turrets_unit_walker_std_meele_force 600 + +set g_turrets_unit_walker_std_track_accel_pitch 0.5 +set g_turrets_unit_walker_std_track_accel_rot 0.8 +set g_turrets_unit_walker_std_track_blendrate 0.2 -- 2.39.2