r4931 - in trunk/data: . models/turrets models/turrets/radiant qcsrc/server qcsrc/server/tturrets/include qcsrc/server/tturrets/system qcsrc/server/tturrets/units scripts

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed Oct 29 02:21:57 EDT 2008


Author: tzork
Date: 2008-10-29 02:21:55 -0400 (Wed, 29 Oct 2008)
New Revision: 4931

Added:
   trunk/data/models/turrets/ewheel-base.md3
   trunk/data/models/turrets/ewheel-base.tga
   trunk/data/models/turrets/ewheel-gun1.md3
   trunk/data/models/turrets/ewheel-gun1.tga
   trunk/data/models/turrets/radiant/ewheel.md3
   trunk/data/unit_ewheel.cfg
Modified:
   trunk/data/qcsrc/server/pathlib.qc
   trunk/data/qcsrc/server/tturrets/include/turrets.qh
   trunk/data/qcsrc/server/tturrets/include/turrets_early.qh
   trunk/data/qcsrc/server/tturrets/system/system_damage.qc
   trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.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_mlrs.qc
   trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc
   trunk/data/qcsrc/server/tturrets/units/unit_walker.qc
   trunk/data/scripts/turrets.def
   trunk/data/turrets.cfg
   trunk/data/unit_flac.cfg
   trunk/data/unit_machinegun.cfg
   trunk/data/unit_walker.cfg
Log:
Updated pathlib.qc

Turrets updates:
Fixed recursive radiusdamage hell. 
Cleaned up system_damage.qc more. added RFL_DMG_DEATH_NOGIBS for damage_flags to avoid std gibs.
Added unit_ewheel.
Temporarily disabled walker pathing until i have time to fix it.

Added: trunk/data/models/turrets/ewheel-base.md3
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/turrets/ewheel-base.md3
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/turrets/ewheel-base.tga
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/turrets/ewheel-base.tga
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/turrets/ewheel-gun1.md3
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/turrets/ewheel-gun1.md3
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/turrets/ewheel-gun1.tga
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/turrets/ewheel-gun1.tga
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/turrets/radiant/ewheel.md3
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/turrets/radiant/ewheel.md3
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/data/qcsrc/server/pathlib.qc
===================================================================
--- trunk/data/qcsrc/server/pathlib.qc	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/qcsrc/server/pathlib.qc	2008-10-29 06:21:55 UTC (rev 4931)
@@ -1,14 +1,27 @@
-.float pathgroup;
+#define PLF_GROUNDSNAP 1
+#define PLF_NOOPTIMIZE 2
+#define PLF_SUBPATH3D  4
 
+#define path_flags lip
+
+//.float pathgroup;
+// #define pathgroup version
+#define path_subpathing_size autoswitch
+#define path_subpathing_bboxexpand welcomemessage_time
+/*
 .entity path_next;
 .entity path_prev;
-// .entity path_start;
+*/
+#define path_next swampslug
+#define path_prev lasertarget
 
+#define pathlib_garbagetime 120
+
 .float(vector start,vector end) path_validate;
 
 float pathlib_stdproc_path_validate(vector start,vector end)
 {
-    tracebox(start, self.mins, self.maxs, end, MOVE_NOMONSTERS, self);
+    tracebox(start, self.mins, self.maxs, end, MOVE_NORMAL, self);
 
     if(vlen(trace_endpos - end) < 32)
         return 1;
@@ -16,26 +29,30 @@
     return 0;
 }
 
