moved the burn states into their respective actors.

This allowed getting rid of a few switch/case blocks
This commit is contained in:
Christoph Oelckers 2023-10-11 20:56:49 +02:00
parent 5ed69f4965
commit d0621535bf
5 changed files with 66 additions and 216 deletions

View file

@ -104,6 +104,12 @@ xx(BloodMissileBase)
xx(gibtype)
xx(explodeSound)
xx(BurnIdle)
xx(BurnChase)
xx(BurnGoto)
xx(BurnSearch)
xx(BurnAttack)
// Blood state names. Most of these can be removed after the state system refactor is complete.
xx(genIdle)
xx(genRecoil)
@ -164,36 +170,6 @@ xx(eelDodgeUpLeft)
xx(eelDodgeDown)
xx(eelDodgeDownRight)
xx(eelDodgeDownLeft)
xx(cultistBurnIdle)
xx(cultistBurnChase)
xx(cultistBurnGoto)
xx(cultistBurnSearch)
xx(cultistBurnAttack)
xx(zombieABurnChase)
xx(zombieABurnGoto)
xx(zombieABurnSearch)
xx(zombieABurnAttack)
xx(zombieFBurnChase)
xx(zombieFBurnGoto)
xx(zombieFBurnSearch)
xx(zombieFBurnAttack)
xx(innocentBurnChase)
xx(innocentBurnGoto)
xx(innocentBurnSearch)
xx(innocentBurnAttack)
xx(beastBurnChase)
xx(beastBurnGoto)
xx(beastBurnSearch)
xx(beastBurnAttack)
xx(tinycalebBurnChase)
xx(tinycalebBurnGoto)
xx(tinycalebBurnSearch)
xx(tinycalebBurnAttack)
xx(genDudeBurnIdle)
xx(genDudeBurnChase)
xx(genDudeBurnGoto)
xx(genDudeBurnSearch)
xx(genDudeBurnAttack)
xx(tinycalebIdle)
xx(tinycalebChase)
xx(tinycalebDodge)

View file

@ -1154,7 +1154,7 @@ static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType)
if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal)
{
actor->ChangeType(kDudeBurningCultist);
aiNewState(actor, NAME_cultistBurnGoto);
aiNewState(actor, NAME_BurnGoto);
actHealDude(actor, actor->startHealth(), actor->startHealth());
return true;
}
@ -1164,7 +1164,7 @@ static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType)
if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal)
{
actor->ChangeType(kDudeBurningBeast);
aiNewState(actor, NAME_beastBurnGoto);
aiNewState(actor, NAME_BurnGoto);
actHealDude(actor, actor->startHealth(), actor->startHealth());
return true;
}
@ -1174,7 +1174,7 @@ static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType)
if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal)
{
actor->ChangeType(kDudeBurningInnocent);
aiNewState(actor, NAME_innocentBurnGoto);
aiNewState(actor, NAME_BurnGoto);
actHealDude(actor, actor->startHealth(), actor->startHealth());
return true;
}
@ -1186,7 +1186,7 @@ static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType)
if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal)
{
actor->ChangeType(kDudeBurningTinyCaleb);
aiNewState(actor, NAME_tinycalebBurnGoto);
aiNewState(actor, NAME_BurnGoto);
actHealDude(actor, actor->startHealth(), actor->startHealth());
return true;
}

View file

