Apply burning bypass to correct sprite type

This commit is contained in:
carnivoroussociety 2021-08-15 18:31:47 +10:00 committed by Christoph Oelckers
parent bd98096527
commit 7ac662e0c8
2 changed files with 11 additions and 5 deletions

View file

@ -5734,7 +5734,6 @@ void actProcessSprites(void)
int nXSprite = pSprite->extra; int nXSprite = pSprite->extra;
if (nXSprite > 0) { if (nXSprite > 0) {
XSPRITE *pXSprite = &xsprite[nXSprite]; XSPRITE *pXSprite = &xsprite[nXSprite];
const bool fixBurnGlitch = IsBurningDude(pSprite) && !VanillaMode() && !DemoRecordStatus(); // if enemies are these types, always apply burning damage per tick
switch (pSprite->type) { switch (pSprite->type) {
case kThingBloodBits: case kThingBloodBits:
case kThingBloodChunks: case kThingBloodChunks:
@ -5743,7 +5742,7 @@ void actProcessSprites(void)
break; break;
} }
if ((pXSprite->burnTime > 0) || fixBurnGlitch) if (pXSprite->burnTime > 0)
{ {
pXSprite->burnTime = ClipLow(pXSprite->burnTime-4,0); pXSprite->burnTime = ClipLow(pXSprite->burnTime-4,0);
actDamageSprite(pXSprite->burnSource, pSprite, kDamageBurn, 8); actDamageSprite(pXSprite->burnSource, pSprite, kDamageBurn, 8);
@ -6189,7 +6188,8 @@ void actProcessSprites(void)
if (nXSprite > 0) if (nXSprite > 0)
{ {
XSPRITE *pXSprite = &xsprite[nXSprite]; XSPRITE *pXSprite = &xsprite[nXSprite];
if (pXSprite->burnTime > 0) const bool fixBurnGlitch = IsBurningDude(pSprite) && !VanillaMode() && !DemoRecordStatus(); // if enemies are burning, always apply burning damage per tick
if ((pXSprite->burnTime > 0) || fixBurnGlitch)
{ {
switch (pSprite->type) switch (pSprite->type)
{ {

View file

@ -1110,10 +1110,16 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType
case kDudeTinyCaleb: case kDudeTinyCaleb:
if (nDmgType == kDamageBurn && pXSprite->health <= (unsigned int)pDudeInfo->fleeHealth/* && (pXSprite->at17_6 != 1 || pXSprite->at17_6 != 2)*/) if (nDmgType == kDamageBurn && pXSprite->health <= (unsigned int)pDudeInfo->fleeHealth/* && (pXSprite->at17_6 != 1 || pXSprite->at17_6 != 2)*/)
{ {
pSprite->type = kDudeBurningInnocent;
if (!VanillaMode() && !DemoRecordStatus()) // fix burning sprite for tiny caleb if (!VanillaMode() && !DemoRecordStatus()) // fix burning sprite for tiny caleb
{
pSprite->type = kDudeBurningTinyCaleb; pSprite->type = kDudeBurningTinyCaleb;
aiNewState(actor, &tinycalebBurnGoto); aiNewState(actor, &tinycalebBurnGoto);
}
else
{
pSprite->type = kDudeBurningInnocent;
aiNewState(actor, &cultistBurnGoto);
}
aiPlay3DSound(pSprite, 361, AI_SFX_PRIORITY_0, -1); aiPlay3DSound(pSprite, 361, AI_SFX_PRIORITY_0, -1);
gDudeExtra[pSprite->extra].time = PlayClock+360; gDudeExtra[pSprite->extra].time = PlayClock+360;
actHealDude(pXSprite, dudeInfo[39].startHealth, dudeInfo[39].startHealth); actHealDude(pXSprite, dudeInfo[39].startHealth, dudeInfo[39].startHealth);