[nexuiz-commits] r6319 - in trunk/data/qcsrc/server: . tturrets/include tturrets/system tturrets/units

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Mar 27 05:36:50 EDT 2009


Author: tzork
Date: 2009-03-27 05:36:50 -0400 (Fri, 27 Mar 2009)
New Revision: 6319

Modified:
   trunk/data/qcsrc/server/pathlib.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_flac.qc
   trunk/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc
   trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc
   trunk/data/qcsrc/server/tturrets/units/unit_hk.qc
   trunk/data/qcsrc/server/tturrets/units/unit_machinegun.qc
   trunk/data/qcsrc/server/tturrets/units/unit_mlrs.qc
   trunk/data/qcsrc/server/tturrets/units/unit_phaser.qc
   trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc
   trunk/data/qcsrc/server/tturrets/units/unit_targettrigger.qc
   trunk/data/qcsrc/server/tturrets/units/unit_tessla.qc
   trunk/data/qcsrc/server/tturrets/units/unit_walker.qc
Log:
Better walker and ewheel.
Better fix for NaN angles (fixed turret_stdproc_track)
Fix unhanded damage type 0 on turret blow up
Support TFL_SHOOT_CUSTOM
Fix broken support units with TFL_TARGETSELECT_NOTURRETS
Fix idle_aim / defend aim
Fix missed body damage on support units
Fix in turret_tag_setup/turret_tag_fire_update for mangled md3 tags
Make tesla use te_csqc_lightningarc.
Restructure tela to conform a bit better.
Removed some un/rarely used crap
Updated units for above changes.
Fix harmless warning in pathlib

Modified: trunk/data/qcsrc/server/pathlib.qc
===================================================================
--- trunk/data/qcsrc/server/pathlib.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/pathlib.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -9,6 +9,8 @@
 
 #define medium spawnshieldtime
 
+//#define DEBUGPATHING
+
 entity openlist;
 entity closedlist;
 entity scraplist;
@@ -24,6 +26,10 @@
 float pathlib_recycle_cnt;
 float pathlib_searched_cnt;
 
+#ifdef DEBUGPATHING
+
+#endif
+
 float pathlib_bestopen_seached;
 float pathlib_bestcash_hits;
 float pathlib_bestcash_saved;
@@ -42,7 +48,7 @@
 entity best_open_node;
 .float is_path_node;
 
-//#define DEBUGPATHING
+
 #ifdef DEBUGPATHING
 float edge_show(vector point,float fsize);
 void mark_error(vector where,float lifetime);
@@ -900,14 +906,15 @@
     if not(scraplist)
         scraplist      = spawn();
 
-    pathlib_closed_cnt     = 0;
-    pathlib_open_cnt       = 0;
-    pathlib_made_cnt       = 0;
-    pathlib_merge_cnt      = 0;
-    pathlib_searched_cnt   = 0;
-    pathlib_bestcash_hits  = 0;
-    pathlib_bestcash_saved = 0;
-    pathlib_recycle_cnt    = 0;
+    pathlib_closed_cnt       = 0;
+    pathlib_open_cnt         = 0;
+    pathlib_made_cnt         = 0;
+    pathlib_merge_cnt        = 0;
+    pathlib_searched_cnt     = 0;
+    pathlib_bestopen_seached = 0;
+    pathlib_bestcash_hits    = 0;
+    pathlib_bestcash_saved   = 0;
+    pathlib_recycle_cnt      = 0;
 
     pathlib_gridsize       = 128;
     pathlib_movecost       = pathlib_gridsize;

Modified: trunk/data/qcsrc/server/tturrets/include/turrets_early.qh
===================================================================
--- trunk/data/qcsrc/server/tturrets/include/turrets_early.qh	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/include/turrets_early.qh	2009-03-27 09:36:50 UTC (rev 6319)
@@ -448,11 +448,11 @@
 * Stuff to plug into requierd but unused callbacks.
 */
 /// Always return 1
-float turret_stdproc_true();
+//float turret_stdproc_true();
 /// Always return 0
-float turret_stdproc_false();
+//float turret_stdproc_false();
 /// Always return nothing at all
-void turret_stdproc_nothing();
+//void turret_stdproc_nothing();
 
 /*
 * Target selection

Modified: trunk/data/qcsrc/server/tturrets/system/system_damage.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/system_damage.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/system/system_damage.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -180,7 +180,7 @@
     }
 
 // Go boom
-    RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,0,world);
+    RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,DEATH_TURRET,world);
 
     if(self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
     {
@@ -336,5 +336,3 @@
         baseent.think = turret_stdproc_die;
     }
 }
-
-

Modified: trunk/data/qcsrc/server/tturrets/system/system_main.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/system_main.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/system/system_main.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -1,13 +1,5 @@
 #define cvar_base "g_turrets_unit_"
 
-#define cvar_gets(s_base,s_add) strcat(s_base,s_add)
-/*
-string cvar_gets(string s_base,string s_add)
-{
-    return strcat(s_base,s_add);
-}
-*/
-
 void load_unit_settings(entity ent,string unitname,float is_reload)
 {
 
@@ -31,43 +23,48 @@
     {
         ent.enemy = world;
         ent.tur_head.avelocity = '0 0 0';
-        ent.tur_head.angles = ent.angles;
+
+        if (ent.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
+            ent.tur_head.angles = '0 0 0';
+        else
+            ent.tur_head.angles = ent.angles;
     }
-    ent.health      = cvar(cvar_gets(sbase,"_health")) * ent.turret_scale_health;
-    ent.respawntime = cvar(cvar_gets(sbase,"_respawntime")) * ent.turret_scale_respawn;
 
-    ent.shot_dmg          = cvar(cvar_gets(sbase,"_shot_dmg")) * ent.turret_scale_damage;
-    ent.shot_refire       = cvar(cvar_gets(sbase,"_shot_refire")) * ent.turret_scale_refire;
-    ent.shot_radius       = cvar(cvar_gets(sbase,"_shot_radius")) * ent.turret_scale_damage;
-    ent.shot_speed        = cvar(cvar_gets(sbase,"_shot_speed"));
-    ent.shot_spread       = cvar(cvar_gets(sbase,"_shot_spread"));
-    ent.shot_force        = cvar(cvar_gets(sbase,"_shot_force")) * ent.turret_scale_damage;
-    ent.shot_volly        = cvar(cvar_gets(sbase,"_shot_volly"));
-    ent.shot_volly_refire = cvar(cvar_gets(sbase,"_shot_volly_refire")) * ent.turret_scale_refire;
+    ent.health      = cvar(strcat(sbase,"_health")) * ent.turret_scale_health;
+    ent.respawntime = cvar(strcat(sbase,"_respawntime")) * ent.turret_scale_respawn;
 
-    ent.target_range         = cvar(cvar_gets(sbase,"_target_range")) * ent.turret_scale_range;
-    ent.target_range_min     = cvar(cvar_gets(sbase,"_target_range_min")) * ent.turret_scale_range;
-    ent.target_range_fire    = cvar(cvar_gets(sbase,"_target_range_fire")) * ent.turret_scale_range;
-    ent.target_range_optimal = cvar(cvar_gets(sbase,"_target_range_optimal")) * ent.turret_scale_range;
+    ent.shot_dmg          = cvar(strcat(sbase,"_shot_dmg")) * ent.turret_scale_damage;
+    ent.shot_refire       = cvar(strcat(sbase,"_shot_refire")) * ent.turret_scale_refire;
+    ent.shot_radius       = cvar(strcat(sbase,"_shot_radius")) * ent.turret_scale_damage;
+    ent.shot_speed        = cvar(strcat(sbase,"_shot_speed"));
+    ent.shot_spread       = cvar(strcat(sbase,"_shot_spread"));
+    ent.shot_force        = cvar(strcat(sbase,"_shot_force")) * ent.turret_scale_damage;
+    ent.shot_volly        = cvar(strcat(sbase,"_shot_volly"));
+    ent.shot_volly_refire = cvar(strcat(sbase,"_shot_volly_refire")) * ent.turret_scale_refire;
 
-    ent.target_select_rangebias  = cvar(cvar_gets(sbase,"_target_select_rangebias"));
-    ent.target_select_samebias   = cvar(cvar_gets(sbase,"_target_select_samebias"));
-    ent.target_select_anglebias  = cvar(cvar_gets(sbase,"_target_select_anglebias"));
-    ent.target_select_playerbias = cvar(cvar_gets(sbase,"_target_select_playerbias"));
+    ent.target_range         = cvar(strcat(sbase,"_target_range")) * ent.turret_scale_range;
+    ent.target_range_min     = cvar(strcat(sbase,"_target_range_min")) * ent.turret_scale_range;
+    ent.target_range_fire    = cvar(strcat(sbase,"_target_range_fire")) * ent.turret_scale_range;
+    ent.target_range_optimal = cvar(strcat(sbase,"_target_range_optimal")) * ent.turret_scale_range;
+
+    ent.target_select_rangebias  = cvar(strcat(sbase,"_target_select_rangebias"));
+    ent.target_select_samebias   = cvar(strcat(sbase,"_target_select_samebias"));
+    ent.target_select_anglebias  = cvar(strcat(sbase,"_target_select_anglebias"));
+    ent.target_select_playerbias = cvar(strcat(sbase,"_target_select_playerbias"));
     //ent.target_select_fov = cvar(cvar_gets(sbase,"_target_select_fov"));
 
-    ent.ammo_max      = cvar(cvar_gets(sbase,"_ammo_max")) * ent.turret_scale_ammo;
-    ent.ammo_recharge = cvar(cvar_gets(sbase,"_ammo_recharge")) * ent.turret_scale_ammo;
+    ent.ammo_max      = cvar(strcat(sbase,"_ammo_max")) * ent.turret_scale_ammo;
+    ent.ammo_recharge = cvar(strcat(sbase,"_ammo_recharge")) * ent.turret_scale_ammo;
 
-    ent.aim_firetolerance_dist = cvar(cvar_gets(sbase,"_aim_firetolerance_dist"));
-    ent.aim_speed    = cvar(cvar_gets(sbase,"_aim_speed")) * ent.turret_scale_aim;
-    ent.aim_maxrot   = cvar(cvar_gets(sbase,"_aim_maxrot"));
-    ent.aim_maxpitch = cvar(cvar_gets(sbase,"_aim_maxpitch"));
+    ent.aim_firetolerance_dist = cvar(strcat(sbase,"_aim_firetolerance_dist"));
+    ent.aim_speed    = cvar(strcat(sbase,"_aim_speed")) * ent.turret_scale_aim;
+    ent.aim_maxrot   = cvar(strcat(sbase,"_aim_maxrot"));
+    ent.aim_maxpitch = cvar(strcat(sbase,"_aim_maxpitch"));
 
-    ent.track_type        = cvar(cvar_gets(sbase,"_track_type"));
-    ent.track_accel_pitch = cvar(cvar_gets(sbase,"_track_accel_pitch"));
-    ent.track_accel_rot   = cvar(cvar_gets(sbase,"_track_accel_rot"));
-    ent.track_blendrate   = cvar(cvar_gets(sbase,"_track_blendrate"));
+    ent.track_type        = cvar(strcat(sbase,"_track_type"));
+    ent.track_accel_pitch = cvar(strcat(sbase,"_track_accel_pitch"));
+    ent.track_accel_rot   = cvar(strcat(sbase,"_track_accel_rot"));
+    ent.track_blendrate   = cvar(strcat(sbase,"_track_blendrate"));
 
     if(is_reload)
         if(ent.turret_respawnhook)
@@ -75,6 +72,7 @@
 
 }
 
+/*
 float turret_stdproc_true()
 {
     return 1;
@@ -85,10 +83,12 @@
     return 0;
 }
 
+
 void turret_stdproc_nothing()
 {
     return;
 }
+*/
 
 /**
 ** updates enemy distances, predicted impact point/time
@@ -102,21 +102,6 @@
     oldself = self;
     self = t_turret;
 
-    if (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
-    {
-        self.tur_head.angles_x = self.tur_head.angles_x * -1;
-        self.angles_x = self.angles_x * -1;
-        makevectors(self.tur_head.angles + self.angles);
-        self.tur_head.angles_x = self.tur_head.angles_x * -1;
-        self.angles_x = self.angles_x * -1;
-    }
-    else
-    {
-        self.tur_head.angles_x = self.tur_head.angles_x * -1;
-        makevectors(self.tur_head.angles);
-        self.tur_head.angles_x = self.tur_head.angles_x * -1;
-    }
-
     enemy_pos = real_origin(self.enemy);
 
     turret_tag_fire_update();
@@ -222,149 +207,133 @@
 //.entity aim_mark;
 void turret_stdproc_track()
 {
-    vector wish_angle;  // This is where we want to aim
-
-    vector real_angle;  // This is where we can aim
+    vector target_angle; // This is where we want to aim
+    vector move_angle;   // This is where we can aim
     float f_tmp;
 
     if (self.track_flags == TFL_TRACK_NO)
         return;
 
-
     if(!self.tur_active)
-    {
-        wish_angle = self.idle_aim - ('1 0 0' * self.aim_maxpitch);
-    }
+        target_angle = self.idle_aim - ('1 0 0' * self.aim_maxpitch);
     else if (self.enemy == world)
     {
         if(time > self.lip)
             if (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
-                wish_angle = self.idle_aim + self.angles;
+                target_angle = self.idle_aim + self.angles;
             else
-                wish_angle = self.idle_aim;
+                target_angle = self.idle_aim;
         else
-            wish_angle = vectoangles(normalize(self.tur_aimpos - self.tur_head.origin));
+            target_angle = vectoangles(normalize(self.tur_aimpos - self.tur_shotorg));
     }
     else
     {
         // Find the direction
-        /*
-        if (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
-            wish_angle = normalize(self.tur_aimpos - self.tur_shotorg);
-        else
-        */
-        wish_angle = normalize(self.tur_aimpos - self.tur_shotorg);
-        wish_angle = vectoangles(wish_angle); // And make a angle
+        target_angle = normalize(self.tur_aimpos - self.tur_shotorg);
+        target_angle = vectoangles(target_angle); // And make a angle
     }
 
