From a7317e700d6a2e79ff652365852325b87ef222be Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 7 Oct 2023 21:03:25 +0200 Subject: [PATCH] use the script defined states. Not fully working yet. --- source/core/namedef_custom.h | 317 +++++++++++++- source/core/states.h | 6 +- source/games/blood/src/actor.cpp | 27 +- source/games/blood/src/ai.cpp | 371 ++++++++-------- source/games/blood/src/ai.h | 3 +- source/games/blood/src/aibat.cpp | 44 +- source/games/blood/src/aibeast.cpp | 62 +-- source/games/blood/src/aiboneel.cpp | 46 +- source/games/blood/src/aiburn.cpp | 70 +-- source/games/blood/src/aicaleb.cpp | 52 +-- source/games/blood/src/aicerber.cpp | 44 +- source/games/blood/src/aicult.cpp | 148 +++---- source/games/blood/src/aigarg.cpp | 42 +- source/games/blood/src/aighost.cpp | 28 +- source/games/blood/src/aigilbst.cpp | 52 +-- source/games/blood/src/aihand.cpp | 14 +- source/games/blood/src/aihound.cpp | 14 +- source/games/blood/src/aiinnoc.cpp | 12 +- source/games/blood/src/aipod.cpp | 20 +- source/games/blood/src/airat.cpp | 12 +- source/games/blood/src/aispid.cpp | 20 +- source/games/blood/src/aistate.h | 2 +- source/games/blood/src/aitchern.cpp | 20 +- source/games/blood/src/aizomba.cpp | 22 +- source/games/blood/src/aizombf.cpp | 34 +- source/games/blood/src/animatesprite.cpp | 4 +- source/games/blood/src/blood.cpp | 19 +- source/games/blood/src/bloodactor.h | 2 +- source/games/blood/src/loadsave.cpp | 409 +----------------- source/games/blood/src/mapstructs.h | 2 +- source/games/blood/src/nnexts.cpp | 2 +- .../zscript/games/blood/actors/dudes.zs | 3 +- 32 files changed, 935 insertions(+), 988 deletions(-) diff --git a/source/core/namedef_custom.h b/source/core/namedef_custom.h index a1eb4878d..5360fed7f 100644 --- a/source/core/namedef_custom.h +++ b/source/core/namedef_custom.h @@ -100,4 +100,319 @@ xx(ExtraSound5) xx(ExtraSound6) xx(CloseAttackPercent) xx(AttackPercent) -xx(BloodMissileBase) \ No newline at end of file +xx(BloodMissileBase) + +// Blood state names. Most of these can be removed after the state system refactor is complete. +xx(genIdle) +xx(genRecoil) +xx(batIdle) +xx(batFlyIdle) +xx(batChase) +xx(batPonder) +xx(batGoto) +xx(batBite) +xx(batRecoil) +xx(batSearch) +xx(batSwoop) +xx(batFly) +xx(batTurn) +xx(batHide) +xx(batDodgeUp) +xx(batDodgeUpRight) +xx(batDodgeUpLeft) +xx(batDodgeDown) +xx(batDodgeDownRight) +xx(batDodgeDownLeft) +xx(beastIdle) +xx(beastChase) +xx(beastDodge) +xx(beastGoto) +xx(beastSlash) +xx(beastStomp) +xx(beastSearch) +xx(beastRecoil) +xx(beastTeslaRecoil) +xx(beastSwimIdle) +xx(beastSwimChase) +xx(beastSwimDodge) +xx(beastSwimGoto) +xx(beastSwimSearch) +xx(beastSwimSlash) +xx(beastSwimRecoil) +xx(beastMorphToBeast) +xx(beastMorphFromCultist) +xx(beastMoveSwimChaseAlt) +xx(beastSwimAttack) +xx(beastSwimTurn) +xx(eelIdle) +xx(eelFlyIdle) +xx(eelChase) +xx(eelPonder) +xx(eelGoto) +xx(eelBite) +xx(eelRecoil) +xx(eelSearch) +xx(eelSwoop) +xx(eelFly) +xx(eelTurn) +xx(eelHide) +xx(eelDodgeUp) +xx(eelDodgeUpRight) +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) +xx(tinycalebGoto) +xx(tinycalebAttack) +xx(tinycalebSearch) +xx(tinycalebRecoil) +xx(tinycalebTeslaRecoil) +xx(tinycalebSwimIdle) +xx(tinycalebSwimChase) +xx(tinycalebSwimDodge) +xx(tinycalebSwimGoto) +xx(tinycalebSwimSearch) +xx(tinycalebSwimAttack) +xx(tinycalebSwimRecoil) +xx(tinycalebSwimUnused) +xx(tinycalebSwimMoveIn) +xx(tinycalebSwimTurn) +xx(cerberusIdle) +xx(cerberusSearch) +xx(cerberusChase) +xx(cerberusRecoil) +xx(cerberusTeslaRecoil) +xx(cerberusGoto) +xx(cerberusBite) +xx(cerberusBurn) +xx(cerberus3Burn) +xx(cerberus2Idle) +xx(cerberus2Search) +xx(cerberus2Chase) +xx(cerberus2Recoil) +xx(cerberus2Goto) +xx(cerberus2Bite) +xx(cerberus2Burn) +xx(cerberus4Burn) +xx(cerberusTurn1) +xx(cerberusTurn2) +xx(cultistIdle) +xx(cultistProneIdle) +xx(fanaticProneIdle) +xx(cultistProneIdle3) +xx(cultistChase) +xx(fanaticChase) +xx(cultistDodge) +xx(cultistGoto) +xx(cultistProneChase) +xx(cultistProneDodge) +xx(cultistTThrow) +xx(cultistSThrow) +xx(cultistTsThrow) +xx(cultistDThrow) +xx(cultistDThrow2) +xx(cultistDThrow3C) +xx(cultistDThrow3B) +xx(cultistDThrow3A) +xx(cultistDThrow4) +xx(cultistSearch) +xx(cultistSFire) +xx(cultistTFire) +xx(cultistTsFire) +xx(cultistSProneFire) +xx(cultistTProneFire) +xx(cultistTsProneFire) +xx(cultistTsProneFireFixed) +xx(cultistRecoil) +xx(cultistProneRecoil) +xx(cultistTeslaRecoil) +xx(cultistSwimIdle) +xx(cultistSwimChase) +xx(cultistSwimDodge) +xx(cultistSwimGoto) +xx(cultistSwimSearch) +xx(cultistSSwimFire) +xx(cultistTSwimFire) +xx(cultistTsSwimFire) +xx(cultistSwimRecoil) +xx(gargoyleFIdle) +xx(gargoyleStatueIdle) +xx(gargoyleFChase) +xx(gargoyleFGoto) +xx(gargoyleFSlash) +xx(gargoyleFThrow) +xx(gargoyleSThrow) +xx(gargoyleSBlast) +xx(gargoyleFRecoil) +xx(gargoyleFSearch) +xx(gargoyleFMorph2) +xx(gargoyleFMorph) +xx(gargoyleSMorph2) +xx(gargoyleSMorph) +xx(gargoyleSwoop) +xx(gargoyleFly) +xx(gargoyleTurn) +xx(gargoyleDodgeUp) +xx(gargoyleFDodgeUpRight) +xx(gargoyleFDodgeUpLeft) +xx(gargoyleDodgeDown) +xx(gargoyleFDodgeDownRight) +xx(gargoyleFDodgeDownLeft) +xx(statueFBreakSEQ) +xx(statueSBreakSEQ) +xx(ghostIdle) +xx(ghostChase) +xx(ghostGoto) +xx(ghostSlash) +xx(ghostThrow) +xx(ghostBlast) +xx(ghostRecoil) +xx(ghostTeslaRecoil) +xx(ghostSearch) +xx(ghostSwoop) +xx(ghostFly) +xx(ghostTurn) +xx(ghostDodgeUp) +xx(ghostDodgeUpRight) +xx(ghostDodgeUpLeft) +xx(ghostDodgeDown) +xx(ghostDodgeDownRight) +xx(ghostDodgeDownLeft) +xx(gillBeastIdle) +xx(gillBeastChase) +xx(gillBeastDodge) +xx(gillBeastGoto) +xx(gillBeastBite) +xx(gillBeastSearch) +xx(gillBeastRecoil) +xx(gillBeastSwimIdle) +xx(gillBeastSwimChase) +xx(gillBeastSwimDodge) +xx(gillBeastSwimGoto) +xx(gillBeastSwimSearch) +xx(gillBeastSwimBite) +xx(gillBeastSwimRecoil) +xx(gillBeastSwimUnused) +xx(gillBeastSwimMoveIn) +xx(gillBeastSwimTurn) +xx(handIdle) +xx(handChoke) +xx(handSearch) +xx(handChase) +xx(handRecoil) +xx(handGoto) +xx(handJump) +xx(houndIdle) +xx(houndSearch) +xx(houndChase) +xx(houndRecoil) +xx(houndTeslaRecoil) +xx(houndGoto) +xx(houndBite) +xx(houndBurn) +xx(innocentIdle) +xx(innocentSearch) +xx(innocentChase) +xx(innocentRecoil) +xx(innocentTeslaRecoil) +xx(innocentGoto) +xx(podIdle) +xx(podMove) +xx(podSearch) +xx(podStartChase) +xx(podRecoil) +xx(podChase) +xx(tentacleIdle) +xx(tentacle13A6A8) +xx(tentacle13A6C4) +xx(tentacle13A6E0) +xx(tentacle13A6FC) +xx(tentacleMove) +xx(tentacleSearch) +xx(tentacleStartChase) +xx(tentacleRecoil) +xx(tentacleChase) +xx(ratIdle) +xx(ratSearch) +xx(ratChase) +xx(ratDodge) +xx(ratRecoil) +xx(ratGoto) +xx(ratBite) +xx(spidIdle) +xx(spidChase) +xx(spidDodge) +xx(spidGoto) +xx(spidSearch) +xx(spidBite) +xx(spidJump) +xx(spidBirth) +xx(tchernobogIdle) +xx(tchernobogSearch) +xx(tchernobogChase) +xx(tchernobogRecoil) +xx(tchernobogGoto) +xx(tchernobogBurn1) +xx(tchernobogBurn2) +xx(tchernobogFireAtk) +xx(tchernobogTurn) +xx(zombieAIdle) +xx(zombieAChase) +xx(zombieAPonder) +xx(zombieAGoto) +xx(zombieAHack) +xx(zombieASearch) +xx(zombieARecoil) +xx(zombieATeslaRecoil) +xx(zombieARecoil2) +xx(zombieAStand) +xx(zombieEIdle) +xx(zombieEUp2) +xx(zombieEUp) +xx(zombie2Idle) +xx(zombie2Search) +xx(zombieSIdle) +xx(zombieEStand) +xx(zombieFIdle) +xx(zombieFChase) +xx(zombieFGoto) +xx(zombieFDodge) +xx(zombieFHack) +xx(zombieFPuke) +xx(zombieFThrow) +xx(zombieFSearch) +xx(zombieFRecoil) +xx(zombieFTeslaRecoil) diff --git a/source/core/states.h b/source/core/states.h index 3247f02d6..e52905dd5 100644 --- a/source/core/states.h +++ b/source/core/states.h @@ -156,11 +156,15 @@ struct FDefiningState int Type; int Tics; FName Label; - FName NextState; + FName NextStaten; VMFunction* ActionFunc; // called when an attached animation triggers an event. (i.e. Blood's SEQs. Should be made game independent.) VMFunction* EnterFunc; // called when entering the state. VMFunction* TickFunc; // called when ticking the state. VMFunction* MoveFunc; // called when moving the actor + + // these are only here so we can use this struct directly in the first stage of transitioning the states in Blood. + FDefiningState* NextState; + int seqId; }; struct FStateLabels; diff --git a/source/games/blood/src/actor.cpp b/source/games/blood/src/actor.cpp index 64254e3ec..727adda8b 100644 --- a/source/games/blood/src/actor.cpp +++ b/source/games/blood/src/actor.cpp @@ -1781,7 +1781,7 @@ static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType) if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal) { actor->ChangeType(kDudeBurningCultist); - aiNewState(actor, &cultistBurnGoto); + aiNewState(actor, NAME_cultistBurnGoto); actHealDude(actor, dudeInfo[40].startHealth, dudeInfo[40].startHealth); return true; } @@ -1791,7 +1791,7 @@ static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType) if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal) { actor->ChangeType(kDudeBurningBeast); - aiNewState(actor, &beastBurnGoto); + aiNewState(actor, NAME_beastBurnGoto); actHealDude(actor, dudeInfo[53].startHealth, dudeInfo[53].startHealth); return true; } @@ -1801,7 +1801,7 @@ static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType) if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal) { actor->ChangeType(kDudeBurningInnocent); - aiNewState(actor, &innocentBurnGoto); + aiNewState(actor, NAME_innocentBurnGoto); actHealDude(actor, dudeInfo[39].startHealth, dudeInfo[39].startHealth); return true; } @@ -1813,7 +1813,7 @@ static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType) if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal) { actor->ChangeType(kDudeBurningTinyCaleb); - aiNewState(actor, &tinycalebBurnGoto); + aiNewState(actor, NAME_tinycalebBurnGoto); actHealDude(actor, dudeInfo[39].startHealth, dudeInfo[39].startHealth); return true; } @@ -2527,7 +2527,6 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode) DUDEINFO* pDudeInfo = nullptr; bool pIsThing = false; - int nThingDamage = actorHit->dmgControl[kDamageBurn]; if (hitCode == 3 && actorHit) { @@ -2549,6 +2548,7 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode) DAMAGE_TYPE rand1 = (DAMAGE_TYPE)Random(7); int rand2 = (7 + Random(7)) << 4; int nDamage = actDamageSprite(missileOwner, actorHit, rand1, rand2); + int nThingDamage = actorHit->dmgControl[kDamageBurn]; if (nThingDamage != 0) actBurnSprite(missileActor->GetOwner(), actorHit, 360); @@ -2650,6 +2650,7 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode) sfxKill3DSound(missileActor, -1, -1); if ((hitCode == 3 && actorHit) && (pIsThing || pDudeInfo)) { + int nThingDamage = actorHit->dmgControl[kDamageBurn]; if (nThingDamage != 0) { if (pIsThing && actorHit->GetType() == kThingTNTBarrel && actorHit->xspr.burnTime == 0) @@ -3431,7 +3432,7 @@ void MoveDude(DBloodActor* actor) double tz = (actor->spr.pos.Z - top) / 4; double wdf = actor->clipdist; auto pSector = actor->sector(); - int nAiStateType = (actor->xspr.aiState) ? actor->xspr.aiState->stateType : -1; + int nAiStateType = (actor->xspr.aiState) ? actor->xspr.aiState->Type : -1; assert(pSector); @@ -3636,10 +3637,10 @@ void MoveDude(DBloodActor* actor) { case kDudeCultistTommy: case kDudeCultistShotgun: - aiNewState(actor, &cultistGoto); + aiNewState(actor, NAME_cultistGoto); break; case kDudeGillBeast: - aiNewState(actor, &gillBeastGoto); + aiNewState(actor, NAME_gillBeastGoto); actor->spr.flags |= 6; break; case kDudeBoneEel: @@ -3691,7 +3692,7 @@ void MoveDude(DBloodActor* actor) actor->xspr.burnTime = 0; evPostActor(actor, 0, AF(EnemyBubble)); sfxPlay3DSound(actor, 720, -1, 0); - aiNewState(actor, &cultistSwimGoto); + aiNewState(actor, NAME_cultistSwimGoto); break; case kDudeBurningCultist: { @@ -3705,26 +3706,26 @@ void MoveDude(DBloodActor* actor) actor->xspr.burnTime = 0; evPostActor(actor, 0, AF(EnemyBubble)); sfxPlay3DSound(actor, 720, -1, 0); - aiNewState(actor, &cultistSwimGoto); + aiNewState(actor, NAME_cultistSwimGoto); break; } case kDudeZombieAxeNormal: actor->xspr.burnTime = 0; evPostActor(actor, 0, AF(EnemyBubble)); sfxPlay3DSound(actor, 720, -1, 0); - aiNewState(actor, &zombieAGoto); + aiNewState(actor, NAME_zombieAGoto); break; case kDudeZombieButcher: actor->xspr.burnTime = 0; evPostActor(actor, 0, AF(EnemyBubble)); sfxPlay3DSound(actor, 720, -1, 0); - aiNewState(actor, &zombieFGoto); + aiNewState(actor, NAME_zombieFGoto); break; case kDudeGillBeast: actor->xspr.burnTime = 0; evPostActor(actor, 0, AF(EnemyBubble)); sfxPlay3DSound(actor, 720, -1, 0); - aiNewState(actor, &gillBeastSwimGoto); + aiNewState(actor, NAME_gillBeastSwimGoto); actor->spr.flags &= ~6; break; diff --git a/source/games/blood/src/ai.cpp b/source/games/blood/src/ai.cpp index b875eced8..bbbca38e1 100644 --- a/source/games/blood/src/ai.cpp +++ b/source/games/blood/src/ai.cpp @@ -80,10 +80,10 @@ void aiPlay3DSound(DBloodActor* actor, int soundid, AI_SFX_PRIORITY a3, int play // //--------------------------------------------------------------------------- -void aiNewState(DBloodActor* actor, AISTATE* pAIState) +void aiNewState(DBloodActor* actor, FDefiningState* pAIState) { DUDEINFO* pDudeInfo = getDudeInfo(actor); - actor->xspr.stateTimer = pAIState->stateTicks; + actor->xspr.stateTimer = pAIState->Tics; actor->xspr.aiState = pAIState; int seqStartId = pDudeInfo->seqStartID; @@ -91,11 +91,28 @@ void aiNewState(DBloodActor* actor, AISTATE* pAIState) { seqStartId += pAIState->seqId; if (getSequence(seqStartId)) - seqSpawn(seqStartId, actor, pAIState->funcId? *pAIState->funcId : nullptr); + seqSpawn(seqStartId, actor, pAIState->ActionFunc); } - if (pAIState->enterFunc) - callActorFunction(*pAIState->enterFunc, actor); + if (pAIState->EnterFunc) + callActorFunction(pAIState->EnterFunc, actor); +} + +void aiNewState(DBloodActor* actor, FName nAIState) +{ + auto cls = actor->GetClass(); + while (cls) + { + for (auto& state : static_cast(cls)->ActorInfo()->AIStates) + { + if (state.Label == nAIState) + { + aiNewState(actor, &state); + return; + } + } + cls = cls->ParentClass; + } } //--------------------------------------------------------------------------- @@ -364,11 +381,11 @@ void aiActivateDude(DBloodActor* actor) actor->dudeExtra.thinkTime = 0; actor->dudeExtra.active = 1; if (actor->GetTarget() == nullptr) - aiNewState(actor, &ghostSearch); + aiNewState(actor, NAME_ghostSearch); else { aiPlay3DSound(actor, 1600, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &ghostChase); + aiNewState(actor, NAME_ghostChase); } break; } @@ -385,7 +402,7 @@ void aiActivateDude(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &cultistSearch); + aiNewState(actor, NAME_cultistSearch); if (Chance(0x8000)) { if (actor->GetType() == kDudeCultistTommy) aiPlay3DSound(actor, 4008 + Random(5), AI_SFX_PRIORITY_1, -1); @@ -394,7 +411,7 @@ void aiActivateDude(DBloodActor* actor) break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &cultistSwimSearch); + aiNewState(actor, NAME_cultistSwimSearch); break; } } @@ -408,12 +425,12 @@ void aiActivateDude(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - if (actor->GetType() == kDudeCultistTommy) aiNewState(actor, &fanaticChase); - else aiNewState(actor, &cultistChase); + if (actor->GetType() == kDudeCultistTommy) aiNewState(actor, NAME_fanaticChase); + else aiNewState(actor, NAME_cultistChase); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &cultistSwimChase); + aiNewState(actor, NAME_cultistSwimChase); break; } } @@ -452,12 +469,12 @@ void aiActivateDude(DBloodActor* actor) switch (actor->xspr.medium) { case 0: - aiNewState(actor, &cultistSearch); + aiNewState(actor, NAME_cultistSearch); if (Chance(0x8000)) aiPlay3DSound(actor, 4008 + Random(5), AI_SFX_PRIORITY_1, -1); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &cultistSwimSearch); + aiNewState(actor, NAME_cultistSwimSearch); break; } } @@ -469,11 +486,11 @@ void aiActivateDude(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &cultistProneChase); + aiNewState(actor, NAME_cultistProneChase); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &cultistSwimChase); + aiNewState(actor, NAME_cultistSwimChase); break; } } @@ -489,13 +506,13 @@ void aiActivateDude(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &cultistSearch); + aiNewState(actor, NAME_cultistSearch); if (Chance(0x8000)) aiPlay3DSound(actor, 1008 + Random(5), AI_SFX_PRIORITY_1, -1); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &cultistSwimSearch); + aiNewState(actor, NAME_cultistSwimSearch); break; } } @@ -506,11 +523,11 @@ void aiActivateDude(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &cultistProneChase); + aiNewState(actor, NAME_cultistProneChase); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &cultistSwimChase); + aiNewState(actor, NAME_cultistSwimChase); break; } } @@ -518,9 +535,9 @@ void aiActivateDude(DBloodActor* actor) } case kDudeBurningCultist: if (actor->GetTarget() == nullptr) - aiNewState(actor, &cultistBurnSearch); + aiNewState(actor, NAME_cultistBurnSearch); else - aiNewState(actor, &cultistBurnChase); + aiNewState(actor, NAME_cultistBurnChase); break; case kDudeBat: { @@ -530,12 +547,12 @@ void aiActivateDude(DBloodActor* actor) if (!actor->spr.flags) actor->spr.flags = 9; if (actor->GetTarget() == nullptr) - aiNewState(actor, &batSearch); + aiNewState(actor, NAME_batSearch); else { if (Chance(0xa000)) aiPlay3DSound(actor, 2000, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &batChase); + aiNewState(actor, NAME_batChase); } break; } @@ -545,14 +562,14 @@ void aiActivateDude(DBloodActor* actor) actor->dudeExtra.thinkTime = 0; actor->dudeExtra.active = 1; if (actor->GetTarget() == nullptr) - aiNewState(actor, &eelSearch); + aiNewState(actor, NAME_eelSearch); else { if (Chance(0x8000)) aiPlay3DSound(actor, 1501, AI_SFX_PRIORITY_1, -1); else aiPlay3DSound(actor, 1500, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &eelChase); + aiNewState(actor, NAME_eelChase); } break; } @@ -566,9 +583,9 @@ void aiActivateDude(DBloodActor* actor) if (actor->GetTarget() == nullptr) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimSearch); + aiNewState(actor, NAME_gillBeastSwimSearch); else - aiNewState(actor, &gillBeastSearch); + aiNewState(actor, NAME_gillBeastSearch); } else { @@ -577,9 +594,9 @@ void aiActivateDude(DBloodActor* actor) else aiPlay3DSound(actor, 1700, AI_SFX_PRIORITY_1, -1); if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimChase); + aiNewState(actor, NAME_gillBeastSwimChase); else - aiNewState(actor, &gillBeastChase); + aiNewState(actor, NAME_gillBeastChase); } break; } @@ -588,7 +605,7 @@ void aiActivateDude(DBloodActor* actor) actor->dudeExtra.thinkTime = 1; if (actor->GetTarget() == nullptr) - aiNewState(actor, &zombieASearch); + aiNewState(actor, NAME_zombieASearch); else { if (Chance(0xa000)) @@ -608,7 +625,7 @@ void aiActivateDude(DBloodActor* actor) break; } } - aiNewState(actor, &zombieAChase); + aiNewState(actor, NAME_zombieAChase); } break; } @@ -616,14 +633,14 @@ void aiActivateDude(DBloodActor* actor) { actor->dudeExtra.thinkTime = 1; - if (actor->xspr.aiState == &zombieEIdle) aiNewState(actor, &zombieEUp); + if (actor->xspr.aiState->Label == NAME_zombieEIdle) aiNewState(actor, NAME_zombieEUp); break; } case kDudeZombieAxeLaying: { actor->dudeExtra.thinkTime = 1; - if (actor->xspr.aiState == &zombieSIdle) aiNewState(actor, &zombieEStand); + if (actor->xspr.aiState->Label == NAME_zombieSIdle) aiNewState(actor, NAME_zombieEStand); break; } case kDudeZombieButcher: @@ -631,42 +648,42 @@ void aiActivateDude(DBloodActor* actor) actor->dudeExtra.thinkTime = 1; if (actor->GetTarget() == nullptr) - aiNewState(actor, &zombieFSearch); + aiNewState(actor, NAME_zombieFSearch); else { if (Chance(0x4000)) aiPlay3DSound(actor, 1201, AI_SFX_PRIORITY_1, -1); else aiPlay3DSound(actor, 1200, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &zombieFChase); + aiNewState(actor, NAME_zombieFChase); } break; } case kDudeBurningZombieAxe: if (actor->GetTarget() == nullptr) - aiNewState(actor, &zombieABurnSearch); + aiNewState(actor, NAME_zombieABurnSearch); else - aiNewState(actor, &zombieABurnChase); + aiNewState(actor, NAME_zombieABurnChase); break; case kDudeBurningZombieButcher: if (actor->GetTarget() == nullptr) - aiNewState(actor, &zombieFBurnSearch); + aiNewState(actor, NAME_zombieFBurnSearch); else - aiNewState(actor, &zombieFBurnChase); + aiNewState(actor, NAME_zombieFBurnChase); break; case kDudeGargoyleFlesh: { actor->dudeExtra.thinkTime = 0; actor->dudeExtra.active = 1; if (actor->GetTarget() == nullptr) - aiNewState(actor, &gargoyleFSearch); + aiNewState(actor, NAME_gargoyleFSearch); else { if (Chance(0x4000)) aiPlay3DSound(actor, 1401, AI_SFX_PRIORITY_1, -1); else aiPlay3DSound(actor, 1400, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &gargoyleFChase); + aiNewState(actor, NAME_gargoyleFChase); } break; } @@ -676,14 +693,14 @@ void aiActivateDude(DBloodActor* actor) actor->dudeExtra.thinkTime = 0; actor->dudeExtra.active = 1; if (actor->GetTarget() == nullptr) - aiNewState(actor, &gargoyleFSearch); + aiNewState(actor, NAME_gargoyleFSearch); else { if (Chance(0x4000)) aiPlay3DSound(actor, 1451, AI_SFX_PRIORITY_1, -1); else aiPlay3DSound(actor, 1450, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &gargoyleFChase); + aiNewState(actor, NAME_gargoyleFChase); } break; } @@ -694,87 +711,87 @@ void aiActivateDude(DBloodActor* actor) // play gargoyle statue breaking animation if data1 = 1. if (gModernMap && actor->xspr.data1 == 1) { - if (actor->GetType() == kDudeGargoyleStatueFlesh) aiNewState(actor, &statueFBreakSEQ); - else aiNewState(actor, &statueSBreakSEQ); + if (actor->GetType() == kDudeGargoyleStatueFlesh) aiNewState(actor, NAME_statueFBreakSEQ); + else aiNewState(actor, NAME_statueSBreakSEQ); } else { if (Chance(0x4000)) aiPlay3DSound(actor, 1401, AI_SFX_PRIORITY_1, -1); else aiPlay3DSound(actor, 1400, AI_SFX_PRIORITY_1, -1); - if (actor->GetType() == kDudeGargoyleStatueFlesh) aiNewState(actor, &gargoyleFMorph); - else aiNewState(actor, &gargoyleSMorph); + if (actor->GetType() == kDudeGargoyleStatueFlesh) aiNewState(actor, NAME_gargoyleFMorph); + else aiNewState(actor, NAME_gargoyleSMorph); } #else if (Chance(0x4000)) aiPlay3DSound(actor, 1401, AI_SFX_PRIORITY_1, -1); else aiPlay3DSound(actor, 1400, AI_SFX_PRIORITY_1, -1); - if (actor->GetType() == kDudeGargoyleStatueFlesh) aiNewState(actor, &gargoyleFMorph); - else aiNewState(actor, &gargoyleSMorph); + if (actor->GetType() == kDudeGargoyleStatueFlesh) aiNewState(actor, NAME_gargoyleFMorph); + else aiNewState(actor, NAME_gargoyleSMorph); #endif break; case kDudeCerberusTwoHead: if (actor->GetTarget() == nullptr) - aiNewState(actor, &cerberusSearch); + aiNewState(actor, NAME_cerberusSearch); else { aiPlay3DSound(actor, 2300, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &cerberusChase); + aiNewState(actor, NAME_cerberusChase); } break; case kDudeCerberusOneHead: if (actor->GetTarget() == nullptr) - aiNewState(actor, &cerberus2Search); + aiNewState(actor, NAME_cerberus2Search); else { aiPlay3DSound(actor, 2300, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &cerberus2Chase); + aiNewState(actor, NAME_cerberus2Chase); } break; case kDudeHellHound: if (actor->GetTarget() == nullptr) - aiNewState(actor, &houndSearch); + aiNewState(actor, NAME_houndSearch); else { aiPlay3DSound(actor, 1300, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &houndChase); + aiNewState(actor, NAME_houndChase); } break; case kDudeHand: if (actor->GetTarget() == nullptr) - aiNewState(actor, &handSearch); + aiNewState(actor, NAME_handSearch); else { aiPlay3DSound(actor, 1900, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &handChase); + aiNewState(actor, NAME_handChase); } break; case kDudeRat: if (actor->GetTarget() == nullptr) - aiNewState(actor, &ratSearch); + aiNewState(actor, NAME_ratSearch); else { aiPlay3DSound(actor, 2100, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &ratChase); + aiNewState(actor, NAME_ratChase); } break; case kDudeInnocent: if (actor->GetTarget() == nullptr) - aiNewState(actor, &innocentSearch); + aiNewState(actor, NAME_innocentSearch); else { if (actor->xspr.health > 0) aiPlay3DSound(actor, 7000 + Random(6), AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &innocentChase); + aiNewState(actor, NAME_innocentChase); } break; case kDudeTchernobog: if (actor->GetTarget() == nullptr) - aiNewState(actor, &tchernobogSearch); + aiNewState(actor, NAME_tchernobogSearch); else { aiPlay3DSound(actor, 2350 + Random(7), AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &tchernobogChase); + aiNewState(actor, NAME_tchernobogChase); } break; case kDudeSpiderBrown: @@ -783,11 +800,11 @@ void aiActivateDude(DBloodActor* actor) actor->spr.flags |= 2; actor->spr.cstat &= ~CSTAT_SPRITE_YFLIP; if (actor->GetTarget() == nullptr) - aiNewState(actor, &spidSearch); + aiNewState(actor, NAME_spidSearch); else { aiPlay3DSound(actor, 1800, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &spidChase); + aiNewState(actor, NAME_spidChase); } break; case kDudeSpiderMother: @@ -797,11 +814,11 @@ void aiActivateDude(DBloodActor* actor) actor->spr.flags |= 2; actor->spr.cstat &= ~CSTAT_SPRITE_YFLIP; if (actor->GetTarget() == nullptr) - aiNewState(actor, &spidSearch); + aiNewState(actor, NAME_spidSearch); else { aiPlay3DSound(actor, 1853 + Random(1), AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &spidChase); + aiNewState(actor, NAME_spidChase); } break; } @@ -814,11 +831,11 @@ void aiActivateDude(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &tinycalebSearch); + aiNewState(actor, NAME_tinycalebSearch); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &tinycalebSwimSearch); + aiNewState(actor, NAME_tinycalebSwimSearch); break; } } @@ -827,11 +844,11 @@ void aiActivateDude(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &tinycalebChase); + aiNewState(actor, NAME_tinycalebChase); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &tinycalebSwimChase); + aiNewState(actor, NAME_tinycalebSwimChase); break; } } @@ -846,11 +863,11 @@ void aiActivateDude(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &beastSearch); + aiNewState(actor, NAME_beastSearch); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &beastSwimSearch); + aiNewState(actor, NAME_beastSwimSearch); break; } } @@ -860,11 +877,11 @@ void aiActivateDude(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &beastChase); + aiNewState(actor, NAME_beastChase); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &beastSwimChase); + aiNewState(actor, NAME_beastSwimChase); break; } } @@ -873,24 +890,24 @@ void aiActivateDude(DBloodActor* actor) case kDudePodGreen: case kDudePodFire: if (actor->GetTarget() == nullptr) - aiNewState(actor, &podSearch); + aiNewState(actor, NAME_podSearch); else { if (actor->GetType() == kDudePodFire) aiPlay3DSound(actor, 2453, AI_SFX_PRIORITY_1, -1); else aiPlay3DSound(actor, 2473, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &podChase); + aiNewState(actor, NAME_podChase); } break; case kDudeTentacleGreen: case kDudeTentacleFire: if (actor->GetTarget() == nullptr) - aiNewState(actor, &tentacleSearch); + aiNewState(actor, NAME_tentacleSearch); else { aiPlay3DSound(actor, 2503, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &tentacleChase); + aiNewState(actor, NAME_tentacleChase); } break; } @@ -1107,16 +1124,16 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType if (nDmgType != kDamageBurn) { if (!dudeIsPlayingSeq(actor, 14) && !actor->xspr.medium) - aiNewState(actor, &cultistDodge); + aiNewState(actor, NAME_cultistDodge); else if (dudeIsPlayingSeq(actor, 14) && !actor->xspr.medium) - aiNewState(actor, &cultistProneDodge); + aiNewState(actor, NAME_cultistProneDodge); else if (dudeIsPlayingSeq(actor, 13) && (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo)) - aiNewState(actor, &cultistSwimDodge); + aiNewState(actor, NAME_cultistSwimDodge); } else if (nDmgType == kDamageBurn && actor->xspr.health <= (unsigned int)pDudeInfo->fleeHealth/* && (actor->xspr.at17_6 != 1 || actor->xspr.at17_6 != 2)*/) { actor->ChangeType(kDudeBurningCultist); - aiNewState(actor, &cultistBurnGoto); + aiNewState(actor, NAME_cultistBurnGoto); aiPlay3DSound(actor, 361, AI_SFX_PRIORITY_0, -1); aiPlay3DSound(actor, 1031 + Random(2), AI_SFX_PRIORITY_2, -1); actor->dudeExtra.time = PlayClock + 360; @@ -1128,7 +1145,7 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType if (nDmgType == kDamageBurn && actor->xspr.health <= (unsigned int)pDudeInfo->fleeHealth/* && (actor->xspr.at17_6 != 1 || actor->xspr.at17_6 != 2)*/) { actor->ChangeType(kDudeBurningInnocent); - aiNewState(actor, &cultistBurnGoto); + aiNewState(actor, NAME_cultistBurnGoto); aiPlay3DSound(actor, 361, AI_SFX_PRIORITY_0, -1); actor->dudeExtra.time = PlayClock + 360; actHealDude(actor, dudeInfo[39].startHealth, dudeInfo[39].startHealth); @@ -1147,7 +1164,7 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType if (fixRandomCultist) // fix burning cultists randomly switching types underwater actor->ChangeType(actor->spr.inittype); // restore back to spawned cultist type actor->xspr.burnTime = 0; - aiNewState(actor, &cultistSwimGoto); + aiNewState(actor, NAME_cultistSwimGoto); } else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) { @@ -1155,18 +1172,18 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType if (fixRandomCultist) // fix burning cultists randomly switching types underwater actor->ChangeType(actor->spr.inittype); // restore back to spawned cultist type actor->xspr.burnTime = 0; - aiNewState(actor, &cultistSwimGoto); + aiNewState(actor, NAME_cultistSwimGoto); } break; case kDudeGargoyleFlesh: - aiNewState(actor, &gargoyleFChase); + aiNewState(actor, NAME_gargoyleFChase); break; case kDudeZombieButcher: if (nDmgType == kDamageBurn && actor->xspr.health <= (unsigned int)pDudeInfo->fleeHealth) { aiPlay3DSound(actor, 361, AI_SFX_PRIORITY_0, -1); aiPlay3DSound(actor, 1202, AI_SFX_PRIORITY_2, -1); actor->ChangeType(kDudeBurningZombieButcher); - aiNewState(actor, &zombieFBurnGoto); + aiNewState(actor, NAME_zombieFBurnGoto); actHealDude(actor, dudeInfo[42].startHealth, dudeInfo[42].startHealth); evKillActor(actor, AF(fxFlameLick)); } @@ -1177,12 +1194,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, &tinycalebBurnGoto); + aiNewState(actor, NAME_tinycalebBurnGoto); } else { actor->ChangeType(kDudeBurningInnocent); - aiNewState(actor, &cultistBurnGoto); + aiNewState(actor, NAME_cultistBurnGoto); } aiPlay3DSound(actor, 361, AI_SFX_PRIORITY_0, -1); actor->dudeExtra.time = PlayClock + 360; @@ -1195,7 +1212,7 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType { actor->ChangeType(kDudeBeast); aiPlay3DSound(actor, 9008, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &beastMorphFromCultist); + aiNewState(actor, NAME_beastMorphFromCultist); actHealDude(actor, dudeInfo[51].startHealth, dudeInfo[51].startHealth); } break; @@ -1206,7 +1223,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, &zombieABurnGoto); + aiNewState(actor, NAME_zombieABurnGoto); actHealDude(actor, dudeInfo[41].startHealth, dudeInfo[41].startHealth); evKillActor(actor, AF(fxFlameLick)); } @@ -1294,28 +1311,28 @@ void RecoilDude(DBloodActor* actor) if (!v4 && actor->xspr.medium == kMediumNormal) { - if (pDudeExtra->teslaHit) aiNewState(actor, &cultistTeslaRecoil); - else aiNewState(actor, &cultistRecoil); + if (pDudeExtra->teslaHit) aiNewState(actor, NAME_cultistTeslaRecoil); + else aiNewState(actor, NAME_cultistRecoil); } else if (v4 && actor->xspr.medium == kMediumNormal) { - if (pDudeExtra->teslaHit) aiNewState(actor, &cultistTeslaRecoil); - else if (gGameOptions.nDifficulty > 0) aiNewState(actor, &cultistProneRecoil); - else aiNewState(actor, &cultistRecoil); + if (pDudeExtra->teslaHit) aiNewState(actor, NAME_cultistTeslaRecoil); + else if (gGameOptions.nDifficulty > 0) aiNewState(actor, NAME_cultistProneRecoil); + else aiNewState(actor, NAME_cultistRecoil); } else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistSwimRecoil); + aiNewState(actor, NAME_cultistSwimRecoil); else { if (pDudeExtra->teslaHit) - aiNewState(actor, &cultistTeslaRecoil); + aiNewState(actor, NAME_cultistTeslaRecoil); else - aiNewState(actor, &cultistRecoil); + aiNewState(actor, NAME_cultistRecoil); } break; case kDudeBurningCultist: - aiNewState(actor, &cultistBurnGoto); + aiNewState(actor, NAME_cultistBurnGoto); break; #ifdef NOONE_EXTENSIONS case kDudeModernCustomBurning: @@ -1325,121 +1342,121 @@ void RecoilDude(DBloodActor* actor) case kDudeZombieButcher: aiPlay3DSound(actor, 1202, AI_SFX_PRIORITY_2, -1); if (pDudeExtra->teslaHit) - aiNewState(actor, &zombieFTeslaRecoil); + aiNewState(actor, NAME_zombieFTeslaRecoil); else - aiNewState(actor, &zombieFRecoil); + aiNewState(actor, NAME_zombieFRecoil); break; case kDudeZombieAxeNormal: case kDudeZombieAxeBuried: aiPlay3DSound(actor, 1106, AI_SFX_PRIORITY_2, -1); if (pDudeExtra->teslaHit && actor->xspr.data3 > pDudeInfo->startHealth / 3) - aiNewState(actor, &zombieATeslaRecoil); + aiNewState(actor, NAME_zombieATeslaRecoil); else if (actor->xspr.data3 > pDudeInfo->startHealth / 3) - aiNewState(actor, &zombieARecoil2); + aiNewState(actor, NAME_zombieARecoil2); else - aiNewState(actor, &zombieARecoil); + aiNewState(actor, NAME_zombieARecoil); break; case kDudeBurningZombieAxe: aiPlay3DSound(actor, 1106, AI_SFX_PRIORITY_2, -1); - aiNewState(actor, &zombieABurnGoto); + aiNewState(actor, NAME_zombieABurnGoto); break; case kDudeBurningZombieButcher: aiPlay3DSound(actor, 1202, AI_SFX_PRIORITY_2, -1); - aiNewState(actor, &zombieFBurnGoto); + aiNewState(actor, NAME_zombieFBurnGoto); break; case kDudeGargoyleFlesh: case kDudeGargoyleStone: aiPlay3DSound(actor, 1402, AI_SFX_PRIORITY_2, -1); - aiNewState(actor, &gargoyleFRecoil); + aiNewState(actor, NAME_gargoyleFRecoil); break; case kDudeCerberusTwoHead: aiPlay3DSound(actor, 2302 + Random(2), AI_SFX_PRIORITY_2, -1); if (pDudeExtra->teslaHit && actor->xspr.data3 > pDudeInfo->startHealth / 3) - aiNewState(actor, &cerberusTeslaRecoil); + aiNewState(actor, NAME_cerberusTeslaRecoil); else - aiNewState(actor, &cerberusRecoil); + aiNewState(actor, NAME_cerberusRecoil); break; case kDudeCerberusOneHead: aiPlay3DSound(actor, 2302 + Random(2), AI_SFX_PRIORITY_2, -1); - aiNewState(actor, &cerberus2Recoil); + aiNewState(actor, NAME_cerberus2Recoil); break; case kDudeHellHound: aiPlay3DSound(actor, 1302, AI_SFX_PRIORITY_2, -1); if (pDudeExtra->teslaHit) - aiNewState(actor, &houndTeslaRecoil); + aiNewState(actor, NAME_houndTeslaRecoil); else - aiNewState(actor, &houndRecoil); + aiNewState(actor, NAME_houndRecoil); break; case kDudeTchernobog: aiPlay3DSound(actor, 2370 + Random(2), AI_SFX_PRIORITY_2, -1); - aiNewState(actor, &tchernobogRecoil); + aiNewState(actor, NAME_tchernobogRecoil); break; case kDudeHand: aiPlay3DSound(actor, 1902, AI_SFX_PRIORITY_2, -1); - aiNewState(actor, &handRecoil); + aiNewState(actor, NAME_handRecoil); break; case kDudeRat: aiPlay3DSound(actor, 2102, AI_SFX_PRIORITY_2, -1); - aiNewState(actor, &ratRecoil); + aiNewState(actor, NAME_ratRecoil); break; case kDudeBat: aiPlay3DSound(actor, 2002, AI_SFX_PRIORITY_2, -1); - aiNewState(actor, &batRecoil); + aiNewState(actor, NAME_batRecoil); break; case kDudeBoneEel: aiPlay3DSound(actor, 1502, AI_SFX_PRIORITY_2, -1); - aiNewState(actor, &eelRecoil); + aiNewState(actor, NAME_eelRecoil); break; case kDudeGillBeast: { XSECTOR* pXSector = actor->sector()->hasX() ? &actor->sector()->xs() : nullptr; aiPlay3DSound(actor, 1702, AI_SFX_PRIORITY_2, -1); if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimRecoil); + aiNewState(actor, NAME_gillBeastSwimRecoil); else - aiNewState(actor, &gillBeastRecoil); + aiNewState(actor, NAME_gillBeastRecoil); break; } case kDudePhantasm: aiPlay3DSound(actor, 1602, AI_SFX_PRIORITY_2, -1); if (pDudeExtra->teslaHit) - aiNewState(actor, &ghostTeslaRecoil); + aiNewState(actor, NAME_ghostTeslaRecoil); else - aiNewState(actor, &ghostRecoil); + aiNewState(actor, NAME_ghostRecoil); break; case kDudeSpiderBrown: case kDudeSpiderRed: case kDudeSpiderBlack: aiPlay3DSound(actor, 1802 + Random(1), AI_SFX_PRIORITY_2, -1); - aiNewState(actor, &spidDodge); + aiNewState(actor, NAME_spidDodge); break; case kDudeSpiderMother: aiPlay3DSound(actor, 1851 + Random(1), AI_SFX_PRIORITY_2, -1); - aiNewState(actor, &spidDodge); + aiNewState(actor, NAME_spidDodge); break; case kDudeInnocent: aiPlay3DSound(actor, 7007 + Random(2), AI_SFX_PRIORITY_2, -1); if (pDudeExtra->teslaHit) - aiNewState(actor, &innocentTeslaRecoil); + aiNewState(actor, NAME_innocentTeslaRecoil); else - aiNewState(actor, &innocentRecoil); + aiNewState(actor, NAME_innocentRecoil); break; case kDudeTinyCaleb: if (actor->xspr.medium == kMediumNormal) { if (pDudeExtra->teslaHit) - aiNewState(actor, &tinycalebTeslaRecoil); + aiNewState(actor, NAME_tinycalebTeslaRecoil); else - aiNewState(actor, &tinycalebRecoil); + aiNewState(actor, NAME_tinycalebRecoil); } else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &tinycalebSwimRecoil); + aiNewState(actor, NAME_tinycalebSwimRecoil); else { if (pDudeExtra->teslaHit) - aiNewState(actor, &tinycalebTeslaRecoil); + aiNewState(actor, NAME_tinycalebTeslaRecoil); else - aiNewState(actor, &tinycalebRecoil); + aiNewState(actor, NAME_tinycalebRecoil); } break; case kDudeBeast: @@ -1447,30 +1464,30 @@ void RecoilDude(DBloodActor* actor) if (actor->xspr.medium == kMediumNormal) { if (pDudeExtra->teslaHit) - aiNewState(actor, &beastTeslaRecoil); + aiNewState(actor, NAME_beastTeslaRecoil); else - aiNewState(actor, &beastRecoil); + aiNewState(actor, NAME_beastRecoil); } else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &beastSwimRecoil); + aiNewState(actor, NAME_beastSwimRecoil); else { if (pDudeExtra->teslaHit) - aiNewState(actor, &beastTeslaRecoil); + aiNewState(actor, NAME_beastTeslaRecoil); else - aiNewState(actor, &beastRecoil); + aiNewState(actor, NAME_beastRecoil); } break; case kDudePodGreen: case kDudePodFire: - aiNewState(actor, &podRecoil); + aiNewState(actor, NAME_podRecoil); break; case kDudeTentacleGreen: case kDudeTentacleFire: - aiNewState(actor, &tentacleRecoil); + aiNewState(actor, NAME_tentacleRecoil); break; default: - aiNewState(actor, &genRecoil); + aiNewState(actor, NAME_genRecoil); break; } pDudeExtra->teslaHit = 0; @@ -1605,11 +1622,11 @@ void aiProcessDudes(void) if (actor->xspr.aiState) { - if (actor->xspr.aiState->moveFunc) - callActorFunction(*actor->xspr.aiState->moveFunc, actor); + if (actor->xspr.aiState->MoveFunc) + callActorFunction(actor->xspr.aiState->MoveFunc, actor); - if (actor->xspr.aiState->thinkFunc && (gFrameCount & 3) == (actor->GetIndex() & 3)) - callActorFunction(*actor->xspr.aiState->thinkFunc, actor); + if (actor->xspr.aiState->TickFunc && (gFrameCount & 3) == (actor->GetIndex() & 3)) + callActorFunction(actor->xspr.aiState->TickFunc, actor); } #ifdef NOONE_EXTENSIONS @@ -1632,11 +1649,11 @@ void aiProcessDudes(void) } default: #endif - if (actor->xspr.stateTimer == 0 && actor->xspr.aiState && actor->xspr.aiState->nextState) { - if (actor->xspr.aiState->stateTicks > 0) - aiNewState(actor, actor->xspr.aiState->nextState); + if (actor->xspr.stateTimer == 0 && actor->xspr.aiState && actor->xspr.aiState->NextState) { + if (actor->xspr.aiState->Tics > 0) + aiNewState(actor, actor->xspr.aiState->NextState); else if (seqGetStatus(actor) < 0) - aiNewState(actor, actor->xspr.aiState->nextState); + aiNewState(actor, actor->xspr.aiState->NextState); } if (actor->xspr.health > 0 && ((pDudeInfo->hinderDamage << 4) <= actor->cumulDamage)) @@ -1704,41 +1721,41 @@ void aiInitSprite(DBloodActor* actor) case kDudeCultistBeast: { actor->dudeExtra.active = 0; - aiNewState(actor, &cultistIdle); + aiNewState(actor, NAME_cultistIdle); break; } case kDudeCultistTommyProne: { actor->dudeExtra.active = 0; - aiNewState(actor, &fanaticProneIdle); + aiNewState(actor, NAME_fanaticProneIdle); break; } case kDudeCultistShotgunProne: { actor->dudeExtra.active = 0; - aiNewState(actor, &cultistProneIdle); + aiNewState(actor, NAME_cultistProneIdle); break; } case kDudeZombieButcher: { actor->dudeExtra.thinkTime = 0; - aiNewState(actor, &zombieFIdle); + aiNewState(actor, NAME_zombieFIdle); break; } case kDudeZombieAxeNormal: { actor->dudeExtra.thinkTime = 0; - aiNewState(actor, &zombieAIdle); + aiNewState(actor, NAME_zombieAIdle); break; } case kDudeZombieAxeLaying: { actor->dudeExtra.thinkTime = 0; - aiNewState(actor, &zombieSIdle); + aiNewState(actor, NAME_zombieSIdle); actor->spr.flags &= ~1; break; } case kDudeZombieAxeBuried: { actor->dudeExtra.thinkTime = 0; - aiNewState(actor, &zombieEIdle); + aiNewState(actor, NAME_zombieEIdle); actor->spr.flags &= ~1; break; } @@ -1746,61 +1763,61 @@ void aiInitSprite(DBloodActor* actor) case kDudeGargoyleStone: { actor->dudeExtra.thinkTime = 0; actor->dudeExtra.active = 0; - aiNewState(actor, &gargoyleFIdle); + aiNewState(actor, NAME_gargoyleFIdle); break; } case kDudeGargoyleStatueFlesh: case kDudeGargoyleStatueStone: - aiNewState(actor, &gargoyleStatueIdle); + aiNewState(actor, NAME_gargoyleStatueIdle); break; case kDudeCerberusTwoHead: { actor->dudeExtra.thinkTime = 0; - aiNewState(actor, &cerberusIdle); + aiNewState(actor, NAME_cerberusIdle); break; } case kDudeCerberusOneHead: { if (!VanillaMode()) { actor->dudeExtra.thinkTime = 0; - aiNewState(actor, &cerberus2Idle); + aiNewState(actor, NAME_cerberus2Idle); break; } - aiNewState(actor, &genIdle); + aiNewState(actor, NAME_genIdle); break; } case kDudeHellHound: - aiNewState(actor, &houndIdle); + aiNewState(actor, NAME_houndIdle); break; case kDudeHand: - aiNewState(actor, &handIdle); + aiNewState(actor, NAME_handIdle); break; case kDudePhantasm: { actor->dudeExtra.thinkTime = 0; actor->dudeExtra.active = 0; - aiNewState(actor, &ghostIdle); + aiNewState(actor, NAME_ghostIdle); break; } case kDudeInnocent: - aiNewState(actor, &innocentIdle); + aiNewState(actor, NAME_innocentIdle); break; case kDudeRat: - aiNewState(actor, &ratIdle); + aiNewState(actor, NAME_ratIdle); break; case kDudeBoneEel: { actor->dudeExtra.thinkTime = 0; actor->dudeExtra.active = 0; - aiNewState(actor, &eelIdle); + aiNewState(actor, NAME_eelIdle); break; } case kDudeGillBeast: - aiNewState(actor, &gillBeastIdle); + aiNewState(actor, NAME_gillBeastIdle); break; case kDudeBat: { actor->dudeExtra.thinkTime = 0; actor->dudeExtra.active = 0; - aiNewState(actor, &batIdle); + aiNewState(actor, NAME_batIdle); break; } case kDudeSpiderBrown: @@ -1809,36 +1826,36 @@ void aiInitSprite(DBloodActor* actor) { actor->dudeExtra.active = 0; actor->dudeExtra.thinkTime = 0; - aiNewState(actor, &spidIdle); + aiNewState(actor, NAME_spidIdle); break; } case kDudeSpiderMother: { actor->dudeExtra.active = 0; actor->dudeExtra.birthCounter = 0; - aiNewState(actor, &spidIdle); + aiNewState(actor, NAME_spidIdle); break; } case kDudeTchernobog: { actor->dudeExtra.active = 0; actor->dudeExtra.thinkTime = 0; - aiNewState(actor, &tchernobogIdle); + aiNewState(actor, NAME_tchernobogIdle); break; } case kDudeTinyCaleb: - aiNewState(actor, &tinycalebIdle); + aiNewState(actor, NAME_tinycalebIdle); break; case kDudeBeast: - aiNewState(actor, &beastIdle); + aiNewState(actor, NAME_beastIdle); break; case kDudePodGreen: case kDudePodFire: - aiNewState(actor, &podIdle); + aiNewState(actor, NAME_podIdle); break; case kDudeTentacleGreen: case kDudeTentacleFire: - aiNewState(actor, &tentacleIdle); + aiNewState(actor, NAME_tentacleIdle); break; #ifdef NOONE_EXTENSIONS case kDudeModernCustom: @@ -1849,7 +1866,7 @@ void aiInitSprite(DBloodActor* actor) break; #endif default: - aiNewState(actor, &genIdle); + aiNewState(actor, NAME_genIdle); break; } aiSetTarget(actor, DVector3(0, 0, 0)); diff --git a/source/games/blood/src/ai.h b/source/games/blood/src/ai.h index d44ec688d..70d5b23ef 100644 --- a/source/games/blood/src/ai.h +++ b/source/games/blood/src/ai.h @@ -68,7 +68,8 @@ extern const int gCultTeslaFireChance[5]; bool dudeIsPlayingSeq(DBloodActor* pSprite, int nSeq); void aiPlay3DSound(DBloodActor* pSprite, int a2, AI_SFX_PRIORITY a3, int a4); -void aiNewState(DBloodActor* actor, AISTATE *pAIState); +void aiNewState(DBloodActor* actor, FName pAIState); +void aiNewState(DBloodActor* actor, FDefiningState* pAIState); void aiChooseDirection(DBloodActor* actor, DAngle a3); void aiMoveForward(DBloodActor*pXSprite); void aiMoveTurn(DBloodActor*pXSprite); diff --git a/source/games/blood/src/aibat.cpp b/source/games/blood/src/aibat.cpp index 10e61d03b..ecd8495d7 100644 --- a/source/games/blood/src/aibat.cpp +++ b/source/games/blood/src/aibat.cpp @@ -87,7 +87,7 @@ static void batThinkTarget(DBloodActor* actor) actor->dudeExtra.thinkTime = 0; actor->xspr.goalAng += DAngle45; aiSetTarget(actor, actor->basePoint); - aiNewState(actor, &batTurn); + aiNewState(actor, NAME_batTurn); return; } if (Chance(pDudeInfo->alertChance)) @@ -140,7 +140,7 @@ static void batThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &batSearch); + aiNewState(actor, NAME_batSearch); batThinkTarget(actor); } @@ -148,7 +148,7 @@ static void batThinkPonder(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &batSearch); + aiNewState(actor, NAME_batSearch); return; } assert(actor->IsDudeActor()); @@ -159,7 +159,7 @@ static void batThinkPonder(DBloodActor* actor) aiChooseDirection(actor, dvec.Angle()); if (pTarget->xspr.health == 0) { - aiNewState(actor, &batSearch); + aiNewState(actor, NAME_batSearch); return; } double nDist = dvec.Length(); @@ -174,25 +174,25 @@ static void batThinkPonder(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (height2 - height < 48 && nDist < 0x180 && nDist > 0xc0 && nDeltaAngle < DAngle15) - aiNewState(actor, &batDodgeUp); + aiNewState(actor, NAME_batDodgeUp); else if (height2 - height > 0x50 && nDist < 0x180 && nDist > 0xc0 && nDeltaAngle < DAngle15) - aiNewState(actor, &batDodgeDown); + aiNewState(actor, NAME_batDodgeDown); else if (height2 - height < 0x20 && nDist < 0x20 && nDeltaAngle < DAngle15) - aiNewState(actor, &batDodgeUp); + aiNewState(actor, NAME_batDodgeUp); else if (height2 - height > 0x60 && nDist < 0x140 && nDist > 0x80 && nDeltaAngle < DAngle15) - aiNewState(actor, &batDodgeDown); + aiNewState(actor, NAME_batDodgeDown); else if (height2 - height < 0x20 && nDist < 0x140 && nDist > 0x80 && nDeltaAngle < DAngle15) - aiNewState(actor, &batDodgeUp); + aiNewState(actor, NAME_batDodgeUp); else if (height2 - height < 0x20 && nDeltaAngle < DAngle15 && nDist > 0x140) - aiNewState(actor, &batDodgeUp); + aiNewState(actor, NAME_batDodgeUp); else if (height2 - height > 0x40) - aiNewState(actor, &batDodgeDown); + aiNewState(actor, NAME_batDodgeDown); else - aiNewState(actor, &batDodgeUp); + aiNewState(actor, NAME_batDodgeUp); return; } } - aiNewState(actor, &batGoto); + aiNewState(actor, NAME_batGoto); actor->SetTarget(nullptr); } @@ -236,7 +236,7 @@ static void batThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &batGoto); + aiNewState(actor, NAME_batGoto); return; } assert(actor->IsDudeActor()); @@ -248,12 +248,12 @@ static void batThinkChase(DBloodActor* actor) aiChooseDirection(actor, dvec.Angle()); if (pTarget->xspr.health == 0) { - aiNewState(actor, &batSearch); + aiNewState(actor, NAME_batSearch); return; } if (pTarget->IsPlayerActor() && powerupCheck(getPlayer(pTarget), kPwUpShadowCloak) > 0) { - aiNewState(actor, &batSearch); + aiNewState(actor, NAME_batSearch); return; } double nDist = dvec.Length(); @@ -275,23 +275,23 @@ static void batThinkChase(DBloodActor* actor) double heightDelta = height2 - height; bool angWithinRange = nDeltaAngle < DAngle15; if (heightDelta < 32 && nDist < 0x20 && angWithinRange) - aiNewState(actor, &batBite); + aiNewState(actor, NAME_batBite); else if ((heightDelta > 80 || floorDelta > 80) && nDist < 0x140 && nDist > 0x80 && angWithinRange) - aiNewState(actor, &batSwoop); + aiNewState(actor, NAME_batSwoop); else if ((heightDelta < 48 || floorDelta < 48) && angWithinRange) - aiNewState(actor, &batFly); + aiNewState(actor, NAME_batFly); return; } } else { - aiNewState(actor, &batFly); + aiNewState(actor, NAME_batFly); return; } } actor->SetTarget(nullptr); - aiNewState(actor, &batHide); + aiNewState(actor, NAME_batHide); } static void batMoveForward(DBloodActor* actor) @@ -373,7 +373,7 @@ void batMoveToCeil(DBloodActor* actor) actor->dudeExtra.thinkTime = 0; actor->spr.flags = 0; - aiNewState(actor, &batIdle); + aiNewState(actor, NAME_batIdle); } else aiSetTarget(actor, DVector3(actor->spr.pos.XY(), actor->sector()->ceilingz)); diff --git a/source/games/blood/src/aibeast.cpp b/source/games/blood/src/aibeast.cpp index 0d5c9d0ae..63881dd40 100644 --- a/source/games/blood/src/aibeast.cpp +++ b/source/games/blood/src/aibeast.cpp @@ -182,9 +182,9 @@ static void beastThinkGoto(DBloodActor* actor) if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &beastSwimSearch); + aiNewState(actor, NAME_beastSwimSearch); else - aiNewState(actor, &beastSearch); + aiNewState(actor, NAME_beastSearch); } aiThinkTarget(actor); } @@ -197,9 +197,9 @@ static void beastThinkChase(DBloodActor* actor) auto pXSector = pSector->hasX() ? &pSector->xs() : nullptr; if (pXSector && pXSector->Underwater) - aiNewState(actor, &beastSwimSearch); + aiNewState(actor, NAME_beastSwimSearch); else - aiNewState(actor, &beastSearch); + aiNewState(actor, NAME_beastSearch); return; } assert(actor->IsDudeActor()); @@ -216,17 +216,17 @@ static void beastThinkChase(DBloodActor* actor) if (target->xspr.health == 0) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &beastSwimSearch); + aiNewState(actor, NAME_beastSwimSearch); else - aiNewState(actor, &beastSearch); + aiNewState(actor, NAME_beastSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &beastSwimSearch); + aiNewState(actor, NAME_beastSwimSearch); else - aiNewState(actor, &beastSearch); + aiNewState(actor, NAME_beastSearch); return; } double nDist = dv.Length(); @@ -250,25 +250,25 @@ static void beastThinkChase(DBloodActor* actor) { case -1: if (!pXSector || !pXSector->Underwater) - aiNewState(actor, &beastStomp); + aiNewState(actor, NAME_beastStomp); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType()) { if (!pXSector || !pXSector->Underwater) - aiNewState(actor, &beastStomp); + aiNewState(actor, NAME_beastStomp); } else { if (pXSector && pXSector->Underwater) - aiNewState(actor, &beastSwimDodge); + aiNewState(actor, NAME_beastSwimDodge); else - aiNewState(actor, &beastDodge); + aiNewState(actor, NAME_beastDodge); } break; default: if (!pXSector || !pXSector->Underwater) - aiNewState(actor, &beastStomp); + aiNewState(actor, NAME_beastStomp); break; } } @@ -280,31 +280,31 @@ static void beastThinkChase(DBloodActor* actor) { case -1: if (pXSector && pXSector->Underwater) - aiNewState(actor, &beastSwimSlash); + aiNewState(actor, NAME_beastSwimSlash); else - aiNewState(actor, &beastSlash); + aiNewState(actor, NAME_beastSlash); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType()) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &beastSwimSlash); + aiNewState(actor, NAME_beastSwimSlash); else - aiNewState(actor, &beastSlash); + aiNewState(actor, NAME_beastSlash); } else { if (pXSector && pXSector->Underwater) - aiNewState(actor, &beastSwimDodge); + aiNewState(actor, NAME_beastSwimDodge); else - aiNewState(actor, &beastDodge); + aiNewState(actor, NAME_beastDodge); } break; default: if (pXSector && pXSector->Underwater) - aiNewState(actor, &beastSwimSlash); + aiNewState(actor, NAME_beastSwimSlash); else - aiNewState(actor, &beastSlash); + aiNewState(actor, NAME_beastSlash); break; } } @@ -314,9 +314,9 @@ static void beastThinkChase(DBloodActor* actor) } if (pXSector && pXSector->Underwater) - aiNewState(actor, &beastSwimGoto); + aiNewState(actor, NAME_beastSwimGoto); else - aiNewState(actor, &beastGoto); + aiNewState(actor, NAME_beastGoto); actor->SetTarget(nullptr); } @@ -329,7 +329,7 @@ static void beastThinkSwimGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &beastSwimSearch); + aiNewState(actor, NAME_beastSwimSearch); aiThinkTarget(actor); } @@ -337,7 +337,7 @@ static void beastThinkSwimChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &beastSwimGoto); + aiNewState(actor, NAME_beastSwimGoto); return; } assert(actor->IsDudeActor()); @@ -352,12 +352,12 @@ static void beastThinkSwimChase(DBloodActor* actor) aiChooseDirection(actor, nAngle); if (target->xspr.health == 0) { - aiNewState(actor, &beastSwimSearch); + aiNewState(actor, NAME_beastSwimSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { - aiNewState(actor, &beastSwimSearch); + aiNewState(actor, NAME_beastSwimSearch); return; } @@ -371,19 +371,19 @@ static void beastThinkSwimChase(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (nDist < 64 && nDeltaAngle < DAngle15) - aiNewState(actor, &beastSwimSlash); + aiNewState(actor, NAME_beastSwimSlash); else { aiPlay3DSound(actor, 9009 + Random(2), AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &beastSwimAttack); + aiNewState(actor, NAME_beastSwimAttack); } } } else - aiNewState(actor, &beastSwimAttack); + aiNewState(actor, NAME_beastSwimAttack); return; } - aiNewState(actor, &beastSwimGoto); + aiNewState(actor, NAME_beastSwimGoto); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/aiboneel.cpp b/source/games/blood/src/aiboneel.cpp index bdce64053..a1e32dbcd 100644 --- a/source/games/blood/src/aiboneel.cpp +++ b/source/games/blood/src/aiboneel.cpp @@ -72,7 +72,7 @@ void eelBiteSeqCallback(DBloodActor* actor) */ if (actor->GetTarget() == nullptr) { - aiNewState(actor, &eelSearch); + aiNewState(actor, NAME_eelSearch); return; } @@ -99,7 +99,7 @@ static void eelThinkTarget(DBloodActor* actor) actor->dudeExtra.thinkTime = 0; actor->xspr.goalAng += DAngle45; aiSetTarget(actor, actor->basePoint); - aiNewState(actor, &eelTurn); + aiNewState(actor, NAME_eelTurn); return; } if (Chance(pDudeInfo->alertChance)) @@ -153,7 +153,7 @@ static void eelThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &eelSearch); + aiNewState(actor, NAME_eelSearch); eelThinkTarget(actor); } @@ -161,7 +161,7 @@ static void eelThinkPonder(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &eelSearch); + aiNewState(actor, NAME_eelSearch); return; } assert(actor->IsDudeActor()); @@ -174,7 +174,7 @@ static void eelThinkPonder(DBloodActor* actor) aiChooseDirection(actor, nAngle); if (target->xspr.health == 0) { - aiNewState(actor, &eelSearch); + aiNewState(actor, NAME_eelSearch); return; } @@ -189,25 +189,25 @@ static void eelThinkPonder(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (height2 - height < -0x20 && nDist < 0x180 && nDist > 0xc0 && nDeltaAngle < DAngle15) - aiNewState(actor, &eelDodgeUp); + aiNewState(actor, NAME_eelDodgeUp); else if (height2 - height > 12.8 && nDist < 0x180 && nDist > 0xc0 && nDeltaAngle < DAngle15) - aiNewState(actor, &eelDodgeDown); + aiNewState(actor, NAME_eelDodgeDown); else if (height2 - height < 12.8 && nDist < 57.5625 && nDeltaAngle < DAngle15) - aiNewState(actor, &eelDodgeUp); + aiNewState(actor, NAME_eelDodgeUp); else if (height2 - height > 12.8 && nDist < 0x140 && nDist > 0x80 && nDeltaAngle < DAngle15) - aiNewState(actor, &eelDodgeDown); + aiNewState(actor, NAME_eelDodgeDown); else if (height2 - height < -0x20 && nDist < 0x140 && nDist > 0x80 && nDeltaAngle < DAngle15) - aiNewState(actor, &eelDodgeUp); + aiNewState(actor, NAME_eelDodgeUp); else if (height2 - height < -0x20 && nDeltaAngle < DAngle15 && nDist > 0x140) - aiNewState(actor, &eelDodgeUp); + aiNewState(actor, NAME_eelDodgeUp); else if (height2 - height > 12.8) - aiNewState(actor, &eelDodgeDown); + aiNewState(actor, NAME_eelDodgeDown); else - aiNewState(actor, &eelDodgeUp); + aiNewState(actor, NAME_eelDodgeUp); return; } } - aiNewState(actor, &eelGoto); + aiNewState(actor, NAME_eelGoto); actor->SetTarget(nullptr); } @@ -251,7 +251,7 @@ static void eelThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &eelGoto); + aiNewState(actor, NAME_eelGoto); return; } assert(actor->IsDudeActor()); @@ -264,12 +264,12 @@ static void eelThinkChase(DBloodActor* actor) aiChooseDirection(actor, nAngle); if (target->xspr.health == 0) { - aiNewState(actor, &eelSearch); + aiNewState(actor, NAME_eelSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { - aiNewState(actor, &eelSearch); + aiNewState(actor, NAME_eelSearch); return; } @@ -288,20 +288,20 @@ static void eelThinkChase(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (nDist < 57.5625 && top2 > top && nDeltaAngle < DAngle15) - aiNewState(actor, &eelSwoop); + aiNewState(actor, NAME_eelSwoop); else if (nDist <= 57.5625 && nDeltaAngle < DAngle15) - aiNewState(actor, &eelBite); + aiNewState(actor, NAME_eelBite); else if (bottom2 > top && nDeltaAngle < DAngle15) - aiNewState(actor, &eelSwoop); + aiNewState(actor, NAME_eelSwoop); else if (top2 < top && nDeltaAngle < DAngle15) - aiNewState(actor, &eelFly); + aiNewState(actor, NAME_eelFly); } } return; } actor->SetTarget(nullptr); - aiNewState(actor, &eelSearch); + aiNewState(actor, NAME_eelSearch); } static void eelMoveForward(DBloodActor* actor) @@ -378,7 +378,7 @@ void eelMoveToCeil(DBloodActor* actor) actor->dudeExtra.active = 0; actor->spr.flags = 0; - aiNewState(actor, &eelIdle); + aiNewState(actor, NAME_eelIdle); } else aiSetTarget(actor, DVector3(actor->spr.pos.XY(), actor->sector()->ceilingz)); diff --git a/source/games/blood/src/aiburn.cpp b/source/games/blood/src/aiburn.cpp index d19952921..edfcd84f0 100644 --- a/source/games/blood/src/aiburn.cpp +++ b/source/games/blood/src/aiburn.cpp @@ -93,26 +93,26 @@ static void burnThinkGoto(DBloodActor* actor) switch (actor->GetType()) { case kDudeBurningCultist: - aiNewState(actor, &cultistBurnSearch); + aiNewState(actor, NAME_cultistBurnSearch); break; case kDudeBurningZombieAxe: - aiNewState(actor, &zombieABurnSearch); + aiNewState(actor, NAME_zombieABurnSearch); break; case kDudeBurningZombieButcher: - aiNewState(actor, &zombieFBurnSearch); + aiNewState(actor, NAME_zombieFBurnSearch); break; case kDudeBurningInnocent: - aiNewState(actor, &innocentBurnSearch); + aiNewState(actor, NAME_innocentBurnSearch); break; case kDudeBurningBeast: - aiNewState(actor, &beastBurnSearch); + aiNewState(actor, NAME_beastBurnSearch); break; case kDudeBurningTinyCaleb: - aiNewState(actor, &tinycalebBurnSearch); + aiNewState(actor, NAME_tinycalebBurnSearch); break; #ifdef NOONE_EXTENSIONS case kDudeModernCustomBurning: - aiNewState(actor, &genDudeBurnSearch); + aiNewState(actor, NAME_genDudeBurnSearch); break; #endif } @@ -127,26 +127,26 @@ static void burnThinkChase(DBloodActor* actor) switch (actor->GetType()) { case kDudeBurningCultist: - aiNewState(actor, &cultistBurnGoto); + aiNewState(actor, NAME_cultistBurnGoto); break; case kDudeBurningZombieAxe: - aiNewState(actor, &zombieABurnGoto); + aiNewState(actor, NAME_zombieABurnGoto); break; case kDudeBurningZombieButcher: - aiNewState(actor, &zombieFBurnGoto); + aiNewState(actor, NAME_zombieFBurnGoto); break; case kDudeBurningInnocent: - aiNewState(actor, &innocentBurnGoto); + aiNewState(actor, NAME_innocentBurnGoto); break; case kDudeBurningBeast: - aiNewState(actor, &beastBurnGoto); + aiNewState(actor, NAME_beastBurnGoto); break; case kDudeBurningTinyCaleb: - aiNewState(actor, &tinycalebBurnGoto); + aiNewState(actor, NAME_tinycalebBurnGoto); break; #ifdef NOONE_EXTENSIONS case kDudeModernCustomBurning: - aiNewState(actor, &genDudeBurnGoto); + aiNewState(actor, NAME_genDudeBurnGoto); break; #endif } @@ -166,26 +166,26 @@ static void burnThinkChase(DBloodActor* actor) switch (actor->GetType()) { case kDudeBurningCultist: - aiNewState(actor, &cultistBurnSearch); + aiNewState(actor, NAME_cultistBurnSearch); break; case kDudeBurningZombieAxe: - aiNewState(actor, &zombieABurnSearch); + aiNewState(actor, NAME_zombieABurnSearch); break; case kDudeBurningZombieButcher: - aiNewState(actor, &zombieFBurnSearch); + aiNewState(actor, NAME_zombieFBurnSearch); break; case kDudeBurningInnocent: - aiNewState(actor, &innocentBurnSearch); + aiNewState(actor, NAME_innocentBurnSearch); break; case kDudeBurningBeast: - aiNewState(actor, &beastBurnSearch); + aiNewState(actor, NAME_beastBurnSearch); break; case kDudeBurningTinyCaleb: - aiNewState(actor, &tinycalebBurnSearch); + aiNewState(actor, NAME_tinycalebBurnSearch); break; #ifdef NOONE_EXTENSIONS case kDudeModernCustomBurning: - aiNewState(actor, &genDudeBurnSearch); + aiNewState(actor, NAME_genDudeBurnSearch); break; #endif } @@ -206,26 +206,26 @@ static void burnThinkChase(DBloodActor* actor) switch (actor->GetType()) { case kDudeBurningCultist: - aiNewState(actor, &cultistBurnAttack); + aiNewState(actor, NAME_cultistBurnAttack); break; case kDudeBurningZombieAxe: - aiNewState(actor, &zombieABurnAttack); + aiNewState(actor, NAME_zombieABurnAttack); break; case kDudeBurningZombieButcher: - aiNewState(actor, &zombieFBurnAttack); + aiNewState(actor, NAME_zombieFBurnAttack); break; case kDudeBurningInnocent: - aiNewState(actor, &innocentBurnAttack); + aiNewState(actor, NAME_innocentBurnAttack); break; case kDudeBurningBeast: - aiNewState(actor, &beastBurnAttack); + aiNewState(actor, NAME_beastBurnAttack); break; case kDudeBurningTinyCaleb: - aiNewState(actor, &tinycalebBurnAttack); + aiNewState(actor, NAME_tinycalebBurnAttack); break; #ifdef NOONE_EXTENSIONS case kDudeModernCustomBurning: - aiNewState(actor, &genDudeBurnSearch); + aiNewState(actor, NAME_genDudeBurnSearch); break; #endif } @@ -238,26 +238,26 @@ static void burnThinkChase(DBloodActor* actor) switch (actor->GetType()) { case kDudeBurningCultist: - aiNewState(actor, &cultistBurnGoto); + aiNewState(actor, NAME_cultistBurnGoto); break; case kDudeBurningZombieAxe: - aiNewState(actor, &zombieABurnGoto); + aiNewState(actor, NAME_zombieABurnGoto); break; case 242: - aiNewState(actor, &zombieFBurnGoto); + aiNewState(actor, NAME_zombieFBurnGoto); break; case kDudeBurningInnocent: - aiNewState(actor, &innocentBurnGoto); + aiNewState(actor, NAME_innocentBurnGoto); break; case kDudeBurningBeast: - aiNewState(actor, &beastBurnGoto); + aiNewState(actor, NAME_beastBurnGoto); break; case kDudeBurningTinyCaleb: - aiNewState(actor, &tinycalebBurnGoto); + aiNewState(actor, NAME_tinycalebBurnGoto); break; #ifdef NOONE_EXTENSIONS case kDudeModernCustomBurning: - aiNewState(actor, &genDudeBurnSearch); + aiNewState(actor, NAME_genDudeBurnSearch); break; #endif } diff --git a/source/games/blood/src/aicaleb.cpp b/source/games/blood/src/aicaleb.cpp index 0174d63ae..5c66d4574 100644 --- a/source/games/blood/src/aicaleb.cpp +++ b/source/games/blood/src/aicaleb.cpp @@ -100,9 +100,9 @@ static void calebThinkGoto(DBloodActor* actor) if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &tinycalebSwimSearch); + aiNewState(actor, NAME_tinycalebSwimSearch); else - aiNewState(actor, &tinycalebSearch); + aiNewState(actor, NAME_tinycalebSearch); } aiThinkTarget(actor); } @@ -115,9 +115,9 @@ static void calebThinkChase(DBloodActor* actor) if (actor->GetTarget() == nullptr) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &tinycalebSwimSearch); + aiNewState(actor, NAME_tinycalebSwimSearch); else - aiNewState(actor, &tinycalebSearch); + aiNewState(actor, NAME_tinycalebSearch); return; } assert(actor->IsDudeActor()); @@ -132,20 +132,20 @@ static void calebThinkChase(DBloodActor* actor) if (target->xspr.health == 0) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &tinycalebSwimSearch); + aiNewState(actor, NAME_tinycalebSwimSearch); else { aiPlay3DSound(actor, 11000 + Random(4), AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &tinycalebSearch); + aiNewState(actor, NAME_tinycalebSearch); } return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &tinycalebSwimSearch); + aiNewState(actor, NAME_tinycalebSwimSearch); else - aiNewState(actor, &tinycalebSearch); + aiNewState(actor, NAME_tinycalebSearch); return; } @@ -166,31 +166,31 @@ static void calebThinkChase(DBloodActor* actor) { case -1: if (pXSector && pXSector->Underwater) - aiNewState(actor, &tinycalebSwimAttack); + aiNewState(actor, NAME_tinycalebSwimAttack); else - aiNewState(actor, &tinycalebAttack); + aiNewState(actor, NAME_tinycalebAttack); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType()) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &tinycalebSwimAttack); + aiNewState(actor, NAME_tinycalebSwimAttack); else - aiNewState(actor, &tinycalebAttack); + aiNewState(actor, NAME_tinycalebAttack); } else { if (pXSector && pXSector->Underwater) - aiNewState(actor, &tinycalebSwimDodge); + aiNewState(actor, NAME_tinycalebSwimDodge); else - aiNewState(actor, &tinycalebDodge); + aiNewState(actor, NAME_tinycalebDodge); } break; default: if (pXSector && pXSector->Underwater) - aiNewState(actor, &tinycalebSwimAttack); + aiNewState(actor, NAME_tinycalebSwimAttack); else - aiNewState(actor, &tinycalebAttack); + aiNewState(actor, NAME_tinycalebAttack); break; } } @@ -200,9 +200,9 @@ static void calebThinkChase(DBloodActor* actor) } if (pXSector && pXSector->Underwater) - aiNewState(actor, &tinycalebSwimGoto); + aiNewState(actor, NAME_tinycalebSwimGoto); else - aiNewState(actor, &tinycalebGoto); + aiNewState(actor, NAME_tinycalebGoto); if (Chance(0x2000)) sfxPlay3DSound(actor, 10000 + Random(5), -1, 0); actor->SetTarget(nullptr); @@ -217,7 +217,7 @@ static void calebThinkSwimGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &tinycalebSwimSearch); + aiNewState(actor, NAME_tinycalebSwimSearch); aiThinkTarget(actor); } @@ -225,7 +225,7 @@ static void calebThinkSwimChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &tinycalebSwimGoto); + aiNewState(actor, NAME_tinycalebSwimGoto); return; } assert(actor->IsDudeActor()); @@ -239,12 +239,12 @@ static void calebThinkSwimChase(DBloodActor* actor) if (target->xspr.health == 0) { - aiNewState(actor, &tinycalebSwimSearch); + aiNewState(actor, NAME_tinycalebSwimSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { - aiNewState(actor, &tinycalebSwimSearch); + aiNewState(actor, NAME_tinycalebSwimSearch); return; } @@ -259,16 +259,16 @@ static void calebThinkSwimChase(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (nDist < 0x40 && abs(nDeltaAngle) < DAngle15) - aiNewState(actor, &tinycalebSwimAttack); + aiNewState(actor, NAME_tinycalebSwimAttack); else - aiNewState(actor, &tinycalebSwimMoveIn); + aiNewState(actor, NAME_tinycalebSwimMoveIn); } } else - aiNewState(actor, &tinycalebSwimMoveIn); + aiNewState(actor, NAME_tinycalebSwimMoveIn); return; } - aiNewState(actor, &tinycalebSwimGoto); + aiNewState(actor, NAME_tinycalebSwimGoto); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/aicerber.cpp b/source/games/blood/src/aicerber.cpp index fca52feb7..dad8f23b6 100644 --- a/source/games/blood/src/aicerber.cpp +++ b/source/games/blood/src/aicerber.cpp @@ -228,9 +228,9 @@ static void cerberusThinkTarget(DBloodActor* actor) actor->xspr.goalAng += DAngle45; aiSetTarget(actor, actor->basePoint); if (actor->GetType() == kDudeCerberusTwoHead) - aiNewState(actor, &cerberusTurn1); + aiNewState(actor, NAME_cerberusTurn1); else - aiNewState(actor, &cerberusTurn2); + aiNewState(actor, NAME_cerberusTurn2); return; } if (Chance(pDudeInfo->alertChance)) @@ -284,10 +284,10 @@ static void cerberusThinkGoto(DBloodActor* actor) { switch (actor->GetType()) { case kDudeCerberusTwoHead: - aiNewState(actor, &cerberusSearch); + aiNewState(actor, NAME_cerberusSearch); break; case kDudeCerberusOneHead: - aiNewState(actor, &cerberus2Search); + aiNewState(actor, NAME_cerberus2Search); break; } } @@ -299,10 +299,10 @@ static void cerberusThinkChase(DBloodActor* actor) if (actor->GetTarget() == nullptr) { switch (actor->GetType()) { case kDudeCerberusTwoHead: - aiNewState(actor, &cerberusGoto); + aiNewState(actor, NAME_cerberusGoto); break; case kDudeCerberusOneHead: - aiNewState(actor, &cerberus2Goto); + aiNewState(actor, NAME_cerberus2Goto); break; } return; @@ -327,10 +327,10 @@ static void cerberusThinkChase(DBloodActor* actor) if (target->xspr.health == 0) { switch (actor->GetType()) { case kDudeCerberusTwoHead: - aiNewState(actor, &cerberusSearch); + aiNewState(actor, NAME_cerberusSearch); break; case kDudeCerberusOneHead: - aiNewState(actor, &cerberus2Search); + aiNewState(actor, NAME_cerberus2Search); break; } return; @@ -339,10 +339,10 @@ static void cerberusThinkChase(DBloodActor* actor) if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { switch (actor->GetType()) { case kDudeCerberusTwoHead: - aiNewState(actor, &cerberusSearch); + aiNewState(actor, NAME_cerberusSearch); break; case kDudeCerberusOneHead: - aiNewState(actor, &cerberus2Search); + aiNewState(actor, NAME_cerberus2Search); break; } return; @@ -363,10 +363,10 @@ static void cerberusThinkChase(DBloodActor* actor) { switch (actor->GetType()) { case kDudeCerberusTwoHead: - aiNewState(actor, &cerberusBurn); + aiNewState(actor, NAME_cerberusBurn); break; case kDudeCerberusOneHead: - aiNewState(actor, &cerberus2Burn); + aiNewState(actor, NAME_cerberus2Burn); break; } } @@ -375,10 +375,10 @@ static void cerberusThinkChase(DBloodActor* actor) { switch (actor->GetType()) { case kDudeCerberusTwoHead: - aiNewState(actor, &cerberus3Burn); + aiNewState(actor, NAME_cerberus3Burn); break; case kDudeCerberusOneHead: - aiNewState(actor, &cerberus4Burn); + aiNewState(actor, NAME_cerberus4Burn); break; } } @@ -389,34 +389,34 @@ static void cerberusThinkChase(DBloodActor* actor) case kDudeCerberusTwoHead: switch (hit) { case -1: - aiNewState(actor, &cerberusBite); + aiNewState(actor, NAME_cerberusBite); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeHellHound) - aiNewState(actor, &cerberusBite); + aiNewState(actor, NAME_cerberusBite); break; case 0: case 4: break; default: - aiNewState(actor, &cerberusBite); + aiNewState(actor, NAME_cerberusBite); break; } break; case kDudeCerberusOneHead: switch (hit) { case -1: - aiNewState(actor, &cerberus2Bite); + aiNewState(actor, NAME_cerberus2Bite); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeHellHound) - aiNewState(actor, &cerberus2Bite); + aiNewState(actor, NAME_cerberus2Bite); break; case 0: case 4: break; default: - aiNewState(actor, &cerberus2Bite); + aiNewState(actor, NAME_cerberus2Bite); break; } break; @@ -429,10 +429,10 @@ static void cerberusThinkChase(DBloodActor* actor) switch (actor->GetType()) { case kDudeCerberusTwoHead: - aiNewState(actor, &cerberusGoto); + aiNewState(actor, NAME_cerberusGoto); break; case kDudeCerberusOneHead: - aiNewState(actor, &cerberus2Goto); + aiNewState(actor, NAME_cerberus2Goto); break; } actor->SetTarget(nullptr); diff --git a/source/games/blood/src/aicult.cpp b/source/games/blood/src/aicult.cpp index c01e9c156..9d6617635 100644 --- a/source/games/blood/src/aicult.cpp +++ b/source/games/blood/src/aicult.cpp @@ -193,11 +193,11 @@ static void cultThinkGoto(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &cultistSearch); + aiNewState(actor, NAME_cultistSearch); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &cultistSwimSearch); + aiNewState(actor, NAME_cultistSwimSearch); break; } } @@ -211,11 +211,11 @@ static void cultThinkChase(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &cultistGoto); + aiNewState(actor, NAME_cultistGoto); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &cultistSwimGoto); + aiNewState(actor, NAME_cultistSwimGoto); break; } return; @@ -234,7 +234,7 @@ static void cultThinkChase(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &cultistSearch); + aiNewState(actor, NAME_cultistSearch); if (actor->GetType() == kDudeCultistTommy) aiPlay3DSound(actor, 4021 + Random(4), AI_SFX_PRIORITY_1, -1); else @@ -242,7 +242,7 @@ static void cultThinkChase(DBloodActor* actor) break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &cultistSwimSearch); + aiNewState(actor, NAME_cultistSwimSearch); break; } return; @@ -252,11 +252,11 @@ static void cultThinkChase(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &cultistSearch); + aiNewState(actor, NAME_cultistSearch); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &cultistSwimSearch); + aiNewState(actor, NAME_cultistSwimSearch); break; } return; @@ -283,17 +283,17 @@ static void cultThinkChase(DBloodActor* actor) { case -1: if (actor->xspr.medium != kMediumWater && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistTThrow); + aiNewState(actor, NAME_cultistTThrow); break; case 0: case 4: break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeCultistShotgun && actor->xspr.medium != kMediumWater && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistTThrow); + aiNewState(actor, NAME_cultistTThrow); break; default: - aiNewState(actor, &cultistTThrow); + aiNewState(actor, NAME_cultistTThrow); break; } } @@ -304,39 +304,39 @@ static void cultThinkChase(DBloodActor* actor) { case -1: if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistTFire); + aiNewState(actor, NAME_cultistTFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistTProneFire); + aiNewState(actor, NAME_cultistTProneFire); else if (dudeIsPlayingSeq(actor, 13) && (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo)) - aiNewState(actor, &cultistTSwimFire); + aiNewState(actor, NAME_cultistTSwimFire); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeCultistShotgun) { if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistTFire); + aiNewState(actor, NAME_cultistTFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistTProneFire); + aiNewState(actor, NAME_cultistTProneFire); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistTSwimFire); + aiNewState(actor, NAME_cultistTSwimFire); } else { if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistDodge); + aiNewState(actor, NAME_cultistDodge); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistProneDodge); + aiNewState(actor, NAME_cultistProneDodge); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistSwimDodge); + aiNewState(actor, NAME_cultistSwimDodge); } break; default: if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistTFire); + aiNewState(actor, NAME_cultistTFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistTProneFire); + aiNewState(actor, NAME_cultistTProneFire); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistTSwimFire); + aiNewState(actor, NAME_cultistTSwimFire); break; } } @@ -351,17 +351,17 @@ static void cultThinkChase(DBloodActor* actor) { case -1: if (actor->xspr.medium != kMediumWater && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistSThrow); + aiNewState(actor, NAME_cultistSThrow); break; case 0: case 4: break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeCultistShotgun && actor->xspr.medium != kMediumWater && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistSThrow); + aiNewState(actor, NAME_cultistSThrow); break; default: - aiNewState(actor, &cultistSThrow); + aiNewState(actor, NAME_cultistSThrow); break; } } @@ -372,39 +372,39 @@ static void cultThinkChase(DBloodActor* actor) { case -1: if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSFire); + aiNewState(actor, NAME_cultistSFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSProneFire); + aiNewState(actor, NAME_cultistSProneFire); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistSSwimFire); + aiNewState(actor, NAME_cultistSSwimFire); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeCultistTommy) { if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSFire); + aiNewState(actor, NAME_cultistSFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSProneFire); + aiNewState(actor, NAME_cultistSProneFire); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistSSwimFire); + aiNewState(actor, NAME_cultistSSwimFire); } else { if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistDodge); + aiNewState(actor, NAME_cultistDodge); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistProneDodge); + aiNewState(actor, NAME_cultistProneDodge); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistSwimDodge); + aiNewState(actor, NAME_cultistSwimDodge); } break; default: if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSFire); + aiNewState(actor, NAME_cultistSFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSProneFire); + aiNewState(actor, NAME_cultistSProneFire); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistSSwimFire); + aiNewState(actor, NAME_cultistSSwimFire); break; } } @@ -419,61 +419,61 @@ static void cultThinkChase(DBloodActor* actor) { case -1: if (actor->xspr.medium != kMediumWater && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistTsThrow); + aiNewState(actor, NAME_cultistTsThrow); break; case 0: case 4: break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeCultistShotgun && actor->xspr.medium != kMediumWater && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistTsThrow); + aiNewState(actor, NAME_cultistTsThrow); break; default: - aiNewState(actor, &cultistTsThrow); + aiNewState(actor, NAME_cultistTsThrow); break; } } else if (nDist < 0x320 && nDeltaAngle < DAngle1 * 5) { - AISTATE *pCultistTsProneFire = !cl_bloodvanillaenemies && !VanillaMode() ? &cultistTsProneFireFixed : &cultistTsProneFire; + FName pCultistTsProneFire = !cl_bloodvanillaenemies && !VanillaMode() ? NAME_cultistTsProneFireFixed : NAME_cultistTsProneFire; int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec.XY(), 0), CLIPMASK1, 0); switch (hit) { case -1: if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistTsFire); + aiNewState(actor, NAME_cultistTsFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) aiNewState(actor, pCultistTsProneFire); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistTsSwimFire); + aiNewState(actor, NAME_cultistTsSwimFire); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeCultistTommy) { if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistTsFire); + aiNewState(actor, NAME_cultistTsFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) aiNewState(actor, pCultistTsProneFire); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistTsSwimFire); + aiNewState(actor, NAME_cultistTsSwimFire); } else { if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistDodge); + aiNewState(actor, NAME_cultistDodge); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistProneDodge); + aiNewState(actor, NAME_cultistProneDodge); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistSwimDodge); + aiNewState(actor, NAME_cultistSwimDodge); } break; default: if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistTsFire); + aiNewState(actor, NAME_cultistTsFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) aiNewState(actor, pCultistTsProneFire); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistTsSwimFire); + aiNewState(actor, NAME_cultistTsSwimFire); break; } } @@ -486,16 +486,16 @@ static void cultThinkChase(DBloodActor* actor) { case -1: if (actor->xspr.medium != kMediumWater && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistDThrow); + aiNewState(actor, NAME_cultistDThrow); break; case 4: break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeCultistShotgun && actor->xspr.medium != kMediumWater && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistDThrow); + aiNewState(actor, NAME_cultistDThrow); break; default: - aiNewState(actor, &cultistDThrow); + aiNewState(actor, NAME_cultistDThrow); break; } } @@ -506,16 +506,16 @@ static void cultThinkChase(DBloodActor* actor) { case -1: if (actor->xspr.medium != 1 && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistDThrow2); + aiNewState(actor, NAME_cultistDThrow2); break; case 4: break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeCultistShotgun && actor->xspr.medium != kMediumWater && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistDThrow2); + aiNewState(actor, NAME_cultistDThrow2); break; default: - aiNewState(actor, &cultistDThrow2); + aiNewState(actor, NAME_cultistDThrow2); break; } } @@ -530,17 +530,17 @@ static void cultThinkChase(DBloodActor* actor) { case -1: if (actor->xspr.medium != kMediumWater && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistSThrow); + aiNewState(actor, NAME_cultistSThrow); break; case 0: case 4: break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeCultistShotgun && actor->xspr.medium != kMediumWater && actor->xspr.medium != kMediumGoo) - aiNewState(actor, &cultistSThrow); + aiNewState(actor, NAME_cultistSThrow); break; default: - aiNewState(actor, &cultistSThrow); + aiNewState(actor, NAME_cultistSThrow); break; } } @@ -551,39 +551,39 @@ static void cultThinkChase(DBloodActor* actor) { case -1: if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSFire); + aiNewState(actor, NAME_cultistSFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSProneFire); + aiNewState(actor, NAME_cultistSProneFire); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistSSwimFire); + aiNewState(actor, NAME_cultistSSwimFire); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeCultistTommy) { if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSFire); + aiNewState(actor, NAME_cultistSFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSProneFire); + aiNewState(actor, NAME_cultistSProneFire); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistSSwimFire); + aiNewState(actor, NAME_cultistSSwimFire); } else { if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistDodge); + aiNewState(actor, NAME_cultistDodge); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistProneDodge); + aiNewState(actor, NAME_cultistProneDodge); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistSwimDodge); + aiNewState(actor, NAME_cultistSwimDodge); } break; default: if (!dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSFire); + aiNewState(actor, NAME_cultistSFire); else if (dudeIsPlayingSeq(actor, 14) && actor->xspr.medium == kMediumNormal) - aiNewState(actor, &cultistSProneFire); + aiNewState(actor, NAME_cultistSProneFire); else if (actor->xspr.medium == kMediumWater || actor->xspr.medium == kMediumGoo) - aiNewState(actor, &cultistSSwimFire); + aiNewState(actor, NAME_cultistSSwimFire); break; } } @@ -596,11 +596,11 @@ static void cultThinkChase(DBloodActor* actor) switch (actor->xspr.medium) { case kMediumNormal: - aiNewState(actor, &cultistGoto); + aiNewState(actor, NAME_cultistGoto); break; case kMediumWater: case kMediumGoo: - aiNewState(actor, &cultistSwimGoto); + aiNewState(actor, NAME_cultistSwimGoto); break; } actor->SetTarget(nullptr); diff --git a/source/games/blood/src/aigarg.cpp b/source/games/blood/src/aigarg.cpp index 79f5b3f90..e381e65d6 100644 --- a/source/games/blood/src/aigarg.cpp +++ b/source/games/blood/src/aigarg.cpp @@ -187,7 +187,7 @@ static void gargThinkTarget(DBloodActor* actor) { actor->xspr.goalAng += DAngle45; aiSetTarget(actor, actor->basePoint); - aiNewState(actor, &gargoyleTurn); + aiNewState(actor, NAME_gargoyleTurn); return; } if (Chance(pDudeInfo->alertChance)) @@ -244,7 +244,7 @@ static void gargThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &gargoyleFSearch); + aiNewState(actor, NAME_gargoyleFSearch); aiThinkTarget(actor); } @@ -294,7 +294,7 @@ static void gargThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &gargoyleFGoto); + aiNewState(actor, NAME_gargoyleFGoto); return; } ///assert(actor->IsDudeActor()); @@ -310,12 +310,12 @@ static void gargThinkChase(DBloodActor* actor) aiChooseDirection(actor, dxyAngle); if (target->xspr.health == 0) { - aiNewState(actor, &gargoyleFSearch); + aiNewState(actor, NAME_gargoyleFSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { - aiNewState(actor, &gargoyleFSearch); + aiNewState(actor, NAME_gargoyleFSearch); return; } double nDist = dxy.Length(); @@ -346,7 +346,7 @@ static void gargThinkChase(DBloodActor* actor) { case -1: sfxPlay3DSound(actor, 1408, 0, 0); - aiNewState(actor, &gargoyleFThrow); + aiNewState(actor, NAME_gargoyleFThrow); break; case 0: case 4: @@ -355,12 +355,12 @@ static void gargThinkChase(DBloodActor* actor) if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeGargoyleStone) { sfxPlay3DSound(actor, 1408, 0, 0); - aiNewState(actor, &gargoyleFThrow); + aiNewState(actor, NAME_gargoyleFThrow); } break; default: sfxPlay3DSound(actor, 1408, 0, 0); - aiNewState(actor, &gargoyleFThrow); + aiNewState(actor, NAME_gargoyleFThrow); break; } } @@ -371,7 +371,7 @@ static void gargThinkChase(DBloodActor* actor) { case -1: sfxPlay3DSound(actor, 1406, 0, 0); - aiNewState(actor, &gargoyleFSlash); + aiNewState(actor, NAME_gargoyleFSlash); break; case 0: case 4: @@ -380,19 +380,19 @@ static void gargThinkChase(DBloodActor* actor) if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeGargoyleStone) { sfxPlay3DSound(actor, 1406, 0, 0); - aiNewState(actor, &gargoyleFSlash); + aiNewState(actor, NAME_gargoyleFSlash); } break; default: sfxPlay3DSound(actor, 1406, 0, 0); - aiNewState(actor, &gargoyleFSlash); + aiNewState(actor, NAME_gargoyleFSlash); break; } } else if ((heightDelta > 32 || floorDelta > 32) && nDist < 0x140 && nDist > 0xa0) { aiPlay3DSound(actor, 1400, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &gargoyleSwoop); + aiNewState(actor, NAME_gargoyleSwoop); } else if ((heightDelta < 32 || floorDelta < 32) && angWithinRange) aiPlay3DSound(actor, 1400, AI_SFX_PRIORITY_1, -1); @@ -405,7 +405,7 @@ static void gargThinkChase(DBloodActor* actor) { case -1: sfxPlay3DSound(actor, 1457, 0, 0); - aiNewState(actor, &gargoyleSBlast); + aiNewState(actor, NAME_gargoyleSBlast); break; case 0: case 4: @@ -414,12 +414,12 @@ static void gargThinkChase(DBloodActor* actor) if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeGargoyleFlesh) { sfxPlay3DSound(actor, 1457, 0, 0); - aiNewState(actor, &gargoyleSBlast); + aiNewState(actor, NAME_gargoyleSBlast); } break; default: sfxPlay3DSound(actor, 1457, 0, 0); - aiNewState(actor, &gargoyleSBlast); + aiNewState(actor, NAME_gargoyleSBlast); break; } } @@ -429,17 +429,17 @@ static void gargThinkChase(DBloodActor* actor) switch (hit) { case -1: - aiNewState(actor, &gargoyleFSlash); + aiNewState(actor, NAME_gargoyleFSlash); break; case 0: case 4: break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudeGargoyleFlesh) - aiNewState(actor, &gargoyleFSlash); + aiNewState(actor, NAME_gargoyleFSlash); break; default: - aiNewState(actor, &gargoyleFSlash); + aiNewState(actor, NAME_gargoyleFSlash); break; } } @@ -449,7 +449,7 @@ static void gargThinkChase(DBloodActor* actor) aiPlay3DSound(actor, 1400, AI_SFX_PRIORITY_1, -1); else aiPlay3DSound(actor, 1450, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &gargoyleSwoop); + aiNewState(actor, NAME_gargoyleSwoop); } else if ((heightDelta < 32 || floorDelta < 32) && angWithinRange) aiPlay3DSound(actor, 1450, AI_SFX_PRIORITY_1, -1); @@ -460,12 +460,12 @@ static void gargThinkChase(DBloodActor* actor) } else { - aiNewState(actor, &gargoyleFly); + aiNewState(actor, NAME_gargoyleFly); return; } } - aiNewState(actor, &gargoyleFGoto); + aiNewState(actor, NAME_gargoyleFGoto); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/aighost.cpp b/source/games/blood/src/aighost.cpp index bb935f42c..47858b6fc 100644 --- a/source/games/blood/src/aighost.cpp +++ b/source/games/blood/src/aighost.cpp @@ -168,7 +168,7 @@ static void ghostThinkTarget(DBloodActor* actor) { actor->xspr.goalAng += DAngle45; aiSetTarget(actor, actor->basePoint); - aiNewState(actor, &ghostTurn); + aiNewState(actor, NAME_ghostTurn); return; } if (Chance(pDudeInfo->alertChance)) @@ -224,7 +224,7 @@ static void ghostThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &ghostSearch); + aiNewState(actor, NAME_ghostSearch); aiThinkTarget(actor); } @@ -273,7 +273,7 @@ static void ghostThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &ghostGoto); + aiNewState(actor, NAME_ghostGoto); return; } ///assert(actor->IsDudeActor()); @@ -289,12 +289,12 @@ static void ghostThinkChase(DBloodActor* actor) aiChooseDirection(actor, dxyAngle); if (target->xspr.health == 0) { - aiNewState(actor, &ghostSearch); + aiNewState(actor, NAME_ghostSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { - aiNewState(actor, &ghostSearch); + aiNewState(actor, NAME_ghostSearch); return; } double nDist = dxy.Length(); @@ -322,17 +322,17 @@ static void ghostThinkChase(DBloodActor* actor) switch (hit) { case -1: - aiNewState(actor, &ghostBlast); + aiNewState(actor, NAME_ghostBlast); break; case 0: case 4: break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudePhantasm) - aiNewState(actor, &ghostBlast); + aiNewState(actor, NAME_ghostBlast); break; default: - aiNewState(actor, &ghostBlast); + aiNewState(actor, NAME_ghostBlast); break; } } @@ -342,24 +342,24 @@ static void ghostThinkChase(DBloodActor* actor) switch (hit) { case -1: - aiNewState(actor, &ghostSlash); + aiNewState(actor, NAME_ghostSlash); break; case 0: case 4: break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType() && gHitInfo.actor()->GetType() != kDudePhantasm) - aiNewState(actor, &ghostSlash); + aiNewState(actor, NAME_ghostSlash); break; default: - aiNewState(actor, &ghostSlash); + aiNewState(actor, NAME_ghostSlash); break; } } else if ((heightDelta > 32 || floorDelta > 32) && nDist < 0x140 && nDist > 0x80) { aiPlay3DSound(actor, 1600, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &ghostSwoop); + aiNewState(actor, NAME_ghostSwoop); } else if ((heightDelta < 32 || floorDelta < 32) &&angWithinRange) aiPlay3DSound(actor, 1600, AI_SFX_PRIORITY_1, -1); @@ -370,12 +370,12 @@ static void ghostThinkChase(DBloodActor* actor) } else { - aiNewState(actor, &ghostFly); + aiNewState(actor, NAME_ghostFly); return; } } - aiNewState(actor, &ghostGoto); + aiNewState(actor, NAME_ghostGoto); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/aigilbst.cpp b/source/games/blood/src/aigilbst.cpp index 9f159bc47..a051bf58e 100644 --- a/source/games/blood/src/aigilbst.cpp +++ b/source/games/blood/src/aigilbst.cpp @@ -90,9 +90,9 @@ static void gillThinkGoto(DBloodActor* actor) if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimSearch); + aiNewState(actor, NAME_gillBeastSwimSearch); else - aiNewState(actor, &gillBeastSearch); + aiNewState(actor, NAME_gillBeastSearch); } aiThinkTarget(actor); } @@ -105,9 +105,9 @@ static void gillThinkChase(DBloodActor* actor) if (actor->GetTarget() == nullptr) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimSearch); + aiNewState(actor, NAME_gillBeastSwimSearch); else - aiNewState(actor, &gillBeastSearch); + aiNewState(actor, NAME_gillBeastSearch); return; } assert(actor->IsDudeActor()); @@ -120,17 +120,17 @@ static void gillThinkChase(DBloodActor* actor) if (actor->xspr.health == 0) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimSearch); + aiNewState(actor, NAME_gillBeastSwimSearch); else - aiNewState(actor, &gillBeastSearch); + aiNewState(actor, NAME_gillBeastSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimSearch); + aiNewState(actor, NAME_gillBeastSwimSearch); else - aiNewState(actor, &gillBeastSearch); + aiNewState(actor, NAME_gillBeastSearch); return; } double nDist = dv.Length(); @@ -151,31 +151,31 @@ static void gillThinkChase(DBloodActor* actor) { case -1: if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimBite); + aiNewState(actor, NAME_gillBeastSwimBite); else - aiNewState(actor, &gillBeastBite); + aiNewState(actor, NAME_gillBeastBite); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType()) { if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimBite); + aiNewState(actor, NAME_gillBeastSwimBite); else - aiNewState(actor, &gillBeastBite); + aiNewState(actor, NAME_gillBeastBite); } else { if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimDodge); + aiNewState(actor, NAME_gillBeastSwimDodge); else - aiNewState(actor, &gillBeastDodge); + aiNewState(actor, NAME_gillBeastDodge); } break; default: if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimBite); + aiNewState(actor, NAME_gillBeastSwimBite); else - aiNewState(actor, &gillBeastBite); + aiNewState(actor, NAME_gillBeastBite); break; } } @@ -185,9 +185,9 @@ static void gillThinkChase(DBloodActor* actor) } if (pXSector && pXSector->Underwater) - aiNewState(actor, &gillBeastSwimGoto); + aiNewState(actor, NAME_gillBeastSwimGoto); else - aiNewState(actor, &gillBeastGoto); + aiNewState(actor, NAME_gillBeastGoto); sfxPlay3DSound(actor, 1701, -1, 0); actor->SetTarget(nullptr); } @@ -201,7 +201,7 @@ static void gillThinkSwimGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &gillBeastSwimSearch); + aiNewState(actor, NAME_gillBeastSwimSearch); aiThinkTarget(actor); } @@ -209,7 +209,7 @@ static void gillThinkSwimChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &gillBeastSwimSearch); + aiNewState(actor, NAME_gillBeastSwimSearch); return; } assert(actor->IsDudeActor()); @@ -223,12 +223,12 @@ static void gillThinkSwimChase(DBloodActor* actor) if (actor->xspr.health == 0) { - aiNewState(actor, &gillBeastSwimSearch); + aiNewState(actor, NAME_gillBeastSwimSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { - aiNewState(actor, &gillBeastSwimSearch); + aiNewState(actor, NAME_gillBeastSwimSearch); return; } @@ -244,19 +244,19 @@ static void gillThinkSwimChase(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (nDist < 0x40 && nDeltaAngle < DAngle15) - aiNewState(actor, &gillBeastSwimBite); + aiNewState(actor, NAME_gillBeastSwimBite); else { aiPlay3DSound(actor, 1700, AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &gillBeastSwimMoveIn); + aiNewState(actor, NAME_gillBeastSwimMoveIn); } } } else - aiNewState(actor, &gillBeastSwimMoveIn); + aiNewState(actor, NAME_gillBeastSwimMoveIn); return; } - aiNewState(actor, &gillBeastSwimGoto); + aiNewState(actor, NAME_gillBeastSwimGoto); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/aihand.cpp b/source/games/blood/src/aihand.cpp index d04c6f4ba..efb5ceabb 100644 --- a/source/games/blood/src/aihand.cpp +++ b/source/games/blood/src/aihand.cpp @@ -34,7 +34,7 @@ static void handThinkGoto(DBloodActor*); static void handThinkChase(DBloodActor*); AISTATE handIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, &AF(aiThinkTarget), NULL }; -AISTATE hand13A3B4 = { kAiStateOther, 0, nullptr, 0, NULL, NULL, NULL, NULL }; +AISTATE handChoke = { kAiStateOther, 0, nullptr, 0, NULL, NULL, NULL, NULL }; AISTATE handSearch = { kAiStateMove, 6, nullptr, 600, NULL, &AF(aiMoveForward), &AF(handThinkSearch), &handIdle }; AISTATE handChase = { kAiStateChase, 6, nullptr, 0, NULL, &AF(aiMoveForward), &AF(handThinkChase), NULL }; AISTATE handRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &handSearch }; @@ -71,7 +71,7 @@ static void handThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &handSearch); + aiNewState(actor, NAME_handSearch); aiThinkTarget(actor); } @@ -79,7 +79,7 @@ static void handThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &handGoto); + aiNewState(actor, NAME_handGoto); return; } assert(actor->IsDudeActor()); @@ -93,12 +93,12 @@ static void handThinkChase(DBloodActor* actor) aiChooseDirection(actor, nAngle); if (target->xspr.health == 0) { - aiNewState(actor, &handSearch); + aiNewState(actor, NAME_handSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { - aiNewState(actor, &handSearch); + aiNewState(actor, NAME_handSearch); return; } if (nDist <= pDudeInfo->SeeDist()) @@ -111,13 +111,13 @@ static void handThinkChase(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (nDist < 35.1875 && nDeltaAngle < DAngle15 && gGameOptions.nGameType == 0) - aiNewState(actor, &handJump); + aiNewState(actor, NAME_handJump); return; } } } - aiNewState(actor, &handGoto); + aiNewState(actor, NAME_handGoto); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/aihound.cpp b/source/games/blood/src/aihound.cpp index 362b47ec8..f6969db8b 100644 --- a/source/games/blood/src/aihound.cpp +++ b/source/games/blood/src/aihound.cpp @@ -80,7 +80,7 @@ static void houndThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &houndSearch); + aiNewState(actor, NAME_houndSearch); aiThinkTarget(actor); } @@ -88,7 +88,7 @@ static void houndThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &houndGoto); + aiNewState(actor, NAME_houndGoto); return; } if (!(actor->IsDudeActor())) { @@ -104,12 +104,12 @@ static void houndThinkChase(DBloodActor* actor) aiChooseDirection(actor, nAngle); if (target->xspr.health == 0) { - aiNewState(actor, &houndSearch); + aiNewState(actor, NAME_houndSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { - aiNewState(actor, &houndSearch); + aiNewState(actor, NAME_houndSearch); return; } @@ -123,15 +123,15 @@ static void houndThinkChase(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (nDist < 0xb0 && nDist > 0x50 && nDeltaAngle < DAngle15) - aiNewState(actor, &houndBurn); + aiNewState(actor, NAME_houndBurn); else if (nDist < 38.375 && nDeltaAngle < DAngle15) - aiNewState(actor, &houndBite); + aiNewState(actor, NAME_houndBite); return; } } } - aiNewState(actor, &houndGoto); + aiNewState(actor, NAME_houndGoto); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/aiinnoc.cpp b/source/games/blood/src/aiinnoc.cpp index 9553fb6de..9983adedb 100644 --- a/source/games/blood/src/aiinnoc.cpp +++ b/source/games/blood/src/aiinnoc.cpp @@ -55,7 +55,7 @@ static void innocThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &innocentSearch); + aiNewState(actor, NAME_innocentSearch); aiThinkTarget(actor); } @@ -63,7 +63,7 @@ static void innocThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &innocentGoto); + aiNewState(actor, NAME_innocentGoto); return; } assert(actor->IsDudeActor()); @@ -77,12 +77,12 @@ static void innocThinkChase(DBloodActor* actor) aiChooseDirection(actor, nAngle); if (target->xspr.health == 0) { - aiNewState(actor, &innocentSearch); + aiNewState(actor, NAME_innocentSearch); return; } if (target->IsPlayerActor()) { - aiNewState(actor, &innocentSearch); + aiNewState(actor, NAME_innocentSearch); return; } @@ -96,14 +96,14 @@ static void innocThinkChase(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (nDist < 102.375 && nDeltaAngle < DAngle15) - aiNewState(actor, &innocentIdle); + aiNewState(actor, NAME_innocentIdle); return; } } } aiPlay3DSound(actor, 7000 + Random(6), AI_SFX_PRIORITY_1, -1); - aiNewState(actor, &innocentGoto); + aiNewState(actor, NAME_innocentGoto); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/aipod.cpp b/source/games/blood/src/aipod.cpp index 4dfe6c7a8..35901b38c 100644 --- a/source/games/blood/src/aipod.cpp +++ b/source/games/blood/src/aipod.cpp @@ -145,11 +145,11 @@ static void aiPodMove(DBloodActor* actor) switch (actor->GetType()) { case kDudePodGreen: case kDudePodFire: - aiNewState(actor, &podSearch); + aiNewState(actor, NAME_podSearch); break; case kDudeTentacleGreen: case kDudeTentacleFire: - aiNewState(actor, &tentacleSearch); + aiNewState(actor, NAME_tentacleSearch); break; } } @@ -162,11 +162,11 @@ static void aiPodChase(DBloodActor* actor) switch (actor->GetType()) { case kDudePodGreen: case kDudePodFire: - aiNewState(actor, &podMove); + aiNewState(actor, NAME_podMove); break; case kDudeTentacleGreen: case kDudeTentacleFire: - aiNewState(actor, &tentacleMove); + aiNewState(actor, NAME_tentacleMove); break; } return; @@ -187,11 +187,11 @@ static void aiPodChase(DBloodActor* actor) switch (actor->GetType()) { case kDudePodGreen: case kDudePodFire: - aiNewState(actor, &podSearch); + aiNewState(actor, NAME_podSearch); break; case kDudeTentacleGreen: case kDudeTentacleFire: - aiNewState(actor, &tentacleSearch); + aiNewState(actor, NAME_tentacleSearch); break; } return; @@ -209,11 +209,11 @@ static void aiPodChase(DBloodActor* actor) switch (actor->GetType()) { case kDudePodGreen: case kDudePodFire: - aiNewState(actor, &podStartChase); + aiNewState(actor, NAME_podStartChase); break; case kDudeTentacleGreen: case kDudeTentacleFire: - aiNewState(actor, &tentacleStartChase); + aiNewState(actor, NAME_tentacleStartChase); break; } } @@ -225,11 +225,11 @@ static void aiPodChase(DBloodActor* actor) switch (actor->GetType()) { case kDudePodGreen: case kDudePodFire: - aiNewState(actor, &podMove); + aiNewState(actor, NAME_podMove); break; case kDudeTentacleGreen: case kDudeTentacleFire: - aiNewState(actor, &tentacleMove); + aiNewState(actor, NAME_tentacleMove); break; } actor->SetTarget(nullptr); diff --git a/source/games/blood/src/airat.cpp b/source/games/blood/src/airat.cpp index a0531631e..9b7c418dd 100644 --- a/source/games/blood/src/airat.cpp +++ b/source/games/blood/src/airat.cpp @@ -68,7 +68,7 @@ static void ratThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &ratSearch); + aiNewState(actor, NAME_ratSearch); aiThinkTarget(actor); } @@ -76,7 +76,7 @@ static void ratThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &ratGoto); + aiNewState(actor, NAME_ratGoto); return; } assert(actor->IsDudeActor()); @@ -89,12 +89,12 @@ static void ratThinkChase(DBloodActor* actor) aiChooseDirection(actor, nAngle); if (target->xspr.health == 0) { - aiNewState(actor, &ratSearch); + aiNewState(actor, NAME_ratSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { - aiNewState(actor, &ratSearch); + aiNewState(actor, NAME_ratSearch); return; } @@ -108,13 +108,13 @@ static void ratThinkChase(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (nDist < 57.5625 && nDeltaAngle < DAngle15) - aiNewState(actor, &ratBite); + aiNewState(actor, NAME_ratBite); return; } } } - aiNewState(actor, &ratGoto); + aiNewState(actor, NAME_ratGoto); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/aispid.cpp b/source/games/blood/src/aispid.cpp index 6cac84e6a..fe0be8e26 100644 --- a/source/games/blood/src/aispid.cpp +++ b/source/games/blood/src/aispid.cpp @@ -176,7 +176,7 @@ static void spidThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &spidSearch); + aiNewState(actor, NAME_spidSearch); aiThinkTarget(actor); } @@ -184,7 +184,7 @@ static void spidThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &spidGoto); + aiNewState(actor, NAME_spidGoto); return; } assert(actor->IsDudeActor()); @@ -197,12 +197,12 @@ static void spidThinkChase(DBloodActor* actor) aiChooseDirection(actor, nAngle); if (target->xspr.health == 0) { - aiNewState(actor, &spidSearch); + aiNewState(actor, NAME_spidSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { - aiNewState(actor, &spidSearch); + aiNewState(actor, NAME_spidSearch); return; } @@ -219,20 +219,20 @@ static void spidThinkChase(DBloodActor* actor) switch (actor->GetType()) { case kDudeSpiderRed: if (nDist < 57.5625 && nDeltaAngle < DAngle15) - aiNewState(actor, &spidBite); + aiNewState(actor, NAME_spidBite); break; case kDudeSpiderBrown: case kDudeSpiderBlack: if (nDist < 115.1875 && nDist > 57.5625 && nDeltaAngle < DAngle15) - aiNewState(actor, &spidJump); + aiNewState(actor, NAME_spidJump); else if (nDist < 57.5625 && nDeltaAngle < DAngle15) - aiNewState(actor, &spidBite); + aiNewState(actor, NAME_spidBite); break; case kDudeSpiderMother: if (nDist < 115.1875 && nDist > 57.5625 && nDeltaAngle < DAngle15) - aiNewState(actor, &spidJump); + aiNewState(actor, NAME_spidJump); else if (Chance(0x8000)) - aiNewState(actor, &spidBirth); + aiNewState(actor, NAME_spidBirth); break; } @@ -241,7 +241,7 @@ static void spidThinkChase(DBloodActor* actor) } } - aiNewState(actor, &spidGoto); + aiNewState(actor, NAME_spidGoto); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/aistate.h b/source/games/blood/src/aistate.h index 515baa702..66a401e86 100644 --- a/source/games/blood/src/aistate.h +++ b/source/games/blood/src/aistate.h @@ -258,7 +258,7 @@ extern AISTATE gillBeastSwimMoveIn; extern AISTATE gillBeastSwimTurn; extern AISTATE handIdle; -extern AISTATE hand13A3B4; +extern AISTATE handChoke; extern AISTATE handSearch; extern AISTATE handChase; extern AISTATE handRecoil; diff --git a/source/games/blood/src/aitchern.cpp b/source/games/blood/src/aitchern.cpp index 612ae5e37..67def16b5 100644 --- a/source/games/blood/src/aitchern.cpp +++ b/source/games/blood/src/aitchern.cpp @@ -55,7 +55,7 @@ void tchernobogFire(DBloodActor* actor) evPostActor(target, 0, AF(fxFlameLick)); actBurnSprite(actor->GetOwner(), target, 40); if (Chance(0x6000)) - aiNewState(actor, &tchernobogBurn1); + aiNewState(actor, NAME_tchernobogBurn1); } void tchernobogBurnSeqCallback(DBloodActor* actor) @@ -191,7 +191,7 @@ static void tchernobogThinkTarget(DBloodActor* actor) { actor->xspr.goalAng += DAngle45; aiSetTarget(actor, actor->basePoint); - aiNewState(actor, &tchernobogTurn); + aiNewState(actor, NAME_tchernobogTurn); return; } if (Chance(pDudeInfo->alertChance)) @@ -244,7 +244,7 @@ static void tchernobogThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &tchernobogSearch); + aiNewState(actor, NAME_tchernobogSearch); aiThinkTarget(actor); } @@ -252,7 +252,7 @@ static void tchernobogThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &tchernobogGoto); + aiNewState(actor, NAME_tchernobogGoto); return; } if (!(actor->IsDudeActor())) { @@ -269,12 +269,12 @@ static void tchernobogThinkChase(DBloodActor* actor) aiChooseDirection(actor, nAngle); if (target->xspr.health == 0) { - aiNewState(actor, &tchernobogSearch); + aiNewState(actor, NAME_tchernobogSearch); return; } if (target->IsPlayerActor() && powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0) { - aiNewState(actor, &tchernobogSearch); + aiNewState(actor, NAME_tchernobogSearch); return; } @@ -288,17 +288,17 @@ static void tchernobogThinkChase(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (nDist < 0x1f0 && nDist > 0xd0 && nDeltaAngle < DAngle15) - aiNewState(actor, &tchernobogFireAtk); + aiNewState(actor, NAME_tchernobogFireAtk); else if (nDist < 0xd0 && nDist > 0xb0 && nDeltaAngle < DAngle15) - aiNewState(actor, &tchernobogBurn1); + aiNewState(actor, NAME_tchernobogBurn1); else if (nDist < 0xb0 && nDist > 0x50 && nDeltaAngle < DAngle15) - aiNewState(actor, &tchernobogBurn2); + aiNewState(actor, NAME_tchernobogBurn2); return; } } } - aiNewState(actor, &tchernobogGoto); + aiNewState(actor, NAME_tchernobogGoto); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/aizomba.cpp b/source/games/blood/src/aizomba.cpp index 92a430015..e4e152a5e 100644 --- a/source/games/blood/src/aizomba.cpp +++ b/source/games/blood/src/aizomba.cpp @@ -95,7 +95,7 @@ static void zombaThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 51.3125 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &zombieASearch); + aiNewState(actor, NAME_zombieASearch); aiThinkTarget(actor); } @@ -103,7 +103,7 @@ static void zombaThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &zombieASearch); + aiNewState(actor, NAME_zombieASearch); return; } assert(actor->IsDudeActor()); @@ -118,12 +118,12 @@ static void zombaThinkChase(DBloodActor* actor) if (target->xspr.health == 0) { - aiNewState(actor, &zombieASearch); + aiNewState(actor, NAME_zombieASearch); return; } if (target->IsPlayerActor() && (powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0 || powerupCheck(getPlayer(target), kPwUpDeathMaskUseless) > 0)) { - aiNewState(actor, &zombieAGoto); + aiNewState(actor, NAME_zombieAGoto); return; } // If the zombie gets whacked while rising from the grave it never executes this change and if it isn't done here at the very latest, will just aimlessly run around. @@ -141,13 +141,13 @@ static void zombaThinkChase(DBloodActor* actor) { aiSetTarget(actor, actor->GetTarget()); if (nDist < 0x40 && nDeltaAngle < DAngle15) - aiNewState(actor, &zombieAHack); + aiNewState(actor, NAME_zombieAHack); return; } } } - aiNewState(actor, &zombieAGoto); + aiNewState(actor, NAME_zombieAGoto); actor->SetTarget(nullptr); } @@ -155,7 +155,7 @@ static void zombaThinkPonder(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &zombieASearch); + aiNewState(actor, NAME_zombieASearch); return; } assert(actor->IsDudeActor()); @@ -169,12 +169,12 @@ static void zombaThinkPonder(DBloodActor* actor) aiChooseDirection(actor, nAngle); if (target->xspr.health == 0) { - aiNewState(actor, &zombieASearch); + aiNewState(actor, NAME_zombieASearch); return; } if (target->IsPlayerActor() && (powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0 || powerupCheck(getPlayer(target), kPwUpDeathMaskUseless) > 0)) { - aiNewState(actor, &zombieAGoto); + aiNewState(actor, NAME_zombieAGoto); return; } @@ -192,7 +192,7 @@ static void zombaThinkPonder(DBloodActor* actor) if (nDeltaAngle < DAngle15) { sfxPlay3DSound(actor, 1101, 1, 0); - aiNewState(actor, &zombieAHack); + aiNewState(actor, NAME_zombieAHack); } return; } @@ -200,7 +200,7 @@ static void zombaThinkPonder(DBloodActor* actor) } } - aiNewState(actor, &zombieAChase); + aiNewState(actor, NAME_zombieAChase); } static void myThinkTarget(DBloodActor* actor) diff --git a/source/games/blood/src/aizombf.cpp b/source/games/blood/src/aizombf.cpp index 3e088e701..46e841941 100644 --- a/source/games/blood/src/aizombf.cpp +++ b/source/games/blood/src/aizombf.cpp @@ -95,7 +95,7 @@ static void zombfThinkGoto(DBloodActor* actor) double nDist = dvec.Length(); aiChooseDirection(actor, nAngle); if (nDist < 32 && absangle(actor->spr.Angles.Yaw, nAngle) < pDudeInfo->Periphery()) - aiNewState(actor, &zombieFSearch); + aiNewState(actor, NAME_zombieFSearch); aiThinkTarget(actor); } @@ -103,7 +103,7 @@ static void zombfThinkChase(DBloodActor* actor) { if (actor->GetTarget() == nullptr) { - aiNewState(actor, &zombieFGoto); + aiNewState(actor, NAME_zombieFGoto); return; } assert(actor->IsDudeActor()); @@ -116,12 +116,12 @@ static void zombfThinkChase(DBloodActor* actor) aiChooseDirection(actor, nAngle); if (target->xspr.health == 0) { - aiNewState(actor, &zombieFSearch); + aiNewState(actor, NAME_zombieFSearch); return; } if (target->IsPlayerActor() && (powerupCheck(getPlayer(target), kPwUpShadowCloak) > 0 || powerupCheck(getPlayer(target), kPwUpDeathMaskUseless) > 0)) { - aiNewState(actor, &zombieFSearch); + aiNewState(actor, NAME_zombieFSearch); return; } double nDist = dv.Length(); @@ -140,16 +140,16 @@ static void zombfThinkChase(DBloodActor* actor) switch (hit) { case -1: - aiNewState(actor, &zombieFThrow); + aiNewState(actor, NAME_zombieFThrow); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType()) - aiNewState(actor, &zombieFThrow); + aiNewState(actor, NAME_zombieFThrow); else - aiNewState(actor, &zombieFDodge); + aiNewState(actor, NAME_zombieFDodge); break; default: - aiNewState(actor, &zombieFThrow); + aiNewState(actor, NAME_zombieFThrow); break; } } @@ -159,16 +159,16 @@ static void zombfThinkChase(DBloodActor* actor) switch (hit) { case -1: - aiNewState(actor, &zombieFPuke); + aiNewState(actor, NAME_zombieFPuke); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType()) - aiNewState(actor, &zombieFPuke); + aiNewState(actor, NAME_zombieFPuke); else - aiNewState(actor, &zombieFDodge); + aiNewState(actor, NAME_zombieFDodge); break; default: - aiNewState(actor, &zombieFPuke); + aiNewState(actor, NAME_zombieFPuke); break; } } @@ -178,16 +178,16 @@ static void zombfThinkChase(DBloodActor* actor) switch (hit) { case -1: - aiNewState(actor, &zombieFHack); + aiNewState(actor, NAME_zombieFHack); break; case 3: if (actor->GetType() != gHitInfo.actor()->GetType()) - aiNewState(actor, &zombieFHack); + aiNewState(actor, NAME_zombieFHack); else - aiNewState(actor, &zombieFDodge); + aiNewState(actor, NAME_zombieFDodge); break; default: - aiNewState(actor, &zombieFHack); + aiNewState(actor, NAME_zombieFHack); break; } } @@ -196,7 +196,7 @@ static void zombfThinkChase(DBloodActor* actor) } } - aiNewState(actor, &zombieFSearch); + aiNewState(actor, NAME_zombieFSearch); actor->SetTarget(nullptr); } diff --git a/source/games/blood/src/animatesprite.cpp b/source/games/blood/src/animatesprite.cpp index 3875b79cb..3f58c8ada 100644 --- a/source/games/blood/src/animatesprite.cpp +++ b/source/games/blood/src/animatesprite.cpp @@ -805,7 +805,8 @@ void viewProcessSprites(tspriteArray& tsprites, const DVector3& cPos, DAngle cA, } case kStatDude: { - if (owneractor->GetType() == kDudeHand && owneractor->hasX() && owneractor->xspr.aiState == &hand13A3B4) + /* the state being checked here is never used, this looks like old development garbage. + if (owneractor->GetType() == kDudeHand && owneractor->hasX() && owneractor->xspr.aiState == &handChoke) { auto target = owneractor->GetTarget(); if (target && target->IsPlayerActor()) @@ -814,6 +815,7 @@ void viewProcessSprites(tspriteArray& tsprites, const DVector3& cPos, DAngle cA, break; } } + */ if (pXSector && pXSector->color) copyfloorpal(pTSprite, pSector); if (powerupCheck(pPlayer, kPwUpBeastVision) > 0) pTSprite->shade = -128; diff --git a/source/games/blood/src/blood.cpp b/source/games/blood/src/blood.cpp index 844cd9052..2aaa991e6 100644 --- a/source/games/blood/src/blood.cpp +++ b/source/games/blood/src/blood.cpp @@ -718,6 +718,19 @@ void GameInterface::FinalizeSetup() actorinfo->TypeNum = pair->Key; } } + +// Make the StatesToDefine array temporarily operable to allow transitioning the state calls without first altering the state table implementation. +#pragma message("remove after state transitioning") + auto cls = PClass::FindActor("BloodDudeBase"); + for (auto& state : cls->ActorInfo()->AIStates) + { + state.seqId = state.sprite == 0 ? -1 : state.sprite & 0xffff; + state.NextState = nullptr; + for (auto& state2 : cls->ActorInfo()->AIStates) + { + if (state.NextStaten == state2.Label) state.NextState = &state2; + } + } } //--------------------------------------------------------------------------- @@ -790,8 +803,8 @@ DEFINE_PROPERTY(aistate, SSIIGGGGs, CoreActor) PROP_INT_PARM(duration, 3); PROP_FUNC_PARM(action, 4); PROP_FUNC_PARM(enter, 5); - PROP_FUNC_PARM(tick, 6); - PROP_FUNC_PARM(move, 7); + PROP_FUNC_PARM(move, 6); + PROP_FUNC_PARM(tick, 7); const char* next = nullptr; if (PROP_PARM_COUNT > 8) { @@ -813,7 +826,7 @@ DEFINE_PROPERTY(aistate, SSIIGGGGs, CoreActor) state.EnterFunc = enter; state.MoveFunc = move; state.TickFunc = tick; - state.NextState = next ? FName(next) : FName(NAME_None); + state.NextStaten = next ? FName(next) : FName(NAME_None); } END_BLD_NS diff --git a/source/games/blood/src/bloodactor.h b/source/games/blood/src/bloodactor.h index f291c853b..b2a92a4b9 100644 --- a/source/games/blood/src/bloodactor.h +++ b/source/games/blood/src/bloodactor.h @@ -135,7 +135,7 @@ public: if (!hasX()) return false; - switch (xspr.aiState->stateType) + switch (xspr.aiState->Type) { case kAiStateIdle: case kAiStateGenIdle: diff --git a/source/games/blood/src/loadsave.cpp b/source/games/blood/src/loadsave.cpp index 20973f665..ff0b59cb0 100644 --- a/source/games/blood/src/loadsave.cpp +++ b/source/games/blood/src/loadsave.cpp @@ -35,413 +35,6 @@ BEGIN_BLD_NS void validateLinks(); -// All AI states for assigning an index. -static AISTATE* const allAIStates[] = -{ - nullptr, - &genIdle, - &genRecoil, - &batIdle, - &batFlyIdle, - &batChase, - &batPonder, - &batGoto, - &batBite, - &batRecoil, - &batSearch, - &batSwoop, - &batFly, - &batTurn, - &batHide, - &batDodgeUp, - &batDodgeUpRight, - &batDodgeUpLeft, - &batDodgeDown, - &batDodgeDownRight, - &batDodgeDownLeft, - &beastIdle, - &beastChase, - &beastDodge, - &beastGoto, - &beastSlash, - &beastStomp, - &beastSearch, - &beastRecoil, - &beastTeslaRecoil, - &beastSwimIdle, - &beastSwimChase, - &beastSwimDodge, - &beastSwimGoto, - &beastSwimSearch, - &beastSwimSlash, - &beastSwimRecoil, - &beastMorphToBeast, - &beastMorphFromCultist, - &beastMoveSwimChaseAlt, - &beastSwimAttack, - &beastSwimTurn, - &eelIdle, - &eelFlyIdle, - &eelChase, - &eelPonder, - &eelGoto, - &eelBite, - &eelRecoil, - &eelSearch, - &eelSwoop, - &eelFly, - &eelTurn, - &eelHide, - &eelDodgeUp, - &eelDodgeUpRight, - &eelDodgeUpLeft, - &eelDodgeDown, - &eelDodgeDownRight, - &eelDodgeDownLeft, - &cultistBurnIdle, - &cultistBurnChase, - &cultistBurnGoto, - &cultistBurnSearch, - &cultistBurnAttack, - &zombieABurnChase, - &zombieABurnGoto, - &zombieABurnSearch, - &zombieABurnAttack, - &zombieFBurnChase, - &zombieFBurnGoto, - &zombieFBurnSearch, - &zombieFBurnAttack, - &innocentBurnChase, - &innocentBurnGoto, - &innocentBurnSearch, - &innocentBurnAttack, - &beastBurnChase, - &beastBurnGoto, - &beastBurnSearch, - &beastBurnAttack, - &tinycalebBurnChase, - &tinycalebBurnGoto, - &tinycalebBurnSearch, - &tinycalebBurnAttack, - &genDudeBurnIdle, - &genDudeBurnChase, - &genDudeBurnGoto, - &genDudeBurnSearch, - &genDudeBurnAttack, - &tinycalebIdle, - &tinycalebChase, - &tinycalebDodge, - &tinycalebGoto, - &tinycalebAttack, - &tinycalebSearch, - &tinycalebRecoil, - &tinycalebTeslaRecoil, - &tinycalebSwimIdle, - &tinycalebSwimChase, - &tinycalebSwimDodge, - &tinycalebSwimGoto, - &tinycalebSwimSearch, - &tinycalebSwimAttack, - &tinycalebSwimRecoil, - &tinycalebSwimUnused, - &tinycalebSwimMoveIn, - &tinycalebSwimTurn, - &cerberusIdle, - &cerberusSearch, - &cerberusChase, - &cerberusRecoil, - &cerberusTeslaRecoil, - &cerberusGoto, - &cerberusBite, - &cerberusBurn, - &cerberus3Burn, - &cerberus2Idle, - &cerberus2Search, - &cerberus2Chase, - &cerberus2Recoil, - &cerberus2Goto, - &cerberus2Bite, - &cerberus2Burn, - &cerberus4Burn, - &cerberusTurn1, - &cerberusTurn2, - &cultistIdle, - &cultistProneIdle, - &fanaticProneIdle, - &cultistProneIdle3, - &cultistChase, - &fanaticChase, - &cultistDodge, - &cultistGoto, - &cultistProneChase, - &cultistProneDodge, - &cultistTThrow, - &cultistSThrow, - &cultistTsThrow, - &cultistDThrow, - &cultistDThrow2, - &cultistDThrow3C, - &cultistDThrow3B, - &cultistDThrow3A, - &cultistDThrow4, - &cultistSearch, - &cultistSFire, - &cultistTFire, - &cultistTsFire, - &cultistSProneFire, - &cultistTProneFire, - &cultistTsProneFire, - &cultistRecoil, - &cultistProneRecoil, - &cultistTeslaRecoil, - &cultistSwimIdle, - &cultistSwimChase, - &cultistSwimDodge, - &cultistSwimGoto, - &cultistSwimSearch, - &cultistSSwimFire, - &cultistTSwimFire, - &cultistTsSwimFire, - &cultistSwimRecoil, - &gargoyleFIdle, - &gargoyleStatueIdle, - &gargoyleFChase, - &gargoyleFGoto, - &gargoyleFSlash, - &gargoyleFThrow, - &gargoyleSThrow, - &gargoyleSBlast, - &gargoyleFRecoil, - &gargoyleFSearch, - &gargoyleFMorph2, - &gargoyleFMorph, - &gargoyleSMorph2, - &gargoyleSMorph, - &gargoyleSwoop, - &gargoyleFly, - &gargoyleTurn, - &gargoyleDodgeUp, - &gargoyleFDodgeUpRight, - &gargoyleFDodgeUpLeft, - &gargoyleDodgeDown, - &gargoyleFDodgeDownRight, - &gargoyleFDodgeDownLeft, - &statueFBreakSEQ, - &statueSBreakSEQ, - &ghostIdle, - &ghostChase, - &ghostGoto, - &ghostSlash, - &ghostThrow, - &ghostBlast, - &ghostRecoil, - &ghostTeslaRecoil, - &ghostSearch, - &ghostSwoop, - &ghostFly, - &ghostTurn, - &ghostDodgeUp, - &ghostDodgeUpRight, - &ghostDodgeUpLeft, - &ghostDodgeDown, - &ghostDodgeDownRight, - &ghostDodgeDownLeft, - &gillBeastIdle, - &gillBeastChase, - &gillBeastDodge, - &gillBeastGoto, - &gillBeastBite, - &gillBeastSearch, - &gillBeastRecoil, - &gillBeastSwimIdle, - &gillBeastSwimChase, - &gillBeastSwimDodge, - &gillBeastSwimGoto, - &gillBeastSwimSearch, - &gillBeastSwimBite, - &gillBeastSwimRecoil, - &gillBeastSwimUnused, - &gillBeastSwimMoveIn, - &gillBeastSwimTurn, - &handIdle, - &hand13A3B4, - &handSearch, - &handChase, - &handRecoil, - &handGoto, - &handJump, - &houndIdle, - &houndSearch, - &houndChase, - &houndRecoil, - &houndTeslaRecoil, - &houndGoto, - &houndBite, - &houndBurn, - &innocentIdle, - &innocentSearch, - &innocentChase, - &innocentRecoil, - &innocentTeslaRecoil, - &innocentGoto, - &podIdle, - &podMove, - &podSearch, - &podStartChase, - &podRecoil, - &podChase, - &tentacleIdle, - &tentacle13A6A8, - &tentacle13A6C4, - &tentacle13A6E0, - &tentacle13A6FC, - &tentacleMove, - &tentacleSearch, - &tentacleStartChase, - &tentacleRecoil, - &tentacleChase, - &ratIdle, - &ratSearch, - &ratChase, - &ratDodge, - &ratRecoil, - &ratGoto, - &ratBite, - &spidIdle, - &spidChase, - &spidDodge, - &spidGoto, - &spidSearch, - &spidBite, - &spidJump, - &spidBirth, - &tchernobogIdle, - &tchernobogSearch, - &tchernobogChase, - &tchernobogRecoil, - &tchernobogGoto, - &tchernobogBurn1, - &tchernobogBurn2, - &tchernobogFireAtk, - &tchernobogTurn, - &zombieAIdle, - &zombieAChase, - &zombieAPonder, - &zombieAGoto, - &zombieAHack, - &zombieASearch, - &zombieARecoil, - &zombieATeslaRecoil, - &zombieARecoil2, - &zombieAStand, - &zombieEIdle, - &zombieEUp2, - &zombieEUp, - &zombie2Idle, - &zombie2Search, - &zombieSIdle, - &zombieEStand, - &zombieFIdle, - &zombieFChase, - &zombieFGoto, - &zombieFDodge, - &zombieFHack, - &zombieFPuke, - &zombieFThrow, - &zombieFSearch, - &zombieFRecoil, - &zombieFTeslaRecoil, - -#ifdef NOONE_EXTENSIONS - &genDudeIdleL, - &genDudeIdleW, - &genDudeSearchL, - &genDudeSearchW, - &genDudeSearchShortL, - &genDudeSearchShortW, - &genDudeSearchNoWalkL, - &genDudeSearchNoWalkW, - &genDudeGotoL, - &genDudeGotoW, - &genDudeDodgeL, - &genDudeDodgeD, - &genDudeDodgeW, - &genDudeDodgeShortL, - &genDudeDodgeShortD, - &genDudeDodgeShortW, - &genDudeDodgeShorterL, - &genDudeDodgeShorterD, - &genDudeDodgeShorterW, - &genDudeChaseL, - &genDudeChaseD, - &genDudeChaseW, - &genDudeChaseNoWalkL, - &genDudeChaseNoWalkD, - &genDudeChaseNoWalkW, - &genDudeFireL, - &genDudeFireD, - &genDudeFireW, - &genDudeRecoilL, - &genDudeRecoilD, - &genDudeRecoilW, - &genDudeRecoilTesla, - &genDudeThrow, - &genDudeThrow2, - &genDudePunch, -#endif - -}; - -//--------------------------------------------------------------------------- -// -// -// -//--------------------------------------------------------------------------- - -FSerializer& Serialize(FSerializer& arc, const char* keyname, AISTATE*& w, AISTATE** def) -{ - unsigned i = 0; - if (arc.isWriting()) - { - if (def && w == *def) return arc; - for (auto cstate : allAIStates) - { - if (w == cstate) - { - arc(keyname, i); - return arc; - } - i++; - } -#ifdef NOONE_EXTENSIONS - if (w >= genPatrolStates && w < genPatrolStates + kPatrolStateSize) - { - i = int(w - genPatrolStates) + 1000; - arc(keyname, i); - } -#endif - } - else - { - arc(keyname, i); - if (i < countof(allAIStates)) - { - w = allAIStates[i]; - } -#ifdef NOONE_EXTENSIONS - else if (i >= 1000 && i < 1000 + kPatrolStateSize) - { - w = genPatrolStates + (i - 1000); - } -#endif - else - { - w = nullptr; - } - } - return arc; -} - //--------------------------------------------------------------------------- // // @@ -620,7 +213,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, XSPRITE& w, XSPRIT if (arc.BeginObject(keyname)) { arc("flags", w.flags, def->flags) - ("aistate", w.aiState, def->aiState) + //("aistate", w.aiState, def->aiState) disabled until we can transition to engine states. ("busy", w.busy, def->busy) ("txid", w.txID, def->txID) ("rxid", w.rxID, def->rxID) diff --git a/source/games/blood/src/mapstructs.h b/source/games/blood/src/mapstructs.h index f873e10af..bf25af790 100644 --- a/source/games/blood/src/mapstructs.h +++ b/source/games/blood/src/mapstructs.h @@ -61,7 +61,7 @@ struct AISTATE; struct XSPRITE { - AISTATE* aiState; // ai + FDefiningState* aiState; // ai union { uint32_t flags; diff --git a/source/games/blood/src/nnexts.cpp b/source/games/blood/src/nnexts.cpp index 797a9a713..bd77a266f 100644 --- a/source/games/blood/src/nnexts.cpp +++ b/source/games/blood/src/nnexts.cpp @@ -1888,7 +1888,7 @@ void aiSetGenIdleState(DBloodActor* actor) aiGenDudeNewState(actor, &genIdle); break; default: - aiNewState(actor, &genIdle); + aiNewState(actor, NAME_genIdle); break; } } diff --git a/wadsrc/static/zscript/games/blood/actors/dudes.zs b/wadsrc/static/zscript/games/blood/actors/dudes.zs index c667f4f7b..838add3f7 100644 --- a/wadsrc/static/zscript/games/blood/actors/dudes.zs +++ b/wadsrc/static/zscript/games/blood/actors/dudes.zs @@ -153,6 +153,7 @@ class BloodDudeBase : Bloodactor AISTATE "cultistSProneFire", "+8", 4, 60, ShotSeqCallback, null, null, null, "cultistProneChase"; AISTATE "cultistTProneFire", "+8", 4, 0, TommySeqCallback, null, aiMoveTurn, cultThinkChase, "cultistTProneFire"; AISTATE "cultistTsProneFire", "+8", 4, 0, TeslaSeqCallback, null, aiMoveTurn, null, "cultistTsProneFire"; + AISTATE "cultistTsProneFireFixed", "+0", 8, 0, TeslaSeqCallback, null, aiMoveTurn, null, "cultistTsProneFireFixed"; AISTATE "cultistRecoil", "+5", 5, 0, null, null, null, null, "cultistDodge"; AISTATE "cultistProneRecoil", "+5", 5, 0, null, null, null, null, "cultistProneDodge"; AISTATE "cultistTeslaRecoil", "+4", 5, 0, null, null, null, null, "cultistDodge"; @@ -224,7 +225,7 @@ class BloodDudeBase : Bloodactor AISTATE "gillBeastSwimMoveIn", "+10", -1, 0, null, null, gillSwimMoveIn, gillThinkSwimChase, "gillBeastSwimChase"; AISTATE "gillBeastSwimTurn", "+10", -1, 120, null, null, null, aiMoveTurn, "gillBeastSwimChase"; AISTATE "handIdle", "+0", 0, 0, null, null, null, aiThinkTarget, "none"; - AISTATE "hand13A3B4", "+0", -1, 0, null, null, null, null, "none"; + AISTATE "handChoke", "+0", -1, 0, null, null, null, null, "none"; AISTATE "handSearch", "+6", 2, 600, null, null, aiMoveForward, handThinkSearch, "handIdle"; AISTATE "handChase", "+6", 4, 0, null, null, aiMoveForward, handThinkChase, "none"; AISTATE "handRecoil", "+5", 5, 0, null, null, null, null, "handSearch";