From 40694b78f46805de1a99e444032171eb8e50e22e Mon Sep 17 00:00:00 2001 From: div0 Date: Fri, 29 May 2009 19:27:58 +0000 Subject: [PATCH] fix grenade launcher through floor git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6786 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_weaponsystem.qc | 13 +++++++------ data/qcsrc/server/w_crylink.qc | 2 ++ data/qcsrc/server/w_electro.qc | 5 +++-- data/qcsrc/server/w_grenadelauncher.qc | 7 ++++--- data/qcsrc/server/w_hagar.qc | 2 ++ data/qcsrc/server/w_hlac.qc | 2 ++ data/qcsrc/server/w_hook.qc | 1 + data/qcsrc/server/w_laser.qc | 1 + data/qcsrc/server/w_porto.qc | 1 + data/qcsrc/server/w_rocketlauncher.qc | 2 +- data/qcsrc/server/w_seeker.qc | 8 +++++--- 11 files changed, 29 insertions(+), 15 deletions(-) diff --git a/data/qcsrc/server/cl_weaponsystem.qc b/data/qcsrc/server/cl_weaponsystem.qc index 70c939239..e75b1746f 100644 --- a/data/qcsrc/server/cl_weaponsystem.qc +++ b/data/qcsrc/server/cl_weaponsystem.qc @@ -103,7 +103,7 @@ vector w_shotdir; // this function calculates w_shotorg and w_shotdir based on the weapon model // offset, trueaim and antilag, and won't put w_shotorg inside a wall. // make sure you call makevectors first (FIXME?) -void W_SetupShot(entity ent, float antilag, float recoil, string snd) +void W_SetupShot_ProjectileSize(entity ent, vector mi, vector ma, float antilag, float recoil, string snd) { float nudge = 1; // added to traceline target and subtracted from result local vector trueaimpoint; @@ -130,12 +130,8 @@ void W_SetupShot(entity ent, float antilag, float recoil, string snd) dv = v_right * vecs_y + v_up * vecs_z; w_shotorg = ent.origin + ent.view_ofs + dv; - // move the vecs sideways as much as requested if possible - traceline(ent.origin + ent.view_ofs, w_shotorg + normalize(dv) * nudge, MOVE_NORMAL, ent); - w_shotorg = trace_endpos - normalize(dv) * nudge; - // now move the shotorg forward as much as requested if possible - traceline(w_shotorg, w_shotorg + v_forward * (vecs_x + nudge), MOVE_NORMAL, ent); + tracebox(w_shotorg, mi, ma, w_shotorg + v_forward * (vecs_x + nudge), MOVE_NORMAL, ent); w_shotorg = trace_endpos - v_forward * nudge; // calculate the shotdir from the chosen shotorg w_shotdir = normalize(trueaimpoint - w_shotorg); @@ -267,6 +263,11 @@ void W_SetupShot(entity ent, float antilag, float recoil, string snd) sound (ent, CHAN_AUTO, "weapons/strength_fire.wav", VOL_BASE, ATTN_NORM); }; +void W_SetupShot(entity ent, float antilag, float recoil, string snd) +{ + W_SetupShot_ProjectileSize(ent, '0 0 0', '0 0 0', antilag, recoil, snd); +} + void LaserTarget_Think() { entity e; diff --git a/data/qcsrc/server/w_crylink.qc b/data/qcsrc/server/w_crylink.qc index 7ce600427..b3b3c6e90 100644 --- a/data/qcsrc/server/w_crylink.qc +++ b/data/qcsrc/server/w_crylink.qc @@ -88,6 +88,7 @@ void W_Crylink_Attack (void) //proj.gravity = 0.001; setorigin (proj, w_shotorg); + setsize(proj, '0 0 0', '0 0 0'); s = '0 0 0'; @@ -151,6 +152,7 @@ void W_Crylink_Attack2 (void) //proj.gravity = 0.001; setorigin (proj, w_shotorg); + setsize(proj, '0 0 0', '0 0 0'); proj.velocity = (w_shotdir + (((counter + 0.5) / shots) * 2 - 1) * v_right * cvar("g_balance_crylink_secondary_spread")) * cvar("g_balance_crylink_secondary_speed"); W_SetupProjectileVelocity(proj); diff --git a/data/qcsrc/server/w_electro.qc b/data/qcsrc/server/w_electro.qc index 852ce0170..2fb259079 100644 --- a/data/qcsrc/server/w_electro.qc +++ b/data/qcsrc/server/w_electro.qc @@ -69,7 +69,7 @@ void W_Electro_Attack() { local entity proj; - W_SetupShot (self, FALSE, 2, "weapons/electro_fire.wav"); + W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', FALSE, 2, "weapons/electro_fire.wav"); pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); @@ -92,6 +92,7 @@ void W_Electro_Attack() W_SetupProjectileVelocity(proj); proj.angles = vectoangles(proj.velocity); proj.touch = W_Plasma_TouchExplode; + setsize(proj, '0 0 -3', '0 0 -3'); proj.flags = FL_PROJECTILE; //sound (proj, CHAN_PAIN, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM); @@ -104,7 +105,7 @@ void W_Electro_Attack2() { local entity proj; - W_SetupShot (self, FALSE, 2, "weapons/electro_fire2.wav"); + W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', FALSE, 2, "weapons/electro_fire2.wav"); w_shotdir = v_forward; // no TrueAim for grenades please pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); diff --git a/data/qcsrc/server/w_grenadelauncher.qc b/data/qcsrc/server/w_grenadelauncher.qc index b5a269ad9..2651ae955 100644 --- a/data/qcsrc/server/w_grenadelauncher.qc +++ b/data/qcsrc/server/w_grenadelauncher.qc @@ -74,7 +74,7 @@ void W_Grenade_Attack (void) if not(self.items & IT_UNLIMITED_WEAPON_AMMO) self.ammo_rockets = self.ammo_rockets - cvar("g_balance_grenadelauncher_primary_ammo"); - W_SetupShot (self, FALSE, 4, "weapons/grenade_fire.wav"); + W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', FALSE, 4, "weapons/grenade_fire.wav"); w_shotdir = v_forward; // no TrueAim for grenades please pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); @@ -88,6 +88,7 @@ void W_Grenade_Attack (void) gren.solid = SOLID_BBOX; gren.projectiledeathtype = WEP_GRENADE_LAUNCHER; setorigin(gren, w_shotorg); + setsize(gren, '0 0 -3', '0 0 -3'); gren.nextthink = time + cvar("g_balance_grenadelauncher_primary_lifetime"); gren.think = adaptor_think2use; @@ -108,7 +109,7 @@ void W_Grenade_Attack2 (void) if not(self.items & IT_UNLIMITED_WEAPON_AMMO) self.ammo_rockets = self.ammo_rockets - cvar("g_balance_grenadelauncher_secondary_ammo"); - W_SetupShot (self, FALSE, 4, "weapons/grenade_fire.wav"); + W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', FALSE, 4, "weapons/grenade_fire.wav"); w_shotdir = v_forward; // no TrueAim for grenades please pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); @@ -121,7 +122,7 @@ void W_Grenade_Attack2 (void) gren.movetype = MOVETYPE_BOUNCE; gren.solid = SOLID_BBOX; gren.projectiledeathtype = WEP_GRENADE_LAUNCHER | HITTYPE_SECONDARY; - setsize(gren, '0 0 -3', '0 0 -3'); // why, just, why? + setsize(gren, '0 0 -3', '0 0 -3'); setorigin(gren, w_shotorg); gren.nextthink = time + cvar("g_balance_grenadelauncher_secondary_lifetime"); diff --git a/data/qcsrc/server/w_hagar.qc b/data/qcsrc/server/w_hagar.qc index 5ed063a7f..4edccccb2 100644 --- a/data/qcsrc/server/w_hagar.qc +++ b/data/qcsrc/server/w_hagar.qc @@ -65,6 +65,7 @@ void W_Hagar_Attack (void) missile.solid = SOLID_BBOX; missile.projectiledeathtype = WEP_HAGAR; setorigin (missile, w_shotorg); + setsize(missile, '0 0 0', '0 0 0'); //missile.takedamage = DAMAGE_YES; //missile.damageforcescale = 4; //missile.health = 10; @@ -104,6 +105,7 @@ void W_Hagar_Attack2 (void) missile.solid = SOLID_BBOX; missile.projectiledeathtype = WEP_HAGAR | HITTYPE_SECONDARY; setorigin (missile, w_shotorg); + setsize(missile, '0 0 0', '0 0 0'); //missile.takedamage = DAMAGE_YES; //missile.damageforcescale = 4; //missile.health = 10; diff --git a/data/qcsrc/server/w_hlac.qc b/data/qcsrc/server/w_hlac.qc index 73e8fe1e2..881dfd04d 100644 --- a/data/qcsrc/server/w_hlac.qc +++ b/data/qcsrc/server/w_hlac.qc @@ -56,6 +56,7 @@ void W_HLAC_Attack (void) missile.solid = SOLID_BBOX; setorigin (missile, w_shotorg); + setsize(missile, '0 0 0', '0 0 0'); missile.velocity = (w_shotdir + randomvec() * spread) * cvar("g_balance_hlac_primary_speed"); @@ -99,6 +100,7 @@ void W_HLAC_Attack2f (void) missile.solid = SOLID_BBOX; setorigin (missile, w_shotorg); + setsize(missile, '0 0 0', '0 0 0'); missile.velocity = (w_shotdir + randomvec() * spread) * cvar("g_balance_hlac_secondary_speed"); diff --git a/data/qcsrc/server/w_hook.qc b/data/qcsrc/server/w_hook.qc index 09d503131..f88a43cac 100644 --- a/data/qcsrc/server/w_hook.qc +++ b/data/qcsrc/server/w_hook.qc @@ -71,6 +71,7 @@ void W_Hook_Attack2() gren.solid = SOLID_BBOX; gren.projectiledeathtype = WEP_HOOK | HITTYPE_SECONDARY; setorigin(gren, w_shotorg); + setsize(gren, '0 0 0', '0 0 0'); gren.nextthink = time + cvar("g_balance_hook_secondary_lifetime"); gren.think = adaptor_think2use; diff --git a/data/qcsrc/server/w_laser.qc b/data/qcsrc/server/w_laser.qc index 14e70493d..c20b29bdf 100644 --- a/data/qcsrc/server/w_laser.qc +++ b/data/qcsrc/server/w_laser.qc @@ -37,6 +37,7 @@ void W_Laser_Attack (float issecondary) missile.projectiledeathtype |= HITTYPE_SECONDARY; setorigin (missile, w_shotorg); + setsize(missile, '0 0 0', '0 0 0'); if (issecondary) missile.velocity = w_shotdir * cvar("g_balance_laser_secondary_speed"); diff --git a/data/qcsrc/server/w_porto.qc b/data/qcsrc/server/w_porto.qc index b4f57caec..849841320 100644 --- a/data/qcsrc/server/w_porto.qc +++ b/data/qcsrc/server/w_porto.qc @@ -174,6 +174,7 @@ void W_Porto_Attack (void) gren.effects = EF_RED; gren.scale = 4; setorigin(gren, w_shotorg); + setsize(gren, '0 0 0', '0 0 0'); gren.nextthink = time + cvar("g_balance_porto_primary_lifetime"); gren.think = W_Porto_Think; diff --git a/data/qcsrc/server/w_rocketlauncher.qc b/data/qcsrc/server/w_rocketlauncher.qc index 38fb00453..88cee8eb7 100644 --- a/data/qcsrc/server/w_rocketlauncher.qc +++ b/data/qcsrc/server/w_rocketlauncher.qc @@ -198,7 +198,7 @@ void W_Rocket_Attack (void) if not(self.items & IT_UNLIMITED_WEAPON_AMMO) self.ammo_rockets = self.ammo_rockets - cvar("g_balance_rocketlauncher_ammo"); - W_SetupShot (self, FALSE, 5, "weapons/rocket_fire.wav"); + W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', FALSE, 5, "weapons/rocket_fire.wav"); pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); missile = spawn (); diff --git a/data/qcsrc/server/w_seeker.qc b/data/qcsrc/server/w_seeker.qc index 1c7b0aec1..24028484c 100644 --- a/data/qcsrc/server/w_seeker.qc +++ b/data/qcsrc/server/w_seeker.qc @@ -160,7 +160,7 @@ void Seeker_Fire_Missile(vector f_diff) self.ammo_rockets = self.ammo_rockets - cvar("g_balance_seeker_missile_ammo"); makevectors(self.v_angle); - W_SetupShot (self, FALSE, 2, "weapons/seeker_fire.wav"); + W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/seeker_fire.wav"); w_shotorg += f_diff; pointparticles(particleeffectnum("seeker_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); @@ -312,7 +312,7 @@ void Seeker_Fire_Tag() if not(self.items & IT_UNLIMITED_WEAPON_AMMO) self.ammo_rockets = self.ammo_rockets - cvar("g_balance_seeker_tag_ammo"); - W_SetupShot (self, FALSE, 2, "weapons/tag_fire.wav"); + W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/tag_fire.wav"); missile = spawn(); missile.owner = self; @@ -331,6 +331,7 @@ void Seeker_Fire_Tag() missile.health = 5; setorigin (missile, w_shotorg); + setsize (missile, '-2 -2 -2', '2 2 2'); missile.flags = FL_PROJECTILE; @@ -385,7 +386,7 @@ void Seeker_Fire_Flac() f_diff = '+1.25 +3.75 0'; break; } - W_SetupShot (self, FALSE, 2, "weapons/flac_fire.wav"); + W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/flac_fire.wav"); w_shotorg += f_diff; pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); @@ -403,6 +404,7 @@ void Seeker_Fire_Flac() missile.scale = 0.4; // BUG: the model is too big missile.projectiledeathtype = WEP_SEEKER; setorigin (missile, w_shotorg); + setsize (missile, '-2 -2 -2', '2 2 2'); missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY; missile.movetype = MOVETYPE_FLY; -- 2.39.2