-    self.tur_head.angles_x = anglemods(self.tur_head.angles_x);
-    self.tur_head.angles_y = anglemods(self.tur_head.angles_y);
+    self.tur_head.angles_x = safeangle(self.tur_head.angles_x);
+    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
+    vector a_off;
+
+
     if (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
     {
-            real_angle = wish_angle - (self.angles + self.tur_head.angles);
-            real_angle = shortangle_v(real_angle,(self.angles + self.tur_head.angles));
+        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';
+
     }
     else
     {
-        real_angle = wish_angle - self.tur_head.angles;
-        real_angle = shortangle_v(real_angle,self.tur_head.angles);
+        move_angle = target_angle - self.tur_head.angles;
+        move_angle = shortangle_vxy(move_angle,self.tur_head.angles);
+        a_off = self.angles;
     }
 
-    // Limit pitch
-    if (self.track_flags & TFL_TRACK_PITCH)
-        real_angle_x = bound(self.aim_maxpitch * -1,real_angle_x,self.aim_maxpitch);
-
-    // Limit rot
-    if (self.track_flags & TFL_TRACK_ROT)
-        real_angle_y = bound(self.aim_maxrot * -1,real_angle_y,self.aim_maxrot);
-
     switch(self.track_type)
     {
         case TFL_TRACKTYPE_STEPMOTOR:
-
-            /*
-            setorigin(self.aim_mark,self.tur_aimpos);
-            wish_angle = normalize(self.tur_aimpos -  self.tur_shotorg_updated);
-            real_angle = vectoangles(wish_angle);
-            self.tur_head.angles = real_angle;
-            return;
-            */
             f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
-
-            // Limit turning speed
-            real_angle_x = bound((-1 * f_tmp),real_angle_x, f_tmp);
-            real_angle_y = bound((-1 * f_tmp),real_angle_y, f_tmp);
-
-            // Limit pich and rot.
             if (self.track_flags & TFL_TRACK_PITCH)
-                self.tur_head.angles_x = bound((-1 * self.aim_maxpitch),self.tur_head.angles_x + real_angle_x,self.aim_maxpitch);
+            {
+                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 + a_off_x < -self.aim_maxpitch)
+                    self.tur_head.angles_x = a_off_x - self.aim_maxpitch;
+            }
+
             if (self.track_flags & TFL_TRACK_ROT)
-                self.tur_head.angles_y = bound((-1 * self.aim_maxrot),self.tur_head.angles_y  + real_angle_y,self.aim_maxrot);
+            {
+                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 - a_off_y) < -self.aim_maxrot)
+                    self.tur_head.angles_y = a_off_y - self.aim_maxrot;
+            }
+
             return;
 
+        case TFL_TRACKTYPE_FLUIDINERTIA:
+            f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
+            move_angle_x = bound(-self.aim_speed, move_angle_x * self.track_accel_pitch * f_tmp,self.aim_speed);
+            move_angle_y = bound(-self.aim_speed, move_angle_y * self.track_accel_rot * f_tmp,self.aim_speed);
+            move_angle = (self.tur_head.avelocity * self.track_blendrate) + (move_angle * (1 - self.track_blendrate));
             break;
 
         case TFL_TRACKTYPE_FLUIDPRECISE:
 
-            real_angle_y = bound(self.aim_speed * -1,real_angle_y ,self.aim_speed);
-            real_angle_x = bound(self.aim_speed * -1,real_angle_x ,self.aim_speed);
+            move_angle_y = bound(-self.aim_speed, move_angle_y, self.aim_speed);
+            move_angle_x = bound(-self.aim_speed, move_angle_x, self.aim_speed);
 
             break;
-
-        case TFL_TRACKTYPE_FLUIDINERTIA:
-
-            f_tmp = self.aim_speed * self.ticrate;
-
-            real_angle_y = bound(self.aim_speed * -1,real_angle_y * self.track_accel_rot * f_tmp,self.aim_speed);
-            real_angle_x = bound(self.aim_speed * -1,real_angle_x * self.track_accel_pitch * f_tmp,self.aim_speed);
-            real_angle = (self.tur_head.avelocity * self.track_blendrate) + (real_angle * (1 - self.track_blendrate));
-
-            self.tur_head.avelocity_z = real_angle_z;
-
-            break;
     }
 
-    // Limit pitch
+    //  pitch
     if (self.track_flags & TFL_TRACK_PITCH)
     {
-        self.tur_head.avelocity_x = real_angle_x;
-        if (self.tur_head.angles_x > 360)
+        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)
         {
-            self.tur_head.angles_x -= floor(self.tur_head.angles_x / 360) * 360;
-            //self.tur_head.angles_x = self.aim_maxpitch;
-            //self.tur_head.avelocity_x = 0;
+            self.tur_head.avelocity_x = 0;
+            self.tur_head.angles_x = a_off_x + self.aim_maxpitch;
         }
-        else if (self.tur_head.angles_x < -360)
+        if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) + a_off_x < -self.aim_maxpitch)
         {
-            self.tur_head.angles_x += floor(self.tur_head.angles_x / 360) * 360;
-            //self.tur_head.angles_x = (self.aim_maxpitch * -1);
-            //self.tur_head.avelocity_x = 0;
+            self.tur_head.avelocity_x = 0;
+            self.tur_head.angles_x = a_off_x - self.aim_maxpitch;
         }
+
     }
 
-    // Limit rot
+    //  rot
     if (self.track_flags & TFL_TRACK_ROT)
     {
-        self.tur_head.avelocity_y = real_angle_y;
-        if (self.tur_head.angles_y > 360)
+        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)
         {
-            self.tur_head.angles_y -= floor(self.tur_head.angles_y / 360) * 360;
-            //self.tur_head.angles_y = self.aim_maxrot;
-            //self.tur_head.avelocity_y = 0;
+            self.tur_head.avelocity_y = 0;
+            self.tur_head.angles_y = a_off_y + self.aim_maxrot;
         }
