From a80c5e1f7dc3eb9745971d042d43f27fe080afc4 Mon Sep 17 00:00:00 2001 From: div0 Date: Mon, 7 Sep 2009 05:34:15 +0000 Subject: [PATCH] laser: add a cvar g_balance_laser_*_shotangle to change the angle of the laser shot. Useful e.g. for making laser secondary shoot 90 degrees downwards compared to crosshair direction. git-svn-id: svn://svn.icculus.org/nexuiz/trunk@7677 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_weaponsystem.qc | 11 +++++------ data/qcsrc/server/w_laser.qc | 13 ++++++++++++- data/weapons.cfg | 2 ++ data/weapons25.cfg | 2 ++ data/weaponsHavoc.cfg | 2 ++ 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/data/qcsrc/server/cl_weaponsystem.qc b/data/qcsrc/server/cl_weaponsystem.qc index aa4c2b29b..9b4a3c602 100644 --- a/data/qcsrc/server/cl_weaponsystem.qc +++ b/data/qcsrc/server/cl_weaponsystem.qc @@ -126,7 +126,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_ProjectileSize(entity ent, vector mi, vector ma, float antilag, float recoil, string snd, float maxdamage) +void W_SetupShot_Dir_ProjectileSize(entity ent, vector s_forward, vector mi, vector ma, float antilag, float recoil, string snd, float maxdamage) { float nudge = 1; // added to traceline target and subtracted from result local vector trueaimpoint; @@ -134,7 +134,7 @@ void W_SetupShot_ProjectileSize(entity ent, vector mi, vector ma, float antilag, vector vecs, dv; oldsolid = ent.dphitcontentsmask; ent.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE; - traceline(ent.origin + ent.view_ofs, ent.origin + ent.view_ofs + v_forward * MAX_SHOT_DISTANCE, MOVE_NOMONSTERS, ent); // no antilag needed + traceline(ent.origin + ent.view_ofs, ent.origin + ent.view_ofs + s_forward * MAX_SHOT_DISTANCE, MOVE_NOMONSTERS, ent); // no antilag needed trueaimpoint = trace_endpos; // Track max damage and set the stat to be sent later in g_world.qc @@ -301,10 +301,9 @@ void W_SetupShot_ProjectileSize(entity ent, vector mi, vector ma, float antilag, sound (ent, CHAN_AUTO, "weapons/strength_fire.wav", VOL_BASE, ATTN_NORM); }; -void W_SetupShot(entity ent, float antilag, float recoil, string snd, float maxdamage) -{ - W_SetupShot_ProjectileSize(ent, '0 0 0', '0 0 0', antilag, recoil, snd, maxdamage); -} +#define W_SetupShot_ProjectileSize(ent,mi,ma,antilag,recoil,snd,maxdamage) W_SetupShot_Dir_ProjectileSize(ent, v_forward, mi, ma, antilag, recoil, snd, maxdamage) +#define W_SetupShot_Dir(ent,s_forward,antilag,recoil,snd,maxdamage) W_SetupShot_Dir_ProjectileSize(ent, s_forward, '0 0 0', '0 0 0', antilag, recoil, snd, maxdamage) +#define W_SetupShot(ent,antilag,recoil,snd,maxdamage) W_SetupShot_ProjectileSize(ent, '0 0 0', '0 0 0', antilag, recoil, snd, maxdamage) void LaserTarget_Think() { diff --git a/data/qcsrc/server/w_laser.qc b/data/qcsrc/server/w_laser.qc index a07e322a6..e06f3ecd0 100644 --- a/data/qcsrc/server/w_laser.qc +++ b/data/qcsrc/server/w_laser.qc @@ -16,8 +16,19 @@ void W_Laser_Touch (void) void W_Laser_Attack (float issecondary) { local entity missile; + vector s_forward; + float a; - W_SetupShot (self, FALSE, 3, "weapons/lasergun_fire.wav", cvar("g_balance_laser_secondary_damage")); + if (issecondary) + a = cvar("g_balance_laser_secondary_shotangle"); + else + a = cvar("g_balance_laser_primary_shotangle"); + s_forward = v_forward * cos(a * DEG2RAD) + v_up * sin(a * DEG2RAD); + + if(issecondary) + W_SetupShot_Dir (self, s_forward, FALSE, 3, "weapons/lasergun_fire.wav", cvar("g_balance_laser_secondary_damage")); + else + W_SetupShot_Dir (self, s_forward, FALSE, 3, "weapons/lasergun_fire.wav", cvar("g_balance_laser_primary_damage")); pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); missile = spawn (); diff --git a/data/weapons.cfg b/data/weapons.cfg index d55bff57e..d2b7964c8 100644 --- a/data/weapons.cfg +++ b/data/weapons.cfg @@ -96,6 +96,7 @@ set g_balance_laser_primary_speed 9000 set g_balance_laser_primary_refire 0.3 set g_balance_laser_primary_animtime 0.3 set g_balance_laser_primary_lifetime 30 +set g_balance_laser_primary_shotangle 0 set g_balance_laser_secondary 1 // when 1, a secondary laser mode exists set g_balance_laser_secondary_damage 45 set g_balance_laser_secondary_edgedamage 0 @@ -105,6 +106,7 @@ set g_balance_laser_secondary_speed 9000 set g_balance_laser_secondary_refire 1 set g_balance_laser_secondary_animtime 0.3 set g_balance_laser_secondary_lifetime 30 +set g_balance_laser_secondary_shotangle 0 set g_balance_shotgun_primary_bullets 21 set g_balance_shotgun_primary_damage 5 diff --git a/data/weapons25.cfg b/data/weapons25.cfg index ba3554eca..60fbe6bd2 100644 --- a/data/weapons25.cfg +++ b/data/weapons25.cfg @@ -96,6 +96,7 @@ set g_balance_laser_primary_speed 9000 set g_balance_laser_primary_refire 0.7 set g_balance_laser_primary_animtime 0.3 set g_balance_laser_primary_lifetime 30 +set g_balance_laser_primary_shotangle 0 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists set g_balance_laser_secondary_damage 35 set g_balance_laser_secondary_edgedamage 10 @@ -105,6 +106,7 @@ set g_balance_laser_secondary_speed 9000 set g_balance_laser_secondary_refire 0.7 set g_balance_laser_secondary_animtime 0.3 set g_balance_laser_secondary_lifetime 30 +set g_balance_laser_secondary_shotangle 0 set g_balance_shotgun_primary_bullets 6 set g_balance_shotgun_primary_damage 12 diff --git a/data/weaponsHavoc.cfg b/data/weaponsHavoc.cfg index 95c0a7901..07fbffcb6 100644 --- a/data/weaponsHavoc.cfg +++ b/data/weaponsHavoc.cfg @@ -91,6 +91,7 @@ set g_balance_laser_primary_speed 9000 set g_balance_laser_primary_refire 0.3 set g_balance_laser_primary_animtime 0.3 set g_balance_laser_primary_lifetime 30 +set g_balance_laser_primary_shotangle 0 set g_balance_laser_secondary 1 // when 1, a secondary laser mode exists set g_balance_laser_secondary_damage 45 set g_balance_laser_secondary_edgedamage 0 @@ -100,6 +101,7 @@ set g_balance_laser_secondary_speed 9000 set g_balance_laser_secondary_refire 1 set g_balance_laser_secondary_animtime 0.3 set g_balance_laser_secondary_lifetime 30 +set g_balance_laser_secondary_shotangle 0 set g_balance_shotgun_primary_bullets 21 set g_balance_shotgun_primary_damage 6 -- 2.39.2