From 69b38e5e9b60390214278c08841bb4759e788db1 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Wed, 8 Dec 2021 18:07:02 +0100 Subject: [PATCH] Fix Elemental Coating breaking "End Level" damage sectors. --- language.version | 4 ++-- zscript/items/swwm_powerups.zsc | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/language.version b/language.version index 65466c8b3..e155cd50d 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw1.2pre r73 \cu(Mon 6 Dec 18:10:58 CET 2021)\c-"; -SWWM_SHORTVER="\cw1.2pre r73 \cu(2021-12-06 18:10:58)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw1.2pre r74 \cu(Wed 8 Dec 18:07:02 CET 2021)\c-"; +SWWM_SHORTVER="\cw1.2pre r74 \cu(2021-12-08 18:07:02)\c-"; diff --git a/zscript/items/swwm_powerups.zsc b/zscript/items/swwm_powerups.zsc index d933735e0..c82996305 100644 --- a/zscript/items/swwm_powerups.zsc +++ b/zscript/items/swwm_powerups.zsc @@ -2174,6 +2174,33 @@ Class BarrierPower : PowerIronFeet if ( !snd ) snd = Spawn("BarrierSnd",Owner.pos); snd.target = Owner; snd.master = self; + // break ourselves if we're in an endlevel sector + bool endlv = false; + for ( int i=0; i= (Owner.pos.z+Owner.Height) ) continue; + if ( !(ff.model.flags&Sector.SECF_ENDLEVEL) ) continue; + endlv = true; + break; + } + if ( !endlv && (Owner.pos.z <= Owner.floorz) ) + { + bool damageterrain = false; + if ( (Owner.floorsector.damageamount > 0) && (Owner.floorsector.damageinterval > 0) ) damageterrain = true; + else + { + let t = Owner.GetFloorTerrain(); + if ( t && (t.DamageAmount > 0) && (t.DamageTimeMask > 0) ) + damageterrain = true; + } + if ( damageterrain && (Owner.floorsector.flags&Sector.SECF_ENDLEVEL) ) endlv = true; + } + if ( !endlv ) return; + EffectTics = min(0,EffectTics); } } @@ -2226,6 +2253,7 @@ Class EBarrier : Inventory override void DoEffect() { Super.DoEffect(); + if ( !Owner || (Owner.Health <= 0) ) return; // check terrain for auto-use let b = Powerup(Owner.FindInventory("BarrierPower")); if ( b && (b.EffectTics > 5) ) @@ -2234,6 +2262,7 @@ Class EBarrier : Inventory return; } bool damageterrain = false; + bool endlevelterrain = false; // check any 3d floors first for ( int i=0; i= (Owner.pos.z+Owner.Height) ) continue; + if ( ff.model.flags&Sector.SECF_ENDLEVEL ) endlevelterrain = true; damageterrain = true; break; } @@ -2254,7 +2284,10 @@ Class EBarrier : Inventory if ( t && (t.DamageAmount > 0) && (t.DamageTimeMask > 0) ) damageterrain = true; } + if ( damageterrain && (Owner.floorsector.flags&Sector.SECF_ENDLEVEL) ) endlevelterrain = true; } + // do not auto-use for these + if ( endlevelterrain ) return; if ( !damageterrain ) { terrainwait = max(0,terrainwait-1);