From eb624f15e3701c672ace1c23d51f8899f4247a16 Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Sat, 3 Dec 2022 15:05:09 +0100 Subject: [PATCH] Fix zero-damage hits spawning blood. (Can't apply to Spreadgun/Wallbuster due to Damage Accumulator use) --- language.version | 4 ++-- zscript/dlc1/swwm_heavymahsheengun.zsc | 2 +- zscript/handler/swwm_handler_worldthings.zsc | 4 +++- zscript/items/swwm_powerups.zsc | 6 +++--- zscript/swwm_player.zsc | 4 ++-- zscript/utility/swwm_utility.zsc | 4 ++-- zscript/weapons/swwm_baseweapon_melee.zsc | 2 +- zscript/weapons/swwm_splode.zsc | 4 ++-- zscript/weapons/swwm_tastytreat.zsc | 2 +- zscript/weapons/swwm_thiccboolet.zsc | 2 +- 10 files changed, 18 insertions(+), 16 deletions(-) diff --git a/language.version b/language.version index d33a88c1f..ed231c14b 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r656 \cu(Thu 1 Dec 10:20:49 CET 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r656 \cu(2022-12-01 10:20:49)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r657 \cu(Sat 3 Dec 15:05:09 CET 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r657 \cu(2022-12-03 15:05:09)\c-"; diff --git a/zscript/dlc1/swwm_heavymahsheengun.zsc b/zscript/dlc1/swwm_heavymahsheengun.zsc index 7a0590ab8..9c5814f93 100644 --- a/zscript/dlc1/swwm_heavymahsheengun.zsc +++ b/zscript/dlc1/swwm_heavymahsheengun.zsc @@ -207,7 +207,7 @@ Class HeavyMahSheenGun : SWWMWeapon p.pitch = asin(st.HitList[i].x.z); p.target = self; } - else + else if ( realdmg > 0 ) { st.HitList[i].HitActor.TraceBleed(realdmg,self); st.HitList[i].HitActor.SpawnBlood(st.HitList[i].HitLocation,atan2(st.HitList[i].x.y,st.HitList[i].x.x)+180,realdmg); diff --git a/zscript/handler/swwm_handler_worldthings.zsc b/zscript/handler/swwm_handler_worldthings.zsc index a86658b28..9b47d232d 100644 --- a/zscript/handler/swwm_handler_worldthings.zsc +++ b/zscript/handler/swwm_handler_worldthings.zsc @@ -291,7 +291,9 @@ extend Class SWWMHandler if ( e.Thing.GetClass() == 'Pig' ) e.Thing.SetTag("$FN_PIG"); // missing in gzdoom // nashgore compat - if ( e.Thing.GetClassName() == "NashGoreFootprint" ) + if ( (e.Thing.GetClassName() == "NashGoreFootprint") + || (e.Thing.GetClassName() == "NashGoreFootprintLeft") + || (e.Thing.GetClassName() == "NashGoreFootprintRight") ) e.Thing.A_ChangeModel("",0,"","",0,"models/nashgore/Footprint","DemoFootprint.png"); // eviternity stuff else if ( (e.Thing.GetClassName() == "Archangelus") diff --git a/zscript/items/swwm_powerups.zsc b/zscript/items/swwm_powerups.zsc index d8c94dbc5..282bd577c 100644 --- a/zscript/items/swwm_powerups.zsc +++ b/zscript/items/swwm_powerups.zsc @@ -1422,7 +1422,7 @@ Class LampMoth : Actor Vector3 awaydir = level.Vec3Diff(target.Vec3Offset(0,0,target.height),pos).unit(); vel += awaydir*8.; int dmg = target.DamageMobj(self,master?master:Actor(self),GetMissileDamage(0,0),'Melee',Random[Moth](0,8)?DMG_NO_PAIN:0); - if ( target && !target.bNOBLOOD && !target.bDORMANT && !target.bINVULNERABLE ) + if ( (dmg > 0) && target && !target.bNOBLOOD && !target.bDORMANT && !target.bINVULNERABLE ) { target.TraceBleed(dmg,self); target.SpawnBlood(pos,atan2(awaydir.y,awaydir.x)+180,dmg); @@ -3719,10 +3719,10 @@ Class TheBall : Actor if ( bleeds ) { A_StartSound("leadball/hitf",CHAN_VOICE,CHANF_OVERLAP,(vel.length()/30.)**.5); - if ( victim ) + if ( (newdmg > 0) && victim ) { victim.A_StartSound("leadball/hitf",CHAN_DAMAGE,CHANF_OVERLAP,(vel.length()/30.)**.5); - victim.TraceBleed((newdmg>0)?newdmg:dmg,self); + victim.TraceBleed(newdmg,self); victim.SpawnBlood(pos,atan2(dir.y,dir.x),dmg); } } diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 0aa52676a..a1e0c2130 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -1361,7 +1361,7 @@ Class Demolitionist : PlayerPawn ps.target = self; ps.special1 = realdmg; } - if ( encroached && !encroached.bNOBLOOD && !encroached.bINVULNERABLE ) + if ( (realdmg > 0) && encroached && !encroached.bNOBLOOD && !encroached.bINVULNERABLE ) { encroached.TraceBleed(realdmg,self); encroached.SpawnBlood(pos,angle,realdmg); @@ -1525,7 +1525,7 @@ Class Demolitionist : PlayerPawn if ( a.bSHOOTABLE ) { dmg = a.DamageMobj(self,self,dmg,buttslam?'Buttslam':'Dash',flg); - if ( a && !a.bNOBLOOD && (raging || !a.bINVULNERABLE) ) + if ( (dmg > 0) && a && !a.bNOBLOOD && (raging || !a.bINVULNERABLE) ) { a.TraceBleed(dmg,self); a.SpawnBlood(level.Vec3Offset(pos,diff/2),atan2(dir.y,dir.x)+180,dmg); diff --git a/zscript/utility/swwm_utility.zsc b/zscript/utility/swwm_utility.zsc index 8ea1ea4b0..c25ad71fd 100644 --- a/zscript/utility/swwm_utility.zsc +++ b/zscript/utility/swwm_utility.zsc @@ -1276,7 +1276,7 @@ Class SWWMUtility int oldhp = a.Health; int basehp = a.GetSpawnHealth(); int ndmg = a.DamageMobj(realinflictor?realinflictor:Source,Instigator,dmg,(DamageType=='')?Source.DamageType:DamageType,dflg,atan2(-dir.y,-dir.x)); - if ( a && !(flags&DE_NOBLEED) ) a.TraceBleed((ndmg>0)?ndmg:dmg,Source); + if ( (ndmg > 0) && a && !(flags&DE_NOBLEED) ) a.TraceBleed(ndmg,Source); if ( (flags&DE_HOWL) && a && (a.Health > 0) && a.bISMONSTER && !Random[DoBlast](0,3) ) a.Howl(); if ( hostile && (!a || (a.Health <= 0)) ) haskilled = true; if ( (flags&DE_COUNTFHKILLS) && (oldhp < basehp) ) continue; // was not at full health @@ -1370,7 +1370,7 @@ Class SWWMUtility int oldhp = a.Health; int basehp = a.GetSpawnHealth(); int ndmg = a.DamageMobj(realinflictor?realinflictor:Source,Instigator,dmg,(DamageType=='')?Source.DamageType:DamageType,dflg,atan2(-dir.y,-dir.x)); - if ( a && !(flags&DE_NOBLEED) ) a.TraceBleed((ndmg>0)?ndmg:dmg,Source); + if ( (ndmg > 0) && a && !(flags&DE_NOBLEED) ) a.TraceBleed(ndmg,Source); if ( (flags&DE_HOWL) && a && (a.Health > 0) && a.bISMONSTER && !Random[DoBlast](0,3) ) a.Howl(); if ( hostile && (!a || (a.Health <= 0)) ) haskilled = true; if ( (flags&DE_COUNTFHKILLS) && (oldhp < basehp) ) continue; // was not at full health diff --git a/zscript/weapons/swwm_baseweapon_melee.zsc b/zscript/weapons/swwm_baseweapon_melee.zsc index 7ea43e5fb..b983a2832 100644 --- a/zscript/weapons/swwm_baseweapon_melee.zsc +++ b/zscript/weapons/swwm_baseweapon_melee.zsc @@ -424,7 +424,7 @@ extend Class SWWMWeapon if ( mt.hits[i].a ) { if ( mt.hits[i].a.player ) mt.hits[i].a.A_QuakeEx(quakin,quakin,quakin,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.125*quakin); - if ( !mt.hits[i].a.bNOBLOOD && !mt.hits[i].a.bDORMANT && (raging || !mt.hits[i].a.bINVULNERABLE) ) + if ( (newdmg > 0) && !mt.hits[i].a.bNOBLOOD && !mt.hits[i].a.bDORMANT && (raging || !mt.hits[i].a.bINVULNERABLE) ) { mt.hits[i].a.TraceBleed(newdmg,invoker); mt.hits[i].a.SpawnBlood(mt.hits[i].pos,atan2(mt.hits[i].dir.y,mt.hits[i].dir.x)+180,newdmg); diff --git a/zscript/weapons/swwm_splode.zsc b/zscript/weapons/swwm_splode.zsc index da7c867e8..381e8a80d 100644 --- a/zscript/weapons/swwm_splode.zsc +++ b/zscript/weapons/swwm_splode.zsc @@ -114,7 +114,7 @@ Class ExplodiumGun : SWWMWeapon p.pitch = asin(d.HitDir.z); p.target = self; } - else + else if ( dmg > 0 ) { d.HitActor.TraceBleed(dmg,self); d.HitActor.SpawnBlood(d.HitLocation,atan2(d.HitDir.y,d.HitDir.x)+180,dmg); @@ -651,7 +651,7 @@ Class DualExplodiumGun : SWWMWeapon p.pitch = asin(d.HitDir.z); p.target = self; } - else + else if ( dmg > 0 ) { d.HitActor.TraceBleed(dmg,self); d.HitActor.SpawnBlood(d.HitLocation,atan2(d.HitDir.y,d.HitDir.x)+180,dmg); diff --git a/zscript/weapons/swwm_tastytreat.zsc b/zscript/weapons/swwm_tastytreat.zsc index 736a751d2..93301f753 100644 --- a/zscript/weapons/swwm_tastytreat.zsc +++ b/zscript/weapons/swwm_tastytreat.zsc @@ -156,7 +156,7 @@ Class CandyGun : SWWMWeapon p.pitch = asin(d.HitDir.z); p.target = self; } - else + else if ( dmg > 0 ) { d.HitActor.TraceBleed(dmg,self); d.HitActor.SpawnBlood(d.HitLocation,atan2(d.HitDir.y,d.HitDir.x)+180,dmg); diff --git a/zscript/weapons/swwm_thiccboolet.zsc b/zscript/weapons/swwm_thiccboolet.zsc index acb06b12c..6f9495435 100644 --- a/zscript/weapons/swwm_thiccboolet.zsc +++ b/zscript/weapons/swwm_thiccboolet.zsc @@ -310,7 +310,7 @@ Class SilverBullet : SWWMWeapon SWWMUtility.AchievementProgress("conga",invoker.nkills,player); if ( t.Hitlist[i].pastwall ) SWWMUtility.AchievementProgressInc("thruwall",1,player); } - if ( t.HitList[i].HitActor && !t.HitList[i].HitActor.bNOBLOOD && !t.HitList[i].HitActor.bDORMANT ) + if ( (dmg > 0) && t.HitList[i].HitActor && !t.HitList[i].HitActor.bNOBLOOD && !t.HitList[i].HitActor.bDORMANT ) { t.HitList[i].HitActor.TraceBleed(dmg,self); t.HitList[i].HitActor.SpawnBlood(t.HitList[i].HitLocation,atan2(t.HitList[i].x.y,t.HitList[i].x.x)+180,dmg);