-        else if (self.tur_head.angles_y < -360)
+
+        if(((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate) - a_off_y) < -self.aim_maxrot)
         {
-            self.tur_head.angles_y += floor(self.tur_head.angles_y / 360) * 360;
-            //self.tur_head.angles_y = (self.aim_maxrot * -1);
-            //self.tur_head.avelocity_y = 0;
+            self.tur_head.avelocity_y = 0;
+            self.tur_head.angles_y = a_off_y - self.aim_maxrot;
         }
+
     }
+
 }
 
+
 /*
  + = implemented
  - = not implemented
@@ -400,7 +369,7 @@
     if((self.shoot_flags & TFL_SHOOT_VOLLYALWAYS) && (self.volly_counter != self.shot_volly))
         return 1;
 
-    //
+    // Lack of zombies makes shooting dead things unnecessary :P
     if (self.firecheck_flags & TFL_FIRECHECK_DEAD)
         if (self.enemy.deadflag != DEAD_NO) return 0;
 
@@ -506,7 +475,8 @@
 	// enemy turrets
 	if (validate_flags & TFL_TARGETSELECT_NOTURRETS)
         if (e_target.turret_firefunc || e_target.owner.tur_head == e_target)
-			return -9;
+            if(e_target.team != e_turret.team) // Dont break support units.
+                return -9;
 
     // Missile
     if (e_target.flags & FL_PROJECTILE)
@@ -691,7 +661,7 @@
 
     // Inactive turrets needs to run the think loop,
     // So they can handle animation and wake up if need be.
-    if(!self.tur_active)
+    if not (self.tur_active)
     {
         turret_stdproc_track();
         return;
@@ -700,7 +670,7 @@
     //This is just wrong :|
     if(self.deadflag != DEAD_NO)
     {
-        dprint("Warning:dead turret running the think function!\n");
+        dprint("WARNING: dead turret running the think function!\n");
         return;
     }
 
@@ -727,6 +697,24 @@
         }
         self.enemy = world;
     }
+    else if(self.shoot_flags & TFL_SHOOT_CUSTOM)
+    {
+        // This one is doing something oddball. assume its handles what needs to be handled.
+
+        // Predict?
+        if not((self.aim_flags & TFL_AIM_NO))
+            self.tur_aimpos = turret_stdproc_aim_generic();
+
+        // Turn & pitch?
+        if (!self.track_flags & TFL_TRACK_NO)
+            turret_stdproc_track();
+
+        turret_do_updates(self);
+
+        // Fire?
+        if (self.turret_firecheckfunc())
+            turret_fire();
+    }
     else
     {
         // Special case for volly always. if it fired once it must compleate the volly.
@@ -737,7 +725,6 @@
                 if not((self.aim_flags & TFL_AIM_NO))
                     self.tur_aimpos = turret_stdproc_aim_generic();
 
-
                 // Turn & pitch
                 if (!self.track_flags & TFL_TRACK_NO)
                     turret_stdproc_track();
@@ -777,20 +764,11 @@
         else
             self.lip = time + cvar("g_turrets_aimidle_delay"); // Keep track of the last time we had a target.
 
-
-        /*
-        turret_do_updates(self);
-        if (self.turret_firecheckfunc() > 0)
-            turret_fire();
-        */
-
-        //turret_do_updates(self);
-        // Predict or whatnot
+        // Predict?
         if not((self.aim_flags & TFL_AIM_NO))
             self.tur_aimpos = turret_stdproc_aim_generic();
 
-        //turret_do_updates(self);
-        // Turn & pitch
+        // Turn & pitch?
         if (!self.track_flags & TFL_TRACK_NO)
             turret_stdproc_track();
 
@@ -798,13 +776,11 @@
         // Fire?
         if (self.turret_firecheckfunc())
             turret_fire();
-
-
-
     }
 
     // do any per-turret stuff
-    self.turret_postthink();
+    if(self.turret_postthink)
+        self.turret_postthink();
 }
 
 void turret_fire()
@@ -1132,18 +1108,27 @@
         }
     }
 
-
 // Put pices in place
-    if (!(self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED))
+    if not (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
         setorigin(self.tur_head,self.origin);
 
-    // In target defense mode, aim on the spot to defens when idle.
-    if (self.tur_defend)
-        self.idle_aim  = self.tur_head.angles + angleofs(self.tur_head,self.tur_defend);
+    // 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';
+    }
     else
-        self.idle_aim  = self.angles;
+    {
+        if (self.tur_defend)
+            self.idle_aim  = self.tur_head.angles + angleofs(self.tur_head,self.tur_defend);
+        else
+            self.idle_aim  = self.angles;
+    }
 
-    if (!(self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED))
+    if not (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
         self.tur_head.angles    = self.idle_aim;
 
     if (!self.health)
@@ -1171,7 +1156,8 @@
         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.turret_postthink       = turret_stdproc_nothing;
+        self.event_damage           = turret_stdproc_damage;
         self.tur_head.event_damage  = turret_stdproc_damage;
     }
     else
@@ -1179,10 +1165,10 @@
         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.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.turret_addtarget       = turret_stdproc_false;
     }
 
     self.use = turret_stdproc_use;

Modified: trunk/data/qcsrc/server/tturrets/system/system_misc.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/system_misc.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/system/system_misc.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -1,7 +1,21 @@
-//--// Some supptort routines //--//
+//--// Some support routines //--//
 
-#define anglemods(a) (a - floor(a / 360) * 360)
+#define anglemodss(a) (a - floor(a / 360) * 360)
+float(float v) anglemods =
+{
+	v = v - 360 * floor(v / 360);
+	return v;
+};
+float safeangle(float a)
+{
+    if((a > -361) && (a < 361))
+        return a;
 
+    a -= (360 * floor(a / 360));
+
+    return a;
+}
+
 float shortangle_f(float ang1,float ang2)
 {
     if(ang1 > ang2)
@@ -29,6 +43,16 @@
     return vtmp;
 }
 
+vector shortangle_vxy(vector ang1,vector ang2)
+{
+    vector vtmp;
+
+    vtmp_x = shortangle_f(ang1_x,ang2_x);
+    vtmp_y = shortangle_f(ang1_y,ang2_y);
+
+    return vtmp;
+}
+
 // Get real origin
 vector real_origin(entity ent)
 {
@@ -235,15 +259,20 @@
     return v_res;
 }
 
-float turret_tag_setup(float linked)
+float turret_tag_setup()
 {
-    // Laters dooz
-    if (linked)
+    if(!self.tur_head)
+    {
+        dprint("Call to turret_tag_setup with self.tur_head missing!\n");
+        self.tur_shotorg = '0 0 0';
         return 0;
+    }
 
     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);
+
     return 1;
 }
 
@@ -251,11 +280,14 @@
 {
     if(!self.tur_head)
     {
+        dprint("Call to turret_tag_fire_update with self.tur_head missing!\n");
         self.tur_shotorg = '0 0 0';
-        return 1;
+        return 0;
     }
 
     self.tur_shotorg = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
+    v_forward = normalize(v_forward);
+
     //dprint("update: tur_shotorg: ",vtos(self.tur_shotorg)," origin:", vtos(self.tur_head.origin), " angels: ", vtos(self.tur_head.angles),"\n");
 
     return 1;

Modified: trunk/data/qcsrc/server/tturrets/units/unit_ewheel.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_ewheel.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_ewheel.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -4,7 +4,7 @@
 
     org2 = findbetterlocation (self.origin, 8);
     pointparticles(particleeffectnum("laser_impact"), org2, trace_plane_normal * 1000, 1);
-
+    //w_deathtypestring = "saw the eweel. to late.";
 #ifdef TURRET_DEBUG
     float d;
 
@@ -61,184 +61,278 @@
 
 }
 
