From d0621535bfc650650f8e07e9e6edb51c5a53f7c1 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Wed, 11 Oct 2023 20:56:49 +0200 Subject: [PATCH] moved the burn states into their respective actors. This allowed getting rid of a few switch/case blocks --- source/core/namedef_custom.h | 36 +---- source/games/blood/src/actor.cpp | 8 +- source/games/blood/src/ai.cpp | 39 ++--- source/games/blood/src/aiburn.cpp | 136 +----------------- .../zscript/games/blood/actors/dudes.zs | 63 ++++---- 5 files changed, 66 insertions(+), 216 deletions(-) diff --git a/source/core/namedef_custom.h b/source/core/namedef_custom.h index 9ec131bb5..8c6b50fa8 100644 --- a/source/core/namedef_custom.h +++ b/source/core/namedef_custom.h @@ -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) diff --git a/source/games/blood/src/actor.cpp b/source/games/blood/src/actor.cpp index 1e260d3cb..1efc7d42e 100644 --- a/source/games/blood/src/actor.cpp +++ b/source/games/blood/src/actor.cpp @@ -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; } diff --git a/source/games/blood/src/ai.cpp b/source/games/blood/src/ai.cpp index d2fd35365..fa4dfd092 100644 --- a/source/games/blood/src/ai.cpp +++ b/source/games/blood/src/ai.cpp @@ -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: diff --git a/source/games/blood/src/aiburn.cpp b/source/games/blood/src/aiburn.cpp index 76629df8a..8242cf125 100644 --- a/source/games/blood/src/aiburn.cpp +++ b/source/games/blood/src/aiburn.cpp @@ -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); } diff --git a/wadsrc/static/zscript/games/blood/actors/dudes.zs b/wadsrc/static/zscript/games/blood/actors/dudes.zs index 9b86c7b15..ecdde229d 100644 --- a/wadsrc/static/zscript/games/blood/actors/dudes.zs +++ b/wadsrc/static/zscript/games/blood/actors/dudes.zs @@ -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; } }