-void pathlib_point_use()
+vector pathlib_groundsnap(vector where,entity path)
 {
-    remove(self);
+    float lsize;
+
+    lsize = vlen(self.mins - self.maxs) * 0.25;
+
+    traceline(where + ('0 0 1' * lsize) ,where - '0 0 10000',MOVE_NORMAL,self);
+
+    return trace_endpos + ('0 0 1' * lsize);
+
 }
 
 entity pathlib_createpoint(entity parent,entity next,entity first,vector where)
 {
     entity point;
+
     point = spawn();
     point.classname = "path_node";
 
-    //bprint("Create point\n");
+    //point.think = SUB_Remove;
+    //point.nectthink = time + pathlib_garbagetime;
 
-    traceline(where + '0 0 32' ,where - '0 0 10000',MOVE_NOMONSTERS,self);
-    where = trace_endpos + '0 0 32';
-
-    setorigin(point,where);
-
     if(first)
-        point.owner = parent;
+        point.owner = first;
     else
     {
         point.classname = "path_master";
@@ -50,54 +67,62 @@
     else
         point.classname = "path_end";
 
+    if(point.owner.path_flags & PLF_GROUNDSNAP)
+        where = pathlib_groundsnap(where,parent);
+
+
+    setorigin(point,where);
+
+
     return point;
 }
 
 #define pathib_maxdivide 128
-
-vector pathlib_findsubpath(vector start,vector vcrash,vector end,float maxsize)
+vector pathlib_findsubpath(entity start,vector vcrash,entity end,float maxsize)
 {
-    float x,y;//,z;
+    float x,y,z;
     float step;
-    float clear;
     float dist;
     float pathlength;
     float pathlength_best;
     vector bestpoint;
     vector point;
-    //string s;
+    float zmin,zmax;
 
     pathlength_best = 1000000;
 
-    step = vlen(self.maxs - self.mins) * 1.5;
-    //s = ftos(step);
+    step = vlen(self.maxs - self.mins) * start.owner.path_subpathing_bboxexpand;
 
-    //bprint("pathlib_findsubpath: step=",s);
-    //s = ftos(maxsize);
-    //bprint(" size=",s,"\n");
+    if(start.owner.path_flags & PLF_SUBPATH3D)
+    {
+        zmin = maxsize * -1;
+        zmax = maxsize;
+    }
+    else
+    {
+        zmin = 0;
+        zmax = 1;
+    }
 
-    //for(z = -maxsize; z < maxsize; z += step)
+    for(z = zmin; z < zmax; z += step)
     for(y = -maxsize; y < maxsize; y += step)
     for(x = -maxsize; x < maxsize; x += step)
     {
 
-        point = vcrash;
-        point_x = point_x + x;
-        point_y = point_y + y;
+        point_z = vcrash_z + z;
+        point_x = vcrash_x + x;
+        point_y = vcrash_y + y;
 
-        traceline(point + '0 0 32' ,point - '0 0 10000',MOVE_NOMONSTERS,self);
-        point = trace_endpos + '0 0 32';
 
-        clear = self.path_validate(start,point);
+        if(start.owner.path_flags & PLF_GROUNDSNAP)
+            point = pathlib_groundsnap(point,start);
 
-        if(clear)
+        if(self.path_validate(start.origin,point))
         {
-            //bprint("Good point\n");
-
-            dist = vlen(start - point);
+            dist = vlen(start.origin - point);
             if(dist > step)
             {
-                pathlength = dist + vlen(point - end);
+                pathlength = dist + vlen(point - end.origin);
                 if(pathlength < pathlength_best)
                 {
                     bestpoint = point;
@@ -119,7 +144,6 @@
     vector vcrash;
     vector subpath_point;
     entity subpoint;
-    //bprint("pathlib_path...\n");
 
     // Fail.
     if(start.cnt > pathib_maxdivide)
@@ -130,66 +154,39 @@
 
     vcrash = trace_endpos;
 
-    subpath_point = pathlib_findsubpath(start.origin,vcrash,end.origin,500);
+    subpath_point = pathlib_findsubpath(start,vcrash,end,start.owner.path_subpathing_size);
 
     if(subpath_point == vcrash)
         return 0; // Fail.
 
     subpoint = pathlib_createpoint(start,end,start.owner,subpath_point);
+
     subpoint.cnt = start.cnt +1;
     start.path_next = subpoint;
     end.path_prev = subpoint;
+
     if(self.path_validate(start.origin,end.origin))
         return 1;
 
     return pathlib_path(subpoint,end);
-
-    /*
-    while(!clear)
-    {
-        ++c;
-
-        if(c > pathib_maxdivide)
-            return 0;
-
-        subpath_point = pathlib_findsubpath(subpoint2.origin,vcrash,end.origin,2000);
-        if(subpath_point == vcrash)
-            return 0; // Fail.
-
-        subpoint = pathlib_createpoint(subpoint2,end,start.owner,subpath_point);
-        subpoint.cnt = subpoint2.cnt +1;
-        subpoint2.path_next = subpoint;
-
-        clear = self.path_validate(subpoint2.origin,end.origin);
-        vcrash = trace_endpos;
-        if(clear)
-            return 1;
-        subpoint2 = subpoint;
-
-        // Fail.
-
-    }*
-
-    */
-
-
-    return 1;
 }
 
 void pathlib_path_optimize(entity start,entity end)
 {
     entity point,point_tmp;
-    point = start.path_next;
     float c;
 
+    point = start.path_next;
+
     while(point != end)
     {
         c++;
-        if(c > 200)
+        if(c > 5000)
         {
-            //bprint("pathlib_path_optimize runaway!\n");
+            dprint("pathlib_path_optimize runaway!\n");
             return;
         }
+
         point_tmp = point;
         point = point.path_next;
         if(self.path_validate(point_tmp.path_prev.origin,point_tmp.path_next.origin))
@@ -225,25 +222,34 @@
     }
 }
 
-entity dynpath_make(vector from, vector to)
+entity pathlib_makepath(vector from, vector to,float pathflags,float subpathing_size, float subpathing_bboxexpand)
 {
     entity e_start,e_end;
 
-    //float t;
-    //t = time;
-
     if(!self.path_validate)
         self.path_validate = pathlib_stdproc_path_validate;
 
+
+    if(subpathing_size < 10)
+        subpathing_size = 500;
+
+    if(subpathing_bboxexpand < 1)
+        subpathing_bboxexpand = 1;
+
     e_start = pathlib_createpoint(world,world,world,from);
+    e_start.path_flags = pathflags;
+
+    e_start.path_subpathing_size = subpathing_size;
+    e_start.path_subpathing_bboxexpand = subpathing_bboxexpand;
+
     e_start.owner = e_start;
+
     e_end = pathlib_createpoint(e_start,world,e_start,to);
     e_start.path_next = e_end;
     e_start.cnt = 0;
 
     if(!pathlib_path(e_start,e_end))
     {
-        //bprint("Crap.\n");
         pathlib_deletepath(e_start);
         remove(e_start);
         return world;
@@ -251,26 +257,20 @@
 
     pathlib_path_optimize(e_start,e_end);
 
-    //string s;
-    //t = time - t;
-    //s = ftos(t);
-    //bprint("^2Path created in ", s, " seconds\n");
-
     return e_start;
 
 }
 
 void pathlib_test_think()
 {
-    //bprint("pathlib_test tink...\n");
     pathlib_showpath(self.enemy);
+
     self.nextthink = time + 0.5;
 }
 void pathlib_test_dinit()
 {
     entity path;
     entity end;
-    // bprint("pathlib_test spawning...\n");
 
     if(self.target == "")
     {
@@ -287,8 +287,9 @@
         return;
     }
 
-    setsize(self,'-70 -70 0','70 70 70');
-    path = dynpath_make(self.origin,end.origin);
+    setsize(self,'-50 -50 0','50 50 50');
+    path = pathlib_makepath(self.origin,end.origin, PLF_GROUNDSNAP,500,1.25);
+
     if(!path)
     {
         bprint("^1 ==== ERROR: pathlib_test pathing fail ====\n");

Modified: trunk/data/qcsrc/server/tturrets/include/turrets.qh
===================================================================
--- trunk/data/qcsrc/server/tturrets/include/turrets.qh	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/qcsrc/server/tturrets/include/turrets.qh	2008-10-29 06:21:55 UTC (rev 4931)
@@ -12,6 +12,7 @@
 // Non combat units
 #include "../units/unit_fusionreactor.qc"  /// Supply unites that need it with power
 #include "../units/unit_targettrigger.qc"  /// Hit me!
+#include "../units/unit_checkpoint.qc"     /// Halfsmart pathing.
 
 // Combat units
 #include "../units/unit_plasma.qc"  /// Basic energy cannon
@@ -23,6 +24,6 @@
 #include "../units/unit_machinegun.qc" /// whacka
 #include "../units/unit_tessla.qc"  /// Chain lightning capabale turret
 #include "../units/unit_walker.qc"
+#include "../units/unit_ewheel.qc"
 
-
 #endif // TTURRETS_ENABLED

Modified: trunk/data/qcsrc/server/tturrets/include/turrets_early.qh
===================================================================
--- trunk/data/qcsrc/server/tturrets/include/turrets_early.qh	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/qcsrc/server/tturrets/include/turrets_early.qh	2008-10-29 06:21:55 UTC (rev 4931)
@@ -197,15 +197,16 @@
 #define  TFL_DMG_HEADSHAKE       128
 /// Die and stay dead.
 #define  TFL_DMG_DEATH_NORESPAWN 256
+/// Supress std turret gibs on death
+#define  RFL_DMG_DEATH_NOGIBS    512
 
 // Spawnflags
 /// Spawn in teambased modes
 #define TFL_SPAWN_TEAM      2
 /// Spawn in FFA modes
 #define TFL_SPAWN_FFA       4
-/// Respawn after death
-#define TFL_SPAWN_RESPAWN   8
 
+
 /*
 * Fields commnly used by turrets
 */

Modified: trunk/data/qcsrc/server/tturrets/system/system_damage.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/system_damage.qc	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/qcsrc/server/tturrets/system/system_damage.qc	2008-10-29 06:21:55 UTC (rev 4931)
@@ -154,30 +154,31 @@
     self.tur_head.effects   = self.effects;
     self.health             = 0;
 
-
 // Trow fake parts arround
     // base
-    makevectors(self.angles);
-    if (random() > 0.5)
+    if not(self.damage_flags & RFL_DMG_DEATH_NOGIBS)
     {
-        turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib2.md3",min(self.respawntime,20),1,1);
-        t_dir = (v_up * 700) + (randomvec() * 300);
-        turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib3.md3",min(self.respawntime,10),1,1);
-        t_dir = (v_up * 700) + (randomvec() * 300);
-        turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib4.md3",min(self.respawntime,10),1,1);
+        makevectors(self.angles);
+        if (random() > 0.5)
+        {
+            turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib2.md3",min(self.respawntime,20),1,1);
+            t_dir = (v_up * 700) + (randomvec() * 300);
+            turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib3.md3",min(self.respawntime,10),1,1);
+            t_dir = (v_up * 700) + (randomvec() * 300);
+            turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib4.md3",min(self.respawntime,10),1,1);
+        }
+        else
+        {
+            turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib1.md3",min(self.respawntime,20),1,1);
+        }
+
+        // Blow the top part up into the air
+        turret_trowgib2( self.origin + (v_up * 50),
+                         v_up * 150 + randomvec() * 50,
+                         '0.2 0.2 0.2',
+                         self.tur_head,time + 0.5 + (random() * 0.5));
     }
-    else
-    {
-        turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib1.md3",min(self.respawntime,20),1,1);
-    }
 
-    // Blow the top part up into the air
-    turret_trowgib2( self.origin + (v_up * 50),
-                     v_up * 150 + randomvec() * 50,
-                     '0.2 0.2 0.2',
-                     self.tur_head,time + 0.5 + (random() * 0.5));
-
-
 // Go boom
     RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,0,world);
 
@@ -207,13 +208,35 @@
     // this function doubles as "teamchange" function.
 
     self.tur_head.team = self.team;
-	if (self.team == COLOR_TEAM1)
-		self.colormod = '1.4 0.8 0.8';
-	else if (self.team == COLOR_TEAM2)
-		self.colormod = '0.8 0.8 1.4';
-	else
-		self.colormod = '0 0 0'; // reset
 
+    /*
+    COLOR_TEAM1       = 4;  // red
+    COLOR_TEAM2       = 13; // blue
+    COLOR_TEAM3       = 12; // yellow
+    COLOR_TEAM4       = 9; // pink
+    */
+
+	self.colormod = '0 0 0';
+
+	switch(self.team)
+	{
+        case COLOR_TEAM1: // Red
+            self.colormod = '1.4 0.8 0.8';
+            break;
+
+        case COLOR_TEAM2: // Blue
+            self.colormod = '0.8 0.8 1.4';
+            break;
+
+        case COLOR_TEAM3: // Yellow
+            self.colormod = '1.4 1.4 0.6';
+            break;
+
+        case COLOR_TEAM4: // Pink
+            self.colormod = '1.4 0.6 1.4';
+            break;
+	}
+
     self.deadflag           = DEAD_NO;
     self.tur_head.deadflag  = self.deadflag;
     self.effects            = 0;
@@ -253,17 +276,18 @@
 void turret_stdproc_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
 {
     entity baseent,oldself;
-    // entity player;
 
     if (self.health <= 0) return;
 
     // Damage func is shared on all parts as standard, we need to know what the master entity of this turret is.
-    // if ((self.classname == "turret_head")||(self.classname == "turret_gun")||(self.classname == "turret_badge"))
     if (self.owner)
         baseent = self.owner;
     else
         baseent = self;
 
+    oldself = self;
+    self = baseent;
+
     if (teamplay != 0)
     {
         if (self.team == attacker.team)
@@ -278,41 +302,38 @@
             FOR_EACH_PLAYER(player)
             	if(player.team == self.team)
             		sprint(player, "The enemy is attacking your base!");
-
             */
         }
-
     }
 
     baseent.health = baseent.health - damage;
 
     // thorw head slightly off aim when hit?
-    if ((self.classname == "turret_head") || (self.classname == "turret_gun"))
+    if (oldself.classname == "turret_head")
         if (self.damage_flags & TFL_DMG_HEADSHAKE)
-        {
-            // makevectors(baseent.tur_head.v_angle);
-            baseent.tur_head.angles = baseent.tur_head.angles + randomvec() * damage;
-        }
+            self.tur_head.angles = self.tur_head.angles + randomvec() * damage;
 
     if (self.turrcaps_flags & TFL_TURRCAPS_MOVE)
-    {
         self.velocity = self.velocity + vforce;
-    }
 
-
     // Start burning when we have 10% or less health left
     if (self.health < (self.tur_health * 0.1))
-        self.effects = EF_FLAME;
+        self.tur_head.effects = EF_FLAME;
 
-    if (self.health <= 0)
+    self = oldself;
+
+    if (baseent.health <= 0)
     {
-        oldself = self;
-        self = baseent;
-        turret_stdproc_die();
-        self = oldself;
+        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;
+    }
 
-        //baseent.turret_diefunc();
-    }
+
+
 }
 
 

Modified: trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc	2008-10-29 06:21:55 UTC (rev 4931)
@@ -1,41 +1,62 @@
-void checkpoint_think()
+/**
+    turret_checkpoint
+    Semi smart pathing system for move capable turrets.
+**/
+
+#define checkpoint_path swampslug
+#define checkpoint_target enemy
+
+#define checkpoint_cache_who flagcarried
+#define checkpoint_cache_from lastrocket
+#define checkpoint_cache_to selected_player
+
+entity path_makeorcache(entity forwho,entity start, entity end)
 {
-    if(self.goalcurrent != world)
-        te_lightning1(self,self.origin,self.goalcurrent.origin);
+    entity oldself;
+    entity pth;
+    oldself = self;
+    self = forwho;
 
-
-    self.nextthink = time + 0.5;
+    pth = pathlib_makepath(start.origin,end.origin,PLF_GROUNDSNAP,500,1.5);
+    self = oldself;
+    return pth;
 }
 
-void turret_checkpoint_dinit()
+void turret_checkpoint_use()
 {
-    entity e;
+    if(other.checkpoint_path)
+        pathlib_deletepath(other.checkpoint_path);
 
+    other.checkpoint_path = world;
 
+    if(self.checkpoint_target)
+        other.checkpoint_path = path_makeorcache(other,self,self.checkpoint_target);
+
+}
+
+/*QUAKED turret_checkpoint (1 0 1) (-32 -32 -32) (32 32 32)
+-----------KEYS------------
+target: .targetname of next waypoint in chain.
+wait:   Pause at this point # seconds.
+-----------SPAWNFLAGS-----------
+---------NOTES----------
+If a loop is of targets are formed, any unit entering this loop will patrol it indefinitly.
+If the checkpoint chain in not looped, the unit will go "Roaming" when the last point is reached.
+*/
+void spawnfunc_turret_checkpoint()
+{
     if(self.target != "")
     {
-        e = find(world,targetname,self.target);
-        if(!e)
-        {
-            bprint("turret_checkpoint without valid target! (",vtos(self.origin),")\n");
-            remove(self);
-            return;
-        }
-
-        // TODO:: ADD WORLD-INTERACTIVE PATH SUBDEVISION IF PATH NOT CLEAR
-        self.goalcurrent = e;
+        self.checkpoint_target = find(world,targetname,self.target);
+        if(!self.checkpoint_target)
+            dprint("A turret_checkpoint faild to find its target!\n");
     }
 
 }
 
-/**
-.wait
-**/
-void spawnfunc_turret_checkpoint()
+// Compat.
+void spawnfunc_walker_checkpoint()
 {
-    if(!self.wait)
-        self.wait = 5;
-
-    self.think = turret_checkpoint_dinit;
-    self.nextthink = time + 0.25;
+    self.classname = "turret_checkpoint";
+    spawnfunc_turret_checkpoint();
 }

Modified: trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc	2008-10-29 06:21:55 UTC (rev 4931)
@@ -149,6 +149,14 @@
     vector org2;
     float d;
 
+    if(self.event_damage != SUB_Null)
+    {
+        self.event_damage = SUB_Null;
+        self.think = turret_hellion_missile_explode;
+        self.nextthink = time;
+        return;
+    }
+
     sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", 1, ATTN_NORM);
     org2 = findbetterlocation (self.origin, 16);
 

Modified: trunk/data/qcsrc/server/tturrets/units/unit_hk.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_hk.qc	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/qcsrc/server/tturrets/units/unit_hk.qc	2008-10-29 06:21:55 UTC (rev 4931)
@@ -351,6 +351,14 @@
     vector org2;
     float d;
 
+    if(self.event_damage != SUB_Null)
+    {
+        self.event_damage = SUB_Null;
+        self.think = turret_hk_missile_explode;
+        self.nextthink = time;
+        return;
+    }
+
     if ((other == self.owner)||(other == self.owner.tur_head))
         return;
 

Modified: trunk/data/qcsrc/server/tturrets/units/unit_mlrs.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_mlrs.qc	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/qcsrc/server/tturrets/units/unit_mlrs.qc	2008-10-29 06:21:55 UTC (rev 4931)
@@ -1,7 +1,7 @@
 void spawnfunc_turret_mlrs();
 void turret_mlrs_dinit();
 void turret_mlrs_attack();
-void turret_mlrs_projectile_explode();
+void turret_mlrs_rocket_explode();
 
 void turret_mlrs_postthink()
 {
@@ -34,14 +34,14 @@
     missile.takedamage         = DAMAGE_YES;
     missile.damageforcescale   = 4;
     missile.health             = 30;
-    missile.think              = turret_mlrs_projectile_explode;
+    missile.think              = turret_mlrs_rocket_explode;
     missile.nextthink          = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed);
     missile.solid              = SOLID_BBOX;
     missile.movetype           = MOVETYPE_FLYMISSILE;
     missile.effects            = EF_LOWPRECISION;
     missile.velocity           = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
     missile.angles             = vectoangles(missile.velocity);
-    missile.touch              = turret_mlrs_projectile_explode;
+    missile.touch              = turret_mlrs_rocket_explode;
     missile.flags              = FL_PROJECTILE;
     missile.solid              = SOLID_BBOX;
     missile.enemy              = self.enemy;
@@ -51,17 +51,23 @@
     //self.tur_head.frame = 7 - self.volly_counter;
 }
 
-void turret_mlrs_projectile_explode()
+void turret_mlrs_rocket_explode()
 {
     vector org2;
 
-    //vector	org2;
+    if(self.event_damage != SUB_Null)
+    {
+        self.event_damage = SUB_Null;
+        self.think = turret_mlrs_rocket_explode;
+        self.nextthink = time;
+        return;
+    }
+
+
     sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", 1, ATTN_NORM);
     org2 = findbetterlocation (self.origin, 16);
     pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
 
-    self.event_damage = SUB_Null;
-
 #ifdef TURRET_DEBUG
     float d;
 

Modified: trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc	2008-10-29 06:21:55 UTC (rev 4931)
@@ -33,6 +33,8 @@
     turret_tag_fire_update();
 
     sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", 1, ATTN_NORM);
+    pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg_updated, self.tur_shotdir_updated * 1000, 1);
+
     proj                    = spawn ();
     setorigin(proj, self.tur_shotorg_updated);
     setsize(proj, '-0.5 -0.5 -0.5', '0.5 0.5 0.5');
@@ -53,12 +55,9 @@
     proj.enemy           = self.enemy;
     proj.flags           = FL_PROJECTILE | FL_NOTARGET;
 
-    if (self.tur_head.frame == 0)
-        self.tur_head.frame = 1;
+    if(self.tur_head.frame )
+        self.tur_head.frame = 0;
 
-    // Snapback the head
-    // self.tur_head.angles_x = self.tur_head.angles_x + min((self.shot_dmg * 0.05),self.aim_maxpitch);
-
 }
 
 void turret_plasma_dual_attack()

Modified: trunk/data/qcsrc/server/tturrets/units/unit_walker.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_walker.qc	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/qcsrc/server/tturrets/units/unit_walker.qc	2008-10-29 06:21:55 UTC (rev 4931)
@@ -48,10 +48,10 @@
     where = self.origin + v_forward * 128;
 
     e = findradius(where,80);
-    while(e)
+    while (e)
     {
-        if(turret_validate_target(self,e,self.target_validate_flags))
-            if(e != self)
+        if (turret_validate_target(self,e,self.target_validate_flags))
+            if (e != 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") );
 
         e = e.chain;
@@ -61,86 +61,90 @@
 void walker_animate()
 {
 
-    if(self.tur_head.frame != 0)
+    if (self.tur_head.frame != 0)
         self.tur_head.frame = self.tur_head.frame +1;
 
-    if(self.tur_head.frame > 12)
+    if (self.tur_head.frame > 12)
         self.tur_head.frame = 0;
 
 
-    switch(self.animflag)
+    switch (self.animflag)
     {
-        case ANIM_NO:
-            //if(self.frame != 0)
-            //    self.frame = 0;
+    case ANIM_NO:
+        //if(self.frame != 0)
+        //    self.frame = 0;
         break;
 
-        case ANIM_WALK:
-            self.frame = self.frame + 1;
-            if(self.frame > 25)
-                self.frame = 5;
+    case ANIM_WALK:
+        self.frame = self.frame + 1;
+        if (self.frame > 25)
+            self.frame = 5;
         break;
 
-        case ANIM_RUN:
-            self.frame = self.frame + 2;
-            if(self.frame > 25)
-                self.frame = 5;
+    case ANIM_RUN:
+        self.frame = self.frame + 2;
+        if (self.frame > 25)
+            self.frame = 5;
         break;
 
-        case ANIM_STRAFE_L:
-            if(self.frame < 35) self.frame = 35;
-            self.frame = self.frame + 1;
-            if(self.frame > 55) self.frame = 35;
+    case ANIM_STRAFE_L:
+        if (self.frame < 35) self.frame = 35;
+        self.frame = self.frame + 1;
+        if (self.frame > 55) self.frame = 35;
         break;
 
-        case ANIM_STRAFE_R:
-            if(self.frame < 65) self.frame = 65;
-            self.frame = self.frame + 1;
-            if(self.frame > 85) self.frame = 65;
+    case ANIM_STRAFE_R:
+        if (self.frame < 65) self.frame = 65;
+        self.frame = self.frame + 1;
+        if (self.frame > 85) self.frame = 65;
         break;
 
-        case ANIM_JUMP:
-            if(self.frame < 95) self.frame = 95;
-            if(self.frame > 100)
+    case ANIM_JUMP:
+        if (self.frame < 95) self.frame = 95;
+        if (self.frame > 100)
             self.frame = self.frame + 1;
 
         break;
 
-        case ANIM_LAND:
-            if(self.frame < 100) self.frame = 100;
-            self.frame = self.frame + 1;
-            if(self.frame > 107)
-                self.animflag = ANIM_NO;
+    case ANIM_LAND:
+        if (self.frame < 100) self.frame = 100;
+        self.frame = self.frame + 1;
+        if (self.frame > 107)
+            self.animflag = ANIM_NO;
         break;
 
-        case ANIM_PAIN:
-            if(self.frame < 90) self.frame = 90;
-            self.frame = self.frame + 1;
-            if(self.frame > 95)
-                self.animflag = ANIM_NO;
+    case ANIM_PAIN:
+        if (self.frame < 90) self.frame = 90;
+        self.frame = self.frame + 1;
+        if (self.frame > 95)
+            self.animflag = ANIM_NO;
         break;
 
-        case ANIM_MEELE:
-            if(self.frame < 123) self.frame = 123;
-            self.frame = self.frame + 1;
+    case ANIM_MEELE:
+        if (self.frame < 123) self.frame = 123;
+        self.frame = self.frame + 1;
 
-            if(self.frame == 133)
-                walker_meele_dmg();
+        if (self.frame == 133)
+            walker_meele_dmg();
 
-            if(self.frame > 140)
-                self.animflag = ANIM_NO;
+        if (self.frame > 140)
+            self.animflag = ANIM_NO;
 
     }
 }
 
-
-
-
-
 void walker_rocket_explode()
 {
     vector org2;
 
+    if(self.event_damage != SUB_Null)
+    {
+        self.event_damage = SUB_Null;
+        self.think = walker_rocket_explode;
+        self.nextthink = time;
+        return;
+    }
+
     sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", 1, ATTN_NORM);
     org2 = findbetterlocation (self.origin, 16);
 
@@ -150,8 +154,6 @@
     WriteCoord (MSG_BROADCAST, org2_y);
     WriteCoord (MSG_BROADCAST, org2_z);
 
-    self.event_damage = SUB_Null;
-
     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);
@@ -188,16 +190,16 @@
     olddir = normalize(self.velocity);
     edist = vlen(self.enemy.origin - self.origin);
 
-    // Simulate crudely guidance
-    if(self.cnt < time)
+    // Simulate crude guidance
+    if (self.cnt < time)
     {
-        if(edist < 1000)
+        if (edist < 1000)
             self.tur_shotorg = randomvec() * min(edist,64);
         else
             self.tur_shotorg = randomvec() * min(edist,256);
         self.cnt = time + 0.5;
     }
-    if(edist < 256)
+    if (edist < 256)
         self.tur_shotorg = '0 0 0';
 
 
@@ -208,7 +210,7 @@
         return;
     }
 
-    if((random() < 0.01) && (self.shot_dmg != 1337))
+    if ((random() < 0.01) && (self.shot_dmg != 1337))
     {
         walker_rocket_loop();
         return;
@@ -260,7 +262,8 @@
 void walker_rocket_loop3()
 {
     self.nextthink = time + 0.1;
-    if(vlen(self.origin - self.tur_shotorg) < 128 )
+
+    if (vlen(self.origin - self.tur_shotorg) < 128 )
     {
         self.think = walker_rocket_think;
         return;
@@ -271,15 +274,10 @@
     float m_speed;
 
     m_speed = vlen(self.velocity) + cvar("g_turrets_unit_walker_std_rocket_speed_add");
-
     olddir = normalize(self.velocity);
-
-
     newdir = normalize(self.tur_shotorg  - self.origin);
-
     newdir = normalize(olddir + newdir * cvar("g_turrets_unit_walker_std_rocket_tunrate"));
 
-
     self.velocity = newdir * m_speed;
     self.angles = vectoangles(self.velocity);
 }
@@ -288,7 +286,7 @@
 {
     self.nextthink = time + 0;
 
-    if(vlen(self.origin - self.tur_shotorg) < 128 )
+    if (vlen(self.origin - self.tur_shotorg) < 128 )
     {
         self.tur_shotorg = self.origin - '0 0 200';
         self.think = walker_rocket_loop3;
@@ -300,15 +298,10 @@
     float m_speed;
 
     m_speed = vlen(self.velocity) + cvar("g_turrets_unit_walker_std_rocket_speed_add");
-
     olddir = normalize(self.velocity);
-
     newdir = normalize(self.tur_shotorg  - self.origin);
-
     newdir = normalize(olddir + newdir * cvar("g_turrets_unit_walker_std_rocket_tunrate"));
-
     self.velocity = newdir * m_speed;
-
     self.angles = vectoangles(self.velocity);
 
 }
@@ -317,16 +310,11 @@
 {
 
     self.nextthink= time + 0;
-
     self.tur_shotorg = self.origin + '0 0 400';
-
     self.think = walker_rocket_loop2;
-
     self.shot_dmg = 1337;
 }
 
-
-
 void walker_fire_rocket(vector org)
 {
 
@@ -357,16 +345,18 @@
     rocket.cnt                = time + 1;
     rocket.enemy              = self.enemy;
 
-    if(random() < 0.01)
+    if (random() < 0.01)
         rocket.think          = walker_rocket_loop;
     else
         rocket.think          = walker_rocket_think;
 
+    rocket.event_damage       = walker_rocket_damage;
+
     rocket.nextthink          = time + 0.2;
     rocket.solid              = SOLID_BBOX;
     rocket.movetype           = MOVETYPE_FLYMISSILE;
     rocket.effects            = EF_LOWPRECISION;
-    rocket.velocity           = ((v_forward + v_up * 0.5) +(randomvec() * 0.15))* cvar("g_turrets_unit_walker_std_rocket_speed");
+    rocket.velocity           = ((v_forward + v_up * 0.35) +(randomvec() * 0.15))* cvar("g_turrets_unit_walker_std_rocket_speed");
     rocket.angles             = vectoangles(rocket.velocity);
     rocket.touch              = walker_rocket_explode;
     rocket.flags              = FL_PROJECTILE;
@@ -390,13 +380,14 @@
     vector org;
 
     self.cnt = self.cnt -1;
-    if(self.cnt < 0)
+
+    if (self.cnt < 0)
     {
         remove(self);
         return;
     }
 
-    if(self.cnt> 1)
+    if (self.cnt > 1)
         f = gettagindex(self.owner,"tag_rocket01");
     else
         f = gettagindex(self.owner,"tag_rocket02");
@@ -405,7 +396,6 @@
 
 
     self.nextthink = time + 0.2;
-
     self = self.owner;
     walker_fire_rocket(org);
 }
@@ -416,16 +406,11 @@
     vector real_angle;
     float turn_limit;
 
-
-
-    if(self.flags & FL_ONGROUND)
-    {
+    if ((self.flags & FL_ONGROUND)&&(self.animflag != ANIM_MEELE))
         self.animflag = ANIM_NO;
-    }
 
-    if(self.enemy)
-    {
-        if(self.tur_head.attack_finished_single < time)
+    if (self.enemy)
+        if (self.tur_head.attack_finished_single < time)
         {
             entity rv;
             rv = spawn();
@@ -437,43 +422,38 @@
             self.tur_head.attack_finished_single = time + cvar("g_turrets_unit_walker_std_rocket_refire");
         }
 
-    }
 
-    if(self.goalcurrent)
+    if (self.checkpoint_path)
     {
-        //if(self.enemy && (self.tur_dist_enemy < self.target_range_fire))
-        //   self.animflag = ANIM_TURN;
-        //else
-        //{
-            if(vlen(self.origin  - self.goalcurrent.origin) < 64)
-                if(self.goalcurrent.goalcurrent == world)
-                    self.goalcurrent = world; // Path endpoint reached, go roaming.
-                else
-                    self.goalcurrent = self.goalcurrent.goalcurrent;
+        if (vlen(self.origin  - self.goalcurrent.origin) < 64)
+            if (self.goalcurrent.path_next == world)
+            {
 
-            self.animflag = ANIM_WALK;
-        //}
+                self.checkpoint_path = world; // Path endpoint reached, go roaming.
+            }
+            else
+                self.goalcurrent = self.goalcurrent.path_next;
 
-
+        self.animflag = ANIM_WALK;
     }
     else // Roaming mode
     {
 
-        if(self.enemy)
+        if (self.enemy)
         {
             wish_angle = angleofs(self,self.enemy); //normalize(self.origin-self.enemy.origin);
 
-            if(self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_meele_range"))
+            if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_meele_range"))
             {
 
-                if(fabs(wish_angle_y) < 15)
+                if (fabs(wish_angle_y) < 15)
                     self.animflag = ANIM_MEELE;
             }
             else
             {
-                if(fabs(wish_angle_y) < 15)
+                if (fabs(wish_angle_y) < 15)
                     self.animflag = ANIM_RUN;
-                else if(fabs(wish_angle_y) < 30)
+                else if (fabs(wish_angle_y) < 30)
                     self.animflag = ANIM_WALK;
                 else
                     self.animflag = ANIM_TURN;
@@ -481,7 +461,8 @@
 
         }
         else
-            self.animflag = ANIM_NO;
+            if(self.animflag != ANIM_MEELE)
+                self.animflag = ANIM_NO;
     }
 
 
@@ -490,12 +471,15 @@
     s_speed = vlen(self.velocity);
 
     // Turn on the spot
-    if (self.animflag == ANIM_TURN) {
-        if(self.enemy)
+    if (self.animflag == ANIM_TURN)
+    {
+        if (self.enemy)
             wish_angle = normalize(self.enemy.origin - self.origin);
         else
-            wish_angle = normalize(self.goalcurrent.origin - self.origin);        wish_angle = vectoangles(wish_angle);                  // And make a angle
+            wish_angle = normalize(self.goalcurrent.origin - self.origin);
 
+        wish_angle = vectoangles(wish_angle);
+
         real_angle = wish_angle - self.angles;
 
         if (real_angle_x < 0) real_angle_x += 360;
@@ -513,24 +497,24 @@
 
         self.angles_y = self.angles_y + real_angle_y;
 
-        if(self.enemy)
+        if (self.enemy)
             v_forward = normalize(self.enemy.origin - self.origin);
         else
             v_forward = normalize(self.goalcurrent.origin - self.origin);
 
         makevectors(self.angles);
 
-        if(s_speed > s_turn)
+        if (s_speed > s_turn)
             self.velocity = (v_forward * max((s_speed - s_decel),s_turn));
-        if(s_speed < s_turn)
+        if (s_speed < s_turn)
             self.velocity = (v_forward * min((s_speed + s_accel1),s_turn));
     }
     else if (self.animflag == ANIM_WALK) // Gg walking
     {
-        if(self.goalcurrent)
+        if (self.goalcurrent)
             wish_angle = normalize(self.goalcurrent.origin - self.origin);
         else
-            if(self.enemy)
+            if (self.enemy)
                 wish_angle = normalize(self.enemy.origin - self.origin);
             else
                 wish_angle = self.angles;
@@ -554,31 +538,36 @@
 
         self.angles_y = self.angles_y + real_angle_y;
 
-        if(self.goalcurrent)
+        if (self.goalcurrent)
             v_forward = normalize(self.goalcurrent.origin - self.origin);
         else
-            if(self.enemy)
+            if (self.enemy)
                 v_forward = normalize(self.enemy.origin - self.origin);
 
         makevectors(self.angles);
-        //self.velocity = v_forward * s_walk;
+        self.velocity = v_forward * s_walk;
 
         //if(self.flags & FL_ONGROUND)
+        /*
         {
+            float s_z;
+            s_z = self.velocity_z;
             if(s_speed > s_walk)
                 self.velocity = (v_forward * max((s_speed - s_decel),s_walk));
             if(s_speed <= s_walk)
                 self.velocity = (v_forward * min((s_speed + s_accel1),s_walk));
+            self.velocity_z = s_z;//s_walk;
         }
+        */
 
 
     }
     else if (self.animflag == ANIM_RUN) // Move fast, turn slow
     {
-        if(self.goalcurrent)
+        if (self.goalcurrent)
             wish_angle = normalize(self.goalcurrent.origin - self.origin);
         else
-            if(self.enemy)
+            if (self.enemy)
                 wish_angle = normalize(self.enemy.origin - self.origin);
             else
                 wish_angle = self.angles;
@@ -602,26 +591,28 @@
         self.angles_y = self.angles_y + real_angle_y;
 
 
-        if(self.enemy)
+        if (self.enemy)
             v_forward = normalize(self.enemy.origin - self.origin);
         else
             v_forward = normalize(self.goalcurrent.origin - self.origin);
 
         makevectors(self.angles);
 
-        if(self.flags & FL_ONGROUND)
+        if (self.flags & FL_ONGROUND)
         {
-            if(s_speed > s_run)
+            if (s_speed > s_run)
                 self.velocity = (v_forward * max((s_speed - s_decel),s_run));
-            if(s_speed <= s_run)
+            if (s_speed <= s_run)
                 self.velocity = (v_forward * min((s_speed + s_accel2),s_run));
         }
-    } else {
+    }
+    else
+    {
 
-        if(self.flags & FL_ONGROUND)
+        if (self.flags & FL_ONGROUND)
         {
             makevectors(self.angles);
-            if(s_speed > 0)
+            if (s_speed > 0)
                 self.velocity = min(s_speed - s_decel,0) * v_forward;
         }
     }
@@ -648,7 +639,7 @@
 
     te_smallflash(self.tur_shotorg_updated);
 
-    if(!(self.uzi_bulletcounter & 3))
+    if (!(self.uzi_bulletcounter & 3))
     {
 
         trailparticles(self,particleeffectnum("EF_MGTURRETTRAIL"),self.tur_shotorg_updated,trace_endpos);
@@ -671,6 +662,8 @@
 void walker_respawnhook()
 {
     vector vtmp;
+    entity e;
+
     self.origin = self.wkr_spawn.origin;
     self.wkr_props.solid = SOLID_BBOX;
     self.wkr_props.alpha = 1;
@@ -680,9 +673,27 @@
     vtmp_z +=self.wkr_spawn.origin_z + self.wkr_spawn.maxs_z;
     setorigin(self,vtmp);
 
+    if (self.target != "")
+    {
+        e = find(world,targetname,self.target);
+        if (!e)
+        {
+            bprint("Warning! initital waypoint for Walker does NOT exsist!\n");
+            self.target = "";
+
+            //remove(self);
+            //return;
+        }
+
+        if (e.classname != "turret_checkpoint")
+            dprint("Warning: not a turrret path\n");
+        else
+            self.goalcurrent = e;
+    }
 }
 void walker_diehook()
 {
+
     self.wkr_props.solid = SOLID_NOT;
     self.wkr_props.alpha = -1;
 }
@@ -694,27 +705,23 @@
 
     if (self.netname == "")      self.netname     = "Walker Turret";
 
-    if(self.target != "")
+    /*
+    if (self.target != "")
     {
         e = find(world,targetname,self.target);
-        if(!e)
+        if (!e)
         {
             bprint("Warning! initital waypoint for Walker does NOT exsist!\n");
             self.target = "";
-
-            //remove(self);
-            //return;
         }
 
-        if(e.classname != "walker_checkpoint")
-            dprint("Warning: not a walker path\n");
+        if (e.classname != "turret_checkpoint")
+            dprint("Warning: not a turrret path\n");
         else
             self.goalcurrent = e;
     }
+    */
 
-
-
-
     self.wkr_props = spawn();
     self.wkr_spawn = spawn();
 
@@ -731,16 +738,15 @@
         remove(self);
         return;
     }
-    // self.scale = 1.5;
-    //setsize(self,'38 38 55','-38 -38 1');
+    self.damage_flags |= RFL_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_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_BBOX;// SOLID_SLIDEBOX;
+    self.solid      = SOLID_SLIDEBOX;
     self.takedamage = DAMAGE_AIM;
 
     setmodel(self.wkr_props,"models/turrets/walker_props.md3");

Modified: trunk/data/scripts/turrets.def
===================================================================
--- trunk/data/scripts/turrets.def	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/scripts/turrets.def	2008-10-29 06:21:55 UTC (rev 4931)
@@ -194,18 +194,27 @@
 */
 
 
-/*QUAKED walker_checkpoint (1 0 1) (-16 -16 -16) (16 16 16)
+/*QUAKED turret_walker (1 0 0) (-32 -32 0) (32 32 50)
 -----------KEYS------------
-target: .targetname of next wapoint in chain. 
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range:  2 = double range, 0.5 = half
+turret_scale_refire: 2 = doubble refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo:   2 = doubble ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim:    2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
 
+team : 5=red, 14=blue
 -----------SPAWNFLAGS-----------
+---------NOTES----------
 
----------NOTES----------
-If a loop is of targets are formed, any walker entering this loop will patrol it indefinitly.
-If the checkpoint chain in not looped, teh walker will go "Roaming" when teh last point is reached. 
+A nasty mechanical ceature that will engage longrange target with missiles, midrange with its miniguna and meele things up close and personal.
+
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/walker.md3"
 */
 
-/*QUAKED turret_walker (1 0 0) (-32 -32 0) (32 32 50)
+
+/*QUAKED turret_ewheel (1 0 0) (-32 -32 0) (32 32 50)
 -----------KEYS------------
 turret_scale_damage: 2 = double damage, 0.5 = half
 turret_scale_range:  2 = double range, 0.5 = half
@@ -214,14 +223,24 @@
 turret_scale_aim:    2 = aim twice as fast, 0,5 = aim at half speed
 turret_scale_health: 2 = double health, 0.5 = half
 
-target : Enter this walker_checkpoint chain
-
 team : 5=red, 14=blue
 -----------SPAWNFLAGS-----------
 ---------NOTES----------
 
-A nasty mechanical ceature that will engage longrange target with missiles, midrange with its miniguna and meele things up close and personal.
+Small, agile and move capable turret.
 
 -------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/walker.md3"
+model="models/turrets/radiant/ewheel.md3"
 */
+
+
+/*QUAKED turret_checkpoint (1 0 1) (-32 -32 -32) (32 32 32)
+-----------KEYS------------
+target: .targetname of next wapoint in chain.
+wait:   Pause at this point # seconds.
+-----------SPAWNFLAGS-----------
+
+---------NOTES----------
+If a loop is of targets are formed, any unit entering this loop will patrol it indefinitly.
+If the checkpoint chain in not looped, the unit will go "Roaming" when the last point is reached.
+*/
\ No newline at end of file

Modified: trunk/data/turrets.cfg
===================================================================
--- trunk/data/turrets.cfg	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/turrets.cfg	2008-10-29 06:21:55 UTC (rev 4931)
@@ -4,7 +4,7 @@
 
 // Target scanning and validation can be resource intensive
 // Dont let turrets look for new targets more frequently then this
-set g_turrets_targetscan_mindelay 0.5
+set g_turrets_targetscan_mindelay 0.1
 
 // Turrets with no target returns to their idle aim after this much time.
 set g_turrets_aimidle_delay 5
@@ -45,6 +45,8 @@
 // A walking minigun with longrage missiles and closerange meele attack.
 exec unit_walker.cfg
 
+// OMG! Its the Evil Wheel! :O
+exec unit_ewheel.cfg
 // not exec'd: gauss
 
 

Added: trunk/data/unit_ewheel.cfg
===================================================================
--- trunk/data/unit_ewheel.cfg	                        (rev 0)
+++ trunk/data/unit_ewheel.cfg	2008-10-29 06:21:55 UTC (rev 4931)
@@ -0,0 +1,39 @@
+set g_turrets_unit_ewheel_std_health 200	
+set g_turrets_unit_ewheel_std_respawntime 30
+
+// dgr / sec
+set g_turrets_unit_ewheel_turnrate 180
+
+set g_turrets_unit_ewheel_std_shot_dmg 10
+set g_turrets_unit_ewheel_std_shot_refire 0.15
+set g_turrets_unit_ewheel_std_shot_spread 0.025
+set g_turrets_unit_ewheel_std_shot_force 	20
+set g_turrets_unit_ewheel_std_shot_radius 50
+set g_turrets_unit_ewheel_std_shot_speed 7000
+
+set g_turrets_unit_ewheel_std_shot_volly 2
+set g_turrets_unit_ewheel_std_shot_volly_refire 0.5
+
+// Note this is the effective range for rocket engagement
+set g_turrets_unit_ewheel_std_target_range 6000
+set g_turrets_unit_ewheel_std_target_range_fire 4000
+set g_turrets_unit_ewheel_std_target_range_optimal 1000
+set g_turrets_unit_ewheel_std_target_range_min 50
+
+set g_turrets_unit_ewheel_std_target_select_rangebias 0.25
+set g_turrets_unit_ewheel_std_target_select_samebias 0.25
+set g_turrets_unit_ewheel_std_target_select_anglebias 0.5
+set g_turrets_unit_ewheel_std_target_select_playerbias 1
+set g_turrets_unit_ewheel_std_target_select_missilebias 0
+
+set g_turrets_unit_ewheel_std_ammo_max 4000
+set g_turrets_unit_ewheel_std_ammo 500
+set g_turrets_unit_ewheel_std_ammo_recharge 100
+
+set g_turrets_unit_ewheel_std_aim_firetolerance_dist 200
+set g_turrets_unit_ewheel_std_aim_firetolerance_angle 16
+set g_turrets_unit_ewheel_std_aim_speed 90
+set g_turrets_unit_ewheel_std_aim_maxrot 20
+set g_turrets_unit_ewheel_std_aim_maxpitch 45
+
+set g_turrets_unit_ewheel_std_track_type 1
\ No newline at end of file

Modified: trunk/data/unit_flac.cfg
===================================================================
--- trunk/data/unit_flac.cfg	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/unit_flac.cfg	2008-10-29 06:21:55 UTC (rev 4931)
@@ -1,19 +1,19 @@
 set g_turrets_unit_flac_std_health 700	
 set g_turrets_unit_flac_std_respawntime 90
 
-set g_turrets_unit_flac_std_shot_dmg 75
-set g_turrets_unit_flac_std_shot_refire 0.19
+set g_turrets_unit_flac_std_shot_dmg 35
+set g_turrets_unit_flac_std_shot_refire 0.1
 set g_turrets_unit_flac_std_shot_radius 250
-set g_turrets_unit_flac_std_shot_speed 4000
+set g_turrets_unit_flac_std_shot_speed 6000
 set g_turrets_unit_flac_std_shot_spread 0.07
 set g_turrets_unit_flac_std_shot_force 50
-set g_turrets_unit_flac_std_shot_volly 0
-set g_turrets_unit_flac_std_shot_volly_refire 0.5
+set g_turrets_unit_flac_std_shot_volly 4
+set g_turrets_unit_flac_std_shot_volly_refire 1.5
 
-set g_turrets_unit_flac_std_target_range 5000
+set g_turrets_unit_flac_std_target_range 4000
 set g_turrets_unit_flac_std_target_range_min 500
-set g_turrets_unit_flac_std_target_range_fire 5000
-set g_turrets_unit_flac_std_target_range_optimal 2500
+set g_turrets_unit_flac_std_target_range_fire 3500
+set g_turrets_unit_flac_std_target_range_optimal 1000
 
 set g_turrets_unit_flac_std_target_select_rangebias 0.25
 set g_turrets_unit_flac_std_target_select_samebias 0.25
@@ -27,7 +27,7 @@
 
 set g_turrets_unit_flac_std_aim_firetolerance_dist 200
 set g_turrets_unit_flac_std_aim_firetolerance_angle 5
-set g_turrets_unit_flac_std_aim_speed 200
+set g_turrets_unit_flac_std_aim_speed 100
 set g_turrets_unit_flac_std_aim_maxrot 360
 set g_turrets_unit_flac_std_aim_maxpitch 35
 

Modified: trunk/data/unit_machinegun.cfg
===================================================================
--- trunk/data/unit_machinegun.cfg	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/unit_machinegun.cfg	2008-10-29 06:21:55 UTC (rev 4931)
@@ -33,7 +33,7 @@
 
 set g_turrets_unit_machinegun_std_track_type 3
 set g_turrets_unit_machinegun_std_track_accel_pitch 0.25
-set g_turrets_unit_machinegun_std_track_accel_rot 0.75
+set g_turrets_unit_machinegun_std_track_accel_rot 0.5
 set g_turrets_unit_machinegun_std_track_blendrate 0.2
 
 

Modified: trunk/data/unit_walker.cfg
===================================================================
--- trunk/data/unit_walker.cfg	2008-10-28 20:50:08 UTC (rev 4930)
+++ trunk/data/unit_walker.cfg	2008-10-29 06:21:55 UTC (rev 4931)
@@ -53,5 +53,5 @@
 
 // Meele attack. Only happens when theres a target directly in front 
 set g_turrets_unit_walker_std_meele_range 160
-set g_turrets_unit_walker_std_meele_dmg 200
-set g_turrets_unit_walker_std_meele_force 1000
\ No newline at end of file
+set g_turrets_unit_walker_std_meele_dmg 500
+set g_turrets_unit_walker_std_meele_force 600
\ No newline at end of file




More information about the nexuiz-commits mailing list