@ -456,10 +456,6 @@ void aiActivateDude(DBloodActor* actor)
}
break;
}
case kDudeModernCustomBurning:
if (actor->GetTarget() == nullptr) aiGenDudeNewState(actor, &genDudeBurnSearch);
else aiGenDudeNewState(actor, &genDudeBurnChase);
break;
#endif
case kDudeCultistTommyProne:
{
@ -535,12 +531,6 @@ void aiActivateDude(DBloodActor* actor)
}
break;
}
case kDudeBurningCultist:
if (actor->GetTarget() == nullptr)
aiNewState(actor, NAME_cultistBurnSearch);
else
aiNewState(actor, NAME_cultistBurnChase);
break;
case kDudeBat:
{
@ -661,18 +651,15 @@ void aiActivateDude(DBloodActor* actor)
}
break;
}
case kDudeBurningCultist:
case kDudeBurningZombieAxe:
if (actor->GetTarget() == nullptr)
aiNewState(actor, NAME_zombieABurnSearch);
else
aiNewState(actor, NAME_zombieABurnChase);
break;
case kDudeBurningZombieButcher:
if (actor->GetTarget() == nullptr)
aiNewState(actor, NAME_zombieFBurnSearch);
aiNewState(actor, NAME_BurnSearch);
else
aiNewState(actor, NAME_zombieFBurnChase);
aiNewState(actor, NAME_BurnChase);
break;
case kDudeGargoyleFlesh: {
actor->dudeExtra.thinkTime = 0;
@ -1016,7 +1003,7 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType
else if (nDmgType == kDamageBurn && actor->xspr.health <= (unsigned int)actor->fleeHealth()/* && (actor->xspr.at17_6 != 1 || actor->xspr.at17_6 != 2)*/)
{
actor->ChangeType(kDudeBurningCultist);
aiNewState(actor, NAME_cultistBurnGoto);
aiNewState(actor, NAME_BurnGoto);
aiPlay3DSound(actor, 361, AI_SFX_PRIORITY_0, -1);
aiPlay3DSound(actor, 1031 + Random(2), AI_SFX_PRIORITY_2, -1);
actor->dudeExtra.time = PlayClock + 360;
@ -1028,7 +1015,7 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType
if (nDmgType == kDamageBurn && actor->xspr.health <= (unsigned int)actor->fleeHealth()/* && (actor->xspr.at17_6 != 1 || actor->xspr.at17_6 != 2)*/)
{
actor->ChangeType(kDudeBurningInnocent);
aiNewState(actor, NAME_cultistBurnGoto);
aiNewState(actor, NAME_BurnGoto);
aiPlay3DSound(actor, 361, AI_SFX_PRIORITY_0, -1);
actor->dudeExtra.time = PlayClock + 360;
actHealDude(actor, actor->startHealth(), actor->startHealth());
@ -1066,7 +1053,7 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType
aiPlay3DSound(actor, 361, AI_SFX_PRIORITY_0, -1);
aiPlay3DSound(actor, 1202, AI_SFX_PRIORITY_2, -1);
actor->ChangeType(kDudeBurningZombieButcher);
aiNewState(actor, NAME_zombieFBurnGoto);
aiNewState(actor, NAME_BurnGoto);
actHealDude(actor, actor->startHealth(), actor->startHealth());
evKillActor(actor, AF(fxFlameLick));
}
@ -1077,12 +1064,12 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType
if (!cl_bloodvanillaenemies && !VanillaMode()) // fix burning sprite for tiny caleb
{
actor->ChangeType(kDudeBurningTinyCaleb);
aiNewState(actor, NAME_tinycalebBurnGoto);
aiNewState(actor, NAME_BurnGoto);
}
else
{
actor->ChangeType(kDudeBurningInnocent);
aiNewState(actor, NAME_cultistBurnGoto);
aiNewState(actor, NAME_BurnGoto);
}
aiPlay3DSound(actor, 361, AI_SFX_PRIORITY_0, -1);
actor->dudeExtra.time = PlayClock + 360;
@ -1106,7 +1093,7 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType
aiPlay3DSound(actor, 361, AI_SFX_PRIORITY_0, -1);
aiPlay3DSound(actor, 1106, AI_SFX_PRIORITY_2, -1);
actor->ChangeType(kDudeBurningZombieAxe);
aiNewState(actor, NAME_zombieABurnGoto);
aiNewState(actor, NAME_BurnGoto);
actHealDude(actor, actor->startHealth(), actor->startHealth());
evKillActor(actor, AF(fxFlameLick));
}
@ -1214,7 +1201,7 @@ void RecoilDude(DBloodActor* actor)
}
break;
case kDudeBurningCultist:
aiNewState(actor, NAME_cultistBurnGoto);
aiNewState(actor, NAME_BurnGoto);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
@ -1240,11 +1227,11 @@ void RecoilDude(DBloodActor* actor)
break;
case kDudeBurningZombieAxe:
aiPlay3DSound(actor, 1106, AI_SFX_PRIORITY_2, -1);
aiNewState(actor, NAME_zombieABurnGoto);
aiNewState(actor, NAME_BurnGoto);
break;
case kDudeBurningZombieButcher:
aiPlay3DSound(actor, 1202, AI_SFX_PRIORITY_2, -1);
aiNewState(actor, NAME_zombieFBurnGoto);
aiNewState(actor, NAME_BurnGoto);
break;
case kDudeGargoyleFlesh:
case kDudeGargoyleStone:

View file

