- handle xrepeat abuse in Exhumed’s energy blocks

This commit is contained in:
Christoph Oelckers 2022-10-07 19:28:22 +02:00
parent 42679d58bb
commit 62427f8260

View file

@ -1461,14 +1461,14 @@ void AISpark::Tick(RunListEvent* ev)
if (!pActor) return; if (!pActor) return;
pActor->spr.shade += 3; pActor->spr.shade += 3;
pActor->spr.xrepeat -= 2; pActor->spr.AddScaleX(-0.03125);
if (pActor->spr.ScaleX() >= 0.0625 && pActor->spr.shade <= 100) if (pActor->spr.ScaleX() >= 0.0625 && pActor->spr.shade <= 100)
{ {
pActor->spr.AddScaleY(-0.03125); pActor->spr.AddScaleY(-0.03125);
// calling BuildSpark() with 2nd parameter as '1' will set kTile986 // calling BuildSpark() with 2nd parameter as '1' will set kTile986
if (pActor->spr.picnum == kTile986 && (pActor->spr.xrepeat & 2)) if (pActor->spr.picnum == kTile986 && int((pActor->spr.ScaleX() * INV_REPEAT_SCALE)) & 2) // hack alert
{ {
BuildSpark(pActor, 2); BuildSpark(pActor, 2);
} }
@ -1641,7 +1641,7 @@ DExhumedActor* BuildEnergyBlock(sectortype* pSector)
nRepeat = 255; nRepeat = 255;
} }
pActor->spr.xrepeat = nRepeat; pActor->spr.intangle = nRepeat;
pActor->spr.cstat = CSTAT_SPRITE_INVISIBLE; pActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
pActor->vel.X = 0; pActor->vel.X = 0;
pActor->vel.Y = 0; pActor->vel.Y = 0;
@ -1729,11 +1729,11 @@ void ExplodeEnergyBlock(DExhumedActor* pActor)
BuildSpark(pActor, 3); BuildSpark(pActor, 3);
pActor->spr.cstat = 0; pActor->spr.cstat = 0;
pActor->spr.xrepeat = 100; pActor->spr.intangle = 100;
PlayFX2(StaticSound[kSound78], pActor); PlayFX2(StaticSound[kSound78], pActor);
pActor->spr.xrepeat = 0; pActor->spr.intangle = 0;
nEnergyTowers--; nEnergyTowers--;
@ -1805,9 +1805,9 @@ void AIEnergyBlock::Damage(RunListEvent* ev)
return; return;
} }
if (ev->nDamage < pActor->spr.xrepeat) if (ev->nDamage < pActor->spr.intangle)
{ {
pActor->spr.xrepeat -= ev->nDamage; pActor->spr.intangle -= ev->nDamage;
auto pActor2 = insertActor(lasthitsect, 0); auto pActor2 = insertActor(lasthitsect, 0);
@ -1819,7 +1819,7 @@ void AIEnergyBlock::Damage(RunListEvent* ev)
} }
else else
{ {
pActor->spr.xrepeat = 0; // using xrepeat to store health pActor->spr.intangle = 0; // using intangle to store health
ExplodeEnergyBlock(pActor); ExplodeEnergyBlock(pActor);
} }
} }