From 8f0439af2af1b29ee5a9535ad72ae13d35f0aef9 Mon Sep 17 00:00:00 2001 From: div0 Date: Thu, 15 Jan 2009 17:08:33 +0000 Subject: [PATCH] csqcprojectiles: make them more readable; make turrets use them too when they fire a rocket with sound (so they no longer need to use stopsound). git-svn-id: svn://svn.icculus.org/nexuiz/trunk@5557 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/client/projectile.qc | 44 +++++++++---------- data/qcsrc/common/constants.qh | 5 +++ data/qcsrc/server/csqcprojectile.qc | 18 +++++++- data/qcsrc/server/csqcprojectile.qh | 3 +- .../server/tturrets/units/unit_hellion.qc | 6 ++- data/qcsrc/server/tturrets/units/unit_hk.qc | 6 ++- data/qcsrc/server/tturrets/units/unit_mlrs.qc | 4 +- .../server/tturrets/units/unit_walker.qc | 5 ++- data/qcsrc/server/w_electro.qc | 7 +-- data/qcsrc/server/w_rocketlauncher.qc | 10 +---- data/qcsrc/server/w_seeker.qc | 5 +-- 11 files changed, 59 insertions(+), 54 deletions(-) diff --git a/data/qcsrc/client/projectile.qc b/data/qcsrc/client/projectile.qc index 7e2aec05b..ac6f0c5bf 100644 --- a/data/qcsrc/client/projectile.qc +++ b/data/qcsrc/client/projectile.qc @@ -27,17 +27,16 @@ void Projectile_Draw() switch(self.cnt) { - default: - case 0: - break; - case 1: + case PROJECTILE_ELECTRO: break; // electro uses no trail - case 2: + case PROJECTILE_ROCKET: trailparticles(self, particleeffectnum("TR_ROCKET"), oldorg, self.origin); // rocket break; - case 3: + case PROJECTILE_TAG: trailparticles(self, particleeffectnum("TR_VORESPIKE"), oldorg, self.origin); // seeker break; + default: + break; } self.renderflags = 0; @@ -48,8 +47,8 @@ void Projectile_Draw() void Ent_RemoveProjectile() { - if(self.cnt) - if(csqc_flags & CSQC_FLAG_COLORCODES) + if(csqc_flags & CSQC_FLAG_COLORCODES) + if(self.cnt) sound(self, CHAN_PAIN, "misc/null.wav", VOL_BASE, ATTN_NORM); } @@ -112,24 +111,23 @@ void Ent_Projectile() } self.cnt = ReadShort(); - switch(self.cnt) - { - case 1: - // only new engines support sound moving with object - if(csqc_flags & CSQC_FLAG_COLORCODES) + + if(csqc_flags & CSQC_FLAG_COLORCODES) + switch(self.cnt) + { + case PROJECTILE_ELECTRO: + // only new engines support sound moving with object sound(self, CHAN_PAIN, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM); - break; - case 2: - if(csqc_flags & CSQC_FLAG_COLORCODES) + break; + case PROJECTILE_ROCKET: sound(self, CHAN_PAIN, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM); - break; - case 3: - if(csqc_flags & CSQC_FLAG_COLORCODES) + break; + case PROJECTILE_TAG: sound(self, CHAN_PAIN, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM); - break; - default: - break; - } + break; + default: + break; + } sz = ReadByte(); switch(sz) diff --git a/data/qcsrc/common/constants.qh b/data/qcsrc/common/constants.qh index 7b3875ea9..059eec23b 100644 --- a/data/qcsrc/common/constants.qh +++ b/data/qcsrc/common/constants.qh @@ -352,3 +352,8 @@ float ATTN_MAX = 3.984375; #define VOL_BASE 0.7 #define VOL_BASEVOICE 1.0 + +// this sets sounds and other properties of the projectiles in csqc +float PROJECTILE_ELECTRO = 1; +float PROJECTILE_ROCKET = 2; +float PROJECTILE_TAG = 3; diff --git a/data/qcsrc/server/csqcprojectile.qc b/data/qcsrc/server/csqcprojectile.qc index 34d6b220d..949ad7610 100644 --- a/data/qcsrc/server/csqcprojectile.qc +++ b/data/qcsrc/server/csqcprojectile.qc @@ -1,3 +1,5 @@ +.float csqcprojectile_type; + float CSQCProjectile_SendEntity(entity to, float sf) { sf = sf & 0x3F; @@ -35,16 +37,28 @@ float CSQCProjectile_SendEntity(entity to, float sf) WriteShort(MSG_ENTITY, self.effects & 65535); WriteByte(MSG_ENTITY, floor(self.effects / 65536)); } - WriteShort(MSG_ENTITY, self.csqcprojectile_flysound); + WriteShort(MSG_ENTITY, self.csqcprojectile_type); WriteByte(MSG_ENTITY, 0); // size category } return 1; } -void CSQCProjectile(entity e) +void CSQCProjectile(entity e, float clientanimate, float type) { e.SendEntity = CSQCProjectile_SendEntity; + + e.csqcprojectile_clientanimate = clientanimate; + + if(e.movetype == MOVETYPE_TOSS || e.movetype == MOVETYPE_BOUNCE) + { + if(e.gravity == 0) + e.gravity = 1; + } + else + e.gravity = 0; + + e.csqcprojectile_type = type; } void UpdateCSQCProjectile(entity e) diff --git a/data/qcsrc/server/csqcprojectile.qh b/data/qcsrc/server/csqcprojectile.qh index d8deae203..81beb36b4 100644 --- a/data/qcsrc/server/csqcprojectile.qh +++ b/data/qcsrc/server/csqcprojectile.qh @@ -1,5 +1,4 @@ -.float csqcprojectile_flysound; .float csqcprojectile_clientanimate; -void CSQCProjectile(entity e); +void CSQCProjectile(entity e, float clientanimate, float type); void UpdateCSQCProjectile(entity e); diff --git a/data/qcsrc/server/tturrets/units/unit_hellion.qc b/data/qcsrc/server/tturrets/units/unit_hellion.qc index 7f33ca194..16b0e9b16 100644 --- a/data/qcsrc/server/tturrets/units/unit_hellion.qc +++ b/data/qcsrc/server/tturrets/units/unit_hellion.qc @@ -31,7 +31,6 @@ void turret_hellion_attack() missile = spawn (); setorigin(missile, self.tur_shotorg_updated); - sound (missile, CHAN_PAIN, "weapons/rocket_fly.wav", 0.4 * VOL_BASE, ATTN_NORM); setmodel (missile, "models/turrets/mlrs_rocket.md3"); // precision set below setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot @@ -57,6 +56,8 @@ void turret_hellion_attack() missile.tur_aimpos = randomvec() * 128; te_explosion (missile.origin); + CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET); + // switch tubes self.tur_shotorg_y = self.tur_shotorg_y * -1; @@ -142,6 +143,8 @@ void turret_hellion_missile_think() self.think = turret_hellion_missile_explode; self.nextthink = time + itime; } + + UpdateCSQCProjectile(self); } void turret_hellion_missile_explode() @@ -157,7 +160,6 @@ void turret_hellion_missile_explode() return; } - stopsound (self, CHAN_PAIN); sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); org2 = findbetterlocation (self.origin, 16); diff --git a/data/qcsrc/server/tturrets/units/unit_hk.qc b/data/qcsrc/server/tturrets/units/unit_hk.qc index 7e5f1be7d..094ff1007 100644 --- a/data/qcsrc/server/tturrets/units/unit_hk.qc +++ b/data/qcsrc/server/tturrets/units/unit_hk.qc @@ -91,7 +91,6 @@ void turret_hk_attack() missile.solid = SOLID_BBOX; setmodel (missile, "models/turrets/hunter2.md3"); // precision set below setsize (missile, missile.mins,missile.maxs); // give it some size so it can be shot - sound (missile, CHAN_PAIN, "weapons/rocket_fly.wav", 0.4 * VOL_BASE, ATTN_NORM); setorigin(missile, self.tur_shotorg_updated); missile.scale = 1; @@ -116,6 +115,8 @@ void turret_hk_attack() missile.cnt = time + 30; missile.ticrate = max(cvar("sys_ticrate"),0.05); + CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET); + te_explosion (missile.origin); if (self.tur_head.frame == 0) @@ -344,6 +345,8 @@ void turret_hk_missile_think() self.atime = time + 0.2; //} #endif + + UpdateCSQCProjectile(self); } void turret_hk_missile_explode() @@ -363,7 +366,6 @@ void turret_hk_missile_explode() return; //vector org2; - stopsound (self, CHAN_PAIN); sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); org2 = findbetterlocation (self.origin, 16); diff --git a/data/qcsrc/server/tturrets/units/unit_mlrs.qc b/data/qcsrc/server/tturrets/units/unit_mlrs.qc index 0b3274b07..73e492a33 100644 --- a/data/qcsrc/server/tturrets/units/unit_mlrs.qc +++ b/data/qcsrc/server/tturrets/units/unit_mlrs.qc @@ -25,7 +25,6 @@ void turret_mlrs_attack() missile = spawn (); setmodel (missile, "models/turrets/rocket.md3"); // precision set below setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot - sound (missile, CHAN_PAIN, "weapons/rocket_fly.wav", 0.4 * VOL_BASE, ATTN_NORM); setorigin(missile, self.tur_shotorg_updated); missile.classname = "mlrs_missile"; missile.owner = self; @@ -46,6 +45,8 @@ void turret_mlrs_attack() missile.solid = SOLID_BBOX; missile.enemy = self.enemy; + CSQCProjectile(self, TRUE, PROJECTILE_ROCKET); + te_explosion (missile.origin); //self.tur_head.frame = 7 - self.volly_counter; @@ -64,7 +65,6 @@ void turret_mlrs_rocket_explode() } - stopsound (self, CHAN_PAIN); sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); org2 = findbetterlocation (self.origin, 16); pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1); diff --git a/data/qcsrc/server/tturrets/units/unit_walker.qc b/data/qcsrc/server/tturrets/units/unit_walker.qc index 70fdc6529..36bc35be0 100644 --- a/data/qcsrc/server/tturrets/units/unit_walker.qc +++ b/data/qcsrc/server/tturrets/units/unit_walker.qc @@ -159,7 +159,7 @@ void walker_rocket_damage (entity inflictor, entity attacker, float damage, floa } //#define WALKER_ROCKET_MOVE movelib_move(newdir * 275,900,0.1,10) -#define WALKER_ROCKET_MOVE movelib_move_simple(newdir,1000,cvar("g_turrets_unit_walker_std_rocket_tunrate")) +#define WALKER_ROCKET_MOVE movelib_move_simple(newdir,1000,cvar("g_turrets_unit_walker_std_rocket_tunrate")); UpdateCSQCProjectile(self) void walker_rocket_loop(); void walker_rocket_think() { @@ -311,7 +311,6 @@ void walker_fire_rocket(vector org) setorigin(rocket, org); sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM); - sound (rocket, CHAN_PAIN, "weapons/rocket_fly.wav", 0.4 * VOL_BASE, ATTN_NORM); setmodel (rocket, "models/turrets/rocket.md3"); // precision set below setsize (rocket, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot @@ -345,6 +344,8 @@ void walker_fire_rocket(vector org) rocket.solid = SOLID_BBOX; rocket.tur_health = time + 9; + CSQCProjectile(rocket, TRUE, PROJECTILE_ROCKET); + te_explosion (rocket.origin); } diff --git a/data/qcsrc/server/w_electro.qc b/data/qcsrc/server/w_electro.qc index 834125cdf..75e3e8898 100644 --- a/data/qcsrc/server/w_electro.qc +++ b/data/qcsrc/server/w_electro.qc @@ -154,12 +154,7 @@ void W_Electro_Attack2() proj.event_damage = W_Plasma_Damage; proj.flags = FL_PROJECTILE; - //sound (proj, CHAN_PAIN, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM); - - CSQCProjectile(proj); - proj.csqcprojectile_clientanimate = 1; - proj.gravity = 1; - proj.csqcprojectile_flysound = 1; + CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO); } void spawnfunc_weapon_electro (void) diff --git a/data/qcsrc/server/w_rocketlauncher.qc b/data/qcsrc/server/w_rocketlauncher.qc index b7141bf53..76cda0d36 100644 --- a/data/qcsrc/server/w_rocketlauncher.qc +++ b/data/qcsrc/server/w_rocketlauncher.qc @@ -247,15 +247,7 @@ void W_Rocket_Attack (void) //sound (missile, CHAN_PAIN, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM); missile.flags = FL_PROJECTILE; - CSQCProjectile(missile); - - if(cvar("g_balance_rocketlauncher_speedaccel") == 0 && cvar("g_laserguided_missiles") == 0) - missile.csqcprojectile_clientanimate = 1; - else - missile.csqcprojectile_clientanimate = 0; // we won't client animate if the missiles may behave weird - - missile.gravity = 0; - missile.csqcprojectile_flysound = 2; + CSQCProjectile(missile, cvar("g_balance_rocketlauncher_speedaccel") == 0 && cvar("g_laserguided_missiles") == 0, PROJECTILE_ROCKET); // muzzle flash for 1st person view flash = spawn (); diff --git a/data/qcsrc/server/w_seeker.qc b/data/qcsrc/server/w_seeker.qc index c8b5f9714..f6b8c28c6 100644 --- a/data/qcsrc/server/w_seeker.qc +++ b/data/qcsrc/server/w_seeker.qc @@ -369,10 +369,7 @@ void Seeker_Fire_Tag() W_SetupProjectileVelocity(missile); missile.angles = vectoangles (missile.velocity); - CSQCProjectile(missile); - missile.csqcprojectile_clientanimate = 1; - missile.gravity = 0; - missile.csqcprojectile_flysound = 3; + CSQCProjectile(missile, TRUE, PROJECTILE_TAG); } -- 2.39.2