@ -49,32 +49,7 @@ void burnThinkGoto(DBloodActor* actor)
aiChooseDirection(actor, nAngle);
if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < actor->Periphery())
{
switch (actor->GetType())
{
case kDudeBurningCultist:
aiNewState(actor, NAME_cultistBurnSearch);
break;
case kDudeBurningZombieAxe:
aiNewState(actor, NAME_zombieABurnSearch);
break;
case kDudeBurningZombieButcher:
aiNewState(actor, NAME_zombieFBurnSearch);
break;
case kDudeBurningInnocent:
aiNewState(actor, NAME_innocentBurnSearch);
break;
case kDudeBurningBeast:
aiNewState(actor, NAME_beastBurnSearch);
break;
case kDudeBurningTinyCaleb:
aiNewState(actor, NAME_tinycalebBurnSearch);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
aiNewState(actor, NAME_genDudeBurnSearch);
break;
#endif
}
aiNewState(actor, NAME_BurnSearch);
}
aiThinkTarget(actor);
}
@ -83,32 +58,7 @@ void burnThinkChase(DBloodActor* actor)
{
if (actor->GetTarget() == nullptr)
{
switch (actor->GetType())
{
case kDudeBurningCultist:
aiNewState(actor, NAME_cultistBurnGoto);
break;
case kDudeBurningZombieAxe:
aiNewState(actor, NAME_zombieABurnGoto);
break;
case kDudeBurningZombieButcher:
aiNewState(actor, NAME_zombieFBurnGoto);
break;
case kDudeBurningInnocent:
aiNewState(actor, NAME_innocentBurnGoto);
break;
case kDudeBurningBeast:
aiNewState(actor, NAME_beastBurnGoto);
break;
case kDudeBurningTinyCaleb:
aiNewState(actor, NAME_tinycalebBurnGoto);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
aiNewState(actor, NAME_genDudeBurnGoto);
break;
#endif
}
aiNewState(actor, NAME_BurnGoto);
return;
}
assert(actor->IsDudeActor());
@ -121,32 +71,7 @@ void burnThinkChase(DBloodActor* actor)
aiChooseDirection(actor, nAngle);
if (target->xspr.health == 0)
{
switch (actor->GetType())
{
case kDudeBurningCultist:
aiNewState(actor, NAME_cultistBurnSearch);
break;
case kDudeBurningZombieAxe:
aiNewState(actor, NAME_zombieABurnSearch);
break;
case kDudeBurningZombieButcher:
aiNewState(actor, NAME_zombieFBurnSearch);
break;
case kDudeBurningInnocent:
aiNewState(actor, NAME_innocentBurnSearch);
break;
case kDudeBurningBeast:
aiNewState(actor, NAME_beastBurnSearch);
break;
case kDudeBurningTinyCaleb:
aiNewState(actor, NAME_tinycalebBurnSearch);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
aiNewState(actor, NAME_genDudeBurnSearch);
break;
#endif
}
aiNewState(actor, NAME_BurnSearch);
return;
}
@ -161,64 +86,13 @@ void burnThinkChase(DBloodActor* actor)
aiSetTarget(actor, actor->GetTarget());
if (nDist < 51.1875 && nDeltaAngle < DAngle15)
{
switch (actor->GetType())
{
case kDudeBurningCultist:
aiNewState(actor, NAME_cultistBurnAttack);
break;
case kDudeBurningZombieAxe:
aiNewState(actor, NAME_zombieABurnAttack);
break;
case kDudeBurningZombieButcher:
aiNewState(actor, NAME_zombieFBurnAttack);
break;
case kDudeBurningInnocent:
aiNewState(actor, NAME_innocentBurnAttack);
break;
case kDudeBurningBeast:
aiNewState(actor, NAME_beastBurnAttack);
break;
case kDudeBurningTinyCaleb:
aiNewState(actor, NAME_tinycalebBurnAttack);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
aiNewState(actor, NAME_genDudeBurnSearch);
break;
#endif
}
aiNewState(actor, NAME_BurnAttack);
}
return;
}
}
}
switch (actor->GetType())
{
case kDudeBurningCultist:
aiNewState(actor, NAME_cultistBurnGoto);
break;
case kDudeBurningZombieAxe:
aiNewState(actor, NAME_zombieABurnGoto);
break;
case 242:
aiNewState(actor, NAME_zombieFBurnGoto);
break;
case kDudeBurningInnocent:
aiNewState(actor, NAME_innocentBurnGoto);
break;
case kDudeBurningBeast:
aiNewState(actor, NAME_beastBurnGoto);
break;
case kDudeBurningTinyCaleb:
aiNewState(actor, NAME_tinycalebBurnGoto);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
aiNewState(actor, NAME_genDudeBurnSearch);
break;
#endif
}
aiNewState(actor, NAME_BurnGoto);
actor->SetTarget(nullptr);
}

View file

