From 29f46d5e99c11e85b12103b7f0abe140901fc304 Mon Sep 17 00:00:00 2001 From: lordhavoc Date: Tue, 22 May 2007 09:20:24 +0000 Subject: [PATCH] fix W_SetupShot calls to not have any start points outside player box, even at odd angles git-svn-id: svn://svn.icculus.org/nexuiz/trunk@2653 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/extensions.qh | 12 ++++++++++++ data/qcsrc/server/g_hook.qc | 2 +- data/qcsrc/server/miscfunctions.qc | 20 ++++++++++++++++++++ data/qcsrc/server/w_crylink.qc | 7 +++---- data/qcsrc/server/w_electro.qc | 4 ++-- data/qcsrc/server/w_grenadelauncher.qc | 4 ++-- data/qcsrc/server/w_hagar.qc | 4 ++-- data/qcsrc/server/w_laser.qc | 2 +- data/qcsrc/server/w_nex.qc | 2 +- data/qcsrc/server/w_rocketlauncher.qc | 4 ++-- data/qcsrc/server/w_shotgun.qc | 4 ++-- data/qcsrc/server/w_uzi.qc | 2 +- 12 files changed, 49 insertions(+), 18 deletions(-) diff --git a/data/qcsrc/server/extensions.qh b/data/qcsrc/server/extensions.qh index 06ca8ca8d..9718a9e77 100644 --- a/data/qcsrc/server/extensions.qh +++ b/data/qcsrc/server/extensions.qh @@ -1000,6 +1000,18 @@ void(vector org, string modelname, float startframe, float endframe, float frame //description: //.movement vector contains the movement input from the player, allowing QC to do as it wishs with the input, and SV_PlayerPhysics will completely replace the player physics if present (works for all MOVETYPE's), see darkplaces mod source for example of this function (in playermovement.qc, adds HalfLife ladders support, as well as acceleration/deceleration while airborn (rather than the quake sudden-stop while airborn), and simplifies the physics a bit) +//DP_SV_POINTPARTICLES +//idea: Spike +//darkplaces implementation: LordHavoc +//function definitions: +float(string effectname) particleeffectnum = #335; // same as in CSQC +void(entity ent, float effectnum, vector start, vector end) trailparticles = #336; // same as in CSQC +void(float effectnum, vector org, vector vel, float howmany) pointparticles = #337; // same as in CSQC +//description: +//provides the ability to spawn non-standard particle effects, typically these are defined in a particle effect information file such as effectinfo.txt in darkplaces. +//this is a port of particle effect features from clientside QC (EXT_CSQC) to server QC, as these effects are potentially useful to all games even if they do not make use of EXT_CSQC. +//warning: server must have same order of effects in effectinfo.txt as client does or the numbers would not match up, except for standard quake effects which are always the same numbers. + //DP_SV_PRINT //idea: id Software (QuakeWorld Server) //darkplaces implementation: Black, LordHavoc diff --git a/data/qcsrc/server/g_hook.qc b/data/qcsrc/server/g_hook.qc index 3ae70bbac..e37f1fd1b 100644 --- a/data/qcsrc/server/g_hook.qc +++ b/data/qcsrc/server/g_hook.qc @@ -215,7 +215,7 @@ void FireGrapplingHook (void) makevectors(self.v_angle); sound (self, CHAN_WEAPON, "weapons/hook_fire.wav", 1, ATTN_NORM); - org = self.origin + self.view_ofs + v_forward * 15 - v_right * 5 + v_up * -12; + org = self.origin + self.view_ofs + v_forward * 8 - v_right * 8 + '0 0 -12'; te_customflash(org, 160, 0.2, '1 0 0'); missile = spawn (); diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 7996096d2..946786be3 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -678,6 +678,16 @@ string playername(entity p) return p.netname; } +vector(vector m1, vector m2) randompos = +{ + local vector v; + m2 = m2 - m1; + v_x = m2_x * random() + m1_x; + v_y = m2_y * random() + m1_y; + v_z = m2_z * random() + m1_z; + return v; +}; + // requires that m2>m1 in all coordinates, and that m4>m3 float(vector m1, vector m2, vector m3, vector m4) boxesoverlap = {return m2_x >= m3_x && m1_x <= m4_x && m2_y >= m3_y && m1_y <= m4_y && m2_z >= m3_z && m1_z <= m4_z;}; @@ -877,3 +887,13 @@ void play2(entity e, string filename) { stuffcmd(e, strcat("play2 ", filename, "\n")); } + +void play2team(float t, string filename) +{ + local entity head; + FOR_EACH_REALPLAYER(head) + { + if (head.team == t) + play2(head, filename); + } +} diff --git a/data/qcsrc/server/w_crylink.qc b/data/qcsrc/server/w_crylink.qc index b7d2680d6..c9f606084 100644 --- a/data/qcsrc/server/w_crylink.qc +++ b/data/qcsrc/server/w_crylink.qc @@ -75,7 +75,7 @@ void W_Crylink_Attack (void) if (cvar("g_use_ammunition")) self.ammo_cells = self.ammo_cells - cvar("g_balance_crylink_primary_ammo"); - W_SetupShot (self, '15 8 -8', FALSE, 2, "weapons/crylink_fire.wav"); + W_SetupShot (self, '11 8 -8', FALSE, 2, "weapons/crylink_fire.wav"); te_smallflash(w_shotorg); shots = cvar("g_balance_crylink_primary_shots"); @@ -120,7 +120,7 @@ void W_Crylink_Attack2 (void) if (cvar("g_use_ammunition")) self.ammo_cells = self.ammo_cells - cvar("g_balance_crylink_secondary_ammo"); - W_SetupShot (self, '15 8 -8', FALSE, 2, "weapons/crylink_fire.wav"); + W_SetupShot (self, '11 8 -8', FALSE, 2, "weapons/crylink_fire.wav"); te_smallflash(w_shotorg); shots = cvar("g_balance_crylink_secondary_shots"); @@ -164,8 +164,7 @@ void W_Crylink_Attack3 (void) { if (cvar("g_use_ammunition")) self.ammo_cells = self.ammo_cells - cvar("g_balance_crylink_primary_ammo"); - //W_SetupShot(self, '10 5 -14', TRUE, 0, "weapons/crylink_fire.wav"); - W_SetupShot (self, '15 7 -8', TRUE, 0, "weapons/crylink_fire.wav"); + W_SetupShot (self, '11 8 -8', TRUE, 0, "weapons/crylink_fire.wav"); // use traceline_hitcorpse to make sure it can hit gibs and corpses too traceline_hitcorpse(self, w_shotorg, w_shotorg + w_shotdir * 1000, FALSE, self); diff --git a/data/qcsrc/server/w_electro.qc b/data/qcsrc/server/w_electro.qc index 920a4474c..968ccbfc0 100644 --- a/data/qcsrc/server/w_electro.qc +++ b/data/qcsrc/server/w_electro.qc @@ -86,7 +86,7 @@ void() W_Electro_Attack { local entity proj; - W_SetupShot (self, '15 8 -8', FALSE, 2, "weapons/electro_fire.wav"); + W_SetupShot (self, '11 8 -8', FALSE, 2, "weapons/electro_fire.wav"); proj = spawn (); proj.classname = "plasma_prim"; @@ -118,7 +118,7 @@ void() W_Electro_Attack2 { local entity proj; - W_SetupShot (self, '15 8 -8', FALSE, 2, "weapons/electro_fire2.wav"); + W_SetupShot (self, '11 8 -8', FALSE, 2, "weapons/electro_fire2.wav"); proj = spawn (); proj.classname = "plasma"; diff --git a/data/qcsrc/server/w_grenadelauncher.qc b/data/qcsrc/server/w_grenadelauncher.qc index 249ed9ac2..de83dcaf1 100644 --- a/data/qcsrc/server/w_grenadelauncher.qc +++ b/data/qcsrc/server/w_grenadelauncher.qc @@ -81,7 +81,7 @@ void W_Grenade_Attack (void) if (cvar("g_use_ammunition")) self.ammo_rockets = self.ammo_rockets - cvar("g_balance_grenadelauncher_primary_ammo"); - W_SetupShot (self, '15 8 -8', FALSE, 4, "weapons/grenade_fire.wav"); + W_SetupShot (self, '11 8 -8', FALSE, 4, "weapons/grenade_fire.wav"); gren = spawn (); gren.owner = self; @@ -112,7 +112,7 @@ void W_Grenade_Attack2 (void) if (cvar("g_use_ammunition")) self.ammo_rockets = self.ammo_rockets - cvar("g_balance_grenadelauncher_secondary_ammo"); - W_SetupShot (self, '15 8 -8', FALSE, 4, "weapons/grenade_fire.wav"); + W_SetupShot (self, '11 8 -8', FALSE, 4, "weapons/grenade_fire.wav"); gren = spawn (); gren.owner = self; diff --git a/data/qcsrc/server/w_hagar.qc b/data/qcsrc/server/w_hagar.qc index e8d1ba827..4b9fb4c3e 100644 --- a/data/qcsrc/server/w_hagar.qc +++ b/data/qcsrc/server/w_hagar.qc @@ -81,7 +81,7 @@ void W_Hagar_Attack (void) if (cvar("g_use_ammunition")) self.ammo_rockets = self.ammo_rockets - cvar("g_balance_hagar_primary_ammo"); - W_SetupShot (self, '15 5 -8', FALSE, 2, "weapons/hagar_fire.wav"); + W_SetupShot (self, '11 5 -8', FALSE, 2, "weapons/hagar_fire.wav"); missile = spawn (); missile.owner = self; @@ -116,7 +116,7 @@ void W_Hagar_Attack2 (void) if (cvar("g_use_ammunition")) self.ammo_rockets = self.ammo_rockets - cvar("g_balance_hagar_secondary_ammo"); - W_SetupShot (self, '15 5 -8', FALSE, 2, "weapons/hagar_fire.wav"); + W_SetupShot (self, '11 5 -8', FALSE, 2, "weapons/hagar_fire.wav"); missile = spawn (); missile.owner = self; diff --git a/data/qcsrc/server/w_laser.qc b/data/qcsrc/server/w_laser.qc index a73b6e857..0f1fd6a7e 100644 --- a/data/qcsrc/server/w_laser.qc +++ b/data/qcsrc/server/w_laser.qc @@ -34,7 +34,7 @@ void W_Laser_Attack (float issecondary) { local entity missile; - W_SetupShot (self, '15 8 -8', FALSE, 3, "weapons/lasergun_fire.wav"); + W_SetupShot (self, '11 8 -8', FALSE, 3, "weapons/lasergun_fire.wav"); //te_customflash(w_shotorg, 160, 0.2, '1 0 0'); missile = spawn (); diff --git a/data/qcsrc/server/w_nex.qc b/data/qcsrc/server/w_nex.qc index 348ff4510..58eef3876 100644 --- a/data/qcsrc/server/w_nex.qc +++ b/data/qcsrc/server/w_nex.qc @@ -2,7 +2,7 @@ void W_Nex_Attack (void) { //w_shotorg = self.origin + self.view_ofs + v_forward * 5 + v_right * 14 + v_up * -7; - W_SetupShot(self, '5 14 -8', TRUE, 5, "weapons/nexfire.wav"); + W_SetupShot (self, '5 14 -8', TRUE, 5, "weapons/nexfire.wav"); // assure that nexdamage is high enough in minstagib if (cvar("g_minstagib")) diff --git a/data/qcsrc/server/w_rocketlauncher.qc b/data/qcsrc/server/w_rocketlauncher.qc index 2f175f506..b3b136fae 100644 --- a/data/qcsrc/server/w_rocketlauncher.qc +++ b/data/qcsrc/server/w_rocketlauncher.qc @@ -204,7 +204,7 @@ void W_Rocket_Attack (void) if (cvar("g_use_ammunition") && !cvar("g_rocketarena")) self.ammo_rockets = self.ammo_rockets - cvar("g_balance_rocketlauncher_ammo"); - W_SetupShot (self, '15 3 -8', FALSE, 5, "weapons/rocket_fire.wav"); + W_SetupShot (self, '8 3 -8', FALSE, 5, "weapons/rocket_fire.wav"); te_smallflash(w_shotorg); missile = spawn (); @@ -222,7 +222,7 @@ void W_Rocket_Attack (void) missile.movetype = MOVETYPE_FLY; missile.solid = SOLID_BBOX; setmodel (missile, "models/rocket.md3"); // precision set below - setsize (missile, '0 0 0', '0 0 0'); + setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot setorigin (missile, w_shotorg); if(cvar("g_laserguided_missile") && self.laser_on) diff --git a/data/qcsrc/server/w_shotgun.qc b/data/qcsrc/server/w_shotgun.qc index 3ee1a02d7..439d8e0c3 100644 --- a/data/qcsrc/server/w_shotgun.qc +++ b/data/qcsrc/server/w_shotgun.qc @@ -12,7 +12,7 @@ void W_Shotgun_Attack (void) f = cvar("g_balance_shotgun_primary_force"); spread = cvar("g_balance_shotgun_primary_spread"); - W_SetupShot (self, '15 8 -8', TRUE, 5, "weapons/shotgun_fire.wav"); + W_SetupShot (self, '11 8 -8', TRUE, 5, "weapons/shotgun_fire.wav"); for (sc = 0;sc < bullets;sc = sc + 1) fireBullet (w_shotorg, w_shotdir, spread, d, f, IT_SHOTGUN, sc < 3); if (cvar("g_use_ammunition")) @@ -39,7 +39,7 @@ void W_Shotgun_Attack2 (void) f = cvar("g_balance_shotgun_secondary_force"); spread = cvar("g_balance_shotgun_secondary_spread"); - W_SetupShot (self, '15 8 -8', TRUE, 5, "weapons/shotgun_fire.wav"); + W_SetupShot (self, '11 8 -8', TRUE, 5, "weapons/shotgun_fire.wav"); for (sc = 0;sc < bullets;sc = sc + 1) fireBullet (w_shotorg, w_shotdir, spread, d, f, IT_SHOTGUN, sc < 3); if (cvar("g_use_ammunition")) diff --git a/data/qcsrc/server/w_uzi.qc b/data/qcsrc/server/w_uzi.qc index 1537f256d..5a13e3fe6 100644 --- a/data/qcsrc/server/w_uzi.qc +++ b/data/qcsrc/server/w_uzi.qc @@ -10,7 +10,7 @@ void W_Uzi_Attack (void) else self.ammo_nails = self.ammo_nails - cvar("g_balance_uzi_sustained_ammo"); } - W_SetupShot (self, '15 5.5 -8', TRUE, 0, "weapons/uzi_fire.wav"); + W_SetupShot (self, '11 5.5 -8', TRUE, 0, "weapons/uzi_fire.wav"); if (!cvar("g_norecoil")) { self.punchangle_x = random () - 0.5; -- 2.39.2