diff --git a/source/games/exhumed/all.cpp b/source/games/exhumed/all.cpp index 677466495..77aff8da3 100644 --- a/source/games/exhumed/all.cpp +++ b/source/games/exhumed/all.cpp @@ -48,3 +48,357 @@ #include "src/wasp.cpp" // This includes the VM so it is last #include "src/d_menu.cpp" + +// just to keep things temporarily clean. +BEGIN_PS_NS + +void FuncAnim(int nObject, int nMessage, int nDamage, int nRun) +{ + AIAnim ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncAnubis(int nObject, int nMessage, int nDamage, int nRun) +{ + AIAnubis ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncBubble(int nObject, int nMessage, int nDamage, int nRun) +{ + AIBubble ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncBullet(int nObject, int nMessage, int nDamage, int nRun) +{ + AIBullet ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncFishLimb(int nObject, int nMessage, int nDamage, int nRun) +{ + AIFishLimb ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + + +void FuncFish(int nObject, int nMessage, int nDamage, int nRun) +{ + AIFish ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncGrenade(int nObject, int nMessage, int nDamage, int nRun) +{ + AIGrenade ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncLavaLimb(int nObject, int nMessage, int nDamage, int nRun) +{ + AILavaDudeLimb ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncLava(int nObject, int nMessage, int nDamage, int nRun) +{ + AILavaDude ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncLion(int nObject, int nMessage, int nDamage, int nRun) +{ + AILion ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncCreatureChunk(int nObject, int nMessage, int nDamage, int nRun) +{ + AICreatureChunk ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); + +} + +void FuncMummy(int nObject, int nMessage, int nDamage, int nRun) +{ + AIMummy ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncElev(int nObject, int nMessage, int nDamage, int nRun) +{ + AIElev ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncWallFace(int nObject, int nMessage, int nDamage, int nRun) +{ + AIWallFace ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncSlide(int nObject, int nMessage, int nDamage, int nRun) +{ + AISlide ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncTrap(int nObject, int nMessage, int nDamage, int nRun) +{ + AITrap ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncSpark(int nObject, int nMessage, int nDamage, int nRun) +{ + AISpark ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + + +void FuncEnergyBlock(int nObject, int nMessage, int nDamage, int nRun) +{ + AIEnergyBlock ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + + +void FuncObject(int nObject, int nMessage, int nDamage, int nRun) +{ + AIObject ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + + +void FuncPlayer(int nObject, int nMessage, int nDamage, int nRun) +{ + AIPlayer ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + + + +void FuncQueenEgg(int nObject, int nMessage, int nDamage, int nRun) +{ + AIQueenEgg ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + + +void FuncQueenHead(int nObject, int nMessage, int nDamage, int nRun) +{ + AIQueenHead ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncQueen(int nObject, int nMessage, int nDamage, int nRun) +{ + AIQueen ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncRa(int nObject, int nMessage, int nDamage, int nRun) +{ + AIRa ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); + +} + + +void FuncRat(int nObject, int nMessage, int nDamage, int nRun) +{ + AIRat ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncRex(int nObject, int nMessage, int nDamage, int nRun) +{ + AIRex ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncRoach(int nObject, int nMessage, int nDamage, int nRun) +{ + AIRoach ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncScorp(int nObject, int nMessage, int nDamage, int nRun) +{ + AIScorp ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + + +void FuncSoul(int nObject, int nMessage, int nDamage, int nRun) +{ + AISoul ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncSet(int nObject, int nMessage, int nDamage, int nRun) +{ + AISet ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + + +void FuncSnake(int nObject, int nMessage, int nDamage, int nRun) +{ + AISnake ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncSpider(int nObject, int nMessage, int nDamage, int nRun) +{ + AISpider ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +void FuncSwReady(int nObject, int nMessage, int, int nRun) +{ + AISWReady ai; + runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); +} + +void FuncSwPause(int nObject, int nMessage, int, int nRun) +{ + AISWPause ai; + runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); +} + +void FuncSwStepOn(int nObject, int nMessage, int, int nRun) +{ + AISWStepOn ai; + runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); +} + +void FuncSwNotOnPause(int nObject, int nMessage, int, int nRun) +{ + AISWNotOnPause ai; + runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); +} + +void FuncSwPressSector(int nObject, int nMessage, int, int nRun) +{ + AISWPressSector ai; + runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); +} + +void FuncSwPressWall(int nObject, int nMessage, int, int nRun) +{ + AISWPressWall ai; + runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); +} + +void FuncWasp(int nObject, int nMessage, int nDamage, int nRun) +{ + AIWasp ai; + runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); +} + +AiFunc aiFunctions[kFuncMax] = { + FuncElev, + FuncSwReady, + FuncSwPause, + FuncSwStepOn, + FuncSwNotOnPause, + FuncSwPressSector, + FuncSwPressWall, + FuncWallFace, + FuncSlide, + FuncAnubis, + FuncPlayer, + FuncBullet, + FuncSpider, + FuncCreatureChunk, + FuncMummy, + FuncGrenade, + FuncAnim, + FuncSnake, + FuncFish, + FuncLion, + FuncBubble, + FuncLava, + FuncLavaLimb, + FuncObject, + FuncRex, + FuncSet, + FuncQueen, + FuncQueenHead, + FuncRoach, + FuncQueenEgg, + FuncWasp, + FuncTrap, + FuncFishLimb, + FuncRa, + FuncScorp, + FuncSoul, + FuncRat, + FuncEnergyBlock, + FuncSpark, +}; + +// This is only temporary so that the event system can be refactored in smaller steps. +void runlist_DispatchEvent(ExhumedAI* ai, int nObject, int nMessage, int nDamage, int nRun) +{ + RunListEvent ev{}; + ev.nMessage = (EMessageType)(nMessage >> 16); + ev.nObjIndex = RunData[nRun].nObjIndex; + ev.pObjActor = RunData[nRun].pObjActor; + ev.nParam = nObject; + ev.nDamage = nDamage; + ev.nRun = nRun; + switch (ev.nMessage) + { + case EMessageType::ProcessChannel: + ai->ProcessChannel(&ev); + break; + + case EMessageType::Tick: + ai->Tick(&ev); + break; + + case EMessageType::Process: + ai->Process(&ev); + break; + + case EMessageType::Use: + ai->Use(&ev); + break; + + case EMessageType::TouchFloor: + ai->TouchFloor(&ev); + break; + + case EMessageType::LeaveSector: + ai->LeaveSector(&ev); + break; + + case EMessageType::EnterSector: + ai->EnterSector(&ev); + break; + + case EMessageType::Damage: + ev.pOtherActor = &exhumedActors[nObject]; + ai->Damage(&ev); + break; + + case EMessageType::Draw: + ev.pTSprite = &mytsprite[nObject]; + ai->Draw(&ev); + break; + + case EMessageType::RadialDamage: + ev.nRadialDamage = nRadialDamage; + ev.nDamageRadius = nDamageRadius; + ev.pOtherActor = nullptr; // &exhumedActors[nObject]; nObject is always 0 here, this was setting some random invalid target + ev.pRadialActor = pRadialActor; + ai->RadialDamage(&ev); + break; + } +} + + +END_PS_NS diff --git a/source/games/exhumed/src/anims.cpp b/source/games/exhumed/src/anims.cpp index 65bc70ea0..dc39bbdeb 100644 --- a/source/games/exhumed/src/anims.cpp +++ b/source/games/exhumed/src/anims.cpp @@ -234,12 +234,6 @@ void AIAnim::Draw(RunListEvent* ev) ev->pTSprite->owner = -1; } -void FuncAnim(int nObject, int nMessage, int nDamage, int nRun) -{ - AIAnim ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - void BuildExplosion(DExhumedActor* pActor) { auto pSprite = &pActor->s(); diff --git a/source/games/exhumed/src/anubis.cpp b/source/games/exhumed/src/anubis.cpp index f3a4d59d1..cf738c89d 100644 --- a/source/games/exhumed/src/anubis.cpp +++ b/source/games/exhumed/src/anubis.cpp @@ -448,10 +448,4 @@ void AIAnubis::Damage(RunListEvent* ev) } -void FuncAnubis(int nObject, int nMessage, int nDamage, int nRun) -{ - AIAnubis ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - END_PS_NS diff --git a/source/games/exhumed/src/bubbles.cpp b/source/games/exhumed/src/bubbles.cpp index 1c0f2ea89..7eaf6a75f 100644 --- a/source/games/exhumed/src/bubbles.cpp +++ b/source/games/exhumed/src/bubbles.cpp @@ -118,11 +118,6 @@ void AIBubble::Draw(RunListEvent* ev) ev->pTSprite->owner = -1; } -void FuncBubble(int nObject, int nMessage, int nDamage, int nRun) -{ - AIBubble ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} void DoBubbleMachines() { diff --git a/source/games/exhumed/src/bullet.cpp b/source/games/exhumed/src/bullet.cpp index 972f2d396..bc426a420 100644 --- a/source/games/exhumed/src/bullet.cpp +++ b/source/games/exhumed/src/bullet.cpp @@ -879,9 +879,4 @@ void AIBullet::Draw(RunListEvent* ev) } } -void FuncBullet(int nObject, int nMessage, int nDamage, int nRun) -{ - AIBullet ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} END_PS_NS diff --git a/source/games/exhumed/src/fish.cpp b/source/games/exhumed/src/fish.cpp index ed8ea6620..5b36c5203 100644 --- a/source/games/exhumed/src/fish.cpp +++ b/source/games/exhumed/src/fish.cpp @@ -145,12 +145,6 @@ void AIFishLimb::Draw(RunListEvent* ev) } -void FuncFishLimb(int nObject, int nMessage, int nDamage, int nRun) -{ - AIFishLimb ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - void BuildFish(DExhumedActor* pActor, int x, int y, int z, int nSector, int nAngle) { spritetype* pSprite; @@ -514,11 +508,4 @@ void AIFish::Tick(RunListEvent* ev) } } - -void FuncFish(int nObject, int nMessage, int nDamage, int nRun) -{ - AIFish ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - END_PS_NS diff --git a/source/games/exhumed/src/grenade.cpp b/source/games/exhumed/src/grenade.cpp index 8be91a842..e7be545e7 100644 --- a/source/games/exhumed/src/grenade.cpp +++ b/source/games/exhumed/src/grenade.cpp @@ -357,10 +357,5 @@ void AIGrenade::RadialDamage(RunListEvent* ev) } } -void FuncGrenade(int nObject, int nMessage, int nDamage, int nRun) -{ - AIGrenade ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} END_PS_NS diff --git a/source/games/exhumed/src/lavadude.cpp b/source/games/exhumed/src/lavadude.cpp index 83c50f8d7..032caeea1 100644 --- a/source/games/exhumed/src/lavadude.cpp +++ b/source/games/exhumed/src/lavadude.cpp @@ -103,11 +103,6 @@ void AILavaDudeLimb::Draw(RunListEvent* ev) seq_PlotSequence(ev->nParam, (SeqOffsets[kSeqLavag] + 30) + pActor->s().picnum, 0, 1); } -void FuncLavaLimb(int nObject, int nMessage, int nDamage, int nRun) -{ - AILavaDudeLimb ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} void BuildLava(DExhumedActor* pActor, int x, int y, int, short nSector, short nAngle, int nChannel) { @@ -464,10 +459,4 @@ void AILavaDude::Tick(RunListEvent* ev) pSprite->pal = 1; } - -void FuncLava(int nObject, int nMessage, int nDamage, int nRun) -{ - AILavaDude ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} END_PS_NS diff --git a/source/games/exhumed/src/lion.cpp b/source/games/exhumed/src/lion.cpp index 026fd87e5..51dfff9cf 100644 --- a/source/games/exhumed/src/lion.cpp +++ b/source/games/exhumed/src/lion.cpp @@ -555,12 +555,4 @@ void AILion::Tick(RunListEvent* ev) } } - - -void FuncLion(int nObject, int nMessage, int nDamage, int nRun) -{ - AILion ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - END_PS_NS diff --git a/source/games/exhumed/src/move.cpp b/source/games/exhumed/src/move.cpp index b47969b07..ecfe82e2e 100644 --- a/source/games/exhumed/src/move.cpp +++ b/source/games/exhumed/src/move.cpp @@ -1555,13 +1555,6 @@ void AICreatureChunk::Tick(RunListEvent* ev) pSprite->lotag = 0; } -void FuncCreatureChunk(int nObject, int nMessage, int nDamage, int nRun) -{ - AICreatureChunk ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); - -} - DExhumedActor* UpdateEnemy(DExhumedActor** ppEnemy) { if (*ppEnemy) diff --git a/source/games/exhumed/src/mummy.cpp b/source/games/exhumed/src/mummy.cpp index 128d90d51..3095bc7d4 100644 --- a/source/games/exhumed/src/mummy.cpp +++ b/source/games/exhumed/src/mummy.cpp @@ -475,10 +475,4 @@ void AIMummy::Damage(RunListEvent* ev) return; } -void FuncMummy(int nObject, int nMessage, int nDamage, int nRun) -{ - AIMummy ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - END_PS_NS diff --git a/source/games/exhumed/src/object.cpp b/source/games/exhumed/src/object.cpp index adce741f6..4f045bd53 100644 --- a/source/games/exhumed/src/object.cpp +++ b/source/games/exhumed/src/object.cpp @@ -902,12 +902,6 @@ void AIElev::Tick(RunListEvent* ev) } -void FuncElev(int nObject, int nMessage, int nDamage, int nRun) -{ - AIElev ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - // done void InitWallFace() { @@ -956,12 +950,6 @@ void AIWallFace::ProcessChannel(RunListEvent* ev) } } -void FuncWallFace(int nObject, int nMessage, int nDamage, int nRun) -{ - AIWallFace ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - // done void InitPoint() { @@ -1265,12 +1253,6 @@ void AISlide::Tick(RunListEvent* ev) } } -void FuncSlide(int nObject, int nMessage, int nDamage, int nRun) -{ - AISlide ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - int BuildTrap(DExhumedActor* pActor, int edx, int ebx, int ecx) { auto pSprite = &pActor->s(); @@ -1433,12 +1415,6 @@ void AITrap::Tick(RunListEvent* ev) } } -void FuncTrap(int nObject, int nMessage, int nDamage, int nRun) -{ - AITrap ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - int BuildArrow(DExhumedActor* nSprite, int nVal) { return BuildTrap(nSprite, 0, -1, nVal); @@ -1566,12 +1542,6 @@ void AISpark::Tick(RunListEvent* ev) } -void FuncSpark(int nObject, int nMessage, int nDamage, int nRun) -{ - AISpark ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - void DimLights() { static short word_96786 = 0; @@ -1917,13 +1887,6 @@ void AIEnergyBlock::RadialDamage(RunListEvent* ev) } - -void FuncEnergyBlock(int nObject, int nMessage, int nDamage, int nRun) -{ - AIEnergyBlock ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - DExhumedActor* BuildObject(DExhumedActor* pActor, int nOjectType, int nHitag) { auto spr = &pActor->s(); @@ -2230,13 +2193,6 @@ void AIObject::RadialDamage(RunListEvent* ev) } } - -void FuncObject(int nObject, int nMessage, int nDamage, int nRun) -{ - AIObject ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - void BuildDrip(DExhumedActor* pActor) { auto pSprite = &pActor->s(); diff --git a/source/games/exhumed/src/player.cpp b/source/games/exhumed/src/player.cpp index 35277a9a9..ed7d011f0 100644 --- a/source/games/exhumed/src/player.cpp +++ b/source/games/exhumed/src/player.cpp @@ -2621,14 +2621,6 @@ sectdone: } - -void FuncPlayer(int nObject, int nMessage, int nDamage, int nRun) -{ - AIPlayer ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - - FSerializer& Serialize(FSerializer& arc, const char* keyname, Player& w, Player* def) { if (arc.BeginObject(keyname)) diff --git a/source/games/exhumed/src/queen.cpp b/source/games/exhumed/src/queen.cpp index 37ca4dc28..5f70c5778 100644 --- a/source/games/exhumed/src/queen.cpp +++ b/source/games/exhumed/src/queen.cpp @@ -690,13 +690,6 @@ void AIQueenEgg::Draw(RunListEvent* ev) seq_PlotSequence(ev->nParam, SeqOffsets[kSeqQueenEgg] + EggSeq[pEgg->nAction].a, pEgg->nFrame, EggSeq[pEgg->nAction].b); } - -void FuncQueenEgg(int nObject, int nMessage, int nDamage, int nRun) -{ - AIQueenEgg ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - void BuildQueenHead(short nQueen) { auto pActor = QueenList[nQueen].pActor; @@ -1109,13 +1102,6 @@ void AIQueenHead::Draw(RunListEvent* ev) seq_PlotSequence(ev->nParam, nSeq, QueenHead.nFrame, edx); } - -void FuncQueenHead(int nObject, int nMessage, int nDamage, int nRun) -{ - AIQueenHead ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - void BuildQueen(DExhumedActor* pActor, int x, int y, int z, int nSector, int nAngle, int nChannel) { QueenCount--; @@ -1531,10 +1517,4 @@ void AIQueen::Draw(RunListEvent* ev) seq_PlotSequence(ev->nParam, SeqOffsets[kSeqQueen] + QueenSeq[nAction].a, QueenList[nQueen].nFrame, QueenSeq[nAction].b); } -void FuncQueen(int nObject, int nMessage, int nDamage, int nRun) -{ - AIQueen ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - END_PS_NS diff --git a/source/games/exhumed/src/ra.cpp b/source/games/exhumed/src/ra.cpp index fb0b547ec..ce5e84f69 100644 --- a/source/games/exhumed/src/ra.cpp +++ b/source/games/exhumed/src/ra.cpp @@ -298,11 +298,5 @@ void AIRa::Draw(RunListEvent* ev) ev->pTSprite->owner = -1; } -void FuncRa(int nObject, int nMessage, int nDamage, int nRun) -{ - AIRa ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); - -} END_PS_NS diff --git a/source/games/exhumed/src/rat.cpp b/source/games/exhumed/src/rat.cpp index 853bbbd7d..f30551e40 100644 --- a/source/games/exhumed/src/rat.cpp +++ b/source/games/exhumed/src/rat.cpp @@ -372,11 +372,4 @@ void AIRat::Tick(RunListEvent* ev) } } - -void FuncRat(int nObject, int nMessage, int nDamage, int nRun) -{ - AIRat ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - END_PS_NS diff --git a/source/games/exhumed/src/rex.cpp b/source/games/exhumed/src/rex.cpp index 103bb24d7..c76112346 100644 --- a/source/games/exhumed/src/rex.cpp +++ b/source/games/exhumed/src/rex.cpp @@ -455,9 +455,4 @@ void AIRex::Tick(RunListEvent* ev) } -void FuncRex(int nObject, int nMessage, int nDamage, int nRun) -{ - AIRex ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} END_PS_NS diff --git a/source/games/exhumed/src/roach.cpp b/source/games/exhumed/src/roach.cpp index 7e195fdc0..5add3b4c6 100644 --- a/source/games/exhumed/src/roach.cpp +++ b/source/games/exhumed/src/roach.cpp @@ -391,10 +391,4 @@ void AIRoach::Tick(RunListEvent* ev) } } -void FuncRoach(int nObject, int nMessage, int nDamage, int nRun) -{ - AIRoach ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - END_PS_NS diff --git a/source/games/exhumed/src/runlist.cpp b/source/games/exhumed/src/runlist.cpp index d6e978c24..8cc8ed4f3 100644 --- a/source/games/exhumed/src/runlist.cpp +++ b/source/games/exhumed/src/runlist.cpp @@ -81,49 +81,91 @@ void SerializeRunList(FSerializer& arc) } } -AiFunc aiFunctions[kFuncMax] = { - FuncElev, - FuncSwReady, - FuncSwPause, - FuncSwStepOn, - FuncSwNotOnPause, - FuncSwPressSector, - FuncSwPressWall, - FuncWallFace, - FuncSlide, - FuncAnubis, - FuncPlayer, - FuncBullet, - FuncSpider, - FuncCreatureChunk, - FuncMummy, - FuncGrenade, - FuncAnim, - FuncSnake, - FuncFish, - FuncLion, - FuncBubble, - FuncLava, - FuncLavaLimb, - FuncObject, - FuncRex, - FuncSet, - FuncQueen, - FuncQueenHead, - FuncRoach, - FuncQueenEgg, - FuncWasp, - FuncTrap, - FuncFishLimb, - FuncRa, - FuncScorp, - FuncSoul, - FuncRat, - FuncEnergyBlock, - FuncSpark, -}; +AIElev aiElev; +AISWReady aiSwReady; +AISWPause aiSwPause; +AISWStepOn aiSwStepOn; +AISWNotOnPause aiSwNotOnPause; +AISWPressSector aiSwPressSector; +AISWPressWall aiSwPressWall; +AIWallFace aiWallFace; +AISlide aiSlide; +AIAnubis aiAnubis; +AIPlayer aiPlayer; +AIBullet aiBullet; +AISpider aiSpider; +AICreatureChunk aiCreatureChunk; +AIMummy aiMummy; +AIGrenade aiGrenade; +AIAnim aiAnim; +AISnake aiSnake; +AIFish aiFish; +AILion aiLion; +AIBubble aiBubble; +AILavaDude aiLava; +AILavaDudeLimb aiLavaLimb; +AIObject aiObject; +AIRex aiRex; +AISet aiSet; +AIQueen aiQueen; +AIQueenHead aiQueenHead; +AIRoach aiRoach; +AIQueenEgg aiQueenEgg; +AIWasp aiWasp; +AITrap aiTrap; +AIFishLimb aiFishLimb; +AIRa aiRa; +AIScorp aiScorp; +AISoul aiSoul; +AIRat aiRat; +AIEnergyBlock aiEnergyBlock; +AISpark aiSpark; +ExhumedAI* ais[kFuncMax] = +{ + &aiElev, + &aiSwReady, + &aiSwPause, + &aiSwStepOn, + &aiSwNotOnPause, + &aiSwPressSector, + &aiSwPressWall, + &aiWallFace, + &aiSlide, + &aiAnubis, + &aiPlayer, + &aiBullet, + &aiSpider, + &aiCreatureChunk, + &aiMummy, + &aiGrenade, + &aiAnim, + &aiSnake, + &aiFish, + &aiLion, + &aiBubble, + &aiLava, + &aiLavaLimb, + &aiObject, + &aiRex, + &aiSet, + &aiQueen, + &aiQueenHead, + &aiRoach, + &aiQueenEgg, + &aiWasp, + &aiTrap, + &aiFishLimb, + &aiRa, + &aiScorp, + &aiSoul, + &aiRat, + &aiEnergyBlock, + &aiSpark, +}; +extern AiFunc aiFunctions[kFuncMax]; + int runlist_GrabRun() { return RunData.Get(); @@ -1722,65 +1764,4 @@ void runlist_DamageEnemy(DExhumedActor* pActor, DExhumedActor* pActor2, short nD } } -// This is only temporary so that the event system can be refactored in smaller steps. -void runlist_DispatchEvent(ExhumedAI* ai, int nObject, int nMessage, int nDamage, int nRun) -{ - RunListEvent ev{}; - ev.nMessage = (EMessageType)(nMessage >> 16); - ev.nObjIndex = RunData[nRun].nObjIndex; - ev.pObjActor = RunData[nRun].pObjActor; - ev.nParam = nObject; - ev.nDamage = nDamage; - ev.nRun = nRun; - switch (ev.nMessage) - { - case EMessageType::ProcessChannel: - ai->ProcessChannel(&ev); - break; - - case EMessageType::Tick: - ai->Tick(&ev); - break; - - case EMessageType::Process: - ai->Process(&ev); - break; - - case EMessageType::Use: - ai->Use(&ev); - break; - - case EMessageType::TouchFloor: - ai->TouchFloor(&ev); - break; - - case EMessageType::LeaveSector: - ai->LeaveSector(&ev); - break; - - case EMessageType::EnterSector: - ai->EnterSector(&ev); - break; - - case EMessageType::Damage: - ev.pOtherActor = &exhumedActors[nObject]; - ai->Damage(&ev); - break; - - case EMessageType::Draw: - ev.pTSprite = &mytsprite[nObject]; - ai->Draw(&ev); - break; - - case EMessageType::RadialDamage: - ev.nRadialDamage = nRadialDamage; - ev.nDamageRadius = nDamageRadius; - ev.pOtherActor = nullptr; // &exhumedActors[nObject]; nObject is always 0 here, this was setting some random invalid target - ev.pRadialActor = pRadialActor; - ai->RadialDamage(&ev); - break; - } -} - - END_PS_NS diff --git a/source/games/exhumed/src/scorp.cpp b/source/games/exhumed/src/scorp.cpp index 49f4cef6b..1433eb64a 100644 --- a/source/games/exhumed/src/scorp.cpp +++ b/source/games/exhumed/src/scorp.cpp @@ -482,9 +482,4 @@ void AIScorp::Effect(RunListEvent* ev, DExhumedActor* pTarget, int mode) } -void FuncScorp(int nObject, int nMessage, int nDamage, int nRun) -{ - AIScorp ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} END_PS_NS diff --git a/source/games/exhumed/src/set.cpp b/source/games/exhumed/src/set.cpp index 4641aa253..ece70e365 100644 --- a/source/games/exhumed/src/set.cpp +++ b/source/games/exhumed/src/set.cpp @@ -173,13 +173,6 @@ void AISoul::Tick(RunListEvent* ev) } - -void FuncSoul(int nObject, int nMessage, int nDamage, int nRun) -{ - AISoul ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - void AISet::RadialDamage(RunListEvent* ev) { auto pActor = ev->pObjActor; @@ -643,9 +636,4 @@ void AISet::Tick(RunListEvent* ev) return; } -void FuncSet(int nObject, int nMessage, int nDamage, int nRun) -{ - AISet ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} END_PS_NS diff --git a/source/games/exhumed/src/snake.cpp b/source/games/exhumed/src/snake.cpp index 9ed664de7..9f44abb13 100644 --- a/source/games/exhumed/src/snake.cpp +++ b/source/games/exhumed/src/snake.cpp @@ -423,10 +423,4 @@ void AISnake::Draw(RunListEvent* ev) ev->pTSprite->owner = -1; } - -void FuncSnake(int nObject, int nMessage, int nDamage, int nRun) -{ - AISnake ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} END_PS_NS diff --git a/source/games/exhumed/src/spider.cpp b/source/games/exhumed/src/spider.cpp index b04ef62ea..df4b89915 100644 --- a/source/games/exhumed/src/spider.cpp +++ b/source/games/exhumed/src/spider.cpp @@ -408,9 +408,4 @@ void AISpider::Damage(RunListEvent* ev) } } -void FuncSpider(int nObject, int nMessage, int nDamage, int nRun) -{ - AISpider ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} END_PS_NS diff --git a/source/games/exhumed/src/switch.cpp b/source/games/exhumed/src/switch.cpp index ed36d3aea..34f235bcc 100644 --- a/source/games/exhumed/src/switch.cpp +++ b/source/games/exhumed/src/switch.cpp @@ -150,12 +150,6 @@ void AISWReady::Process(RunListEvent* ev) } } -void FuncSwReady(int nObject, int nMessage, int, int nRun) -{ - AISWReady ai; - runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); -} - std::pair BuildSwPause(int nChannel, int nLink, int ebx) { for (int i = kMaxSwitches - 1; i >= SwitchCount; i--) @@ -239,12 +233,6 @@ void AISWPause::Process(RunListEvent* ev) SwitchData[nSwitch].nWaitTimer = eax; } -void FuncSwPause(int nObject, int nMessage, int, int nRun) -{ - AISWPause ai; - runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); -} - std::pair BuildSwStepOn(int nChannel, int nLink, int nSector) { if (SwitchCount <= 0 || nLink < 0 || nSector < 0) @@ -309,12 +297,6 @@ void AISWStepOn::TouchFloor(RunListEvent* ev) } } -void FuncSwStepOn(int nObject, int nMessage, int, int nRun) -{ - AISWStepOn ai; - runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); -} - std::pair BuildSwNotOnPause(int nChannel, int nLink, int nSector, int ecx) { if (SwitchCount <= 0 || nLink < 0 || nSector < 0) @@ -401,12 +383,6 @@ void AISWNotOnPause::TouchFloor(RunListEvent* ev) return; } -void FuncSwNotOnPause(int nObject, int nMessage, int, int nRun) -{ - AISWNotOnPause ai; - runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); -} - std::pair BuildSwPressSector(int nChannel, int nLink, int nSector, int keyMask) { if (SwitchCount <= 0 || nLink < 0 || nSector < 0) @@ -474,12 +450,6 @@ void AISWPressSector::Use(RunListEvent* ev) } -void FuncSwPressSector(int nObject, int nMessage, int, int nRun) -{ - AISWPressSector ai; - runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); -} - std::pair BuildSwPressWall(short nChannel, short nLink, short nWall) { if (SwitchCount <= 0 || nLink < 0 || nWall < 0) { @@ -541,9 +511,4 @@ void AISWPressWall::Use(RunListEvent* ev) PlayFXAtXYZ(StaticSound[nSwitchSound], wall[nWall].x, wall[nWall].y, 0, nSector, CHANF_LISTENERZ); } -void FuncSwPressWall(int nObject, int nMessage, int, int nRun) -{ - AISWPressWall ai; - runlist_DispatchEvent(&ai, nObject, nMessage, 0, nRun); -} END_PS_NS diff --git a/source/games/exhumed/src/wasp.cpp b/source/games/exhumed/src/wasp.cpp index b4be53f4d..f655ebc3a 100644 --- a/source/games/exhumed/src/wasp.cpp +++ b/source/games/exhumed/src/wasp.cpp @@ -364,10 +364,4 @@ void AIWasp::Tick(RunListEvent* ev) } } -void FuncWasp(int nObject, int nMessage, int nDamage, int nRun) -{ - AIWasp ai; - runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun); -} - END_PS_NS