From b8312a9bd8577253b89d7906b8b8ade4dabcd52f Mon Sep 17 00:00:00 2001
From: Christoph Oelckers <coelckers@zdoom.fake>
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<AActor *> 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<<FRACBITS))
 	{
 		P_HitFloor (self);