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