X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fweapons%2Fprojectile.qc;h=efa6509c7060e2085458923b33e668e0d2e4fc39;hb=125d619e9ab2a307b15b7ee1a2ededed32c7e84d;hp=58bd11ee43c6bdbf78cdb9c13330b841a6243ea9;hpb=e449f70197479ad384431f4cd1a23d994a8eb928;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/weapons/projectile.qc b/qcsrc/client/weapons/projectile.qc index 58bd11ee4..efa6509c7 100644 --- a/qcsrc/client/weapons/projectile.qc +++ b/qcsrc/client/weapons/projectile.qc @@ -1,8 +1,21 @@ -.vector iorigin1, iorigin2; -.float spawntime; -.vector trail_oldorigin; -.float trail_oldtime; -.float fade_time, fade_rate; +#include "projectile.qh" + +#include "../autocvars.qh" +#include "../defs.qh" +#include "../main.qh" + +#include "../../common/constants.qh" +#include "../../common/nades.qh" +#include "../../common/movetypes/movetypes.qh" +#include "../../common/util.qh" + +#include "../../csqcmodellib/interpolate.qh" + +#include "../../warpzonelib/anglestransform.qh" + +.float alpha; +.float scale; +.vector colormod; void SUB_Stop() { @@ -10,13 +23,6 @@ void SUB_Stop() self.move_movetype = MOVETYPE_NONE; } -.float alphamod; -.float count; // set if clientside projectile -.float cnt; // sound index -.float gravity; -.float snd_looping; -.float silent; - void Projectile_ResetTrail(vector to) { self.trail_oldorigin = to; @@ -36,7 +42,7 @@ void Projectile_DrawTrail(vector to) // force the effect even for stationary firemine if(self.cnt == PROJECTILE_FIREMINE) if(from == to) - from_z += 1; + from.z += 1; if (self.traileffect) { @@ -49,8 +55,8 @@ void Projectile_Draw() { vector rot; vector trailorigin; - float f; - float drawn; + int f; + bool drawn; float t; float a; @@ -116,7 +122,7 @@ void Projectile_Draw() vector ang; ang = self.angles; - ang_x = -ang_x; + ang.x = -ang.x; makevectors(ang); a = 1 - (time - self.fade_time) * self.fade_rate; @@ -159,7 +165,7 @@ void Projectile_Draw() self.drawmask = MASK_NORMAL; } -void loopsound(entity e, float ch, string samp, float vol, float attn) +void loopsound(entity e, int ch, string samp, float vol, float attn) { if(self.silent) return; @@ -179,7 +185,7 @@ void Ent_RemoveProjectile() void Ent_Projectile() { - float f; + int f; // projectile properties: // kind (interpolated, or clientside) @@ -309,6 +315,8 @@ void Ent_Projectile() case PROJECTILE_BUMBLE_GUN: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break; case PROJECTILE_BUMBLE_BEAM: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break; + case PROJECTILE_RPC: setmodel(self, "models/weapons/ok_rocket.md3");self.traileffect = particleeffectnum("TR_ROCKET"); break; + default: if(Nade_IDFromProjectile(self.cnt) != 0) { setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum(Nade_TrailEffect(self.cnt, self.team)); break; } error("Received invalid CSQC projectile, can't work with this!"); @@ -334,6 +342,7 @@ void Ent_Projectile() self.move_bounce_factor = g_balance_electro_secondary_bouncefactor; self.move_bounce_stopspeed = g_balance_electro_secondary_bouncestop; break; + case PROJECTILE_RPC: case PROJECTILE_ROCKET: loopsound(self, CH_SHOTS_SINGLE, "weapons/rocket_fly.wav", VOL_BASE, ATTEN_NORM); self.mins = '-3 -3 -3'; @@ -348,8 +357,8 @@ void Ent_Projectile() self.maxs = '3 3 3'; self.move_movetype = MOVETYPE_BOUNCE; self.move_touch = func_null; - self.move_bounce_factor = g_balance_grenadelauncher_bouncefactor; - self.move_bounce_stopspeed = g_balance_grenadelauncher_bouncestop; + self.move_bounce_factor = g_balance_mortar_bouncefactor; + self.move_bounce_stopspeed = g_balance_mortar_bouncestop; break; case PROJECTILE_SHAMBLER_LIGHTNING: self.mins = '-8 -8 -8'; @@ -441,17 +450,19 @@ void Ent_Projectile() if(Nade_IDFromProjectile(self.cnt) != 0) { + int nade_type = Nade_IDFromProjectile(self.cnt); self.mins = '-16 -16 -16'; self.maxs = '16 16 16'; - self.colormod = Nade_Color(Nade_IDFromProjectile(self.cnt)); - self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP; + self.colormod = Nade_Color(nade_type); self.move_movetype = MOVETYPE_BOUNCE; self.move_touch = func_null; self.scale = 1.5; self.avelocity = randomvec() * 720; - - if(Nade_IDFromProjectile(self.cnt) == NADE_TYPE_TRANSLOCATE) - self.solid = SOLID_TRIGGER; + + if(nade_type == NADE_TYPE_TRANSLOCATE || nade_type == NADE_TYPE_SPAWN) + self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP; + else + self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY; } setsize(self, self.mins, self.maxs); @@ -475,6 +486,7 @@ void Ent_Projectile() if(!(self.count & 0x80)) InterpolateOrigin_Note(); + self.classname = "csqcprojectile"; self.draw = Projectile_Draw; self.entremove = Ent_RemoveProjectile; } @@ -495,6 +507,7 @@ void Projectile_Precache() precache_model("models/sphere/sphere.md3"); precache_model("models/weapons/v_ok_grenade.md3"); + precache_model("models/weapons/ok_rocket.md3"); precache_sound("weapons/electro_fly.wav"); precache_sound("weapons/rocket_fly.wav");