X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fweapons%2Fprojectile.qc;h=4e457dabab9bcf24f2dbe4338b29d9e8c0e5e6bc;hb=ac7deb97b1a0e73ceea4684be73e72912fb3f1aa;hp=4015828e555fc6a41db87329254197072e3d9d58;hpb=a4bcbda7a1eb2367fae1c2514d474d426803a673;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/weapons/projectile.qc b/qcsrc/client/weapons/projectile.qc index 4015828e5..4e457daba 100644 --- a/qcsrc/client/weapons/projectile.qc +++ b/qcsrc/client/weapons/projectile.qc @@ -1,15 +1,13 @@ #include "projectile.qh" -#include "../autocvars.qh" -#include "../defs.qh" -#include "../main.qh" -#include "../mutators/events.qh" - +#include #include +#include +#include +#include +#include #include - #include - #include .float alpha; @@ -19,7 +17,7 @@ void SUB_Stop(entity this, entity toucher) { this.velocity = this.avelocity = '0 0 0'; - this.move_movetype = MOVETYPE_NONE; + set_movetype(this, MOVETYPE_NONE); } void Projectile_ResetTrail(entity this, vector to) @@ -43,12 +41,11 @@ void Projectile_DrawTrail(entity this, vector to) if (this.traileffect) { particles_alphamin = particles_alphamax = particles_fade = sqrt(this.alpha); - boxparticles(particleeffectnum(Effects_from(this.traileffect)), this, from, to, this.velocity, this.velocity, 1, PARTICLES_USEALPHA | PARTICLES_USEFADE | PARTICLES_DRAWASTRAIL); + entity eff = REGISTRY_GET(Effects, this.traileffect); + boxparticles(particleeffectnum(eff), this, from, to, this.velocity, this.velocity, 1, PARTICLES_USEALPHA | PARTICLES_USEFADE | PARTICLES_DRAWASTRAIL); } } -bool Projectile_isnade(int proj); // TODO: remove - void Projectile_Draw(entity this) { vector rot; @@ -108,6 +105,9 @@ void Projectile_Draw(entity this) case PROJECTILE_HOOKBOMB: rot = '1000 0 0'; // forward break; + case PROJECTILE_ROCKET: + rot = '0 0 720'; // spinning + break; default: break; } @@ -163,13 +163,13 @@ void Projectile_Draw(entity this) this.drawmask = MASK_NORMAL; } -void loopsound(entity e, int ch, string samp, float vol, float attn) +void loopsound(entity e, int ch, Sound samp, float vol, float attn) { - TC(int, ch); + TC(int, ch); if (e.silent) return; - _sound(e, ch, samp, vol, attn); + sound(e, ch, samp, vol, attn); e.snd_looping = ch; } @@ -230,15 +230,11 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) if (f & 1) { - this.origin_x = ReadCoord(); - this.origin_y = ReadCoord(); - this.origin_z = ReadCoord(); + this.origin = ReadVector(); setorigin(this, this.origin); if (this.count & 0x80) { - this.velocity_x = ReadCoord(); - this.velocity_y = ReadCoord(); - this.velocity_z = ReadCoord(); + this.velocity = ReadVector(); if (f & 0x10) this.gravity = ReadCoord(); else @@ -263,7 +259,26 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) this.fade_rate = 0; } - this.team = ReadByte() - 1; + int proj_team = ReadByte(); + this.team = proj_team - 1; + + if(teamplay) + { + if(proj_team) + this.colormap = (this.team) * 0x11; // note: team - 1 on server (client uses different numbers) + else + this.colormap = 0x00; + this.colormap |= BIT(10); // RENDER_COLORMAPPED + } + else + this.colormap = proj_team; + // TODO: projectiles use glowmaps for their color, not teams + #if 0 + if(this.colormap > 0) + this.glowmod = colormapPaletteColor(this.colormap & 0x0F, true) * 2; + else + this.glowmod = '1 1 1'; + #endif } if (f & 2) @@ -287,7 +302,7 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) HANDLE(GRENADE_BOUNCING) this.traileffect = EFFECT_TR_GRENADE.m_id; break; HANDLE(MINE) this.traileffect = EFFECT_TR_GRENADE.m_id; break; HANDLE(BLASTER) this.traileffect = EFFECT_Null.m_id; break; - HANDLE(ARC_BOLT) this.traileffect = EFFECT_Null.m_id; break; + HANDLE(ARC_BOLT) this.traileffect = EFFECT_TR_WIZSPIKE.m_id; break; HANDLE(HLAC) this.traileffect = EFFECT_Null.m_id; break; HANDLE(PORTO_RED) this.traileffect = EFFECT_TR_WIZSPIKE.m_id; this.scale = 4; break; HANDLE(PORTO_BLUE) this.traileffect = EFFECT_TR_WIZSPIKE.m_id; this.scale = 4; break; @@ -330,24 +345,24 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) this.maxs = '0 0 0'; this.colormod = '0 0 0'; settouch(this, SUB_Stop); - this.move_movetype = MOVETYPE_TOSS; + set_movetype(this, MOVETYPE_TOSS); this.alphamod = 1; switch (this.cnt) { case PROJECTILE_ELECTRO: // only new engines support sound moving with object - loopsound(this, CH_SHOTS_SINGLE, SND(ELECTRO_FLY), VOL_BASE, ATTEN_NORM); + loopsound(this, CH_SHOTS_SINGLE, SND_ELECTRO_FLY, VOL_BASE, ATTEN_NORM); this.mins = '-4 -4 -4'; this.maxs = '4 4 4'; - this.move_movetype = MOVETYPE_BOUNCE; + set_movetype(this, MOVETYPE_BOUNCE); settouch(this, func_null); this.bouncefactor = WEP_CVAR_SEC(electro, bouncefactor); this.bouncestop = WEP_CVAR_SEC(electro, bouncestop); break; case PROJECTILE_RPC: case PROJECTILE_ROCKET: - loopsound(this, CH_SHOTS_SINGLE, SND(ROCKET_FLY), VOL_BASE, ATTEN_NORM); + loopsound(this, CH_SHOTS_SINGLE, SND_ROCKET_FLY, VOL_BASE, ATTEN_NORM); this.mins = '-3 -3 -3'; this.maxs = '3 3 3'; break; @@ -358,7 +373,7 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) case PROJECTILE_GRENADE_BOUNCING: this.mins = '-3 -3 -3'; this.maxs = '3 3 3'; - this.move_movetype = MOVETYPE_BOUNCE; + set_movetype(this, MOVETYPE_BOUNCE); settouch(this, func_null); this.bouncefactor = WEP_CVAR(mortar, bouncefactor); this.bouncestop = WEP_CVAR(mortar, bouncestop); @@ -376,31 +391,31 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) case PROJECTILE_PORTO_RED: this.colormod = '2 1 1'; this.alphamod = 0.5; - this.move_movetype = MOVETYPE_BOUNCE; + set_movetype(this, MOVETYPE_BOUNCE); settouch(this, func_null); break; case PROJECTILE_PORTO_BLUE: this.colormod = '1 1 2'; this.alphamod = 0.5; - this.move_movetype = MOVETYPE_BOUNCE; + set_movetype(this, MOVETYPE_BOUNCE); settouch(this, func_null); break; case PROJECTILE_HAGAR_BOUNCING: - this.move_movetype = MOVETYPE_BOUNCE; + set_movetype(this, MOVETYPE_BOUNCE); settouch(this, func_null); break; case PROJECTILE_CRYLINK_BOUNCING: - this.move_movetype = MOVETYPE_BOUNCE; + set_movetype(this, MOVETYPE_BOUNCE); settouch(this, func_null); break; case PROJECTILE_FIREBALL: - loopsound(this, CH_SHOTS_SINGLE, SND(FIREBALL_FLY2), VOL_BASE, ATTEN_NORM); + loopsound(this, CH_SHOTS_SINGLE, SND_FIREBALL_FLY2, VOL_BASE, ATTEN_NORM); this.mins = '-16 -16 -16'; this.maxs = '16 16 16'; break; case PROJECTILE_FIREMINE: - loopsound(this, CH_SHOTS_SINGLE, SND(FIREBALL_FLY), VOL_BASE, ATTEN_NORM); - this.move_movetype = MOVETYPE_BOUNCE; + loopsound(this, CH_SHOTS_SINGLE, SND_FIREBALL_FLY, VOL_BASE, ATTEN_NORM); + set_movetype(this, MOVETYPE_BOUNCE); settouch(this, func_null); this.mins = '-4 -4 -4'; this.maxs = '4 4 4'; @@ -414,10 +429,14 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) this.maxs = '2 2 2'; break; case PROJECTILE_SEEKER: - loopsound(this, CH_SHOTS_SINGLE, SND(TAG_ROCKET_FLY), VOL_BASE, ATTEN_NORM); + loopsound(this, CH_SHOTS_SINGLE, SND_TAG_ROCKET_FLY, VOL_BASE, ATTEN_NORM); this.mins = '-4 -4 -4'; this.maxs = '4 4 4'; break; + case PROJECTILE_ARC_BOLT: + set_movetype(this, MOVETYPE_BOUNCE); + settouch(this, func_null); + break; case PROJECTILE_RAPTORBOMB: this.mins = '-3 -3 -3'; this.maxs = '3 3 3'; @@ -427,17 +446,17 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) case PROJECTILE_RAPTORCANNON: break; case PROJECTILE_SPIDERROCKET: - loopsound(this, CH_SHOTS_SINGLE, SND(TAG_ROCKET_FLY), VOL_BASE, ATTEN_NORM); + loopsound(this, CH_SHOTS_SINGLE, SND_TAG_ROCKET_FLY, VOL_BASE, ATTEN_NORM); break; case PROJECTILE_WAKIROCKET: - loopsound(this, CH_SHOTS_SINGLE, SND(TAG_ROCKET_FLY), VOL_BASE, ATTEN_NORM); + loopsound(this, CH_SHOTS_SINGLE, SND_TAG_ROCKET_FLY, VOL_BASE, ATTEN_NORM); break; /* case PROJECTILE_WAKICANNON: break; case PROJECTILE_BUMBLE_GUN: // only new engines support sound moving with object - loopsound(this, CH_SHOTS_SINGLE, SND(ELECTRO_FLY), VOL_BASE, ATTEN_NORM); + loopsound(this, CH_SHOTS_SINGLE, SND_ELECTRO_FLY, VOL_BASE, ATTEN_NORM); this.mins = '0 0 -4'; this.maxs = '0 0 -4'; this.move_movetype = MOVETYPE_BOUNCE; @@ -460,22 +479,21 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) if (this.gravity) { if (this.move_movetype == MOVETYPE_FLY) - this.move_movetype = MOVETYPE_TOSS; + set_movetype(this, MOVETYPE_TOSS); if (this.move_movetype == MOVETYPE_BOUNCEMISSILE) - this.move_movetype = MOVETYPE_BOUNCE; + set_movetype(this, MOVETYPE_BOUNCE); } else { if (this.move_movetype == MOVETYPE_TOSS) - this.move_movetype = MOVETYPE_FLY; + set_movetype(this, MOVETYPE_FLY); if (this.move_movetype == MOVETYPE_BOUNCE) - this.move_movetype = MOVETYPE_BOUNCEMISSILE; + set_movetype(this, MOVETYPE_BOUNCEMISSILE); } if (!(this.count & 0x80)) InterpolateOrigin_Note(this); - this.classname = "csqcprojectile"; this.draw = Projectile_Draw; if (isnew) IL_PUSH(g_drawables, this); this.entremove = Ent_RemoveProjectile;