From 90b0175de6ef7e8aa6573e6dc4b41ef7925efc6b Mon Sep 17 00:00:00 2001 From: Aetias <144526980+AetiasHax@users.noreply.github.com> Date: Mon, 29 Dec 2025 20:12:14 +0100 Subject: [PATCH] ActorManager_04 (#138) * Map symbol in Game * ActorManager_04 OK --- config/eur/arm9/overlays/ov003/symbols.txt | 2 +- config/eur/arm9/overlays/ov004/delinks.txt | 4 + config/eur/arm9/overlays/ov004/relocs.txt | 12 +- config/eur/arm9/overlays/ov004/symbols.txt | 6 +- config/usa/arm9/overlays/ov003/symbols.txt | 2 +- config/usa/arm9/overlays/ov004/delinks.txt | 4 + config/usa/arm9/overlays/ov004/relocs.txt | 12 +- config/usa/arm9/overlays/ov004/symbols.txt | 6 +- include/Actor/ActorManager.hpp | 38 ++- include/Player/MotionParams.hpp | 11 - include/Player/PlayerLinkBase.hpp | 4 +- include/Save/SaveItemManager.hpp | 2 +- include/Unknown/UnkStruct_027e0dbc.hpp | 2 + include/lib/files.h | 12 - include/lib/files.hpp | 39 +++ src/04_Load/Actor/ActorManager.cpp | 13 - src/04_Load/Actor/ActorManager_04.cpp | 297 +++++++++++++++++++++ src/08_GameStart/Init.cpp | 1 - 18 files changed, 398 insertions(+), 69 deletions(-) delete mode 100644 include/Player/MotionParams.hpp delete mode 100644 include/lib/files.h create mode 100644 include/lib/files.hpp delete mode 100644 src/04_Load/Actor/ActorManager.cpp create mode 100644 src/04_Load/Actor/ActorManager_04.cpp diff --git a/config/eur/arm9/overlays/ov003/symbols.txt b/config/eur/arm9/overlays/ov003/symbols.txt index c805e540..ee39ed3a 100644 --- a/config/eur/arm9/overlays/ov003/symbols.txt +++ b/config/eur/arm9/overlays/ov003/symbols.txt @@ -116,7 +116,7 @@ func_ov003_020f3c28 kind:function(thumb,size=0x5a) addr:0x020f3c28 func_ov003_020f3c84 kind:function(thumb,size=0x42) addr:0x020f3c84 func_ov003_020f3cc8 kind:function(arm,size=0x8) addr:0x020f3cc8 func_ov003_020f3cd0 kind:function(arm,size=0x8c) addr:0x020f3cd0 -func_ov003_020f3d5c kind:function(thumb,size=0x16) addr:0x020f3d5c +_ZN18UnkStruct_027e0dbc19func_ov003_020f3d5cEi kind:function(thumb,size=0x16) addr:0x020f3d5c func_ov003_020f3d74 kind:function(thumb,size=0xc) addr:0x020f3d74 func_ov003_020f3d80 kind:function(thumb,size=0xc) addr:0x020f3d80 func_ov003_020f3d8c kind:function(thumb,size=0x6) addr:0x020f3d8c diff --git a/config/eur/arm9/overlays/ov004/delinks.txt b/config/eur/arm9/overlays/ov004/delinks.txt index 3a3f9a9f..86850f15 100644 --- a/config/eur/arm9/overlays/ov004/delinks.txt +++ b/config/eur/arm9/overlays/ov004/delinks.txt @@ -11,3 +11,7 @@ src/04_Load/Player/LinkStateMove_04.cpp: src/04_Load/Actor/Navi/ActorNavi_04.cpp: .text start:0x02107810 end:0x02107c00 + +src/04_Load/Actor/ActorManager_04.cpp: + complete + .text start:0x021051e0 end:0x021056c8 diff --git a/config/eur/arm9/overlays/ov004/relocs.txt b/config/eur/arm9/overlays/ov004/relocs.txt index ea0b6de9..fe9777c4 100644 --- a/config/eur/arm9/overlays/ov004/relocs.txt +++ b/config/eur/arm9/overlays/ov004/relocs.txt @@ -1052,14 +1052,14 @@ from:0x02105324 kind:thumb_call_arm to:0x020c3fd4 module:overlay(0) from:0x02105334 kind:thumb_call_arm to:0x020c4014 module:overlay(0) from:0x0210534c kind:thumb_call_arm to:0x020a5e9c module:overlay(0) from:0x02105364 kind:thumb_call_arm to:0x02168a54 module:overlay(17) -from:0x0210536c kind:thumb_call_arm to:0x0216d6a0 module:overlays(19,20,21,22,23,24,25,26,27,28,29) -from:0x0210537a kind:thumb_call_arm to:0x0216d6a0 module:overlays(19,20,21,22,23,24,25,26,27,28,29) +from:0x0210536c kind:thumb_call_arm to:0x0216d6a0 module:overlay(25) +from:0x0210537a kind:thumb_call_arm to:0x0216d6a0 module:overlay(29) from:0x02105384 kind:thumb_call_arm to:0x020a5e9c module:overlay(0) from:0x02105394 kind:thumb_call_arm to:0x020a5e9c module:overlay(0) from:0x021053cc kind:load to:0x027e0fe8 module:dtcm from:0x021053d0 kind:load to:0x027e0ff4 module:dtcm from:0x021053d4 kind:load to:0x027e0d38 module:dtcm -from:0x021053d8 kind:load to:0x0217a4ac module:overlays(22,23,24,25,26,29,61) +from:0x021053d8 kind:load to:0x0217a4ac module:overlay(29) from:0x021053f8 kind:thumb_call_arm to:0x020c33d4 module:overlay(0) from:0x0210540c kind:thumb_call to:0x020174a4 module:main from:0x0210541c kind:thumb_call to:0x0210f744 module:overlay(4) @@ -1067,13 +1067,13 @@ from:0x02105422 kind:thumb_call_arm to:0x0202ea0c module:main from:0x02105436 kind:thumb_call_arm to:0x020a5e9c module:overlay(0) from:0x0210544e kind:thumb_call_arm to:0x02168a90 module:overlay(17) from:0x02105456 kind:thumb_call_arm to:0x0216d6dc module:overlay(25) -from:0x02105464 kind:thumb_call_arm to:0x0216d6f0 module:overlays(23,29) +from:0x02105464 kind:thumb_call_arm to:0x0216d6f0 module:overlay(29) from:0x0210546c kind:thumb_call_arm to:0x020c4018 module:overlay(0) from:0x02105470 kind:thumb_call to:0x020c33b0 module:overlay(0) from:0x02105478 kind:thumb_call to:0x02105950 module:overlay(4) from:0x02105490 kind:load to:0x027e0ce0 module:dtcm from:0x02105494 kind:load to:0x027e0d38 module:dtcm -from:0x02105498 kind:load to:0x0217a4ac module:overlays(22,23,24,25,26,29,61) +from:0x02105498 kind:load to:0x0217a4ac module:overlay(29) from:0x0210549c kind:load to:0x027e0fe8 module:dtcm from:0x021054a0 kind:load to:0x027e0fec module:dtcm from:0x021054ca kind:thumb_call_arm to:0x02097c80 module:overlay(0) @@ -1091,7 +1091,7 @@ from:0x02105594 kind:thumb_call_arm to:0x020a5e9c module:overlay(0) from:0x021055bc kind:thumb_call to:0x02184554 module:overlay(30) from:0x021055c6 kind:thumb_call to:0x021843c4 module:overlay(30) from:0x021055ce kind:thumb_call to:0x02184640 module:overlay(30) -from:0x021055dc kind:thumb_call_arm to:0x0216daa4 module:overlays(19,25) +from:0x021055dc kind:thumb_call_arm to:0x0216daa4 module:overlay(25) from:0x021055e6 kind:thumb_call_arm to:0x0216d804 module:overlay(25) from:0x021055f0 kind:load to:0x027e0fec module:dtcm from:0x021055f4 kind:load to:0x027e0d38 module:dtcm diff --git a/config/eur/arm9/overlays/ov004/symbols.txt b/config/eur/arm9/overlays/ov004/symbols.txt index 02a8328f..740920d8 100644 --- a/config/eur/arm9/overlays/ov004/symbols.txt +++ b/config/eur/arm9/overlays/ov004/symbols.txt @@ -135,7 +135,7 @@ _ZN12ActorManagerC1Ev kind:function(thumb,size=0xe8) addr:0x02105230 _ZN12ActorManagerD1Ev kind:function(thumb,size=0x14) addr:0x02105318 _ZN12ActorManager19func_ov004_0210532cEv kind:function(thumb,size=0xb0) addr:0x0210532c _ZN12ActorManager19func_ov004_021053dcEv kind:function(thumb,size=0xc8) addr:0x021053dc -_ZN12ActorManager19func_ov004_021054a4EPiii kind:function(thumb,size=0xa8) addr:0x021054a4 +_ZN12ActorManager19func_ov004_021054a4EP13FileEntryFlagii kind:function(thumb,size=0xa8) addr:0x021054a4 _ZN12ActorManager19func_ov004_0210554cEv kind:function(thumb,size=0x2c) addr:0x0210554c _ZN12ActorManager19func_ov004_02105578Ei kind:function(thumb,size=0x90) addr:0x02105578 _ZN12ActorManager19func_ov004_02105608Eiii kind:function(thumb,size=0xb0) addr:0x02105608 @@ -435,8 +435,8 @@ func_ov004_0210f650 kind:function(thumb,size=0x20) addr:0x0210f650 func_ov004_0210f670 kind:function(thumb,size=0x6c) addr:0x0210f670 func_ov004_0210f6dc kind:function(arm,size=0x4) addr:0x0210f6dc func_ov004_0210f6e0 kind:function(thumb,size=0x28) addr:0x0210f6e0 -func_ov004_0210f708 kind:function(thumb,size=0x3c) addr:0x0210f708 -func_ov004_0210f744 kind:function(thumb,size=0x26) addr:0x0210f744 +_ZN18ActorManager_Unk14C1Ej kind:function(thumb,size=0x3c) addr:0x0210f708 +_ZN18ActorManager_Unk14D1Ev kind:function(thumb,size=0x26) addr:0x0210f744 func_ov004_0210f76c kind:function(thumb,size=0x24) addr:0x0210f76c func_ov004_0210f790 kind:function(thumb,size=0x24) addr:0x0210f790 func_ov004_0210f7b4 kind:function(thumb,size=0x38) addr:0x0210f7b4 diff --git a/config/usa/arm9/overlays/ov003/symbols.txt b/config/usa/arm9/overlays/ov003/symbols.txt index ce78bf0e..105805cd 100644 --- a/config/usa/arm9/overlays/ov003/symbols.txt +++ b/config/usa/arm9/overlays/ov003/symbols.txt @@ -116,7 +116,7 @@ func_ov003_020f3c28 kind:function(thumb,size=0x5a) addr:0x020f3bc8 func_ov003_020f3c84 kind:function(thumb,size=0x42) addr:0x020f3c24 func_ov003_020f3cc8 kind:function(arm,size=0x8) addr:0x020f3c68 func_ov003_020f3cd0 kind:function(arm,size=0x8c) addr:0x020f3c70 -func_ov003_020f3d5c kind:function(thumb,size=0x16) addr:0x020f3cfc +_ZN18UnkStruct_027e0dbc19func_ov003_020f3d5cEi kind:function(thumb,size=0x16) addr:0x020f3cfc func_ov003_020f3d74 kind:function(thumb,size=0xc) addr:0x020f3d14 func_ov003_020f3d80 kind:function(thumb,size=0xc) addr:0x020f3d20 func_ov003_020f3d8c kind:function(thumb,size=0x6) addr:0x020f3d2c diff --git a/config/usa/arm9/overlays/ov004/delinks.txt b/config/usa/arm9/overlays/ov004/delinks.txt index 39f0bf59..d7cf827e 100644 --- a/config/usa/arm9/overlays/ov004/delinks.txt +++ b/config/usa/arm9/overlays/ov004/delinks.txt @@ -11,3 +11,7 @@ src/04_Load/Player/LinkStateMove_04.cpp: src/04_Load/Actor/Navi/ActorNavi_04.cpp: .text start:0x02107790 end:0x02107b80 + +src/04_Load/Actor/ActorManager_04.cpp: + complete + .text start:0x02105160 end:0x02105648 diff --git a/config/usa/arm9/overlays/ov004/relocs.txt b/config/usa/arm9/overlays/ov004/relocs.txt index b7303b1d..07a60ef9 100644 --- a/config/usa/arm9/overlays/ov004/relocs.txt +++ b/config/usa/arm9/overlays/ov004/relocs.txt @@ -1052,14 +1052,14 @@ from:0x021052a4 kind:thumb_call_arm to:0x020c3f74 module:overlay(0) from:0x021052b4 kind:thumb_call_arm to:0x020c3fb4 module:overlay(0) from:0x021052cc kind:thumb_call_arm to:0x020a5e3c module:overlay(0) from:0x021052e4 kind:thumb_call_arm to:0x021689b4 module:overlay(17) -from:0x021052ec kind:thumb_call_arm to:0x0216d600 module:overlays(19,20,21,22,23,24,25,26,27,28,29) -from:0x021052fa kind:thumb_call_arm to:0x0216d600 module:overlays(19,20,21,22,23,24,25,26,27,28,29) +from:0x021052ec kind:thumb_call_arm to:0x0216d600 module:overlay(25) +from:0x021052fa kind:thumb_call_arm to:0x0216d600 module:overlay(29) from:0x02105304 kind:thumb_call_arm to:0x020a5e3c module:overlay(0) from:0x02105314 kind:thumb_call_arm to:0x020a5e3c module:overlay(0) from:0x0210534c kind:load to:0x027e0fe8 module:dtcm from:0x02105350 kind:load to:0x027e0ff4 module:dtcm from:0x02105354 kind:load to:0x027e0d38 module:dtcm -from:0x02105358 kind:load to:0x0217a40c module:overlays(22,23,24,25,26,29,61) +from:0x02105358 kind:load to:0x0217a40c module:overlay(29) from:0x02105378 kind:thumb_call_arm to:0x020c3374 module:overlay(0) from:0x0210538c kind:thumb_call to:0x020174a4 module:main from:0x0210539c kind:thumb_call to:0x0210f6c4 module:overlay(4) @@ -1067,13 +1067,13 @@ from:0x021053a2 kind:thumb_call_arm to:0x0202ea08 module:main from:0x021053b6 kind:thumb_call_arm to:0x020a5e3c module:overlay(0) from:0x021053ce kind:thumb_call_arm to:0x021689f0 module:overlay(17) from:0x021053d6 kind:thumb_call_arm to:0x0216d63c module:overlay(25) -from:0x021053e4 kind:thumb_call_arm to:0x0216d650 module:overlays(23,29) +from:0x021053e4 kind:thumb_call_arm to:0x0216d650 module:overlay(29) from:0x021053ec kind:thumb_call_arm to:0x020c3fb8 module:overlay(0) from:0x021053f0 kind:thumb_call to:0x020c3350 module:overlay(0) from:0x021053f8 kind:thumb_call to:0x021058d0 module:overlay(4) from:0x02105410 kind:load to:0x027e0ce0 module:dtcm from:0x02105414 kind:load to:0x027e0d38 module:dtcm -from:0x02105418 kind:load to:0x0217a40c module:overlays(22,23,24,25,26,29,61) +from:0x02105418 kind:load to:0x0217a40c module:overlay(29) from:0x0210541c kind:load to:0x027e0fe8 module:dtcm from:0x02105420 kind:load to:0x027e0fec module:dtcm from:0x0210544a kind:thumb_call_arm to:0x02097c20 module:overlay(0) @@ -1091,7 +1091,7 @@ from:0x02105514 kind:thumb_call_arm to:0x020a5e3c module:overlay(0) from:0x0210553c kind:thumb_call to:0x021844b4 module:overlay(30) from:0x02105546 kind:thumb_call to:0x02184324 module:overlay(30) from:0x0210554e kind:thumb_call to:0x021845a0 module:overlay(30) -from:0x0210555c kind:thumb_call_arm to:0x0216da04 module:overlays(19,25) +from:0x0210555c kind:thumb_call_arm to:0x0216da04 module:overlay(25) from:0x02105566 kind:thumb_call_arm to:0x0216d764 module:overlay(25) from:0x02105570 kind:load to:0x027e0fec module:dtcm from:0x02105574 kind:load to:0x027e0d38 module:dtcm diff --git a/config/usa/arm9/overlays/ov004/symbols.txt b/config/usa/arm9/overlays/ov004/symbols.txt index d0c72faa..18887b0a 100644 --- a/config/usa/arm9/overlays/ov004/symbols.txt +++ b/config/usa/arm9/overlays/ov004/symbols.txt @@ -135,7 +135,7 @@ _ZN12ActorManagerC1Ev kind:function(thumb,size=0xe8) addr:0x021051b0 _ZN12ActorManagerD1Ev kind:function(thumb,size=0x14) addr:0x02105298 _ZN12ActorManager19func_ov004_0210532cEv kind:function(thumb,size=0xb0) addr:0x021052ac _ZN12ActorManager19func_ov004_021053dcEv kind:function(thumb,size=0xc8) addr:0x0210535c -_ZN12ActorManager19func_ov004_021054a4EPiii kind:function(thumb,size=0xa8) addr:0x02105424 +_ZN12ActorManager19func_ov004_021054a4EP13FileEntryFlagii kind:function(thumb,size=0xa8) addr:0x02105424 _ZN12ActorManager19func_ov004_0210554cEv kind:function(thumb,size=0x2c) addr:0x021054cc _ZN12ActorManager19func_ov004_02105578Ei kind:function(thumb,size=0x90) addr:0x021054f8 _ZN12ActorManager19func_ov004_02105608Eiii kind:function(thumb,size=0xb0) addr:0x02105588 @@ -435,8 +435,8 @@ func_ov004_0210f650 kind:function(thumb,size=0x20) addr:0x0210f5d0 func_ov004_0210f670 kind:function(thumb,size=0x6c) addr:0x0210f5f0 func_ov004_0210f6dc kind:function(arm,size=0x4) addr:0x0210f65c func_ov004_0210f6e0 kind:function(thumb,size=0x28) addr:0x0210f660 -func_ov004_0210f708 kind:function(thumb,size=0x3c) addr:0x0210f688 -func_ov004_0210f744 kind:function(thumb,size=0x26) addr:0x0210f6c4 +_ZN18ActorManager_Unk14C1Ej kind:function(thumb,size=0x3c) addr:0x0210f688 +_ZN18ActorManager_Unk14D1Ev kind:function(thumb,size=0x26) addr:0x0210f6c4 func_ov004_0210f76c kind:function(thumb,size=0x24) addr:0x0210f6ec func_ov004_0210f790 kind:function(thumb,size=0x24) addr:0x0210f710 func_ov004_0210f7b4 kind:function(thumb,size=0x38) addr:0x0210f734 diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index 08ef7fd2..0b3b2677 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -3,6 +3,8 @@ #include "global.h" #include "types.h" +#include "lib/files.hpp" + #include "Actor/Actor.hpp" #include "Actor/ActorRef.hpp" #include "Actor/FilterActorBase.hpp" @@ -41,7 +43,18 @@ struct ActorList { /* c */ }; -class ActorManager { +class ActorManager_Unk14 : public SysObject { +public: + /* 00 */ unk8 mUnk_00[4]; + /* 04 */ void *mUnk_04; + /* 08 */ unk8 mUnk_08[4]; + /* 0c */ + + ActorManager_Unk14(u32 maxActors); + ~ActorManager_Unk14(); +}; + +class ActorManager : public SysObject { public: /* 00 */ u16 mMaxActors; /* 02 */ u16 mNumActors; @@ -49,32 +62,39 @@ public: /* 08 */ s32 mCacheEmptyActorIndex; /* 0c */ unk32 mNextActorId; /* 10 */ Actor **mActorTable; - /* 14 */ void *mUnk_14; - /* 18 */ unk8 mUnk_18[4]; + /* 14 */ ActorManager_Unk14 *mUnk_14; + /* 18 */ bool mUnk_18; /* 1c */ unk32 mUnk_1c; /* 20 */ unk32 mUnk_20; /* 24 */ unk32 mUnk_24; - /* 28 */ unk8 mUnk_28; + /* 28 */ u8 mUnk_28; /* 29 */ bool mUnk_29; /* 2a */ unk8 mUnk_2a; /* 2b */ unk8 mUnk_2b; /* 2c */ unk32 mUnk_2c; /* 30 */ unk32 mUnk_30; /* 34 */ unk32 mUnk_34; - /* 38 */ unk8 mUnk_38[4]; + /* 38 */ u8 mUnk_38; + /* 39 */ unk8 mUnk_39[3]; /* 3c */ u32 mUnk_3c; /* 40 */ unk32 mUnk_40; /* 44 */ unk32 mUnk_44; /* 48 */ u32 mUnk_48; /* 4c */ unk32 mUnk_4c; /* 50 */ unk32 mUnk_50; - /* 54 */ unk8 mUnk_54[4]; + /* 54 */ u8 mUnk_54; + /* 55 */ u8 mUnk_55; + /* 56 */ u8 mUnk_56; + /* 57 */ unk8 mUnk_57; /* 58 */ u32 mUnk_58; /* 5c */ unk32 mUnk_5c; /* 60 */ unk32 mUnk_60; - /* 64 */ unk8 mUnk_64[4]; + /* 64 */ u8 mUnk_64; + /* 65 */ unk8 mUnk_65; + /* 66 */ unk8 mUnk_66[2]; /* 68 */ ActorManager_UnkStruct_68 mUnk_68[5]; - /* a4 */ unk8 mUnk_a4[0x20]; + /* a4 */ unk8 mUnk_a4[0x1f]; + /* a4 */ u8 mUnk_c3; /* c4 */ void DeleteActor(u32 index, bool param2); @@ -100,7 +120,7 @@ public: ~ActorManager(); void func_ov004_0210532c(); void func_ov004_021053dc(); - void func_ov004_021054a4(s32 *param1, s32 param2, unk32 param3); + void func_ov004_021054a4(FileEntryFlag *param1, s32 param2, unk32 param3); void func_ov004_0210554c(); bool func_ov004_02105578(unk32 param1); bool func_ov004_02105608(unk32 param1, unk32 param2, unk32 param3); diff --git a/include/Player/MotionParams.hpp b/include/Player/MotionParams.hpp deleted file mode 100644 index f04f8a08..00000000 --- a/include/Player/MotionParams.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "global.h" -#include "lib/files.h" -#include "types.h" - -struct MotionParams { - /* 00 */ FileEntry motionBhio; // motion.bhio - /* 10 */ unk8 mUnk_10; - /* 11 */ -}; diff --git a/include/Player/PlayerLinkBase.hpp b/include/Player/PlayerLinkBase.hpp index 9d85416e..ae46ebdf 100644 --- a/include/Player/PlayerLinkBase.hpp +++ b/include/Player/PlayerLinkBase.hpp @@ -1,13 +1,13 @@ #pragma once #include "global.h" +#include "lib/files.hpp" #include "nds/math.h" #include "types.h" #include "Actor/ActorManager.hpp" #include "Item/ItemManager.hpp" #include "Player/Bhio.hpp" -#include "Player/MotionParams.hpp" #include "Player/PlayerBase.hpp" #include "Player/PlayerControlData.hpp" @@ -39,7 +39,7 @@ public: /* 5a */ s16 mUnk_5a; /* 5c */ unk8 mUnk_5c[3]; /* 5f */ bool mUnk_5f; - /* 60 */ MotionParams *mMotionParams; + /* 60 */ FileEntryFlag *mMotionParams; /* 64 */ Bhio *mBhio_0; /* 68 */ Bhio *mBhio_1; /* 6c */ Bhio *mBhio_2; diff --git a/include/Save/SaveItemManager.hpp b/include/Save/SaveItemManager.hpp index 66aaf683..5b25f672 100644 --- a/include/Save/SaveItemManager.hpp +++ b/include/Save/SaveItemManager.hpp @@ -81,7 +81,7 @@ public: extern "C" void Fill16(int value, unsigned short *dst, int size); extern "C" void Fill32(unk32, u32 *, unk32); -extern "C" void Fill256(int value, int *dst, int size); +extern "C" void Fill256(int value, void *dst, int size); class SaveInventory { public: diff --git a/include/Unknown/UnkStruct_027e0dbc.hpp b/include/Unknown/UnkStruct_027e0dbc.hpp index 76dbf9a1..21691344 100644 --- a/include/Unknown/UnkStruct_027e0dbc.hpp +++ b/include/Unknown/UnkStruct_027e0dbc.hpp @@ -24,6 +24,8 @@ public: void func_ov000_0207b9dc(); void func_ov000_0207b9c8(); void func_ov000_0207b988(GameModeId modeId); + + unk32 func_ov003_020f3d5c(unk32 param1); }; extern UnkStruct_027e0dbc data_027e0dbc; diff --git a/include/lib/files.h b/include/lib/files.h deleted file mode 100644 index 8fae3247..00000000 --- a/include/lib/files.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -#include "global.h" -#include "types.h" - -struct FileEntry { - /* 00 (vtable )*/ - /* 04 */ void *path; - /* 08 */ unk32 mUnk_08; - /* 0c */ unk32 mUnk_0c; - /* 10 */ -}; diff --git a/include/lib/files.hpp b/include/lib/files.hpp new file mode 100644 index 00000000..78b435f4 --- /dev/null +++ b/include/lib/files.hpp @@ -0,0 +1,39 @@ +#pragma once + +#include "global.h" +#include "types.h" + +struct FileEntry_Unk8 { + /* 00 */ unk8 mUnk_00[0x8]; + /* 08 */ u16 mUnk_08; + /* 0a */ u16 mUnk_0a; + /* 0c */ // more fields, probably +}; + +class FileEntry { +public: + /* 00 (vtable) */ + /* 04 */ char *path; + /* 08 */ FileEntry_Unk8 *mUnk_08; + /* 0c */ unk32 mUnk_0c; + /* 10 */ + + /* 00 */ virtual ~FileEntry() = 0; + /* 08 */ virtual FileEntry_Unk8 *vfunc_08(unk32 param1) = 0; + /* 0c */ virtual void vfunc_0c() = 0; + /* 10 */ virtual u32 vfunc_10(u32 param1) = 0; + /* 14 */ +}; + +class FileEntryFlag : public FileEntry { +public: + /* 00 (base) */ + /* 10 */ unk8 mUnk_10; + /* 14 */ + + /* 00 */ virtual ~FileEntryFlag() override; + /* 08 */ virtual FileEntry_Unk8 *vfunc_08(unk32 param1) override; + /* 0c */ virtual void vfunc_0c() override; + /* 10 */ virtual u32 vfunc_10(u32 param1) override; + /* 14 */ +}; 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(); +} diff --git a/src/08_GameStart/Init.cpp b/src/08_GameStart/Init.cpp index 254b1934..0481ca38 100644 --- a/src/08_GameStart/Init.cpp +++ b/src/08_GameStart/Init.cpp @@ -32,7 +32,6 @@ void func_02021714(unk32, u32 *); void func_020209a4(unk32, u32 *); void func_0201f1ac(u32 *); void func_0201f96c(unk32, unk32); -void Fill256(int value, int *dst, int size); void Fill32(unk32, u32 *, unk32); void Fill(unsigned char *dst, int value, int size); void func_0200afac();