diff options
| author | Aetias <144526980+AetiasHax@users.noreply.github.com> | 2025-12-29 20:12:14 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-29 20:12:14 +0100 |
| commit | 90b0175de6ef7e8aa6573e6dc4b41ef7925efc6b (patch) | |
| tree | 607f150ad2cacab3f1d54d287edff39e743456f9 /src/04_Load | |
| parent | fc691f4c8f76d11d6b47149fefadaca4470ab2a1 (diff) | |
ActorManager_04 (#138)
* Map symbol in Game
* ActorManager_04 OK
Diffstat (limited to 'src/04_Load')
| -rw-r--r-- | src/04_Load/Actor/ActorManager.cpp | 13 | ||||
| -rw-r--r-- | src/04_Load/Actor/ActorManager_04.cpp | 297 |
2 files changed, 297 insertions, 13 deletions
diff --git a/src/04_Load/Actor/ActorManager.cpp b/src/04_Load/Actor/ActorManager.cpp deleted file mode 100644 index a1ace7fe..00000000 --- a/src/04_Load/Actor/ActorManager.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "Actor/ActorManager.hpp" - -void ActorManager::Create() {} -void ActorManager::Destroy() {} -ActorManager::ActorManager() {} -ActorManager::~ActorManager() {} -void ActorManager::func_ov004_0210532c() {} -void ActorManager::func_ov004_021053dc() {} -void ActorManager::func_ov004_021054a4(s32 *param1, s32 param2, unk32 param3) {} -void ActorManager::func_ov004_0210554c() {} -bool ActorManager::func_ov004_02105578(unk32 param1) {} -bool ActorManager::func_ov004_02105608(unk32 param1, unk32 param2, unk32 param3) {} -void ActorManager::func_ov004_021056b8() {}
\ No newline at end of file diff --git a/src/04_Load/Actor/ActorManager_04.cpp b/src/04_Load/Actor/ActorManager_04.cpp new file mode 100644 index 00000000..84a1f970 --- /dev/null +++ b/src/04_Load/Actor/ActorManager_04.cpp @@ -0,0 +1,297 @@ +#include "Actor/ActorManager.hpp" +#include "Actor/ActorSpawner.hpp" +#include "DTCM/UnkStruct_027e0d38.hpp" +#include "Game/Game.hpp" +#include "Item/ItemManager.hpp" +#include "Save/AdventureFlags.hpp" +#include "Unknown/UnkStruct_027e0dbc.hpp" + +extern u32 *data_027e0ce0[]; +THUMB void ActorManager::Create() { + if (!gActorManager) { + gActorManager = new(data_027e0ce0[1], 4) ActorManager(); + } +} + +THUMB void ActorManager::Destroy() { + if (gActorManager) { + delete gActorManager; + gActorManager = NULL; + } +} + +extern "C" void func_ov004_0210682c(); +extern "C" void func_ov004_021056c8(); +THUMB ActorManager::ActorManager() { + this->mMaxActors = 0; + this->mNumActors = 0; + this->mMaxActorIndex = 0; + this->mCacheEmptyActorIndex = -1; + this->mNextActorId = 0xb; + this->mActorTable = NULL; + this->mUnk_14 = NULL; + this->mUnk_18 = true; + ActorSpawner::Create(); + func_ov004_0210682c(); + func_ov004_021056c8(); + this->mUnk_1c = 0; + this->mUnk_20 = 0; + this->mUnk_24 = 0; + this->mUnk_28 = 0xff; + this->mUnk_29 = false; + this->mUnk_2c = 0; + this->mUnk_30 = 0; + this->mUnk_34 = 0; + this->mUnk_38 = 0xff; + this->mUnk_3c = 0x7fffffff; + this->mUnk_40 = 0; + this->mUnk_44 = 0; + this->mUnk_48 = 0x7fffffff; + this->mUnk_4c = 0; + this->mUnk_50 = 0; + this->mUnk_54 = 0xff; + this->mUnk_56 = 0xff; + this->mUnk_55 = this->mUnk_56; + this->mUnk_58 = 0x7fffffff; + this->mUnk_5c = 0; + this->mUnk_60 = 0; + this->mUnk_64 = 0xff; + this->mUnk_65 = 0; + for (s32 i = 0; i < 5; ++i) { + this->mUnk_68[i].unk_0 = 0x7fffffff; + this->mUnk_68[i].unk_4 = 0; + this->mUnk_68[i].unk_8 = 0; + } + this->mUnk_c3 = 0xff; + if (gGame.mModeId == 2) { + if (data_027e0dbc.func_ov003_020f3d5c(4) == 0) { + gAdventureFlags->Set(0xe8, false); + } + gAdventureFlags->Set(0x56, false); + gAdventureFlags->Set(0x9e, false); + } +} + +extern "C" void func_ov004_021056f0(); +extern "C" void func_ov004_02106854(); +THUMB ActorManager::~ActorManager() { + func_ov004_021056f0(); + func_ov004_02106854(); + ActorSpawner::Destroy(); +} + +extern unk32 *data_027e0ff4; +extern "C" void func_ov017_02168a54(); +extern "C" void func_ov025_0216d6a0(); +extern unk32 data_ov029_0217a4ac; +extern "C" void func_ov029_0216d6a0(unk32 *); +THUMB void ActorManager::func_ov004_0210532c() { + bool bVar1; + int iVar2; + + gActorSpawner->func_ov000_020c4014(); + *data_027e0ff4 = 0; + if (data_027e0d38->mUnk_14 != 1) { + iVar2 = data_027e0d38->mUnk_0c.func_ov000_020a5e9c(); + if ((iVar2 == 0x29) || (iVar2 == 0x25)) { + bVar1 = true; + } else { + bVar1 = false; + } + if (bVar1) { + func_ov017_02168a54(); + } + if (iVar2 == 0x29) { + func_ov025_0216d6a0(); + } + if ((iVar2 == 0x31) || (iVar2 == 0x33)) { + func_ov029_0216d6a0(&data_ov029_0217a4ac); + } + } + if (data_027e0d38->mUnk_0c.func_ov000_020a5e9c() == 0) { + switch (data_027e0d38->mUnk_28->mUnk_1c.func_ov000_020a5e9c()) { + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + break; + default: + this->mUnk_64 = 0xff; + this->mUnk_c3 = 0xff; + break; + } + } + return; +} + +extern "C" void func_020174a4(u32 *, void *); +extern "C" void func_ov017_02168a90(); +extern "C" void func_ov025_0216d6dc(); +extern "C" void func_ov029_0216d6f0(unk32 *); +extern "C" void func_ov000_020c33b0(); +extern unk32 data_027e0fec; +extern "C" void func_ov004_02105950(unk32); +THUMB void ActorManager::func_ov004_021053dc() { + bool bVar1; + int iVar2; + Actor **ppAVar3; + s32 i; + + for (i = 0, ppAVar3 = this->mActorTable; i < this->mMaxActors; ++i, ++ppAVar3) { + if (*ppAVar3) { + this->DeleteActor(i, true); + } + } + func_020174a4(data_027e0ce0[1], this->mActorTable); + this->mActorTable = NULL; + delete this->mUnk_14; + this->mUnk_14 = NULL; + if (data_027e0d38->mUnk_14 != 1) { + iVar2 = data_027e0d38->mUnk_0c.func_ov000_020a5e9c(); + if ((iVar2 == 0x29) || (iVar2 == 0x25)) { + bVar1 = true; + } else { + bVar1 = false; + } + if (bVar1) { + func_ov017_02168a90(); + } + if (iVar2 == 0x29) { + func_ov025_0216d6dc(); + } + if ((iVar2 == 0x31) || (iVar2 == 0x33)) { + func_ov029_0216d6f0(&data_ov029_0217a4ac); + } + } + gActorSpawner->func_ov000_020c4018(); + func_ov000_020c33b0(); + func_ov004_02105950(data_027e0fec); + this->mMaxActors = 0; + this->mNumActors = 0; + this->mMaxActorIndex = 0; + this->mCacheEmptyActorIndex = -1; + this->mNextActorId = 0xb; +} + +extern "C" void func_ov000_020c3388(unk32); +extern "C" void *NewEXPH(u32 *id, s32 length, s32 param_3); +THUMB void ActorManager::func_ov004_021054a4(FileEntryFlag *param1, s32 param2, unk32 param3) { + u16 sVar1; + u16 sVar2; + unk32 iVar3; + FileEntry_Unk8 *fileEntry_unk; + Actor **ppAVar4; + void *pvVar5; + + fileEntry_unk = param1->vfunc_08(0x10); + sVar1 = fileEntry_unk->mUnk_08; + if (*(int *) (param2 + 8) == 1) { + this->mMaxActors = fileEntry_unk->mUnk_0a + 0x20; + sVar2 = gAdventureFlags->Get_FlagsUnk_42(*(int *) (param2 + 0xc)); + sVar2 = sVar1 + 0x80 + sVar2; + } else { + this->mMaxActors = fileEntry_unk->mUnk_0a + 0x40; + iVar3 = data_027e0d38->func_ov000_02078b40(); + if (iVar3 == 2) { + sVar2 = sVar1 + 0x280; + } else { + sVar2 = sVar1 + 0xc0; + } + } + param1->vfunc_0c(); + func_ov000_020c3388(sVar2); + this->mActorTable = (Actor **) NewEXPH(data_027e0ce0[1], this->mMaxActors * 4, 4); + Fill256(0, this->mActorTable, this->mMaxActors * 4); + this->mUnk_14 = new(data_027e0ce0[1], 4) ActorManager_Unk14(this->mMaxActors); +} + +THUMB void ActorManager::func_ov004_0210554c() { + s32 i; + Actor **iter; + + for (i = 0, iter = this->mActorTable; i < this->mMaxActors; ++i, ++iter) { + Actor *actor = *iter; + if (actor && actor->mUnk_03c >= 0) { + actor->vfunc_0c(); + } + } +} + +extern "C" void func_ov004_021058cc(unk32); +extern unk32 data_027e10b4; +extern "C" void func_ov030_02184554(unk32, unk32); +extern "C" void func_ov030_021843c4(unk32, unk32); +extern "C" void func_ov030_02184640(unk32); +extern unk32 data_027e10b8; +extern "C" void func_ov025_0216daa4(unk32, unk32); +extern "C" void func_ov025_0216d804(unk32, unk32); +THUMB bool ActorManager::func_ov004_02105578(unk32 param1) { + bool bVar1; + int iVar2; + + this->mUnk_18 = true; + func_ov004_021058cc(data_027e0fec); + if (data_027e0d38->mUnk_14 != 1) { + iVar2 = data_027e0d38->mUnk_0c.func_ov000_020a5e9c(); + if ((iVar2 == 0x29) || (iVar2 == 0x25)) { + bVar1 = true; + } else { + bVar1 = false; + } + if ((bVar1) && (OverlayId_30 == gOverlayManager.mLoadedOverlays[7])) { + func_ov030_02184554(data_027e10b4, param1); + func_ov030_021843c4(data_027e10b4, param1); + func_ov030_02184640(data_027e10b4); + } + if (iVar2 == 0x29) { + func_ov025_0216daa4(data_027e10b8, param1); + func_ov025_0216d804(data_027e10b8, param1); + } + } + return true; +} + +extern "C" void func_ov030_021843ec(unk32, unk32); +extern "C" void func_ov017_02168bc0(unk32); +extern "C" void func_ov025_0216d844(unk32, unk32); +THUMB bool ActorManager::func_ov004_02105608(unk32 param1, unk32 param2, unk32 param3) { + bool bVar1; + int iVar2; + + if (data_027e0d38->mUnk_14 != 1) { + iVar2 = data_027e0d38->mUnk_0c.func_ov000_020a5e9c(); + if ((iVar2 == 0x29) || (iVar2 == 0x25)) { + bVar1 = true; + } else { + bVar1 = false; + } + if ((bVar1) && (OverlayId_30 == gOverlayManager.mLoadedOverlays[7])) { + func_ov030_021843ec(data_027e10b4, param3); + func_ov017_02168bc0(data_027e10b4); + } + if (iVar2 == 0x29) { + func_ov025_0216d844(data_027e10b8, param3); + } + } + + s32 i; + Actor **iter; + for (i = 0, iter = this->mActorTable; i < this->mMaxActors; ++i, ++iter) { + if (*iter != NULL && !(*iter)->vfunc_30()) { + (*iter)->vfunc_24(); + if (!(*iter)->mGrabbed) { + this->DeleteActor(i, false); + } + } + } + return true; +} + +THUMB void ActorManager::func_ov004_021056b8() { + gItemManager->SpawnFairies(); +} |
