X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fweapons%2Fprojectile.qc;h=1df65036ec59a83b10feeba19544c818ee939e9a;hp=cb5b4240c956795910a50596ee69fbd21e30b0e0;hb=561489d21c9053b7103c6604c362aa24ee5c7916;hpb=5ea8bccb50ca76ead04bde011b2f64bb6afa7286 diff --git a/qcsrc/client/weapons/projectile.qc b/qcsrc/client/weapons/projectile.qc index cb5b4240c..1df65036e 100644 --- a/qcsrc/client/weapons/projectile.qc +++ b/qcsrc/client/weapons/projectile.qc @@ -1,19 +1,13 @@ #include "projectile.qh" -#include "../autocvars.qh" -#include "../main.qh" #include - #include -#include #include +#include +#include #include #include - -#include - #include - #include .float alpha; @@ -94,17 +88,14 @@ void Projectile_Draw(entity this) drawn = (this.iflags & IFLAG_VALID); t = time; } + bool is_nade = Projectile_isnade(this.cnt); if (!(f & FL_ONGROUND)) { rot = '0 0 0'; - switch (this.cnt) + if (is_nade) rot = this.avelocity; + else switch (this.cnt) { - /* - case PROJECTILE_GRENADE: - rot = '-2000 0 0'; // forward - break; - */ case PROJECTILE_GRENADE_BOUNCING: rot = '0 -1000 0'; // sideways break; @@ -114,41 +105,45 @@ void Projectile_Draw(entity this) case PROJECTILE_ROCKET: rot = '0 0 720'; // spinning break; - default: - break; } - if (Projectile_isnade(this.cnt)) - rot = this.avelocity; - - this.angles = AnglesTransform_ToAngles(AnglesTransform_Multiply(AnglesTransform_FromAngles(this.angles), rot * (t - this.spawntime))); + if (rot) + { + if (!rot.x && !rot.y) + { + // cheaper z-only rotation formula + this.angles.z = (rot.z * (t - this.spawntime)) % 360; + if (this.angles.z < 0) + this.angles.z += 360; + } + else + this.angles = AnglesTransform_ToAngles(AnglesTransform_Multiply(AnglesTransform_FromAngles(this.angles), rot * (t - this.spawntime))); + } } - vector ang; - ang = this.angles; - ang.x = -ang.x; - makevectors(ang); - a = 1 - (time - this.fade_time) * this.fade_rate; this.alpha = bound(0, this.alphamod * a, 1); if (this.alpha <= 0) drawn = 0; this.renderflags = 0; + vector ang = this.angles; + ang.x = -ang.x; trailorigin = this.origin; - switch (this.cnt) + if (is_nade) + { + makevectors(ang); + trailorigin += v_up * 4; + } + else switch (this.cnt) { case PROJECTILE_GRENADE: case PROJECTILE_GRENADE_BOUNCING: + makevectors(ang); trailorigin += v_right * 1 + v_forward * -10; break; - default: - break; } - if (Projectile_isnade(this.cnt)) - trailorigin += v_up * 4; - if (drawn) Projectile_DrawTrail(this, trailorigin); else @@ -281,7 +276,7 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) // TODO: projectiles use glowmaps for their color, not teams #if 0 if(this.colormap > 0) - this.glowmod = colormapPaletteColor(this.colormap & 0x0F, true) * 2; + this.glowmod = colormapPaletteColor(this.colormap & 0x0F, true); else this.glowmod = '1 1 1'; #endif @@ -308,7 +303,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; @@ -322,7 +317,7 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) HANDLE(SEEKER) this.traileffect = EFFECT_SEEKER_TRAIL.m_id; break; HANDLE(MAGE_SPIKE) this.traileffect = EFFECT_TR_VORESPIKE.m_id; break; - HANDLE(SHAMBLER_LIGHTNING) this.traileffect = EFFECT_TR_NEXUIZPLASMA.m_id; break; + HANDLE(GOLEM_LIGHTNING) this.traileffect = EFFECT_TR_NEXUIZPLASMA.m_id; break; HANDLE(RAPTORBOMB) this.gravity = 1; this.avelocity = '0 0 180'; this.traileffect = EFFECT_Null.m_id; break; HANDLE(RAPTORBOMBLET) this.gravity = 1; this.avelocity = '0 0 180'; this.traileffect = EFFECT_Null.m_id; break; @@ -384,7 +379,7 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) this.bouncefactor = WEP_CVAR(mortar, bouncefactor); this.bouncestop = WEP_CVAR(mortar, bouncestop); break; - case PROJECTILE_SHAMBLER_LIGHTNING: + case PROJECTILE_GOLEM_LIGHTNING: this.mins = '-8 -8 -8'; this.maxs = '8 8 8'; this.scale = 2.5; @@ -439,6 +434,10 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) 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'; @@ -496,7 +495,6 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew) 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;