From 0b0999563ba9ed031559b4756b3b27c2ac89da7e Mon Sep 17 00:00:00 2001 From: Mircea Kitsune Date: Wed, 4 Jan 2012 15:53:06 +0200 Subject: [PATCH] Also send ent_DamageInfo for hitscan weapons when they hit a player, not only when hitting a surface. First step in getting damage effects working for hitscan guns again. --- qcsrc/server/g_damage.qc | 10 ++++++---- qcsrc/server/vehicles/raptor.qc | 2 +- qcsrc/server/w_common.qc | 13 ++++++++----- qcsrc/server/w_minstanex.qc | 4 ---- qcsrc/server/w_nex.qc | 4 ---- qcsrc/server/w_seeker.qc | 4 ++-- 6 files changed, 17 insertions(+), 20 deletions(-) diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index 396279fca..ad3332adf 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -18,7 +18,7 @@ float Damage_DamageInfo_SendEntity(entity to, float sf) return TRUE; } -void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad, vector force, float deathtype, entity dmgowner) +void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad, vector force, float deathtype, float bloodtype, entity dmgowner) { // TODO maybe call this from non-edgedamage too? // TODO maybe make the client do the particle effects for the weapons and the impact sounds using this info? @@ -37,7 +37,9 @@ void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad e.dmg_force = vlen(force); e.velocity = force; e.oldorigin_x = compressShortVector(e.velocity); - e.species |= 0; // to be fixed + e.species = bloodtype; + + dprint(strcat(ftos(e.species), " ********\n")); Net_LinkEntity(e, FALSE, 0.2, Damage_DamageInfo_SendEntity); } @@ -995,9 +997,9 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e else force = normalize(force); if(forceintensity >= 0) - Damage_DamageInfo(blastorigin, coredamage, edgedamage, rad, forceintensity * force, deathtype, attacker); + Damage_DamageInfo(blastorigin, coredamage, edgedamage, rad, forceintensity * force, deathtype, 0, attacker); else - Damage_DamageInfo(blastorigin, coredamage, edgedamage, -rad, (-forceintensity) * force, deathtype, attacker); + Damage_DamageInfo(blastorigin, coredamage, edgedamage, -rad, (-forceintensity) * force, deathtype, 0, attacker); } stat_damagedone = 0; diff --git a/qcsrc/server/vehicles/raptor.qc b/qcsrc/server/vehicles/raptor.qc index 9e80f1869..7aa68061a 100644 --- a/qcsrc/server/vehicles/raptor.qc +++ b/qcsrc/server/vehicles/raptor.qc @@ -111,7 +111,7 @@ void raptor_bomb_burst() entity bomblet; float i; - Damage_DamageInfo(self.origin, 0, 0, 0, '0 0 0', DEATH_RAPTOR_BOMB_SPLIT, self); + Damage_DamageInfo(self.origin, 0, 0, 0, '0 0 0', DEATH_RAPTOR_BOMB_SPLIT, 0, self); for(i = 0; i < autocvar_g_vehicle_raptor_bomblets; ++i) { diff --git a/qcsrc/server/w_common.qc b/qcsrc/server/w_common.qc index a05c17bd4..fab3b41b2 100644 --- a/qcsrc/server/w_common.qc +++ b/qcsrc/server/w_common.qc @@ -66,6 +66,9 @@ void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, f continue; } + if(trace_ent.solid == SOLID_BSP || trace_ent.solid == SOLID_SLIDEBOX) + Damage_DamageInfo(trace_endpos, bdamage, 0, 0, force, deathtype, trace_ent.species, self); + // if it is world we can't hurt it so stop now if (trace_ent == world || trace_fraction == 1) break; @@ -173,8 +176,8 @@ void W_BallisticBullet_Hit (void) f = pow(bound(0, vlen(self.velocity) / vlen(self.oldvelocity), 1), 2); // energy multiplier q = 1 + self.dmg_edge / self.dmg; - if(other.solid == SOLID_BSP) - Damage_DamageInfo(self.origin, self.dmg * f, 0, 0, max(1, self.dmg_force) * normalize(self.velocity) * f, self.projectiledeathtype, self); + if(other.solid == SOLID_BSP || other.solid == SOLID_SLIDEBOX) + Damage_DamageInfo(self.origin, self.dmg * f, 0, 0, max(1, self.dmg_force) * normalize(self.velocity) * f, self.projectiledeathtype, other.species, self); if(other && other != self.enemy) { @@ -232,7 +235,7 @@ void W_BallisticBullet_LeaveSolid_think() { float f; f = pow(bound(0, vlen(self.velocity) / vlen(self.oldvelocity), 1), 2); // energy multiplier - Damage_DamageInfo(self.origin, 0, 0, 0, max(1, self.dmg_force) * normalize(self.velocity) * -f, self.projectiledeathtype, self); + Damage_DamageInfo(self.origin, 0, 0, 0, max(1, self.dmg_force) * normalize(self.velocity) * -f, self.projectiledeathtype, 0, self); } UpdateCSQCProjectile(self); @@ -526,10 +529,10 @@ void fireBullet (vector start, vector dir, float spread, float damage, float for end = trace_endpos; - if ((trace_fraction != 1.0) && (pointcontents (trace_endpos) != CONTENT_SKY)) + if (pointcontents (trace_endpos) != CONTENT_SKY) { if not (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) - Damage_DamageInfo(trace_endpos, damage, 0, 0, dir * max(1, force), dtype, self); + Damage_DamageInfo(trace_endpos, damage, 0, 0, dir * max(1, force), dtype, trace_ent.species, self); Damage (trace_ent, self, self, damage, dtype, trace_endpos, dir * force); } diff --git a/qcsrc/server/w_minstanex.qc b/qcsrc/server/w_minstanex.qc index 1dfc28173..600abd10e 100644 --- a/qcsrc/server/w_minstanex.qc +++ b/qcsrc/server/w_minstanex.qc @@ -76,10 +76,6 @@ void W_MinstaNex_Attack (void) else WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3"), w_shotorg, v); - // flash and burn the wall - if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)) - Damage_DamageInfo(trace_endpos, 10000, 0, 0, 800 * w_shotdir, WEP_MINSTANEX, self); - if (g_minstagib) W_DecreaseAmmo(ammo_cells, 1, autocvar_g_balance_minstanex_reload_ammo); else diff --git a/qcsrc/server/w_nex.qc b/qcsrc/server/w_nex.qc index 3f47b48fd..6c550831f 100644 --- a/qcsrc/server/w_nex.qc +++ b/qcsrc/server/w_nex.qc @@ -71,10 +71,6 @@ void W_Nex_Attack (float issecondary) //beam and muzzle flash done on client SendCSQCNexBeamParticle(charge); - // flash and burn the wall - if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)) - Damage_DamageInfo(trace_endpos, mydmg, 0, 0, myforce * w_shotdir, WEP_NEX, self); - W_DecreaseAmmo(ammo_cells, myammo, autocvar_g_balance_nex_reload_ammo); } diff --git a/qcsrc/server/w_seeker.qc b/qcsrc/server/w_seeker.qc index c4c08bb51..7cf9f58d8 100644 --- a/qcsrc/server/w_seeker.qc +++ b/qcsrc/server/w_seeker.qc @@ -393,7 +393,7 @@ void Seeker_Tag_Explode () { //if(other==self.realowner) // return; - Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_BOUNCE, self); + Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_BOUNCE, other.species, self); remove (self); } @@ -421,7 +421,7 @@ void Seeker_Tag_Touch() te_knightspike(org2); self.event_damage = SUB_Null; - Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_HEADSHOT, self); + Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_HEADSHOT, other.species, self); if (other.takedamage == DAMAGE_AIM && other.deadflag == DEAD_NO) { -- 2.39.2