[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