From b8312a9bd8577253b89d7906b8b8ade4dabcd52f Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 10 Aug 2006 21:03:17 +0000 Subject: [PATCH] - Gave Strife's PhosphorousFire the MF2_NODMGTHRUST flag so that its damage is truly thrustless. The 'thrustless' parameter disabled all thrust done by PIT_RadiusDamage but not the one done by P_DamageMobj. Also gave Hexen's poison cloud the MF3_BLOODLESSIMPACT flag and made spawning of blood decals in PIT_RadiusAttack depend on that. Since with these changes the 'bombthrustless' argument to P_RadiusAttack is no longer useful I removed it. SVN r285 (trunk) --- docs/rh-log.txt | 7 +++++++ src/g_hexen/a_flechette.cpp | 2 +- src/g_strife/a_strifeweapons.cpp | 4 ++-- src/p_local.h | 2 +- src/p_map.cpp | 15 ++++++--------- src/thingdef_codeptr.cpp | 2 +- 6 files changed, 18 insertions(+), 14 deletions(-) diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 509b7dc16..084f2f4be 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,11 @@ August 10, 2006 (Changes by Graf Zahl) +- Gave Strife's PhosphorousFire the MF2_NODMGTHRUST flag so that its + damage is truly thrustless. The 'thrustless' parameter disabled all + thrust done by PIT_RadiusDamage but not the one done by P_DamageMobj. + Also gave Hexen's poison cloud the MF3_BLOODLESSIMPACT flag and made + spawning of blood decals in PIT_RadiusAttack depend on that. Since with + these changes the 'bombthrustless' argument to P_RadiusAttack is no + longer useful I removed it. - Fixed: CheckActorInventory stored the return value in the wrong address on the ACS stack. - Fixed: Skin sounds weren't properly restored after a SNDINFO reset. diff --git a/src/g_hexen/a_flechette.cpp b/src/g_hexen/a_flechette.cpp index c9bf1f9ed..3b1f27e76 100644 --- a/src/g_hexen/a_flechette.cpp +++ b/src/g_hexen/a_flechette.cpp @@ -403,7 +403,7 @@ IMPLEMENT_ACTOR (APoisonCloud, Hexen, -1, 0) PROP_MassLong (0x7fffffff) PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF) PROP_Flags2 (MF2_NODMGTHRUST) - PROP_Flags3 (MF3_DONTSPLASH|MF3_FOILINVUL|MF3_CANBLAST) + PROP_Flags3 (MF3_DONTSPLASH|MF3_FOILINVUL|MF3_CANBLAST|MF3_BLOODLESSIMPACT) PROP_RenderStyle (STYLE_Translucent) PROP_Alpha (HX_SHADOW) diff --git a/src/g_strife/a_strifeweapons.cpp b/src/g_strife/a_strifeweapons.cpp index 43fc23f1d..c59f16e5b 100644 --- a/src/g_strife/a_strifeweapons.cpp +++ b/src/g_strife/a_strifeweapons.cpp @@ -1565,7 +1565,7 @@ IMPLEMENT_ACTOR (APhosphorousFire, Strife, -1, 0) PROP_ReactionTime (120) PROP_DamageType (MOD_FIRE) PROP_Flags (MF_NOBLOCKMAP) - PROP_Flags2 (MF2_FLOORCLIP|MF2_NOTELEPORT) + PROP_Flags2 (MF2_FLOORCLIP|MF2_NOTELEPORT|MF2_NODMGTHRUST) PROP_RenderStyle (STYLE_Add) END_DEFAULTS @@ -1585,7 +1585,7 @@ void A_SpawnBurn (AActor *self) void A_BurnArea (AActor *self) { - P_RadiusAttack (self, self->target, 128, 128, self->DamageType, true, true); + P_RadiusAttack (self, self->target, 128, 128, self->DamageType, true); } void A_Burnination (AActor *self) diff --git a/src/p_local.h b/src/p_local.h index c37fb7027..eab98d144 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -315,7 +315,7 @@ extern fixed_t CameraX, CameraY, CameraZ; extern sector_t *CameraSector; // [RH] Means of death -void P_RadiusAttack (AActor *spot, AActor *source, int damage, int distance, int damageType, bool hurtSelf, bool thrustless=false, bool dodamage=true); +void P_RadiusAttack (AActor *spot, AActor *source, int damage, int distance, int damageType, bool hurtSelf, bool dodamage=true); void P_DelSector_List(); void P_DelSeclist(msecnode_t *); // phares 3/16/98 diff --git a/src/p_map.cpp b/src/p_map.cpp index 593324867..613c5d7bd 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -3415,7 +3415,6 @@ float bombdistancefloat; bool DamageSource; int bombmod; vec3_t bombvec; -bool bombthrustless; bool bombdodamage; //============================================================================= @@ -3525,13 +3524,12 @@ BOOL PIT_RadiusAttack (AActor *thing) if (bombdodamage) P_DamageMobj (thing, bombspot, bombsource, damage, bombmod); else thing->flags2 |= MF2_BLASTED; - - if (!(bombspot->flags2 & MF2_NODMGTHRUST) && - !(thing->flags & MF_ICECORPSE)) - { - if (bombdodamage) P_TraceBleed (damage, thing, bombspot); - if (!bombthrustless) + if (!(thing->flags & MF_ICECORPSE)) + { + if (bombdodamage && !(bombspot->flags3 & MF3_BLOODLESSIMPACT)) P_TraceBleed (damage, thing, bombspot); + + if (!(bombspot->flags2 & MF2_NODMGTHRUST)) { thrust = points * 0.5f / (float)thing->Mass; if (bombsource == thing) @@ -3593,7 +3591,7 @@ BOOL PIT_RadiusAttack (AActor *thing) // Source is the creature that caused the explosion at spot. // void P_RadiusAttack (AActor *spot, AActor *source, int damage, int distance, int damageType, - bool hurtSource, bool thrustless, bool dodamage) + bool hurtSource, bool dodamage) { static TArray radbt; @@ -3614,7 +3612,6 @@ void P_RadiusAttack (AActor *spot, AActor *source, int damage, int distance, int bombdamage = damage; bombdistance = distance; bombdistancefloat = 1.f / (float)distance; - bombthrustless = thrustless; DamageSource = hurtSource; bombdamagefloat = (float)damage; bombmod = damageType; diff --git a/src/thingdef_codeptr.cpp b/src/thingdef_codeptr.cpp index 68c56dae9..3fea37464 100644 --- a/src/thingdef_codeptr.cpp +++ b/src/thingdef_codeptr.cpp @@ -505,7 +505,7 @@ void A_RadiusThrust (AActor *self) if (force == 0) force = 128; if (distance == 0) distance = force; - P_RadiusAttack (self, self->target, force, distance, self->DamageType, affectSource, false, false); + P_RadiusAttack (self, self->target, force, distance, self->DamageType, affectSource, false); if (self->z <= self->floorz + (distance<