r5842 - in trunk/data/qcsrc/server: . tturrets/units
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Wed Feb 11 16:41:19 EST 2009
Author: tzork
Date: 2009-02-11 16:41:19 -0500 (Wed, 11 Feb 2009)
New Revision: 5842
Modified:
trunk/data/qcsrc/server/pathlib.qc
trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc
trunk/data/qcsrc/server/tturrets/units/unit_ewheel.qc
trunk/data/qcsrc/server/tturrets/units/unit_flac.qc
trunk/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc
trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc
trunk/data/qcsrc/server/tturrets/units/unit_machinegun.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
Log:
Make all turrets use csqc projectiles
use TFL_DMG_HEADSHAKE for some units.
make flac turret somewhat functional (sponsored by uglyhakk inc)
Modified: trunk/data/qcsrc/server/pathlib.qc
===================================================================
--- trunk/data/qcsrc/server/pathlib.qc 2009-02-11 21:35:32 UTC (rev 5841)
+++ trunk/data/qcsrc/server/pathlib.qc 2009-02-11 21:41:19 UTC (rev 5842)
@@ -1,6 +1,6 @@
-#define PLF_GROUNDSNAP 1
-#define PLF_NOOPTIMIZE 2
-#define PLF_SUBPATH3D 4
+#define PFL_GROUNDSNAP 1
+#define PFL_NOOPTIMIZE 2
+#define PFL_SUBPATH3D 4
#define PT_QUICKSTAR 1
#define PT_QUICKBOX 2
@@ -76,7 +76,7 @@
else
point.classname = "path_end";
- if (point.owner.path_flags & PLF_GROUNDSNAP)
+ if (point.owner.path_flags & PFL_GROUNDSNAP)
where = pathlib_groundsnap(where);
setorigin(point,where);
@@ -115,7 +115,7 @@
step = vlen(self.maxs - self.mins) * start.owner.path_subpathing_bboxexpand;
- if(start.owner.path_flags & PLF_SUBPATH3D)
+ if(start.owner.path_flags & PFL_SUBPATH3D)
{
zmin = maxsize * -1;
zmax = maxsize;
@@ -133,7 +133,7 @@
point = vcrash + box;
- if(start.owner.path_flags & PLF_GROUNDSNAP)
+ if(start.owner.path_flags & PFL_GROUNDSNAP)
point = pathlib_groundsnap(point);
if(self.path_validate(start.origin,point))
@@ -363,9 +363,8 @@
if(subpathing_bboxexpand < 1)
subpathing_bboxexpand = 1;
- if(pathflags & PLF_GROUNDSNAP)
+ if(pathflags & PFL_GROUNDSNAP)
{
- //bprint("SnapIT!\n");
from = pathlib_groundsnap(from);
to = pathlib_groundsnap(to);
}
@@ -458,7 +457,7 @@
}
setsize(self,'-50 -50 0','50 50 50');
- path = pathlib_makepath(self.origin,end.origin, PLF_GROUNDSNAP,500,1.25,PT_QUICKSTAR);
+ path = pathlib_makepath(self.origin,end.origin, PFL_GROUNDSNAP,500,1.25,PT_QUICKSTAR);
if(!path)
{
Modified: trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc 2009-02-11 21:35:32 UTC (rev 5841)
+++ trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc 2009-02-11 21:41:19 UTC (rev 5842)
@@ -21,7 +21,7 @@
oldself = self;
self = forwho;
- pth = pathlib_makepath(start.origin,end.origin,PLF_GROUNDSNAP,500,1.5,PT_QUICKSTAR);
+ pth = pathlib_makepath(start.origin,end.origin,PFL_GROUNDSNAP,500,1.5,PT_QUICKSTAR);
self = oldself;
return pth;
Modified: trunk/data/qcsrc/server/tturrets/units/unit_ewheel.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_ewheel.qc 2009-02-11 21:35:32 UTC (rev 5841)
+++ trunk/data/qcsrc/server/tturrets/units/unit_ewheel.qc 2009-02-11 21:41:19 UTC (rev 5842)
@@ -39,8 +39,8 @@
proj = spawn ();
setorigin(proj, self.tur_shotorg_updated);
- setsize(proj, '-0.5 -0.5 -0.5', '0.5 0.5 0.5');
- setmodel(proj, "models/laser.mdl"); // precision set above
+ //setsize(proj, '-0.5 -0.5 -0.5', '0.5 0.5 0.5');
+ //setmodel(proj, "models/laser.mdl"); // precision set above
proj.classname = "ewheel bolt";
proj.owner = self;
proj.bot_dodge = FALSE;
@@ -49,13 +49,15 @@
proj.nextthink = time + 9;
proj.solid = SOLID_BBOX;
proj.movetype = MOVETYPE_FLYMISSILE;
- proj.velocity = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+ proj.velocity = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
proj.angles = vectoangles(proj.velocity);
proj.touch = turret_ewheel_projectile_explode;
- proj.effects = EF_LOWPRECISION | EF_BRIGHTFIELD;
+ //proj.effects = EF_LOWPRECISION | EF_BRIGHTFIELD;
proj.enemy = self.enemy;
proj.flags = FL_PROJECTILE | FL_NOTARGET;
+ CSQCProjectile(proj, TRUE, PROJECTILE_LASER, TRUE);
+
self.tur_head.frame += 2;
if (self.tur_head.frame > 3)
@@ -65,9 +67,9 @@
}
#define EWHEEL_MASS 50
-#define EWHEEL_MAXSPEED 1500
-#define EWHEEL_ACCEL_SLOW 50
-#define EWHEEL_ACCEL_FAST 150
+#define EWHEEL_MAXSPEED 800
+#define EWHEEL_ACCEL_SLOW 25
+#define EWHEEL_ACCEL_FAST 100
#define EWHEEL_BREAK_SLOW 100
#define EWHEEL_BREAK_FAST 250
@@ -122,7 +124,7 @@
makevectors(self.angles);
- if (self.tur_dist_enemy > self.target_range_optimal)
+ if (self.tur_dist_aimpos > self.target_range_optimal)
{
if ( angle_ofs < 10 )
{
Modified: trunk/data/qcsrc/server/tturrets/units/unit_flac.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_flac.qc 2009-02-11 21:35:32 UTC (rev 5841)
+++ trunk/data/qcsrc/server/tturrets/units/unit_flac.qc 2009-02-11 21:41:19 UTC (rev 5842)
@@ -12,7 +12,7 @@
sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
proj = spawn ();
setorigin(proj, self.tur_shotorg_updated);
- setmodel(proj, "models/turrets/pd_proj.md3");
+ // setmodel(proj, "models/turrets/pd_proj.md3");
setsize(proj, '0 0 0', '0 0 0');
proj.classname = "turret_fire";
proj.owner = self;
@@ -21,15 +21,19 @@
proj.solid = SOLID_NOT;
proj.movetype = MOVETYPE_FLYMISSILE;
proj.flags = FL_PROJECTILE;
- proj.effects = EF_LOWPRECISION;
- proj.takedamage = DAMAGE_YES;
- proj.health = 10;
- proj.velocity = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+ // proj.effects = EF_LOWPRECISION;
+ proj.takedamage = DAMAGE_NO;
+ //proj.health = 100;
+ proj.velocity = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
proj.angles = vectoangles(proj.velocity);
proj.touch = turret_flac_projectile_explode;
proj.think = turret_flac_projectile_explode;
- proj.nextthink = time + (vlen(self.tur_aimpos - self.tur_shotorg_updated) / self.shot_speed) + (random() * self.shot_spread);
+ proj.nextthink = time + max(self.tur_impacttime,(self.shot_radius * 3) / self.shot_speed);
+ proj.enemy = self.enemy;
+ proj.cnt = time + 5;
+ CSQCProjectile(proj, TRUE, PROJECTILE_HAGAR, TRUE);
+
self.tur_head.frame = self.tur_head.frame + 1;
if (self.tur_head.frame >= 4) self.tur_head.frame = 0;
@@ -39,6 +43,15 @@
{
float ftmp;
+ // FIXME: tur_impacttime is not accurate enougth, this is a dirty hakk to make flac work.
+ if(self.enemy != world)
+ if(self.cnt < time)
+ if(vlen(self.origin - self.enemy.origin) > self.owner.shot_radius * 0.5)
+ {
+ self.nextthink = time; //vlen(self.origin - self.enemy.origin) / self.owner.shot_speed;
+ return;
+ }
+
te_explosion (self.origin);
ftmp = crandom();
@@ -54,12 +67,11 @@
#ifdef TURRET_DEBUG
-
ftmp = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + ftmp; //self.owner.shot_dmg;
self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
#else
- RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
#endif
remove (self);
@@ -81,6 +93,8 @@
return;
}
+ self.damage_flags |= TFL_DMG_HEADSHAKE;
+
setmodel(self,"models/turrets/base.md3");
setmodel(self.tur_head,"models/turrets/flac.md3");
Modified: trunk/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc 2009-02-11 21:35:32 UTC (rev 5841)
+++ trunk/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc 2009-02-11 21:41:19 UTC (rev 5842)
@@ -11,8 +11,8 @@
if (self.ammo < self.shot_dmg) return 0;
if (self.enemy.ammo >= self.enemy.ammo_max) return 0;
- if (self.tur_dist_enemy > self.target_range_fire) return 0;
- if (self.tur_dist_enemy < self.target_range_min) return 0;
+ if (self.tur_dist_aimpos > self.target_range_fire) return 0;
+ if (self.tur_dist_aimpos < self.target_range_min) return 0;
return 1;
}
Modified: trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc 2009-02-11 21:35:32 UTC (rev 5841)
+++ trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc 2009-02-11 21:41:19 UTC (rev 5842)
@@ -38,14 +38,15 @@
missile.bot_dodge = TRUE;
missile.bot_dodgerating = self.shot_dmg;
missile.takedamage = DAMAGE_YES;
+ missile.event_damage = turret_hellion_missile_damage;
missile.damageforcescale = 2;
- missile.health = 50;
+ missile.health = 10;
missile.enemy = self.enemy;
missile.think = turret_hellion_missile_think;
- missile.nextthink = time + 0.2;
+ missile.nextthink = time;// + 0.2;
missile.solid = SOLID_BBOX;
- missile.movetype = MOVETYPE_FLYMISSILE;
- missile.velocity = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed; // + ('0 0 1' * self.shot_speed * 0.15);
+ missile.movetype = MOVETYPE_FLY;
+ missile.velocity = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
missile.angles = vectoangles(missile.velocity);
missile.touch = turret_hellion_missile_explode;
missile.flags = FL_PROJECTILE;
@@ -77,15 +78,12 @@
vector pre_pos;
float itime;
- self.nextthink = time + 0.1;
+ self.nextthink = time + 0.05;
- // Enemy in range?
- if (vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 0.25)
- turret_hellion_missile_explode();
-
olddir = normalize(self.velocity);
- if (self.tur_health < time) turret_hellion_missile_explode();
+ if(self.tur_health < time)
+ turret_hellion_missile_explode();
// Enemy dead? just keep on the current heading then.
if ((self.enemy == world) || (self.enemy.deadflag != DEAD_NO))
@@ -94,55 +92,48 @@
// Make sure we dont return to tracking a respawned player
self.enemy = world;
- // Accelerate
- self.velocity = olddir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
-
// Turn model
self.angles = vectoangles(self.velocity);
- //if ( (vlen(self.origin - self.owner.origin)) > (self.owner.shot_radius * 10) )
- // turret_hellion_missile_explode();
+ if ( (vlen(self.origin - self.owner.origin)) > (self.owner.shot_radius * 5) )
+ turret_hellion_missile_explode();
- // return;
- }
+ // Accelerate
+ self.velocity = olddir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
- olddir = normalize(self.velocity);
+ UpdateCSQCProjectile(self);
- if (self.enemy)
- {
- // Predict enemy position
- itime = vlen(self.enemy.origin - self.origin) / vlen(self.velocity);
- pre_pos = self.enemy.origin + self.enemy.velocity * itime;
+ return;
}
- else
- {
- pre_pos = self.origin + olddir * 1024;
- }
+ // Enemy in range?
+ if (vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 0.2)
+ turret_hellion_missile_explode();
+
+ // Predict enemy position
+ itime = vlen(self.enemy.origin - self.origin) / vlen(self.velocity);
+ pre_pos = self.enemy.origin + self.enemy.velocity * itime;
+
pre_pos = (pre_pos + self.enemy.origin) * 0.5;
//pre_pos += randomvec() * 128; //self.tur_aimpos * (sin(32) * time) ;
-
// Find out the direction to that place
newdir = normalize(pre_pos - self.origin);
// Turn
- newdir = normalize(olddir + newdir * 0.5);
+ newdir = normalize(olddir + newdir * 0.35);
- // Accelerate
- self.velocity = newdir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
-
// Turn model
self.angles = vectoangles(self.velocity);
- if (time+itime < time+0.1)
- {
+ // Accelerate
+ self.velocity = newdir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
+
+ if (itime < 0.05)
self.think = turret_hellion_missile_explode;
- self.nextthink = time + itime;
- }
- UpdateCSQCProjectile(self);
+ UpdateCSQCProjectile(self);
}
void turret_hellion_missile_explode()
Modified: trunk/data/qcsrc/server/tturrets/units/unit_machinegun.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_machinegun.qc 2009-02-11 21:35:32 UTC (rev 5841)
+++ trunk/data/qcsrc/server/tturrets/units/unit_machinegun.qc 2009-02-11 21:41:19 UTC (rev 5842)
@@ -7,11 +7,12 @@
{
entity flash;
+
sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
- fireBallisticBullet (self.tur_shotorg_updated, self.tur_shotdir_updated,self.shot_spread, cvar("g_balance_uzi_speed"), 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, cvar("g_balance_uzi_bulletconstant"));
+ fireBallisticBullet (self.tur_shotorg_updated, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, cvar("g_balance_uzi_bulletconstant"));
te_smallflash(self.tur_shotorg_updated);
- trailparticles(self,particleeffectnum("EF_MGTURRETTRAIL"),self.tur_shotorg_updated,trace_endpos);
+ // trailparticles(self,particleeffectnum("EF_MGTURRETTRAIL"),self.tur_shotorg_updated,trace_endpos);
// muzzle flash for 3rd person view
flash = spawn();
@@ -32,8 +33,8 @@
if (self.netname == "") self.netname = "Machinegun Turret";
self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
- self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL;
- self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE;
+ self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL;// | TFL_TURRCAPS_MISSILEKILL;
+ self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE | TFL_AIM_SHOTTIMECOMPENSATE;
if (turret_stdproc_init("machinegun_std") == 0)
{
@@ -41,6 +42,8 @@
return;
}
+ self.damage_flags |= TFL_DMG_HEADSHAKE;
+
setmodel(self,"models/turrets/base.md3");
setmodel(self.tur_head,"models/turrets/machinegun.md3");
@@ -64,6 +67,7 @@
{
//precache_model ("models/turrets/machinegun.md3");
//precache_model ("models/turrets/base.md3");
+ precache_sound ("weapons/uzi_fire.wav");
self.think = turret_machinegun_std_init;
self.nextthink = time + 0.5;
Modified: trunk/data/qcsrc/server/tturrets/units/unit_mlrs.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_mlrs.qc 2009-02-11 21:35:32 UTC (rev 5841)
+++ trunk/data/qcsrc/server/tturrets/units/unit_mlrs.qc 2009-02-11 21:41:19 UTC (rev 5842)
@@ -7,11 +7,7 @@
{
// 0 = full, 6 = empty
-
self.tur_head.frame = rint(6 - (self.ammo / self.shot_dmg));
-
- //if ((self.tur_head.frame >= 6) && (self.attack_finished_single <= time))
- // self.tur_head.frame = 0;
}
void turret_mlrs_attack()
@@ -29,14 +25,17 @@
missile.owner = self;
missile.bot_dodge = TRUE;
missile.bot_dodgerating = self.shot_dmg;
- missile.takedamage = DAMAGE_YES;
+ missile.takedamage = DAMAGE_NO;
missile.damageforcescale = 4;
- missile.health = 30;
+ //missile.health = 25;
missile.think = turret_mlrs_rocket_explode;
+
missile.nextthink = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed);
+ //missile.nextthink = missile.nextthink + random() * self.shot_spread;
+
missile.solid = SOLID_BBOX;
missile.movetype = MOVETYPE_FLYMISSILE;
- missile.velocity = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+ missile.velocity = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
missile.angles = vectoangles(missile.velocity);
missile.touch = turret_mlrs_rocket_explode;
missile.flags = FL_PROJECTILE;
@@ -74,10 +73,10 @@
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
#else
- RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
#endif
- // Target dead, get another is still targeting the same.
+ // Target dead, Tell turret.
if ((self.enemy.deadflag != DEAD_NO) && (self.enemy == self.owner.enemy))
self.owner.enemy = world;
@@ -90,7 +89,7 @@
self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
- self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE | TFL_AIM_SHOTTIMECOMPENSATE;
+ self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_INFRONT;
if (turret_stdproc_init("mlrs_std") == 0)
{
@@ -98,6 +97,11 @@
return;
}
+ self.damage_flags |= TFL_DMG_HEADSHAKE;
+
+ self.shoot_flags |= TFL_SHOOT_VOLLYALWAYS;
+ self.volly_counter = self.shot_volly;
+
setmodel(self,"models/turrets/base.md3");
setmodel(self.tur_head,"models/turrets/mlrs.md3");
Modified: trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc 2009-02-11 21:35:32 UTC (rev 5841)
+++ trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc 2009-02-11 21:41:19 UTC (rev 5842)
@@ -9,20 +9,35 @@
void turret_plasma_postthink()
{
+
+
if (self.tur_head.frame != 0)
self.tur_head.frame = self.tur_head.frame + 1;
- if (self.tur_head.frame >= 5)
+ if (self.tur_head.frame > 5)
self.tur_head.frame = 0;
+ /*
+ float h;
+ h = self.health / self.tur_health;
+ if(h<0.95)
+ {
+ if( (0.5 + random()) > h)
+ {
+ //bprint("Spark!\n");
+ //void(vector org, vector vel, float howmany) te_spark = #411;
+ te_spark(0.5 * (self.absmin + self.absmax) + (randomvec() * 64),randomvec() * 256,(1 - h) * 50);
+ }
+ }
+ */
}
-void turret_plasma_dualpostthink()
+void turret_plasma_dual_postthink()
{
if (self.tur_head.frame != 0)
self.tur_head.frame = self.tur_head.frame + 1;
- if (self.tur_head.frame >= 6)
+ if (self.tur_head.frame > 6)
self.tur_head.frame = 0;
}
@@ -38,33 +53,36 @@
proj = spawn ();
setorigin(proj, self.tur_shotorg_updated);
setsize(proj, '-0.5 -0.5 -0.5', '0.5 0.5 0.5');
- setmodel(proj, "models/elaser.mdl"); // precision set above
+ //setmodel(proj, "models/elaser.mdl"); // precision set above
proj.classname = "plasmabomb";
proj.owner = self;
- proj.bot_dodge = FALSE;
- //proj.bot_dodgerating = self.shot_dmg;
+ proj.bot_dodge = TRUE;
+ proj.bot_dodgerating = self.shot_dmg;
proj.think = turret_plasma_projectile_explode;
proj.nextthink = time + 9;
proj.solid = SOLID_BBOX;
proj.movetype = MOVETYPE_FLYMISSILE;
- proj.velocity = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+ proj.velocity = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
proj.angles = vectoangles(proj.velocity);
proj.touch = turret_plasma_projectile_explode;
proj.flags = FL_PROJECTILE;
- proj.effects = EF_LOWPRECISION | EF_BRIGHTFIELD;
+ //proj.effects = EF_LOWPRECISION | EF_BRIGHTFIELD;
proj.enemy = self.enemy;
proj.flags = FL_PROJECTILE | FL_NOTARGET;
- if(self.tur_head.frame )
- self.tur_head.frame = 0;
+ CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE);
+ if (self.tur_head.frame == 0)
+ self.tur_head.frame = 1;
}
void turret_plasma_dual_attack()
{
entity proj;
- if (self.tur_head.frame > 2)
+ if (self.tur_head.frame != 0)
+ self.tur_head.frame = 3;
+ else
self.tur_head.frame = 1;
turret_tag_fire_update();
@@ -73,7 +91,7 @@
proj = spawn ();
setorigin(proj, self.tur_shotorg_updated);
setsize(proj, '0 0 0', '0 0 0');
- setmodel(proj, "models/elaser.mdl"); // precision set above
+ //setmodel(proj, "models/elaser.mdl"); // precision set above
proj.classname = "plasmabomb";
proj.owner = self;
proj.bot_dodge = TRUE;
@@ -82,20 +100,15 @@
proj.nextthink = time + 9;
proj.solid = SOLID_BBOX;
proj.movetype = MOVETYPE_FLYMISSILE;
- proj.velocity = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+ proj.velocity = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
proj.angles = vectoangles(proj.velocity);
proj.touch = turret_plasma_projectile_explode;
proj.flags = FL_PROJECTILE;
- proj.effects = EF_LOWPRECISION | EF_BRIGHTFIELD;
+ // proj.effects = EF_LOWPRECISION | EF_BRIGHTFIELD;
proj.enemy = self.enemy;
proj.flags = FL_PROJECTILE | FL_NOTARGET;
- if (self.tur_head.frame == 0)
- self.tur_head.frame = 1;
-
- // Snapback the head
- // self.tur_head.angles_x = self.tur_head.angles_x + min((self.shot_dmg * 0.05),self.aim_maxpitch);
-
+ CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE);
}
void turret_plasma_projectile_explode()
@@ -115,7 +128,6 @@
self.event_damage = SUB_Null;
-
#ifdef TURRET_DEBUG
float d;
@@ -134,27 +146,32 @@
{
if (self.netname == "") self.netname = "Plasma Cannon";
+ // What ammo to use
self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+
+ // How to aim
self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZEASE | TFL_AIM_GROUND2;
+ self.damage_flags |= TFL_DMG_HEADSHAKE;
+
if (turret_stdproc_init("plasma_std") == 0)
{
remove(self);
return;
}
+ self.firecheck_flags |= TFL_FIRECHECK_AFF;
setmodel(self,"models/turrets/base.md3");
setmodel(self.tur_head,"models/turrets/plasma.md3");
-
if (!turret_tag_setup(0))
dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
- // Our fire routine
- self.turret_firefunc = turret_plasma_dual_attack;
+ // Our fireing routine
+ self.turret_firefunc = turret_plasma_attack;
- // re-color badge & handle recoil effect
- self.turret_postthink = turret_plasma_dualpostthink;
+ // Custom per turret frame stuff. usualy animation.
+ self.turret_postthink = turret_plasma_postthink;
}
@@ -162,8 +179,14 @@
{
if (self.netname == "") self.netname = "Dual Plasma Cannon";
+ // What ammo to use
self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+ // How to aim at targets
+ self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZEASE | TFL_AIM_GROUND2;
+
+ self.damage_flags |= TFL_DMG_HEADSHAKE;
+
if (turret_stdproc_init("plasma_dual") == 0)
{
remove(self);
@@ -173,17 +196,15 @@
setmodel(self,"models/turrets/base.md3");
setmodel(self.tur_head,"models/turrets/plasmad.md3");
+
if (!turret_tag_setup(0))
dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
- // select aim
- self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZEASE | TFL_AIM_GROUND2;
+ // Our fireing routine
+ self.turret_firefunc = turret_plasma_dual_attack;
- // Our fire routine
- self.turret_firefunc = turret_plasma_attack;
-
- // re-color badge & handle recoil effect
- self.turret_postthink = turret_plasma_postthink;
+ // Custom per turret frame stuff. usualy animation.
+ self.turret_postthink = turret_plasma_dual_postthink;
}
Modified: trunk/data/qcsrc/server/tturrets/units/unit_walker.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_walker.qc 2009-02-11 21:35:32 UTC (rev 5841)
+++ trunk/data/qcsrc/server/tturrets/units/unit_walker.qc 2009-02-11 21:41:19 UTC (rev 5842)
@@ -48,11 +48,8 @@
{
if (turret_validate_target(self,e,self.target_validate_flags))
if (e != self)
- {
- //bprint(self.netname, " is meele hitting ",e.netname,"\n");
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;
}
}
@@ -71,7 +68,6 @@
self.frame = self.frame + 1;
if (self.frame > 25)
self.frame = 5;
-
break;
case ANIM_RUN:
@@ -154,7 +150,8 @@
{
self.health = self.health - damage;
self.velocity = self.velocity + vforce;
- if (self.health <= 0) walker_rocket_explode();
+ if (self.health <= 0)
+ walker_rocket_explode();
}
//#define WALKER_ROCKET_MOVE movelib_move(newdir * 275,900,0.1,10)
@@ -162,14 +159,13 @@
void walker_rocket_loop();
void walker_rocket_think()
{
- vector olddir,newdir;
+ vector newdir;
float edist;
float itime;
float m_speed;
- self.nextthink = time + 0.1;
+ self.nextthink = time;
- olddir = normalize(self.velocity);
edist = vlen(self.enemy.origin - self.origin);
// Simulate crude guidance
@@ -179,8 +175,10 @@
self.tur_shotorg = randomvec() * min(edist,64);
else
self.tur_shotorg = randomvec() * min(edist,256);
+
self.cnt = time + 0.5;
}
+
if (edist < 256)
self.tur_shotorg = '0 0 0';
@@ -192,14 +190,13 @@
return;
}
- if ((random() < 0.01) && (self.shot_dmg != 1337))
+ if (self.shot_dmg != 1337)
+ if (random() < 0.01)
{
walker_rocket_loop();
return;
}
- olddir = normalize(self.velocity);
-
m_speed = vlen(self.velocity) + cvar("g_turrets_unit_walker_std_rocket_speed_add");
// Enemy dead? just keep on the current heading then.
@@ -220,40 +217,34 @@
}
else
{
- newdir = olddir;
+ newdir = normalize(self.velocity);
}
- WALKER_ROCKET_MOVE;
-
-
// Turn model
self.angles = vectoangles(self.velocity);
- if (time + itime < time + 0.1)
- {
- self.think = walker_rocket_explode;
- self.nextthink = time + itime;
- }
+
+ WALKER_ROCKET_MOVE;
+ //UpdateCSQCProjectile(self);
}
void walker_rocket_loop3()
{
+ vector newdir;
+ self.nextthink = time;
+
if (self.tur_health < time)
{
self.think = walker_rocket_explode;
- self.nextthink = time;
return;
}
- self.nextthink = time + 0.1;
-
if (vlen(self.origin - self.tur_shotorg) < 128 )
{
self.think = walker_rocket_think;
return;
}
- vector newdir;
newdir = steerlib_pull(self.tur_shotorg);
WALKER_ROCKET_MOVE;
@@ -263,15 +254,16 @@
void walker_rocket_loop2()
{
+ vector newdir;
+
+ self.nextthink = time;
+
if (self.tur_health < time)
{
self.think = walker_rocket_explode;
- self.nextthink = time;
return;
}
- self.nextthink = time;
-
if (vlen(self.origin - self.tur_shotorg) < 128 )
{
self.tur_shotorg = self.origin - '0 0 200';
@@ -279,18 +271,14 @@
return;
}
- vector newdir;
-
+ self.angles = vectoangles(self.velocity);
newdir = steerlib_pull(self.tur_shotorg);
WALKER_ROCKET_MOVE;
-
- self.angles = vectoangles(self.velocity);
-
}
void walker_rocket_loop()
{
- self.nextthink= time + 0;
+ self.nextthink = time;
self.tur_shotorg = self.origin + '0 0 400';
self.think = walker_rocket_loop2;
self.shot_dmg = 1337;
@@ -306,6 +294,8 @@
makevectors(self.angles);
//self.angles_x *= -1;
+ te_explosion (org);
+
rocket = spawn ();
setorigin(rocket, org);
@@ -314,12 +304,14 @@
rocket.classname = "walker_rocket";
rocket.owner = self;
+
rocket.bot_dodge = TRUE;
rocket.bot_dodgerating = 50;
+
rocket.takedamage = DAMAGE_YES;
rocket.damageforcescale = 2;
- rocket.health = 10;
+ rocket.health = 25;
rocket.tur_shotorg = randomvec() * 512;
rocket.cnt = time + 1;
rocket.enemy = self.enemy;
@@ -331,20 +323,16 @@
rocket.event_damage = walker_rocket_damage;
- rocket.nextthink = time + 0.25;
- rocket.solid = SOLID_BBOX;
- rocket.movetype = MOVETYPE_FLYMISSILE;
- rocket.velocity = ((v_forward + v_up * 0.25) +(randomvec() * 0.1))* cvar("g_turrets_unit_walker_std_rocket_speed");
+ rocket.nextthink = time;// + 0.25;
+ rocket.movetype = MOVETYPE_FLY;
+ rocket.velocity = normalize((v_forward + v_up * 0.25) + (randomvec() * 0.1)) * cvar("g_turrets_unit_walker_std_rocket_speed");
rocket.angles = vectoangles(rocket.velocity);
rocket.touch = walker_rocket_explode;
rocket.flags = FL_PROJECTILE;
rocket.solid = SOLID_BBOX;
rocket.tur_health = time + 9;
- CSQCProjectile(rocket, TRUE, PROJECTILE_ROCKET, FALSE); // no cull, fly sound
-
- te_explosion (rocket.origin);
-
+ CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
}
/*
@@ -383,13 +371,11 @@
org = self.owner.origin + gettaginfo(self.owner,f);
-
-
self.nextthink = time + 0.2;
oldself = self;
self = self.owner;
walker_fire_rocket(org);
- self=oldself;
+ self = oldself;
}
/*
@@ -470,7 +456,7 @@
if(self.pathgoal.enemy)
{
- self.pathcurrent = pathlib_makepath(self.pathgoal.origin,self.pathgoal.enemy.origin,PLF_GROUNDSNAP,1500,2,PT_QUICKBOX);
+ self.pathcurrent = pathlib_makepath(self.pathgoal.origin,self.pathgoal.enemy.origin,PFL_GROUNDSNAP,1500,2,PT_QUICKBOX);
self.pathgoal = self.pathgoal.enemy;
}
}
@@ -490,7 +476,7 @@
wish_angle = angleofs(self,self.enemy);
steer = steerlib_pull(self.enemy.origin);
- if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_meele_range"))
+ if (self.tur_dist_aimpos < cvar("g_turrets_unit_walker_std_meele_range"))
{
if (fabs(wish_angle_y) < 15)
{
@@ -588,7 +574,7 @@
sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
- fireBallisticBullet (self.tur_shotorg_updated, self.tur_shotdir_updated,self.shot_spread, cvar("g_balance_uzi_speed"), 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, cvar("g_balance_uzi_bulletconstant"));
+ fireBallisticBullet (self.tur_shotorg_updated, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, cvar("g_balance_uzi_bulletconstant"));
te_smallflash(self.tur_shotorg_updated);
if (!(self.uzi_bulletcounter & 3))
@@ -641,7 +627,7 @@
dprint("Warning: not a turrret path\n");
else
{
- self.pathcurrent = pathlib_makepath(self.origin,e.origin,PLF_GROUNDSNAP,500,2,PT_QUICKBOX);
+ self.pathcurrent = pathlib_makepath(self.origin,e.origin,PFL_GROUNDSNAP,500,2,PT_QUICKBOX);
self.pathgoal = e;
}
}
@@ -681,8 +667,8 @@
self.wkr_spawn = spawn();
self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
- self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_ROAM | TFL_TURRCAPS_LINKED;
- self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE;
+ self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_ROAM | TFL_TURRCAPS_LINKED;
+ self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE | TFL_AIM_SHOTTIMECOMPENSATE;
self.turret_respawnhook = walker_respawnhook;
self.turret_diehook = walker_diehook;
@@ -712,8 +698,9 @@
self.wkr_spawn.solid = SOLID_NOT;
- traceline(self.wkr_spawn.origin + '0 0 10', self.wkr_spawn.origin - '0 0 10000', MOVE_NOMONSTERS, self);
+ traceline(self.wkr_spawn.origin + '0 0 16', self.wkr_spawn.origin - '0 0 10000', MOVE_NOMONSTERS, self);
setorigin(self.wkr_spawn,trace_endpos + '0 0 4');
+ setorigin(self,self.wkr_spawn.origin);
setmodel(self,"models/turrets/walker_body.md3");
setmodel(self.tur_head,"models/turrets/walker_head_minigun.md3");
@@ -749,7 +736,7 @@
e = find(world,targetname,self.target);
if (!e)
{
- bprint("Warning! initital waypoint for Walker does NOT exsist!\n");
+ dprint("Initital waypoint for walker does NOT exsist, fix your map!\n");
self.target = "";
}
@@ -757,7 +744,7 @@
dprint("Warning: not a turrret path\n");
else
{
- self.pathcurrent = pathlib_makepath(self.origin,e.origin,PLF_GROUNDSNAP,500,2,PT_QUICKBOX);
+ self.pathcurrent = pathlib_makepath(self.origin,e.origin,PFL_GROUNDSNAP,500,2,PT_QUICKBOX);
self.pathgoal = e;
}
}
More information about the nexuiz-commits
mailing list