From 804b25cb90c7ab6dd93bef103386403693cd319f Mon Sep 17 00:00:00 2001 From: Yanis <35189056+Yanis002@users.noreply.github.com> Date: Wed, 18 Feb 2026 22:23:42 +0100 Subject: [PATCH] Misc Stuff 2 (#33) * match UnkStruct_ov000_020b4f84_00_Base * lots of random stuff * match other funcs from game.cpp * data_02049a2c -> gGame, UnkStruct_02049a2c -> Game * match operator new * fix regressions * fix some warnings * another round of random things * another round of random things 2 * complete slots column in overlays.md * add scene indices * gamemode stuff * misc stuff * fix build issues * document random things * fix regressions * final round of random things (for now) --- config/eur/arm9/delinks.txt | 14 ++ config/eur/arm9/overlays/ov000/symbols.txt | 24 +- config/eur/arm9/overlays/ov018/symbols.txt | 8 +- config/eur/arm9/overlays/ov025/symbols.txt | 2 +- config/eur/arm9/relocs.txt | 20 +- config/eur/arm9/symbols.txt | 76 +++--- config/jp/arm9/delinks.txt | 14 ++ config/jp/arm9/overlays/ov000/relocs.txt | 4 +- config/jp/arm9/overlays/ov000/symbols.txt | 28 +-- config/jp/arm9/overlays/ov018/symbols.txt | 8 +- config/jp/arm9/overlays/ov025/symbols.txt | 2 +- config/jp/arm9/relocs.txt | 20 +- config/jp/arm9/symbols.txt | 78 +++--- docs/overlays.md | 214 ++++++++--------- include/Game/Game.hpp | 61 +++++ include/Game/GameMode.hpp | 6 +- include/Game/GameModeFileSelect.hpp | 4 +- include/Game/GameModeManager.hpp | 33 ++- include/MainGame/MainGame.hpp | 23 ++ include/Player/Player.hpp | 18 ++ include/Save/AdventureFlags.hpp | 6 +- include/System/OverlayManager.hpp | 2 +- include/System/Random.hpp | 7 + include/System/SysFault.hpp | 5 +- include/System/SysNew.hpp | 44 ++-- include/TitleScreen/TitleScreen.hpp | 25 +- include/Unknown/Common.hpp | 80 +++--- include/Unknown/UnkStruct_02049a2c.hpp | 52 ---- include/Unknown/UnkStruct_02049b18.hpp | 3 + include/Unknown/UnkStruct_02049b74.hpp | 15 ++ include/Unknown/UnkStruct_02049bd4.hpp | 1 + include/Unknown/UnkStruct_0204a060.hpp | 9 +- include/Unknown/UnkStruct_0204a088.hpp | 12 +- include/Unknown/UnkStruct_0204a110.hpp | 9 +- include/Unknown/UnkStruct_0204e64c.hpp | 3 +- include/Unknown/UnkStruct_027e0208.hpp | 23 ++ include/Unknown/UnkStruct_027e0478.hpp | 35 +++ include/Unknown/UnkStruct_027e09a4.hpp | 227 ++++++++++++++++-- include/Unknown/UnkStruct_027e0ce0.hpp | 2 +- include/Unknown/UnkStruct_027e0ce8.hpp | 6 +- include/Unknown/UnkStruct_ov000_02067bc4.hpp | 2 +- include/Unknown/UnkStruct_ov000_020b4f84.hpp | 73 +++++- include/Unknown/UnkStruct_ov000_020b50c0.hpp | 3 +- include/Unknown/UnkStruct_ov000_020b5214.hpp | 2 +- include/Unknown/UnkStruct_ov024_020d86b0.hpp | 15 ++ include/global.h | 4 +- include/nitro/button.h | 3 + include/nns/font.h | 20 ++ include/nns/text.h | 59 +++++ include/regs.h | 159 ++++++++++-- include/types.h | 17 ++ libs/c/include/stddef.h | 6 + libs/c/include/string.h | 4 +- src/001_SceneInit/Actor/ActorManager_001.cpp | 12 +- src/018_StartUp/GameModeStartUp.cpp | 47 ++-- src/018_StartUp/StartUpInitializers.cpp | 16 +- src/019_MainSelect/FileSelectMain.cpp | 10 +- src/019_MainSelect/FileSelectSubScreen.cpp | 6 +- src/019_MainSelect/GameModeFileSelect.cpp | 8 +- src/025_Title/GameModeTitleScreen.cpp | 4 +- src/025_Title/TitleScreen.cpp | 3 +- src/025_Title/TitleScreenManager.cpp | 12 +- src/110_PlayerGet/PlayerGet.cpp | 2 +- src/Main/Game/Game.cpp | 172 +++++++++++++ src/Main/Game/GameModeManagerBase.cpp | 2 +- src/Main/Main.cpp | 19 +- src/Main/System/SysFault.cpp | 207 ++++++++++++++++ src/Main/System/SysNew.cpp | 40 ++- src/Main/UnkStruct_0204a060.cpp | 19 +- src/Main/UnkStruct_ov000_020b4f84_00_Base.cpp | 61 +++++ src/Main/func_020196fc.cpp | 77 ++++++ tools/configure.py | 4 + 72 files changed, 1758 insertions(+), 553 deletions(-) create mode 100644 include/Game/Game.hpp create mode 100644 include/MainGame/MainGame.hpp create mode 100644 include/Player/Player.hpp delete mode 100644 include/Unknown/UnkStruct_02049a2c.hpp create mode 100644 include/Unknown/UnkStruct_02049b74.hpp create mode 100644 include/Unknown/UnkStruct_027e0208.hpp create mode 100644 include/Unknown/UnkStruct_027e0478.hpp create mode 100644 include/Unknown/UnkStruct_ov024_020d86b0.hpp create mode 100644 include/nns/font.h create mode 100644 include/nns/text.h create mode 100644 src/Main/Game/Game.cpp create mode 100644 src/Main/System/SysFault.cpp create mode 100644 src/Main/UnkStruct_ov000_020b4f84_00_Base.cpp create mode 100644 src/Main/func_020196fc.cpp diff --git a/config/eur/arm9/delinks.txt b/config/eur/arm9/delinks.txt index 60a25a92..b07927d3 100644 --- a/config/eur/arm9/delinks.txt +++ b/config/eur/arm9/delinks.txt @@ -13,12 +13,23 @@ src/Main/Main.cpp: src/Main/System/SysNew.cpp: .text start:0x02011e10 end:0x0201200c +src/Main/System/SysFault.cpp: + .text start:0x020127f0 end:0x02012b00 + +src/Main/Game/Game.cpp: + .text start:0x02013370 end:0x0201373c + src/Main/Player/TouchControl.cpp: .text start:0x02014124 end:0x020144a0 src/Main/System/OverlayManager.cpp: .text start:0x020147fc end:0x02014944 +src/Main/UnkStruct_ov000_020b4f84_00_Base.cpp: + complete + .text start:0x02015528 end:0x02015628 + .data start:0x02043f00 end:0x02043f1c + src/Main/System/Random.cpp: .text start:0x02016384 end:0x02016404 @@ -43,6 +54,9 @@ src/Main/Game/GameModeManagerBase.cpp: .text start:0x0201847c end:0x02018bc4 .data start:0x0204405c end:0x0204409c +src/Main/func_020196fc.cpp: + .text start:0x020196fc end:0x02019934 + libs/c/src/abort_exit_arm_eabi.c: complete .text start:0x020336e8 end:0x02033870 diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 36f43b68..a97d92f7 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -59,8 +59,8 @@ func_ov000_02057608 kind:function(arm,size=0x8) addr:0x02057608 func_ov000_02057610 kind:function(arm,size=0x30) addr:0x02057610 func_ov000_02057640 kind:function(arm,size=0x48) addr:0x02057640 func_ov000_02057688 kind:function(arm,size=0x48) addr:0x02057688 -func_ov000_020576d0 kind:function(arm,size=0x3c) addr:0x020576d0 -func_ov000_0205770c kind:function(arm,size=0x14) addr:0x0205770c +_ZN4Game19func_ov000_020576d0Ev kind:function(arm,size=0x3c) addr:0x020576d0 +_ZN4Game19func_ov000_0205770cEv kind:function(arm,size=0x14) addr:0x0205770c func_ov000_02057720 kind:function(arm,size=0x14) addr:0x02057720 func_ov000_02057734 kind:function(arm,size=0x1c) addr:0x02057734 func_ov000_02057750 kind:function(thumb,size=0xc) addr:0x02057750 @@ -532,8 +532,8 @@ func_ov000_020625c4 kind:function(arm,size=0x120) addr:0x020625c4 func_ov000_020626e4 kind:function(arm,size=0x124) addr:0x020626e4 func_ov000_02062808 kind:function(arm,size=0x30) addr:0x02062808 func_ov000_02062838 kind:function(arm,size=0x8c) addr:0x02062838 -func_ov000_020628c4 kind:function(arm,size=0x20) addr:0x020628c4 -func_ov000_020628e4 kind:function(arm,size=0xcc) addr:0x020628e4 +_ZN17struct_aStack_2d8C1Ev kind:function(arm,size=0x20) addr:0x020628c4 +_ZN17struct_aStack_2d819func_ov000_020628e4Eiiiiiiiii kind:function(arm,size=0xcc) addr:0x020628e4 func_ov000_020629b0 kind:function(arm,size=0x8c) addr:0x020629b0 func_ov000_02062a3c kind:function(arm,size=0x8c) addr:0x02062a3c _ZN29UnkSystem2_UnkSubSystem1_BaseC2Ev kind:function(arm,size=0x74) addr:0x02062ac8 @@ -718,7 +718,7 @@ func_ov000_02067804 kind:function(arm,size=0xdc) addr:0x02067804 func_ov000_020678e0 kind:function(arm,size=0x90) addr:0x020678e0 func_ov000_02067970 kind:function(arm,size=0xbc) addr:0x02067970 func_ov000_02067a2c kind:function(arm,size=0x34) addr:0x02067a2c -func_ov000_02067a60 kind:function(arm,size=0x44) addr:0x02067a60 +_ZN17struct_aStack_2e0C1EP24UnkStruct_ov000_020b504ci kind:function(arm,size=0x44) addr:0x02067a60 func_ov000_02067aa4 kind:function(arm,size=0x7c) addr:0x02067aa4 func_ov000_02067b20 kind:function(arm,size=0x40) addr:0x02067b20 func_ov000_02067b60 kind:function(arm,size=0x54) addr:0x02067b60 @@ -749,14 +749,14 @@ func_ov000_020684c8 kind:function(arm,size=0x14) addr:0x020684c8 func_ov000_020684dc kind:function(arm,size=0x28) addr:0x020684dc func_ov000_02068504 kind:function(arm,size=0x14) addr:0x02068504 func_ov000_02068518 kind:function(arm,size=0xb4) addr:0x02068518 -func_ov000_020685cc kind:function(arm,size=0xb4) addr:0x020685cc +_ZN32UnkSystem2_UnkSubSystem5_Base_10C1Ev kind:function(arm,size=0xb4) addr:0x020685cc _ZN32UnkSystem2_UnkSubSystem5_Base_10D1Ev kind:function(arm,size=0x4) addr:0x02068680 _ZN32UnkSystem2_UnkSubSystem5_Base_10D0Ev kind:function(arm,size=0x14) addr:0x02068684 func_ov000_02068698 kind:function(arm,size=0x4) addr:0x02068698 -func_ov000_0206869c kind:function(arm,size=0x8) addr:0x0206869c -func_ov000_020686a4 kind:function(arm,size=0x34) addr:0x020686a4 +_ZN17struct_aStack_2d819func_ov000_0206869cEv kind:function(arm,size=0x8) addr:0x0206869c +_ZN17struct_aStack_2d819func_ov000_020686a4Ei kind:function(arm,size=0x34) addr:0x020686a4 func_ov000_020686d8 kind:function(arm,size=0xb4) addr:0x020686d8 -func_ov000_0206878c kind:function(arm,size=0xc) addr:0x0206878c +_ZN17struct_aStack_2d819func_ov000_0206878cEv kind:function(arm,size=0xc) addr:0x0206878c func_ov000_02068798 kind:function(arm,size=0x1c) addr:0x02068798 func_ov000_020687b4 kind:function(arm,size=0x48) addr:0x020687b4 func_ov000_020687fc kind:function(arm,size=0x6c) addr:0x020687fc @@ -770,7 +770,7 @@ func_ov000_02068bd4 kind:function(arm,size=0xac) addr:0x02068bd4 func_ov000_02068c80 kind:function(arm,size=0xb0) addr:0x02068c80 func_ov000_02068d30 kind:function(arm,size=0x20) addr:0x02068d30 func_ov000_02068d50 kind:function(arm,size=0x29c) addr:0x02068d50 -func_ov000_02068fec kind:function(arm,size=0x1c8) addr:0x02068fec +_ZN17struct_aStack_2d819func_ov000_02068fecEv kind:function(arm,size=0x1c8) addr:0x02068fec func_ov000_020691b4 kind:function(arm,size=0x24) addr:0x020691b4 func_ov000_020691d8 kind:function(arm,size=0x8) addr:0x020691d8 func_ov000_020691e0 kind:function(arm,size=0x3f4) addr:0x020691e0 @@ -799,7 +799,7 @@ func_ov000_02069e40 kind:function(arm,size=0xc) addr:0x02069e40 func_ov000_02069e4c kind:function(arm,size=0x50) addr:0x02069e4c func_ov000_02069e9c kind:function(arm,size=0x78) addr:0x02069e9c func_ov000_02069f14 kind:function(arm,size=0x44) addr:0x02069f14 -func_ov000_02069f58 kind:function(arm,size=0x6c) addr:0x02069f58 +_ZN24UnkStruct_ov000_020b50c019func_ov000_02069f58Ev kind:function(arm,size=0x6c) addr:0x02069f58 func_ov000_02069fc4 kind:function(arm,size=0x50) addr:0x02069fc4 func_ov000_0206a014 kind:function(arm,size=0x20) addr:0x0206a014 func_ov000_0206a034 kind:function(arm,size=0x50) addr:0x0206a034 @@ -3489,7 +3489,7 @@ data_ov000_020b20d0 kind:data(any) addr:0x020b20d0 data_ov000_020b20dc kind:data(any) addr:0x020b20dc data_ov000_020b20e4 kind:data(any) addr:0x020b20e4 data_ov000_020b20ec kind:data(any) addr:0x020b20ec -data_ov000_020b20fc kind:data(any) addr:0x020b20f4 +_ZTV32UnkSystem2_UnkSubSystem5_Base_10 kind:data(any) addr:0x020b20f4 data_ov000_020b2148 kind:data(any) addr:0x020b2148 data_ov000_020b214c kind:data(any) addr:0x020b214c data_ov000_020b2150 kind:data(any) addr:0x020b2150 diff --git a/config/eur/arm9/overlays/ov018/symbols.txt b/config/eur/arm9/overlays/ov018/symbols.txt index dd96c5be..789625eb 100644 --- a/config/eur/arm9/overlays/ov018/symbols.txt +++ b/config/eur/arm9/overlays/ov018/symbols.txt @@ -1,7 +1,7 @@ _ZN8SysFault19func_ov018_020c4840Ev kind:function(arm,size=0x30) addr:0x020c4840 -_ZN18UnkStruct_02049a2cC1Ev kind:function(arm,size=0x34) addr:0x020c4870 -_ZN18UnkStruct_02049a2c19func_ov018_020c48a4Ei kind:function(arm,size=0x54) addr:0x020c48a4 -_ZN18UnkStruct_02049a2c19func_ov018_020c48f8Ev kind:function(arm,size=0x58) addr:0x020c48f8 +_ZN4GameC1Ev kind:function(arm,size=0x34) addr:0x020c4870 +_ZN4Game19func_ov018_020c48a4Ev kind:function(arm,size=0x54) addr:0x020c48a4 +_ZN4Game19func_ov018_020c48f8Ev kind:function(arm,size=0x58) addr:0x020c48f8 _ZN18UnkStruct_02049b18C1Ev kind:function(arm,size=0x30) addr:0x020c4950 _ZN18UnkStruct_02011e1019func_ov018_020c4980Ev kind:function(arm,size=0xdc) addr:0x020c4980 _ZN18UnkStruct_02011e1019func_ov018_020c4a5cEv kind:function(arm,size=0x6c) addr:0x020c4a5c @@ -10,7 +10,7 @@ _ZN18UnkStruct_02049b80C1Ev kind:function(arm,size=0x2c) addr:0x020c4adc _ZN21UnkStruct_02049b18_06C1Ev kind:function(arm,size=0x50) addr:0x020c4b08 _ZN21UnkStruct_0204e64c_00C1Ev kind:function(arm,size=0x2c) addr:0x020c4b58 _ZN18UnkStruct_0204e64cC1Ev kind:function(arm,size=0x24) addr:0x020c4b84 -_ZN18UnkStruct_02049a2c19func_ov018_020c4ba8Ev kind:function(arm,size=0x54) addr:0x020c4ba8 +_ZN4Game19func_ov018_020c4ba8Ev kind:function(arm,size=0x54) addr:0x020c4ba8 _ZN15GameModeStartUpD1Ev kind:function(arm,size=0x20) addr:0x020c4bfc _ZN15GameModeStartUpC1Ev kind:function(arm,size=0x180) addr:0x020c4c1c _ZN15GameModeStartUp8vfunc_0CEv kind:function(arm,size=0xcc) addr:0x020c4d9c diff --git a/config/eur/arm9/overlays/ov025/symbols.txt b/config/eur/arm9/overlays/ov025/symbols.txt index 6f34eb36..72b1df50 100644 --- a/config/eur/arm9/overlays/ov025/symbols.txt +++ b/config/eur/arm9/overlays/ov025/symbols.txt @@ -16,7 +16,7 @@ _ZN18TitleScreenManager8vfunc_18Ev kind:function(arm,size=0x34) addr:0x020c4b88 _ZN18TitleScreenManager8vfunc_24Ev kind:function(arm,size=0x20) addr:0x020c4bbc _ZN18TitleScreenManager8vfunc_28EPc kind:function(arm,size=0x20) addr:0x020c4bdc _ZN18TitleScreenManager8vfunc_2CEPc kind:function(arm,size=0x20) addr:0x020c4bfc -_ZN18TitleScreenManager8vfunc_38Ev kind:function(arm,size=0x4) addr:0x020c4c1c +_ZN18TitleScreenManager8vfunc_38Eiiii kind:function(arm,size=0x4) addr:0x020c4c1c _ZN18TitleScreenManager19func_ov025_020c4c20Ev kind:function(arm,size=0x10) addr:0x020c4c20 _ZN18TitleScreenManager19func_ov025_020c4c30Ev kind:function(arm,size=0x10) addr:0x020c4c30 _ZN18TitleScreenManagerD1Ev kind:function(arm,size=0x14) addr:0x020c4c40 diff --git a/config/eur/arm9/relocs.txt b/config/eur/arm9/relocs.txt index e01bc7a4..80c8c40b 100644 --- a/config/eur/arm9/relocs.txt +++ b/config/eur/arm9/relocs.txt @@ -1942,19 +1942,19 @@ from:0x020154e4 kind:thumb_call_arm to:0x020153c4 module:main from:0x020154f4 kind:thumb_call_arm to:0x02015338 module:main from:0x0201550a kind:thumb_call to:0x02012f08 module:main from:0x02015520 kind:thumb_call_arm to:0x02011ff4 module:main -from:0x0201554c kind:load to:0x02043f08 module:main -from:0x02015568 kind:load to:0x02043f08 module:main +from:0x0201554c kind:load to:0x02043f00 add:8 module:main +from:0x02015568 kind:load to:0x02043f00 add:8 module:main from:0x0201557c kind:thumb_call to:0x02015528 module:main -from:0x02015584 kind:load to:0x02043f08 module:main +from:0x02015584 kind:load to:0x02043f00 add:8 module:main from:0x02015598 kind:thumb_call to:0x02015528 module:main from:0x0201559e kind:thumb_call_arm to:0x02011ff4 module:main -from:0x020155a8 kind:load to:0x02043f08 module:main +from:0x020155a8 kind:load to:0x02043f00 add:8 module:main from:0x020155ca kind:thumb_call to:0x02012ec8 module:main from:0x020155e4 kind:thumb_call_arm to:0x02011ff4 module:main from:0x020155ea kind:thumb_call to:0x0201552c module:main from:0x02015616 kind:thumb_call to:0x020010e0 module:main from:0x02015620 kind:load to:0x0204999c module:main -from:0x02015640 kind:load to:0x02043f24 module:main +from:0x02015640 kind:load to:0x02043f1c add:8 module:main from:0x02015648 kind:thumb_call to:0x02015528 module:main from:0x02015654 kind:thumb_call to:0x02015528 module:main from:0x0201565a kind:thumb_call_arm to:0x02011ff4 module:main @@ -2213,7 +2213,7 @@ from:0x02018410 kind:thumb_call_arm to:0x0201b9a8 module:main from:0x0201841c kind:load to:0x020b51b8 module:overlay(0) from:0x02018420 kind:load to:0x0204e5f8 module:main from:0x0201842a kind:thumb_call to:0x020148d0 module:main -from:0x0201842e kind:thumb_call_arm to:0x020c4840 module:overlays(18,19,20,25) +from:0x0201842e kind:thumb_call_arm to:0x020c4840 module:overlay(19) from:0x02018434 kind:load to:0x02049ba0 module:main from:0x02018440 kind:arm_call to:0x0201bacc module:main from:0x02018454 kind:arm_call to:0x0201bacc module:main @@ -2924,19 +2924,19 @@ from:0x0201f634 kind:arm_call to:0x02062408 module:overlay(0) from:0x0201f63c kind:load to:0x0204a110 module:main from:0x0201f64c kind:arm_call to:0x0201f244 module:main from:0x0201f65c kind:arm_call to:0x02061f30 module:overlay(0) -from:0x0201f670 kind:load to:0x0204439c module:main +from:0x0201f670 kind:load to:0x02044394 add:8 module:main from:0x0201f674 kind:load to:0x020443a8 module:main from:0x0201f684 kind:arm_call to:0x0201f244 module:main from:0x0201f694 kind:arm_call to:0x02061f30 module:overlay(0) -from:0x0201f6a8 kind:load to:0x0204439c module:main +from:0x0201f6a8 kind:load to:0x02044394 add:8 module:main from:0x0201f6ac kind:load to:0x020443a8 module:main from:0x0201f6c4 kind:arm_call to:0x0201f288 module:main from:0x0201f6d4 kind:arm_call to:0x02061f30 module:overlay(0) -from:0x0201f6e8 kind:load to:0x0204439c module:main +from:0x0201f6e8 kind:load to:0x02044394 add:8 module:main from:0x0201f6ec kind:load to:0x020443a8 module:main from:0x0201f704 kind:arm_call to:0x0201f288 module:main from:0x0201f714 kind:arm_call to:0x02061f30 module:overlay(0) -from:0x0201f728 kind:load to:0x0204439c module:main +from:0x0201f728 kind:load to:0x02044394 add:8 module:main from:0x0201f72c kind:load to:0x020443a8 module:main from:0x0201f748 kind:arm_call to:0x02067a2c module:overlay(0) from:0x0201f780 kind:arm_call to:0x02019590 module:main diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index a51c72ab..22ab836e 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -616,10 +616,10 @@ func_0201245c kind:function(thumb,size=0x10) addr:0x0201245c func_0201246c kind:function(thumb,size=0x54) addr:0x0201246c func_020124c0 kind:function(thumb,size=0x30) addr:0x020124c0 DisplayAssertError kind:function(thumb,size=0xb4) addr:0x020124f0 -func_020125a4 kind:function(thumb,size=0x24) addr:0x020125a4 +_ZN8SysFault13func_020125a4EPctS0_z kind:function(thumb,size=0x24) addr:0x020125a4 func_020125c8 kind:function(thumb,size=0xc) addr:0x020125c8 func_020125d4 kind:function(thumb,size=0x21c) addr:0x020125d4 -func_020127f0 kind:function(thumb,size=0x310) addr:0x020127f0 +_ZN8SysFault13func_020127f0Ei kind:function(thumb,size=0x310) addr:0x020127f0 func_02012b00 kind:function(thumb,size=0x188) addr:0x02012b00 func_02012c88 kind:function(thumb,size=0xac) addr:0x02012c88 func_02012d34 kind:function(thumb,size=0xce) addr:0x02012d34 @@ -651,24 +651,24 @@ func_0201328c kind:function(arm,size=0x3c) addr:0x0201328c func_020132c8 kind:function(arm,size=0x14) addr:0x020132c8 func_020132dc kind:function(arm,size=0x78) addr:0x020132dc func_02013354 kind:function(arm,size=0x1c) addr:0x02013354 -_ZN18UnkStruct_02049a2c13func_02013370Ei kind:function(arm,size=0x24) addr:0x02013370 -_ZN18UnkStruct_02049a2c3RunEv kind:function(arm,size=0x390) addr:0x02013394 -_ZN18UnkStruct_02049a2c13func_02013724EPv kind:function(arm,size=0x18) addr:0x02013724 +_ZN4Game13func_02013370Ei kind:function(arm,size=0x24) addr:0x02013370 +_ZN4Game3RunEv kind:function(arm,size=0x390) addr:0x02013394 +_ZN4Game20TrySetCreateCallbackEPFP12GameModeBasevE kind:function(arm,size=0x18) addr:0x02013724 func_0201373c kind:function(arm,size=0x18) addr:0x0201373c func_02013754 kind:function(arm,size=0x14) addr:0x02013754 -func_02013768 kind:function(arm,size=0x60) addr:0x02013768 +_ZN18UnkStruct_02049b1813func_02013768Ev kind:function(arm,size=0x60) addr:0x02013768 func_020137c8 kind:function(arm,size=0x1c) addr:0x020137c8 func_020137e4 kind:function(arm,size=0x5c) addr:0x020137e4 -func_02013840 kind:function(arm,size=0xb4) addr:0x02013840 -func_020138f4 kind:function(arm,size=0x140) addr:0x020138f4 +_ZN18UnkStruct_02049b1813func_02013840Eti kind:function(arm,size=0xb4) addr:0x02013840 +_ZN18UnkStruct_02049b1813func_020138f4Ei kind:function(arm,size=0x140) addr:0x020138f4 func_02013a34 kind:function(arm,size=0x10) addr:0x02013a34 -func_02013a44 kind:function(arm,size=0x98) addr:0x02013a44 +_ZN18UnkStruct_02049b7413func_02013a44Ei kind:function(arm,size=0x98) addr:0x02013a44 func_02013adc kind:function(arm,size=0x34) addr:0x02013adc _ZN5InputC1Ev kind:function(arm,size=0x14) addr:0x02013b10 _ZN5Input13func_02013b24Ei kind:function(arm,size=0x64) addr:0x02013b24 func_02013b88 kind:function(arm,size=0x10) addr:0x02013b88 func_02013b98 kind:function(arm,size=0x24) addr:0x02013b98 -func_02013bbc kind:function(arm,size=0x4c) addr:0x02013bbc +_ZN5Input13func_02013bbcEv kind:function(arm,size=0x4c) addr:0x02013bbc _ZN5Input13func_02013c08Et kind:function(arm,size=0x1c) addr:0x02013c08 func_02013c24 kind:function(arm,size=0x58) addr:0x02013c24 func_02013c7c kind:function(arm,size=0x58) addr:0x02013c7c @@ -676,7 +676,7 @@ func_02013cd4 kind:function(arm,size=0x5c) addr:0x02013cd4 func_02013d30 kind:function(arm,size=0x64) addr:0x02013d30 func_02013d94 kind:function(arm,size=0x5c) addr:0x02013d94 func_02013df0 kind:function(arm,size=0x28) addr:0x02013df0 -func_02013e18 kind:function(arm,size=0x1c) addr:0x02013e18 +_ZN21UnkStruct_02049a2c_1C13func_02013e18EPvi kind:function(arm,size=0x1c) addr:0x02013e18 func_02013e34 kind:function(arm,size=0x10) addr:0x02013e34 func_02013e44 kind:function(arm,size=0x3c) addr:0x02013e44 func_02013e80 kind:function(arm,size=0x4c) addr:0x02013e80 @@ -713,7 +713,7 @@ _ZN14OverlayManager15LoadIfNotLoadedEjj kind:function(thumb,size=0x28) addr:0x02 _ZN14OverlayManager4LoadEjj kind:function(thumb,size=0x2c) addr:0x02014824 _ZN14OverlayManager6UnloadEj kind:function(thumb,size=0x28) addr:0x02014850 func_02014878 kind:function(thumb,size=0x58) addr:0x02014878 -_ZN14OverlayManager13func_020148d0Ei kind:function(thumb,size=0x46) addr:0x020148d0 +_ZN14OverlayManager13func_020148d0Ej kind:function(thumb,size=0x46) addr:0x020148d0 func_02014918 kind:function(thumb,size=0x2c) addr:0x02014918 func_02014944 kind:function(thumb,size=0x50) addr:0x02014944 _ZN14OverlayManager13func_02014994Ei kind:function(thumb,size=0x7c) addr:0x02014994 @@ -731,7 +731,7 @@ func_02014c3c kind:function(arm,size=0x24) addr:0x02014c3c _ZN18UnkStruct_02049bd413func_02014c60Ei kind:function(arm,size=0x7c) addr:0x02014c60 _ZN18UnkStruct_02049bd413func_02014cdcEi kind:function(arm,size=0x5c) addr:0x02014cdc func_02014d38 kind:function(arm,size=0x60) addr:0x02014d38 -func_02014d98 kind:function(arm,size=0x108) addr:0x02014d98 +_ZN18UnkStruct_02049bd413func_02014d98Ev kind:function(arm,size=0x108) addr:0x02014d98 func_02014ea0 kind:function(arm,size=0x5c) addr:0x02014ea0 func_02014efc kind:function(arm,size=0x58) addr:0x02014efc func_02014f54 kind:function(arm,size=0x18) addr:0x02014f54 @@ -747,9 +747,9 @@ func_02015244 kind:function(arm,size=0x40) addr:0x02015244 func_02015284 kind:function(arm,size=0x7c) addr:0x02015284 func_02015300 kind:function(arm,size=0x38) addr:0x02015300 func_02015338 kind:function(arm,size=0x10) addr:0x02015338 -func_02015348 kind:function(arm,size=0x38) addr:0x02015348 +_ZN18SomeSaveFileStructC1Ei kind:function(arm,size=0x38) addr:0x02015348 func_02015380 kind:function(arm,size=0x24) addr:0x02015380 -func_020153a4 kind:function(arm,size=0x20) addr:0x020153a4 +_ZN18SomeSaveFileStructD1Ev kind:function(arm,size=0x20) addr:0x020153a4 func_020153c4 kind:function(arm,size=0x20) addr:0x020153c4 func_020153e4 kind:function(arm,size=0x18) addr:0x020153e4 func_020153fc kind:function(thumb,size=0x12) addr:0x020153fc @@ -764,16 +764,16 @@ func_020154d8 kind:function(thumb,size=0x14) addr:0x020154d8 _ZN10UnkStruct213func_020154ecEPKc kind:function(thumb,size=0x2a) addr:0x020154ec func_02015518 kind:function(thumb,size=0x2) addr:0x02015518 func_0201551c kind:function(thumb,size=0xc) addr:0x0201551c -func_02015528 kind:function(thumb,size=0x2) addr:0x02015528 -func_0201552c kind:function(thumb,size=0x8) addr:0x0201552c -func_02015534 kind:function(thumb,size=0x4) addr:0x02015534 -func_02015538 kind:function(thumb,size=0x18) addr:0x02015538 -func_02015550 kind:function(thumb,size=0x1c) addr:0x02015550 -_ZN32UnkStruct_ov000_020b4f84_00_BaseD2Ev kind:function(thumb,size=0x1c) addr:0x0201556c -func_02015588 kind:function(thumb,size=0x24) addr:0x02015588 -func_020155ac kind:function(thumb,size=0x2a) addr:0x020155ac -func_020155d8 kind:function(thumb,size=0x18) addr:0x020155d8 -func_020155f0 kind:function(thumb,size=0x38) addr:0x020155f0 +_ZN32UnkStruct_ov000_020b4f84_00_Base13func_02015528Ev kind:function(thumb,size=0x2) addr:0x02015528 +_ZN32UnkStruct_ov000_020b4f84_00_Base13func_0201552cEv kind:function(thumb,size=0x8) addr:0x0201552c +_ZN32UnkStruct_ov000_020b4f84_00_Base13func_02015534Ev kind:function(thumb,size=0x4) addr:0x02015534 +_ZN32UnkStruct_ov000_020b4f84_00_BaseC1Ev kind:function(thumb,size=0x18) addr:0x02015538 +_ZN32UnkStruct_ov000_020b4f84_00_BaseC1EPviih kind:function(thumb,size=0x1c) addr:0x02015550 +_ZN32UnkStruct_ov000_020b4f84_00_BaseD1Ev kind:function(thumb,size=0x1c) addr:0x0201556c +_ZN32UnkStruct_ov000_020b4f84_00_BaseD0Ev kind:function(thumb,size=0x24) addr:0x02015588 +_ZN32UnkStruct_ov000_020b4f84_00_Base8vfunc_08Ei kind:function(thumb,size=0x2a) addr:0x020155ac +_ZN32UnkStruct_ov000_020b4f84_00_Base8vfunc_0CEv kind:function(thumb,size=0x18) addr:0x020155d8 +_ZN32UnkStruct_ov000_020b4f84_00_Base8vfunc_10Ei kind:function(thumb,size=0x38) addr:0x020155f0 func_02015628 kind:function(thumb,size=0x1c) addr:0x02015628 func_02015644 kind:function(thumb,size=0xc) addr:0x02015644 func_02015650 kind:function(thumb,size=0x12) addr:0x02015650 @@ -914,7 +914,7 @@ _ZN12GameModeBase8vfunc_24Ev kind:function(arm,size=0x8) addr:0x0201839c _ZN18UnkStruct_0204a0608vfunc_0CEv kind:function(thumb,size=0x14) addr:0x020183a4 _ZN18UnkStruct_0204a06013func_020183b8Ev kind:function(thumb,size=0x8) addr:0x020183b8 _ZN18UnkStruct_0204a06013func_020183c0Ev kind:function(thumb,size=0x14) addr:0x020183c0 -_ZN18UnkStruct_0204a06013func_020183d4EbPvi kind:function(thumb,size=0x50) addr:0x020183d4 +_ZN18UnkStruct_0204a06013func_020183d4EbPFP12GameModeBasevEi kind:function(thumb,size=0x50) addr:0x020183d4 _ZN18UnkStruct_0204a06013func_02018424Ev kind:function(thumb,size=0x14) addr:0x02018424 _ZN18UnkStruct_0204a060D1Ev kind:function(arm,size=0x14) addr:0x02018438 _ZN18UnkStruct_0204a060D0Ev kind:function(arm,size=0x1c) addr:0x0201844c @@ -939,7 +939,7 @@ _ZN19GameModeManagerBase8vfunc_24Ev kind:function(arm,size=0x18) addr:0x0201867c _ZN19GameModeManagerBase8vfunc_28EPc kind:function(arm,size=0x10) addr:0x02018694 _ZN19GameModeManagerBase8vfunc_2CEPc kind:function(arm,size=0x4) addr:0x020186a4 _ZN19GameModeManagerBase8vfunc_30Ei kind:function(arm,size=0x4c) addr:0x020186a8 -_ZN19GameModeManagerBase8vfunc_34Ev kind:function(arm,size=0x4) addr:0x020186f4 +_ZN19GameModeManagerBase8vfunc_34Eii kind:function(arm,size=0x4) addr:0x020186f4 _ZN19GameModeManagerBase13func_020186f8Ei kind:function(arm,size=0xc) addr:0x020186f8 _ZN19GameModeManagerBase13func_02018704Ev kind:function(arm,size=0x10) addr:0x02018704 _ZN19GameModeManagerBase13func_02018714Eiiiii kind:function(arm,size=0x28) addr:0x02018714 @@ -967,13 +967,13 @@ _ZN18UnkStruct_0204a11013func_02018d34Ev kind:function(arm,size=0x44) addr:0x020 func_02018d78 kind:function(arm,size=0x174) addr:0x02018d78 func_02018eec kind:function(arm,size=0xac) addr:0x02018eec func_02018f98 kind:function(arm,size=0x368) addr:0x02018f98 -func_02019300 kind:function(arm,size=0x40) addr:0x02019300 +_ZN18UnkStruct_0204a11013func_02019300Ei kind:function(arm,size=0x40) addr:0x02019300 func_02019340 kind:function(arm,size=0x10) addr:0x02019340 -func_02019350 kind:function(arm,size=0xb8) addr:0x02019350 -func_02019408 kind:function(arm,size=0x4c) addr:0x02019408 -func_02019454 kind:function(arm,size=0x88) addr:0x02019454 -func_020194dc kind:function(arm,size=0x38) addr:0x020194dc -func_02019514 kind:function(arm,size=0x14) addr:0x02019514 +_ZN18UnkStruct_0204a11013func_02019350Ev kind:function(arm,size=0xb8) addr:0x02019350 +_ZN18UnkStruct_0204a11013func_02019408Ev kind:function(arm,size=0x4c) addr:0x02019408 +_ZN18UnkStruct_0204a11013func_02019454Ev kind:function(arm,size=0x88) addr:0x02019454 +_ZN18UnkStruct_0204a11013func_020194dcEv kind:function(arm,size=0x38) addr:0x020194dc +_ZN18UnkStruct_0204a11013func_02019514Ev kind:function(arm,size=0x14) addr:0x02019514 func_02019528 kind:function(arm,size=0x10) addr:0x02019528 _ZN18UnkStruct_0204a11013func_02019538Eii kind:function(arm,size=0x10) addr:0x02019538 func_02019548 kind:function(arm,size=0x10) addr:0x02019548 @@ -1200,7 +1200,7 @@ func_0201ff4c kind:function(arm,size=0xf8) addr:0x0201ff4c func_02020044 kind:function(arm,size=0xcc) addr:0x02020044 func_02020110 kind:function(thumb,size=0x90) addr:0x02020110 func_020201a0 kind:function(thumb,size=0x24) addr:0x020201a0 -func_020201c4 kind:function(arm,size=0xa4) addr:0x020201c4 +_ZN18UnkStruct_0204e64c13func_020201c4Ei kind:function(arm,size=0xa4) addr:0x020201c4 func_02020268 kind:function(arm,size=0x30) addr:0x02020268 func_02020298 kind:function(arm,size=0x54) addr:0x02020298 func_020202ec kind:function(arm,size=0x5c) addr:0x020202ec @@ -2525,8 +2525,8 @@ data_02043ed0 kind:data(any) addr:0x02043ed0 data_02043ed8 kind:data(any) addr:0x02043ed8 data_02043ee0 kind:data(any) addr:0x02043ee0 data_02043efc kind:data(any) addr:0x02043efc -data_02043f08 kind:data(any) addr:0x02043f08 -data_02043f24 kind:data(any) addr:0x02043f24 +_ZTV32UnkStruct_ov000_020b4f84_00_Base kind:data(any) addr:0x02043f00 +data_02043f24 kind:data(any) addr:0x02043f1c data_02043f40 kind:data(any) addr:0x02043f40 data_02043f5c kind:data(any) addr:0x02043f5c data_02043f78 kind:data(any) addr:0x02043f78 @@ -2561,7 +2561,7 @@ data_0204433c kind:data(any) addr:0x0204433c data_02044340 kind:data(any) addr:0x02044340 data_02044384 kind:data(any) addr:0x02044384 data_02044390 kind:data(any) addr:0x02044390 -data_0204439c kind:data(any) addr:0x0204439c +_ZTV24UnkSystem2_UnkSubSystem5 kind:data(any) addr:0x02044394 data_020443a8 kind:data(any) addr:0x020443a8 data_020443c0 kind:data(any) addr:0x020443c0 _ZTV21UnkStruct_0204e64c_00 kind:data(any) addr:0x020443d0 @@ -2727,7 +2727,7 @@ data_020499c8 kind:bss addr:0x020499c8 data_020499e0 kind:bss addr:0x020499e0 data_02049a1c kind:bss addr:0x02049a1c data_02049a20 kind:bss addr:0x02049a20 -data_02049a2c kind:bss addr:0x02049a2c +gGame kind:bss addr:0x02049a2c data_02049b14 kind:bss addr:0x02049b14 data_02049b18 kind:bss addr:0x02049b18 data_02049b2a kind:bss addr:0x02049b2a diff --git a/config/jp/arm9/delinks.txt b/config/jp/arm9/delinks.txt index a57bc9d7..1dd48f57 100644 --- a/config/jp/arm9/delinks.txt +++ b/config/jp/arm9/delinks.txt @@ -13,12 +13,23 @@ src/Main/Main.cpp: src/Main/System/SysNew.cpp: .text start:0x02011e10 end:0x0201200c +src/Main/System/SysFault.cpp: + .text start:0x020127f0 end:0x02012b00 + +src/Main/Game/Game.cpp: + .text start:0x02013370 end:0x02013740 + src/Main/Player/TouchControl.cpp: .text start:0x02014128 end:0x020144a4 src/Main/System/OverlayManager.cpp: .text start:0x02014800 end:0x02014948 +src/Main/UnkStruct_ov000_020b4f84_00_Base.cpp: + complete + .text start:0x020154c0 end:0x020155c0 + .data start:0x02045444 end:0x02045460 + src/Main/System/Random.cpp: .text start:0x0201631c end:0x0201639c @@ -43,6 +54,9 @@ src/Main/Game/GameModeManagerBase.cpp: .text start:0x02018414 end:0x02018b5c .data start:0x020455a0 end:0x020455e0 +src/Main/func_020196fc.cpp: + .text start:0x02019694 end:0x020198cc + libs/c/src/abort_exit_arm_eabi.c: complete .text start:0x02034c18 end:0x02034da0 diff --git a/config/jp/arm9/overlays/ov000/relocs.txt b/config/jp/arm9/overlays/ov000/relocs.txt index 410c48c6..a15f2f9a 100644 --- a/config/jp/arm9/overlays/ov000/relocs.txt +++ b/config/jp/arm9/overlays/ov000/relocs.txt @@ -1959,9 +1959,9 @@ from:0x02069a68 kind:load to:0x0204b6a0 module:main from:0x02069a7c kind:load to:0x0201beb4 module:main from:0x02069aa4 kind:load to:0x0204b690 module:main from:0x02069aec kind:arm_call to:0x02069aa8 module:overlay(0) -from:0x02069b68 kind:load to:0x020b38fc module:overlay(0) +from:0x02069b68 kind:load to:0x020b38f4 add:8 module:overlay(0) from:0x02069ba0 kind:arm_call to:0x02069aa8 module:overlay(0) -from:0x02069c1c kind:load to:0x020b38fc module:overlay(0) +from:0x02069c1c kind:load to:0x020b38f4 add:8 module:overlay(0) from:0x02069c30 kind:arm_call to:0x02011ff4 module:main from:0x02069c84 kind:arm_call to:0x0206adc0 module:overlay(0) from:0x02069d24 kind:arm_call to:0x02067d14 module:overlay(0) diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index f4b4a9cb..b36d3c94 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -59,8 +59,8 @@ func_ov000_02058b88 kind:function(arm,size=0x8) addr:0x02058b88 func_ov000_02058b90 kind:function(arm,size=0x30) addr:0x02058b90 func_ov000_02058bc0 kind:function(arm,size=0x48) addr:0x02058bc0 func_ov000_02058c08 kind:function(arm,size=0x48) addr:0x02058c08 -func_ov000_02058c50 kind:function(arm,size=0x3c) addr:0x02058c50 -func_ov000_02058c8c kind:function(arm,size=0x14) addr:0x02058c8c +_ZN4Game19func_ov000_020576d0Ev kind:function(arm,size=0x3c) addr:0x02058c50 +_ZN4Game19func_ov000_0205770cEv kind:function(arm,size=0x14) addr:0x02058c8c func_ov000_02058ca0 kind:function(arm,size=0x14) addr:0x02058ca0 func_ov000_02058cb4 kind:function(arm,size=0x1c) addr:0x02058cb4 func_ov000_02058cd0 kind:function(thumb,size=0xc) addr:0x02058cd0 @@ -532,8 +532,8 @@ func_ov000_02063b4c kind:function(arm,size=0x120) addr:0x02063b4c func_ov000_02063c6c kind:function(arm,size=0x124) addr:0x02063c6c func_ov000_02063d90 kind:function(arm,size=0x30) addr:0x02063d90 func_ov000_02063dc0 kind:function(arm,size=0x8c) addr:0x02063dc0 -func_ov000_02063e4c kind:function(arm,size=0x20) addr:0x02063e4c -func_ov000_02063e6c kind:function(arm,size=0xcc) addr:0x02063e6c +_ZN17struct_aStack_2d8C1Ev kind:function(arm,size=0x20) addr:0x02063e4c +_ZN17struct_aStack_2d819func_ov000_020628e4Eiiiiiiiii kind:function(arm,size=0xcc) addr:0x02063e6c func_ov000_02063f38 kind:function(arm,size=0x8c) addr:0x02063f38 func_ov000_02063fc4 kind:function(arm,size=0x8c) addr:0x02063fc4 _ZN29UnkSystem2_UnkSubSystem1_BaseC2Ev kind:function(arm,size=0x74) addr:0x02064050 @@ -718,7 +718,7 @@ func_ov000_02068da0 kind:function(arm,size=0xdc) addr:0x02068da0 func_ov000_02068e7c kind:function(arm,size=0x90) addr:0x02068e7c func_ov000_02068f0c kind:function(arm,size=0xbc) addr:0x02068f0c func_ov000_02068fc8 kind:function(arm,size=0x34) addr:0x02068fc8 -func_ov000_02068ffc kind:function(arm,size=0x44) addr:0x02068ffc +_ZN17struct_aStack_2e0C1EP24UnkStruct_ov000_020b504ci kind:function(arm,size=0x44) addr:0x02068ffc func_ov000_02069040 kind:function(arm,size=0x7c) addr:0x02069040 func_ov000_020690bc kind:function(arm,size=0x40) addr:0x020690bc func_ov000_020690fc kind:function(arm,size=0x54) addr:0x020690fc @@ -750,14 +750,14 @@ func_ov000_02069a6c kind:function(arm,size=0x14) addr:0x02069a6c func_ov000_02069a80 kind:function(arm,size=0x28) addr:0x02069a80 func_ov000_02069aa8 kind:function(arm,size=0x14) addr:0x02069aa8 func_ov000_02069abc kind:function(arm,size=0xb4) addr:0x02069abc -func_ov000_02069b70 kind:function(arm,size=0xb4) addr:0x02069b70 -func_ov000_02069c24 kind:function(arm,size=0x4) addr:0x02069c24 -func_ov000_02069c28 kind:function(arm,size=0x14) addr:0x02069c28 +_ZN32UnkSystem2_UnkSubSystem5_Base_10C1Ev kind:function(arm,size=0xb4) addr:0x02069b70 +_ZN32UnkSystem2_UnkSubSystem5_Base_10D1Ev kind:function(arm,size=0x4) addr:0x02069c24 +_ZN32UnkSystem2_UnkSubSystem5_Base_10D0Ev kind:function(arm,size=0x14) addr:0x02069c28 func_ov000_02069c3c kind:function(arm,size=0x4) addr:0x02069c3c -func_ov000_02069c40 kind:function(arm,size=0x8) addr:0x02069c40 -func_ov000_02069c48 kind:function(arm,size=0x34) addr:0x02069c48 +_ZN17struct_aStack_2d819func_ov000_0206869cEv kind:function(arm,size=0x8) addr:0x02069c40 +_ZN17struct_aStack_2d819func_ov000_020686a4Ei kind:function(arm,size=0x34) addr:0x02069c48 func_ov000_02069c7c kind:function(arm,size=0xb4) addr:0x02069c7c -func_ov000_02069d30 kind:function(arm,size=0xc) addr:0x02069d30 +_ZN17struct_aStack_2d819func_ov000_0206878cEv kind:function(arm,size=0xc) addr:0x02069d30 func_ov000_02069d3c kind:function(arm,size=0x1c) addr:0x02069d3c func_ov000_02069d58 kind:function(arm,size=0x48) addr:0x02069d58 func_ov000_02069da0 kind:function(arm,size=0x6c) addr:0x02069da0 @@ -771,7 +771,7 @@ func_ov000_0206a178 kind:function(arm,size=0xac) addr:0x0206a178 func_ov000_0206a224 kind:function(arm,size=0xb0) addr:0x0206a224 func_ov000_0206a2d4 kind:function(arm,size=0x20) addr:0x0206a2d4 func_ov000_0206a2f4 kind:function(arm,size=0x29c) addr:0x0206a2f4 -func_ov000_0206a590 kind:function(arm,size=0x1c8) addr:0x0206a590 +_ZN17struct_aStack_2d819func_ov000_02068fecEv kind:function(arm,size=0x1c8) addr:0x0206a590 func_ov000_0206a758 kind:function(arm,size=0x24) addr:0x0206a758 func_ov000_0206a77c kind:function(arm,size=0x8) addr:0x0206a77c func_ov000_0206a784 kind:function(arm,size=0x3f4) addr:0x0206a784 @@ -800,7 +800,7 @@ func_ov000_0206b3e4 kind:function(arm,size=0xc) addr:0x0206b3e4 func_ov000_0206b3f0 kind:function(arm,size=0x50) addr:0x0206b3f0 func_ov000_0206b440 kind:function(arm,size=0x78) addr:0x0206b440 func_ov000_0206b4b8 kind:function(arm,size=0x44) addr:0x0206b4b8 -func_ov000_0206b4fc kind:function(arm,size=0x6c) addr:0x0206b4fc +_ZN24UnkStruct_ov000_020b50c019func_ov000_02069f58Ev kind:function(arm,size=0x6c) addr:0x0206b4fc func_ov000_0206b568 kind:function(arm,size=0x50) addr:0x0206b568 func_ov000_0206b5b8 kind:function(arm,size=0x20) addr:0x0206b5b8 func_ov000_0206b5d8 kind:function(arm,size=0x50) addr:0x0206b5d8 @@ -3489,7 +3489,7 @@ data_ov000_020b38d0 kind:data(any) addr:0x020b38d0 data_ov000_020b38dc kind:data(any) addr:0x020b38dc data_ov000_020b38e4 kind:data(any) addr:0x020b38e4 data_ov000_020b38ec kind:data(any) addr:0x020b38ec -data_ov000_020b38fc kind:data(any) addr:0x020b38fc +_ZTV32UnkSystem2_UnkSubSystem5_Base_10 kind:data(any) addr:0x020b38f4 data_ov000_020b3948 kind:data(any) addr:0x020b3948 data_ov000_020b394c kind:data(any) addr:0x020b394c data_ov000_020b3950 kind:data(any) addr:0x020b3950 diff --git a/config/jp/arm9/overlays/ov018/symbols.txt b/config/jp/arm9/overlays/ov018/symbols.txt index 6240ac0d..240094e0 100644 --- a/config/jp/arm9/overlays/ov018/symbols.txt +++ b/config/jp/arm9/overlays/ov018/symbols.txt @@ -1,7 +1,7 @@ _ZN8SysFault19func_ov018_020c4840Ev kind:function(arm,size=0x30) addr:0x020c6060 -_ZN18UnkStruct_02049a2cC1Ev kind:function(arm,size=0x34) addr:0x020c6090 -_ZN18UnkStruct_02049a2c19func_ov018_020c48a4Ei kind:function(arm,size=0x54) addr:0x020c60c4 -_ZN18UnkStruct_02049a2c19func_ov018_020c48f8Ev kind:function(arm,size=0x58) addr:0x020c6118 +_ZN4GameC1Ev kind:function(arm,size=0x34) addr:0x020c6090 +_ZN4Game19func_ov018_020c48a4Ev kind:function(arm,size=0x54) addr:0x020c60c4 +_ZN4Game19func_ov018_020c48f8Ev kind:function(arm,size=0x58) addr:0x020c6118 _ZN18UnkStruct_02049b18C1Ev kind:function(arm,size=0x30) addr:0x020c6170 _ZN18UnkStruct_02011e1019func_ov018_020c4980Ev kind:function(arm,size=0xdc) addr:0x020c61a0 _ZN18UnkStruct_02011e1019func_ov018_020c4a5cEv kind:function(arm,size=0x6c) addr:0x020c627c @@ -10,7 +10,7 @@ _ZN18UnkStruct_02049b80C1Ev kind:function(arm,size=0x2c) addr:0x020c62fc _ZN21UnkStruct_02049b18_06C1Ev kind:function(arm,size=0x50) addr:0x020c6328 _ZN21UnkStruct_0204e64c_00C1Ev kind:function(arm,size=0x2c) addr:0x020c6378 _ZN18UnkStruct_0204e64cC1Ev kind:function(arm,size=0x24) addr:0x020c63a4 -_ZN18UnkStruct_02049a2c19func_ov018_020c4ba8Ev kind:function(arm,size=0x54) addr:0x020c63c8 +_ZN4Game19func_ov018_020c4ba8Ev kind:function(arm,size=0x54) addr:0x020c63c8 _ZN15GameModeStartUpD1Ev kind:function(arm,size=0x20) addr:0x020c641c _ZN15GameModeStartUpC1Ev kind:function(arm,size=0x180) addr:0x020c643c _ZN15GameModeStartUp8vfunc_0CEv kind:function(arm,size=0xcc) addr:0x020c65bc diff --git a/config/jp/arm9/overlays/ov025/symbols.txt b/config/jp/arm9/overlays/ov025/symbols.txt index 8383b55b..9435c2f2 100644 --- a/config/jp/arm9/overlays/ov025/symbols.txt +++ b/config/jp/arm9/overlays/ov025/symbols.txt @@ -16,7 +16,7 @@ _ZN18TitleScreenManager8vfunc_18Ev kind:function(arm,size=0x34) addr:0x020c63a8 _ZN18TitleScreenManager8vfunc_24Ev kind:function(arm,size=0x20) addr:0x020c63dc _ZN18TitleScreenManager8vfunc_28EPc kind:function(arm,size=0x20) addr:0x020c63fc _ZN18TitleScreenManager8vfunc_2CEPc kind:function(arm,size=0x20) addr:0x020c641c -_ZN18TitleScreenManager8vfunc_38Ev kind:function(arm,size=0x4) addr:0x020c643c +_ZN18TitleScreenManager8vfunc_38Eiiii kind:function(arm,size=0x4) addr:0x020c643c _ZN18TitleScreenManager19func_ov025_020c4c20Ev kind:function(arm,size=0x10) addr:0x020c6440 _ZN18TitleScreenManager19func_ov025_020c4c30Ev kind:function(arm,size=0x10) addr:0x020c6450 _ZN18TitleScreenManagerD1Ev kind:function(arm,size=0x14) addr:0x020c6460 diff --git a/config/jp/arm9/relocs.txt b/config/jp/arm9/relocs.txt index d49568cf..71ff6eff 100644 --- a/config/jp/arm9/relocs.txt +++ b/config/jp/arm9/relocs.txt @@ -1942,19 +1942,19 @@ from:0x0201547c kind:thumb_call_arm to:0x0201535c module:main from:0x0201548c kind:thumb_call_arm to:0x020152d0 module:main from:0x020154a2 kind:thumb_call to:0x02012f08 module:main from:0x020154b8 kind:thumb_call_arm to:0x02011ff4 module:main -from:0x020154e4 kind:load to:0x0204544c module:main -from:0x02015500 kind:load to:0x0204544c module:main +from:0x020154e4 kind:load to:0x02045444 add:8 module:main +from:0x02015500 kind:load to:0x02045444 add:8 module:main from:0x02015514 kind:thumb_call to:0x020154c0 module:main -from:0x0201551c kind:load to:0x0204544c module:main +from:0x0201551c kind:load to:0x02045444 add:8 module:main from:0x02015530 kind:thumb_call to:0x020154c0 module:main from:0x02015536 kind:thumb_call_arm to:0x02011ff4 module:main -from:0x02015540 kind:load to:0x0204544c module:main +from:0x02015540 kind:load to:0x02045444 add:8 module:main from:0x02015562 kind:thumb_call to:0x02012ec8 module:main from:0x0201557c kind:thumb_call_arm to:0x02011ff4 module:main from:0x02015582 kind:thumb_call to:0x020154c4 module:main from:0x020155ae kind:thumb_call to:0x020010e0 module:main from:0x020155b8 kind:load to:0x0204af1c module:main -from:0x020155d8 kind:load to:0x02045468 module:main +from:0x020155d8 kind:load to:0x02045460 add:8 module:main from:0x020155e0 kind:thumb_call to:0x020154c0 module:main from:0x020155ec kind:thumb_call to:0x020154c0 module:main from:0x020155f2 kind:thumb_call_arm to:0x02011ff4 module:main @@ -2213,7 +2213,7 @@ from:0x020183a8 kind:thumb_call_arm to:0x0201b798 module:main from:0x020183b4 kind:load to:0x020b69b8 module:overlay(0) from:0x020183b8 kind:load to:0x0204fb78 module:main from:0x020183c2 kind:thumb_call to:0x020148d4 module:main -from:0x020183c6 kind:thumb_call_arm to:0x020c6060 module:overlays(18,20,25) +from:0x020183c6 kind:thumb_call_arm to:0x020c6060 module:overlay(19) from:0x020183cc kind:load to:0x0204b120 module:main from:0x020183d8 kind:arm_call to:0x0201b8bc module:main from:0x020183ec kind:arm_call to:0x0201b8bc module:main @@ -2924,19 +2924,19 @@ from:0x0201f424 kind:arm_call to:0x02063990 module:overlay(0) from:0x0201f42c kind:load to:0x0204b690 module:main from:0x0201f43c kind:arm_call to:0x0201f034 module:main from:0x0201f44c kind:arm_call to:0x020634b8 module:overlay(0) -from:0x0201f460 kind:load to:0x020458e0 module:main +from:0x0201f460 kind:load to:0x020458d8 add:8 module:main from:0x0201f464 kind:load to:0x020458ec module:main from:0x0201f474 kind:arm_call to:0x0201f034 module:main from:0x0201f484 kind:arm_call to:0x020634b8 module:overlay(0) -from:0x0201f498 kind:load to:0x020458e0 module:main +from:0x0201f498 kind:load to:0x020458d8 add:8 module:main from:0x0201f49c kind:load to:0x020458ec module:main from:0x0201f4b4 kind:arm_call to:0x0201f078 module:main from:0x0201f4c4 kind:arm_call to:0x020634b8 module:overlay(0) -from:0x0201f4d8 kind:load to:0x020458e0 module:main +from:0x0201f4d8 kind:load to:0x020458d8 add:8 module:main from:0x0201f4dc kind:load to:0x020458ec module:main from:0x0201f4f4 kind:arm_call to:0x0201f078 module:main from:0x0201f504 kind:arm_call to:0x020634b8 module:overlay(0) -from:0x0201f518 kind:load to:0x020458e0 module:main +from:0x0201f518 kind:load to:0x020458d8 add:8 module:main from:0x0201f51c kind:load to:0x020458ec module:main from:0x0201f538 kind:arm_call to:0x02068fc8 module:overlay(0) from:0x0201f570 kind:arm_call to:0x02019528 module:main diff --git a/config/jp/arm9/symbols.txt b/config/jp/arm9/symbols.txt index e8ed245a..93418d57 100644 --- a/config/jp/arm9/symbols.txt +++ b/config/jp/arm9/symbols.txt @@ -615,11 +615,11 @@ func_0201233c kind:function(arm,size=0x120) addr:0x0201233c func_0201245c kind:function(thumb,size=0x10) addr:0x0201245c func_0201246c kind:function(thumb,size=0x54) addr:0x0201246c func_020124c0 kind:function(thumb,size=0x30) addr:0x020124c0 -func_020124f0 kind:function(thumb,size=0xb4) addr:0x020124f0 -func_020125a4 kind:function(thumb,size=0x24) addr:0x020125a4 +DisplayAssertError kind:function(thumb,size=0xb4) addr:0x020124f0 +_ZN8SysFault13func_020125a4EPctS0_z kind:function(thumb,size=0x24) addr:0x020125a4 func_020125c8 kind:function(thumb,size=0xc) addr:0x020125c8 func_020125d4 kind:function(thumb,size=0x21c) addr:0x020125d4 -func_020127f0 kind:function(thumb,size=0x310) addr:0x020127f0 +_ZN8SysFault13func_020127f0Ei kind:function(thumb,size=0x310) addr:0x020127f0 func_02012b00 kind:function(thumb,size=0x188) addr:0x02012b00 func_02012c88 kind:function(thumb,size=0xac) addr:0x02012c88 func_02012d34 kind:function(thumb,size=0xce) addr:0x02012d34 @@ -651,24 +651,24 @@ func_0201328c kind:function(arm,size=0x3c) addr:0x0201328c func_020132c8 kind:function(arm,size=0x14) addr:0x020132c8 func_020132dc kind:function(arm,size=0x78) addr:0x020132dc func_02013354 kind:function(arm,size=0x1c) addr:0x02013354 -_ZN18UnkStruct_02049a2c13func_02013370Ei kind:function(arm,size=0x24) addr:0x02013370 -_ZN18UnkStruct_02049a2c3RunEv kind:function(arm,size=0x394) addr:0x02013394 -_ZN18UnkStruct_02049a2c13func_02013724EPv kind:function(arm,size=0x18) addr:0x02013728 +_ZN4Game13func_02013370Ei kind:function(arm,size=0x24) addr:0x02013370 +_ZN4Game3RunEv kind:function(arm,size=0x394) addr:0x02013394 +_ZN4Game20TrySetCreateCallbackEPFP12GameModeBasevE kind:function(arm,size=0x18) addr:0x02013728 func_02013740 kind:function(arm,size=0x18) addr:0x02013740 func_02013758 kind:function(arm,size=0x14) addr:0x02013758 -func_02013768 kind:function(arm,size=0x60) addr:0x0201376c +_ZN18UnkStruct_02049b1813func_02013768Ev kind:function(arm,size=0x60) addr:0x0201376c func_020137cc kind:function(arm,size=0x1c) addr:0x020137cc func_020137e8 kind:function(arm,size=0x5c) addr:0x020137e8 -func_02013844 kind:function(arm,size=0xb4) addr:0x02013844 -func_020138f8 kind:function(arm,size=0x140) addr:0x020138f8 +_ZN18UnkStruct_02049b1813func_02013840Eti kind:function(arm,size=0xb4) addr:0x02013844 +_ZN18UnkStruct_02049b1813func_020138f4Ei kind:function(arm,size=0x140) addr:0x020138f8 func_02013a38 kind:function(arm,size=0x10) addr:0x02013a38 -func_02013a48 kind:function(arm,size=0x98) addr:0x02013a48 +_ZN18UnkStruct_02049b7413func_02013a44Ei kind:function(arm,size=0x98) addr:0x02013a48 func_02013ae0 kind:function(arm,size=0x34) addr:0x02013ae0 _ZN5InputC1Ev kind:function(arm,size=0x14) addr:0x02013b14 _ZN5Input13func_02013b24Ei kind:function(arm,size=0x64) addr:0x02013b28 func_02013b8c kind:function(arm,size=0x10) addr:0x02013b8c func_02013b9c kind:function(arm,size=0x24) addr:0x02013b9c -func_02013bc0 kind:function(arm,size=0x4c) addr:0x02013bc0 +_ZN5Input13func_02013bbcEv kind:function(arm,size=0x4c) addr:0x02013bc0 _ZN5Input13func_02013c08Et kind:function(arm,size=0x1c) addr:0x02013c0c func_02013c28 kind:function(arm,size=0x58) addr:0x02013c28 func_02013c80 kind:function(arm,size=0x58) addr:0x02013c80 @@ -676,7 +676,7 @@ func_02013cd8 kind:function(arm,size=0x5c) addr:0x02013cd8 func_02013d34 kind:function(arm,size=0x64) addr:0x02013d34 func_02013d98 kind:function(arm,size=0x5c) addr:0x02013d98 func_02013df4 kind:function(arm,size=0x28) addr:0x02013df4 -func_02013e1c kind:function(arm,size=0x1c) addr:0x02013e1c +_ZN21UnkStruct_02049a2c_1C13func_02013e18EPvi kind:function(arm,size=0x1c) addr:0x02013e1c func_02013e38 kind:function(arm,size=0x10) addr:0x02013e38 func_02013e48 kind:function(arm,size=0x3c) addr:0x02013e48 func_02013e84 kind:function(arm,size=0x4c) addr:0x02013e84 @@ -713,7 +713,7 @@ _ZN14OverlayManager15LoadIfNotLoadedEjj kind:function(thumb,size=0x28) addr:0x02 _ZN14OverlayManager4LoadEjj kind:function(thumb,size=0x2c) addr:0x02014828 _ZN14OverlayManager6UnloadEj kind:function(thumb,size=0x28) addr:0x02014854 func_0201487c kind:function(thumb,size=0x58) addr:0x0201487c -_ZN14OverlayManager13func_020148d0Ei kind:function(thumb,size=0x46) addr:0x020148d4 +_ZN14OverlayManager13func_020148d0Ej kind:function(thumb,size=0x46) addr:0x020148d4 func_0201491c kind:function(thumb,size=0x2c) addr:0x0201491c func_02014948 kind:function(thumb,size=0x50) addr:0x02014948 _ZN14OverlayManager13func_02014994Ei kind:function(thumb,size=0x7c) addr:0x02014998 @@ -731,7 +731,7 @@ func_02014c40 kind:function(arm,size=0x24) addr:0x02014c40 _ZN18UnkStruct_02049bd413func_02014c60Ei kind:function(arm,size=0x7c) addr:0x02014c64 _ZN18UnkStruct_02049bd413func_02014cdcEi kind:function(arm,size=0x5c) addr:0x02014ce0 func_02014d3c kind:function(arm,size=0x60) addr:0x02014d3c -func_02014d9c kind:function(arm,size=0x108) addr:0x02014d9c +_ZN18UnkStruct_02049bd413func_02014d98Ev kind:function(arm,size=0x108) addr:0x02014d9c func_02014ea4 kind:function(arm,size=0x5c) addr:0x02014ea4 func_02014f00 kind:function(arm,size=0x58) addr:0x02014f00 func_02014f58 kind:function(arm,size=0x18) addr:0x02014f58 @@ -747,9 +747,9 @@ func_02015244 kind:function(arm,size=0x40) addr:0x020151dc func_0201521c kind:function(arm,size=0x7c) addr:0x0201521c func_02015298 kind:function(arm,size=0x38) addr:0x02015298 func_020152d0 kind:function(arm,size=0x10) addr:0x020152d0 -func_020152e0 kind:function(arm,size=0x38) addr:0x020152e0 +_ZN18SomeSaveFileStructC1Ei kind:function(arm,size=0x38) addr:0x020152e0 func_02015318 kind:function(arm,size=0x24) addr:0x02015318 -func_0201533c kind:function(arm,size=0x20) addr:0x0201533c +_ZN18SomeSaveFileStructD1Ev kind:function(arm,size=0x20) addr:0x0201533c func_0201535c kind:function(arm,size=0x20) addr:0x0201535c func_0201537c kind:function(arm,size=0x18) addr:0x0201537c func_02015394 kind:function(thumb,size=0x12) addr:0x02015394 @@ -764,16 +764,16 @@ func_02015470 kind:function(thumb,size=0x14) addr:0x02015470 _ZN10UnkStruct213func_020154ecEPKc kind:function(thumb,size=0x2a) addr:0x02015484 func_020154b0 kind:function(thumb,size=0x2) addr:0x020154b0 func_020154b4 kind:function(thumb,size=0xc) addr:0x020154b4 -func_020154c0 kind:function(thumb,size=0x2) addr:0x020154c0 -func_020154c4 kind:function(thumb,size=0x8) addr:0x020154c4 -func_020154cc kind:function(thumb,size=0x4) addr:0x020154cc -func_020154d0 kind:function(thumb,size=0x18) addr:0x020154d0 -func_020154e8 kind:function(thumb,size=0x1c) addr:0x020154e8 -_ZN32UnkStruct_ov000_020b4f84_00_BaseD2Ev kind:function(thumb,size=0x1c) addr:0x02015504 -func_02015520 kind:function(thumb,size=0x24) addr:0x02015520 -func_02015544 kind:function(thumb,size=0x2a) addr:0x02015544 -func_02015570 kind:function(thumb,size=0x18) addr:0x02015570 -func_02015588 kind:function(thumb,size=0x38) addr:0x02015588 +_ZN32UnkStruct_ov000_020b4f84_00_Base13func_02015528Ev kind:function(thumb,size=0x2) addr:0x020154c0 +_ZN32UnkStruct_ov000_020b4f84_00_Base13func_0201552cEv kind:function(thumb,size=0x8) addr:0x020154c4 +_ZN32UnkStruct_ov000_020b4f84_00_Base13func_02015534Ev kind:function(thumb,size=0x4) addr:0x020154cc +_ZN32UnkStruct_ov000_020b4f84_00_BaseC1Ev kind:function(thumb,size=0x18) addr:0x020154d0 +_ZN32UnkStruct_ov000_020b4f84_00_BaseC1EPviih kind:function(thumb,size=0x1c) addr:0x020154e8 +_ZN32UnkStruct_ov000_020b4f84_00_BaseD1Ev kind:function(thumb,size=0x1c) addr:0x02015504 +_ZN32UnkStruct_ov000_020b4f84_00_BaseD0Ev kind:function(thumb,size=0x24) addr:0x02015520 +_ZN32UnkStruct_ov000_020b4f84_00_Base8vfunc_08Ei kind:function(thumb,size=0x2a) addr:0x02015544 +_ZN32UnkStruct_ov000_020b4f84_00_Base8vfunc_0CEv kind:function(thumb,size=0x18) addr:0x02015570 +_ZN32UnkStruct_ov000_020b4f84_00_Base8vfunc_10Ei kind:function(thumb,size=0x38) addr:0x02015588 func_020155c0 kind:function(thumb,size=0x1c) addr:0x020155c0 func_020155dc kind:function(thumb,size=0xc) addr:0x020155dc func_020155e8 kind:function(thumb,size=0x12) addr:0x020155e8 @@ -914,7 +914,7 @@ _ZN12GameModeBase8vfunc_24Ev kind:function(arm,size=0x8) addr:0x02018334 _ZN18UnkStruct_0204a0608vfunc_0CEv kind:function(thumb,size=0x14) addr:0x0201833c _ZN18UnkStruct_0204a06013func_020183b8Ev kind:function(thumb,size=0x8) addr:0x02018350 _ZN18UnkStruct_0204a06013func_020183c0Ev kind:function(thumb,size=0x14) addr:0x02018358 -_ZN18UnkStruct_0204a06013func_020183d4EbPvi kind:function(thumb,size=0x50) addr:0x0201836c +_ZN18UnkStruct_0204a06013func_020183d4EbPFP12GameModeBasevEi kind:function(thumb,size=0x50) addr:0x0201836c _ZN18UnkStruct_0204a06013func_02018424Ev kind:function(thumb,size=0x14) addr:0x020183bc _ZN18UnkStruct_0204a060D1Ev kind:function(arm,size=0x14) addr:0x020183d0 _ZN18UnkStruct_0204a060D0Ev kind:function(arm,size=0x1c) addr:0x020183e4 @@ -939,7 +939,7 @@ _ZN19GameModeManagerBase8vfunc_24Ev kind:function(arm,size=0x18) addr:0x02018614 _ZN19GameModeManagerBase8vfunc_28EPc kind:function(arm,size=0x10) addr:0x0201862c _ZN19GameModeManagerBase8vfunc_2CEPc kind:function(arm,size=0x4) addr:0x0201863c _ZN19GameModeManagerBase8vfunc_30Ei kind:function(arm,size=0x4c) addr:0x02018640 -_ZN19GameModeManagerBase8vfunc_34Ev kind:function(arm,size=0x4) addr:0x0201868c +_ZN19GameModeManagerBase8vfunc_34Eii kind:function(arm,size=0x4) addr:0x0201868c _ZN19GameModeManagerBase13func_020186f8Ei kind:function(arm,size=0xc) addr:0x02018690 _ZN19GameModeManagerBase13func_02018704Ev kind:function(arm,size=0x10) addr:0x0201869c _ZN19GameModeManagerBase13func_02018714Eiiiii kind:function(arm,size=0x28) addr:0x020186ac @@ -967,13 +967,13 @@ _ZN18UnkStruct_0204a11013func_02018d34Ev kind:function(arm,size=0x44) addr:0x020 func_02018d10 kind:function(arm,size=0x174) addr:0x02018d10 func_02018e84 kind:function(arm,size=0xac) addr:0x02018e84 func_02018f30 kind:function(arm,size=0x368) addr:0x02018f30 -func_02019298 kind:function(arm,size=0x40) addr:0x02019298 +_ZN18UnkStruct_0204a11013func_02019300Ei kind:function(arm,size=0x40) addr:0x02019298 func_020192d8 kind:function(arm,size=0x10) addr:0x020192d8 -func_020192e8 kind:function(arm,size=0xb8) addr:0x020192e8 -func_020193a0 kind:function(arm,size=0x4c) addr:0x020193a0 -func_020193ec kind:function(arm,size=0x88) addr:0x020193ec -func_02019474 kind:function(arm,size=0x38) addr:0x02019474 -func_020194ac kind:function(arm,size=0x14) addr:0x020194ac +_ZN18UnkStruct_0204a11013func_02019350Ev kind:function(arm,size=0xb8) addr:0x020192e8 +_ZN18UnkStruct_0204a11013func_02019408Ev kind:function(arm,size=0x4c) addr:0x020193a0 +_ZN18UnkStruct_0204a11013func_02019454Ev kind:function(arm,size=0x88) addr:0x020193ec +_ZN18UnkStruct_0204a11013func_020194dcEv kind:function(arm,size=0x38) addr:0x02019474 +_ZN18UnkStruct_0204a11013func_02019514Ev kind:function(arm,size=0x14) addr:0x020194ac func_020194c0 kind:function(arm,size=0x10) addr:0x020194c0 _ZN18UnkStruct_0204a11013func_02019538Eii kind:function(arm,size=0x10) addr:0x020194d0 func_020194e0 kind:function(arm,size=0x10) addr:0x020194e0 @@ -1200,7 +1200,7 @@ func_0201fd60 kind:function(arm,size=0xf8) addr:0x0201fd60 func_0201fe58 kind:function(arm,size=0xcc) addr:0x0201fe58 func_0201ff24 kind:function(thumb,size=0x90) addr:0x0201ff24 func_0201ffb4 kind:function(thumb,size=0x24) addr:0x0201ffb4 -func_0201ffd8 kind:function(arm,size=0xa4) addr:0x0201ffd8 +_ZN18UnkStruct_0204e64c13func_020201c4Ei kind:function(arm,size=0xa4) addr:0x0201ffd8 func_0202007c kind:function(arm,size=0x30) addr:0x0202007c func_020200ac kind:function(arm,size=0x54) addr:0x020200ac func_02020100 kind:function(arm,size=0x5c) addr:0x02020100 @@ -2546,8 +2546,8 @@ data_02045408 kind:data(any) addr:0x02045408 data_02045418 kind:data(any) addr:0x02045418 data_02045424 kind:data(any) addr:0x02045424 data_02045440 kind:data(any) addr:0x02045440 -data_0204544c kind:data(any) addr:0x0204544c -data_02045468 kind:data(any) addr:0x02045468 +_ZTV32UnkStruct_ov000_020b4f84_00_Base kind:data(any) addr:0x02045444 +data_02045468 kind:data(any) addr:0x02045460 data_02045484 kind:data(any) addr:0x02045484 data_020454a0 kind:data(any) addr:0x020454a0 data_020454bc kind:data(any) addr:0x020454bc @@ -2582,7 +2582,7 @@ data_02045880 kind:data(any) addr:0x02045880 data_02045884 kind:data(any) addr:0x02045884 data_020458c8 kind:data(any) addr:0x020458c8 data_020458d4 kind:data(any) addr:0x020458d4 -data_020458e0 kind:data(any) addr:0x020458e0 +_ZTV24UnkSystem2_UnkSubSystem5 kind:data(any) addr:0x020458d8 data_020458ec kind:data(any) addr:0x020458ec data_02045904 kind:data(any) addr:0x02045904 _ZTV21UnkStruct_0204e64c_00 kind:data(any) addr:0x02045914 @@ -2750,7 +2750,7 @@ data_0204af48 kind:bss addr:0x0204af48 data_0204af60 kind:bss addr:0x0204af60 data_0204af9c kind:bss addr:0x0204af9c data_0204afa0 kind:bss addr:0x0204afa0 -data_02049a2c kind:bss addr:0x0204afac +gGame kind:bss addr:0x0204afac data_0204b094 kind:bss addr:0x0204b094 data_02049b18 kind:bss addr:0x0204b098 data_0204b0aa kind:bss addr:0x0204b0aa diff --git a/docs/overlays.md b/docs/overlays.md index 1290f38f..2514c195 100644 --- a/docs/overlays.md +++ b/docs/overlays.md @@ -10,115 +10,115 @@ Each overlay is tied to an index which is used to access the overlay in two diff ------|-------------------|---------|------|------------- `000` | Second | `000` | `0` | Core game engine `001` | SceneInit | `001` | `1` | -`002` | Collect | `002` | | -`003` | SoftKeyboard | `003` | | -`004` | Factory | `014` | | -`005` | NormalScreen | `004` | | -`006` | Paint | `005` | | -`007` | RailEdit | `006` | | -`008` | GameOver | `007` | | -`009` | CloseUp | `009` | | -`010` | TabMenu | `008` | | -`011` | WorldMap | `010` | | -`012` | PanFlute | `011` | | -`013` | TetsuoMap | `012` | | -`014` | Stamp | `013` | | -`015` | Shop | `015` | | -`016` | RabbitCapture | `016` | | -`017` | CourseExec | `017` | | +`002` | Collect | `002` | `1` | +`003` | SoftKeyboard | `003` | `1` | +`004` | Factory | `014` | `1` | The train part screen, either when editing the train or preview the parts +`005` | NormalScreen | `004` | `1` | +`006` | Paint | `005` | `1` | Map drawing +`007` | RailEdit | `006` | `1` | +`008` | GameOver | `007` | `1` | +`009` | CloseUp | `009` | `1` | +`010` | TabMenu | `008` | `1` | +`011` | WorldMap | `010` | `1` | +`012` | PanFlute | `011` | `1` | +`013` | TetsuoMap | `012` | `1` | +`014` | Stamp | `013` | `1` | +`015` | Shop | `015` | `1` | +`016` | RabbitCapture | `016` | `1` | +`017` | CourseExec | `017` | `2` | `018` | StartUp | `021` | `4` | Exists briefly on game startup. Initializes RNG, messages, and more. -`019` | MainSelect | `024` | | File Select -`020` | WirelessCommon | `025` | | -`021` | BattleGame | `026` | | -`022` | Download | `027` | | Handles DS download play. -`023` | Wxc | `028` | | -`024` | MainGame | `022` | | +`019` | MainSelect | `024` | `4` | File Select +`020` | WirelessCommon | `025` | `4` | +`021` | BattleGame | `026` | `5` | +`022` | Download | `027` | `5` | Handles DS download play. +`023` | Wxc | `028` | `5` | +`024` | MainGame | `022` | `4` | `025` | Title | `023` | `4` | Title Screen -`026` | Train | `030` | | -`027` | TrainForest | `058` | | -`028` | TrainSnow | `059` | | -`029` | TrainWater | `060` | | -`030` | TrainFlame | `061` | | -`031` | Land | `029` | | -`032` | MapA1 | `077` | | -`033` | MapA2 | `078` | | -`034` | MapA3 | `079` | | -`035` | MapA4 | `080` | | -`036` | MapA5 | `081` | | -`037` | MapA6 | `082` | | -`038` | MapA7 | `083` | | -`039` | MapA8 | `084` | | -`040` | MapB1 | `085` | | -`041` | MapB2 | `086` | | -`042` | MapB3 | `087` | | -`043` | MapB4 | `088` | | -`044` | MapB5 | `089` | | -`045` | MapB6 | `090` | | -`046` | MapB7 | `091` | | -`047` | MapC1 | `092` | | -`048` | MapC2 | `093` | | -`049` | MapC3 | `094` | | -`050` | MapC4 | `095` | | -`051` | MapC5 | `096` | | -`052` | MapC6 | `097` | | -`053` | MapD1 | `098` | | -`054` | MapD2 | `099` | | -`055` | MapD3 | `100` | | -`056` | MapD4 | `101` | | -`057` | MapD5 | `102` | | -`058` | Field | `032` | | -`059` | InTrain | `047` | | -`060` | Castle | `048` | | -`061` | CastleTown | `049` | | -`062` | Village | `050` | | -`063` | Shrine | `051` | | -`064` | FldForest | `052` | | -`065` | FldSnow | `053` | | -`066` | FldWater | `054` | | -`067` | FldFlame | `055` | | -`068` | FldAjito | `056` | | -`069` | FldRabbit | `057` | | -`070` | Dungeon | `031` | | -`071` | Tower | `033` | `8` | -`072` | TowerLobby | `034` | | +`026` | Train | `030` | `6` | +`027` | TrainForest | `058` | `8` | +`028` | TrainSnow | `059` | `8` | +`029` | TrainWater | `060` | `8` | +`030` | TrainFlame | `061` | `8` | +`031` | Land | `029` | `6` | +`032` | MapA1 | `077` | `13` | +`033` | MapA2 | `078` | `13` | +`034` | MapA3 | `079` | `13` | +`035` | MapA4 | `080` | `13` | +`036` | MapA5 | `081` | `13` | +`037` | MapA6 | `082` | `13` | +`038` | MapA7 | `083` | `13` | +`039` | MapA8 | `084` | `13` | +`040` | MapB1 | `085` | `14` | +`041` | MapB2 | `086` | `14` | +`042` | MapB3 | `087` | `14` | +`043` | MapB4 | `088` | `14` | +`044` | MapB5 | `089` | `14` | +`045` | MapB6 | `090` | `14` | +`046` | MapB7 | `091` | `14` | +`047` | MapC1 | `092` | `15` | +`048` | MapC2 | `093` | `15` | +`049` | MapC3 | `094` | `15` | +`050` | MapC4 | `095` | `15` | +`051` | MapC5 | `096` | `15` | +`052` | MapC6 | `097` | `15` | +`053` | MapD1 | `098` | `16` | +`054` | MapD2 | `099` | `16` | +`055` | MapD3 | `100` | `16` | +`056` | MapD4 | `101` | `16` | +`057` | MapD5 | `102` | `16` | +`058` | Field | `032` | `7` | +`059` | InTrain | `047` | `8` | +`060` | Castle | `048` | `8` | +`061` | CastleTown | `049` | `8` | +`062` | Village | `050` | `8` | +`063` | Shrine | `051` | `8` | +`064` | FldForest | `052` | `8` | +`065` | FldSnow | `053` | `8` | +`066` | FldWater | `054` | `8` | +`067` | FldFlame | `055` | `8` | +`068` | FldAjito | `056` | `8` | +`069` | FldRabbit | `057` | `8` | +`070` | Dungeon | `031` | `7` | +`071` | Tower | `033` | `8` | Tower of Spirit staircase +`072` | TowerLobby | `034` | `8` | Tower of Spirit train station `073` | BossDeago | `040` | `8` | `074` | BossLast1 | `041` | `8` | `075` | BossLast2 | `042` | `8` | -`076` | DgnLv1 | `071` | | -`077` | DgnForest | `043` | | -`078` | BossForest | `035` | | -`079` | DgnSnow | `044` | | -`080` | BossSnow | `036` | | -`081` | DgnLv3 | `072` | | -`082` | DgnWater | `045` | | -`083` | BossWater | `037` | | -`084` | BossFlame | `038` | | -`085` | DgnLv5 | `073` | | -`086` | DgnDesert | `046` | | -`087` | BossDesert | `039` | | -`088` | Stb | `062` | | -`089` | ASR | `063` | | -`090` | TrainNormal | `066` | | -`091` | TrainExtra | `067` | | -`092` | TrainDark | `068` | | -`093` | PlayerSub | `064` | | -`094` | Land2 | `065` | | -`095` | PlayerPhantom | `069` | | -`096` | PlayerZelda | `070` | | -`097` | TrainMsg | `076` | | -`098` | MapWater | `074` | | -`099` | MapLava | `075` | | -`100` | CollectMsg | `020` | | -`101` | SceneInitLand | `018` | | -`102` | CourseExecLand | `019` | | -`103` | PlayerTornado | `103` | | Handles the Whirlwind. -`104` | PlayerBoomerang | `104` | | Handles the Boomerang. -`105` | PlayerWhip | `105` | | Handles the Whip. -`106` | PlayerBow | `106` | | Handles the Bow. -`107` | PlayerSandrock | `107` | | Handles the Sand Wand. -`108` | PlayerPanFlute | `109` | | Handles the Spirit Flute. -`109` | PlayerBomb | `108` | | Handles the Bombs (and potions?) -`110` | PlayerGet | `110` | | -`111` | PlayerDown | `111` | | -`112` | PlayerSceneChange | `112` | | -`113` | PlayerDemo | `113` | | +`076` | DgnLv1 | `071` | `11` | +`077` | DgnForest | `043` | `8` | +`078` | BossForest | `035` | `8` | +`079` | DgnSnow | `044` | `8` | +`080` | BossSnow | `036` | `8` | +`081` | DgnLv3 | `072` | `11` | +`082` | DgnWater | `045` | `8` | +`083` | BossWater | `037` | `8` | +`084` | BossFlame | `038` | `8` | +`085` | DgnLv5 | `073` | `11` | +`086` | DgnDesert | `046` | `8` | +`087` | BossDesert | `039` | `8` | +`088` | Stb | `062` | `9` | +`089` | ASR | `063` | `9` | +`090` | TrainNormal | `066` | `9` | +`091` | TrainExtra | `067` | `9` | +`092` | TrainDark | `068` | `9` | +`093` | PlayerSub | `064` | `9` | +`094` | Land2 | `065` | `9` | +`095` | PlayerPhantom | `069` | `10` | +`096` | PlayerZelda | `070` | `10` | +`097` | TrainMsg | `076` | `12` | +`098` | MapWater | `074` | `12` | +`099` | MapLava | `075` | `12` | +`100` | CollectMsg | `020` | `3` | +`101` | SceneInitLand | `018` | `3` | +`102` | CourseExecLand | `019` | `3` | +`103` | PlayerTornado | `103` | `17` | Handles the Whirlwind. +`104` | PlayerBoomerang | `104` | `17` | Handles the Boomerang. +`105` | PlayerWhip | `105` | `17` | Handles the Whip. +`106` | PlayerBow | `106` | `17` | Handles the Bow. +`107` | PlayerSandrock | `107` | `17` | Handles the Sand Wand. +`108` | PlayerPanFlute | `109` | `17` | Handles the Spirit Flute. +`109` | PlayerBomb | `108` | `17` | Handles the Bombs (and potions?) +`110` | PlayerGet | `110` | `17` | +`111` | PlayerDown | `111` | `17` | +`112` | PlayerSceneChange | `112` | `17` | +`113` | PlayerDemo | `113` | `17` | diff --git a/include/Game/Game.hpp b/include/Game/Game.hpp new file mode 100644 index 00000000..a3920490 --- /dev/null +++ b/include/Game/Game.hpp @@ -0,0 +1,61 @@ +#pragma once + +#include "Game/GameMode.hpp" +#include "Game/GameModeStartUp.hpp" +#include "Save/SaveManager.hpp" +#include "global.h" +#include "types.h" + +typedef void (*GameUnkCallback1)(void); +typedef void (*GameUnkCallback2)(void); +typedef unk32 (*GameUnkCallback3)(void); + +class GameModeFileSelect; + +class UnkStruct_02049a2c_1C { +public: + /* 00 (vtable) */ + /* 04 */ unk32 mUnk_04; + /* 08 */ STRUCT_PAD(0x08, 0xCC); + /* CC */ + + UnkStruct_02049a2c_1C(); + unk32 func_02013e18(void *param1, unk32 param2); + + // data_020437d8 vtable + /* 00 */ virtual ~UnkStruct_02049a2c_1C(); + /* 08 */ virtual void vfunc_08(); +}; + +class Game { +public: + /* 00 */ GameModeBase *mpCurrentGameMode; + /* 04 */ GameModeCreateCallback createCallback; + /* 08 */ GameUnkCallback1 mUnk_08; // seems related to entering and leaving houses/grottos?? + /* 0C */ unk32 mFrameCounter; + /* 10 */ SaveFile *mpSaveFile; + /* 14 */ GameUnkCallback2 mUnk_14; // only set for wireless stuff? + /* 18 */ GameUnkCallback3 mUnk_18; // same as above + /* 1C */ UnkStruct_02049a2c_1C mUnk_1C; + /* E8 */ + + Game(); + + void Run(); + void func_02013370(unk32 param1); + bool TrySetCreateCallback(GameModeCreateCallback createCallback); + + void func_ov000_020576d0(); + void func_ov000_0205770c(); + + void func_ov018_020c48a4(); + void func_ov018_020c48f8(); // loads overlay 0 + + GameModeFileSelect *GetGameModeFileSelect() { + return (GameModeFileSelect *) this->mpCurrentGameMode; + } + + static GameModeStartUp *func_ov018_020c4ba8(); +}; + +extern Game gGame; diff --git a/include/Game/GameMode.hpp b/include/Game/GameMode.hpp index 6182d8c7..a7fae64f 100644 --- a/include/Game/GameMode.hpp +++ b/include/Game/GameMode.hpp @@ -12,8 +12,8 @@ public: // data_02044018 vtable /* 00 */ virtual ~GameModeBase(); - /* 08 */ virtual void vfunc_08(); - /* 0C */ virtual void vfunc_0C() = 0; + /* 08 */ virtual void vfunc_08(); // Init + /* 0C */ virtual void vfunc_0C() = 0; // Update /* 10 */ virtual void vfunc_10(); /* 14 */ virtual void vfunc_14(); /* 18 */ virtual void vfunc_18(); @@ -22,3 +22,5 @@ public: /* 24 */ virtual unk32 vfunc_24(); /* 28 */ }; + +typedef GameModeBase *(*GameModeCreateCallback)(void); diff --git a/include/Game/GameModeFileSelect.hpp b/include/Game/GameModeFileSelect.hpp index c0cdfee6..cf5e1be7 100644 --- a/include/Game/GameModeFileSelect.hpp +++ b/include/Game/GameModeFileSelect.hpp @@ -1,8 +1,8 @@ #pragma once #include "FileSelect/FileSelect.hpp" +#include "Game/Game.hpp" #include "Game/GameModeManager.hpp" -#include "Unknown/UnkStruct_02049a2c.hpp" #include "Unknown/UnkStruct_02049bd4.hpp" #include "Unknown/UnkStruct_0204a110.hpp" @@ -18,7 +18,7 @@ public: this->mSaveSlotIndex = 0; data_02049bd4.func_02014cdc(2); data_02049bd4.mUnk_02 &= 0xFFFB; - data_02049a2c.func_02013370(1); + gGame.func_02013370(1); data_0204999c.mUnk_60 = 0xD6D8; data_ov000_020b504c.func_ov001_020be668(); data_0204a110.func_ov001_020bd514(2, FileSelectManager::Create, 0, 1); diff --git a/include/Game/GameModeManager.hpp b/include/Game/GameModeManager.hpp index 7040cf18..abccc8a8 100644 --- a/include/Game/GameModeManager.hpp +++ b/include/Game/GameModeManager.hpp @@ -1,5 +1,6 @@ #pragma once +#include "Game/GameMode.hpp" #include "Player/TouchControl.hpp" #include "System/SysNew.hpp" #include "Unknown/UnkStruct_02049b18.hpp" @@ -193,7 +194,37 @@ public: /* 28 */ virtual void vfunc_28(unk8 *param1); /* 2C */ virtual void vfunc_2C(unk8 *param1); /* 30 */ virtual void vfunc_30(unk32 param1); - /* 34 */ virtual void vfunc_34(); + /* 34 */ virtual void vfunc_34(unk32 param1, unk32 param2); static GameModeManagerBase *Create(unk32 param1); }; + +class TitleScreen; +class MainGame; + +class TitleScreenManager_Base : public GameModeManagerBase { +public: + /* 000 (base) */ + /* 154 */ GameModeBase *mpGameMode; + + TitleScreenManager_Base(); + + TitleScreen *GetTitleScreen() { + return (TitleScreen *) this->mpGameMode; + } + + MainGame *GetMainGame() { + return (MainGame *) this->mpGameMode; + } + + // data_ov000_020b1d14 vtable + /* 08 */ virtual ~TitleScreenManager_Base() override; + /* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2, unk32 param3) override; + /* 38 */ virtual void vfunc_38(unk32 param1, unk32 param2, unk32 param3, unk32 param4); + /* 3C */ virtual void vfunc_3C(); + /* 40 */ virtual void vfunc_40(); + /* 44 */ virtual void vfunc_44(); + /* 48 */ +}; + +extern TitleScreenManager_Base *data_027e0994; diff --git a/include/MainGame/MainGame.hpp b/include/MainGame/MainGame.hpp new file mode 100644 index 00000000..f8a3e15b --- /dev/null +++ b/include/MainGame/MainGame.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include "Game/GameModeManager.hpp" + +class MainGameManager : public TitleScreenManager_Base { +public: + /* 000 (base) */ + /* 154 */ + + // data_ov024_020d7c18 vtable + /* 08 */ virtual ~MainGameManager() override; + /* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2, unk32 param3) override; + /* 14 */ virtual void vfunc_14() override; + /* 18 */ virtual void vfunc_18() override; + /* 1C */ virtual void vfunc_1C() override; + /* 20 */ virtual void vfunc_20() override; + /* 24 */ virtual void vfunc_24() override; + /* 28 */ virtual void vfunc_28(unk8 *param1) override; + /* 2C */ virtual void vfunc_2C(unk8 *param1) override; + /* 30 */ virtual void vfunc_30(unk32 param1) override; + /* 34 */ virtual void vfunc_34(unk32 param1, unk32 param2) override; + /* 38 */ virtual void vfunc_38(unk32 param1, unk32 param2, unk32 param3, unk32 param4) override; +}; diff --git a/include/Player/Player.hpp b/include/Player/Player.hpp new file mode 100644 index 00000000..b8982a17 --- /dev/null +++ b/include/Player/Player.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "nitro/math.h" +#include "types.h" + +// incomplete +class PlayerActor { +public: + /* 00 */ Vec3p mPos; + /* 0C */ Vec3p mPrevPos; + /* 18 */ Vec3p mVel; + /* 24 */ Vec3p mAccel; + /* 30 */ u16 mAngle; + /* 32 */ u8 mInvincibilityTimer; + /* 33 */ u8 mInvincibilityIconTimer; // the blinking icon on top-screen + + void func_ov001_020bc820(); // TODO: params +}; diff --git a/include/Save/AdventureFlags.hpp b/include/Save/AdventureFlags.hpp index 60880e8f..be8c90d5 100644 --- a/include/Save/AdventureFlags.hpp +++ b/include/Save/AdventureFlags.hpp @@ -425,9 +425,9 @@ enum AdventureFlag_ { /* 0x18F */ AdventureFlag_Unk_18F = FLAG(12, 15), /* 0x190 */ AdventureFlag_Unk_190 = FLAG(12, 16), /* 0x191 */ AdventureFlag_Unk_191 = FLAG(12, 17), - /* 0x192 */ AdventureFlag_Unk_192 = FLAG(12, 18), - /* 0x193 */ AdventureFlag_Unk_193 = FLAG(12, 19), - /* 0x194 */ AdventureFlag_Unk_194 = FLAG(12, 20), + /* 0x192 */ AdventureFlag_ObtainedBeedleFreebieCard = FLAG(12, 18), + /* 0x193 */ AdventureFlag_ObtainedBeedleQuintuplePointsCard = FLAG(12, 19), + /* 0x194 */ AdventureFlag_ObtainedBeedlePointsCard = FLAG(12, 20), /* 0x195 */ AdventureFlag_Unk_195 = FLAG(12, 21), /* 0x196 */ AdventureFlag_Unk_196 = FLAG(12, 22), /* 0x197 */ AdventureFlag_Unk_197 = FLAG(12, 23), diff --git a/include/System/OverlayManager.hpp b/include/System/OverlayManager.hpp index 58bee618..55953e85 100644 --- a/include/System/OverlayManager.hpp +++ b/include/System/OverlayManager.hpp @@ -395,7 +395,7 @@ public: void LoadEquipItem(ItemFlag equipId); - SysFault *func_020148d0(unk32 param1); + void func_020148d0(OverlayIndex index); void func_02014994(unk32 param1); }; diff --git a/include/System/Random.hpp b/include/System/Random.hpp index 6b6280a1..6f72fc98 100644 --- a/include/System/Random.hpp +++ b/include/System/Random.hpp @@ -52,6 +52,7 @@ struct Random { return result; } +#ifdef __MWERKS__ Vec2us &NextPos(u16 xMax, u16 yMax) { Vec2us pos; @@ -60,6 +61,12 @@ struct Random { return pos; } +#else + const Vec2us NextPos(u16 xMax, u16 yMax) { + const Vec2us pos = {(u16) this->Next32(0, xMax), (u16) this->Next32(0, yMax)}; + return pos; + } +#endif void Init(); }; diff --git a/include/System/SysFault.hpp b/include/System/SysFault.hpp index 63f3b34c..666ea5ee 100644 --- a/include/System/SysFault.hpp +++ b/include/System/SysFault.hpp @@ -5,10 +5,11 @@ class SysFault { public: /* 00 */ unk32 mUnk_00; - /* 04 */ unk8 mUnk_04; - /* 05 */ unk8 mUnk_05; + /* 04 */ u8 mUnk_04; + /* 05 */ u8 mUnk_05; void func_020125a4(char *file, u16 line, char *msg, ...); + void func_020127f0(unk32 param1); void func_ov018_020c4840(); }; diff --git a/include/System/SysNew.hpp b/include/System/SysNew.hpp index bc2d3a2a..0cc78696 100644 --- a/include/System/SysNew.hpp +++ b/include/System/SysNew.hpp @@ -1,37 +1,45 @@ #pragma once +#include "System/SysFault.hpp" #include "global.h" #include "types.h" +#include + +#define GAME_ASSERT(cond, line, msg, ...) \ + (!(cond) ? data_02049984.func_020125a4(__FILE__, (line), (msg), __VA_ARGS__) : ((void) 0)) +#define ASSERT(cond, msg, ...) GAME_ASSERT(cond, __LINE__, msg, __VA_ARGS__) + typedef u32 UnkId; enum __UnkId { - UnkId_EXPH = 'EXPH', - UnkId_FRMH = 'FRMH', - UnkId_UNTH = 'UNTH', - UnkId_UNSH = 'UNSH', + UnkId_EXPH = 'EXPH', // Expanded Heap? + UnkId_FRMH = 'FRMH', // Frame Heap? + UnkId_UNTH = 'UNTH', // Unit Heap? + UnkId_UNSH = 'UNSH', // Unspecified Heap? }; typedef u32 HeapIndex; +typedef s16 HeapIndex16; enum HeapIndex_ { - HeapIndex_0 = 0, - HeapIndex_1 = 1, - HeapIndex_2 = 2, - HeapIndex_3 = 3, - HeapIndex_4 = 4, - HeapIndex_5 = 5, - HeapIndex_6 = 6, - HeapIndex_7 = 7, - HeapIndex_8 = 8, - HeapIndex_Max = 9 + HeapIndex_Main = 0, // UnkId_FRMH + HeapIndex_1 = 1, // UnkId_EXPH + HeapIndex_2 = 2, // UnkId_UNSH + HeapIndex_ITCM = 3, // UnkId_UNSH + HeapIndex_DTCM = 4, // ? + HeapIndex_5 = 5, // ? + HeapIndex_6 = 6, // UnkId_FRMH + HeapIndex_7 = 7, // ? + HeapIndex_8 = 8, // ? + HeapIndex_Max = 9 }; class SysObject { public: - static void operator delete[](void *ptr); + void operator delete[](void *ptr); }; -static void *operator new(unsigned long length, u32 id, u32 idLength = 4); -static void *operator new[](unsigned long length, u32 id, u32 idLength = 4); +void *operator new(size_t length, u32 id, u32 idLength = 4); +void *operator new[](size_t length, u32 id, u32 idLength = 4); class UnkStruct_02011e10_Sub1 { public: @@ -51,7 +59,7 @@ public: class UnkStruct_02011e10 : public SysObject { public: - /* 00 */ UnkStruct_02011e10_Sub1 *mUnk_00[HeapIndex_Max]; + /* 00 */ UnkStruct_02011e10_Sub1 *mUnk_00[HeapIndex_Max]; // the pointer seems to match arena lo /* 24 */ unk32 mUnk_24[2]; /* 28 */ STRUCT_PAD(0x2C, 0x5C); /* 5C */ unk32 mUnk_5C; diff --git a/include/TitleScreen/TitleScreen.hpp b/include/TitleScreen/TitleScreen.hpp index 76d8ced3..dfb0ec80 100644 --- a/include/TitleScreen/TitleScreen.hpp +++ b/include/TitleScreen/TitleScreen.hpp @@ -1,6 +1,7 @@ #pragma once #include "Game/GameModeManager.hpp" +#include "System/SysNew.hpp" #include "Unknown/Common.hpp" #include "regs.h" #include "types.h" @@ -23,23 +24,6 @@ enum TitleScreenState_ { TitleScreenState_Max = 6 }; -class TitleScreenManager_Base : public GameModeManagerBase { -public: - /* 000 (base) */ - /* 154 */ - - TitleScreenManager_Base(); - - // data_ov000_020b1d14 vtable - /* 08 */ virtual ~TitleScreenManager_Base() override; - /* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2, unk32 param3) override; - /* 38 */ virtual void vfunc_38(); - /* 3C */ virtual void vfunc_3C(); - /* 40 */ virtual void vfunc_40(); - /* 44 */ virtual void vfunc_44(); - /* 48 */ -}; - class TitleScreen_Sub2 : public GameModeLinkListNode { public: /* 00 (vtable) */ @@ -197,11 +181,10 @@ public: class TitleScreenManager : public TitleScreenManager_Base { public: /* 000 (base) */ - /* 154 */ TitleScreen *mpTitleScreen; /* 158 */ TitleScreenManager(unk32 param1) NO_INLINE { - this->mpTitleScreen = NULL; + this->mpGameMode = NULL; GX_SetGraphicsMode(1, 0, 1); GXS_SetGraphicsMode(5); REG_BG3CNT_SUB = (REG_BG3CNT_SUB & 0x0043) | 0x4E14; @@ -217,9 +200,7 @@ public: /* 24 */ virtual void vfunc_24() override; /* 28 */ virtual void vfunc_28(unk8 *param1) override; /* 2C */ virtual void vfunc_2C(unk8 *param1) override; - /* 38 */ virtual void vfunc_38() override; + /* 38 */ virtual void vfunc_38(unk32 param1, unk32 param2, unk32 param3, unk32 param4) override; static TitleScreenManager *Create(unk32 param1); }; - -extern TitleScreenManager *data_027e0994; diff --git a/include/Unknown/Common.hpp b/include/Unknown/Common.hpp index 05ac9b62..9b115e86 100644 --- a/include/Unknown/Common.hpp +++ b/include/Unknown/Common.hpp @@ -4,6 +4,7 @@ #include "System/SysNew.hpp" #include "global.h" #include "nitro/math.h" +#include "nns/text.h" #include "types.h" extern "C" void func_0201e8d4(void *param1, void *param2); @@ -566,13 +567,15 @@ public: /* 044 */ unk32 mUnk_044; /* 048 */ unk32 mUnk_048; /* 04C */ unk32 mUnk_04C; - /* 050 */ STRUCT_PAD(0x50, 0x130); + /* 050 */ STRUCT_PAD(0x50, 0x130); // e0 + + UnkSystem2_UnkSubSystem5_Base_10(); // data_ov000_020b20fc (vtable) /* 00 */ virtual ~UnkSystem2_UnkSubSystem5_Base_10(); /* 08 */ virtual void vfunc_08(); /* 0C */ virtual void vfunc_0C(); - /* 10 */ virtual void vfunc_10(); + /* 10 */ virtual void vfunc_10(void *param1); /* 14 */ virtual void vfunc_14(); /* 18 */ virtual void vfunc_18(); /* 1C */ virtual void vfunc_1C(); @@ -590,35 +593,18 @@ public: /* 4C */ }; -class UnkSystem2_UnkSubSystem5_Base { -public: - /* 000 (vtable) */ - /* 004 */ wchar_t *mpString; // in this context it points to the player's name - /* 008 */ unk16 mUnk_008; - /* 00A */ unk16 mUnk_00A; - /* 00C */ void *mUnk_00C; - /* 010 */ UnkSystem2_UnkSubSystem5_Base_10 mUnk_010; - - ~UnkSystem2_UnkSubSystem5_Base(); - - /* 00 */ virtual void vfunc_00(); - /* 04 */ +struct UnkSystem2_UnkSubSystem11_Base_1C { + u8 pad[0x10]; }; -class UnkSystem2_UnkSubSystem11 { +class UnkSystem2_UnkSubSystem11_Base { public: /* 00 (vtable) */ - /* 04 */ void *mUnk_04; - /* 08 */ unk32 mUnk_08; - /* 0C */ unk32 mUnk_0C; - /* 10 */ unk32 mUnk_10; - /* 14 */ unk32 mUnk_14; - /* 18 */ void *mUnk_18; - /* 1C */ void *mUnk_1C; - /* 20 */ + /* 04 */ Text_UnkStruct2 mUnk_04; + /* 1C */ UnkSystem2_UnkSubSystem11_Base_1C mUnk_1C; // +0x24: space between characters, set from BMG INF1 entry + /* 2C */ - void func_ov000_02061f60(); - ~UnkSystem2_UnkSubSystem11(); + UnkSystem2_UnkSubSystem11_Base(); // func_ov000_02061ce0 // data_ov000_020b1e9c vtable /* 00 */ virtual void vfunc_00(); @@ -627,10 +613,31 @@ public: /* 0C */ virtual void vfunc_0C(); }; -// this class seems related to drawing strings? -class UnkSystem2_UnkSubSystem5 : public UnkSystem2_UnkSubSystem5_Base { +class UnkSystem2_UnkSubSystem11 : public UnkSystem2_UnkSubSystem11_Base { public: - /* 000 (base) */ + /* 00 (base) */ + /* 2C */ STRUCT_PAD(0x2C, 0xE8); + /* E8 */ + + UnkSystem2_UnkSubSystem11(); // func_ov000_02061f30 + ~UnkSystem2_UnkSubSystem11(); + void func_ov000_02061f60(); + + // data_ov000_020b1e9c vtable + /* 00 */ virtual void vfunc_00() override; + /* 04 */ virtual void vfunc_04() override; + /* 08 */ virtual void vfunc_08() override; + /* 0C */ virtual void vfunc_0C() override; +}; + +class UnkSystem2_UnkSubSystem5_Base { +public: + /* 000 (vtable) */ + /* 004 */ wchar_t *mpString; // in this context it points to the player's name + /* 008 */ unk16 mUnk_008; // UnkSystem2_UnkSubSystem5()'s param1 + /* 00A */ unk16 mUnk_00A; // UnkSystem2_UnkSubSystem5()'s param2 + /* 00C */ void *mUnk_00C; + /* 010 */ UnkSystem2_UnkSubSystem5_Base_10 mUnk_010; /* 130 */ STRUCT_PAD(0x130, 0x140); /* 140 */ unk16 mUnk_140; /* 142 */ unk16 mUnk_142; @@ -641,12 +648,21 @@ public: /* 14D */ unk8 mUnk_14D; // 0x545 /* 14E */ unk8 mUnk_14E; // 0x546 /* 14F */ unk8 mUnk_14F; // 0x547 + + UnkSystem2_UnkSubSystem5_Base(UnkSystem2_UnkSubSystem11 *param1, unk32 param2, unk32 param3); // func_0201f288 + ~UnkSystem2_UnkSubSystem5_Base(); + + /* 00 */ virtual void vfunc_00(); + /* 04 */ +}; + +// this class seems related to drawing strings? +class UnkSystem2_UnkSubSystem5 : public UnkSystem2_UnkSubSystem5_Base { +public: + /* 000 (base) */ /* 150 */ UnkSystem2_UnkSubSystem11 mUnk_150; - /* 170 */ void *mUnk_170; - /* 144 */ STRUCT_PAD(0x174, 0x238); /* 238 */ - UnkSystem2_UnkSubSystem5() {} UnkSystem2_UnkSubSystem5(unk32 param1, unk32 param2); ~UnkSystem2_UnkSubSystem5() {} diff --git a/include/Unknown/UnkStruct_02049a2c.hpp b/include/Unknown/UnkStruct_02049a2c.hpp deleted file mode 100644 index 285c1189..00000000 --- a/include/Unknown/UnkStruct_02049a2c.hpp +++ /dev/null @@ -1,52 +0,0 @@ -#pragma once - -#include "Game/GameMode.hpp" -#include "Game/GameModeStartUp.hpp" -#include "global.h" -#include "types.h" - -class GameModeFileSelect; - -class UnkStruct_02049a2c_1C { -public: - /* 00 (vtable) */ - /* 04 */ - - UnkStruct_02049a2c_1C(); - - // data_020437d8 vtable - /* 00 */ virtual ~UnkStruct_02049a2c_1C(); - /* 08 */ virtual void vfunc_08(); -}; - -class UnkStruct_02049a2c { -public: - /* 00 */ GameModeBase *mUnk_00; - /* 04 */ void *mUnk_04; - /* 08 */ unk32 mUnk_08; - /* 0C */ unk32 mUnk_0C; - /* 10 */ unk32 mUnk_10; - /* 14 */ unk32 mUnk_14; - /* 18 */ unk32 mUnk_18; - /* 1C */ UnkStruct_02049a2c_1C mUnk_1C; - /* 20 */ unk32 mUnk_20; - /* 24 */ STRUCT_PAD(0x24, 0xE8); - /* E8 */ - - UnkStruct_02049a2c(); - - void Run(void); - void func_02013370(unk32 param1); - bool func_02013724(void *param1); - - void func_ov018_020c48a4(unk32 param1); - void func_ov018_020c48f8(); // loads overlay 0 - - GameModeFileSelect *GetUnk00_FileSelect() { - return (GameModeFileSelect *) this->mUnk_00; - } - - static GameModeStartUp *func_ov018_020c4ba8(); -}; - -extern UnkStruct_02049a2c data_02049a2c; diff --git a/include/Unknown/UnkStruct_02049b18.hpp b/include/Unknown/UnkStruct_02049b18.hpp index ac5bee9d..52e67de6 100644 --- a/include/Unknown/UnkStruct_02049b18.hpp +++ b/include/Unknown/UnkStruct_02049b18.hpp @@ -24,6 +24,9 @@ public: UnkStruct_02049b18(); ~UnkStruct_02049b18(); + void func_02013768(); + void func_02013840(u16 param1, unk32 param2); + void func_020138f4(unk32 param1); }; extern UnkStruct_02049b18 data_02049b18; diff --git a/include/Unknown/UnkStruct_02049b74.hpp b/include/Unknown/UnkStruct_02049b74.hpp new file mode 100644 index 00000000..d5f4e290 --- /dev/null +++ b/include/Unknown/UnkStruct_02049b74.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_02049b74 { +public: + /* 00 */ unk32 mUnk_00; + + UnkStruct_02049b74(); + ~UnkStruct_02049b74(); + void func_02013a44(unk32 param1); +}; + +extern UnkStruct_02049b74 data_02049b74; diff --git a/include/Unknown/UnkStruct_02049bd4.hpp b/include/Unknown/UnkStruct_02049bd4.hpp index 5953bd61..5c93f2d8 100644 --- a/include/Unknown/UnkStruct_02049bd4.hpp +++ b/include/Unknown/UnkStruct_02049bd4.hpp @@ -10,6 +10,7 @@ public: void func_02014c60(unk32 param1); void func_02014cdc(unk32 param1); + void func_02014d98(); }; extern UnkStruct_02049bd4 data_02049bd4; diff --git a/include/Unknown/UnkStruct_0204a060.hpp b/include/Unknown/UnkStruct_0204a060.hpp index 8d0b2179..58d73984 100644 --- a/include/Unknown/UnkStruct_0204a060.hpp +++ b/include/Unknown/UnkStruct_0204a060.hpp @@ -1,11 +1,14 @@ #pragma once +#include "Game/GameMode.hpp" #include "Game/GameModeManager.hpp" #include "System/SysNew.hpp" #include "Unknown/Common.hpp" #include "Unknown/UnkStruct_ov000_02067bc4.hpp" #include "types.h" +class GameModeFileSelect; + class UnkStruct_0204a060_Base3 : public SysObject { public: /* 00 (vtable) */ @@ -64,13 +67,13 @@ public: class UnkStruct_0204a060 : public UnkStruct_0204a060_Base { public: /* 00 (base) */ - /* 24 */ void *callback; //! TODO: is it a PTMF? + /* 24 */ GameModeCreateCallback createCallback; UnkStruct_0204a060(); void func_020183c0(void); - bool func_020183d4(bool param1, void *param2, unk32 param3); - static void func_02018424(void); //! TODO: is it a PTMF? + bool func_020183d4(bool param1, GameModeCreateCallback createFunc, unk32 param3); + static GameModeFileSelect *func_02018424(void); // data_02044048 vtable /* 00 */ virtual ~UnkStruct_0204a060() override; diff --git a/include/Unknown/UnkStruct_0204a088.hpp b/include/Unknown/UnkStruct_0204a088.hpp index 1d2bd666..35f47fa8 100644 --- a/include/Unknown/UnkStruct_0204a088.hpp +++ b/include/Unknown/UnkStruct_0204a088.hpp @@ -13,18 +13,20 @@ public: ~UnkStruct_0204a088_Base(); //! TODO: most likely inlined but can't make it work for some reasons }; +// members 00 04 and 08 are used in data_ov000_020b1d74 to figure out which overlay to load next in slot 1 class UnkStruct_0204a088 : public UnkStruct_0204a088_Base { public: - /* 000 */ unk32 mUnk_00; - /* 000 */ unk32 mUnk_04; - /* 000 */ unk32 mUnk_08; - /* 00C */ FileSelectManager_UnkDrawBase mUnk_0C[23]; + /* 000 */ unk32 mUnk_00; // current index + /* 000 */ unk32 mUnk_04; // prev index + /* 000 */ unk32 mUnk_08; // next index + /* 00C */ FileSelectManager_UnkDrawBase mUnk_0C[23]; // 23 possible overlays /* 120 */ u16 mUnk_120; /* 122 */ unk16 mUnk_122; + /* 123 */ unk8 mUnk_123; void func_ov000_02061098(void); void func_ov000_020611dc(void *param1, unk32 param2); - void func_ov000_020611fc(unk32 param2); + void func_ov000_020611fc(unk32 param2); // sets new index void func_ov000_02061224(void); void func_ov000_02061230(void); void func_ov000_02061248(void); diff --git a/include/Unknown/UnkStruct_0204a110.hpp b/include/Unknown/UnkStruct_0204a110.hpp index c2535d70..4cb19e9a 100644 --- a/include/Unknown/UnkStruct_0204a110.hpp +++ b/include/Unknown/UnkStruct_0204a110.hpp @@ -175,7 +175,8 @@ public: class UnkStruct_0204a110 { public: /* 000 */ unk32 mUnk_000; - /* 004 */ unk32 mUnk_004; + /* 004 */ u16 mUnk_004; + /* 004 */ unk16 mUnk_006; /* 008 */ unk32 mUnk_008; /* 00C */ unk32 mUnk_00C; /* 010 */ UnkStruct_0204a110_Sub2 mUnk_010; @@ -216,6 +217,12 @@ public: void func_020195a0(const char *param1, unk32 param2, unk32 param3, unk32 param4); void func_0201967c(unk32 param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6); void func_02019538(unk32 param1, unk32 param2); + unk32 func_02019300(unk32 param1); + void func_02019350(); + void func_020194dc(); + void func_02019408(); + void func_02019454(); + unk32 func_02019514(); void func_ov001_020bd514(unk32 param1, void *param2, unk32 param3, unk32 param4); void func_ov001_020bd58c(void); diff --git a/include/Unknown/UnkStruct_0204e64c.hpp b/include/Unknown/UnkStruct_0204e64c.hpp index 214337a3..83c8362d 100644 --- a/include/Unknown/UnkStruct_0204e64c.hpp +++ b/include/Unknown/UnkStruct_0204e64c.hpp @@ -12,7 +12,7 @@ public: /* 06 */ unk16 mUnk_06; /* 08 */ unk16 mUnk_08; /* 0A */ unk8 mUnk_0A; - /* 0B */ unk8 mUnk_0B; + /* 0B */ u8 mUnk_0B; // bool? /* 0C */ unk8 mUnk_0C; /* 0D */ unk8 mUnk_0D; /* 0E */ unk8 mUnk_0E; @@ -35,6 +35,7 @@ public: UnkStruct_0204e64c(); ~UnkStruct_0204e64c(); + void func_020201c4(unk32 param1); }; extern UnkStruct_0204e64c data_0204e64c; diff --git a/include/Unknown/UnkStruct_027e0208.hpp b/include/Unknown/UnkStruct_027e0208.hpp new file mode 100644 index 00000000..636eb6af --- /dev/null +++ b/include/Unknown/UnkStruct_027e0208.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_027e0208 { +public: + /* 000 */ unk32 mUnk_000; + /* 004 */ STRUCT_PAD(0x04, 0xE0); + /* 0E0 */ unk32 mUnk_0E0; + /* 0E4 */ unk32 mUnk_0E4; + /* 0E8 */ unk32 mUnk_0E8; + /* 0EC */ unk32 mUnk_0EC; + /* 0F0 */ unk32 mUnk_0F0; + /* 0F4 */ unk32 mUnk_0F4; + /* 0F4 */ unk32 mUnk_0F8; + /* 0F4 */ unk32 mUnk_0FC; + + UnkStruct_027e0208(); + ~UnkStruct_027e0208(); +}; + +extern UnkStruct_027e0208 data_027e0208; diff --git a/include/Unknown/UnkStruct_027e0478.hpp b/include/Unknown/UnkStruct_027e0478.hpp new file mode 100644 index 00000000..2d0812f8 --- /dev/null +++ b/include/Unknown/UnkStruct_027e0478.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include "Item/ItemManager.hpp" +#include "Player/Player.hpp" +#include "Player/TouchControl.hpp" +#include "global.h" +#include "nitro/button.h" + +// incomplete +class UnkStruct_027e0478 { +public: + /* 000 */ void *mUnk_000; // set to -1 on land and to a pointer on train? + /* 004 */ void *mUnk_004; + /* 008 */ ItemManager *mpItemManager; + /* 00C */ Input mButtons; + /* 012 */ unk16 mUnk_012; + /* 014 */ TouchControl mTouchControl; + /* 036 */ STRUCT_PAD(0x36, 0xF0); + /* 0F0 */ unk32 mUnk_0F0; // seems to be the walking speed of link?? + /* 0F4 */ unk32 mUnk_0F4; + /* 0F8 */ unk32 mUnk_0F8; + /* 0FC */ unk32 mUnk_0FC; + /* 100 */ unk32 mUnk_100; + /* 104 */ unk8 mUnk_104; + /* 105 */ unk8 mUnk_105; // set to 0 on idle, set to 3 when pulling out an item + /* 106 */ unk8 mUnk_106; + /* 107 */ unk8 mUnk_107; + /* 108 */ void *mUnk_108; // vtable + /* 10C */ void *mUnk_10C; // linklist? + /* 110 */ void *mUnk_110; + /* 114 */ STRUCT_PAD(0x114, 0x154); + /* 154 */ PlayerActor mPlayer; +}; + +extern UnkStruct_027e0478 data_027e0478; diff --git a/include/Unknown/UnkStruct_027e09a4.hpp b/include/Unknown/UnkStruct_027e09a4.hpp index 9749d731..cb82f3c3 100644 --- a/include/Unknown/UnkStruct_027e09a4.hpp +++ b/include/Unknown/UnkStruct_027e09a4.hpp @@ -1,9 +1,144 @@ #pragma once #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_0204a060.hpp" #include "global.h" #include "types.h" +/* +naming scheme: +- test_xxx: debug area +- e3_xxx: E3 demo area +- t_xxx: "T" for "Train" -> overworld area +- d_xxx: "D" for "Dungeon" -> dungeon area +- b_xxx: "B" for "Boss" -> dungeon boss area +- f_xxx: "F" for "Field" -> normal gameplay area (also known as a "land" area) +*/ +enum SceneIndex { + /* 0 */ SceneIndex_test_trn = 0x00, // + /* 1 */ SceneIndex_test_trn2 = 0x01, // + /* 2 */ SceneIndex_test_pre = 0x02, // + /* 3 */ SceneIndex_test_iwa = 0x03, // + /* 4 */ SceneIndex_t_area0 = 0x04, // Forest Realm + /* 5 */ SceneIndex_t_area1 = 0x05, // Snow Realm + /* 6 */ SceneIndex_t_area2 = 0x06, // Ocean Realm + /* 7 */ SceneIndex_t_area3 = 0x07, // Fire Realm + /* 8 */ SceneIndex_t_tutorial = 0x08, // + /* 9 */ SceneIndex_t_forest = 0x09, // + /* 10 */ SceneIndex_t_smarine = 0x0A, // + /* 11 */ SceneIndex_t_smount = 0x0B, // rocktite scene? + /* 12 */ SceneIndex_t_smount2 = 0x0C, // rocktite scene? + /* 13 */ SceneIndex_t_smount3 = 0x0D, // rocktite fire realm scene? + /* 14 */ SceneIndex_t_minigame = 0x0E, // goron target range minigame + /* 15 */ SceneIndex_t_dark = 0x0F, // Dark Realm + /* 16 */ SceneIndex_t_eviltrain = 0x10, // train cole fight + /* 17 */ SceneIndex_t_eviltrain2 = 0x11, // same as above + /* 18 */ SceneIndex_t_eviltrain3 = 0x12, // same as above + /* 19 */ SceneIndex_d_main = 0x13, // Tower Of Spirits + /* 20 */ SceneIndex_d_main_f = 0x14, // ToS base + /* 21 */ SceneIndex_d_main_s = 0x15, // ToS top stairs + /* 22 */ SceneIndex_d_main_a = 0x16, // ToS altar + /* 23 */ SceneIndex_d_main_w = 0x17, // ToS inner Stairs + /* 24 */ SceneIndex_d_tutorial = 0x18, // Tunnel to ToS + /* 25 */ SceneIndex_d_forest = 0x19, // Forest Temple + /* 26 */ SceneIndex_d_snow26 = 0x1A, // Snow Temple + /* 27 */ SceneIndex_d_water27 = 0x1B, // Water Temple + /* 28 */ SceneIndex_d_flame = 0x1C, // Fire Temple + /* 29 */ SceneIndex_d_sand = 0x1D, // Sand Temple + /* 30 */ SceneIndex_b_forest = 0x1E, // Stagnox + /* 31 */ SceneIndex_b_snow = 0x1F, // Fraaz + /* 32 */ SceneIndex_b_water = 0x20, // Phytops + /* 33 */ SceneIndex_b_flame = 0x21, // Cragma + /* 34 */ SceneIndex_b_sand = 0x22, // Skeldritch + /* 35 */ SceneIndex_b_deago = 0x23, // Byrne + /* 36 */ SceneIndex_b_last1 = 0x24, // demon zelda train + /* 37 */ SceneIndex_b_last2 = 0x25, // malladus beast 1 + /* 38 */ SceneIndex_b_last22 = 0x26, // malladus song + /* 39 */ SceneIndex_b_last23 = 0x27, // mallasdus beast 2 + /* 40 */ SceneIndex_f_hyral = 0x28, // hyrule castle + /* 41 */ SceneIndex_f_htown = 0x29, // castle town + /* 42 */ SceneIndex_f_forest1 = 0x2A, // Whittleton + /* 43 */ SceneIndex_f_snow = 0x2B, // Anouki Village + /* 44 */ SceneIndex_f_water = 0x2C, // Papuchia Village + /* 45 */ SceneIndex_f_flame = 0x2D, // Goron Village + /* 46 */ SceneIndex_f_flame5 = 0x2E, + /* 47 */ SceneIndex_f_first = 0x2F, // Aboda Village + /* 48 */ SceneIndex_f_forest2 = 0x30, // Forest Sanctuary + /* 49 */ SceneIndex_f_snow2 = 0x31, // Snow Sanctuary + /* 50 */ SceneIndex_f_water2 = 0x32, // Water Sanctuary + /* 51 */ SceneIndex_f_flame2 = 0x33, // Fire Sanctuary + /* 52 */ SceneIndex_f_sand = 0x34, // Sand Sanctuary + /* 53 */ SceneIndex_f_tetsuo = 0x35, // Icy Spring + /* 54 */ SceneIndex_f_bridge = 0x36, // Bridge Worker's House + /* 55 */ SceneIndex_f_bridge2 = 0x37, // Trading Post + /* 56 */ SceneIndex_f_forest3 = 0x38, // whittleton forest + /* 57 */ SceneIndex_f_water3 = 0x39, // papuchia south + /* 58 */ SceneIndex_f_ajito = 0x3A, // Pirate Hideout + /* 59 */ SceneIndex_f_ajito2 = 0x3B, // same as above + /* 60 */ SceneIndex_f_flame3 = 0x3C, // Goron Target Range + /* 61 */ SceneIndex_f_flame4 = 0x3D, // Dark Ore Mine + /* 62 */ SceneIndex_f_rabbit = 0x3E, // Rabbit Haven + /* 63 */ SceneIndex_f_kakushi1 = 0x3F, // Snowdrift Station + /* 64 */ SceneIndex_f_kakushi2 = 0x40, // Disorientation Station + /* 65 */ SceneIndex_f_kakushi3 = 0x41, // Ends of the Earth Station + /* 66 */ SceneIndex_f_kakushi4 = 0x42, // train required? + /* 67 */ SceneIndex_f_pirate = 0x43, // Train passenger pirate attack (including Carben) + /* 68 */ SceneIndex_f_passenger = 0x44, // Anjean force gem + /* 69 */ SceneIndex_f_trnnpc = 0x45, // Ferrus encounter + /* 70 */ SceneIndex_tekiya00 = 0x46, // take em all on? + /* 71 */ SceneIndex_tekiya01 = 0x47, // take em all on? + /* 72 */ SceneIndex_tekiya02 = 0x48, // take em all on? + /* 73 */ SceneIndex_tekiya03 = 0x49, // take em all on? + /* 74 */ SceneIndex_tekiya04 = 0x4A, // take em all on? + /* 75 */ SceneIndex_tekiya05 = 0x4B, // take em all on? + /* 76 */ SceneIndex_tekiya06 = 0x4C, // take em all on? + /* 77 */ SceneIndex_tekiya07 = 0x4D, // take em all on? + /* 78 */ SceneIndex_tekiya08 = 0x4E, // take em all on? + /* 79 */ SceneIndex_tekiya09 = 0x4F, // take em all on? + /* 80 */ SceneIndex_demo_train = 0x50, // title screen? + /* 81 */ SceneIndex_e3_train = 0x51, // ? + /* 82 */ SceneIndex_e3_dungeon = 0x52, // ? + /* 83 */ SceneIndex_e3_boss = 0x53, // forest temple boss + /* 84 */ SceneIndex_e3_bossm = 0x54, // fake forest temple room + /* 85 */ SceneIndex_e3_smount = 0x55, // ? + /* 86 */ SceneIndex_test_hiratsu = 0x56, // ? + /* 87 */ SceneIndex_test_sik = 0x57, // ? + /* 88 */ SceneIndex_test_fuj = 0x58, // ? + /* 89 */ SceneIndex_test_nit = 0x59, // ? + /* 90 */ SceneIndex_test_mri = 0x5A, // ? + /* 91 */ SceneIndex_test_morita = 0x5B, // ? + /* 92 */ SceneIndex_test_yamaz = 0x5C, // ? + /* 93 */ SceneIndex_test_sako = 0x5D, // ? + /* 94 */ SceneIndex_test_kita = 0x5E, // ? + /* 95 */ SceneIndex_test_take = 0x5F, // ? + /* 96 */ SceneIndex_test_suzuki = 0x60, // ? + /* 97 */ SceneIndex_test_okane = 0x61, // ? + /* 98 */ SceneIndex_test_dera = 0x62, // ? + /* 99 */ SceneIndex_test_hosaka = 0x63, // ? + /* 100 */ SceneIndex_test_hosaka_f = 0x64, // ? + /* 101 */ SceneIndex_test_kato = 0x65, // ? + /* 102 */ SceneIndex_test_okane_f = 0x66, // ? + /* 103 */ SceneIndex_test_yamaz_f = 0x67, // ? + /* 104 */ SceneIndex_test_sako_f = 0x68, // ? + /* 105 */ SceneIndex_test_take_f = 0x69, // ? + /* 106 */ SceneIndex_test_kiuchi = 0x6A, // ? + /* 107 */ SceneIndex_test_dera_f = 0x6B, // ? + /* 108 */ SceneIndex_test_slope = 0x6C, // ? + /* 109 */ SceneIndex_battle01 = 0x6D, // battle mode? + /* 110 */ SceneIndex_battle02 = 0x6E, // battle mode? + /* 111 */ SceneIndex_battle03 = 0x6F, // battle mode? + /* 112 */ SceneIndex_battle04 = 0x70, // battle mode? + /* 113 */ SceneIndex_battle05 = 0x71, // battle mode? + /* 114 */ SceneIndex_battle06 = 0x72, // battle mode? + /* 115 */ SceneIndex_battle07 = 0x73, // battle mode? + /* 116 */ SceneIndex_battle08 = 0x74, // battle mode? + /* 117 */ SceneIndex_battle09 = 0x75, // battle mode? + /* 118 */ SceneIndex_battle10 = 0x76, // battle mode? + /* 119 */ SceneIndex_battle11 = 0x77, // battle mode? + /* 120 */ SceneIndex_battle12 = 0x78, // battle mode? + /* 121 */ SceneIndex_Max = 0x79 +}; + struct UnkStruct_027e09a4_58_78 { unk32 mUnk_00; unk32 mUnk_04; @@ -22,31 +157,89 @@ struct UnkStruct_func_01ffd400 { /* 1B */ u8 mUnk_1B; }; +struct UnkStruct_SceneChange1 { + /* 00 */ unk32 nextSceneIndex; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk16 mUnk_08; + /* 0A */ unk8 mUnk_0A; + /* 0B */ unk8 mUnk_0B; + /* 0C */ unk8 mUnk_0C; + /* 0D */ unk8 mUnk_0D; + /* 0E */ unk8 mUnk_0E; + /* 0F */ unk8 mUnk_0F; + /* 10 */ unk8 mUnk_10; + /* 11 */ unk8 mUnk_11; + /* 12 */ unk8 mUnk_12; + /* 13 */ unk8 mUnk_13; + /* 14 */ + + UnkStruct_SceneChange1() { + this->nextSceneIndex = SceneIndex_Max; + this->mUnk_04 = 0; + this->mUnk_08 = 0; + this->mUnk_0A = 0xFF; + this->mUnk_0B = 0; + this->mUnk_0C = 0; + this->mUnk_0D = 0; + this->mUnk_0E = 0x2B; + this->mUnk_0F = 0; + this->mUnk_10 = 0; + } +}; + +class UnkStruct_WarpUnk1 : public UnkStruct_0204a060_Base { +public: + /* 00 (base) */ + /* 24 */ STRUCT_PAD(0x24, 0x78); + /* 78 */ UnkStruct_SceneChange1 mUnk_78; + /* 8C */ unk32 mNextSceneIndex; + /* 90 */ STRUCT_PAD(0x90, 0xB4); + /* B4 */ unk32 + mSpawnTransitionType; // the behavior of Link when entering a new scene (walk from the entrance, stay still etc) +}; + class UnkStruct_027e09a4 : public SysObject { public: - /* 00 */ unk32 mUnk_00; + /* 00 */ unk32 mSceneIndex; // the scene index of the current area, this isn't saved when you save the game /* 04 */ unk32 mUnk_04; /* 08 */ unk32 mUnk_08; /* 0C */ u8 mUnk_0C; - /* 0D */ STRUCT_PAD(0x0D, 0x60); + /* 0D */ unk8 mUnk_0D; + /* 0E */ unk8 mUnk_0E; + /* 0F */ unk8 mUnk_0F; + /* 10 */ unk32 *mUnk_10; + /* 14 */ unk32 mSavedSceneIndex; + /* 18 */ unk32 mUnk_18; + /* 1C */ unk8 mUnk_1C; + /* 1D */ unk8 mUnk_1D; + /* 1E */ unk8 mSavedHouseIndex; // this changes when you enter a house, it's not clear if it has another purpose yet + /* 1F */ unk8 mSavedSpawnIndex; // changing this then saving will change your spawn location after opening the save again + // (not the area) + /* 20 */ unk32 mUnk_20; + /* 24 */ STRUCT_PAD(0x24, 0x54); + /* 54 */ void *mUnk_54; // vtable + /* 58 */ UnkStruct_WarpUnk1 *mpWarpUnk1; + /* 5C */ unk32 mUnk_5C; /* 60 */ unk32 mUnk_60; + /* 64 */ unk32 mUnk_64; + /* 68 */ - bool UnkCheck(unk32 value) { - switch (value) { - case 0x03: - case 0x13: - case 0x42: - case 0x5A: - case 0x5B: - case 0x5D: - case 0x63: + bool UnkCheck(unk32 sceneIndex) { + switch (sceneIndex) { + case SceneIndex_test_iwa: + case SceneIndex_d_main: + case SceneIndex_f_kakushi4: + case SceneIndex_test_mri: + case SceneIndex_test_morita: + case SceneIndex_test_sako: + case SceneIndex_test_hosaka: return true; - case 0x5C: - case 0x5E: - case 0x5F: - case 0x60: - case 0x61: - case 0x62: + case SceneIndex_test_yamaz: + case SceneIndex_test_kita: + case SceneIndex_test_take: + case SceneIndex_test_suzuki: + case SceneIndex_test_okane: + case SceneIndex_test_dera: default: break; } diff --git a/include/Unknown/UnkStruct_027e0ce0.hpp b/include/Unknown/UnkStruct_027e0ce0.hpp index 6562173c..a8ee22b5 100644 --- a/include/Unknown/UnkStruct_027e0ce0.hpp +++ b/include/Unknown/UnkStruct_027e0ce0.hpp @@ -37,7 +37,7 @@ public: /* 03 */ unk8 mUnk_03; /* 04 */ unk32 *mUnk_04; /* 08 */ unk32 *mUnk_08; - /* 0c */ unk32 *mUnk_0c; + /* 0c */ unk32 *mUnk_0c; // vtable /* 10 */ unk32 *mUnk_10; /* 14 */ unk32 *mUnk_14; /* 18 */ unk32 *mUnk_18; diff --git a/include/Unknown/UnkStruct_027e0ce8.hpp b/include/Unknown/UnkStruct_027e0ce8.hpp index e953650e..bbc55582 100644 --- a/include/Unknown/UnkStruct_027e0ce8.hpp +++ b/include/Unknown/UnkStruct_027e0ce8.hpp @@ -10,11 +10,11 @@ public: class UnkStruct_027e0ce8 { public: - /* 00 */ unk32 mUnk_00; - /* 04 */ unk32 mUnk_04; + /* 00 */ void *mUnk_00; // pointer to polygon list? + /* 04 */ void *mUnk_04; // pointer to the end of that list /* 08 */ UnkStruct_func_01fff520_ret **mUnk_08; - UnkStruct_func_01fff520_ret **func_01fff520(UnkStruct_ov000_020b34c4 *param1, unk32); + UnkStruct_func_01fff520_ret **func_01fff520(UnkStruct_ov000_020b34c4 *param1, void *); unk32 func_01fff498(UnkStruct_ov000_0208f820_04 param1); }; diff --git a/include/Unknown/UnkStruct_ov000_02067bc4.hpp b/include/Unknown/UnkStruct_ov000_02067bc4.hpp index 08d91619..03abb73f 100644 --- a/include/Unknown/UnkStruct_ov000_02067bc4.hpp +++ b/include/Unknown/UnkStruct_ov000_02067bc4.hpp @@ -103,7 +103,7 @@ public: /* 004 */ GameModeManagerBase_004 *mUnk_004; /* 008 */ UnkStruct_ov000_02067bc4_Sub2 *mUnk_008; /* 00C */ UnkStruct_ov000_020b504c_Sub4 mUnk_00C[7]; - /* 028 */ unk32 mUnk_028; + /* 028 */ unk32 mUnk_028; // pointer to the subsystem that handles drawing the textboxes /* 02C */ unk32 mUnk_02C; /* 030 */ unk32 mUnk_030; /* 034 */ Input mButtons; diff --git a/include/Unknown/UnkStruct_ov000_020b4f84.hpp b/include/Unknown/UnkStruct_ov000_020b4f84.hpp index c197577a..445a8188 100644 --- a/include/Unknown/UnkStruct_ov000_020b4f84.hpp +++ b/include/Unknown/UnkStruct_ov000_020b4f84.hpp @@ -1,32 +1,82 @@ #pragma once #include "System/SysNew.hpp" +#include "nns/font.h" #include "types.h" -class UnkStruct_ov000_020b4f84_00_Base : public SysObject { -public: - /* 00 (vtable) */ - - // data_02043f08 vtable - /* 00 */ virtual ~UnkStruct_ov000_020b4f84_00_Base(); - /* 08 */ virtual void vfunc_08(); - /* 0C */ virtual void vfunc_0C(); - /* 10 */ virtual void vfunc_10(); +enum { + FontIndex_DSZ2_msg = 0, + FontIndex_LC_Font_s = 1, // unused? + FontIndex_DSZ2_endL = 2, + FontIndex_DSZ2_endS = 3, + FontIndex_04 = 4, + FontIndex_LC_Font_s_Name = 5, + FontIndex_Max = 6 }; +class UnkStruct_ov000_020b4f84_00_Base2 { +public: + /* 00 (vtable) */ + /* 04 */ void *mUnk_04; + /* 08 */ union { + void *mpFile; + void *volatile mpFile2; + }; + /* 0C */ size_t mFileSize; + /* 10 */ HeapIndex16 mHeapIndex; + + UnkStruct_ov000_020b4f84_00_Base2() {} + UnkStruct_ov000_020b4f84_00_Base2(void *param1, unk32 param2) : + mUnk_04(param1), + mpFile(NULL), + mFileSize(0), + mHeapIndex(param2) {} + + /* 00 */ virtual ~UnkStruct_ov000_020b4f84_00_Base2() {} + /* 08 */ virtual void *vfunc_08(unk32 param1); // file open? + /* 0C */ virtual void vfunc_0C(void); // allocate? + /* 10 */ virtual size_t vfunc_10(unk32 param1); +}; + +// file handler? doesn't seem to be specifically tied to fonts +class UnkStruct_ov000_020b4f84_00_Base : public UnkStruct_ov000_020b4f84_00_Base2 { +public: + /* 12 */ unk8 mUnk_12; + /* 13 */ unk8 mUnk_13; + /* 14 */ + + UnkStruct_ov000_020b4f84_00_Base(); + UnkStruct_ov000_020b4f84_00_Base(void *param1, unk32 param2, unk32 param3, u8 param4); + + // data_02043f08 vtable + /* 00 */ virtual ~UnkStruct_ov000_020b4f84_00_Base() override; + /* 08 */ virtual void *vfunc_08(unk32 param1) override; + /* 0C */ virtual void vfunc_0C(void) override; + /* 10 */ virtual size_t vfunc_10(unk32 param1) override; + + void func_02015528(); + void func_0201552c(); + unk32 func_02015534(); +}; + +// FontEntry? class UnkStruct_ov000_020b4f84_00 : public UnkStruct_ov000_020b4f84_00_Base { public: /* 00 (base) */ - /* 04 */ unk8 mUnk_04[0x1C]; + /* 14 */ Font_UnkStruct1 mUnk_14; + /* 1C */ unk16 mUnk_1C; + /* 1E */ unk16 mUnk_1E; /* 20 */ UnkStruct_ov000_020b4f84_00(); ~UnkStruct_ov000_020b4f84_00(); + void func_ov000_02066610(const char *fontPath, unk32 param2, unk32 param3); }; +// FontManager? class UnkStruct_ov000_020b4f84 { public: - /* 00 */ UnkStruct_ov000_020b4f84_00 mUnk_00[6]; + /* 00 */ UnkStruct_ov000_020b4f84_00 mUnk_00[FontIndex_Max]; /* C0 */ unk16 mUnk_C0; /* C2 */ unk16 mUnk_C2; @@ -34,4 +84,5 @@ public: void func_ov000_0206667c(unk32 param1, unk32 param2); }; +// gFontManager? extern UnkStruct_ov000_020b4f84 data_ov000_020b4f84; diff --git a/include/Unknown/UnkStruct_ov000_020b50c0.hpp b/include/Unknown/UnkStruct_ov000_020b50c0.hpp index 3be78572..29e6aa5f 100644 --- a/include/Unknown/UnkStruct_ov000_020b50c0.hpp +++ b/include/Unknown/UnkStruct_ov000_020b50c0.hpp @@ -47,12 +47,13 @@ public: void func_ov000_02069d3c(unk32 param1); void func_ov000_02069d7c(void); + void func_ov000_02069f58(void); unk32 func_ov000_0206a5d8(unk32 param1); void func_ov000_0206a6a4(unk32 param1); void func_ov000_0206a758(void); void func_ov000_0206a77c(void); - void func_ov001_020bd8ac(void); + void func_ov001_020bd8ac(void); void func_ov001_020bd8dc(void); UnkStruct_ov018_020c5ac0 *func_ov018_020c5718(void); diff --git a/include/Unknown/UnkStruct_ov000_020b5214.hpp b/include/Unknown/UnkStruct_ov000_020b5214.hpp index 972f6bf3..92ce2abd 100644 --- a/include/Unknown/UnkStruct_ov000_020b5214.hpp +++ b/include/Unknown/UnkStruct_ov000_020b5214.hpp @@ -47,7 +47,7 @@ public: void func_ov000_0206d6b4(unk32 param1, unk32 param2); void func_ov000_0206d83c(unk32 param1); - void func_ov000_0206db44(unk32 param1); + void func_ov000_0206db44(unk32 param1); // play sfx? }; extern UnkStruct_ov000_020b5214 data_ov000_020b5214; diff --git a/include/Unknown/UnkStruct_ov024_020d86b0.hpp b/include/Unknown/UnkStruct_ov024_020d86b0.hpp new file mode 100644 index 00000000..4adf8dcd --- /dev/null +++ b/include/Unknown/UnkStruct_ov024_020d86b0.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_ov024_020d86b0 { +public: + /* 00 */ STRUCT_PAD(0x00, 0x7E); + /* 7E */ s8 mNumPostcards; // current amount of postcards + /* 7F */ s8 mNumPostedCards; // current amount of posted postcards + /* 80 */ STRUCT_PAD(0x80, 0x90); + /* 90 */ +}; + +extern UnkStruct_ov024_020d86b0 *data_ov024_020d86b0; diff --git a/include/global.h b/include/global.h index 7f7fa319..08ee87c0 100644 --- a/include/global.h +++ b/include/global.h @@ -26,9 +26,8 @@ #define SBSS_BEGIN _Pragma("section sbss begin") #define SBSS_END _Pragma("section sbss end") -#define NO_INLINE __attribute__((never_inline)) - #ifdef __MWERKS__ + #define NO_INLINE __attribute__((never_inline)) #define AT_ADDRESS(xyz) : (xyz) #define DECL_SECTION(x) __declspec(section x) #define EXPORT __declspec(export) @@ -40,6 +39,7 @@ #define EXPORT #define WEAK #define ASM + #define NO_INLINE #endif #define STRUCT_PAD(from, to) unsigned char _pad_##from[(to) - (from)] diff --git a/include/nitro/button.h b/include/nitro/button.h index b4cdfeea..4ee74f7d 100644 --- a/include/nitro/button.h +++ b/include/nitro/button.h @@ -12,6 +12,8 @@ #define BTN_DDOWN (1 << 7) // 0x0080 #define BTN_R (1 << 8) // 0x0100 #define BTN_L (1 << 9) // 0x0200 +#define BTN_X (1 << 10) // 0x0400 +#define BTN_Y (1 << 11) // 0x0800 #define CHECK_BUTTON_COMBO(value, btn) ((value) & (btn)) @@ -24,4 +26,5 @@ struct Input { Input(); unk32 func_02013c08(u16 param1); unk32 func_02013b24(unk32 param1); + unk32 func_02013bbc(); }; diff --git a/include/nns/font.h b/include/nns/font.h new file mode 100644 index 00000000..58c6c026 --- /dev/null +++ b/include/nns/font.h @@ -0,0 +1,20 @@ +#ifndef _NNS_FONT_H +#define _NNS_FONT_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct Font_UnkStruct1 { + /* 00 */ void *mpFINF; // pointer to the FINF section of the FNTR file + /* 04 */ void *mUnk_04; // pointer to a function + /* 08 */ +} Font_UnkStruct1; + +void func_020090b0(Font_UnkStruct1 *pFont_UnkStruct1, void *pFontFile); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/nns/text.h b/include/nns/text.h new file mode 100644 index 00000000..40b894f6 --- /dev/null +++ b/include/nns/text.h @@ -0,0 +1,59 @@ +#ifndef _NNS_TEXT_H +#define _NNS_TEXT_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct Text_UnkStruct2; +struct Text_UnkStruct4; + +typedef void (*Text_UnkCallback1)(Text_UnkStruct2 *param1, void *param2, unk32 param3, unk32 param4, unk32 param5, + Text_UnkStruct4 *param6); +typedef void (*Text_UnkCallback2)(Text_UnkStruct2 *param1, unk32 param2); +typedef void (*Text_UnkCallback3)(Text_UnkStruct2 *param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5, + unk32 param6); + +typedef struct Text_UnkStruct5 { + /* 00 */ unk8 unk_00; + /* 01 */ unk8 unk_01; + /* 02 */ unk8 unk_02; +} Text_UnkStruct5; + +typedef struct Text_UnkStruct4 { + /* 00 */ Text_UnkStruct5 *unk_00; + /* 04 */ void *unk_04; +} Text_UnkStruct4; + +typedef struct Text_UnkStruct3 { + /* 00 */ Text_UnkCallback1 func_00; + /* 04 */ Text_UnkCallback2 func_04; + /* 08 */ Text_UnkCallback3 func_08; +} Text_UnkStruct3; + +typedef struct Text_UnkStruct2 { + /* 00 */ void *unk_00; + /* 04 */ unk32 unk_04; + /* 08 */ unk32 unk_08; + /* 0C */ unk8 unk_0C; + /* 0D */ unk8 unk_0D; + /* 0E */ unk8 unk_0E; + /* 0F */ unk8 unk_0F; + /* 10 */ unk32 unk_10; + /* 14 */ Text_UnkStruct3 *unk_14; +} Text_UnkStruct2; + +typedef struct Text_UnkStruct1 { + /* 00 */ Text_UnkStruct2 *unk_00; + /* 04 */ void *unk_04; + /* 08 */ unk32 unk_08; + /* 0C */ unk32 unk_0C; +} Text_UnkStruct1; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/regs.h b/include/regs.h index 8371513e..d2533525 100644 --- a/include/regs.h +++ b/include/regs.h @@ -1,36 +1,145 @@ -#pragma once +#ifndef _NITRO_REG_H +#define _NITRO_REG_H -#define ARM9_IO_BASE 0x04000000 -#define SHARED_WORK_BASE 0x027FF000 +#ifdef __cplusplus +extern "C" { +#endif -#define REG_WORD_PTR(addr) ((u32 *) (addr)) -#define REG_WORD(addr) (*(REG_WORD_PTR(addr))) +#include "types.h" -#define REG_HALFWORD_PTR(addr) ((u16 *) (addr)) -#define REG_HALFWORD(addr) (*(REG_HALFWORD_PTR(addr))) +#define REG_POWER_CNT (*(vu16 *) 0x04000304) +#define REG_IME (*(vu16 *) 0x04000208) -#define REG_IME REG_WORD(*(u32 *) 0x04000208) -#define REG_VCOUNT REG_WORD_PTR(*(u32 *) 0x04000006) -#define RAM_PALETTES REG_WORD_PTR((u32 *) 0x05000000) -#define RAM_OAM REG_WORD_PTR((u32 *) 0x07000000) +#define REG_DISPSTAT (*(vu16 *) 0x4000004) +#define REG_VCOUNT (*(vu16 *) 0x04000006) -#define REG_DISPCNT REG_WORD(ARM9_IO_BASE) -#define REG_DISPCNT_SUB REG_WORD(ARM9_IO_BASE | 0x00001000) +#define REG_VRAM_CNT_ABCD (*(vu32 *) 0x04000240) +#define REG_VRAM_CNT_A (*(vu8 *) 0x04000240) +#define REG_VRAM_CNT_B (*(vu8 *) 0x04000241) +#define REG_VRAM_CNT_C (*(vu8 *) 0x04000242) +#define REG_VRAM_CNT_D (*(vu8 *) 0x04000243) +#define REG_VRAM_CNT_E (*(vu8 *) 0x04000244) +#define REG_VRAM_CNT_F (*(vu8 *) 0x04000245) +#define REG_VRAM_CNT_G (*(vu8 *) 0x04000246) +#define REG_WRAM_CNT (*(vu8 *) 0x04000247) +#define REG_VRAM_CNT_HI (*(vu16 *) 0x04000248) +#define REG_VRAM_CNT_H (*(vu8 *) 0x04000248) +#define REG_VRAM_CNT_I (*(vu8 *) 0x04000249) -#define REG_BLDCNT REG_WORD(ARM9_IO_BASE | 0x00000050) -#define REG_BLDCNT_SUB REG_WORD(ARM9_IO_BASE | 0x00001050) +#define REG_PAD (*(u16 *) 0x027FFFA8) +#define REG_KEYINPUT (*(u16 *) 0x04000130) -#define REG_BG1HOFS_SUB REG_WORD(ARM9_IO_BASE | 0x00001014) -#define REG_BG2HOFS_SUB REG_WORD(ARM9_IO_BASE | 0x00001018) -#define REG_BG3HOFS_SUB REG_WORD(ARM9_IO_BASE | 0x0000101C) +#define REG_FRAME_COUNTER (*(u32 *) 0x027FFC3C) +#define REG_027FFC40 (*(u16 *) 0x027FFC40) +#define REG_FNT_ROM_OFFSET (*(u32 *) 0x027FFE40) +#define REG_FNT_SIZE (*(u32 *) 0x027FFE44) +#define REG_FAT_ROM_OFFSET (*(u32 *) 0x027FFE48) +#define REG_FAT_SIZE (*(u32 *) 0x027FFE4C) -#define REG_BLDALPHA REG_HALFWORD(ARM9_IO_BASE | 0x00000052) +extern u32 _DTCM_BASE; // TODO: Provide address via LCF +#define DTCM_BASE ((u8 *) &_DTCM_BASE) +#define REG_IRQ (*(u32 *) (DTCM_BASE + 0x3FF8)) -#define REG_WININ REG_HALFWORD(ARM9_IO_BASE | 0x00000048) -#define REG_WINOUT REG_HALFWORD(ARM9_IO_BASE | 0x0000004A) -#define REG_WININ_SUB REG_HALFWORD(ARM9_IO_BASE | 0x00001048) -#define REG_WINOUT_SUB REG_HALFWORD(ARM9_IO_BASE | 0x0000104A) +#define _MAIN_REG_BASE 0x04000000 +#define _SUB_REG_BASE 0x04001000 -#define REG_BG3CNT_SUB REG_HALFWORD(ARM9_IO_BASE | 0x0000100E) +#define _REG_DISPCNT(base) (*(u32 *) ((base) | 0x0)) +#define _REG_BG0CNT(base) (*(vu16 *) ((base) | 0x8)) +#define _REG_BG1CNT(base) (*(vu16 *) ((base) | 0xa)) +#define _REG_BG2CNT(base) (*(vu16 *) ((base) | 0xc)) +#define _REG_BG3CNT(base) (*(vu16 *) ((base) | 0xe)) +#define _REG_BG0OFS(base) (*(u32 *) ((base) | 0x10)) +#define _REG_BG1OFS(base) (*(u32 *) ((base) | 0x14)) +#define _REG_BG2OFS(base) (*(u32 *) ((base) | 0x18)) +#define _REG_BG3OFS(base) (*(u32 *) ((base) | 0x1c)) +#define _REG_BG2PA(base) (*(u16 *) ((base) | 0x20)) +#define _REG_BG2PB(base) (*(u16 *) ((base) | 0x22)) +#define _REG_BG2PC(base) (*(u16 *) ((base) | 0x24)) +#define _REG_BG2PD(base) (*(u16 *) ((base) | 0x26)) +#define _REG_BG2X(base) (*(u32 *) ((base) | 0x28)) +#define _REG_BG2Y(base) (*(u32 *) ((base) | 0x2c)) +#define _REG_BG3PA(base) (*(u16 *) ((base) | 0x30)) +#define _REG_BG3PB(base) (*(u16 *) ((base) | 0x32)) +#define _REG_BG3PC(base) (*(u16 *) ((base) | 0x34)) +#define _REG_BG3PD(base) (*(u16 *) ((base) | 0x36)) +#define _REG_BG3X(base) (*(u32 *) ((base) | 0x38)) +#define _REG_BG3Y(base) (*(u32 *) ((base) | 0x3c)) +#define _REG_WININ(base) (*(u16 *) ((base) | 0x48)) +#define _REG_WINOUT(base) (*(u16 *) ((base) | 0x4a)) +#define _REG_MOSAIC(base) (*(u8 *) ((base) | 0x4c)) +#define _REG_OBJMOSAIC(base) (*(u8 *) ((base) | 0x4d)) +#define _REG_BLDCNT(base) (*(u16 *) ((base) | 0x50)) +#define _REG_BLDALPHA(base) (*(u16 *) ((base) | 0x52)) +#define _REG_MASTER_BRIGHT(base) (*(u16 *) ((base) | 0x6c)) -#define SHARED_WORK_C3C REG_WORD(SHARED_WORK_BASE | 0xC3C) +#define REG_DISPCNT _REG_DISPCNT(_MAIN_REG_BASE) +#define REG_BG0CNT _REG_BG0CNT(_MAIN_REG_BASE) +#define REG_BG1CNT _REG_BG1CNT(_MAIN_REG_BASE) +#define REG_BG2CNT _REG_BG2CNT(_MAIN_REG_BASE) +#define REG_BG3CNT _REG_BG3CNT(_MAIN_REG_BASE) +#define REG_BG0OFS _REG_BG0OFS(_MAIN_REG_BASE) +#define REG_BG1OFS _REG_BG1OFS(_MAIN_REG_BASE) +#define REG_BG2OFS _REG_BG2OFS(_MAIN_REG_BASE) +#define REG_BG3OFS _REG_BG3OFS(_MAIN_REG_BASE) +#define REG_BG2PA _REG_BG2PA(_MAIN_REG_BASE) +#define REG_BG2PB _REG_BG2PB(_MAIN_REG_BASE) +#define REG_BG2PC _REG_BG2PC(_MAIN_REG_BASE) +#define REG_BG2PD _REG_BG2PD(_MAIN_REG_BASE) +#define REG_BG2X _REG_BG2X(_MAIN_REG_BASE) +#define REG_BG2Y _REG_BG2Y(_MAIN_REG_BASE) +#define REG_BG3PA _REG_BG3PA(_MAIN_REG_BASE) +#define REG_BG3PB _REG_BG3PB(_MAIN_REG_BASE) +#define REG_BG3PC _REG_BG3PC(_MAIN_REG_BASE) +#define REG_BG3PD _REG_BG3PD(_MAIN_REG_BASE) +#define REG_BG3X _REG_BG3X(_MAIN_REG_BASE) +#define REG_BG3Y _REG_BG3Y(_MAIN_REG_BASE) +#define REG_WININ _REG_WININ(_MAIN_REG_BASE) +#define REG_WINOUT _REG_WINOUT(_MAIN_REG_BASE) +#define REG_MOSAIC _REG_MOSAIC(_MAIN_REG_BASE) +#define REG_OBJMOSAIC _REG_OBJMOSAIC(_MAIN_REG_BASE) +#define REG_BLDCNT _REG_BLDCNT(_MAIN_REG_BASE) +#define REG_BLDALPHA _REG_BLDALPHA(_MAIN_REG_BASE) +#define REG_MASTER_BRIGHT _REG_MASTER_BRIGHT(_MAIN_REG_BASE) + +#define REG_DISPCNT_SUB _REG_DISPCNT(_SUB_REG_BASE) +#define REG_BG0CNT_SUB _REG_BG0CNT(_SUB_REG_BASE) +#define REG_BG1CNT_SUB _REG_BG1CNT(_SUB_REG_BASE) +#define REG_BG2CNT_SUB _REG_BG2CNT(_SUB_REG_BASE) +#define REG_BG3CNT_SUB _REG_BG3CNT(_SUB_REG_BASE) +#define REG_BG0OFS_SUB _REG_BG0OFS(_SUB_REG_BASE) +#define REG_BG1OFS_SUB _REG_BG1OFS(_SUB_REG_BASE) +#define REG_BG2OFS_SUB _REG_BG2OFS(_SUB_REG_BASE) +#define REG_BG3OFS_SUB _REG_BG3OFS(_SUB_REG_BASE) +#define REG_BG2PA_SUB _REG_BG2PA(_SUB_REG_BASE) +#define REG_BG2PB_SUB _REG_BG2PB(_SUB_REG_BASE) +#define REG_BG2PC_SUB _REG_BG2PC(_SUB_REG_BASE) +#define REG_BG2PD_SUB _REG_BG2PD(_SUB_REG_BASE) +#define REG_BG2X_SUB _REG_BG2X(_SUB_REG_BASE) +#define REG_BG2Y_SUB _REG_BG2Y(_SUB_REG_BASE) +#define REG_BG3PA_SUB _REG_BG3PA(_SUB_REG_BASE) +#define REG_BG3PB_SUB _REG_BG3PB(_SUB_REG_BASE) +#define REG_BG3PC_SUB _REG_BG3PC(_SUB_REG_BASE) +#define REG_BG3PD_SUB _REG_BG3PD(_SUB_REG_BASE) +#define REG_BG3X_SUB _REG_BG3X(_SUB_REG_BASE) +#define REG_BG3Y_SUB _REG_BG3Y(_SUB_REG_BASE) +#define REG_WININ_SUB _REG_WININ(_SUB_REG_BASE) +#define REG_WINOUT_SUB _REG_WINOUT(_SUB_REG_BASE) +#define REG_MOSAIC_SUB _REG_MOSAIC(_SUB_REG_BASE) +#define REG_OBJMOSAIC_SUB _REG_OBJMOSAIC(_SUB_REG_BASE) +#define REG_BLDCNT_SUB _REG_BLDCNT(_SUB_REG_BASE) +#define REG_BLDALPHA_SUB _REG_BLDALPHA(_SUB_REG_BASE) +#define REG_MASTER_BRIGHT_SUB _REG_MASTER_BRIGHT(_SUB_REG_BASE) + +#define REG_SWAP_BUFFERS (*(((u32 *) (_MAIN_REG_BASE | 0x00000540)))) + +#define REG_VRAM (*(((u32 *) (0x06800000)))) +#define REG_PALETTE_A (*(((u32 *) (0x05000000)))) +#define REG_PALETTE_B (*(((u32 *) (0x05000400)))) +#define REG_OAM_A (*(((u32 *) (0x07000000)))) +#define REG_OAM_B (*(((u32 *) (0x07000400)))) + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/include/types.h b/include/types.h index 79979146..8b2c46bf 100644 --- a/include/types.h +++ b/include/types.h @@ -16,6 +16,23 @@ typedef char s8; typedef float f32; typedef double f64; +typedef volatile u64 vu64; +typedef volatile u32 vu32; +typedef volatile u16 vu16; +typedef volatile u8 vu8; + +typedef volatile s64 vs64; +typedef volatile s32 vs32; +typedef volatile s16 vs16; +typedef volatile s8 vs8; + +typedef volatile f32 vf32; +typedef volatile f64 vf64; + +typedef u32 BOOL; + +#define ATTRIBUTE_ALIGN(x) __attribute__((aligned(x))) + typedef s8 unk8; typedef s16 unk16; typedef s32 unk32; diff --git a/libs/c/include/stddef.h b/libs/c/include/stddef.h index 50c727af..873592ca 100644 --- a/libs/c/include/stddef.h +++ b/libs/c/include/stddef.h @@ -19,7 +19,13 @@ typedef signed long intptr_t; typedef unsigned long uintptr_t; typedef intptr_t ptrdiff_t; +// gcc want size_t to be an unsigned int, and metrowerks want it to be an unsigned long (oh and vscode also doesn't +// agree....................) +#if defined(__MWERKS__) || defined(__INTELLISENSE__) +typedef unsigned long size_t; +#else typedef unsigned int size_t; +#endif #ifndef __cplusplus typedef int bool; diff --git a/libs/c/include/string.h b/libs/c/include/string.h index 2a4077cc..38620981 100644 --- a/libs/c/include/string.h +++ b/libs/c/include/string.h @@ -1,12 +1,12 @@ #ifndef _C_STRING_H #define _C_STRING_H +#include + #ifdef __cplusplus extern "C" { #endif -typedef unsigned int size_t; - size_t strlen(const char *str); char *strcpy(char *dest, const char *src); char *strncpy(char *dest, const char *src, size_t num); diff --git a/src/001_SceneInit/Actor/ActorManager_001.cpp b/src/001_SceneInit/Actor/ActorManager_001.cpp index 087c978d..a7496228 100644 --- a/src/001_SceneInit/Actor/ActorManager_001.cpp +++ b/src/001_SceneInit/Actor/ActorManager_001.cpp @@ -98,7 +98,7 @@ THUMB void ActorManager::func_ov001_020bb018(UnkStruct_func_ov001_020bb018_param int aligned0A = ALIGN_NEXT(unk_0A, 8); int aligned08 = ALIGN_NEXT(unk_08, 8); - int iVar5 = data_027e09a0->func_ov000_020702a8(data_027e09a4->mUnk_00)->mUnk_20; + int iVar5 = data_027e09a0->func_ov000_020702a8(data_027e09a4->mSceneIndex)->mUnk_20; s32 allocCount; if (data_027e09a4->mUnk_60 == 0) { @@ -124,7 +124,7 @@ THUMB void ActorManager::func_ov001_020bb018(UnkStruct_func_ov001_020bb018_param unk32 iVar5; if (func_01ffd3b0() != 0) { - iVar5 = data_027e09a4->mUnk_00; + iVar5 = data_027e09a4->mSceneIndex; if (iVar5 == 0x3E) { this->mUnk_34 = 0xFFFFECCD; // ~0x1332 @@ -199,7 +199,7 @@ THUMB void ActorManager::func_ov001_020bb018(UnkStruct_func_ov001_020bb018_param } } - if (data_027e09a4->UnkCheck(data_027e09a4->mUnk_00)) { + if (data_027e09a4->UnkCheck(data_027e09a4->mSceneIndex)) { func_ov071_0215e8d4(); } @@ -212,7 +212,7 @@ THUMB void ActorManager::func_ov001_020bb018(UnkStruct_func_ov001_020bb018_param THUMB void ActorManager::func_ov001_020bb414(ActorManager *instance) { func_ov001_020ba59c(&data_0204999c); - if (data_027e09a4->UnkCheck(data_027e09a4->mUnk_00)) { + if (data_027e09a4->UnkCheck(data_027e09a4->mSceneIndex)) { instance->func_ov001_020bb844(); } @@ -244,7 +244,7 @@ THUMB void ActorManager::func_ov001_020bb488() { data_027e0cf4->func_ov021_020f8cdc(); } - if (data_027e09a4->UnkCheck(data_027e09a4->mUnk_00)) { + if (data_027e09a4->UnkCheck(data_027e09a4->mSceneIndex)) { data_027e0d70->func_ov068_0215e8f8(); } } @@ -264,7 +264,7 @@ THUMB void ActorManager::func_ov001_020bb548() { i++; } - unk32 value = data_027e09a4->mUnk_00; + unk32 value = data_027e09a4->mSceneIndex; if (data_027e09a4->UnkCheck(value)) { data_027e0d70->func_ov071_0215e9ac(); diff --git a/src/018_StartUp/GameModeStartUp.cpp b/src/018_StartUp/GameModeStartUp.cpp index 48c4730e..05c3eb66 100644 --- a/src/018_StartUp/GameModeStartUp.cpp +++ b/src/018_StartUp/GameModeStartUp.cpp @@ -1,8 +1,8 @@ #include "Game/GameModeStartUp.hpp" +#include "Game/Game.hpp" #include "System/OverlayManager.hpp" #include "System/SysFault.hpp" #include "System/SysNew.hpp" -#include "Unknown/UnkStruct_02049a2c.hpp" #include "Unknown/UnkStruct_02049b80.hpp" #include "Unknown/UnkStruct_0204a110.hpp" #include "Unknown/UnkStruct_0204e5f8.hpp" @@ -12,7 +12,6 @@ #include "regs.h" extern "C" { -void func_02013768(void *param1); void func_020261f0(unk32 param1, void *param2); void func_0201245c(); void func_02027a28(void *param1, unk32 param2); @@ -51,24 +50,24 @@ ARM void SysFault::func_ov018_020c4840() { this->mUnk_04 = 0; } -ARM UnkStruct_02049a2c::UnkStruct_02049a2c() : - mUnk_00(NULL), - mUnk_04(0), - mUnk_08(0), - mUnk_10(0), - mUnk_14(0), - mUnk_18(0) {} +ARM Game::Game() : + mpCurrentGameMode(NULL), + createCallback(NULL), + mUnk_08(NULL), + mpSaveFile(NULL), + mUnk_14(NULL), + mUnk_18(NULL) {} -ARM void UnkStruct_02049a2c::func_ov018_020c48a4(unk32 param1) { +ARM void Game::func_ov018_020c48a4() { func_020261f0(1, func_02013184); func_020263bc(1); func_020234d4(1); - func_02026ef0(&this->mUnk_20); + func_02026ef0(&this->mUnk_1C.mUnk_04); func_02031e48(func_020131b0); - this->func_02013724(UnkStruct_02049a2c::func_ov018_020c4ba8); + this->TrySetCreateCallback((GameModeCreateCallback) Game::func_ov018_020c4ba8); } -ARM void UnkStruct_02049a2c::func_ov018_020c48f8() { +ARM void Game::func_ov018_020c48f8() { if (gOverlayManager.mLoadedOverlays[OverlaySlot_Second] != OverlayIndex_Second) { data_02049ba0.LoadIfNotLoaded(OverlaySlot_Second, OverlayIndex_Second); data_0204999c.func_ov018_020c4a5c(); @@ -80,12 +79,12 @@ ARM void UnkStruct_02049a2c::func_ov018_020c48f8() { ARM UnkStruct_02049b18::UnkStruct_02049b18() { this->mUnk_58 = 0; this->mUnk_5A = 0; - func_02013768(this); + this->func_02013768(); } ARM void UnkStruct_02011e10::func_ov018_020c4980() { - unk32 iVar1 = func_02027818(0); - unk32 iVar2 = func_0202780c(0); + unk32 arenaLo = func_02027818(0); + unk32 arenaHi = func_0202780c(0); for (int i = 0; i < HeapIndex_Max; i++) { this->mUnk_00[i] = NULL; @@ -95,9 +94,9 @@ ARM void UnkStruct_02011e10::func_ov018_020c4980() { this->mUnk_24[i] = 0; } - this->mUnk_00[HeapIndex_0] = func_020012e0(iVar1, iVar2 - iVar1, 2); - unk32 length = func_0202d624(NULL, 0); - void *ptr = ::operator new(length, 0); + this->mUnk_00[HeapIndex_Main] = func_020012e0(arenaLo, arenaHi - arenaLo, 2); + unk32 length = func_0202d624(NULL, 0); + void *ptr = ::operator new(length, 0); func_0202d624(ptr, length); ptr = ::operator new(0xBE000, 0); void *uVar3 = func_02001fd4(ptr, 0xBE000); @@ -170,7 +169,7 @@ ARM UnkStruct_0204e64c::UnkStruct_0204e64c() { this->mUnk_16 = 0; } -ARM GameModeStartUp *UnkStruct_02049a2c::func_ov018_020c4ba8() { +ARM GameModeStartUp *Game::func_ov018_020c4ba8() { static GameModeStartUp data_ov018_020c5bd4; return &data_ov018_020c5bd4; } @@ -202,10 +201,10 @@ ARM GameModeStartUp::GameModeStartUp() { ARM void GameModeStartUp::vfunc_0C() { if (this->mUnk_04.mUnk_0D == this->mUnk_04.mUnk_10) { if (this->mUnk_28 == 0) { - this->mUnk_2C = SHARED_WORK_C3C; - data_02049a2c.func_ov018_020c48f8(); - } else if (!this->mUnk_2A && (SHARED_WORK_C3C - this->mUnk_2C) >= 0x3C) { - this->mUnk_2A = data_0204a060.func_020183d4(false, UnkStruct_0204a060::func_020183b8, 1); + this->mUnk_2C = REG_FRAME_COUNTER; + gGame.func_ov018_020c48f8(); + } else if (!this->mUnk_2A && (REG_FRAME_COUNTER - this->mUnk_2C) >= 0x3C) { + this->mUnk_2A = data_0204a060.func_020183d4(false, (GameModeCreateCallback) UnkStruct_0204a060::func_020183b8, 1); if (data_ov018_020c5bc0 != 0) { data_0204a060.func_0201bb84(1, 0, 1); diff --git a/src/018_StartUp/StartUpInitializers.cpp b/src/018_StartUp/StartUpInitializers.cpp index b3669a6a..15b5280d 100644 --- a/src/018_StartUp/StartUpInitializers.cpp +++ b/src/018_StartUp/StartUpInitializers.cpp @@ -56,7 +56,7 @@ ARM void func_ov018_020c4e8c(void) { } THUMB UnkStruct_0204a060::UnkStruct_0204a060() { - this->callback = NULL; + this->createCallback = NULL; } ARM UnkStruct_ov000_020b4eec::UnkStruct_ov000_020b4eec() { @@ -69,10 +69,10 @@ ARM UnkStruct_ov000_020b4f84::UnkStruct_ov000_020b4f84() { int *arg0 = 0; this->mUnk_C0 = (int) arg0 + 1; - this->func_ov000_0206667c(0, 0); + this->func_ov000_0206667c(FontIndex_DSZ2_msg, 0); if (func_02014fe0() == 0) { - this->func_ov000_0206667c(1, 0); + this->func_ov000_0206667c(FontIndex_LC_Font_s, 0); } } @@ -84,7 +84,7 @@ ARM UnkStruct_ov000_020b504c::UnkStruct_ov000_020b504c() : Fill32(0, this->mUnk_05C, sizeof(this->mUnk_05C)); this->mUnk_06F = 0; - this->mUnk_000 = new(HeapIndex_0) UnkStruct_ov000_020b504c_Sub3(0x21); + this->mUnk_000 = new(HeapIndex_Main) UnkStruct_ov000_020b504c_Sub3(0x21); Fill32(0, this->mUnk_00C, sizeof(this->mUnk_00C)); @@ -176,7 +176,7 @@ ARM UnkStruct_0204a110::UnkStruct_0204a110() : mUnk_000(0), mUnk_008(-1), mUnk_00C(-1), - mUnk_DEC(0), + mUnk_DEC(NULL), mUnk_DF2(-1), mUnk_DF3(-1), mUnk_DFC(0), @@ -275,15 +275,15 @@ ARM UnkStruct_0204a110_Sub7::UnkStruct_0204a110_Sub7() { this->mUnk_00 = 0; this->mUnk_01 = 0; this->mUnk_0C = data_027e0120; - this->mUnk_04 = new(HeapIndex_0) UnkSystem2_UnkSubSystem9(); - this->mUnk_08 = new(HeapIndex_0) UnkStruct_0204a110_Sub7_08(); + this->mUnk_04 = new(HeapIndex_Main) UnkSystem2_UnkSubSystem9(); + this->mUnk_08 = new(HeapIndex_Main) UnkStruct_0204a110_Sub7_08(); } ARM UnkStruct_0204a110_Sub8::UnkStruct_0204a110_Sub8() { this->mUnk_00 = 1; this->mUnk_04 = 0; this->mUnk_08 = 0; - this->mUnk_0C = new(HeapIndex_0) UnkSystem2_UnkSubSystem9(); + this->mUnk_0C = new(HeapIndex_Main) UnkSystem2_UnkSubSystem9(); } ARM UnkStruct_02049f04::UnkStruct_02049f04() { diff --git a/src/019_MainSelect/FileSelectMain.cpp b/src/019_MainSelect/FileSelectMain.cpp index 9774f909..51d28ff9 100644 --- a/src/019_MainSelect/FileSelectMain.cpp +++ b/src/019_MainSelect/FileSelectMain.cpp @@ -1,7 +1,7 @@ #include "FileSelect/FileSelect.hpp" +#include "Game/Game.hpp" #include "Game/GameModeFileSelect.hpp" #include "Save/SaveManager.hpp" -#include "Unknown/UnkStruct_02049a2c.hpp" #include "Unknown/UnkStruct_0204a088.hpp" #include "Unknown/UnkStruct_0204a110.hpp" #include "Unknown/UnkStruct_0204af1c.hpp" @@ -1131,7 +1131,7 @@ ARM void FileSelectMain::vfunc_08(Input *pButtons, TouchControl *pTouchControl) } ARM void FileSelectMain::func_ov019_020c8290() { - if ((data_02049a2c.GetUnk00_FileSelect()->mUnk_04.mUnk_08 & 0xFFFF) == 0xFFFF) { + if ((gGame.GetGameModeFileSelect()->mUnk_04.mUnk_08 & 0xFFFF) == 0xFFFF) { this->SetState(FileSelectState_Init); } } @@ -1342,7 +1342,7 @@ ARM void FileSelectMain::func_ov019_020c9c70() { break; case BTN_ID_FILE_SELECT_CONTACT_MODE: this->SetState(FileSelectState_ChooseModeToContactMode); - data_02049a2c.GetUnk00_FileSelect()->LoadContactMode(this->mSaveSlotIndex); + gGame.GetGameModeFileSelect()->LoadContactMode(this->mSaveSlotIndex); data_ov000_020b5214.func_ov000_0206db44(0x1C); break; case BTN_ID_FILE_SELECT_OPTIONS: @@ -1405,10 +1405,10 @@ ARM void FileSelectMain::func_ov019_020c9e08() { this->mUnk_155C.func_ov000_020609c4(); if (this->mExitMode == FileSelectExitMode_AdventureMode && this->mUnk_00BC.mUnk_0C) { - data_02049a2c.GetUnk00_FileSelect()->LoadAdventureMode(this->mSaveSlotIndex); + gGame.GetGameModeFileSelect()->LoadAdventureMode(this->mSaveSlotIndex); this->mExitMode = FileSelectExitMode_Unk_3; } else if (this->mExitMode == FileSelectExitMode_BattleMode && this->mUnk_00BC.mUnk_0C) { - data_02049a2c.GetUnk00_FileSelect()->LoadBattleMode(this->mSaveSlotIndex); + gGame.GetGameModeFileSelect()->LoadBattleMode(this->mSaveSlotIndex); this->mExitMode = FileSelectExitMode_Unk_3; } } diff --git a/src/019_MainSelect/FileSelectSubScreen.cpp b/src/019_MainSelect/FileSelectSubScreen.cpp index f600cd96..ed1bb2a1 100644 --- a/src/019_MainSelect/FileSelectSubScreen.cpp +++ b/src/019_MainSelect/FileSelectSubScreen.cpp @@ -75,9 +75,9 @@ ARM void FileSelectSubScreen::vfunc_08(Input *pButtons, TouchControl *pTouchCont this->mUnk_0024 = this->mUnk_0020; this->mUnk_0020 += 0x800; - REG_BG1HOFS_SUB = ROUND_Q20(this->mUnk_0020) & 0x1FF; - REG_BG2HOFS_SUB = (ROUND_Q20(this->mUnk_0020) + 0x100) & 0x1FF; - REG_BG3HOFS_SUB = (ROUND_Q20(this->mUnk_0020) / 2) & 0x1FF; + REG_BG1OFS_SUB = ROUND_Q20(this->mUnk_0020) & 0x1FF; + REG_BG2OFS_SUB = (ROUND_Q20(this->mUnk_0020) + 0x100) & 0x1FF; + REG_BG3OFS_SUB = (ROUND_Q20(this->mUnk_0020) / 2) & 0x1FF; if (!(ROUND_Q20(this->mUnk_0020) % 256) && (ROUND_Q20(this->mUnk_0024) % 256)) { switch (this->mUnk_001C) { diff --git a/src/019_MainSelect/GameModeFileSelect.cpp b/src/019_MainSelect/GameModeFileSelect.cpp index abe2bf3f..bd38437f 100644 --- a/src/019_MainSelect/GameModeFileSelect.cpp +++ b/src/019_MainSelect/GameModeFileSelect.cpp @@ -1,7 +1,7 @@ #include "Game/GameModeFileSelect.hpp" #include "FileSelect/FileSelect.hpp" +#include "Game/Game.hpp" #include "Save/AdventureFlags.hpp" -#include "Unknown/UnkStruct_02049a2c.hpp" #include "Unknown/UnkStruct_02049bd4.hpp" #include "Unknown/UnkStruct_0204a060.hpp" #include "Unknown/UnkStruct_0204a088.hpp" @@ -58,15 +58,15 @@ ARM void GameModeFileSelect::vfunc_20() {} ARM void GameModeFileSelect::LoadAdventureMode(u16 saveSlotIndex) { this->mSaveSlotIndex = saveSlotIndex; data_0204a060.func_020183d4(gSaveManager.GetSaveSlot(saveSlotIndex)->GetAdventureFlag(AdventureFlag_WatchedIntroCS), - func_ov001_020be054, 1); + (GameModeCreateCallback) func_ov001_020be054, 1); } ARM void GameModeFileSelect::LoadBattleMode(u16 saveSlotIndex) { this->mSaveSlotIndex = saveSlotIndex; - data_0204a060.func_020183d4(true, func_ov001_020be0ec, 1); + data_0204a060.func_020183d4(true, (GameModeCreateCallback) func_ov001_020be0ec, 1); } ARM void GameModeFileSelect::LoadContactMode(u16 saveSlotIndex) { this->mSaveSlotIndex = saveSlotIndex; - data_0204a060.func_020183d4(true, func_ov001_020be0d8, 1); + data_0204a060.func_020183d4(true, (GameModeCreateCallback) func_ov001_020be0d8, 1); } diff --git a/src/025_Title/GameModeTitleScreen.cpp b/src/025_Title/GameModeTitleScreen.cpp index 2db5c827..44193fb9 100644 --- a/src/025_Title/GameModeTitleScreen.cpp +++ b/src/025_Title/GameModeTitleScreen.cpp @@ -1,6 +1,6 @@ #include "Game/GameModeTitleScreen.hpp" +#include "Game/Game.hpp" #include "TitleScreen/TitleScreen.hpp" -#include "Unknown/UnkStruct_02049a2c.hpp" #include "Unknown/UnkStruct_0204a088.hpp" #include "Unknown/UnkStruct_0204a110.hpp" #include "Unknown/UnkStruct_027e09a4.hpp" @@ -22,7 +22,7 @@ UnkStruct_ov000_020a782c *func_ov000_020a782c(unk32 param1); ARM GameModeTitleScreen::GameModeTitleScreen() { func_0201659c(); - data_02049a2c.func_02013370(2); + gGame.func_02013370(2); data_0204a110.func_ov001_020bd514(0, TitleScreenManager::Create, 0, 1); func_ov001_020b6520(2); } diff --git a/src/025_Title/TitleScreen.cpp b/src/025_Title/TitleScreen.cpp index b9885aa5..65e3ade5 100644 --- a/src/025_Title/TitleScreen.cpp +++ b/src/025_Title/TitleScreen.cpp @@ -1,4 +1,5 @@ #include "TitleScreen/TitleScreen.hpp" +#include "Game/GameMode.hpp" #include "Unknown/UnkStruct_02049be0.hpp" #include "Unknown/UnkStruct_0204a060.hpp" #include "Unknown/UnkStruct_0204aeac.hpp" @@ -277,7 +278,7 @@ void TitleScreen::func_ov025_020c55e4(Input *pButtons, TouchControl *pTouchContr return; } - data_0204a060.func_020183d4(true, UnkStruct_0204a060::func_02018424, 1); + data_0204a060.func_020183d4(true, (GameModeCreateCallback) UnkStruct_0204a060::func_02018424, 1); } void TitleScreen::vfunc_14(unk8 *param1) { diff --git a/src/025_Title/TitleScreenManager.cpp b/src/025_Title/TitleScreenManager.cpp index 728386c2..17cdd818 100644 --- a/src/025_Title/TitleScreenManager.cpp +++ b/src/025_Title/TitleScreenManager.cpp @@ -17,7 +17,7 @@ ARM void TitleScreenManager::vfunc_14() { this->mUnk_004.func_0201c00c(0x24, 1); TitleScreen *pTitleScreen = new(HeapIndex_1) TitleScreen(); - this->mpTitleScreen = pTitleScreen; + this->mpGameMode = (GameModeBase *) pTitleScreen; this->mUnk_104.mList.func_020166cc(pTitleScreen->GetNode()); pTitleScreen->vfunc_18(); } @@ -25,8 +25,8 @@ ARM void TitleScreenManager::vfunc_14() { ARM void TitleScreenManager::vfunc_18() { this->mUnk_004.func_ov001_020bd784(); - delete this->mpTitleScreen; - this->mpTitleScreen = NULL; + delete this->mpGameMode; + this->mpGameMode = NULL; } ARM void TitleScreenManager::vfunc_24() { @@ -45,14 +45,14 @@ ARM void TitleScreenManager::vfunc_2C(unk8 *param1) { this->func_02018830(param1); } -ARM void TitleScreenManager::vfunc_38() {} +ARM void TitleScreenManager::vfunc_38(unk32 param1, unk32 param2, unk32 param3, unk32 param4) {} ARM void TitleScreenManager::func_ov025_020c4c20() { - this->mpTitleScreen->func_ov025_020c4e6c(); + ((TitleScreen *) this->mpGameMode)->func_ov025_020c4e6c(); } ARM void TitleScreenManager::func_ov025_020c4c30() { - this->mpTitleScreen->func_ov025_020c4e90(); + ((TitleScreen *) this->mpGameMode)->func_ov025_020c4e90(); } TitleScreenManager::~TitleScreenManager() {} diff --git a/src/110_PlayerGet/PlayerGet.cpp b/src/110_PlayerGet/PlayerGet.cpp index 13ea3e27..0c73e204 100644 --- a/src/110_PlayerGet/PlayerGet.cpp +++ b/src/110_PlayerGet/PlayerGet.cpp @@ -660,7 +660,7 @@ ARM void PlayerGet::vfunc_10(unk32 param1) { break; case ItemId_RecruitUniform2: case ItemId_EngineerUniform: - if (data_027e09a4->mUnk_00 == 0x2F) { + if (data_027e09a4->mSceneIndex == SceneIndex_f_first) { this->mUnk_28->func_ov058_02152a24(); } break; diff --git a/src/Main/Game/Game.cpp b/src/Main/Game/Game.cpp new file mode 100644 index 00000000..cbe3acb5 --- /dev/null +++ b/src/Main/Game/Game.cpp @@ -0,0 +1,172 @@ +#include "Game/Game.hpp" +#include "System/OverlayManager.hpp" +#include "System/Random.hpp" +#include "Unknown/UnkStruct_02049b74.hpp" +#include "Unknown/UnkStruct_02049bd4.hpp" +#include "Unknown/UnkStruct_0204a110.hpp" +#include "Unknown/UnkStruct_0204e64c.hpp" +#include "Unknown/UnkStruct_027e0208.hpp" +#include "Unknown/UnkStruct_ov000_020b50c0.hpp" +#include "regs.h" +#include "versions.h" + +extern "C" void func_020196fc(); +extern "C" unk32 func_02031e58(); +extern "C" void func_02031e68(); +extern "C" void func_01ff8d38(); +extern "C" void func_020132c8(); +extern "C" void func_020132dc(); +extern "C" void func_02013354(); +extern "C" void func_0201328c(); +extern "C" int func_020280ec(); +extern "C" void func_02028100(int enabled); +extern Mat3p data_027e02c4; + +struct SomeSaveFileStruct { + /* 00 */ SaveFile *mpSaveFiles[MAX_SAVE_SLOTS]; + + SomeSaveFileStruct(unk32 param1); + ~SomeSaveFileStruct(); +}; + +ARM void Game::func_02013370(unk32 param1) { + data_0204a110.func_02018c78(param1); + data_ov000_020b50c0.mUnk_9C = param1; +} + +ARM void Game::Run() { + this->func_ov018_020c48a4(); + + do { + // initialization of the next game mode + if (this->createCallback != NULL) { + data_0204999c.func_02013014(); + + { + SomeSaveFileStruct local_28(0x1300); + this->mpSaveFile = local_28.mpSaveFiles[0]; + + if (this->mpCurrentGameMode != NULL) { + delete this->mpCurrentGameMode; + } + + func_020196fc(); + data_02049b18.func_02013768(); + this->mFrameCounter = REG_FRAME_COUNTER; + + this->mpCurrentGameMode = this->createCallback(); + this->createCallback = NULL; + this->mpCurrentGameMode->vfunc_08(); + this->mpSaveFile = NULL; + } + + data_0204999c.func_02013070(); + } + + // update of the current game mode + if (this->mpCurrentGameMode != NULL) { + if (this->mUnk_08 != NULL) { + this->mUnk_08(); + this->mUnk_08 = NULL; + } + + if (func_02031e58() != 0) { + func_02031e68(); + } + + data_02049bd4.func_02014d98(); + data_0204a110.func_02019300(data_0204a110.mUnk_DF8); + + gRandom.UpdateRandomValue(); + + unk32 uVar4 = data_0204a110.func_02019300(data_0204a110.mUnk_DF8); + data_02049b74.func_02013a44(data_0204a110.mUnk_004); + + if (this->mUnk_14 == NULL) { + data_02049b18.func_02013840(data_0204a110.mUnk_004, uVar4); + } else { + data_02049b18.func_020138f4(uVar4); + } + + data_0204e64c.func_020201c4(1); + data_0204a110.func_02019350(); + + if (data_0204a110.func_02019514() == 0 && data_0204e64c.mUnk_00.mUnk_0B == 0) { + this->mpCurrentGameMode->vfunc_0C(); + } + + data_027e0208.mUnk_0EC = 0x1000; + data_027e0208.mUnk_0F0 = 0x1000; + data_027e0208.mUnk_0F4 = 0x1000; + + data_027e0208.mUnk_0E0 = 0; + data_027e0208.mUnk_0E4 = 0; + data_027e0208.mUnk_0E8 = 0; + + Mat3p_InitIdentity(&data_027e02c4); + data_027e0208.mUnk_0FC = 0; + func_01ff8d38(); + this->mpCurrentGameMode->vfunc_18(); + data_0204a110.func_020194dc(); + + if (data_0204a110.func_02019514() == 0) { + this->mpCurrentGameMode->vfunc_10(); + } + +#if IS_JP + func_01ff8d38(); +#endif + + if (data_0204e64c.mUnk_00.mUnk_0B == 0) { + data_0204a110.func_02019408(); + } + + this->mpCurrentGameMode->vfunc_1C(); + func_01ff8d38(); + data_0204a110.func_02019454(); + this->mpCurrentGameMode->vfunc_20(); + + if (gOverlayManager.mLoadedOverlays[OverlaySlot_Second] == OverlayIndex_Second) { + this->func_ov000_020576d0(); + this->func_ov000_0205770c(); + } + } + + if (this->mFrameCounter + data_0204a110.mUnk_004 - (s32) REG_FRAME_COUNTER > 1) { + func_0201328c(); + } + + while (this->mFrameCounter + data_0204a110.mUnk_004 - (s32) REG_FRAME_COUNTER > 1) { + func_020132c8(); + } + + { + int enabled = func_020280ec(); + this->mUnk_1C.func_02013e18(func_020132dc, 0); + REG_SWAP_BUFFERS = 3; + func_02028100(enabled); + } + + func_020132c8(); + + if (this->mUnk_18 != NULL) { + while (this->mUnk_18() != 0) { + while (this->mUnk_1C.func_02013e18(func_02013354, 0) == 0) { + } + + func_020132c8(); + } + } + + this->mFrameCounter = REG_FRAME_COUNTER; + } while (true); +} + +bool Game::TrySetCreateCallback(GameModeCreateCallback createCallback) { + if (this->createCallback == NULL) { + this->createCallback = createCallback; + return true; + } + + return false; +} diff --git a/src/Main/Game/GameModeManagerBase.cpp b/src/Main/Game/GameModeManagerBase.cpp index dd57c19a..fa22f8fc 100644 --- a/src/Main/Game/GameModeManagerBase.cpp +++ b/src/Main/Game/GameModeManagerBase.cpp @@ -76,7 +76,7 @@ ARM void GameModeManagerBase::vfunc_30(unk32 param1) { } } -ARM void GameModeManagerBase::vfunc_34() {} +ARM void GameModeManagerBase::vfunc_34(unk32 param1, unk32 param2) {} struct UnkStruct3 { unk32 mUnk_00; diff --git a/src/Main/Main.cpp b/src/Main/Main.cpp index a314a20c..9815e758 100644 --- a/src/Main/Main.cpp +++ b/src/Main/Main.cpp @@ -1,4 +1,4 @@ -#include "Unknown/UnkStruct_02049a2c.hpp" +#include "Game/Game.hpp" #include "global.h" #include "regs.h" #include "types.h" @@ -6,7 +6,6 @@ void func_0203b920(void); void func_02011da0(void); void CallStaticInitializers(void); -void main(void); void func_02000a78(void); void *func_0200093c(unk32, u32 *, unk32); @@ -14,6 +13,8 @@ void func_020009fc(void); void func_02000950(unk32 *); void func_01ffbd70(void); +void main(); + #define UNK_027FFF9C (*(u32 *) 0x027FFF9C) typedef void (*UnkStruct_027e0000_Callback)(void); @@ -44,7 +45,7 @@ struct RomBuildInfo { extern RomBuildInfo BuildInfo; // non-matching -ARM void Entry(void) { +extern "C" ARM void Entry(void) { unk32 *puVar1; unk32 *puVar2; u32 uVar3; @@ -57,8 +58,8 @@ ARM void Entry(void) { func_02000a78(); func_0200093c(0, (u32 *) data_027e0000, 0x4000); - func_0200093c(0, RAM_PALETTES, 0x400); - func_0200093c(0x200, RAM_OAM, 0x400); + func_0200093c(0, ®_PALETTE_A, 0x400); + func_0200093c(0x200, ®_OAM_A, 0x400); func_02000950(BuildInfo.mUnk_14); func_020009fc(); puVar4 = BuildInfo.mUnk_10; @@ -98,9 +99,9 @@ ARM void *func_0200093c(unk32 param1, u32 *param2, unk32 param3) { return param2; } -void AutoloadCallback(void) {} +extern "C" void AutoloadCallback(void) {} -void func_02000b60(void) {} +extern "C" void func_02000b60(void) {} RomBuildInfo BuildInfo = { .mUnk_00 = data_0204cde0, @@ -116,6 +117,6 @@ RomBuildInfo BuildInfo = { "[SDK+MEI:libASR_V1.0.5-CW2.0-SDK4.0]", }; -void main(void) { - data_02049a2c.Run(); +void main() { + gGame.Run(); } diff --git a/src/Main/System/SysFault.cpp b/src/Main/System/SysFault.cpp new file mode 100644 index 00000000..d3d09901 --- /dev/null +++ b/src/Main/System/SysFault.cpp @@ -0,0 +1,207 @@ +#include "System/SysFault.hpp" +#include "System/OverlayManager.hpp" +#include "Unknown/Common.hpp" +#include "Unknown/UnkMemFuncs.h" +#include "Unknown/UnkStruct_02049b18.hpp" +#include "Unknown/UnkStruct_ov000_02067bc4.hpp" +#include "Unknown/UnkStruct_ov000_020b4f84.hpp" +#include "Unknown/UnkStruct_ov000_020b50c0.hpp" +#include "global.h" +#include "regs.h" + +extern "C" void func_0202851c(); +extern "C" void func_020131ec(); +extern "C" void func_02013214(); +extern "C" void func_ov020_020c86d8(void *); +extern "C" void func_02014d38(void *, int); +extern "C" void func_020196fc(); +extern "C" void func_02023770(int); +extern "C" void func_02023fb0(int); +extern "C" void func_02023f8c(int); +extern "C" void GX_SetGraphicsMode(int, int, int); +extern "C" void GXS_SetGraphicsMode(int); +extern "C" unk32 func_ov000_02068504(int); +extern "C" unk32 func_020147a8(); +extern "C" void *func_020244f8(); +extern "C" void func_0201b278(bool, bool); +extern "C" void func_0201b180(bool, bool); +extern "C" void func_02025050(void *, int, int); +extern "C" void SetBrightColor(void *, int); +extern int data_02049bd4; + +extern u16 data_0203e0c4[]; +extern int data_0203e0be; +extern int data_ov020_20e8580; + +struct struct_aStack_2e0 { + int mUnk_00; + struct_aStack_2e0(void *, int); +}; + +struct struct_aStack_2d8 { + struct_aStack_2d8(); + void func_ov000_020685cc(); + void func_ov000_0206869c(); + void func_ov000_020686a4(int); + void func_ov000_02068fec(); + void func_ov000_0206878c(); + void func_ov000_020628e4(int, int, int, int, int, int, int, int, int); + + u8 pad[0x20]; + Font_UnkStruct1 *mUnk_20; +}; + +THUMB void SysFault::func_020127f0(unk32 param1) { + bool doDraw = false; + + func_02013214(); + func_02014d38(&data_02049bd4, 0); + func_02014d38(&data_02049bd4, 1); + func_02014d38(&data_02049bd4, 3); + func_020196fc(); + func_02023770(2); + func_02023fb0(4); + func_02023f8c(0x100); + GX_SetGraphicsMode(1, 0, 0); + GXS_SetGraphicsMode(0); + + REG_DISPCNT = ((REG_DISPCNT & ~0x1F00) | 0x100); + REG_DISPCNT_SUB = (REG_DISPCNT_SUB & ~0x1F00) | 0x100; + + REG_BG0CNT = (REG_BG0CNT & 0x43) | 4; + REG_BG0CNT_SUB = (REG_BG0CNT_SUB & 0x43) | 4; + + if (this->mUnk_05 < 0xFF) { + this->mUnk_05 = 0xFF; + + switch (param1) { + case 0: + case 1: + func_0201b180(true, true); + // fallthrough + case 2: + case 3: + this->mUnk_04 = 0; + break; + default: + break; + } + } + + while (!doDraw) { + func_020131ec(); + + bool sequenceComplete = false; + + switch (param1) { + case 0: + case 1: + data_02049b18.mButtons.func_02013b24(data_02049b18.mButtons.func_02013bbc()); + u16 expected = data_0203e0c4[this->mUnk_04]; + + if (data_02049b18.mButtons.press & expected) { + if ((data_02049b18.mButtons.press & (~(expected & 0x3FF))) == 0) { + this->mUnk_04++; + + if (this->mUnk_04 > 10) { + doDraw = true; + break; + } + } else { + this->mUnk_04 = 0; + } + } else { + if (data_02049b18.mButtons.press & 0x3FF) { + this->mUnk_04 = 0; + } + } + + doDraw = false; + break; + case 2: + case 3: + default: + doDraw = true; + break; + } + } + + while (true) { + func_020131ec(); + + switch (param1) { + case 0: + case 1: + func_0201b278(true, true); + break; + case 2: { + // "data could not be read" error + struct_aStack_2d8 aStack_2d8; + + func_02025050(&data_0203e0be, func_ov000_02068504(0) << 1, 6); + Fill32(0, func_020244f8(), 0x800); + aStack_2d8.mUnk_20 = &data_ov000_020b4f84.mUnk_00[FontIndex_DSZ2_msg].mUnk_14; + aStack_2d8.func_ov000_020628e4(0, 0, 256, 192, 0, 0, 1, 0, 0); + + { + UnkSystem2_UnkSubSystem5_Base_10 aStack_278; + aStack_2d8.func_ov000_0206869c(); + struct_aStack_2e0 uStack_2e0(data_ov000_020b504c.mUnk_000, 0x25); + aStack_2d8.func_ov000_020686a4(uStack_2e0.mUnk_00); + aStack_2d8.func_ov000_02068fec(); + aStack_2d8.func_ov000_0206878c(); + } + + break; + } + case 3: { + // "data could not be written" error + struct_aStack_2d8 aStack_2d8; + + func_02025050(&data_0203e0be, func_ov000_02068504(0) << 1, 6); + Fill32(0, func_020244f8(), 0x800); + aStack_2d8.mUnk_20 = &data_ov000_020b4f84.mUnk_00[FontIndex_DSZ2_msg].mUnk_14; + aStack_2d8.func_ov000_020628e4(0, 0, 256, 192, 0, 0, 1, 0, 0); + + { + UnkSystem2_UnkSubSystem5_Base_10 aStack_278; + aStack_2d8.func_ov000_0206869c(); + struct_aStack_2e0 uStack_2e0(data_ov000_020b504c.mUnk_000, 0x26); + aStack_2d8.func_ov000_020686a4(uStack_2e0.mUnk_00); + aStack_2d8.func_ov000_02068fec(); + aStack_2d8.func_ov000_0206878c(); + } + + break; + } + default: + break; + } + + SetBrightColor((void *) ®_MASTER_BRIGHT, 0); + SetBrightColor((void *) ®_MASTER_BRIGHT_SUB, 0); + + if (gOverlayManager.mLoadedOverlays[OverlaySlot_4] == OverlayIndex_WirelessCommon) { + func_ov020_020c86d8(&data_ov020_20e8580); + } + + if (func_020147a8() != 0) { + data_ov000_020b50c0.func_ov000_02069f58(); + } + + int waitTimer = 0; + while (waitTimer < 0x7FFFFFFF) { + int limit = (waitTimer < 2) ? 0x3C : 0x7FFFFFFF; + + if (waitTimer >= limit) { + break; + } + + func_020131ec(); + waitTimer++; + } + + this->mUnk_05 = 0; + func_0202851c(); + } +} diff --git a/src/Main/System/SysNew.cpp b/src/Main/System/SysNew.cpp index 071c84d2..a33c1e13 100644 --- a/src/Main/System/SysNew.cpp +++ b/src/Main/System/SysNew.cpp @@ -1,35 +1,33 @@ #include "System/SysNew.hpp" -#include "System/SysFault.hpp" #include "global.h" extern "C" { -void *func_02001654(void); +void *func_02001654(void *); void *func_020145b0(UnkId *, s32); -void *func_020010c0(void); -void *func_02001308(void); +void *func_020010c0(void *); +void *func_02001308(void *); UnkId *func_02001488(void); -UnkId *func_02014704(void); +UnkId *func_02014704(); UnkId *func_020011c8(UnkId *, void *); UnkId *func_02014630(UnkId *, void *); UnkId *func_02001684(UnkId *, void *); -void func_020011f4(void *); +unk32 func_020011f4(void *); } extern char *data_0204372c[]; // non-matching ARM void *SysNew(UnkStruct_02011e10_Sub1 *param1, s32 length, s32 param3) { void *newPtr = NULL; - void *ret; switch (param1->mId) { case UnkId_EXPH: - newPtr = func_020010c0(); + newPtr = func_020010c0(param1); break; case UnkId_FRMH: - newPtr = func_02001308(); + newPtr = func_02001308(param1); break; case UnkId_UNTH: - newPtr = func_02001654(); + newPtr = func_02001654(param1); break; case UnkId_UNSH: newPtr = func_020145b0(func_02014704(), length); @@ -71,24 +69,22 @@ ARM void *func_02011f30(s32 length) { return func_02011f10(length); } -// non-matching ARM void *operator new(unsigned long length, u32 id, u32 idLength) { void *pvVar1; - char *uVar2; - u16 line; - char *uVar4; UnkStruct_02011e10_Sub1 *pUVar5; pUVar5 = data_0204999c.mUnk_00[id]; pvVar1 = SysNew(pUVar5, length, idLength); if (pvVar1 == NULL) { - if (id == 1) { - func_020011f4(pUVar5); - data_02049984.func_020125a4(__FILE__, 183, "%sノメモリガタリマセン.\nサイズ=%d\nノコリ =%d", data_0204372c[id], - length); - } else if (id == 0) { - data_02049984.func_020125a4(__FILE__, 187, "%sノメモリガタリマセン.\nサイズ=%d", data_0204372c[id], length); + switch (id) { + case HeapIndex_1: + GAME_ASSERT(pvVar1 != NULL, 183, "%sノメモリガタリマセン.\nサイズ=%d\nノコリ =%d", data_0204372c[id], length, + func_020011f4(pUVar5)); + break; + default: + GAME_ASSERT(pvVar1 != NULL, 187, "%sノメモリガタリマセン.\nサイズ=%d", data_0204372c[id], length); + break; } } @@ -102,7 +98,3 @@ ARM void operator delete(void *ptr) { ARM void SysObject::operator delete[](void *ptr) { SysDelete(ptr); } - -void dummy() { - ::operator new(1, 1); -} diff --git a/src/Main/UnkStruct_0204a060.cpp b/src/Main/UnkStruct_0204a060.cpp index 33e19c9f..f519d09c 100644 --- a/src/Main/UnkStruct_0204a060.cpp +++ b/src/Main/UnkStruct_0204a060.cpp @@ -1,13 +1,15 @@ #include "Unknown/UnkStruct_0204a060.hpp" +#include "Game/Game.hpp" +#include "Game/GameMode.hpp" +#include "Game/GameModeFileSelect.hpp" #include "System/OverlayManager.hpp" -#include "Unknown/UnkStruct_02049a2c.hpp" #include "Unknown/UnkStruct_0204e5f8.hpp" #include "Unknown/UnkStruct_ov000_020b51b8.hpp" extern "C" void func_ov001_020be078(); THUMB bool UnkStruct_0204a060::vfunc_0C(void) { - return data_02049a2c.func_02013724(this->callback); + return gGame.TrySetCreateCallback(this->createCallback); } THUMB void UnkStruct_0204a060::func_020183b8(void) { @@ -15,16 +17,16 @@ THUMB void UnkStruct_0204a060::func_020183b8(void) { } THUMB void UnkStruct_0204a060::func_020183c0(void) { - this->func_020183d4(false, func_ov001_020be078, 1); + this->func_020183d4(false, (GameModeCreateCallback) func_ov001_020be078, 1); } -THUMB bool UnkStruct_0204a060::func_020183d4(bool param1, void *param2, unk32 param3) { +THUMB bool UnkStruct_0204a060::func_020183d4(bool param1, GameModeCreateCallback createFunc, unk32 param3) { if (this->mUnk_0C) { return false; } - this->mUnk_14 = param1 ? 0x00010000 : 0xFFFF0000; - this->callback = param2; + this->mUnk_14 = param1 ? 0x00010000 : 0xFFFF0000; + this->createCallback = createFunc; this->func_0201bb84(0x20, 4, 0x20); if (param3 != 0) { @@ -35,8 +37,9 @@ THUMB bool UnkStruct_0204a060::func_020183d4(bool param1, void *param2, unk32 pa return true; } -THUMB void UnkStruct_0204a060::func_02018424(void) { - data_02049ba0.func_020148d0(0x18)->func_ov018_020c4840(); +THUMB GameModeFileSelect *UnkStruct_0204a060::func_02018424(void) { + data_02049ba0.func_020148d0(OverlayIndex_MainSelect); + return GameModeFileSelect::Create(); } ARM UnkStruct_0204a060::~UnkStruct_0204a060() {} diff --git a/src/Main/UnkStruct_ov000_020b4f84_00_Base.cpp b/src/Main/UnkStruct_ov000_020b4f84_00_Base.cpp new file mode 100644 index 00000000..3b857db5 --- /dev/null +++ b/src/Main/UnkStruct_ov000_020b4f84_00_Base.cpp @@ -0,0 +1,61 @@ +#include "System/SysNew.hpp" +#include "Unknown/UnkStruct_ov000_020b4f84.hpp" + +extern "C" void *func_02012ec8(unk32, unk16, void *, size_t *, unk32, u8); +extern "C" size_t func_020010e0(UnkStruct_02011e10_Sub1 *heapID, void *pFile, unk32 param3); + +THUMB void UnkStruct_ov000_020b4f84_00_Base::func_02015528() {} + +THUMB void UnkStruct_ov000_020b4f84_00_Base::func_0201552c() { + this->mpFile = NULL; + this->mFileSize = 0; +} + +THUMB unk32 UnkStruct_ov000_020b4f84_00_Base::func_02015534() { + return this->mFileSize; +} + +THUMB UnkStruct_ov000_020b4f84_00_Base::UnkStruct_ov000_020b4f84_00_Base() { + this->mUnk_04 = NULL; + this->mpFile = NULL; + this->mFileSize = 0; + this->mHeapIndex = HeapIndex_1; + this->mUnk_12 = 0; +} + +THUMB UnkStruct_ov000_020b4f84_00_Base::UnkStruct_ov000_020b4f84_00_Base(void *param1, unk32 param2, unk32 param3, u8 param4) : + UnkStruct_ov000_020b4f84_00_Base2(param1, param3) { + this->mUnk_12 = param4; +} + +THUMB UnkStruct_ov000_020b4f84_00_Base::~UnkStruct_ov000_020b4f84_00_Base() { + this->vfunc_0C(); + this->func_02015528(); +} + +THUMB void *UnkStruct_ov000_020b4f84_00_Base::vfunc_08(unk32 param1) { + if (this->mpFile == NULL) { + this->mpFile = func_02012ec8(0, this->mHeapIndex, this->mUnk_04, &this->mFileSize, param1, this->mUnk_12); + } + + return this->mpFile; +} + +THUMB void UnkStruct_ov000_020b4f84_00_Base::vfunc_0C(void) { + if (this->mpFile2 != NULL) { + delete this->mpFile; + this->func_0201552c(); + } +} + +THUMB size_t UnkStruct_ov000_020b4f84_00_Base::vfunc_10(unk32 param1) { + size_t prevFileSize = this->mFileSize; + + if (this->mpFile2 != NULL && param1 < this->mFileSize) { + if (data_0204999c.mUnk_00[this->mHeapIndex]->mId == UnkId_EXPH) { + this->mFileSize = func_020010e0(data_0204999c.mUnk_00[this->mHeapIndex], this->mpFile, param1); + } + } + + return prevFileSize; +} diff --git a/src/Main/func_020196fc.cpp b/src/Main/func_020196fc.cpp new file mode 100644 index 00000000..911e770e --- /dev/null +++ b/src/Main/func_020196fc.cpp @@ -0,0 +1,77 @@ +#include "Unknown/UnkMemFuncs.h" +#include "regs.h" +#include "types.h" + +extern "C" void GX_SetGraphicsMode(int, int, int); +extern "C" void GXS_SetGraphicsMode(int); +extern "C" void func_02024934(void *, void *, int, int, int, int); +extern "C" void func_020242a0(); +extern "C" void func_020241f4(); +extern "C" void func_0202421c(); +extern "C" void func_0202428c(); +extern "C" void func_02024208(); +extern "C" void func_02024240(); +extern "C" void func_020242b4(); +extern "C" void func_020242dc(); +extern "C" void func_020242c8(); +extern "C" void func_02024304(); +extern "C" void func_02024264(); +extern "C" void func_02024278(); +extern "C" void func_02023f8c(int); +extern "C" void func_020243ec(); +extern int data_027e0120; + +extern "C" void func_020196fc() { + GX_SetGraphicsMode(1, 0, 0); + GXS_SetGraphicsMode(0); + REG_BG0OFS = 0; + REG_BG1OFS = 0; + REG_BG2OFS = 0; + REG_BG3OFS = 0; + REG_BG0OFS_SUB = 0; + REG_BG1OFS_SUB = 0; + REG_BG2OFS_SUB = 0; + REG_BG3OFS_SUB = 0; + func_02024934(®_BG2PA, &data_027e0120, 0x80, 0x60, 0, 0); + func_02024934(®_BG3PA, &data_027e0120, 0x80, 0x60, 0, 0); + func_02024934(®_BG2PA_SUB, &data_027e0120, 0x80, 0x60, 0, 0); + func_02024934(®_BG3PA_SUB, &data_027e0120, 0x80, 0x60, 0, 0); + REG_BG0CNT = REG_BG0CNT & 0xffbf; + REG_BG1CNT = REG_BG1CNT & 0xffbf; + REG_BG2CNT = REG_BG2CNT & 0xffbf; + REG_BG3CNT = REG_BG3CNT & 0xffbf; + REG_BG0CNT_SUB = REG_BG0CNT_SUB & 0xffbf; + REG_BG1CNT_SUB = REG_BG1CNT_SUB & 0xffbf; + REG_BG2CNT_SUB = REG_BG2CNT_SUB & 0xffbf; + REG_BG3CNT_SUB = REG_BG3CNT_SUB & 0xffbf; + REG_MOSAIC = 0; + REG_MOSAIC_SUB = 0; + REG_OBJMOSAIC = 0; + REG_OBJMOSAIC_SUB = 0; + REG_BLDCNT = 0; + REG_BLDCNT_SUB = 0; + REG_DISPCNT &= 0xffff1fff; + REG_DISPCNT_SUB &= 0xffff1fff; + func_020242a0(); + func_020241f4(); + func_0202421c(); + func_0202428c(); + func_02024208(); + func_02024240(); + func_020242b4(); + func_020242dc(); + func_020242c8(); + func_02024304(); + func_02024264(); + func_02024278(); + func_02023f8c(0x1ff); + + Fill256(0, ®_VRAM, 0xa4000); + func_020243ec(); + + Fill256(0xc0, ®_OAM_A, 0x400); + Fill256(0, ®_PALETTE_A, 0x400); + + Fill256(0xc0, ®_OAM_B, 0x400); + Fill256(0, ®_PALETTE_B, 0x400); +} diff --git a/tools/configure.py b/tools/configure.py index 2a899483..ced2a772 100755 --- a/tools/configure.py +++ b/tools/configure.py @@ -125,14 +125,18 @@ config.libs = [ [ Object("Main/Main.cpp"), Object("Main/System/SysNew.cpp"), + Object("Main/System/SysFault.cpp"), + Object("Main/Game/Game.cpp"), Object("Main/Player/TouchControl.cpp"), Object("Main/System/OverlayManager.cpp"), + Object("Main/UnkStruct_ov000_020b4f84_00_Base.cpp"), Object("Main/System/Random.cpp"), Object("Main/Game/GameModeLinkListNode.cpp"), Object("Main/func_02017ea4.cpp"), Object("Main/Game/GameModeBase.cpp"), Object("Main/UnkStruct_0204a060.cpp"), Object("Main/Game/GameModeManagerBase.cpp"), + Object("Main/func_020196fc.cpp"), ] ), GameLib(