@ -114,31 +114,6 @@ class BloodDudeBase : Bloodactor
AISTATE "eelDodgeDown", "+0", 2, 120, null, null, eelMoveDodgeDown, null, "eelChase";
AISTATE "eelDodgeDownRight", "+0", 2, 90, null, null, eelMoveDodgeDown, null, "eelChase";
AISTATE "eelDodgeDownLeft", "+0", 2, 90, null, null, eelMoveDodgeDown, null, "eelChase";
AISTATE "cultistBurnIdle", "+3", 0, 0, null, null, null, aiThinkTarget, "none";
AISTATE "cultistBurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "cultistBurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "cultistBurnSearch";
AISTATE "cultistBurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "cultistBurnSearch";
AISTATE "cultistBurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "cultistBurnChase";
AISTATE "zombieABurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "zombieABurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "zombieABurnSearch";
AISTATE "zombieABurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "none";
AISTATE "zombieABurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "zombieABurnChase";
AISTATE "zombieFBurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "zombieFBurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "zombieFBurnSearch";
AISTATE "zombieFBurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "none";
AISTATE "zombieFBurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "zombieFBurnChase";
AISTATE "innocentBurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "innocentBurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "zombieFBurnSearch";
AISTATE "innocentBurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "none";
AISTATE "innocentBurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "zombieFBurnChase";
AISTATE "beastBurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "beastBurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "beastBurnSearch";
AISTATE "beastBurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "beastBurnSearch";
AISTATE "beastBurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "beastBurnChase";
AISTATE "tinycalebBurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "tinycalebBurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "tinycalebBurnSearch";
AISTATE "tinycalebBurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "tinycalebBurnSearch";
AISTATE "tinycalebBurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "tinycalebBurnChase";
AISTATE "tinycalebIdle", "+0", 0, 0, null, null, null, aiThinkTarget, "none";
AISTATE "tinycalebChase", "+6", 4, 0, null, null, aiMoveForward, calebThinkChase, "none";
AISTATE "tinycalebDodge", "+6", 2, 90, null, null, aiMoveDodge, null, "tinycalebChase";
@ -1342,9 +1317,18 @@ class BloodDudeBurningInnocent : BloodDudeBase
gibtype 7, 5, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
AISTATE "BurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "BurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "BurnSearch";
AISTATE "BurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "none";
AISTATE "BurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "BurnChase";
explodesound 717;
+BloodDudeBase.burning;
}
states
{
}
}
class BloodDudeBurningCultist : BloodDudeBase
@ -1371,6 +1355,12 @@ class BloodDudeBurningCultist : BloodDudeBase
gibtype 7, 5, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
//AISTATE "BurnIdle", "+3", 0, 0, null, null, null, aiThinkTarget, "none"; //unused
AISTATE "BurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "BurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "BurnSearch";
AISTATE "BurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "BurnSearch";
AISTATE "BurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "BurnChase";
explodesound 717;
+BloodDudeBase.burning;
}
@ -1401,6 +1391,12 @@ class BloodDudeBurningZombieAxe : BloodDudeBase
turnrange 28.125;
gibtype 7, 5, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
AISTATE "BurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "BurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "BurnSearch";
AISTATE "BurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "none";
AISTATE "BurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "BurnChase";
+BloodDudeBase.burning;
}
}
@ -1430,6 +1426,12 @@ class BloodDudeBurningZombieButcher : BloodDudeBase
turnrange 17.578125;
gibtype 7, 5, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
AISTATE "BurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "BurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "BurnSearch";
AISTATE "BurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "none";
AISTATE "BurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "BurnChase";
+BloodDudeBase.burning;
}
}
@ -1731,6 +1733,11 @@ class BloodDudeBurningTinyCaleb : BloodDudeBase
gibtype 7, -1, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
AISTATE "BurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "BurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "BurnSearch";
AISTATE "BurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "BurnSearch";
AISTATE "BurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "BurnChase";
explodesound 717;
+BloodDudeBase.burning;
}
@ -1762,6 +1769,12 @@ class BloodDudeBurningBeast : BloodDudeBase
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
AISTATE "BurnChase", "+3", 4, 0, null, null, aiMoveForward, burnThinkChase, "none";
AISTATE "BurnGoto", "+3", 2, 3600, null, null, aiMoveForward, burnThinkGoto, "BurnSearch";
AISTATE "BurnSearch", "+3", 3, 3600, null, null, aiMoveForward, burnThinkSearch, "BurnSearch";
AISTATE "BurnAttack", "+3", 4, 120, BurnSeqCallback, null, null, null, "BurnChase";
+BloodDudeBase.burning;
}
}