const int DEATH_WEAPONMASK = BITS(8);
const int HITTYPE_SECONDARY = BITS(1) << 8;
-/** automatically set by RadiusDamage */
-const int HITTYPE_SPLASH = BITS(1) << 9;
-const int HITTYPE_BOUNCE = BITS(1) << 10;
-const int HITTYPE_ARMORPIERCE = BITS(1) << 11;
-const int HITTYPE_SOUND = BITS(1) << 12;
-const int DEATH_HITTYPEMASK = HITTYPE_SECONDARY | HITTYPE_SPLASH | HITTYPE_BOUNCE | HITTYPE_ARMORPIERCE | HITTYPE_SOUND;
+const int HITTYPE_SPLASH = BITS(1) << 9; // automatically set by RadiusDamage
+const int HITTYPE_BOUNCE = BITS(1) << 10; // set manually after projectile has bounced
+const int HITTYPE_ARMORPIERCE = BITS(1) << 11; // ignore armor calculations
+const int HITTYPE_SOUND = BITS(1) << 12; // cause bleeding from ears
+const int HITTYPE_SPAM = BITS(1) << 13; // set manually after first RadiusDamage, stops effect spam
+const int DEATH_HITTYPEMASK = HITTYPE_SECONDARY | HITTYPE_SPLASH | HITTYPE_BOUNCE | HITTYPE_ARMORPIERCE | HITTYPE_SOUND | HITTYPE_SPAM;
// normal deaths begin
-const int DT_FIRST = BIT(13);
+const int DT_FIRST = BIT(14);
#define DEATH_ISSPECIAL(t) (t >= DT_FIRST)
#define DEATH_IS(t, dt) (DEATH_ISSPECIAL(t) && (REGISTRY_GET(Deathtypes, t - DT_FIRST)) == dt)
this.dmg_last = dmg_remaining_next;
RadiusDamage(this, this.realowner, this.dmg * f, this.dmg_edge * f, this.dmg_radius, this.realowner, NULL, this.dmg_force * f, this.projectiledeathtype, this.weaponentity_fld, NULL);
- this.projectiledeathtype |= HITTYPE_BOUNCE;
+ this.projectiledeathtype |= HITTYPE_SPAM;
//RadiusDamage(this, NULL, this.dmg * f, this.dmg_edge * f, this.dmg_radius, NULL, NULL, this.dmg_force * f, this.projectiledeathtype, NULL);
if(dt < this.dmg_duration)
total_damage_to_creatures = 0;
- if(deathtype != (WEP_HOOK.m_id | HITTYPE_SECONDARY | HITTYPE_BOUNCE)) // only send gravity bomb damage once
- if(!(deathtype & HITTYPE_SOUND)) // do not send radial sound damage (bandwidth hog)
- {
- force = inflictorvelocity;
- if(force == '0 0 0')
- force = '0 0 -1';
- else
- force = normalize(force);
- if(forceintensity >= 0)
- Damage_DamageInfo(inflictororigin, coredamage, edgedamage, rad, forceintensity * force, deathtype, 0, attacker);
- else
- Damage_DamageInfo(inflictororigin, coredamage, edgedamage, -rad, (-forceintensity) * force, deathtype, 0, attacker);
- }
+ if(!(deathtype & HITTYPE_SOUND) && !(deathtype & HITTYPE_SPAM)) // do not send bandwidth-hogging radial spam attacks
+ {
+ force = inflictorvelocity;
+ if(force == '0 0 0')
+ force = '0 0 -1';
+ else
+ force = normalize(force);
+ if(forceintensity >= 0)
+ Damage_DamageInfo(inflictororigin, coredamage, edgedamage, rad, forceintensity * force, deathtype, 0, attacker);
+ else
+ Damage_DamageInfo(inflictororigin, coredamage, edgedamage, -rad, (-forceintensity) * force, deathtype, 0, attacker);
+ }
stat_damagedone = 0;