Fix Elemental Coating breaking "End Level" damage sectors.
This commit is contained in:
parent
8015338cf3
commit
69b38e5e9b
2 changed files with 35 additions and 2 deletions
|
|
@ -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-";
|
||||
|
|
|
|||
|
|
@ -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.CurSector.Get3DFloorCount(); i++ )
|
||||
{
|
||||
F3DFloor ff = Owner.CurSector.Get3DFloor(i);
|
||||
if ( !(ff.flags&(F3DFloor.FF_EXISTS|F3DFloor.FF_SWIMMABLE)) ) continue;
|
||||
if ( (ff.model.DamageAmount <= 0) || (ff.model.damageinterval <= 0) ) continue;
|
||||
if ( ff.top.ZAtPoint(Owner.pos.xy) <= Owner.pos.z ) continue;
|
||||
if ( ff.bottom.ZAtPoint(Owner.pos.xy) >= (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.CurSector.Get3DFloorCount(); i++ )
|
||||
{
|
||||
|
|
@ -2242,6 +2271,7 @@ Class EBarrier : Inventory
|
|||
if ( (ff.model.DamageAmount <= 0) || (ff.model.damageinterval <= 0) ) continue;
|
||||
if ( ff.top.ZAtPoint(Owner.pos.xy) <= Owner.pos.z ) continue;
|
||||
if ( ff.bottom.ZAtPoint(Owner.pos.xy) >= (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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue