[nexuiz-commits] r8494 - in trunk/data: . models/turrets qcsrc/server qcsrc/server/tturrets/include qcsrc/server/tturrets/system qcsrc/server/tturrets/units
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Jan 11 12:20:14 EST 2010
Author: tzork
Date: 2010-01-11 12:20:13 -0500 (Mon, 11 Jan 2010)
New Revision: 8494
Added:
trunk/data/models/turrets/walker_body.md3.framegroups
Modified:
trunk/data/qcsrc/server/miscfunctions.qc
trunk/data/qcsrc/server/tturrets/include/turrets_early.qh
trunk/data/qcsrc/server/tturrets/system/system_damage.qc
trunk/data/qcsrc/server/tturrets/system/system_main.qc
trunk/data/qcsrc/server/tturrets/system/system_misc.qc
trunk/data/qcsrc/server/tturrets/units/unit_ewheel.qc
trunk/data/qcsrc/server/tturrets/units/unit_walker.qc
trunk/data/unit_ewheel.cfg
trunk/data/unit_walker.cfg
Log:
All turrets: Get rid of TFL_TURRCAPS_HEADATTACHED, all turrets use attached heads now.
Walker & eWheel: Get rid of verbstack and use .framegroups
Added: trunk/data/models/turrets/walker_body.md3.framegroups
===================================================================
--- trunk/data/models/turrets/walker_body.md3.framegroups (rev 0)
+++ trunk/data/models/turrets/walker_body.md3.framegroups 2010-01-11 17:20:13 UTC (rev 8494)
@@ -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
Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc 2010-01-10 21:41:47 UTC (rev 8493)
+++ trunk/data/qcsrc/server/miscfunctions.qc 2010-01-11 17:20:13 UTC (rev 8494)
@@ -131,10 +131,10 @@
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 @@
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 @@
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 @@
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 @@
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 @@
p2 = p1;
p = min(p1, p2);
-
+
if (p < 0)
break;
@@ -2833,3 +2833,30 @@
}
#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;
+}
Modified: trunk/data/qcsrc/server/tturrets/include/turrets_early.qh
===================================================================
--- trunk/data/qcsrc/server/tturrets/include/turrets_early.qh 2010-01-10 21:41:47 UTC (rev 8493)
+++ trunk/data/qcsrc/server/tturrets/include/turrets_early.qh 2010-01-11 17:20:13 UTC (rev 8494)
@@ -197,7 +197,7 @@
#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;
Modified: trunk/data/qcsrc/server/tturrets/system/system_damage.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/system_damage.qc 2010-01-10 21:41:47 UTC (rev 8493)
+++ trunk/data/qcsrc/server/tturrets/system/system_damage.qc 2010-01-11 17:20:13 UTC (rev 8494)
@@ -148,9 +148,7 @@
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 @@
}
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_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 @@
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 @@
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;
}
}
Modified: trunk/data/qcsrc/server/tturrets/system/system_main.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/system_main.qc 2010-01-10 21:41:47 UTC (rev 8493)
+++ trunk/data/qcsrc/server/tturrets/system/system_main.qc 2010-01-11 17:20:13 UTC (rev 8494)
@@ -42,10 +42,7 @@
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 @@
{
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 @@
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,20 +254,12 @@
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)
{
case TFL_TRACKTYPE_STEPMOTOR:
@@ -282,21 +267,21 @@
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 @@
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 @@
{
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,16 +537,11 @@
}
// 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);
tvt_tadf = vlen(tvt_tadv);
@@ -864,7 +844,6 @@
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 @@
self.think = turret_think;
self.nextthink = time;
}
+
void turrets_manager_think()
{
self.nextthink = time + 1;
@@ -908,9 +888,8 @@
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,9 +908,8 @@
*/
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 @@
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 @@
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 @@
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 @@
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 @@
* 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 @@
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 @@
// 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 @@
}
// 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 @@
// 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 @@
// 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 @@
// 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 @@
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,44 +1206,12 @@
}
}
-// 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;
- }
+ self.idle_aim = '0 0 0';
- 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;
-
// Team color
if (self.team == COLOR_TEAM1) self.colormod = '1.4 0.8 0.8';
if (self.team == COLOR_TEAM2) self.colormod = '0.8 0.8 1.4';
@@ -1269,19 +1222,14 @@
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 @@
#endif
// Its all good.
+ self.turrcaps_flags |= TFL_TURRCAPS_ISTURRET;
+
self.classname = "turret_main";
self.tur_active = 1;
Modified: trunk/data/qcsrc/server/tturrets/system/system_misc.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/system_misc.qc 2010-01-10 21:41:47 UTC (rev 8493)
+++ trunk/data/qcsrc/server/tturrets/system/system_misc.qc 2010-01-11 17:20:13 UTC (rev 8494)
@@ -271,7 +271,9 @@
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);
Modified: trunk/data/qcsrc/server/tturrets/units/unit_ewheel.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_ewheel.qc 2010-01-10 21:41:47 UTC (rev 8493)
+++ trunk/data/qcsrc/server/tturrets/units/unit_ewheel.qc 2010-01-11 17:20:13 UTC (rev 8494)
@@ -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 @@
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 @@
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 @@
}
-/*
-float ewheel_moveverb_roam(float eval)
+void ewheel_move_path()
{
- switch (eval)
- {
- case VCM_EVAL:
- if (!self.enemy)
- 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;
-
- 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;
-}
-*/
-
-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 @@
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 @@
// 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,8 +230,10 @@
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 @@
}
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 @@
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 @@
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 @@
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;
}
Modified: trunk/data/qcsrc/server/tturrets/units/unit_walker.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_walker.qc 2010-01-10 21:41:47 UTC (rev 8493)
+++ trunk/data/qcsrc/server/tturrets/units/unit_walker.qc 2010-01-11 17:20:13 UTC (rev 8494)
@@ -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 ANIM_JUMP 6
+#define ANIM_LAND 7
+#define ANIM_PAIN 8
+#define ANIM_MEELE 9
+#define ANIM_SWIM 10
+#define ANIM_ROAM 11
-#define WVM_IDLE_UP 25
-#define WVM_IDLE 50
+.float animflag;
+.entity wkr_spawn;
-#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 WALKER_MIN '-70 -70 0'
+#define WALKER_MAX '70 70 95'
-#define WVA_MINIGUN 100
-#define WVA_ROCKET 500
-#define WVA_MEELE 1000
-#define walker_verbs_attack verbs_attack
+#define WALKER_PATH(s,e) pathlib_astar(s,e)
-#define WVI_IDLE 1
-#define WVI_ROAM 10
-#define walker_verbs_idle verbs_idle
+float walker_meele_dmg;
+float walker_meele_force;
-.float animflag;
-.entity wkr_spawn;
+float walker_speed_stop;
+float walker_speed_walk;
+float walker_speed_run;
+float walker_speed_jump;
+float walker_speed_roam;
+float walker_speed_swim;
-#define WALKER_MIN '-70 -70 5'
-#define WALKER_MAX '70 70 90'
+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;
-#define WALKER_PATH(s,e) pathlib_astar(s,e)
+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,17 +73,31 @@
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()
{
vector real_angle;
@@ -84,179 +116,102 @@
{
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;
-
+ 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_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;
-
- 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;
+ if(self.frame != ANIM_PAIN)
+ defer(0.25,walker_setnoanim);
- self.frame = self.frame + 1;
+ self.frame = ANIM_PAIN;
- if (self.frame > 95)
- self.animflag = ANIM_NO;
-
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 @@
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 @@
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 @@
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 @@
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 @@
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;
-
- return VS_CALL_NO;
-
- case VCM_DO:
- // Do we have a path?
- if not(self.pathcurrent)
+ // 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)
{
- 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)
- {
- // Path endpoint reached
- pathlib_deletepath(self.pathcurrent.owner);
- self.pathcurrent = world;
+ // Path endpoint reached
+ pathlib_deletepath(self.pathcurrent.owner);
+ self.pathcurrent = world;
- if (self.pathgoal)
- {
- if (self.pathgoal.use)
- self.pathgoal.use();
+ 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;
+ if (self.pathgoal.enemy)
+ {
+ 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;
+ self.pathcurrent = self.pathcurrent.path_next;
- case VCM_REMOVE:
-
- if (self.pathcurrent)
- pathlib_deletepath(self.pathcurrent.owner);
-
- self.pathcurrent = world;
-
- return VS_CALL_YES_DONE;
- }
-
- 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;
-}
+ self.moveto = self.pathcurrent.origin;
+ self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
-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.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
- {
- 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_WALK;
+ case 1:
+ case 2:
+ if (self.animflag != ANIM_SWIM)
+ self.animflag = ANIM_WALK;
+ else
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:
+ self.moveto = self.origin;
+ self.steerto = v_forward;
+ self.animflag = ANIM_NO;
+}
- if (self.animflag == ANIM_MEELE)
- return VS_CALL_NO;
+void walker_move_idle_roam()
+{
+}
- 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;
+void walker_move_idle()
+{
}
-float walker_attackverb_meele(float eval)
+float walker_attack_meele()
{
- switch (eval)
- {
- case VCM_EVAL:
- vector wish_angle;
+ 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;
+ if (self.animflag == ANIM_SWIM || self.animflag == ANIM_MEELE)
+ return 0;
- if (!self.enemy)
- return VS_CALL_NO;
+ wish_angle = angleofs(self,self.enemy);
- wish_angle = angleofs(self,self.enemy);
+ if (self.tur_dist_enemy > cvar("g_turrets_unit_walker_std_meele_range"))
+ return 0;
+ else
+ if (fabs(wish_angle_y) > 15)
+ return 0;
- if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_meele_range"))
- if (fabs(wish_angle_y) < 15)
- return verb.verb_static_value;
+ self.moveto = self.enemy.origin;
+ self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
+ self.animflag = ANIM_MEELE;
- return VS_CALL_NO;
-
- case VCM_DO:
-
- self.moveto = self.enemy.origin;
- self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
- self.animflag = ANIM_MEELE;
-
- return VS_CALL_YES_DOING;
- }
-
- 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 (self.tur_head.attack_finished_single > time)
+ return 0;
- if not(self.enemy)
- return VS_CALL_NO;
+ if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_rockets_range_min"))
+ return 0;
- if (cvar("g_turrets_nofire"))
- return VS_CALL_NO;
+ if (self.tur_dist_enemy > cvar("g_turrets_unit_walker_std_rockets_range"))
+ return 0;
- if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_rockets_range_min"))
- return VS_CALL_NO;
+ entity rv;
- if (self.tur_dist_enemy > cvar("g_turrets_unit_walker_std_rockets_range"))
- return VS_CALL_NO;
+ rv = spawn();
+ rv.think = rv_think;
+ rv.nextthink = time;
+ rv.cnt = 4;
+ rv.owner = self;
- return verb.verb_static_value;
+ self.tur_head.attack_finished_single = time + cvar("g_turrets_unit_walker_std_rocket_refire");
- case VCM_DO:
-
- entity rv;
-
- rv = spawn();
- rv.think = rv_think;
- rv.nextthink = time;
- rv.cnt = 4;
- rv.owner = self;
-
- self.tur_head.attack_finished_single = time + cvar("g_turrets_unit_walker_std_rocket_refire");
-
- return VS_CALL_YES_DONE;
- }
-
- return VS_CALL_YES_DONE;
+ return 1;
}
void walker_postthink()
@@ -823,9 +590,26 @@
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 @@
{
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 @@
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_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 @@
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 @@
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,19 +717,8 @@
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;
self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
@@ -969,17 +731,17 @@
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);
- setsize(self,WALKER_MIN,WALKER_MAX);
+ setorigin(self,self.origin);
+ traceline(self.origin + '0 0 128', self.origin - '0 0 10000', MOVE_NORMAL, self);
+ 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;
self.turret_firefunc = walker_attack;
@@ -1007,6 +769,8 @@
void spawnfunc_turret_walker()
{
+ walker_loadcvars();
+
g_turrets_common_precash();
precache_model ("models/turrets/walker_head_minigun.md3");
Modified: trunk/data/unit_ewheel.cfg
===================================================================
--- trunk/data/unit_ewheel.cfg 2010-01-10 21:41:47 UTC (rev 8493)
+++ trunk/data/unit_ewheel.cfg 2010-01-11 17:20:13 UTC (rev 8494)
@@ -9,12 +9,12 @@
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_track_type 1
set g_turrets_unit_ewheel_std_track_accel_pitch 0
+set g_turrets_unit_ewheel_std_track_accel_rot 0
Modified: trunk/data/unit_walker.cfg
===================================================================
--- trunk/data/unit_walker.cfg 2010-01-10 21:41:47 UTC (rev 8493)
+++ trunk/data/unit_walker.cfg 2010-01-11 17:20:13 UTC (rev 8494)
@@ -48,11 +48,14 @@
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
More information about the nexuiz-commits
mailing list