-#define EWHEEL_MASS 25
-#define EWHEEL_MAXSPEED 800
-#define EWHEEL_ACCEL_SLOW 100
-#define EWHEEL_ACCEL_FAST 350
-#define EWHEEL_BREAK_SLOW 150
-#define EWHEEL_BREAK_FAST 250
-#define EWHEEL_DRAG 0.25
-
-void ewheel_enemymove()
+float ewheel_moveverb_path(float eval)
 {
-    vector wish_angle,real_angle,steer,avoid;
-    float turn_limit,angle_ofs;
+    switch (eval)
+    {
+    case VCM_EVAL:
 
-    //steer = steerlib_attract2(point,0.5,2000,0.95);
-    steer = steerlib_pull(self.enemy.origin);
-    avoid = steerlib_traceavoid(0.3,350);
+        if (self.pathcurrent)
+            return verb.verb_static_value;
 
-    wish_angle = normalize(avoid * 0.5 + steer);
-    wish_angle = vectoangles(wish_angle);
-    real_angle = wish_angle - self.angles;
+        return VS_CALL_NO;
+        break;
 
-    if (real_angle_x > self.angles_x)
-    {
-        if (real_angle_x >= 180)
-            real_angle_x -= 360;
+    case VCM_DO:
+        // Do we have a path?
+        if not(self.pathcurrent)
+            return VS_CALL_NO;
+        else
+        {
+            // Are we close enougth to a path node to switch to the next?
+            if (vlen(self.origin  - self.pathcurrent.origin) < 32)
+                if (self.pathcurrent.path_next == 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.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;
+        }
+
+
+        if (self.pathcurrent)
+        {
+            switch (self.waterlevel)
+            {
+            case 0:
+            case 1:
+            case 2:
+            case 3:
+            }
+
+            self.moveto = self.pathcurrent.origin;
+            self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
+
+            self.frame += 1;
+            movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slow"),0.4);
+
+            return VS_CALL_YES_DOING;
+        }
+        else
+            return VS_CALL_YES_DONE;
+
+        break;
+
+    case VCM_REMOVE:
+
+        if (self.pathcurrent)
+            pathlib_deletepath(self.pathcurrent.owner);
+
+        self.pathcurrent = world;
+
+        return VS_CALL_YES_DONE;
+
+        break;
     }
-    else
-    {
-        if (real_angle_x <= -180)
-            real_angle_x += 360;
-    }
 
-    if (real_angle_y > self.tur_head.angles_y)
+    return VS_CALL_YES_DONE;
+}
+
+float ewheel_moveverb_enemy(float eval)
+{
+    switch (eval)
     {
-        if (real_angle_y >= 180)
-            real_angle_y -= 360;
-    }
-    else
-    {
-        if (real_angle_y <= -180)
-            real_angle_y += 360;
-    }
+    case VCM_EVAL:
+            if(self.enemy)
+                return verb.verb_static_value;
 
-    turn_limit = cvar("g_turrets_unit_ewheel_turnrate");
-    // Convert from dgr / sec to dgr / tic
-    turn_limit    = turn_limit / (1 / self.ticrate);
-    angle_ofs     = fabs(real_angle_y);
-    real_angle_y  = bound(turn_limit * -1,real_angle_y,turn_limit);
-    self.angles_y = (self.angles_y + real_angle_y);
+        return VS_CALL_NO;
 
-    // Simulate banking
-    self.angles_z = bound(-45,real_angle_y * -2,45);
+        break;
 
-    if (self.frame > 40)
-        self.frame = 1;
+    case VCM_DO:
 
-    makevectors(self.angles);
-    if (self.tur_dist_aimpos > self.target_range_optimal)
-    {
-        if ( angle_ofs < 1 )
+        self.moveto  = self.enemy.origin;
+        self.steerto = steerlib_arrive(self.enemy.origin,self.target_range_optimal);
+
+        if (self.tur_dist_enemy > self.target_range_optimal)
         {
-            self.frame += 2;
-            movelib_move(v_forward * EWHEEL_ACCEL_FAST,EWHEEL_MAXSPEED,EWHEEL_DRAG,EWHEEL_MASS,0);
+            if ( self.tur_head.spawnshieldtime < 1 )
+            {
+                self.frame += 2;
+                movelib_move_simple(v_forward ,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
+            }
+            else if (self.tur_head.spawnshieldtime < 2)
+            {
+                self.frame += 1;
+                movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slow"),0.4);
+            }
+            else
+            {
+                self.frame += 1;
+                movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slower"),0.4);
+            }
         }
-        else if (angle_ofs < 2)
+        else if (self.tur_dist_enemy < self.target_range_min)
         {
-            self.frame += 1;
-            movelib_move(v_forward * EWHEEL_ACCEL_SLOW,EWHEEL_MAXSPEED,EWHEEL_DRAG,EWHEEL_MASS,EWHEEL_BREAK_SLOW);
+            self.frame -= 1;
+            movelib_move_simple(v_forward * -1,cvar("g_turrets_unit_ewheel_speed_slow"),0.4);
         }
         else
         {
-            movelib_move('0 0 0',EWHEEL_MAXSPEED,EWHEEL_DRAG,EWHEEL_MASS,EWHEEL_BREAK_FAST);
+            movelib_beak_simple(cvar("g_turrets_unit_ewheel_speed_stop"));
         }
+
+        return VS_CALL_YES_DOING;
     }
-    else
-        movelib_move('0 0 0',EWHEEL_MAXSPEED,EWHEEL_DRAG,EWHEEL_MASS,EWHEEL_BREAK_FAST);
+
+
+    return VS_CALL_YES_DONE;
 }
 
-void ewheel_roammove()
+float ewheel_moveverb_runaway(float eval)
 {
-    movelib_move(v_forward,EWHEEL_MAXSPEED,0,EWHEEL_MASS,EWHEEL_BREAK_SLOW);
-    self.angles_z = 0;
+    switch (eval)
+    {
+    case VCM_EVAL:
+            if(self.enemy)
+            if(self.health < 50)
+                return verb.verb_static_value;
 
-    /*
-    vector wish_angle,real_angle,steer,avoid;
-    float turn_limit,angle_ofs;
-    float dist;
+            return VS_CALL_NO;
+        break;
 
-    return;
+    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;
 
-    dist = vlen(self.origin - self.pos1);
+        self.frame += 2;
+        movelib_move_simple(v_forward ,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
 
-    //steer = steerlib_attract2(point,0.5,2000,0.95);
-    steer = steerlib_pull(self.pos1);
-    avoid = steerlib_traceavoid(0.3,350);
+        return VS_CALL_YES_DOING;
 
-    wish_angle = normalize(avoid * 0.5 + steer);
-    wish_angle = vectoangles(wish_angle);
-    real_angle = wish_angle - self.angles;
+        break;
+    }
 
-    real_angle_y = shortangle_f(real_angle_y,self.angles_y);
+    return VS_CALL_YES_DONE;
+}
 
-    turn_limit = cvar("g_turrets_unit_ewheel_turnrate");
-    // Convert from dgr/sec to dgr/tic
-    turn_limit  = turn_limit / (1 / self.ticrate);
-    angle_ofs = fabs(real_angle_y);
+float ewheel_moveverb_idle(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+            if(self.enemy)
+                return VS_CALL_NO;
 
-    real_angle_y = bound(turn_limit * -1,real_angle_y,turn_limit);
-    self.angles_y = (self.angles_y + real_angle_y);
+        return verb.verb_static_value;
 
-    self.angles_z = bound(-12,real_angle_y * -1,12);
+        break;
 
-    if(self.frame > 40)
-        self.frame = 1;
+    case VCM_DO:
+        self.moveto = self.origin;
 
-    makevectors(self.angles);
-    float lspeed;
-    lspeed = vlen(self.velocity);
+        if(vlen(self.velocity))
+            movelib_beak_simple(cvar("g_turrets_unit_ewheel_speed_stop"));
 
-    if((dist < 64)||(self.phase < time))
-    {
-        movelib_move('0 0 0',150,0,50,200);
-        self.pos1 = self.origin + v_forward * 256 + randomvec() * 128;
-        self.pos1_z = self.origin_z;
-        self.phase = time + 5;
+        return VS_CALL_YES_DOING;
     }
-    else if(dist < 128)
-    {
-        self.frame += 1;
-        if(lspeed > 100)
-            movelib_move(v_forward * 50,150,0,50,50);
-        else
-            movelib_move(v_forward * 100,150,0,50,0);
-    }
-    else
-    {
-        self.frame += 1;
-        if(angle_ofs > 10)
-            movelib_move(v_forward * 50,150,0,50,50);
-        else
-            movelib_move(v_forward * 250,150,0,50,0);
-    }
-    */
+
+    return VS_CALL_YES_DONE;
 }
 
 void ewheel_postthink()
 {
-    if (self.enemy)
-        ewheel_enemymove();
-    else
-        ewheel_roammove();
+    float vz;
+    vector wish_angle,real_angle;
 
+    vz = self.velocity_z;
+
+    self.angles_x = anglemods(self.angles_x);
+    self.angles_y = anglemods(self.angles_y);
+
+    self.angles_x *= -1;
+    makevectors(self.angles);
+    self.angles_x *= -1;
+
+    wish_angle = normalize(self.steerto);
+    wish_angle = vectoangles(wish_angle);
+    real_angle = wish_angle - self.angles;
+    real_angle = shortangle_vxy(real_angle,self.tur_head.angles);
+
+    self.tur_head.spawnshieldtime = fabs(real_angle_y);
+    real_angle_y  = bound(self.tur_head.aim_speed * -1,real_angle_y,self.tur_head.aim_speed);
+    self.angles_y = (self.angles_y + real_angle_y);
+
+    // Simulate banking
+    self.angles_z = bound(-45,real_angle_y * -2.5,45);
+
+    verbstack_pop(self.verbs_move);
+
+    if (self.frame > 40)
+        self.frame = 1;
+
+    if (self.frame < 1)
+        self.frame = 40;
+
+
+    self.velocity_z = vz;
 }
 
-
 void ewheel_respawnhook()
 {
+    entity e;
+
     setorigin(self,self.pos1);
+
+    if (self.target != "")
+    {
+        e = find(world,targetname,self.target);
+        if (!e)
+        {
+            dprint("Initital waypoint for ewheel does NOT exsist, fix your map!\n");
+            self.target = "";
+        }
+
+        if (e.classname != "turret_checkpoint")
+            dprint("Warning: not a turrret path\n");
+        else
+        {
+            self.pathcurrent = WALKER_PATH(self.origin,e.origin);
+            self.pathgoal = e;
+        }
+    }
 }
 
 void ewheel_diehook()
 {
-}
+    turret_trowgib2(self.origin,self.velocity + v_up * 400,'-0.6 -0.2 -02',self,time + random() * 2 +3);
 
-float ewheel_firecheck()
-{
-    bprint("Firecheck\n");
-    return 1;
+    if (self.pathcurrent)
+        pathlib_deletepath(self.pathcurrent.owner);
+
+    self.pathcurrent = world;
+
+    if (self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
+    {
+        verbstack_flush(self.verbs_move);
+        remove(self.verbs_move);
+    }
+
 }
 
 void turret_ewheel_dinit()
 {
     entity e;
 
-    if (self.netname == "")      self.netname     = "Ewheel Turret";
+    if (self.netname == "")      self.netname     = "eWheel Turret";
 
-    // self.ticrate = 0.05;
-
     if (self.target != "")
     {
         e = find(world,targetname,self.target);
@@ -261,28 +355,23 @@
     self.turret_respawnhook = ewheel_respawnhook;
     self.turret_diehook = ewheel_diehook;
 
-    self.ticrate = 0.05;
     if (turret_stdproc_init("ewheel_std") == 0)
     {
         remove(self);
         return;
     }
-    //self.turret_firecheckfunc = ewheel_firecheck;
 
-    self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+    self.target_select_flags   = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
     self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
-    self.damage_flags |= TFL_DMG_DEATH_NOGIBS;
+    self.damage_flags          |= TFL_DMG_DEATH_NOGIBS;
 
-    //self.flags      = FL_CLIENT;
     self.iscreature = TRUE;
     self.movetype   = MOVETYPE_WALK;
-    self.gravity = 0.01;
     self.solid      = SOLID_SLIDEBOX;
     self.takedamage = DAMAGE_AIM;
 
     setmodel(self,"models/turrets/ewheel-base.md3");
     setmodel(self.tur_head,"models/turrets/ewheel-gun1.md3");
-
     setattachment(self.tur_head,self,"tag_head");
 
     self.pos1 = self.origin;
@@ -293,9 +382,36 @@
     self.turret_firefunc  = ewheel_attack;
     self.turret_postthink = ewheel_postthink;
     self.tur_head.frame = 1;
+
+    self.verbs_move = spawn();
+    verbstack_push(self.verbs_move, ewheel_moveverb_idle,   WVM_IDLE,  0);
+    verbstack_push(self.verbs_move, ewheel_moveverb_enemy,  WVM_ENEMY, 0);
+    verbstack_push(self.verbs_move, ewheel_moveverb_path,   WVM_PATH,  0);
+    verbstack_push(self.verbs_move, ewheel_moveverb_runaway,WVM_PANIC,  0);
+
+    // 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);
+
+    if (self.target != "")
+    {
+        e = find(world,targetname,self.target);
+        if (!e)
+        {
+            dprint("Initital waypoint for ewheel does NOT exsist, fix your map!\n");
+            self.target = "";
+        }
+
+        if (e.classname != "turret_checkpoint")
+            dprint("Warning: not a turrret path\n");
+        else
+        {
+            self.pathcurrent = WALKER_PATH(self.origin,e.origin);
+            self.pathgoal = e;
+        }
+    }
 }
 
-
 void spawnfunc_turret_ewheel()
 {
     precache_model ("models/turrets/ewheel-base.md3");

Modified: trunk/data/qcsrc/server/tturrets/units/unit_flac.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_flac.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_flac.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -45,6 +45,8 @@
 
     // FIXME: tur_impacttime is not accurate enougth, this is a dirty hakk to make flac work.
 
+    //w_deathtypestring = "got caught in the flack.";
+
     if(self.enemy != world)
     if(self.cnt < time)
     if(vlen(self.origin - self.enemy.origin) > self.owner.shot_radius * 0.25)
@@ -100,7 +102,7 @@
     setmodel(self,"models/turrets/base.md3");
     setmodel(self.tur_head,"models/turrets/flac.md3");
 
-    if (!turret_tag_setup(0))
+    if (!turret_tag_setup())
         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
     // Our fire routine

Modified: trunk/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -58,7 +58,7 @@
     setmodel(self,"models/turrets/base.md3");
     setmodel(self.tur_head,"models/turrets/reactor.md3");
 
-    //if(!turret_tag_setup(0))
+    //if(!turret_tag_setup())
     //    dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
     self.tur_head.scale = 0.75;

Modified: trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -159,6 +159,7 @@
     WriteCoord (MSG_BROADCAST, org2_y);
     WriteCoord (MSG_BROADCAST, org2_z);
 
+    //w_deathtypestring = "could not dodge the twin missiles.";
     self.event_damage = SUB_Null;
     d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
 
@@ -196,7 +197,7 @@
     setmodel(self,"models/turrets/base.md3");
     setmodel(self.tur_head,"models/turrets/hellion.md3");
 
-    if (!turret_tag_setup(0))
+    if (!turret_tag_setup())
         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
     // Our fire routine

Modified: trunk/data/qcsrc/server/tturrets/units/unit_hk.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_hk.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_hk.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -363,6 +363,7 @@
     if ((other == self.owner)||(other == self.owner.tur_head))
         return;
 
+    //w_deathtypestring = "got hunted to extinction";
     //vector	org2;
     sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
     org2 = findbetterlocation (self.origin, 16);
@@ -443,7 +444,7 @@
     setmodel(self,"models/turrets/base.md3");
     setmodel(self.tur_head,"models/turrets/hk.md3");
 
-    if (!turret_tag_setup(0))
+    if (!turret_tag_setup())
         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
     // Our fire routine

Modified: trunk/data/qcsrc/server/tturrets/units/unit_machinegun.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_machinegun.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_machinegun.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -11,6 +11,7 @@
     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"));
 
+    //w_deathtypestring = "had an alergic reaction due to 10 kilos of led";
     te_smallflash(self.tur_shotorg);
     //  trailparticles(self,particleeffectnum("EF_MGTURRETTRAIL"),self.tur_shotorg_updated,trace_endpos);
 
@@ -52,7 +53,7 @@
     setmodel(self,"models/turrets/base.md3");
     setmodel(self.tur_head,"models/turrets/machinegun.md3");
 
-    if (!turret_tag_setup(0))
+    if (!turret_tag_setup())
         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
     // Our fire routine

Modified: trunk/data/qcsrc/server/tturrets/units/unit_mlrs.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_mlrs.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_mlrs.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -77,7 +77,7 @@
     sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
     org2 = findbetterlocation (self.origin, 16);
     pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
-
+    //w_deathtypestring = "dident escape the rocket barrage";
 #ifdef TURRET_DEBUG
     float d;
 
@@ -117,7 +117,7 @@
     setmodel(self,"models/turrets/base.md3");
     setmodel(self.tur_head,"models/turrets/mlrs.md3");
 
-    if (!turret_tag_setup(0))
+    if (!turret_tag_setup())
         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
     // Our fire routine

Modified: trunk/data/qcsrc/server/tturrets/units/unit_phaser.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_phaser.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_phaser.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -60,6 +60,7 @@
     entity oldself;
     oldself = self;
     self = self.owner;
+    //w_deathtypestring = "was phased out of existence";
     FireImoBeam (   self.tur_shotorg,
                     self.tur_shotorg + self.tur_shotdir_updated * self.target_range_fire,
                     '-1 -1 -1' * self.shot_radius,
@@ -124,7 +125,7 @@
     setmodel(self,"models/turrets/base.md3");
     setmodel(self.tur_head,"models/turrets/phaser.md3");
 
-    if (!turret_tag_setup(0))
+    if (!turret_tag_setup())
         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
     self.turret_firecheckfunc = turret_phaser_firecheck;

Modified: trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -9,30 +9,11 @@
 
 void turret_plasma_postthink()
 {
-
-
     if (self.tur_head.frame != 0)
         self.tur_head.frame = self.tur_head.frame + 1;
 
     if (self.tur_head.frame > 5)
         self.tur_head.frame = 0;
-
-    setsize(self,self.mins,self.maxs);
-    setsize(self.tur_head,self.tur_head.mins,self.tur_head.maxs);
-
-    /*
-    float h;
-    h = self.health / self.tur_health;
-    if(h<0.95)
-    {
-        if( (0.5 + random()) > h)
-        {
-            //bprint("Spark!\n");
-            //void(vector org, vector vel, float howmany) te_spark = #411;
-            te_spark(0.5 * (self.absmin + self.absmax) + (randomvec() * 64),randomvec() * 256,(1 - h) * 50);
-        }
-    }
-    */
 }
 
 void turret_plasma_dual_postthink()
@@ -48,15 +29,12 @@
 {
     entity proj;
 
-    turret_tag_fire_update();
-
     sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
     pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
 
     proj                    = spawn ();
     setorigin(proj, self.tur_shotorg);
     setsize(proj, '-1 -1 -1', '1 1 1');
-    //setmodel(proj, "models/elaser.mdl"); // precision set above
     proj.classname       = "plasmabomb";
     proj.owner           = self;
     proj.bot_dodge       = TRUE;
@@ -82,8 +60,6 @@
 {
     entity proj;
 
-    //turret_tag_fire_update();
-
     sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
     proj                    = spawn ();
     setorigin(proj, self.tur_shotorg);
@@ -124,7 +100,7 @@
     WriteByte (MSG_BROADCAST, 155);
 
     self.event_damage = SUB_Null;
-
+    //w_deathtypestring = "ate to much plasma";
 #ifdef TURRET_DEBUG
     float d;
 
@@ -147,9 +123,9 @@
     self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
 
     // How to aim
-    //self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;// | TFL_AIM_ZPREDICT | TFL_AIM_GROUND2;
+    //self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZPREDICT | TFL_AIM_GROUND2;
     self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2;
-    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;// | TFL_TURRCAPS_MISSILEKILL;
+    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
 
     if (turret_stdproc_init("plasma_std") == 0)
     {
@@ -158,8 +134,9 @@
     }
 
     self.damage_flags    |= TFL_DMG_HEADSHAKE;
+
     //self.firecheck_flags |= (TFL_FIRECHECK_AFF | TFL_FIRECHECK_VERIFIED);
-    //  self.firecheck_flags |= TFL_FIRECHECK_AFF;
+    self.firecheck_flags |= TFL_FIRECHECK_AFF;
 
     //self.target_select_flags |= TFL_TARGETSELECT_FOV;
     //self.target_select_fov    = 45;
@@ -167,7 +144,7 @@
     setmodel(self,"models/turrets/base.md3");
     setmodel(self.tur_head,"models/turrets/plasma.md3");
 
-    if (!turret_tag_setup(0))
+    if (!turret_tag_setup())
         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
     // Our fireing routine
@@ -204,7 +181,7 @@
     setmodel(self.tur_head,"models/turrets/plasmad.md3");
 
 
-    if (!turret_tag_setup(0))
+    if (!turret_tag_setup())
         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
     // Our fireing routine

Modified: trunk/data/qcsrc/server/tturrets/units/unit_targettrigger.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_targettrigger.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_targettrigger.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -14,7 +14,8 @@
         if (e.turrcaps_flags & TFL_TURRCAPS_RECIVETARGETS)
         {
             self = e;
-            e.turret_addtarget(other,oldself);
+            if(e.turret_addtarget)
+                e.turret_addtarget(other,oldself);
         }
 
         e = find(e, targetname, oldself.target);

Modified: trunk/data/qcsrc/server/tturrets/units/unit_tessla.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_tessla.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_tessla.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -17,9 +17,8 @@
         if ((e.toasted != 1) && (e != from))
             if (turret_validate_target(self,e,self.target_validate_flags) > 0)
             {
-
-                traceline(from.origin,e.origin,0,from);
-                if (trace_fraction > 0.9)
+                traceline(from.origin,e.origin,MOVE_WORLDONLY,from);
+                if (trace_fraction == 1.0)
                 {
                     d = vlen(e.origin - from.origin);
                     if (d < dd)
@@ -35,7 +34,7 @@
     if (etarget)
     {
         te_smallflash(etarget.origin);
-        te_lightning1(world,from.origin,etarget.origin);
+        te_csqc_lightningarc(from.origin,etarget.origin);
         Damage(etarget,self,self,damage,DEATH_TURRET,etarget.origin,'0 0 0');
         etarget.toasted = 1;
     }
@@ -43,20 +42,34 @@
     return etarget;
 }
 
+float turret_tesla_firecheck()
+{
+    if not (turret_stdproc_firecheck())
+        return 0;
+
+    self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
+                                 TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
+
+    self.enemy = turret_select_target();
+
+    if(self.enemy)
+        return 1;
+
+    return 0;
+
+}
+
 void turret_tesla_fire()
 {
     entity e,t;
     float d,r,i;
 
-    if (cvar("g_turrets_nofire") != 0)
-        return;
+    //w_deathtypestring = "discoverd how a tesla coil works";
 
-    if (self.attack_finished_single > time) return;
-
     d = self.shot_dmg;
     r = self.target_range;
     e = spawn();
-    setorigin(e,self.origin + self.tur_shotorg);
+    setorigin(e,self.tur_shotorg);
 
 
     self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
@@ -71,11 +84,10 @@
                                  TFL_TARGETSELECT_TEAMCHECK;
 
     self.attack_finished_single = time + self.shot_refire;
-    self.ammo = self.ammo - self.shot_dmg;
-    for (i = 0;i < 10;i = i + 1)
+    for (i = 0; i < 10; ++i)
     {
         d *= 0.5;
-        r *= 0.75;
+        r *= 0.85;
         t = toast(t,r,d);
         if (t == world) break;
     }
@@ -90,15 +102,30 @@
 
 void turret_tesla_postthink()
 {
-    turret_tesla_fire();
+    if not (self.tur_active)
+    {
+        self.tur_head.avelocity = '0 0 0';
+        return;
+    }
 
-    self.tur_head.frame = self.tur_head.frame + 1;
+    if(self.ammo < self.shot_dmg)
+    {
+        self.tur_head.avelocity = '0 9 0' * (self.ammo / self.shot_dmg);
+    }
+    else
+    {
+        self.tur_head.avelocity = '0 90 0' * (self.ammo / self.shot_dmg);
 
-    if (self.tur_head.frame >= 11)
-        self.tur_head.frame = 0;
+        if(self.attack_finished_single > time)
+            return;
 
-    if (self.tur_head.avelocity == '0 0 0')
-        self.tur_head.avelocity = '0 35 0';
+        float f;
+        f = (self.ammo / self.ammo_max);
+        f = f*f;
+        if(f > random())
+            if(random() < 0.1)
+                te_csqc_lightningarc(self.tur_shotorg,self.tur_shotorg + (randomvec() * 350));
+    }
 }
 
 
@@ -106,14 +133,17 @@
 {
     if (self.netname == "")      self.netname     = "Tesla Coil";
 
-    self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
-    self.target_select_flags = TFL_TARGETSELECT_NO;
-    self.firecheck_flags = TFL_FIRECHECK_REFIRE;
-    self.shoot_flags = TFL_SHOOT_CUSTOM;
-    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-    self.aim_flags = TFL_AIM_NO;
-    self.track_flags = TFL_TRACK_NO;
+    self.turrcaps_flags      = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
 
+    self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
+                               TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
+
+    self.firecheck_flags     = TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_OWM_AMMO;
+    self.shoot_flags         = TFL_SHOOT_CUSTOM;
+    self.ammo_flags          = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+    self.aim_flags           = TFL_AIM_NO;
+    self.track_flags         = TFL_TRACK_NO;
+
     if (turret_stdproc_init("tesla_std") == 0)
     {
         remove(self);
@@ -126,11 +156,12 @@
     self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
                                  TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
 
-    if (!turret_tag_setup(0))
+    if (!turret_tag_setup())
         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
-    self.turret_firefunc = turret_stdproc_nothing;
-    self.turret_postthink = turret_tesla_postthink;
+    self.turret_firefunc      = turret_tesla_fire;
+    self.turret_postthink     = turret_tesla_postthink;
+    self.turret_firecheckfunc = turret_tesla_firecheck;
 }
 
 /*QUAKED turret_tesla (0 .5 .8) ?

Modified: trunk/data/qcsrc/server/tturrets/units/unit_walker.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_walker.qc	2009-03-27 08:57:06 UTC (rev 6318)
+++ trunk/data/qcsrc/server/tturrets/units/unit_walker.qc	2009-03-27 09:36:50 UTC (rev 6319)
@@ -1,16 +1,16 @@
-#define ANIM_NO 0
-#define ANIM_REVERSE 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_NO         0
+#define ANIM_REVERSE    1
+#define ANIM_WALK       2
+#define ANIM_RUN        3
+#define ANIM_STRAFE_L   4
+#define ANIM_STRAFE_R   5
+#define ANIM_TURN       6
+#define ANIM_JUMP       7
+#define ANIM_LAND       8
+#define ANIM_PAIN       9
+#define ANIM_MEELE      10
+#define ANIM_SWIM       11
+#define ANIM_ROAM       12
 
 #define WVM_IDLE_UP 25
 #define WVM_IDLE    50
@@ -19,11 +19,12 @@
 #define WVM_ENEMY 2000
 #define WVM_STOP  3000
 #define WVM_DODGE 4000
+#define  WVM_PANIC 10000
 #define walker_verbs_move verbs_move
 
-#define WVA_MINIGUN 1
-#define WVA_ROCKET  10
-#define WVA_MEELE   20
+#define WVA_MINIGUN 100
+#define WVA_ROCKET  500
+#define WVA_MEELE   1000
 #define walker_verbs_attack verbs_attack
 
 #define WVI_IDLE 1
@@ -31,7 +32,6 @@
 #define walker_verbs_idle verbs_idle
 
 .float animflag;
-.entity wkr_props;
 .entity wkr_spawn;
 
 #define WALKER_MIN '-70 -70 5'
@@ -41,6 +41,9 @@
 
 float walker_firecheck()
 {
+    if (self.animflag == ANIM_MEELE)
+        return 0;
+
     return turret_stdproc_firecheck();
 }
 
@@ -51,6 +54,7 @@
     makevectors(self.angles);
     where = self.origin + v_forward * 128;
 
+    //w_deathtypestring = "tried to hug the cute spider thingy.";
     e = findradius(where,64);
     while (e)
     {
@@ -62,16 +66,13 @@
     }
 }
 
-.vector moveto;
-.vector steerto;
 void walker_animate()
 {
-    vector wish_angle,real_angle;
-    float vz;
+    vector real_angle;
+    float  vz;
 
-    wish_angle = self.steerto;
-    real_angle = wish_angle - self.angles;
-    vz = self.velocity_z;
+    real_angle = vectoangles(self.steerto) - self.angles;
+    vz         = self.velocity_z;
 
     if (self.tur_head.frame != 0)
         self.tur_head.frame = self.tur_head.frame +1;
@@ -81,27 +82,30 @@
 
     switch (self.animflag)
     {
+
     case ANIM_NO:
-        if(self.frame != 0)
+        if (self.frame != 0)
             self.frame = 0;
 
         movelib_beak_simple(cvar("g_turrets_unit_walker_speed_stop"));
+
         break;
 
     case ANIM_REVERSE:
         if ((self.frame < 5) || (self.frame > 25))
-            self.frame = 5;
+            self.frame = 25;
 
-        self.frame = self.frame +1;
+        self.frame = self.frame -1;
         movelib_move_simple(v_forward * -1 ,cvar("g_turrets_unit_walker_speed_walk"),0.6);
 
-        if (self.frame > 25)
-            self.frame = 5;
+        if (self.frame < 5)
+            self.frame = 25;
+
         break;
 
     case ANIM_TURN:
 
-        if (self.frame < 30)
+        if ((self.frame < 30) || (self.frame > 55))
             self.frame = 30;
 
         self.frame = self.frame + 1;
@@ -125,6 +129,7 @@
 
         if (self.frame > 25)
             self.frame = 5;
+
         break;
 
     case ANIM_ROAM:
@@ -133,26 +138,30 @@
 
         self.frame = self.frame +1;
 
-        self.angles_y += bound(-15,shortangle_f(real_angle_y,self.angles_y),15);
+        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)
+        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:
@@ -165,10 +174,11 @@
 
         if (self.frame > 25)
             self.frame = 5;
+
         break;
 
     case ANIM_STRAFE_L:
-        if (self.frame < 30)
+        if ((self.frame < 30) || (self.frame > 55))
             self.frame = 30;
 
         self.frame = self.frame + 1;
@@ -180,7 +190,7 @@
         break;
 
     case ANIM_STRAFE_R:
-        if (self.frame < 60)
+        if ((self.frame < 60) || (self.frame > 65))
             self.frame = 60;
 
         self.frame = self.frame + 1;
@@ -193,7 +203,7 @@
         break;
 
     case ANIM_JUMP:
-        if (self.frame < 95)
+        if ((self.frame < 95) || (self.frame > 100))
             self.frame = 95;
 
         self.velocity += '0 0 1' * cvar("g_turrets_unit_walker_speed_jump");
@@ -204,7 +214,7 @@
         break;
 
     case ANIM_LAND:
-        if (self.frame < 100)
+        if ((self.frame < 100) || (self.frame > 107))
             self.frame = 100;
 
         self.frame = self.frame + 1;
@@ -215,7 +225,7 @@
         break;
 
     case ANIM_PAIN:
-        if (self.frame < 60)
+        if ((self.frame < 60) || (self.frame > 95))
             self.frame = 90;
 
         self.frame = self.frame + 1;
@@ -226,11 +236,11 @@
         break;
 
     case ANIM_MEELE:
-        movelib_beak_simple(250);
-
-        if (self.frame < 123)
+        if ((self.frame < 123) || (self.frame > 140))
             self.frame = 123;
 
+        movelib_beak_simple(cvar("g_turrets_unit_walker_speed_stop"));
+
         self.frame = self.frame + 2;
 
         if (self.frame == 133)
@@ -242,9 +252,10 @@
             self.frame = 0;
         }
     }
+
     self.velocity_z = vz;
 
-    if(self.flags & FL_ONGROUND)
+    if (self.flags & FL_ONGROUND)
         movelib_groundalign4point(300,100);
 
 }
@@ -254,7 +265,7 @@
 {
     vector org2;
 
-    if(self.event_damage != SUB_Null)
+    if (self.event_damage != SUB_Null)
     {
         self.event_damage = SUB_Null;
         self.think = walker_rocket_explode;
@@ -266,7 +277,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);
 
     remove (self);
@@ -280,7 +291,7 @@
         walker_rocket_explode();
 }
 
-#define WALKER_ROCKET_MOVE movelib_move_simple(newdir,1000,cvar("g_turrets_unit_walker_std_rocket_tunrate")); UpdateCSQCProjectile(self)
+#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)
 void walker_rocket_loop();
 void walker_rocket_think()
 {
@@ -316,11 +327,11 @@
     }
 
     if (self.shot_dmg != 1337)
-    if (random() < 0.01)
-    {
-        walker_rocket_loop();
-        return;
-    }
+        if (random() < 0.01)
+        {
+            walker_rocket_loop();
+            return;
+        }
 
     m_speed = vlen(self.velocity) + cvar("g_turrets_unit_walker_std_rocket_speed_add");
 
@@ -361,7 +372,6 @@
         return;
     }
 
-
     newdir = steerlib_pull(self.tur_shotorg);
     WALKER_ROCKET_MOVE;
 
@@ -386,6 +396,7 @@
         self.think = walker_rocket_loop3;
         return;
     }
+
     newdir = steerlib_pull(self.tur_shotorg);
     WALKER_ROCKET_MOVE;
 }
@@ -446,7 +457,7 @@
     rocket.solid              = SOLID_BBOX;
     rocket.tur_health         = time + 9;
 
-	CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
+    CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
 }
 
 void rv_think()
@@ -455,7 +466,7 @@
     vector org;
     entity oldself;
 
-    if(self.owner.deadflag != DEAD_NO)
+    if (self.owner.deadflag != DEAD_NO)
     {
         remove(self);
         return;
@@ -483,300 +494,280 @@
     self = oldself;
 }
 
-/*
-void walker_move()
+float walker_moveverb_path(float eval)
 {
-    vector major,minor,f,b,l,r;
-    float lf,lb,lr,ll,bl,tl;
-
-    if(self.animflag == ANIM_MEELE)
-        return;
-
-    tl = vlen(self.origin - self.moveto);
-    switch(self.waterlevel)
+    switch (eval)
     {
-        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;
-    }
+    case VCM_EVAL:
 
-    if(self.animflag == ANIM_SWIM)
-    {
-        self.steerto = vectoangles(steerlib_attract2(self.moveto,0.5,500,0.95));
-        return;
-    }
-
-    if(tl < 250)
-    {
-        self.animflag = ANIM_WALK;
-    }
-    else
-    {
-        self.animflag = ANIM_RUN;
-    }
-
-    self.steerto = vectoangles(steerlib_attract2(self.moveto,0.5,500,0.95));
-    f = self.origin + v_forward;
-    lf = vlen(self.moveto - f);
-    bl = lf;
-    major = v_forward;
-    minor = major;
-
-    b = self.origin - v_forward;
-    lb = vlen(self.moveto - b);
-    if(bl > lb)
-    {
-        minor = major;
-        major = v_forward * -1;
-        bl = lb;
-    }
-
-    r = self.origin + v_right;
-    lr = vlen(self.moveto - r);
-    if(bl > lr)
-    {
-
-        minor = major;
-        major = v_right;
-        bl = lr;
-        self.steerto = vectoangles(v_right);
-        self.animflag = ANIM_STRAFE_R;
-
-    }
-
-    l = self.origin - v_right;
-    ll = vlen(self.moveto - l);
-    if(bl > ll)
-    {
-
-        minor = major;
-        major = v_right * -1;
-        bl = ll;
-        self.steerto = vectoangles(v_right*-1);
-        self.animflag = ANIM_STRAFE_L;
-
-    }
-
-}
-*/
-
-float walker_moveverb_path(float eval)
-{
-    if(eval)
-    {
-        if(self.animflag == ANIM_MEELE)
+        if (self.animflag == ANIM_MEELE)
             return VS_CALL_NO;
 
-        if(self.pathcurrent)
+        if (self.pathcurrent)
             return verb.verb_static_value;
 
         return VS_CALL_NO;
-    }
+        break;
 
-    // Do we have a path?
-    if not(self.pathcurrent)
-    {
-        return VS_CALL_NO;
-    }
-    else
-    {
-        // Are we close enougth to a path node to switch to the next?
-        if (vlen(self.origin  - self.pathcurrent.origin) < 64)
-            if (self.pathcurrent.path_next == world)
-            {
-                // Path endpoint reached
-                pathlib_deletepath(self.pathcurrent.owner);
-                self.pathcurrent = world;
-
-                if(self.pathgoal)
+    case VCM_DO:
+        // Do we have a path?
+        if not(self.pathcurrent)
+        {
+            return VS_CALL_NO;
+        }
+        else
+        {
+            // Are we close enougth to a path node to switch to the next?
+            if (vlen(self.origin  - self.pathcurrent.origin) < 64)
+                if (self.pathcurrent.path_next == world)
                 {
-                    if(self.pathgoal.use)
-                        self.pathgoal.use();
+                    // Path endpoint reached
+                    pathlib_deletepath(self.pathcurrent.owner);
+                    self.pathcurrent = world;
 
-                    if(self.pathgoal.enemy)
+                    if (self.pathgoal)
                     {
-                        self.pathcurrent = WALKER_PATH(self.pathgoal.origin,self.pathgoal.enemy.origin);
-                        self.pathgoal = self.pathgoal.enemy;
+                        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;
                 }
                 else
-                    self.pathgoal = world;
-            }
-            else
-                self.pathcurrent = self.pathcurrent.path_next;
-    }
+                    self.pathcurrent = self.pathcurrent.path_next;
+        }
 
 
-    if (self.pathcurrent)
-    {
-        switch(self.waterlevel)
+        if (self.pathcurrent)
         {
+            switch (self.waterlevel)
+            {
             case 0:
                 self.animflag = ANIM_WALK;
             case 1:
             case 2:
-                if(self.animflag == ANIM_WALK)
+                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
+            return VS_CALL_YES_DONE;
 
-        self.moveto = self.pathcurrent.origin;
-        self.steerto = vectoangles(steerlib_attract2(self.moveto,0.5,500,0.95));
+        break;
 
-        return VS_CALL_YES_DOING;
+    case VCM_REMOVE:
+
+        if (self.pathcurrent)
+            pathlib_deletepath(self.pathcurrent.owner);
+
+        self.pathcurrent = world;
+
+        return VS_CALL_YES_DONE;
+
+        break;
     }
-    else
-        return VS_CALL_YES_DONE;
+
+    return VS_CALL_YES_DONE;
 }
 
 float walker_moveverb_enemy(float eval)
 {
-    if(eval)
+    switch (eval)
     {
-        if(self.animflag == ANIM_MEELE)
+    case VCM_EVAL:
+
+        if (self.animflag == ANIM_MEELE)
             return VS_CALL_NO;
 
-        if(self.enemy == world)
+        if (self.enemy == world)
             return VS_CALL_NO;
 
-        if(tracewalk(self.enemy, self.origin, self.mins, self.maxs, self.enemy.origin, MOVE_NORMAL))
+        if (tracewalk(self.enemy, self.origin, self.mins, self.maxs, self.enemy.origin, MOVE_NORMAL))
             return verb.verb_static_value;
 
         return VS_CALL_NO;
-    }
 
-    switch(self.waterlevel)
-    {
+        break;
+
+    case VCM_DO:
+        switch (self.waterlevel)
+        {
         case 0:
-            if(self.tur_dist_enemy > 500)
+            if (self.tur_dist_enemy > 500)
                 self.animflag = ANIM_RUN;
             else
                 self.animflag = ANIM_WALK;
         case 1:
         case 2:
-            if(self.animflag == ANIM_WALK)
+            if (self.animflag != ANIM_SWIM)
                 self.animflag = ANIM_WALK;
             else
                 self.animflag = ANIM_SWIM;
             break;
         case 3:
             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;
     }
 
-    self.moveto = self.enemy.origin;
-    self.steerto = vectoangles(steerlib_attract2(self.moveto,0.5,500,0.95));
-
-    return VS_CALL_YES_DOING;
+    return VS_CALL_YES_DONE;
 }
 
 float walker_moveverb_idle_pause(float eval)
 {
-    if(eval)
+    switch (eval)
     {
-        if(self.animflag == ANIM_MEELE)
+    case VCM_EVAL:
+
+        if (self.animflag == ANIM_MEELE)
             return VS_CALL_NO;
 
         return verb.verb_static_value;
+        break;
 
+    case VCM_DO:
+
+        self.moveto   = self.origin;
+        self.steerto  = v_forward;
+        self.animflag = ANIM_NO;
+
+        return VS_CALL_YES_DOING;
+        break;
     }
 
-    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)
 {
-    if(eval)
+    switch (eval)
     {
-        if(self.animflag == ANIM_MEELE)
+    case VCM_EVAL:
+
+        if (self.animflag == ANIM_MEELE)
             return VS_CALL_NO;
 
         return verb.verb_static_value;
-    }
+        break;
 
-    vector v;
-    v_x = (random() * 32) - (random() * 32);
-    v_y = (random() * 32) - (random() * 32);
-    v = self.origin + v_forward * 64 + v;
-    self.pos1 = self.pos1 * 0.9 + v * 0.1;
+    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);
 
-    self.moveto = self.origin + v_forward * 10;
-    v = self.angles;
-    v_y += random() * 15;
-    v_y -= random() * 15;
-    self.steerto = v;
+                tracebox(self.origin+'0 0 64',self.mins,self.maxs,self.moveto + '0 0 64',MOVE_NORMAL,self);
+            }
+            verb.wait = time + 10;
+        }
+        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.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)
-    {
+
+
+        switch (self.waterlevel)
+        {
         case 0:
             self.animflag = ANIM_ROAM;
         case 1:
         case 2:
-            if(self.animflag != ANIM_SWIM)
+            if (self.animflag != ANIM_SWIM)
                 self.animflag = ANIM_ROAM;
 
             break;
         case 3:
             self.animflag = ANIM_SWIM;
+        }
+
+        return VS_CALL_YES_DOING;
+
+        break;
     }
 
-    return VS_CALL_YES_DOING;
+    return VS_CALL_YES_DONE;
 }
 
 float walker_moveverb_idle(float eval)
 {
-    if(eval)
+    switch (eval)
     {
-        if(self.animflag == ANIM_MEELE)
+    case VCM_EVAL:
+
+        if (self.animflag == ANIM_MEELE)
             return VS_CALL_NO;
 
         return verb.verb_static_value;
-    }
 
-    if(verb.wait < time)
-    {
-        verb.wait = random() * 10;
+        break;
 
-        if(random() < 0.5)
-            verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause,   WVM_IDLE + WVM_IDLE_UP, verb.wait);
-        else
-            verbstack_push(self.walker_verbs_move, walker_moveverb_idle_roam,   WVM_IDLE + WVM_IDLE_UP, verb.wait);
+    case VCM_DO:
 
-        verb.wait += time;
+        //if (random() < 0.5)
+            verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause,   WVM_IDLE + WVM_IDLE_UP, random() * 5);
+        //else
+        //    verbstack_push(self.walker_verbs_move, walker_moveverb_idle_roam,   WVM_IDLE + WVM_IDLE_UP,  random() * 15);
+
+        return VS_CALL_YES_DOING;
+
+        break;
     }
 
-    return VS_CALL_YES_DOING;
+    return VS_CALL_YES_DONE;
 }
+
 float walker_attackverb_meele(float eval)
 {
-    if(eval)
+    switch (eval)
     {
-        if(cvar("g_turrets_nofire"))
+    case VCM_EVAL:
+
+        vector wish_angle;
+
+        if (cvar("g_turrets_nofire"))
             return VS_CALL_NO;
 
-        if(self.animflag == ANIM_SWIM || self.animflag == ANIM_MEELE)
+        if (self.animflag == ANIM_SWIM || self.animflag == ANIM_MEELE)
             return VS_CALL_NO;
 
-        if(!self.enemy)
+        if (!self.enemy)
             return VS_CALL_NO;
 
-        vector wish_angle;
         wish_angle = angleofs(self,self.enemy);
 
         if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_meele_range"))
@@ -784,20 +775,28 @@
                 return verb.verb_static_value;
 
         return VS_CALL_NO;
-    }
 
-    self.moveto = self.enemy.origin;
-    self.steerto = vectoangles(steerlib_attract2(self.moveto,0.5,500,0.95));
+        break;
 
-    self.animflag = ANIM_MEELE;
+    case VCM_DO:
 
-    return VS_CALL_YES_DOING;
+        self.moveto   = self.enemy.origin;
+        self.steerto  = steerlib_attract2(self.moveto,0.5,500,0.95);
+        self.animflag = ANIM_MEELE;
+
+        return VS_CALL_YES_DOING;
+
+        break;
+    }
+
+    return VS_CALL_YES_DONE;
 }
 
 float walker_attackverb_rockets(float eval)
 {
-    if(eval)
+    switch (eval)
     {
+    case VCM_EVAL:
         if (self.tur_head.attack_finished_single > time)
             return VS_CALL_NO;
 
@@ -814,19 +813,27 @@
             return VS_CALL_NO;
 
         return verb.verb_static_value;
-    }
 
-    entity rv;
-    rv           = spawn();
-    rv.think     = rv_think;
-    rv.nextthink = time;
-    rv.cnt       = 4;
-    rv.owner     = self;
+        break;
 
-    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;
+
+        break;
+    }
+
     return VS_CALL_YES_DONE;
-
 }
 
 void walker_postthink()
@@ -846,33 +853,30 @@
 {
     entity flash;
 
-    //turret_do_updates(self);
-
-    self.tur_head.frame = self.tur_head.frame + 1;
-
+    //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"));
-    //te_smallflash(self.tur_shotorg_updated);
-
-    if (!(self.uzi_bulletcounter & 3))
+    if (self.uzi_bulletcounter == 2)
     {
 
-        //trailparticles(self,particleeffectnum("EF_MGTURRETTRAIL"),self.tur_shotorg_updated,trace_endpos);
-        // te_lightning1(self,self.tur_shotorg_updated,trace_endpos);
         flash = spawn();
-        setmodel(flash, "models/uziflash.md3"); // precision set below
+
+        setmodel(flash, "models/uziflash.md3");
         setattachment(flash, self.tur_head, "tag_fire");
-        flash.scale = 3;
-        flash.think = W_Uzi_Flash_Go;
+
+        flash.scale     = 3;
+        flash.think     = W_Uzi_Flash_Go;
         flash.nextthink = time + 0.02;
-        flash.frame = 2;
-        flash.angles_z = flash.v_angle_z + random() * 180;
-        flash.alpha = 1;
-        flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
+        flash.frame     = 2;
+        flash.angles_z  = flash.v_angle_z + random() * 180;
+        flash.alpha     = 1;
+        flash.effects   = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
+
+        self.uzi_bulletcounter = self.uzi_bulletcounter = 0;
     }
 
     self.uzi_bulletcounter = self.uzi_bulletcounter + 1;
+    self.tur_head.frame    = self.tur_head.frame + 1;
 }
 
 
@@ -882,8 +886,8 @@
     entity e;
 
     self.origin = self.wkr_spawn.origin;
-    self.wkr_props.solid = SOLID_BBOX;
-    self.wkr_props.alpha = 1;
+    //self.wkr_props.solid = SOLID_BBOX;
+    //self.wkr_props.alpha = 1;
 
     self.angles = self.wkr_spawn.angles;
     vtmp = self.wkr_spawn.origin;
@@ -910,18 +914,22 @@
 }
 void walker_diehook()
 {
-    if(self.pathcurrent)
+    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);
+
+    if (self.pathcurrent)
         pathlib_deletepath(self.pathcurrent.owner);
 
     self.pathcurrent = world;
 
-    self.wkr_props.solid = SOLID_NOT;
-    self.wkr_props.alpha = -1;
-
-    if(self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
+    if (self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
     {
-        remove(self.wkr_props);
         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);
@@ -935,15 +943,13 @@
     entity e;
 
     if (self.netname == "")      self.netname     = "Walker Turret";
-
-    self.wkr_props = spawn();
     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.aim_flags = TFL_AIM_LEAD;
 
-    if(cvar("g_antilag_bullets"))
+    if (cvar("g_antilag_bullets"))
         self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
     else
         self.aim_flags      |= TFL_AIM_SHOTTIMECOMPENSATE;
@@ -963,7 +969,7 @@
     self.walker_verbs_attack = spawn();
     self.walker_verbs_idle   = spawn();
 
-    verbstack_push(self.walker_verbs_move, walker_moveverb_idle,   WVM_IDLE, 0);
+    verbstack_push(self.walker_verbs_move, walker_moveverb_idle,   WVM_IDLE,  0);
     verbstack_push(self.walker_verbs_move, walker_moveverb_enemy,  WVM_ENEMY, 0);
     verbstack_push(self.walker_verbs_move, walker_moveverb_path,   WVM_PATH,  0);
 
@@ -972,10 +978,9 @@
 
     self.damage_flags |= TFL_DMG_DEATH_NOGIBS;
 
-    self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
-    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK    | TFL_TARGETSELECT_LOS;
+    //self.target_select_flags   = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+    //self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
 
-    //self.flags      = FL_CLIENT;
     self.iscreature = TRUE;
     self.movetype   = MOVETYPE_WALK;
     self.solid      = SOLID_SLIDEBOX;
@@ -983,16 +988,14 @@
 
     setmodel(self,"models/turrets/walker_body.md3");
     setmodel(self.tur_head,"models/turrets/walker_head_minigun.md3");
-    setmodel(self.wkr_props,"models/turrets/walker_props.md3");
     setmodel(self.wkr_spawn,"models/turrets/walker_spawn.md3");
-    setorigin(self.wkr_spawn,self.origin);
+
     setattachment(self.tur_head,self,"tag_head");
-    setattachment(self.wkr_props,self,"tag_head");
 
     self.wkr_spawn.angles   = self.angles;
     self.wkr_spawn.solid    = SOLID_NOT;
 
-    traceline(self.wkr_spawn.origin + '0 0 16', self.wkr_spawn.origin - '0 0 10000', MOVE_WORLDONLY, self);
+    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);
 
@@ -1020,21 +1023,20 @@
             self.pathgoal = e;
         }
     }
-
-    //self.solid    = SOLID_NOT;
-
 }
 
 
 void spawnfunc_turret_walker()
 {
     g_turrets_common_precash();
+
     precache_model ("models/turrets/walker_head_minigun.md3");
     precache_model ("models/turrets/walker_body.md3");
     precache_model ("models/turrets/walker_props.md3");
     precache_model ("models/turrets/walker_spawn.md3");
     precache_model ( "models/turrets/rocket.md3");
     precache_sound ( "weapons/rocket_impact.wav" );
+
     self.think = turret_walker_dinit;
     self.nextthink = time + 0.5;
 }



More information about the nexuiz-commits mailing list