X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fprojectile.qc;h=2282723867b1ec3bb23bfc40c282c25591c5cb4d;hb=36f4b513fd7eac9b2dc37d393cebf3b7d98ac9af;hp=9a773379b5d6eed97a57ae1189f2651ffc6c67d8;hpb=cc7d9b829f2b8e1eb1bb04ef30541fbc7b688e2d;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/projectile.qc b/qcsrc/client/projectile.qc index 9a773379b..228272386 100644 --- a/qcsrc/client/projectile.qc +++ b/qcsrc/client/projectile.qc @@ -27,10 +27,12 @@ void Projectile_ResetTrail(vector to) self.trail_oldorigin = to; self.trail_oldtime = time; } + void Projectile_DrawTrail(vector to) { vector from; float t0; + from = self.trail_oldorigin; t0 = self.trail_oldtime; self.trail_oldorigin = to; @@ -139,6 +141,8 @@ void Projectile_Draw() else Projectile_ResetTrail(trailorigin); + self.drawmask = 0; + if(!drawn) return; @@ -152,7 +156,7 @@ void Projectile_Draw() break; } - R_AddEntity(self); + self.drawmask = MASK_NORMAL; } void loopsound(entity e, float ch, string samp, float vol, float attn) @@ -193,7 +197,7 @@ void Ent_Projectile() // effects // // projectiles don't send angles, because they always follow the velocity - + f = ReadByte(); self.count = (f & 0x80); self.iflags = (self.iflags & IFLAG_INTERNALMASK) | IFLAG_AUTOANGLES | IFLAG_ANGLES; @@ -272,13 +276,14 @@ void Ent_Projectile() case PROJECTILE_ELECTRO: setmodel(self, "models/ebomb.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break; case PROJECTILE_ROCKET: setmodel(self, "models/rocket.md3");self.traileffect = particleeffectnum("TR_ROCKET"); self.scale = 2; break; case PROJECTILE_BULLET: setmodel(self, "models/tracer.mdl");self.traileffect = particleeffectnum("tr_bullet"); break; - case PROJECTILE_BULLET_GLOWING: setmodel(self, "models/tracer.mdl");self.traileffect = particleeffectnum("tr_bullet"); break; + case PROJECTILE_BULLET_GLOWING: setmodel(self, "models/tracer.mdl");self.traileffect = particleeffectnum("tr_rifle_weak"); break; case PROJECTILE_BULLET_GLOWING_TRACER: setmodel(self, "models/tracer.mdl");self.traileffect = particleeffectnum("tr_rifle"); break; case PROJECTILE_CRYLINK: setmodel(self, "models/plasmatrail.mdl");self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break; case PROJECTILE_CRYLINK_BOUNCING: setmodel(self, "models/plasmatrail.mdl");self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break; case PROJECTILE_ELECTRO_BEAM: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break; case PROJECTILE_GRENADE: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_GRENADE"); break; case PROJECTILE_GRENADE_BOUNCING: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_GRENADE"); break; + case PROJECTILE_MINE: setmodel(self, "models/mine.md3");self.traileffect = particleeffectnum(""); break; case PROJECTILE_LASER: setmodel(self, "models/laser.mdl");self.traileffect = particleeffectnum(""); break; case PROJECTILE_HLAC: setmodel(self, "models/hlac_bullet.md3");self.traileffect = particleeffectnum(""); break; case PROJECTILE_PORTO_RED: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_WIZSPIKE"); self.scale = 4; break; @@ -289,8 +294,16 @@ void Ent_Projectile() case PROJECTILE_FIREBALL: self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("fireball"); break; // particle effect is good enough case PROJECTILE_FIREMINE: self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("firemine"); break; // particle effect is good enough case PROJECTILE_TAG: setmodel(self, "models/laser.mdl"); self.traileffect = particleeffectnum("TR_ROCKET"); break; - case PROJECTILE_FLAC: setmodel(self, "models/hagarmissile.mdl"); self.scale = 0.4; self.traileffect = particleeffectnum("TR_ROCKET"); break; - case PROJECTILE_SEEKER: setmodel(self, "models/tagrocket.md3"); self.scale = 2; self.traileffect = particleeffectnum("TR_ROCKET"); break; + case PROJECTILE_FLAC: setmodel(self, "models/hagarmissile.mdl"); self.scale = 0.4; self.traileffect = particleeffectnum("TR_SEEKER"); break; + case PROJECTILE_SEEKER: setmodel(self, "models/tagrocket.md3"); self.traileffect = particleeffectnum("TR_SEEKER"); break; + + case PROJECTILE_RAPTORBOMB: setmodel(self, "models/vehicles/clusterbomb.md3"); self.gravity = 1; self.avelocity = '0 0 180'; self.traileffect = particleeffectnum(""); break; + case PROJECTILE_RAPTORBOMBLET: setmodel(self, "models/vehicles/bomblet.md3"); self.gravity = 1; self.avelocity = '0 0 180'; self.traileffect = particleeffectnum(""); break; + case PROJECTILE_RAPTORCANNON: setmodel(self, "models/plasmatrail.mdl"); self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break; + + case PROJECTILE_SPIDERROCKET: setmodel(self, "models/vehicles/rocket02.md3"); self.traileffect = particleeffectnum("spiderbot_rocket_thrust"); break; + case PROJECTILE_WAKIROCKET: setmodel(self, "models/vehicles/rocket01.md3"); self.traileffect = particleeffectnum("wakizashi_rocket_thrust"); break; + case PROJECTILE_WAKICANNON: setmodel(self, "models/laser.mdl"); self.traileffect = particleeffectnum(""); break; default: error("Received invalid CSQC projectile, can't work with this!"); break; @@ -312,6 +325,8 @@ void Ent_Projectile() self.maxs = '0 0 -4'; self.move_movetype = MOVETYPE_BOUNCE; self.move_touch = SUB_Null; + self.move_bounce_factor = g_balance_electro_secondary_bouncefactor; + self.move_bounce_stopspeed = g_balance_electro_secondary_bouncestop; break; case PROJECTILE_ROCKET: loopsound(self, CHAN_PROJECTILE, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM); @@ -327,8 +342,12 @@ void Ent_Projectile() self.maxs = '3 3 3'; self.move_movetype = MOVETYPE_BOUNCE; self.move_touch = SUB_Null; - self.move_bounce_factor = g_balance_grenadelauncher_secondary_bouncefactor; - self.move_bounce_stopspeed = g_balance_grenadelauncher_secondary_bouncestop; + self.move_bounce_factor = g_balance_grenadelauncher_bouncefactor; + self.move_bounce_stopspeed = g_balance_grenadelauncher_bouncestop; + break; + case PROJECTILE_MINE: + self.mins = '-4 -4 -4'; + self.maxs = '4 4 4'; break; case PROJECTILE_PORTO_RED: self.colormod = '2 1 1'; @@ -363,7 +382,6 @@ void Ent_Projectile() self.maxs = '4 4 4'; break; case PROJECTILE_TAG: - loopsound(self, CHAN_PROJECTILE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM); self.mins = '-2 -2 -2'; self.maxs = '2 2 2'; break; @@ -372,9 +390,26 @@ void Ent_Projectile() self.maxs = '2 2 2'; break; case PROJECTILE_SEEKER: + loopsound(self, CHAN_PROJECTILE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM); self.mins = '-4 -4 -4'; self.maxs = '4 4 4'; break; + case PROJECTILE_RAPTORBOMB: + self.mins = '-3 -3 -3'; + self.maxs = '3 3 3'; + break; + case PROJECTILE_RAPTORBOMBLET: + break; + case PROJECTILE_RAPTORCANNON: + break; + case PROJECTILE_SPIDERROCKET: + loopsound(self, CHAN_PROJECTILE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM); + break; + case PROJECTILE_WAKIROCKET: + loopsound(self, CHAN_PROJECTILE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM); + break; + case PROJECTILE_WAKICANNON: + break; default: break; } @@ -397,7 +432,7 @@ void Ent_Projectile() if(!(self.count & 0x80)) InterpolateOrigin_Note(); - + self.draw = Projectile_Draw; self.entremove = Ent_RemoveProjectile; } @@ -407,6 +442,7 @@ void Projectile_Precache() precache_model("models/ebomb.mdl"); precache_model("models/elaser.mdl"); precache_model("models/grenademodel.md3"); + precache_model("models/mine.md3"); precache_model("models/hagarmissile.mdl"); precache_model("models/hlac_bullet.md3"); precache_model("models/laser.mdl"); @@ -414,9 +450,11 @@ void Projectile_Precache() precache_model("models/rocket.md3"); precache_model("models/tagrocket.md3"); precache_model("models/tracer.mdl"); + precache_sound("weapons/electro_fly.wav"); precache_sound("weapons/rocket_fly.wav"); precache_sound("weapons/fireball_fly.wav"); precache_sound("weapons/fireball_fly2.wav"); precache_sound("weapons/tag_rocket_fly.wav"); + }