From 0421d36979794e73793e40a92c55365e69f6944e Mon Sep 17 00:00:00 2001 From: Yanis <35189056+Yanis002@users.noreply.github.com> Date: Sun, 13 Jul 2025 15:11:50 +0200 Subject: [PATCH] Decompile overlay 8 (95%) (#115) * started overlay 8 * progress * progress * progress * more headers * progress * more progress * symbols * fix splits + new headers * more progress * func_ov008_02112ee0 & func_ov008_02112f28 * document fish in save item manager and unrelated things because precommit is mad * SaveItemManager ctor * progress? * fix build issues * split files to match data * format * format * cleanup and match vfunc_08 * add reloc for overlay 0 * fix vtable symbol * improve non-matching functions --------- Co-authored-by: Aetias <144526980+AetiasHax@users.noreply.github.com> --- config/eur/arm9/overlays/ov000/symbols.txt | 21 +- config/eur/arm9/overlays/ov008/delinks.txt | 7 + config/eur/arm9/overlays/ov008/relocs.txt | 9 +- config/eur/arm9/overlays/ov008/symbols.txt | 80 +-- config/eur/arm9/symbols.txt | 12 +- config/usa/arm9/overlays/ov000/symbols.txt | 20 +- config/usa/arm9/overlays/ov008/delinks.txt | 7 + config/usa/arm9/overlays/ov008/relocs.txt | 7 +- config/usa/arm9/overlays/ov008/symbols.txt | 80 +-- config/usa/arm9/symbols.txt | 10 +- include/GameStart/GameStart.hpp | 26 + include/Item/Item.hpp | 11 + include/Item/ItemManager.hpp | 14 +- include/Message/MsgProc.hpp | 8 +- include/Player/TouchControl.hpp | 7 +- include/Save/SaveItemManager.hpp | 195 +++++++- include/System/SysNew.hpp | 1 + include/Unknown/UnkStruct_020e9360.hpp | 15 + include/Unknown/UnkStruct_020e9370.hpp | 20 + include/Unknown/UnkStruct_020ec7dc.hpp | 26 + include/Unknown/UnkStruct_020ee0a0.hpp | 30 ++ include/Unknown/UnkStruct_020ee698.hpp | 34 ++ include/Unknown/UnkStruct_020ee6f8.hpp | 33 ++ include/Unknown/UnkStruct_020ee734.hpp | 27 +- include/Unknown/UnkStruct_020ee820.hpp | 38 ++ include/Unknown/UnkStruct_020eec60.hpp | 17 + include/Unknown/UnkStruct_020eec68.hpp | 37 ++ include/Unknown/UnkStruct_020eec9c.hpp | 44 ++ include/Unknown/UnkStruct_020eed2c.hpp | 14 + include/Unknown/UnkStruct_027e0d54.hpp | 30 ++ include/Unknown/UnkStruct_027e0dbc.hpp | 26 + include/Unknown/UnkStruct_027e0f88.hpp | 44 ++ include/Unknown/UnkStruct_func_0201f704.hpp | 10 + src/00_Core/Item/ItemManager.cpp | 110 ++-- src/00_Core/Save/SaveItemManager.cpp | 2 +- src/08_GameStart/GameStart.cpp | 127 +++++ src/08_GameStart/Init.cpp | 529 ++++++++++++++++++++ src/Main/Game/Game.cpp | 9 +- src/Main/Message/func_0203c72c.cpp | 8 +- src/Main/System/OverlayManager.cpp | 12 +- 40 files changed, 1523 insertions(+), 234 deletions(-) create mode 100644 include/GameStart/GameStart.hpp create mode 100644 include/Unknown/UnkStruct_020e9360.hpp create mode 100644 include/Unknown/UnkStruct_020e9370.hpp create mode 100644 include/Unknown/UnkStruct_020ec7dc.hpp create mode 100644 include/Unknown/UnkStruct_020ee0a0.hpp create mode 100644 include/Unknown/UnkStruct_020ee698.hpp create mode 100644 include/Unknown/UnkStruct_020ee6f8.hpp create mode 100644 include/Unknown/UnkStruct_020ee820.hpp create mode 100644 include/Unknown/UnkStruct_020eec60.hpp create mode 100644 include/Unknown/UnkStruct_020eec68.hpp create mode 100644 include/Unknown/UnkStruct_020eec9c.hpp create mode 100644 include/Unknown/UnkStruct_020eed2c.hpp create mode 100644 include/Unknown/UnkStruct_027e0d54.hpp create mode 100644 include/Unknown/UnkStruct_027e0dbc.hpp create mode 100644 include/Unknown/UnkStruct_027e0f88.hpp create mode 100644 include/Unknown/UnkStruct_func_0201f704.hpp create mode 100644 src/08_GameStart/GameStart.cpp create mode 100644 src/08_GameStart/Init.cpp diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 97208bfb..74fa30f5 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -152,7 +152,7 @@ func_ov000_0207a2d8 kind:function(arm,size=0x10) addr:0x0207a2d8 func_ov000_0207a2e8 kind:function(thumb,size=0x14) addr:0x0207a2e8 func_ov000_0207a2fc kind:function(arm,size=0x4) addr:0x0207a2fc func_ov000_0207a300 kind:function(thumb,size=0x8c) addr:0x0207a300 -_ZN15SaveItemManagerC1Ev kind:function(thumb,size=0x56) addr:0x0207a38c +_ZN13SaveInventory4InitEv kind:function(thumb,size=0x56) addr:0x0207a38c func_ov000_0207a3e4 kind:function(thumb,size=0x32) addr:0x0207a3e4 func_ov000_0207a418 kind:function(thumb,size=0xbc) addr:0x0207a418 func_ov000_0207a4d4 kind:function(thumb,size=0x1a) addr:0x0207a4d4 @@ -242,7 +242,7 @@ func_ov000_0207c0ac kind:function(thumb,size=0x20) addr:0x0207c0ac func_ov000_0207c0cc kind:function(thumb,size=0x24) addr:0x0207c0cc func_ov000_0207c0f0 kind:function(thumb,size=0x28) addr:0x0207c0f0 func_ov000_0207c118 kind:function(thumb,size=0x58) addr:0x0207c118 -func_ov000_0207c170 kind:function(thumb,size=0x1e) addr:0x0207c170 +_ZN18UnkStruct_020ec7dc19func_ov000_0207c170Ev kind:function(thumb,size=0x1e) addr:0x0207c170 func_ov000_0207c190 kind:function(thumb,size=0x1e) addr:0x0207c190 func_ov000_0207c1b0 kind:function(arm,size=0x48) addr:0x0207c1b0 func_ov000_0207c1f8 kind:function(arm,size=0x68) addr:0x0207c1f8 @@ -1644,10 +1644,10 @@ func_ov000_020a19c8 kind:function(arm,size=0x34) addr:0x020a19c8 func_ov000_020a19fc kind:function(arm,size=0x10) addr:0x020a19fc func_ov000_020a1a0c kind:function(arm,size=0x18) addr:0x020a1a0c func_ov000_020a1a24 kind:function(arm,size=0x18) addr:0x020a1a24 -func_ov000_020a1a3c kind:function(arm,size=0x80) addr:0x020a1a3c +_ZN18UnkStruct_027e0f8819func_ov000_020a1a3cEv kind:function(arm,size=0x80) addr:0x020a1a3c func_ov000_020a1abc kind:function(arm,size=0x68) addr:0x020a1abc func_ov000_020a1b24 kind:function(arm,size=0x30) addr:0x020a1b24 -func_ov000_020a1b54 kind:function(arm,size=0x114) addr:0x020a1b54 +_ZN21UnkStruct_027e0f88_0419func_ov000_020a1b54Eii kind:function(arm,size=0x114) addr:0x020a1b54 func_ov000_020a1c68 kind:function(arm,size=0x8) addr:0x020a1c68 func_ov000_020a1c70 kind:function(arm,size=0x1c) addr:0x020a1c70 func_ov000_020a1c8c kind:function(arm,size=0xc) addr:0x020a1c8c @@ -2127,10 +2127,10 @@ _ZNK11ItemManager16GetShipPartCountEjj kind:function(thumb,size=0xe) addr:0x020a _ZN11ItemManager16SetShipPartCountEjjc kind:function(thumb,size=0x18) addr:0x020ad900 _ZNK11ItemManager16GetTreasureCountEj kind:function(thumb,size=0x8) addr:0x020ad918 _ZN11ItemManager16SetTreasureCountEjc kind:function(thumb,size=0xe) addr:0x020ad920 -_ZNK11ItemManager10GetUnk_098Ej kind:function(thumb,size=0x8) addr:0x020ad930 -_ZNK11ItemManager10GetUnk_09eEj kind:function(thumb,size=0xa) addr:0x020ad938 -_ZNK11ItemManager18GetUnk_09e_DividedEj kind:function(thumb,size=0x28) addr:0x020ad944 -_ZN11ItemManager10SetUnk_09eEjt kind:function(thumb,size=0x34) addr:0x020ad96c +_ZNK11ItemManager21GetCollectedFishCountEj kind:function(thumb,size=0x8) addr:0x020ad930 +_ZNK11ItemManager11GetFishSizeEj kind:function(thumb,size=0xa) addr:0x020ad938 +_ZNK11ItemManager19GetFishSize_DividedEj kind:function(thumb,size=0x28) addr:0x020ad944 +_ZN11ItemManager11SetFishSizeEjt kind:function(thumb,size=0x34) addr:0x020ad96c _ZNK11ItemManager10GetMaxAmmoEi kind:function(thumb,size=0x40) addr:0x020ad9a0 _ZNK11ItemManager19GetMaxShipPartCountEv kind:function(thumb,size=0x4) addr:0x020ad9e0 _ZNK11ItemManager19GetMaxTreasureCountEv kind:function(thumb,size=0x4) addr:0x020ad9e4 @@ -3572,8 +3572,8 @@ func_ov000_020d680c kind:function(arm,size=0x38) addr:0x020d680c func_ov000_020d6844 kind:function(arm,size=0x24) addr:0x020d6844 func_ov000_020d6868 kind:function(arm,size=0x130) addr:0x020d6868 func_ov000_020d6998 kind:function(arm,size=0x3c) addr:0x020d6998 -func_ov000_020d69d4 kind:function(arm,size=0x10) addr:0x020d69d4 -func_ov000_020d69e4 kind:function(arm,size=0x44) addr:0x020d69e4 +_ZN18UnkStruct_020ee82019func_ov000_020d69d4Ei kind:function(arm,size=0x10) addr:0x020d69d4 +_ZN18UnkStruct_020ee82019func_ov000_020d69e4Ev kind:function(arm,size=0x44) addr:0x020d69e4 func_ov000_020d6a28 kind:function(arm,size=0x30) addr:0x020d6a28 func_ov000_020d6a58 kind:function(arm,size=0x34) addr:0x020d6a58 func_ov000_020d6a8c kind:function(arm,size=0x18) addr:0x020d6a8c @@ -5980,7 +5980,6 @@ data_ov000_020ee6f8 kind:bss addr:0x020ee6f8 data_ov000_020ee734 kind:bss addr:0x020ee734 data_ov000_020ee800 kind:bss addr:0x020ee800 data_ov000_020ee820 kind:bss addr:0x020ee820 -data_ov000_020ee824 kind:bss addr:0x020ee824 data_ov000_020ee860 kind:bss addr:0x020ee860 data_ov000_020eec60 kind:bss addr:0x020eec60 data_ov000_020eec64 kind:bss addr:0x020eec64 diff --git a/config/eur/arm9/overlays/ov008/delinks.txt b/config/eur/arm9/overlays/ov008/delinks.txt index 0abc0500..ff222d76 100644 --- a/config/eur/arm9/overlays/ov008/delinks.txt +++ b/config/eur/arm9/overlays/ov008/delinks.txt @@ -3,3 +3,10 @@ .data start:0x02113b00 end:0x02113b80 kind:data align:32 .bss start:0x02113b80 end:0x02113b80 kind:bss align:32 +src/08_GameStart/GameStart.cpp: + .text start:0x02112c20 end:0x02112ee0 + .data start:0x02113b00 end:0x02113b60 + +src/08_GameStart/Init.cpp: + .text start:0x02112ee0 end:0x02113af4 + .data start:0x02113b60 end:0x02113b80 diff --git a/config/eur/arm9/overlays/ov008/relocs.txt b/config/eur/arm9/overlays/ov008/relocs.txt index 8c613f22..52e36976 100644 --- a/config/eur/arm9/overlays/ov008/relocs.txt +++ b/config/eur/arm9/overlays/ov008/relocs.txt @@ -11,7 +11,7 @@ from:0x02112d18 kind:arm_call_thumb to:0x02027ab4 module:main from:0x02112d44 kind:arm_call_thumb to:0x02027ab4 module:main from:0x02112d4c kind:arm_call_thumb to:0x02016fcc module:main from:0x02112d5c kind:load to:0x0205762c add:8 module:main -from:0x02112d60 kind:load to:0x02113b44 module:overlay(8) +from:0x02112d60 kind:load to:0x02113b3c add:8 module:overlay(8) from:0x02112d64 kind:load to:0x02113b00 module:overlay(8) from:0x02112d68 kind:load to:0x02113b04 module:overlay(8) from:0x02112d6c kind:load to:0x020691a0 module:main @@ -21,13 +21,13 @@ from:0x02112d88 kind:arm_call to:0x02004ba8 module:main from:0x02112d8c kind:arm_call to:0x02004b94 module:main from:0x02112d90 kind:arm_call to:0x02004c68 module:main from:0x02112d98 kind:arm_call_thumb to:0x0202c0b8 module:main -from:0x02112da4 kind:load to:0x02113b44 module:overlay(8) +from:0x02112da4 kind:load to:0x02113b3c add:8 module:overlay(8) from:0x02112db8 kind:arm_call to:0x02004ba8 module:main from:0x02112dbc kind:arm_call to:0x02004b94 module:main from:0x02112dc0 kind:arm_call to:0x02004c68 module:main from:0x02112dc8 kind:arm_call_thumb to:0x0202c0b8 module:main from:0x02112dd0 kind:arm_call to:0x0202ea0c module:main -from:0x02112ddc kind:load to:0x02113b44 module:overlay(8) +from:0x02112ddc kind:load to:0x02113b3c add:8 module:overlay(8) from:0x02112e40 kind:arm_call to:0x02112e88 module:overlay(8) from:0x02112e68 kind:arm_call_thumb to:0x0202cec8 module:main from:0x02112e7c kind:load to:0x027e0618 module:dtcm @@ -38,6 +38,7 @@ from:0x02112eac kind:arm_call to:0x02112f28 module:overlay(8) from:0x02112eb8 kind:arm_call to:0x02113678 module:overlay(8) from:0x02112ec0 kind:arm_call_thumb to:0x0207a654 module:overlay(0) from:0x02112ec8 kind:load to:0x027e0900 module:dtcm +from:0x02112ecc kind:overlay_id to:0 module:none from:0x02112ed0 kind:load to:0x020ee734 module:overlay(0) from:0x02112ed4 kind:load to:0x027e0d54 module:dtcm from:0x02112ed8 kind:load to:0x027e0ce0 module:dtcm @@ -99,7 +100,7 @@ from:0x0211344c kind:arm_call to:0x020d69d4 module:overlay(0) from:0x0211349c kind:arm_call to:0x020156b4 module:main from:0x021134a8 kind:arm_call to:0x02015718 module:main from:0x021134b0 kind:load to:0x020ee820 module:overlay(0) -from:0x021134b4 kind:load to:0x020ee824 module:overlay(0) +from:0x021134b4 kind:load to:0x020ee820 add:4 module:overlay(0) from:0x02113508 kind:arm_call to:0x0201f704 module:main from:0x02113618 kind:arm_call to:0x0202e9dc module:main from:0x02113638 kind:arm_call to:0x021136c0 module:overlay(8) diff --git a/config/eur/arm9/overlays/ov008/symbols.txt b/config/eur/arm9/overlays/ov008/symbols.txt index f2618df0..b9064696 100644 --- a/config/eur/arm9/overlays/ov008/symbols.txt +++ b/config/eur/arm9/overlays/ov008/symbols.txt @@ -1,45 +1,45 @@ -func_ov008_02112c20 kind:function(arm,size=0x34) addr:0x02112c20 -func_ov008_02112c54 kind:function(arm,size=0x124) addr:0x02112c54 -func_ov008_02112d78 kind:function(arm,size=0x30) addr:0x02112d78 -func_ov008_02112da8 kind:function(arm,size=0x38) addr:0x02112da8 -func_ov008_02112de0 kind:function(arm,size=0xa4) addr:0x02112de0 -func_ov008_02112e84 kind:function(arm,size=0x4) addr:0x02112e84 -func_ov008_02112e88 kind:function(arm,size=0x58) addr:0x02112e88 -func_ov008_02112ee0 kind:function(arm,size=0x48) addr:0x02112ee0 -func_ov008_02112f28 kind:function(arm,size=0x158) addr:0x02112f28 -func_ov008_02113080 kind:function(arm,size=0x50) addr:0x02113080 -func_ov008_021130d0 kind:function(arm,size=0x80) addr:0x021130d0 -func_ov008_02113150 kind:function(arm,size=0x5c) addr:0x02113150 -func_ov008_021131ac kind:function(arm,size=0xd8) addr:0x021131ac -func_ov008_02113284 kind:function(arm,size=0x48) addr:0x02113284 -func_ov008_021132cc kind:function(arm,size=0x48) addr:0x021132cc -func_ov008_02113314 kind:function(arm,size=0x68) addr:0x02113314 -func_ov008_0211337c kind:function(arm,size=0x40) addr:0x0211337c -func_ov008_021133bc kind:function(arm,size=0x34) addr:0x021133bc -func_ov008_021133f0 kind:function(arm,size=0x70) addr:0x021133f0 -func_ov008_02113460 kind:function(arm,size=0x14) addr:0x02113460 -func_ov008_02113474 kind:function(arm,size=0x44) addr:0x02113474 -func_ov008_021134b8 kind:function(arm,size=0x64) addr:0x021134b8 -func_ov008_0211351c kind:function(arm,size=0x9c) addr:0x0211351c -func_ov008_021135b8 kind:function(arm,size=0x4) addr:0x021135b8 -func_ov008_021135bc kind:function(arm,size=0xbc) addr:0x021135bc -func_ov008_02113678 kind:function(arm,size=0x48) addr:0x02113678 -func_ov008_021136c0 kind:function(arm,size=0x2c) addr:0x021136c0 -func_ov008_021136ec kind:function(arm,size=0x10) addr:0x021136ec -func_ov008_021136fc kind:function(arm,size=0x34) addr:0x021136fc -func_ov008_02113730 kind:function(arm,size=0x238) addr:0x02113730 -func_ov008_02113968 kind:function(arm,size=0x4) addr:0x02113968 -func_ov008_0211396c kind:function(arm,size=0x18) addr:0x0211396c -func_ov008_02113984 kind:function(arm,size=0x4) addr:0x02113984 -func_ov008_02113988 kind:function(arm,size=0x50) addr:0x02113988 -func_ov008_021139d8 kind:function(arm,size=0x4) addr:0x021139d8 -func_ov008_021139dc kind:function(arm,size=0x30) addr:0x021139dc -func_ov008_02113a0c kind:function(arm,size=0x34) addr:0x02113a0c -func_ov008_02113a40 kind:function(arm,size=0x68) addr:0x02113a40 -func_ov008_02113aa8 kind:function(arm,size=0x4c) addr:0x02113aa8 +_ZN9GameStart6CreateEi kind:function(arm,size=0x34) addr:0x02112c20 +_ZN9GameStartC2Ei kind:function(arm,size=0x124) addr:0x02112c54 +_ZN9GameStartD1Ev kind:function(arm,size=0x30) addr:0x02112d78 +_ZN9GameStartD0Ev kind:function(arm,size=0x38) addr:0x02112da8 +_ZN9GameStart8vfunc_08Eb kind:function(arm,size=0xa4) addr:0x02112de0 +_ZN9GameStart8vfunc_10EPt kind:function(arm,size=0x4) addr:0x02112e84 +_ZN9GameStart19func_ov008_02112e88Ev kind:function(arm,size=0x58) addr:0x02112e88 +_ZN18UnkStruct_027e0d54C1Ev kind:function(arm,size=0x48) addr:0x02112ee0 +_ZN18UnkStruct_027e0d5419func_ov008_02112f28Ev kind:function(arm,size=0x158) addr:0x02112f28 +_ZN12TouchControlC2Ev kind:function(arm,size=0x50) addr:0x02113080 +_ZN18UnkStruct_020ee698C2Ev kind:function(arm,size=0x80) addr:0x021130d0 +_ZN18UnkStruct_020ee734C2Ev kind:function(arm,size=0x5c) addr:0x02113150 +_ZN18UnkStruct_020ee73419func_ov008_021131acEv kind:function(arm,size=0xd8) addr:0x021131ac +_ZN18UnkStruct_020eec68C2Ev kind:function(arm,size=0x48) addr:0x02113284 +_ZN18UnkStruct_020eec6819func_ov008_021132ccEv kind:function(arm,size=0x48) addr:0x021132cc +_ZN18UnkStruct_020eec9cC2Ev kind:function(arm,size=0x68) addr:0x02113314 +_ZN18UnkStruct_020eec9c19func_ov008_0211337cEv kind:function(arm,size=0x40) addr:0x0211337c +_ZN18UnkStruct_020ee820C2Ev kind:function(arm,size=0x34) addr:0x021133bc +_ZN18UnkStruct_020ee82019func_ov008_021133f0Ev kind:function(arm,size=0x70) addr:0x021133f0 +_ZN18UnkStruct_020eec60C2Ev kind:function(arm,size=0x14) addr:0x02113460 +_ZN18UnkStruct_020eec6019func_ov008_02113474Ev kind:function(arm,size=0x44) addr:0x02113474 +_ZN18UnkStruct_020ee6f8C2Ev kind:function(arm,size=0x64) addr:0x021134b8 +_ZN18UnkStruct_020ee0a0C2Ev kind:function(arm,size=0x9c) addr:0x0211351c +_ZN18UnkStruct_020ee0a019func_ov008_021135b8Ev kind:function(arm,size=0x4) addr:0x021135b8 +_ZN18UnkStruct_027e0f88C1EPj kind:function(arm,size=0xbc) addr:0x021135bc +_ZN18UnkStruct_027e0f8819func_ov008_02113678EPj kind:function(arm,size=0x48) addr:0x02113678 +_ZN21UnkStruct_027e0f88_04C1Eisish kind:function(arm,size=0x2c) addr:0x021136c0 +_ZN18UnkStruct_020eed2cC2Ev kind:function(arm,size=0x10) addr:0x021136ec +_ZN18UnkStruct_027e0dbcC2Ev kind:function(arm,size=0x34) addr:0x021136fc +_ZN15SaveItemManagerC1Ev kind:function(arm,size=0x238) addr:0x02113730 +_ZN19SaveItemManager_d1cD1Ev kind:function(arm,size=0x4) addr:0x02113968 +_ZN19SaveItemManager_d1cC1Ev kind:function(arm,size=0x18) addr:0x0211396c +_ZN19SaveItemManager_2f8D1Ev kind:function(arm,size=0x4) addr:0x02113984 +_ZN19SaveItemManager_2f8C1Ev kind:function(arm,size=0x50) addr:0x02113988 +_ZN18SaveItemManager_f8D1Ev kind:function(arm,size=0x4) addr:0x021139d8 +_ZN18SaveItemManager_f8C1Ev kind:function(arm,size=0x30) addr:0x021139dc +_ZN18UnkStruct_020e9370C1Ev kind:function(arm,size=0x34) addr:0x02113a0c +_ZN18UnkStruct_020e9360C1Ev kind:function(arm,size=0x68) addr:0x02113a40 +_ZN18UnkStruct_020ec7dcC1Ev kind:function(arm,size=0x4c) addr:0x02113aa8 data_ov008_02113b00 kind:data(any) addr:0x02113b00 data_ov008_02113b04 kind:data(any) addr:0x02113b04 data_ov008_02113b20 kind:data(any) addr:0x02113b20 data_ov008_02113b2c kind:data(any) addr:0x02113b2c -data_ov008_02113b44 kind:data(any) addr:0x02113b44 +_ZTV9GameStart kind:data(any) addr:0x02113b3c data_ov008_02113b60 kind:data(any) addr:0x02113b60 diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index 5a4b3870..106f7560 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -664,7 +664,7 @@ func_02015578 kind:function(arm,size=0xa8) addr:0x02015578 func_02015620 kind:function(arm,size=0x6c) addr:0x02015620 func_0201568c kind:function(arm,size=0xc) addr:0x0201568c func_02015698 kind:function(arm,size=0x1c) addr:0x02015698 -func_020156b4 kind:function(arm,size=0x40) addr:0x020156b4 +_ZN21UnkStruct_020ee820_0413func_020156b4Ev kind:function(arm,size=0x40) addr:0x020156b4 func_020156f4 kind:function(arm,size=0x14) addr:0x020156f4 func_02015708 kind:function(arm,size=0x10) addr:0x02015708 func_02015718 kind:function(arm,size=0x28) addr:0x02015718 @@ -964,7 +964,7 @@ func_0201f5f4 kind:function(arm,size=0x5c) addr:0x0201f5f4 func_0201f650 kind:function(arm,size=0x64) addr:0x0201f650 func_0201f6b4 kind:function(arm,size=0x40) addr:0x0201f6b4 func_0201f6f4 kind:function(arm,size=0x10) addr:0x0201f6f4 -func_0201f704 kind:function(arm,size=0xc) addr:0x0201f704 +_ZN23UnkStruct_func_0201f70413func_0201f704Ev kind:function(arm,size=0xc) addr:0x0201f704 func_0201f710 kind:function(arm,size=0x20) addr:0x0201f710 func_0201f730 kind:function(arm,size=0x18) addr:0x0201f730 func_0201f748 kind:function(arm,size=0x60) addr:0x0201f748 @@ -1065,7 +1065,7 @@ func_02021960 kind:function(arm,size=0x28) addr:0x02021960 func_02021988 kind:function(arm,size=0x1c) addr:0x02021988 func_020219a4 kind:function(arm,size=0x44) addr:0x020219a4 func_020219e8 kind:function(arm,size=0x34) addr:0x020219e8 -func_02021a1c kind:function(arm,size=0xc) addr:0x02021a1c +_ZN21UnkStruct_020eec68_0c13func_02021a1cEv kind:function(arm,size=0xc) addr:0x02021a1c func_02021a28 kind:function(arm,size=0x18) addr:0x02021a28 func_02021a40 kind:function(arm,size=0x3c) addr:0x02021a40 func_02021a7c kind:function(arm,size=0x48) addr:0x02021a7c @@ -1355,7 +1355,7 @@ func_0202bf58 kind:function(arm,size=0x68) addr:0x0202bf58 func_0202bfc0 kind:function(arm,size=0xe8) addr:0x0202bfc0 _ZN8GameModeD1Ev kind:function(thumb,size=0x2) addr:0x0202c0a8 _ZN8GameModeD0Ev kind:function(thumb,size=0xc) addr:0x0202c0ac -_ZN8GameMode13func_0202c0b8Ev kind:function(thumb,size=0x2) addr:0x0202c0b8 +_ZN8GameModeD2Ev kind:function(thumb,size=0x2) addr:0x0202c0b8 _ZN8GameMode8vfunc_0cEPt kind:function(thumb,size=0x2) addr:0x0202c0bc _ZN8GameMode8vfunc_10EPt kind:function(thumb,size=0x2) addr:0x0202c0c0 _ZN8GameMode8vfunc_14Eb kind:function(thumb,size=0x2) addr:0x0202c0c4 @@ -2228,7 +2228,7 @@ func_02042668 kind:function(thumb,size=0x24) addr:0x02042668 func_0204268c kind:function(thumb,size=0x48) addr:0x0204268c func_020426d4 kind:function(thumb,size=0x24) addr:0x020426d4 func_020426f8 kind:function(thumb,size=0x4c) addr:0x020426f8 -func_02042744 kind:function(thumb,size=0x24) addr:0x02042744 +_ZN18UnkStruct_027e0dbc13func_02042744EPi kind:function(thumb,size=0x24) addr:0x02042744 func_02042768 kind:function(thumb,size=0x31c) addr:0x02042768 func_02042a84 kind:function(thumb,size=0x46) addr:0x02042a84 func_02042acc kind:function(thumb,size=0xc) addr:0x02042acc @@ -2399,7 +2399,7 @@ __destroy_global_chain kind:function(arm,size=0x44) addr:0x0204f4b8 func_0204f4fc kind:function(arm,size=0x48) addr:0x0204f4fc func_0204f544 kind:function(arm,size=0x14) addr:0x0204f544 func_0204f558 kind:function(arm,size=0xbc) addr:0x0204f558 -ForEach kind:function(arm,size=0xb0) addr:0x0204f614 +__cxa_vec_ctor kind:function(arm,size=0xb0) addr:0x0204f614 func_0204f6c4 kind:function(arm,size=0x90) addr:0x0204f6c4 __cxa_vec_cleanup kind:function(arm,size=0x5c) addr:0x0204f754 func_0204f7b0 kind:function(arm,size=0x34) addr:0x0204f7b0 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 60e20642..fa4df74f 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -152,7 +152,7 @@ func_ov000_0207a2d8 kind:function(arm,size=0x10) addr:0x0207a278 func_ov000_0207a2e8 kind:function(thumb,size=0x14) addr:0x0207a288 func_ov000_0207a2fc kind:function(arm,size=0x4) addr:0x0207a29c func_ov000_0207a300 kind:function(thumb,size=0x8c) addr:0x0207a2a0 -_ZN15SaveItemManagerC1Ev kind:function(thumb,size=0x56) addr:0x0207a32c +_ZN13SaveInventory4InitEv kind:function(thumb,size=0x56) addr:0x0207a32c func_ov000_0207a3e4 kind:function(thumb,size=0x32) addr:0x0207a384 func_ov000_0207a418 kind:function(thumb,size=0xbc) addr:0x0207a3b8 func_ov000_0207a4d4 kind:function(thumb,size=0x1a) addr:0x0207a474 @@ -242,7 +242,7 @@ func_ov000_0207c0ac kind:function(thumb,size=0x20) addr:0x0207c04c func_ov000_0207c0cc kind:function(thumb,size=0x24) addr:0x0207c06c func_ov000_0207c0f0 kind:function(thumb,size=0x28) addr:0x0207c090 func_ov000_0207c118 kind:function(thumb,size=0x58) addr:0x0207c0b8 -func_ov000_0207c170 kind:function(thumb,size=0x1e) addr:0x0207c110 +_ZN18UnkStruct_020ec7dc19func_ov000_0207c170Ev kind:function(thumb,size=0x1e) addr:0x0207c110 func_ov000_0207c190 kind:function(thumb,size=0x1e) addr:0x0207c130 func_ov000_0207c1b0 kind:function(arm,size=0x48) addr:0x0207c150 func_ov000_0207c1f8 kind:function(arm,size=0x68) addr:0x0207c198 @@ -1644,10 +1644,10 @@ func_ov000_020a19c8 kind:function(arm,size=0x34) addr:0x020a1968 func_ov000_020a19fc kind:function(arm,size=0x10) addr:0x020a199c func_ov000_020a1a0c kind:function(arm,size=0x18) addr:0x020a19ac func_ov000_020a1a24 kind:function(arm,size=0x18) addr:0x020a19c4 -func_ov000_020a1a3c kind:function(arm,size=0x80) addr:0x020a19dc +_ZN18UnkStruct_027e0f8819func_ov000_020a1a3cEv kind:function(arm,size=0x80) addr:0x020a19dc func_ov000_020a1abc kind:function(arm,size=0x68) addr:0x020a1a5c func_ov000_020a1b24 kind:function(arm,size=0x30) addr:0x020a1ac4 -func_ov000_020a1b54 kind:function(arm,size=0x114) addr:0x020a1af4 +_ZN21UnkStruct_027e0f88_0419func_ov000_020a1b54Eii kind:function(arm,size=0x114) addr:0x020a1af4 func_ov000_020a1c68 kind:function(arm,size=0x8) addr:0x020a1c08 func_ov000_020a1c70 kind:function(arm,size=0x1c) addr:0x020a1c10 func_ov000_020a1c8c kind:function(arm,size=0xc) addr:0x020a1c2c @@ -2127,10 +2127,10 @@ _ZNK11ItemManager16GetShipPartCountEjj kind:function(thumb,size=0xe) addr:0x020a _ZN11ItemManager16SetShipPartCountEjjc kind:function(thumb,size=0x18) addr:0x020ad8a0 _ZNK11ItemManager16GetTreasureCountEj kind:function(thumb,size=0x8) addr:0x020ad8b8 _ZN11ItemManager16SetTreasureCountEjc kind:function(thumb,size=0xe) addr:0x020ad8c0 -_ZNK11ItemManager10GetUnk_098Ej kind:function(thumb,size=0x8) addr:0x020ad8d0 -_ZNK11ItemManager10GetUnk_09eEj kind:function(thumb,size=0xa) addr:0x020ad8d8 -_ZNK11ItemManager18GetUnk_09e_DividedEj kind:function(thumb,size=0x28) addr:0x020ad8e4 -_ZN11ItemManager10SetUnk_09eEjt kind:function(thumb,size=0x34) addr:0x020ad90c +_ZNK11ItemManager21GetCollectedFishCountEj kind:function(thumb,size=0x8) addr:0x020ad8d0 +_ZNK11ItemManager11GetFishSizeEj kind:function(thumb,size=0xa) addr:0x020ad8d8 +_ZNK11ItemManager19GetFishSize_DividedEj kind:function(thumb,size=0x28) addr:0x020ad8e4 +_ZN11ItemManager11SetFishSizeEjt kind:function(thumb,size=0x34) addr:0x020ad90c _ZNK11ItemManager10GetMaxAmmoEi kind:function(thumb,size=0x40) addr:0x020ad940 _ZNK11ItemManager19GetMaxShipPartCountEv kind:function(thumb,size=0x4) addr:0x020ad980 _ZNK11ItemManager19GetMaxTreasureCountEv kind:function(thumb,size=0x4) addr:0x020ad984 @@ -3572,8 +3572,8 @@ func_ov000_020d680c kind:function(arm,size=0x38) addr:0x020d67ac func_ov000_020d6844 kind:function(arm,size=0x24) addr:0x020d67e4 func_ov000_020d6868 kind:function(arm,size=0x130) addr:0x020d6808 func_ov000_020d6998 kind:function(arm,size=0x3c) addr:0x020d6938 -func_ov000_020d69d4 kind:function(arm,size=0x10) addr:0x020d6974 -func_ov000_020d69e4 kind:function(arm,size=0x44) addr:0x020d6984 +_ZN18UnkStruct_020ee82019func_ov000_020d69d4Ei kind:function(arm,size=0x10) addr:0x020d6974 +_ZN18UnkStruct_020ee82019func_ov000_020d69e4Ev kind:function(arm,size=0x44) addr:0x020d6984 func_ov000_020d6a28 kind:function(arm,size=0x30) addr:0x020d69c8 func_ov000_020d6a58 kind:function(arm,size=0x34) addr:0x020d69f8 func_ov000_020d6a8c kind:function(arm,size=0x18) addr:0x020d6a2c diff --git a/config/usa/arm9/overlays/ov008/delinks.txt b/config/usa/arm9/overlays/ov008/delinks.txt index 2dcabb64..8b94c2b9 100644 --- a/config/usa/arm9/overlays/ov008/delinks.txt +++ b/config/usa/arm9/overlays/ov008/delinks.txt @@ -3,3 +3,10 @@ .data start:0x02113a80 end:0x02113b00 kind:data align:32 .bss start:0x02113b00 end:0x02113b00 kind:bss align:32 +src/08_GameStart/GameStart.cpp: + .text start:0x02112ba0 end:0x02112e60 + .data start:0x02113a80 end:0x02113ae0 + +src/08_GameStart/Init.cpp: + .text start:0x02112e60 end:0x02113a74 + .data start:0x02113ae0 end:0x02113b00 diff --git a/config/usa/arm9/overlays/ov008/relocs.txt b/config/usa/arm9/overlays/ov008/relocs.txt index 8ef5c2f8..9f8c1fbd 100644 --- a/config/usa/arm9/overlays/ov008/relocs.txt +++ b/config/usa/arm9/overlays/ov008/relocs.txt @@ -11,7 +11,7 @@ from:0x02112c98 kind:arm_call_thumb to:0x02027ab4 module:main from:0x02112cc4 kind:arm_call_thumb to:0x02027ab4 module:main from:0x02112ccc kind:arm_call_thumb to:0x02016fcc module:main from:0x02112cdc kind:load to:0x020575cc add:8 module:main -from:0x02112ce0 kind:load to:0x02113ac4 module:overlay(8) +from:0x02112ce0 kind:load to:0x02113abc add:8 module:overlay(8) from:0x02112ce4 kind:load to:0x02113a80 module:overlay(8) from:0x02112ce8 kind:load to:0x02113a84 module:overlay(8) from:0x02112cec kind:load to:0x02069140 module:main @@ -21,13 +21,13 @@ from:0x02112d08 kind:arm_call to:0x02004ba8 module:main from:0x02112d0c kind:arm_call to:0x02004b94 module:main from:0x02112d10 kind:arm_call to:0x02004c68 module:main from:0x02112d18 kind:arm_call_thumb to:0x0202c0a0 module:main -from:0x02112d24 kind:load to:0x02113ac4 module:overlay(8) +from:0x02112d24 kind:load to:0x02113abc add:8 module:overlay(8) from:0x02112d38 kind:arm_call to:0x02004ba8 module:main from:0x02112d3c kind:arm_call to:0x02004b94 module:main from:0x02112d40 kind:arm_call to:0x02004c68 module:main from:0x02112d48 kind:arm_call_thumb to:0x0202c0a0 module:main from:0x02112d50 kind:arm_call to:0x0202ea08 module:main -from:0x02112d5c kind:load to:0x02113ac4 module:overlay(8) +from:0x02112d5c kind:load to:0x02113abc add:8 module:overlay(8) from:0x02112dc0 kind:arm_call to:0x02112e08 module:overlay(8) from:0x02112de8 kind:arm_call_thumb to:0x0202ceb0 module:main from:0x02112dfc kind:load to:0x027e0618 module:dtcm @@ -38,6 +38,7 @@ from:0x02112e2c kind:arm_call to:0x02112ea8 module:overlay(8) from:0x02112e38 kind:arm_call to:0x021135f8 module:overlay(8) from:0x02112e40 kind:arm_call_thumb to:0x0207a5f4 module:overlay(0) from:0x02112e48 kind:load to:0x027e0900 module:dtcm +from:0x02112e4c kind:overlay_id to:0 module:none from:0x02112e50 kind:load to:0x020ee6d4 module:overlay(0) from:0x02112e54 kind:load to:0x027e0d54 module:dtcm from:0x02112e58 kind:load to:0x027e0ce0 module:dtcm diff --git a/config/usa/arm9/overlays/ov008/symbols.txt b/config/usa/arm9/overlays/ov008/symbols.txt index abba5bb6..97af093d 100644 --- a/config/usa/arm9/overlays/ov008/symbols.txt +++ b/config/usa/arm9/overlays/ov008/symbols.txt @@ -1,45 +1,45 @@ -func_ov008_02112c20 kind:function(arm,size=0x34) addr:0x02112ba0 -func_ov008_02112c54 kind:function(arm,size=0x124) addr:0x02112bd4 -func_ov008_02112d78 kind:function(arm,size=0x30) addr:0x02112cf8 -func_ov008_02112da8 kind:function(arm,size=0x38) addr:0x02112d28 -func_ov008_02112de0 kind:function(arm,size=0xa4) addr:0x02112d60 -func_ov008_02112e84 kind:function(arm,size=0x4) addr:0x02112e04 -func_ov008_02112e88 kind:function(arm,size=0x58) addr:0x02112e08 -func_ov008_02112ee0 kind:function(arm,size=0x48) addr:0x02112e60 -func_ov008_02112f28 kind:function(arm,size=0x158) addr:0x02112ea8 -func_ov008_02113080 kind:function(arm,size=0x50) addr:0x02113000 -func_ov008_021130d0 kind:function(arm,size=0x80) addr:0x02113050 -func_ov008_02113150 kind:function(arm,size=0x5c) addr:0x021130d0 -func_ov008_021131ac kind:function(arm,size=0xd8) addr:0x0211312c -func_ov008_02113284 kind:function(arm,size=0x48) addr:0x02113204 -func_ov008_021132cc kind:function(arm,size=0x48) addr:0x0211324c -func_ov008_02113314 kind:function(arm,size=0x68) addr:0x02113294 -func_ov008_0211337c kind:function(arm,size=0x40) addr:0x021132fc -func_ov008_021133bc kind:function(arm,size=0x34) addr:0x0211333c -func_ov008_021133f0 kind:function(arm,size=0x70) addr:0x02113370 -func_ov008_02113460 kind:function(arm,size=0x14) addr:0x021133e0 -func_ov008_02113474 kind:function(arm,size=0x44) addr:0x021133f4 -func_ov008_021134b8 kind:function(arm,size=0x64) addr:0x02113438 -func_ov008_0211351c kind:function(arm,size=0x9c) addr:0x0211349c -func_ov008_021135b8 kind:function(arm,size=0x4) addr:0x02113538 -func_ov008_021135bc kind:function(arm,size=0xbc) addr:0x0211353c -func_ov008_02113678 kind:function(arm,size=0x48) addr:0x021135f8 -func_ov008_021136c0 kind:function(arm,size=0x2c) addr:0x02113640 -func_ov008_021136ec kind:function(arm,size=0x10) addr:0x0211366c -func_ov008_021136fc kind:function(arm,size=0x34) addr:0x0211367c -func_ov008_02113730 kind:function(arm,size=0x238) addr:0x021136b0 -func_ov008_02113968 kind:function(arm,size=0x4) addr:0x021138e8 -func_ov008_0211396c kind:function(arm,size=0x18) addr:0x021138ec -func_ov008_02113984 kind:function(arm,size=0x4) addr:0x02113904 -func_ov008_02113988 kind:function(arm,size=0x50) addr:0x02113908 -func_ov008_021139d8 kind:function(arm,size=0x4) addr:0x02113958 -func_ov008_021139dc kind:function(arm,size=0x30) addr:0x0211395c -func_ov008_02113a0c kind:function(arm,size=0x34) addr:0x0211398c -func_ov008_02113a40 kind:function(arm,size=0x68) addr:0x021139c0 -func_ov008_02113aa8 kind:function(arm,size=0x4c) addr:0x02113a28 +_ZN9GameStart6CreateEi kind:function(arm,size=0x34) addr:0x02112ba0 +_ZN9GameStartC2Ei kind:function(arm,size=0x124) addr:0x02112bd4 +_ZN9GameStartD1Ev kind:function(arm,size=0x30) addr:0x02112cf8 +_ZN9GameStartD0Ev kind:function(arm,size=0x38) addr:0x02112d28 +_ZN9GameStart8vfunc_08Eb kind:function(arm,size=0xa4) addr:0x02112d60 +_ZN9GameStart8vfunc_10EPt kind:function(arm,size=0x4) addr:0x02112e04 +_ZN9GameStart19func_ov008_02112e88Ev kind:function(arm,size=0x58) addr:0x02112e08 +_ZN18UnkStruct_027e0d54C1Ev kind:function(arm,size=0x48) addr:0x02112e60 +_ZN18UnkStruct_027e0d5419func_ov008_02112f28Ev kind:function(arm,size=0x158) addr:0x02112ea8 +_ZN12TouchControlC2Ev kind:function(arm,size=0x50) addr:0x02113000 +_ZN18UnkStruct_020ee698C2Ev kind:function(arm,size=0x80) addr:0x02113050 +_ZN18UnkStruct_020ee734C2Ev kind:function(arm,size=0x5c) addr:0x021130d0 +_ZN18UnkStruct_020ee73419func_ov008_021131acEv kind:function(arm,size=0xd8) addr:0x0211312c +_ZN18UnkStruct_020eec68C2Ev kind:function(arm,size=0x48) addr:0x02113204 +_ZN18UnkStruct_020eec6819func_ov008_021132ccEv kind:function(arm,size=0x48) addr:0x0211324c +_ZN18UnkStruct_020eec9cC2Ev kind:function(arm,size=0x68) addr:0x02113294 +_ZN18UnkStruct_020eec9c19func_ov008_0211337cEv kind:function(arm,size=0x40) addr:0x021132fc +_ZN18UnkStruct_020ee820C2Ev kind:function(arm,size=0x34) addr:0x0211333c +_ZN18UnkStruct_020ee82019func_ov008_021133f0Ev kind:function(arm,size=0x70) addr:0x02113370 +_ZN18UnkStruct_020eec60C2Ev kind:function(arm,size=0x14) addr:0x021133e0 +_ZN18UnkStruct_020eec6019func_ov008_02113474Ev kind:function(arm,size=0x44) addr:0x021133f4 +_ZN18UnkStruct_020ee6f8C2Ev kind:function(arm,size=0x64) addr:0x02113438 +_ZN18UnkStruct_020ee0a0C2Ev kind:function(arm,size=0x9c) addr:0x0211349c +_ZN18UnkStruct_020ee0a019func_ov008_021135b8Ev kind:function(arm,size=0x4) addr:0x02113538 +_ZN18UnkStruct_027e0f88C1EPj kind:function(arm,size=0xbc) addr:0x0211353c +_ZN18UnkStruct_027e0f8819func_ov008_02113678EPj kind:function(arm,size=0x48) addr:0x021135f8 +_ZN21UnkStruct_027e0f88_04C1Eisish kind:function(arm,size=0x2c) addr:0x02113640 +_ZN18UnkStruct_020eed2cC2Ev kind:function(arm,size=0x10) addr:0x0211366c +_ZN18UnkStruct_027e0dbcC2Ev kind:function(arm,size=0x34) addr:0x0211367c +_ZN15SaveItemManagerC1Ev kind:function(arm,size=0x238) addr:0x021136b0 +_ZN19SaveItemManager_d1cD1Ev kind:function(arm,size=0x4) addr:0x021138e8 +_ZN19SaveItemManager_d1cC1Ev kind:function(arm,size=0x18) addr:0x021138ec +_ZN19SaveItemManager_2f8D1Ev kind:function(arm,size=0x4) addr:0x02113904 +_ZN19SaveItemManager_2f8C1Ev kind:function(arm,size=0x50) addr:0x02113908 +_ZN18SaveItemManager_f8D1Ev kind:function(arm,size=0x4) addr:0x02113958 +_ZN18SaveItemManager_f8C1Ev kind:function(arm,size=0x30) addr:0x0211395c +_ZN18UnkStruct_020e9370C1Ev kind:function(arm,size=0x34) addr:0x0211398c +_ZN18UnkStruct_020e9360C1Ev kind:function(arm,size=0x68) addr:0x021139c0 +_ZN18UnkStruct_020ec7dcC1Ev kind:function(arm,size=0x4c) addr:0x02113a28 data_ov008_02113b00 kind:data(any) addr:0x02113a80 data_ov008_02113b04 kind:data(any) addr:0x02113a84 data_ov008_02113b20 kind:data(any) addr:0x02113aa0 data_ov008_02113b2c kind:data(any) addr:0x02113aac -data_ov008_02113b44 kind:data(any) addr:0x02113ac4 +_ZTV9GameStart kind:data(any) addr:0x02113abc data_ov008_02113b60 kind:data(any) addr:0x02113ae0 diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt index 69afc0ef..1d349630 100644 --- a/config/usa/arm9/symbols.txt +++ b/config/usa/arm9/symbols.txt @@ -664,7 +664,7 @@ func_02015578 kind:function(arm,size=0xa8) addr:0x02015578 func_02015620 kind:function(arm,size=0x6c) addr:0x02015620 func_0201568c kind:function(arm,size=0xc) addr:0x0201568c func_02015698 kind:function(arm,size=0x1c) addr:0x02015698 -func_020156b4 kind:function(arm,size=0x40) addr:0x020156b4 +_ZN21UnkStruct_020ee820_0413func_020156b4Ev kind:function(arm,size=0x40) addr:0x020156b4 func_020156f4 kind:function(arm,size=0x14) addr:0x020156f4 func_02015708 kind:function(arm,size=0x10) addr:0x02015708 func_02015718 kind:function(arm,size=0x28) addr:0x02015718 @@ -964,7 +964,7 @@ func_0201f5f4 kind:function(arm,size=0x5c) addr:0x0201f5f4 func_0201f650 kind:function(arm,size=0x64) addr:0x0201f650 func_0201f6b4 kind:function(arm,size=0x40) addr:0x0201f6b4 func_0201f6f4 kind:function(arm,size=0x10) addr:0x0201f6f4 -func_0201f704 kind:function(arm,size=0xc) addr:0x0201f704 +_ZN23UnkStruct_func_0201f70413func_0201f704Ev kind:function(arm,size=0xc) addr:0x0201f704 func_0201f710 kind:function(arm,size=0x20) addr:0x0201f710 func_0201f730 kind:function(arm,size=0x18) addr:0x0201f730 func_0201f748 kind:function(arm,size=0x60) addr:0x0201f748 @@ -1065,7 +1065,7 @@ func_02021960 kind:function(arm,size=0x28) addr:0x02021960 func_02021988 kind:function(arm,size=0x1c) addr:0x02021988 func_020219a4 kind:function(arm,size=0x44) addr:0x020219a4 func_020219e8 kind:function(arm,size=0x34) addr:0x020219e8 -func_02021a1c kind:function(arm,size=0xc) addr:0x02021a1c +_ZN21UnkStruct_020eec68_0c13func_02021a1cEv kind:function(arm,size=0xc) addr:0x02021a1c func_02021a28 kind:function(arm,size=0x18) addr:0x02021a28 func_02021a40 kind:function(arm,size=0x3c) addr:0x02021a40 func_02021a7c kind:function(arm,size=0x48) addr:0x02021a7c @@ -2228,7 +2228,7 @@ func_02042668 kind:function(thumb,size=0x24) addr:0x02042624 func_0204268c kind:function(thumb,size=0x48) addr:0x02042648 func_020426d4 kind:function(thumb,size=0x24) addr:0x02042690 func_020426f8 kind:function(thumb,size=0x4c) addr:0x020426b4 -func_02042744 kind:function(thumb,size=0x24) addr:0x02042700 +_ZN18UnkStruct_027e0dbc13func_02042744EPi kind:function(thumb,size=0x24) addr:0x02042700 func_02042768 kind:function(thumb,size=0x31c) addr:0x02042724 func_02042a84 kind:function(thumb,size=0x46) addr:0x02042a40 func_02042acc kind:function(thumb,size=0xc) addr:0x02042a88 @@ -2399,7 +2399,7 @@ __destroy_global_chain kind:function(arm,size=0x44) addr:0x0204f474 func_0204f4fc kind:function(arm,size=0x48) addr:0x0204f4b8 func_0204f544 kind:function(arm,size=0x14) addr:0x0204f500 func_0204f558 kind:function(arm,size=0xbc) addr:0x0204f514 -ForEach kind:function(arm,size=0xb0) addr:0x0204f5d0 +__cxa_vec_ctor kind:function(arm,size=0xb0) addr:0x0204f5d0 func_0204f6c4 kind:function(arm,size=0x90) addr:0x0204f680 __cxa_vec_cleanup kind:function(arm,size=0x5c) addr:0x0204f710 func_0204f7b0 kind:function(arm,size=0x34) addr:0x0204f76c diff --git a/include/GameStart/GameStart.hpp b/include/GameStart/GameStart.hpp new file mode 100644 index 00000000..d4591013 --- /dev/null +++ b/include/GameStart/GameStart.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include "Game/GameMode.hpp" +#include "Player/TouchControl.hpp" +#include "System/SysNew.hpp" +#include "global.h" +#include "types.h" + +class GameStart : public GameMode { +public: + /* 000 (base) */ + /* 008 */ unk32 mUnk_008; + /* 00c */ u32 mUnk_00c; + /* 010 */ + + /* 00 */ virtual ~GameStart() override; + /* 04 */ virtual GameModeId vfunc_08(bool param1) override; + /* 10 */ virtual void vfunc_10(u16 *param1) override; + /* 14 */ + + static GameStart *Create(GameModeId modeId); + + GameStart(GameModeId modeId); + + static void func_ov008_02112e88(); +}; diff --git a/include/Item/Item.hpp b/include/Item/Item.hpp index cea5c551..36f5a9ca 100644 --- a/include/Item/Item.hpp +++ b/include/Item/Item.hpp @@ -296,6 +296,17 @@ enum Potion_ { Potion_COUNT, }; +typedef u8 FishType; +enum FishType_ { + FishType_SkippyJack, + FishType_Toona, + FishType_Loovar, + FishType_RustySwordfish, + FishType_Neptoona, + FishType_Stowfish, + FishType_COUNT +}; + struct ItemFlags { /* 00 */ u32 flags[CEIL_DIV(ItemFlag_COUNT, 32)]; /* 10 */ diff --git a/include/Item/ItemManager.hpp b/include/Item/ItemManager.hpp index 5931165b..10a64427 100644 --- a/include/Item/ItemManager.hpp +++ b/include/Item/ItemManager.hpp @@ -66,8 +66,8 @@ public: /* 028 */ ShipType mEquippedShipParts[ShipPart_COUNT]; /* 048 */ s8 mShipParts[ShipPart_COUNT][ShipType_COUNT]; /* 090 */ s8 mTreasure[Treasure_COUNT]; - /* 098 */ u8 mUnk_098[6]; // max 99 - /* 09e */ u16 mUnk_09e[6]; // max 9999, corresponds with mUnk_098 + /* 098 */ FishType mFishCount[FishType_COUNT]; + /* 09e */ u16 mFishSize[FishType_COUNT]; /* 0aa */ unk16 mUnk_0aa; // padding? /* 0ac */ EquipItem *(*mEquipItems)[ItemFlag_EQUIP_COUNT]; /* 0b0 */ u16 (*mAmmo)[ItemFlag_EQUIP_COUNT]; @@ -176,11 +176,11 @@ public: void SetTreasureSalvaged(u32 index); u8 GetMaxTreasureCount() const; - // mUnk_098, mUnk_09e - u8 GetUnk_098(u32 index) const; - u16 GetUnk_09e(u32 index) const; - s32 GetUnk_09e_Divided(u32 index) const; - void SetUnk_09e(u32 index, u16 value); // also increments the corresponding mUnk_098 value + // mFishCount, mFishSize + u8 GetCollectedFishCount(u32 index) const; + u16 GetFishSize(u32 index) const; + s32 GetFishSize_Divided(u32 index) const; + void SetFishSize(u32 index, u16 value); // also increments the corresponding mFishCount value // Item bool HasItem(ItemFlag item) const; diff --git a/include/Message/MsgProc.hpp b/include/Message/MsgProc.hpp index a48cbb0c..bdef3a22 100644 --- a/include/Message/MsgProc.hpp +++ b/include/Message/MsgProc.hpp @@ -6,6 +6,7 @@ #include "Game/Game.hpp" #include "Message/BMG.hpp" #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_020eec9c.hpp" #include "Unknown/func_ov000_020d0644.hpp" // temp @@ -169,13 +170,6 @@ public: }; extern UnkClass_027e1054 *data_027e1054; -class UnkClass_ov000_020eec9c { -public: - void func_ov000_020d77e4(unk32); - unk32 func_ov000_020d7f18(unk32); -}; -extern UnkClass_ov000_020eec9c data_ov000_020eec9c; - class UnkClass_ov000_027e0d04 { public: /* 0x00 */ unk16 mUnk_00; diff --git a/include/Player/TouchControl.hpp b/include/Player/TouchControl.hpp index 08d9d657..989f4791 100644 --- a/include/Player/TouchControl.hpp +++ b/include/Player/TouchControl.hpp @@ -37,6 +37,10 @@ public: /* 34 */ TouchFlags mFlags; /* 36 */ + TouchControl(); + TouchControl(unk32 param_1); + ~TouchControl(); + void Init(); void IncreaseSpeed(s16 increase); void UpdateFlags(u16 speed); @@ -45,10 +49,9 @@ public: bool func_ov00_0207aeac(); void UpdateConditionally(TouchState *state, u16 speed); void func_ov00_0207af38(u16 speedIncrease, bool shouldIncrease); - ~TouchControl(); static bool func_0202b864(Vec3p *param1, s32 size, unk8 param3); static bool func_0202b894(Vec3p *param1, s32 size, unk8 param3); }; -void Fill16(int value, unsigned short *dst, int size); // TODO: Replace with header file +extern "C" void Fill16(int value, unsigned short *dst, int size); // TODO: Replace with header file diff --git a/include/Save/SaveItemManager.hpp b/include/Save/SaveItemManager.hpp index 0f0142f8..66aaf683 100644 --- a/include/Save/SaveItemManager.hpp +++ b/include/Save/SaveItemManager.hpp @@ -4,34 +4,175 @@ #include "types.h" #include "../Item/Item.hpp" +#include "Actor/Actor.hpp" +#include "Unknown/UnkStruct_020ec7dc.hpp" -struct SaveItemManager { - /* 00 */ ItemFlags itemFlags; - /* 10 */ u32 salvagedTreasureFlags; - /* 14 */ ShipPartPricesShown shipPartPricesShown; - /* 20 */ u32 treasurePriceShownFlags[CEIL_DIV(Treasure_COUNT, 32)]; - /* 24 */ u8 equippedShipParts[ShipPart_COUNT]; - /* 2c */ s8 shipParts[ShipPart_COUNT][ShipType_COUNT]; - /* 74 */ s8 treasure[Treasure_COUNT]; - /* 7c */ unk8 unk_7c[4]; - /* 80 */ u16 hourglassSeconds; - /* 82 */ u16 unk_82[6]; - /* 8e */ u16 numRupees; - /* 90 */ unk8 unk_90; - /* 91 */ unk8 unk_91; - /* 92 */ unk8 unk_92; - /* 93 */ u8 numBombs; - /* 94 */ u8 numBombchus; - /* 95 */ u8 numArrows; - /* 96 */ s8 equippedItem; - /* 97 */ Potion potions[MAX_POTIONS]; - /* 99 */ u8 numGems[Gem_COUNT]; - /* 9c */ u8 quiverSize; - /* 9d */ u8 bombBagSize; - /* 9e */ u8 bombchuBagSize; - /* 9f */ u8 unk_9f[6]; - /* a5 */ u8 equippedFairy; - /* a6 */ +class SaveItemManager_f8 { +public: + /* 00 */ u32 mUnk_00[2]; + /* 08 */ + + static void func_ov008_021139d8(); + static void func_ov008_021139dc(); + + ~SaveItemManager_f8(); + SaveItemManager_f8(); +}; + +class SaveItemManager_2f8 { +public: + /* 00 */ u32 mUnk_00[2]; + /* 08 */ u32 mUnk_08[1]; + /* 0c */ + + static void func_ov008_02113984(); + static void func_ov008_02113988(); + + ~SaveItemManager_2f8(); + SaveItemManager_2f8(); +}; + +class SaveItemManager_d1c { +public: + /* 00 */ unk8 pad[0x1c]; + /* 1c */ Actor_UnkStruct_020 mUnk_1c; + /* 30 */ + + static void func_ov008_02113968(); + static void func_ov008_0211396c(); + + SaveItemManager_d1c(); + ~SaveItemManager_d1c(); +}; + +class SaveItemManager_cec { +public: + /* 00 */ unk32 mUnk_00; + + void func_ov000_0207a3e4(); +}; + +class SaveItemManager_2400 { +public: + /* 00 */ unk32 mUnk_00; + + void func_ov000_0207a5ac(); +}; + +class SaveItemManager_2580 { +public: + /* 00 */ u16 mUnk_00[11]; + /* 16 */ +}; + +class SaveItemManager_2840 { +public: + /* 00 */ unk32 mUnk_00; + + void func_ov000_0207a4f0(); +}; + +class SaveItemManager_2940 { +public: + /* 00 */ unk32 mUnk_00; + + void func_ov000_0207a6d0(); +}; + +extern "C" void Fill16(int value, unsigned short *dst, int size); +extern "C" void Fill32(unk32, u32 *, unk32); +extern "C" void Fill256(int value, int *dst, int size); + +class SaveInventory { +public: + /* 0000 */ ItemFlags itemFlags; + /* 0010 */ u32 salvagedTreasureFlags; + /* 0014 */ ShipPartPricesShown shipPartPricesShown; + /* 0020 */ u32 treasurePriceShownFlags[CEIL_DIV(Treasure_COUNT, 32)]; + /* 0024 */ u8 equippedShipParts[ShipPart_COUNT]; + /* 002c */ s8 shipParts[ShipPart_COUNT][ShipType_COUNT]; + /* 0074 */ s8 treasure[Treasure_COUNT]; + /* 007c */ unk16 unk_7c; + /* 007e */ unk8 unk_7e; + /* 007f */ unk8 unk_7f; + /* 0080 */ u16 hourglassSeconds; + /* 0082 */ u16 fishSize[FishType_COUNT]; + /* 008e */ u16 numRupees; + /* 0090 */ unk8 unk_90; + /* 0091 */ unk8 unk_91; + /* 0092 */ unk8 unk_92; + /* 0093 */ u8 numBombs; + /* 0094 */ u8 numBombchus; + /* 0095 */ u8 numArrows; + /* 0096 */ s8 equippedItem; + /* 0097 */ Potion potions[MAX_POTIONS]; + /* 0099 */ u8 numGems[Gem_COUNT]; + /* 009c */ u8 quiverSize; + /* 009d */ u8 bombBagSize; + /* 009e */ u8 bombchuBagSize; + /* 009f */ FishType fishCount[FishType_COUNT]; + /* 00a5 */ u8 equippedFairy; + /* 00a6 */ unk16 unk_a6; + /* 00a8 */ unk32 unk_a8[0x12]; + /* 00f0 */ u16 unk_f0[4]; + /* 00f8 */ + + SaveInventory() { + Fill32(0, this->itemFlags.flags, sizeof(this->itemFlags)); + Fill32(0, &this->salvagedTreasureFlags, sizeof(this->salvagedTreasureFlags)); + Fill32(0, this->shipPartPricesShown.flags, sizeof(this->shipPartPricesShown)); + Fill32(0, this->treasurePriceShownFlags, sizeof(this->treasurePriceShownFlags)); + this->unk_7c = 0; + this->unk_7e = 0; + this->unk_7f = 0; + this->Init(); + Fill256(0, this->unk_a8, sizeof(this->unk_a8)); + Fill16(0, this->unk_f0, sizeof(this->unk_f0)); + } + + void Init(); +}; + +class SaveItemManager_Dummy2 { +public: + /* 000 */ u32 unk_cac[16]; + + SaveItemManager_Dummy2() { + Fill32(0, this->unk_cac, sizeof(this->unk_cac)); + Fill32(0, this->unk_cac, sizeof(this->unk_cac)); + } +}; + +class SaveItemManager { +public: + /* 0000 */ SaveInventory inventory; + /* 00f8 */ SaveItemManager_f8 unk_f8[64]; + /* 02f8 */ SaveItemManager_2f8 unk_2f8[207]; + /* 0cac */ SaveItemManager_Dummy2 unk_cac; + /* 0cec */ SaveItemManager_cec unk_cec; + /* 0cf0 */ unk8 unk_cf0[0xd1c - 0xcf0]; + /* 0d1c */ SaveItemManager_d1c unk_d1c[8]; + /* 0e9c */ u32 unk_e9c[2]; + /* 0ea4 */ u32 unk_ea4[1]; + /* 0ea8 */ unk8 unk_ea8[0xeb0 - 0xea8]; + /* 0eb0 */ u32 unk_eb0[2]; + /* 0eb8 */ u32 unk_eb8[336]; + /* 13f8 */ unk8 unk_13f8[0x1400 - 0x13f8]; + /* 1400 */ unk32 unk_1400[0x400]; + /* 2400 */ SaveItemManager_2400 unk_2400; + /* 2404 */ unk8 unk_2404[0x2580 - 0x2404]; + /* 2580 */ SaveItemManager_2580 unk_2580[32]; + /* 2840 */ SaveItemManager_2840 unk_2840; + /* 2844 */ unk8 unk_2844[0x2900 - 0x2844]; + /* 2900 */ UnkStruct_020ec7dc unk_2900; + /* 2940 */ SaveItemManager_2940 unk_2940; + /* 2940 */ unk8 unk_2944[0x29c0 - 0x2944]; + /* 29c0 */ unk32 unk_29c0; + /* 29c4 */ SaveItemManager(); + + void func_ov000_0207a418(); }; + +extern SaveItemManager gSaveItemManager; diff --git a/include/System/SysNew.hpp b/include/System/SysNew.hpp index df660a1b..5b3089ed 100644 --- a/include/System/SysNew.hpp +++ b/include/System/SysNew.hpp @@ -25,4 +25,5 @@ public: static void operator delete[](void *ptr); }; +extern u32 *data_027e0ce0[]; extern UnkStruct_0202e894 *data_027e0ce4; diff --git a/include/Unknown/UnkStruct_020e9360.hpp b/include/Unknown/UnkStruct_020e9360.hpp new file mode 100644 index 00000000..19c16094 --- /dev/null +++ b/include/Unknown/UnkStruct_020e9360.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_020e9360 { +public: + /* 00 */ u8 *mUnk_00; + /* 04 */ u8 mUnk_04[11]; + /* 0f */ unk8 mUnk_0f; + + UnkStruct_020e9360(); +}; + +extern UnkStruct_020e9360 data_ov000_020e9360; diff --git a/include/Unknown/UnkStruct_020e9370.hpp b/include/Unknown/UnkStruct_020e9370.hpp new file mode 100644 index 00000000..a4047da1 --- /dev/null +++ b/include/Unknown/UnkStruct_020e9370.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_020e9370 { +public: + /* 000 */ unk8 mUnk_000[0x900]; + /* 900 */ unk32 mUnk_900; + /* 904 */ unk32 mUnk_904; + /* 908 */ unk16 mUnk_908; + /* 90a */ unk16 mUnk_90a; + /* 90c */ unk32 mUnk_90c; + /* 910 */ unk32 mUnk_910; + /* 914 */ unk32 mUnk_914; + + UnkStruct_020e9370(); +}; + +extern UnkStruct_020e9370 data_ov000_020e9370; diff --git a/include/Unknown/UnkStruct_020ec7dc.hpp b/include/Unknown/UnkStruct_020ec7dc.hpp new file mode 100644 index 00000000..47a0e0d5 --- /dev/null +++ b/include/Unknown/UnkStruct_020ec7dc.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include "global.h" +#include "types.h" + +#include "Game/GameMode.hpp" + +class UnkStruct_020ec7dc_00 { +public: + /* 00 */ u16 mUnk_00[0xA]; + /* 0a */ +}; + +class UnkStruct_020ec7dc { +public: + /* 00 */ UnkStruct_020ec7dc_00 mUnk_00[3]; + /* 3c */ unk8 mUnk_3c[4]; + /* 40 */ + + UnkStruct_020ec7dc(); + + void func_ov000_0207c170(); + void func_ov000_0207c0f0(GameModeId modeId); +}; + +extern UnkStruct_020ec7dc data_ov000_020ec7dc; diff --git a/include/Unknown/UnkStruct_020ee0a0.hpp b/include/Unknown/UnkStruct_020ee0a0.hpp new file mode 100644 index 00000000..b6ecf3da --- /dev/null +++ b/include/Unknown/UnkStruct_020ee0a0.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_020ee0a0 { +public: + /* 00 */ unk8 mUnk_00; + /* 00 */ unk8 mUnk_01; + /* 02 */ unk16 mUnk_02; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0c */ unk32 mUnk_0c; + /* 10 */ unk32 mUnk_10; + /* 14 */ unk32 mUnk_14[8]; + /* 34 */ unk32 mUnk_34; + /* 38 */ unk32 mUnk_38; + /* 3c */ unk32 mUnk_3c; + /* 40 */ unk32 mUnk_40; + /* 44 */ unk8 mUnk_44; + /* 45 */ unk8 mUnk_45; + /* 46 */ unk8 mUnk_46; + /* 47 */ unk8 mUnk_47; + + UnkStruct_020ee0a0(); + + void func_ov008_021135b8(); +}; + +extern UnkStruct_020ee0a0 data_ov000_020ee0a0; diff --git a/include/Unknown/UnkStruct_020ee698.hpp b/include/Unknown/UnkStruct_020ee698.hpp new file mode 100644 index 00000000..a0a47dbf --- /dev/null +++ b/include/Unknown/UnkStruct_020ee698.hpp @@ -0,0 +1,34 @@ +#pragma once + +#include "global.h" +#include "types.h" + +extern "C" void Fill16(int value, unsigned short *dst, int size); + +class UnkStruct_020ee698_0c { +public: + /* 00 */ u16 mUnk_00[15]; + /* 2c */ unk32 mUnk_2c; + /* 30 */ + + UnkStruct_020ee698_0c() { + this->mUnk_2c = 4; + Fill16(0, this->mUnk_00, sizeof(this->mUnk_00)); + } +}; + +class UnkStruct_020ee698 { +public: + /* 00 */ unk8 mUnk_00; + /* 01 */ unk8 mUnk_01; + /* 02 */ unk16 mUnk_02; + /* 04 */ u16 mUnk_04; + /* 04 */ unk16 mUnk_06; + /* 08 */ unk32 mUnk_08; + /* 0c */ UnkStruct_020ee698_0c mUnk_0c; + /* 30 */ + + UnkStruct_020ee698(); +}; + +extern UnkStruct_020ee698 data_ov000_020ee698; diff --git a/include/Unknown/UnkStruct_020ee6f8.hpp b/include/Unknown/UnkStruct_020ee6f8.hpp new file mode 100644 index 00000000..280eeee4 --- /dev/null +++ b/include/Unknown/UnkStruct_020ee6f8.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include "Unknown/UnkStruct_func_0201f704.hpp" +#include "global.h" +#include "types.h" + +class UnkStruct_020ee6f8_18 { +public: + /* 00 */ unk32 mUnk_00; + /* 00 */ unk32 mUnk_04; + /* 08 */ +}; + +class UnkStruct_020ee6f8 { +public: + /* 00 */ UnkStruct_func_0201f704 mUnk_00; + /* 04 */ bool mUnk_04; + /* 04 */ unk8 mUnk_05; + /* 04 */ unk8 mUnk_06; + /* 04 */ unk8 mUnk_07; + /* 08 */ unk32 mUnk_08; + /* 0c */ unk32 mUnk_0c; + /* 10 */ unk32 mUnk_10; + /* 14 */ unk32 mUnk_14; + /* 18 */ UnkStruct_020ee6f8_18 mUnk_18[3]; + /* 30 */ unk32 mUnk_30; + /* 34 */ unk32 mUnk_34; + /* 38 */ bool mUnk_38; + + UnkStruct_020ee6f8(); +}; + +extern UnkStruct_020ee6f8 data_ov000_020ee6f8; diff --git a/include/Unknown/UnkStruct_020ee734.hpp b/include/Unknown/UnkStruct_020ee734.hpp index c5d3523c..9b958c9f 100644 --- a/include/Unknown/UnkStruct_020ee734.hpp +++ b/include/Unknown/UnkStruct_020ee734.hpp @@ -5,10 +5,35 @@ #include "Game/Game.hpp" -struct UnkStruct_020ee734 { +class UnkStruct_020ee734 { +public: + /* 00 */ unk8 mUnk_00[0x90]; + /* 90 */ u32 *mUnk_90; + /* 94 */ unk8 mUnk_94; + /* 95 */ unk8 mUnk_95; + /* 96 */ unk8 mUnk_96; + /* 97 */ unk8 mUnk_97; + /* 98 */ bool mUnk_98; + /* 99 */ unk8 mUnk_99; + /* 9a */ unk8 mUnk_9a; + /* 9b */ unk8 mUnk_9b; + /* 9c */ unk32 mUnk_9c; + /* a0 */ unk32 mUnk_a0; + /* a4 */ unk32 mUnk_a4; + /* a8 */ unk8 mUnk_a8; + /* a9 */ unk8 mUnk_a9; + /* aa */ unk8 mUnk_aa; + /* ab */ unk8 mUnk_ab; + /* ac */ unk32 mUnk_ac[8]; + /* cc */ + + UnkStruct_020ee734(); + void func_ov000_020d6488(); void func_ov000_020d6620(void); void func_ov000_020d6438(GameModeId modeId); + + void func_ov008_021131ac(void); }; extern UnkStruct_020ee734 data_ov000_020ee734; diff --git a/include/Unknown/UnkStruct_020ee820.hpp b/include/Unknown/UnkStruct_020ee820.hpp new file mode 100644 index 00000000..61b864ad --- /dev/null +++ b/include/Unknown/UnkStruct_020ee820.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_020ee820_04 { +public: + /* 00 */ unk32 mUnk_00; + + void func_020156b4(); +}; + +class UnkStruct_020ee820 { +public: + /* 00 */ bool mUnk_00; + /* 01 */ unk8 mUnk_01; + /* 02 */ unk8 mUnk_02; + /* 03 */ unk8 mUnk_03; + /* 04 */ UnkStruct_020ee820_04 mUnk_04; + /* 08 */ unk32 *mUnk_08; + /* 0c */ unk32 mUnk_0c; + /* 10 */ unk32 mUnk_10; + /* 14 */ unk32 mUnk_14; + /* 18 */ unk32 mUnk_18; + /* 1c */ unk32 mUnk_1c; + /* 20 */ unk32 mUnk_20; + /* 24 */ unk8 mUnk_24[0x40 - 0x24]; + /* 40 */ unk32 mUnk_40[256]; + + UnkStruct_020ee820(); + + void func_ov000_020d69d4(unk32); + void func_ov000_020d69e4(); + + void func_ov008_021133f0(); +}; + +extern UnkStruct_020ee820 data_ov000_020ee820; diff --git a/include/Unknown/UnkStruct_020eec60.hpp b/include/Unknown/UnkStruct_020eec60.hpp new file mode 100644 index 00000000..e9f8f657 --- /dev/null +++ b/include/Unknown/UnkStruct_020eec60.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_020eec60 { +public: + /* 00 */ bool mUnk_00; + /* 01 */ unk8 mUnk_01; + /* 02 */ unk16 mUnk_02; + + UnkStruct_020eec60(); + + void func_ov008_02113474(); +}; + +extern UnkStruct_020eec60 data_ov000_020eec60; diff --git a/include/Unknown/UnkStruct_020eec68.hpp b/include/Unknown/UnkStruct_020eec68.hpp new file mode 100644 index 00000000..d8bf62d4 --- /dev/null +++ b/include/Unknown/UnkStruct_020eec68.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include "Unknown/UnkStruct_func_0201f704.hpp" +#include "global.h" +#include "types.h" + +struct UnkStruct_020eec68_0c { + unk32 mUnk_00; + + void func_02021a1c(); +}; + +class UnkStruct_020eec68 { +public: + /* 00 */ UnkStruct_func_0201f704 mUnk_00[3]; + /* 0c */ UnkStruct_020eec68_0c mUnk_0c; + /* 10 */ unk8 mUnk_10; + /* 11 */ unk8 mUnk_11; + /* 12 */ unk8 mUnk_12; + /* 13 */ unk8 mUnk_13; + /* 14 */ unk8 mUnk_14; + /* 15 */ unk8 mUnk_15; + /* 16 */ unk8 mUnk_16; + /* 17 */ unk8 mUnk_17; + /* 18 */ unk32 mUnk_18; + /* 1c */ unk32 mUnk_1c; + /* 20 */ unk32 mUnk_20; + /* 24 */ unk32 mUnk_24; + /* 28 */ unk32 mUnk_28; + /* 2c */ unk32 mUnk_2c; + + UnkStruct_020eec68(); + + void func_ov008_021132cc(); +}; + +extern UnkStruct_020eec68 data_ov000_020eec68; diff --git a/include/Unknown/UnkStruct_020eec9c.hpp b/include/Unknown/UnkStruct_020eec9c.hpp new file mode 100644 index 00000000..9fce4067 --- /dev/null +++ b/include/Unknown/UnkStruct_020eec9c.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include "Unknown/UnkStruct_func_0201f704.hpp" +#include "global.h" +#include "types.h" + +struct UnkStruct_020eec9c_28 { + /* 00 */ unk32 mUnk_00; + /* 04 */ unk16 mUnk_04; + /* 06 */ unk8 mUnk_06; + /* 07 */ unk8 mUnk_07; + /* 08 */ UnkStruct_func_0201f704 mUnk_08; + /* 0c */ +}; + +class UnkStruct_020eec9c { +public: + /* 00 */ UnkStruct_func_0201f704 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk8 mUnk_08; + /* 09 */ unk8 mUnk_09; + /* 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 */ unk32 mUnk_10; + /* 14 */ unk32 mUnk_14; + /* 18 */ unk32 mUnk_18; + /* 1c */ unk32 mUnk_1c; + /* 20 */ unk32 mUnk_20; + /* 24 */ unk32 mUnk_24; + /* 28 */ UnkStruct_020eec9c_28 mUnk_28[8]; + /* 88 */ unk32 mUnk_88; + + UnkStruct_020eec9c(); + + void func_ov000_020d77e4(unk32); + unk32 func_ov000_020d7f18(unk32); + void func_ov008_0211337c(); +}; + +extern UnkStruct_020eec9c data_ov000_020eec9c; diff --git a/include/Unknown/UnkStruct_020eed2c.hpp b/include/Unknown/UnkStruct_020eed2c.hpp new file mode 100644 index 00000000..1c2f3a94 --- /dev/null +++ b/include/Unknown/UnkStruct_020eed2c.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_020eed2c { +public: + /* 00 */ unk16 mUnk_00; + /* 02 */ unk16 mUnk_02; + + UnkStruct_020eed2c(); +}; + +extern UnkStruct_020eed2c data_ov000_020eed2c; diff --git a/include/Unknown/UnkStruct_027e0d54.hpp b/include/Unknown/UnkStruct_027e0d54.hpp new file mode 100644 index 00000000..4604778a --- /dev/null +++ b/include/Unknown/UnkStruct_027e0d54.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "System/SysNew.hpp" +#include "global.h" +#include "types.h" + +class UnkStruct_027e0d54_08 : public SysObject { +public: + /* 00 */ u32 mUnk_00[1]; + /* 04 */ +}; + +class UnkStruct_027e0d54 { +public: + /* 00 */ u32 mUnk_00[2]; + /* 04 */ UnkStruct_027e0d54_08 *mUnk_08; + /* 04 */ bool mUnk_0c; + /* 04 */ unk8 mUnk_0d; + /* 04 */ unk8 mUnk_0e; + /* 04 */ unk8 mUnk_0f; + /* 10 */ unk32 mUnk_10; + /* 10 */ u16 mUnk_14; + /* 10 */ unk16 mUnk_16; + + UnkStruct_027e0d54(); + + void func_ov008_02112f28(); +}; + +extern UnkStruct_027e0d54 data_027e0d54; diff --git a/include/Unknown/UnkStruct_027e0dbc.hpp b/include/Unknown/UnkStruct_027e0dbc.hpp new file mode 100644 index 00000000..2a2e077a --- /dev/null +++ b/include/Unknown/UnkStruct_027e0dbc.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_027e0dbc { +public: + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0c */ unk32 mUnk_0c; + /* 10 */ unk32 mUnk_10; + /* 14 */ unk32 mUnk_14; + /* 18 */ unk32 mUnk_18; + /* 1c */ unk32 mUnk_1c; + /* 20 */ unk32 mUnk_20; + /* 24 */ unk32 mUnk_24; + /* 28 */ unk32 mUnk_28; + /* 2c */ unk32 mUnk_2c; + + UnkStruct_027e0dbc(); + + void func_02042744(unk32 *param_1); +}; + +extern UnkStruct_027e0dbc data_027e0dbc; diff --git a/include/Unknown/UnkStruct_027e0f88.hpp b/include/Unknown/UnkStruct_027e0f88.hpp new file mode 100644 index 00000000..4ad6294b --- /dev/null +++ b/include/Unknown/UnkStruct_027e0f88.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include "System/SysNew.hpp" +#include "global.h" +#include "types.h" + +class UnkStruct_027e0f88_04 : public SysObject { +public: + /* 00 */ unk32 mUnk_00; + /* 04 */ unk16 mUnk_04; + /* 06 */ unk16 mUnk_06; + /* 08 */ unk32 mUnk_08; + /* 0c */ unk8 mUnk_0c; + /* 0d */ unk8 mUnk_0d; + /* 0e */ unk8 mUnk_0e; + /* 0f */ unk8 mUnk_0f; + /* 10 */ + + UnkStruct_027e0f88_04(); + UnkStruct_027e0f88_04(unk32 param_1, unk16 param_2, unk32 param_3, unk16 param_4, u8 param_5); + + void func_ov000_020a1b54(unk32 param_1, unk32 param_2); +}; + +class UnkStruct_027e0f88 : public SysObject { +public: + /* 00 */ unk32 mUnk_00; + /* 04 */ UnkStruct_027e0f88_04 *mUnk_04[2]; + /* 0c */ unk16 mUnk_0c; + /* 0e */ unk16 mUnk_0e; + /* 10 */ unk16 mUnk_10; + /* 12 */ unk16 mUnk_12; + /* 14 */ + + UnkStruct_027e0f88(); + UnkStruct_027e0f88(u32 *param_1); + + void func_ov000_020a1a3c(); + + static void func_ov008_02113678(u32 *param_1); + void func_ov008_021136c0(); +}; + +extern UnkStruct_027e0f88 *data_027e0f88; diff --git a/include/Unknown/UnkStruct_func_0201f704.hpp b/include/Unknown/UnkStruct_func_0201f704.hpp new file mode 100644 index 00000000..c8cd4f75 --- /dev/null +++ b/include/Unknown/UnkStruct_func_0201f704.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include "global.h" +#include "types.h" + +struct UnkStruct_func_0201f704 { + unk32 mUnk_00; + + void func_0201f704(); +}; diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp index e95326ab..d378ebe0 100644 --- a/src/00_Core/Item/ItemManager.cpp +++ b/src/00_Core/Item/ItemManager.cpp @@ -28,85 +28,85 @@ THUMB void ItemManager::ClearPrevEquippedItem() { } THUMB void ItemManager::Save(SaveItemManager *save) { - save->itemFlags = mItemFlags; - save->numRupees = mNumRupees; + save->inventory.itemFlags = mItemFlags; + save->inventory.numRupees = mNumRupees; for (s32 i = 0; i < MAX_POTIONS; ++i) { - save->potions[i] = mPotions[i]; + save->inventory.potions[i] = mPotions[i]; } - save->numBombs = (u8) (*mAmmo)[ItemFlag_BombBag]; - save->numBombchus = (u8) (*mAmmo)[ItemFlag_BombchuBag]; - save->numArrows = (u8) (*mAmmo)[ItemFlag_Bow]; - save->equippedItem = (u8) mEquippedItem; - save->salvagedTreasureFlags = mSalvagedTreasureFlags; - save->hourglassSeconds = SoftDivide(mHourglassSandFrames, 60); + save->inventory.numBombs = (u8) (*mAmmo)[ItemFlag_BombBag]; + save->inventory.numBombchus = (u8) (*mAmmo)[ItemFlag_BombchuBag]; + save->inventory.numArrows = (u8) (*mAmmo)[ItemFlag_Bow]; + save->inventory.equippedItem = (u8) mEquippedItem; + save->inventory.salvagedTreasureFlags = mSalvagedTreasureFlags; + save->inventory.hourglassSeconds = SoftDivide(mHourglassSandFrames, 60); for (s32 i = 0; i < Gem_COUNT; ++i) { - save->numGems[i] = mNumGems[i]; + save->inventory.numGems[i] = mNumGems[i]; } for (s32 i = 0; i < ShipPart_COUNT; ++i) { - save->equippedShipParts[i] = mEquippedShipParts[i]; + save->inventory.equippedShipParts[i] = mEquippedShipParts[i]; for (s32 j = 0; j < ShipType_COUNT; ++j) { - save->shipParts[i][j] = mShipParts[i][j]; + save->inventory.shipParts[i][j] = mShipParts[i][j]; } } - save->shipPartPricesShown = mShipPartPricesShown; + save->inventory.shipPartPricesShown = mShipPartPricesShown; for (s32 i = 0; i < Treasure_COUNT; ++i) { - save->treasure[i] = mTreasure[i]; + save->inventory.treasure[i] = mTreasure[i]; } - save->treasurePriceShownFlags[0] = mTreasurePriceShownFlags[0]; + save->inventory.treasurePriceShownFlags[0] = mTreasurePriceShownFlags[0]; for (s32 i = 0; i < 6; ++i) { - save->unk_9f[i] = mUnk_098[i]; - save->unk_82[i] = mUnk_09e[i]; + save->inventory.fishCount[i] = mFishCount[i]; + save->inventory.fishSize[i] = mFishSize[i]; } - save->quiverSize = mQuiverSize; - save->bombBagSize = mBombBagSize; - save->bombchuBagSize = mBombchuBagSize; + save->inventory.quiverSize = mQuiverSize; + save->inventory.bombBagSize = mBombBagSize; + save->inventory.bombchuBagSize = mBombchuBagSize; if (mEquippedFairy == FairyId_None) { - save->equippedFairy = 3; + save->inventory.equippedFairy = 3; return; } - save->equippedFairy = (u8) mEquippedFairy; + save->inventory.equippedFairy = (u8) mEquippedFairy; } THUMB void ItemManager::Load(const SaveItemManager *save) { - mItemFlags = save->itemFlags; - mNumRupees = save->numRupees; - mHourglassSandFrames = - save->hourglassSeconds <= MAX_HOURGLASS_SECONDS ? save->hourglassSeconds * 60 : MAX_HOURGLASS_SECONDS * 60; + mItemFlags = save->inventory.itemFlags; + mNumRupees = save->inventory.numRupees; + mHourglassSandFrames = save->inventory.hourglassSeconds <= MAX_HOURGLASS_SECONDS ? save->inventory.hourglassSeconds * 60 + : MAX_HOURGLASS_SECONDS * 60; for (s32 i = ItemFlag_EQUIP_START; i < ItemFlag_EQUIP_END; ++i) { if (GET_FLAG(mItemFlags.flags, (u32) i)) { (*mAmmo)[i] = 1; } } - (*mAmmo)[ItemFlag_BombBag] = save->numBombs; - (*mAmmo)[ItemFlag_BombchuBag] = save->numBombchus; - (*mAmmo)[ItemFlag_Bow] = save->numArrows; + (*mAmmo)[ItemFlag_BombBag] = save->inventory.numBombs; + (*mAmmo)[ItemFlag_BombchuBag] = save->inventory.numBombchus; + (*mAmmo)[ItemFlag_Bow] = save->inventory.numArrows; for (s32 i = 0; i < MAX_POTIONS; ++i) { - mPotions[i] = save->potions[i]; + mPotions[i] = save->inventory.potions[i]; } - mEquippedItem = save->equippedItem; - mSalvagedTreasureFlags = save->salvagedTreasureFlags; + mEquippedItem = save->inventory.equippedItem; + mSalvagedTreasureFlags = save->inventory.salvagedTreasureFlags; for (s32 i = 0; i < Gem_COUNT; ++i) { - mNumGems[i] = save->numGems[i]; + mNumGems[i] = save->inventory.numGems[i]; } for (s32 i = 0; i < ShipPart_COUNT; ++i) { - mEquippedShipParts[i] = save->equippedShipParts[i]; + mEquippedShipParts[i] = save->inventory.equippedShipParts[i]; for (s32 j = 0; j < ShipType_COUNT; ++j) { - mShipParts[i][j] = save->shipParts[i][j]; + mShipParts[i][j] = save->inventory.shipParts[i][j]; } } - mShipPartPricesShown = save->shipPartPricesShown; + mShipPartPricesShown = save->inventory.shipPartPricesShown; for (s32 i = 0; i < Treasure_COUNT; ++i) { - mTreasure[i] = save->treasure[i]; + mTreasure[i] = save->inventory.treasure[i]; } - mTreasurePriceShownFlags[0] = save->treasurePriceShownFlags[0]; + mTreasurePriceShownFlags[0] = save->inventory.treasurePriceShownFlags[0]; for (s32 i = 0; i < 6; ++i) { - mUnk_098[i] = save->unk_9f[i]; - mUnk_09e[i] = save->unk_82[i]; + mFishCount[i] = save->inventory.fishCount[i]; + mFishSize[i] = save->inventory.fishSize[i]; } - mQuiverSize = save->quiverSize; - mBombBagSize = save->bombBagSize; - mBombchuBagSize = save->bombchuBagSize; - mEquippedFairy = save->equippedFairy; + mQuiverSize = save->inventory.quiverSize; + mBombBagSize = save->inventory.bombBagSize; + mBombchuBagSize = save->inventory.bombchuBagSize; + mEquippedFairy = save->inventory.equippedFairy; if (mEquippedFairy >= FairyId_COUNT) { mEquippedFairy = FairyId_None; } @@ -289,28 +289,28 @@ THUMB void ItemManager::SetTreasureCount(Treasure treasure, s8 count) { mTreasure[treasure] = count; } -THUMB u8 ItemManager::GetUnk_098(u32 index) const { - return mUnk_098[index]; +THUMB u8 ItemManager::GetCollectedFishCount(u32 index) const { + return mFishCount[index]; } -THUMB u16 ItemManager::GetUnk_09e(u32 index) const { - return mUnk_09e[index]; +THUMB u16 ItemManager::GetFishSize(u32 index) const { + return mFishSize[index]; } -THUMB s32 ItemManager::GetUnk_09e_Divided(u32 index) const { - q20 quotient = CoDivide64By32(INT_TO_Q20(mUnk_09e[index]), FLOAT_TO_Q20(2.54)); +THUMB s32 ItemManager::GetFishSize_Divided(u32 index) const { + q20 quotient = CoDivide64By32(INT_TO_Q20(mFishSize[index]), FLOAT_TO_Q20(2.54)); s32 result = ROUND_Q20(quotient); if (result < 1) result = 1; return result; } -THUMB void ItemManager::SetUnk_09e(u32 index, u16 value) { - u8 count = mUnk_098[index] + 1; +THUMB void ItemManager::SetFishSize(u32 index, u16 value) { + u8 count = mFishCount[index] + 1; if (count > 99) count = 99; - mUnk_098[index] = count; - if (value > mUnk_09e[index]) { + mFishCount[index] = count; + if (value > mFishSize[index]) { if (value > 9999) value = 9999; - mUnk_09e[index] = value; + mFishSize[index] = value; } } diff --git a/src/00_Core/Save/SaveItemManager.cpp b/src/00_Core/Save/SaveItemManager.cpp index 8fdf2cef..5e54b8c6 100644 --- a/src/00_Core/Save/SaveItemManager.cpp +++ b/src/00_Core/Save/SaveItemManager.cpp @@ -1,3 +1,3 @@ #include "Save/SaveItemManager.hpp" -SaveItemManager::SaveItemManager() {} +void SaveInventory::Init() {} diff --git a/src/08_GameStart/GameStart.cpp b/src/08_GameStart/GameStart.cpp new file mode 100644 index 00000000..873089d8 --- /dev/null +++ b/src/08_GameStart/GameStart.cpp @@ -0,0 +1,127 @@ +#include "GameStart/GameStart.hpp" +#include "Game/Game.hpp" +#include "Game/GameMode.hpp" +#include "Save/SaveItemManager.hpp" +#include "System/OverlayManager.hpp" +#include "Unknown/UnkStruct_020e9360.hpp" +#include "Unknown/UnkStruct_020e9370.hpp" +#include "Unknown/UnkStruct_020ec7dc.hpp" +#include "Unknown/UnkStruct_020ee0a0.hpp" +#include "Unknown/UnkStruct_020ee698.hpp" +#include "Unknown/UnkStruct_020ee6f8.hpp" +#include "Unknown/UnkStruct_020ee734.hpp" +#include "Unknown/UnkStruct_020ee820.hpp" +#include "Unknown/UnkStruct_020eec60.hpp" +#include "Unknown/UnkStruct_020eec68.hpp" +#include "Unknown/UnkStruct_020eec9c.hpp" +#include "Unknown/UnkStruct_020eed2c.hpp" +#include "Unknown/UnkStruct_027e0d54.hpp" +#include "Unknown/UnkStruct_027e0dbc.hpp" +#include "Unknown/UnkStruct_027e0f88.hpp" +#include "Unknown/UnkStruct_func_0201f704.hpp" + +#pragma dont_reuse_strings off + +extern "C" { +// SDK functions +void func_02003f74(unk32); +void func_02003ce4(unk32); +void func_02004730(unk32); + +unk32 *MountCompressedNarc(char *, char *, unk8 *, unk32, unk32); +void func_02031e1c(u32 *, const char *); +void func_02027ab4(unk32, u32 *, UNK_PTR, UNK_PTR, unk32, unk32, unk32, unk32); +void func_02016fcc(unk32 *); +void func_02004ba8(); +void func_02004b94(); +void func_02004c68(); +void func_020425e0(); +void func_ov000_0207a654(unk32 *); +} + +extern unk8 data_020691a0; +extern unk32 data_ov000_020ec754; +extern unk32 data_ov000_020d8795; +extern u8 data_ov000_020d88b4[24]; + +#define REG_DISPCNT (*(u32 *) 0x04000000) +#define REG_DISPCNT_SUB (*(u32 *) 0x04001000) +#define FRAME_COUNTER (*(u32 *) 0x027ffc3c) + +ARM GameStart *GameStart::Create(GameModeId modeId) { + return new(data_027e0ce0[1], 4) GameStart(modeId); +} + +ARM GameStart::GameStart(GameModeId modeId) : + GameMode(modeId) { + unk32 *uVar1; + unk32 local_14; + unk32 local_18; + u32 local_1c; + unk32 local_20; + unk32 local_24; + u32 local_28; + + this->mUnk_008 = 0; + this->mUnk_00c = 0; + + func_02003f74(1); + func_02003ce4(2); + func_02004730(4); + + REG_DISPCNT &= ~0x1F00; + REG_DISPCNT |= 0x1100; + + REG_DISPCNT_SUB &= ~0x1F00; + REG_DISPCNT_SUB |= 0x0100; + + uVar1 = MountCompressedNarc("NLG", "Menu/Bg/NintendoLogo.bin", &data_020691a0, 0xCC00, 1); + func_02031e1c(&local_28, "NLG:nLogo"); + func_02031e1c(&local_1c, "NLG:rightTxt"); + func_02027ab4(0, &local_28, &local_24, &local_20, 0, 0, 0, 2); + func_02027ab4(4, &local_1c, &local_18, &local_14, 0, 0, 0, 2); + func_02016fcc(uVar1); +} + +ARM GameStart::~GameStart() { + func_02004ba8(); + func_02004b94(); + func_02004c68(); +} + +ARM GameModeId GameStart::vfunc_08(bool param1) { + GameModeId mode = GameModeId_Load; + + switch (gGame.mFadeControl.mState) { + case 1: + if (!param1) { + this->mUnk_008++; + if (this->mUnk_008 == 1) { + this->mUnk_00c = FRAME_COUNTER; + } else { + if (this->mUnk_008 == 2 && gGame.mPrevModeId == 1) { + GameStart::func_ov008_02112e88(); + } + if (FRAME_COUNTER - this->mUnk_00c >= 60) { + gGame.func_0202cec8(1, 0); + } + } + } + break; + case 0: mode = GameModeId_Adventure; break; + default: break; + } + + return mode; +} + +ARM void GameStart::vfunc_10(u16 *param1) {} + +ARM void GameStart::func_ov008_02112e88() { + func_020425e0(); + gOverlayManager.Load(OverlayIndex_Core, OverlayId_Core); + data_ov000_020ee734.func_ov008_021131ac(); + data_027e0d54.func_ov008_02112f28(); + UnkStruct_027e0f88::func_ov008_02113678(data_027e0ce0[0]); + func_ov000_0207a654(&data_ov000_020ec754); +} diff --git a/src/08_GameStart/Init.cpp b/src/08_GameStart/Init.cpp new file mode 100644 index 00000000..254b1934 --- /dev/null +++ b/src/08_GameStart/Init.cpp @@ -0,0 +1,529 @@ +#include "Player/TouchControl.hpp" +#include "Save/SaveItemManager.hpp" +#include "Unknown/UnkStruct_020e9360.hpp" +#include "Unknown/UnkStruct_020e9370.hpp" +#include "Unknown/UnkStruct_020ec7dc.hpp" +#include "Unknown/UnkStruct_020ee0a0.hpp" +#include "Unknown/UnkStruct_020ee698.hpp" +#include "Unknown/UnkStruct_020ee6f8.hpp" +#include "Unknown/UnkStruct_020ee734.hpp" +#include "Unknown/UnkStruct_020ee820.hpp" +#include "Unknown/UnkStruct_020eec60.hpp" +#include "Unknown/UnkStruct_020eec68.hpp" +#include "Unknown/UnkStruct_020eec9c.hpp" +#include "Unknown/UnkStruct_020eed2c.hpp" +#include "Unknown/UnkStruct_027e0d54.hpp" +#include "Unknown/UnkStruct_027e0dbc.hpp" +#include "Unknown/UnkStruct_027e0f88.hpp" + +extern "C" { +void func_0200a23c(); +void func_0200a318(u8 *); +unk32 func_0200dd94(); +unk32 func_0200a284(u8 *); +u16 func_ov001_020efdac(); +void *NewEXPH(char *id, s32 length, s32 param_3); +unk32 func_ov000_020773c0(); +void func_020174a4(u32 *, void *); +void func_0201f378(); +void func_0202019c(void *, const char *, u32 *, unk32); +void func_020213f0(u32 *); +void func_02021714(unk32, u32 *); +void func_020209a4(unk32, u32 *); +void func_0201f1ac(u32 *); +void func_0201f96c(unk32, unk32); +void Fill256(int value, int *dst, int size); +void Fill32(unk32, u32 *, unk32); +void Fill(unsigned char *dst, int value, int size); +void func_0200afac(); +void func_0200b4dc(unk32); +void func_0200aa20(); +void func_02015718(); +unk16 func_0200c76c(); +void func_020400f4(u16); +void func_02040100(u16); +unk32 func_02040528(unk32); +unk32 func_020400c0(); +unk32 func_02040464(unk32, u16 *, unk32, unk32, unk32, unk32, unk32, unk32, unk32); +} + +extern unk32 data_ov000_020d8795; +extern u8 data_ov000_020d88b4[24]; + +#define FRAME_COUNTER (*(u32 *) 0x027ffc3c) + +// --- data_027e0d54 --- +ARM UnkStruct_027e0d54::UnkStruct_027e0d54() { + Fill32(0, this->mUnk_00, sizeof(this->mUnk_00)); + + this->mUnk_08 = NULL; + this->mUnk_0c = 1; + this->mUnk_0d = 0; + this->mUnk_0e = 0; + this->mUnk_0f = 0; + this->mUnk_10 = 0; + this->mUnk_14 = 0; + this->mUnk_16 = 0; +} + +ARM void UnkStruct_027e0d54::func_ov008_02112f28() { + unk16 local_e; + u16 local_2a; // sp, #0x16 + u16 local_2c; // sp, #0x14 + bool bVar1; + u16 auStack_28[13]; + + UnkStruct_027e0d54_08 *pUnk_00 = new(data_027e0ce0[0], 4) UnkStruct_027e0d54_08(); + + if (pUnk_00 != NULL) { + // why?? + Fill32(0, pUnk_00->mUnk_00, sizeof(pUnk_00)); + Fill32(0, pUnk_00->mUnk_00, sizeof(pUnk_00)); + } + + this->mUnk_08 = pUnk_00; + this->mUnk_14 = func_0200c76c(); + func_020400f4(this->mUnk_14); + + local_2c = 0x21; + local_2a = 0; + local_e = 0; + bVar1 = true; + + Fill16(0, auStack_28, sizeof(auStack_28)); + + if (func_02040528(0x1302) == 0) { + this->mUnk_10 = func_020400c0(); + } else { + if (func_02040464(0x7EA00, &local_2c, 0x20, 0, 0, 0, 6, 1, 0) == 0) { + this->mUnk_10 = func_020400c0(); + } else { + unk32 sVar6 = 0xC2E4; + bool bVar10 = local_2a == 0xC2E4; + unk32 sVar3 = local_2a; + // unk16 sVar3; + // unk32 sVar6; + // bool bVar1 = false; + + // if (local_2a == 0xC2E4 || local_e != 0x1D3F) { + // sVar3 = local_e; + // sVar6 = 0x1D3F; + // } + + if (bVar10) { + sVar6 = 0x1D3F; + sVar3 = local_e; + } + + // bool bVar2 = sVar3 != sVar6; + // if (!bVar10 || bVar2) { + // sVar6 = 0x1; + // } + + bool uVar4 = 1; + if (bVar10 && !(sVar3 != 0x1D3F)) { + uVar4 = 0x0; + } + + this->mUnk_0c = uVar4; + + if (local_2c != 0x21) { + bVar1 = false; + } + } + } + + func_02040100(this->mUnk_14); + + if (this->mUnk_10 != 0) { + this->mUnk_0f = 1; + } + + if (!this->mUnk_0c && bVar1) { + this->mUnk_0c = true; + } +} + +// --- gTouchControl --- +ARM TouchControl::TouchControl() { + u8 auStack_10[8]; + + this->Init(); + func_0200a23c(); + + if (func_0200dd94() != 0) { + func_0200a318(NULL); + } else { + if (func_0200a284(auStack_10) != 0) { + func_0200a318(auStack_10); + } + } +} + +// --- data_ov000_020ee698 --- +ARM UnkStruct_020ee698::UnkStruct_020ee698() : + mUnk_00(0), + mUnk_02(0), + mUnk_04(func_ov001_020efdac()), + mUnk_08(0x0D) { + void *newHeap = NewEXPH((char *) data_027e0ce0[1], 0x700, 0x20); + + if (func_ov000_020773c0() == 3) { + this->mUnk_00 = 1; + } + + func_020174a4(data_027e0ce0[1], newHeap); +} + +// --- data_ov000_020ee734 --- +ARM UnkStruct_020ee734::UnkStruct_020ee734() { + this->mUnk_90 = 0; + this->mUnk_94 = 1; + this->mUnk_95 = 0; + this->mUnk_96 = 0; + this->mUnk_97 = 0; + this->mUnk_98 = 0; + this->mUnk_99 = 0; + this->mUnk_9a = 0; + this->mUnk_9c = 0; + this->mUnk_a0 = 0; + this->mUnk_a4 = -1; + this->mUnk_a8 = 0; + this->mUnk_a9 = 0; + + for (s32 i = 0; i < ARRAY_LEN(this->mUnk_ac); i++) { + this->mUnk_ac[i] = 0; + } +} + +ARM void UnkStruct_020ee734::func_ov008_021131ac() { + if (func_0200dd94() == 0 && !this->mUnk_98) { + func_0201f378(); + this->mUnk_90 = data_027e0ce0[3]; + func_0202019c(this, "SoundData/final_sound_data.sdat", data_027e0ce0[3], 0); + func_020213f0(this->mUnk_90); + func_02021714(9, this->mUnk_90); + func_020209a4(1, this->mUnk_90); + func_0201f1ac(this->mUnk_90); + this->mUnk_ac[1] = 1; + + data_ov000_020eec68.func_ov008_021132cc(); + data_ov000_020eec9c.func_ov008_0211337c(); + data_ov000_020ee820.func_ov008_021133f0(); + data_ov000_020eec60.func_ov008_02113474(); + data_ov000_020ee820.func_ov000_020d69e4(); + + for (s32 i = 0; i < 16; i++) { + func_0201f96c(i, 0); + } + + this->mUnk_98 = 1; + } +} + +// --- data_ov000_020eec68 --- +ARM UnkStruct_020eec68::UnkStruct_020eec68() { + this->mUnk_10 = 0; + this->mUnk_11 = 0; + this->mUnk_12 = 0; + this->mUnk_13 = 0; + this->mUnk_14 = 0; + this->mUnk_15 = 0; + this->mUnk_16 = 0; + this->mUnk_18 = 0; + this->mUnk_1c = 0; + this->mUnk_20 = -1; + this->mUnk_24 = 0; + this->mUnk_28 = 0x7FFFFFFF; + this->mUnk_2c = 0x7F; +} + +ARM void UnkStruct_020eec68::func_ov008_021132cc() { + for (s32 i = 0; i < ARRAY_LEN(this->mUnk_00); i++) { + this->mUnk_00[i].func_0201f704(); + } + + this->mUnk_0c.func_02021a1c(); + this->mUnk_11 = 1; + this->mUnk_12 = 0; + this->mUnk_10 = 1; +} + +// --- data_ov000_020eec9c --- +ARM UnkStruct_020eec9c::UnkStruct_020eec9c() { + this->mUnk_04 = 0; + this->mUnk_08 = 0; + this->mUnk_09 = 0; + this->mUnk_0a = 1; + this->mUnk_0b = 0; + this->mUnk_0c = 0; + this->mUnk_10 = 0; + this->mUnk_14 = -1; + this->mUnk_18 = -1; + this->mUnk_1c = 0; + this->mUnk_20 = 0; + this->mUnk_24 = -1; + + UnkStruct_020eec9c_28 *pUnk_28 = &this->mUnk_28[0]; + do { + pUnk_28->mUnk_00 = 0; + pUnk_28->mUnk_04 = 0; + pUnk_28->mUnk_06 = 0; + pUnk_28->mUnk_07 = 0; + pUnk_28++; + } while (pUnk_28 < &this->mUnk_28[ARRAY_LEN(this->mUnk_28)]); + + this->mUnk_88 = 0; +} + +ARM void UnkStruct_020eec9c::func_ov008_0211337c() { + if (func_0200dd94() != 0) { + return; + } + + this->mUnk_00.func_0201f704(); + + UnkStruct_020eec9c_28 *pUnk_28 = &this->mUnk_28[0]; + for (s32 i = 0; i < 8; i++) { + pUnk_28->mUnk_08.func_0201f704(); + pUnk_28++; + } +} + +// --- data_ov000_020ee820 --- +ARM UnkStruct_020ee820::UnkStruct_020ee820() { + this->mUnk_00 = false; + this->mUnk_01 = 0; + this->mUnk_02 = 0; + this->mUnk_20 = -1; + Fill256(0, this->mUnk_40, sizeof(this->mUnk_40)); +} + +ARM void UnkStruct_020ee820::func_ov008_021133f0() { + if (this->mUnk_00) { + return; + } + + func_0200aa20(); + this->mUnk_04.mUnk_00 = 0; + this->mUnk_08 = this->mUnk_40; + this->mUnk_0c = sizeof(this->mUnk_40); + this->mUnk_10 = 0x105D; + this->mUnk_14 = 1; + this->mUnk_18 = 0; + this->mUnk_1c = 0; + func_0200afac(); + func_0200b4dc(1); + this->func_ov000_020d69d4(2); + this->mUnk_00 = true; +} + +// --- data_ov000_020eec60 --- +ARM UnkStruct_020eec60::UnkStruct_020eec60() { + this->mUnk_00 = false; + this->mUnk_01 = 0; + this->mUnk_02 = 0; +} + +ARM void UnkStruct_020eec60::func_ov008_02113474() { + if (data_ov000_020ee820.mUnk_00 && !this->mUnk_00) { + data_ov000_020ee820.mUnk_04.func_020156b4(); + this->mUnk_00 = true; + } + + func_02015718(); +} + +// --- data_ov000_020ee6f8 --- +ARM UnkStruct_020ee6f8::UnkStruct_020ee6f8() { + this->mUnk_04 = false; + this->mUnk_08 = 0x10; + this->mUnk_0c = 0x10; + this->mUnk_10 = 0; + this->mUnk_14 = 0; + + UnkStruct_020ee6f8_18 *pUnk_18 = &this->mUnk_18[0]; + do { + pUnk_18->mUnk_00 = -1; + pUnk_18->mUnk_04 = -1; + pUnk_18++; + } while (pUnk_18 < &this->mUnk_18[ARRAY_LEN(this->mUnk_18)]); + + this->mUnk_38 = false; + this->mUnk_00.func_0201f704(); + this->mUnk_38 = true; +} + +// --- data_ov000_020ee0a0 --- +ARM UnkStruct_020ee0a0::UnkStruct_020ee0a0() { + this->mUnk_00 = 0; + this->mUnk_02 = 0x7FFF; + this->mUnk_04 = 0; + this->mUnk_08 = 6; + this->mUnk_0c = 0xA0; + this->mUnk_10 = 0x1F; + this->mUnk_34 = -1; + this->mUnk_38 = 6; + this->mUnk_3c = 0xA0; + this->mUnk_40 = 0x1F; + this->mUnk_44 = 0; + this->mUnk_45 = 0x1F; + this->mUnk_46 = 0x1F; + this->mUnk_47 = 0x1F; + + s32 uVar5 = 0x0; + s32 iVar2 = 0x4; + s32 iVar3 = 0x8; + s32 iVar4 = 0xc; + + for (s32 iVar6 = 0; iVar6 < ARRAY_LEN(this->mUnk_14); iVar6++) { + s32 iVar1 = iVar6 * 0x4; + iVar6 = iVar6 + 0x1; + this->mUnk_14[iVar1] = uVar5 | iVar2 << 8 | iVar3 << 16 | iVar4 << 24; + iVar2 = iVar2 + 0x10; + uVar5 = uVar5 + 0x10; + iVar3 = iVar3 + 0x10; + iVar4 = iVar4 + 0x10; + } +} + +ARM void UnkStruct_020ee0a0::func_ov008_021135b8() {} + +// --- data_027e0f88 --- +ARM UnkStruct_027e0f88::UnkStruct_027e0f88(u32 *param_1) { + this->mUnk_00 = 2; + this->mUnk_0e = 0; + this->mUnk_10 = 0x1000; + this->mUnk_12 = 0; + + for (s32 i = 0; i < ARRAY_LEN(this->mUnk_04); i++) { + if (i < this->mUnk_00) { + this->mUnk_04[i] = new(param_1, 4) UnkStruct_027e0f88_04(i, 0x7FFF, 0x2000, ~0x1FFF, 1); + } else { + this->mUnk_04[i] = NULL; + } + + this->mUnk_04[i]->mUnk_0c = 0; + } + + this->func_ov000_020a1a3c(); +} + +ARM void UnkStruct_027e0f88::func_ov008_02113678(u32 *param_1) { + if (data_027e0f88 != NULL) { + return; + } + + data_027e0f88 = new(param_1, 4) UnkStruct_027e0f88(param_1); +} + +ARM UnkStruct_027e0f88_04::UnkStruct_027e0f88_04(unk32 param_1, unk16 param_2, unk32 param_3, unk16 param_4, u8 param_5) { + this->mUnk_00 = param_1; + this->mUnk_04 = param_5; + this->mUnk_06 = param_2; + this->func_ov000_020a1b54(param_4, param_5); +} + +// --- data_ov000_020eed2c --- +ARM UnkStruct_020eed2c::UnkStruct_020eed2c() { + this->mUnk_00 = 0; + this->mUnk_02 = 0; +} + +// --- data_027e0dbc --- +ARM UnkStruct_027e0dbc::UnkStruct_027e0dbc() { + this->mUnk_1c = 0; + this->mUnk_20 = FRAME_COUNTER; + this->mUnk_24 = 0; + this->func_02042744(&this->mUnk_10); +} + +// --- gSaveItemManager --- +ARM SaveItemManager::SaveItemManager() { + Fill32(0, this->unk_e9c, sizeof(this->unk_e9c)); + Fill32(0, this->unk_ea4, sizeof(this->unk_ea4)); + this->unk_cec.func_ov000_0207a3e4(); + Fill32(0, this->unk_eb0, sizeof(this->unk_eb0)); + Fill32(0, this->unk_eb8, sizeof(this->unk_eb8)); + Fill32(0, this->unk_eb8, sizeof(this->unk_eb8)); + this->func_ov000_0207a418(); + Fill256(0, this->unk_1400, sizeof(this->unk_1400)); + + SaveItemManager_2580 *pUnk_2580 = &this->unk_2580[0]; + do { + Fill16(0, pUnk_2580->mUnk_00, sizeof(pUnk_2580->mUnk_00)); + pUnk_2580++; + } while (pUnk_2580 < &this->unk_2580[ARRAY_LEN(this->unk_2580)]); + + this->unk_2840.func_ov000_0207a4f0(); + this->unk_2400.func_ov000_0207a5ac(); + + UnkStruct_020ec7dc_00 *pUnk_2900 = &this->unk_2900.mUnk_00[0]; + do { + Fill16(0, pUnk_2900->mUnk_00, sizeof(pUnk_2900->mUnk_00)); + pUnk_2900++; + } while (pUnk_2900 < &this->unk_2900.mUnk_00[ARRAY_LEN(this->unk_2900.mUnk_00)]); + + this->unk_2900.func_ov000_0207c170(); + Fill32(0, (u32 *) this->unk_2900.mUnk_3c, sizeof(this->unk_2900.mUnk_3c)); + this->unk_2940.func_ov000_0207a6d0(); + this->unk_29c0 = 0; +} + +ARM SaveItemManager_d1c::~SaveItemManager_d1c() {} + +ARM SaveItemManager_d1c::SaveItemManager_d1c() {} + +ARM SaveItemManager_2f8::~SaveItemManager_2f8() {} + +ARM SaveItemManager_2f8::SaveItemManager_2f8() { + Fill32(0, this->mUnk_00, sizeof(this->mUnk_00)); + Fill32(0, this->mUnk_08, sizeof(this->mUnk_08)); + Fill32(0, this->mUnk_00, sizeof(this->mUnk_00)); + Fill32(0, this->mUnk_08, sizeof(this->mUnk_08)); +} + +ARM SaveItemManager_f8::~SaveItemManager_f8() {} + +ARM SaveItemManager_f8::SaveItemManager_f8() { + Fill32(0, this->mUnk_00, sizeof(this->mUnk_00) / 2); // ? + Fill32(0, this->mUnk_00, sizeof(this->mUnk_00)); +} + +// --- data_ov000_020e9370 --- +ARM UnkStruct_020e9370::UnkStruct_020e9370() { + this->mUnk_900 = 0; + this->mUnk_904 = 0; + this->mUnk_908 = 0; + this->mUnk_90a = 0; + this->mUnk_90c = 320; + this->mUnk_910 = 480; + this->mUnk_914 = 2; +} + +// --- data_ov000_020e9360 --- +ARM UnkStruct_020e9360::UnkStruct_020e9360() { + unk32 val1 = data_ov000_020d8795; + u8 *val2 = data_ov000_020d88b4; + + this->mUnk_00 = val2; + this->mUnk_0f = val1; + + Fill(this->mUnk_04, 0, sizeof(this->mUnk_04)); + + for (s32 i = 0; i < ARRAY_LEN(this->mUnk_04); i++) { + this->mUnk_04[i] = this->mUnk_00[i * 2 + 1]; + } +} + +// --- data_ov000_020ec7dc --- +ARM UnkStruct_020ec7dc::UnkStruct_020ec7dc() { + UnkStruct_020ec7dc_00 *pUnk_00 = &this->mUnk_00[0]; + do { + Fill16(0, pUnk_00->mUnk_00, sizeof(pUnk_00->mUnk_00)); + pUnk_00++; + } while (pUnk_00 < &this->mUnk_00[ARRAY_LEN(this->mUnk_00)]); + + this->func_ov000_0207c170(); + this->mUnk_3c[0] = 0; +} diff --git a/src/Main/Game/Game.cpp b/src/Main/Game/Game.cpp index 9e741291..fcbd4097 100644 --- a/src/Main/Game/Game.cpp +++ b/src/Main/Game/Game.cpp @@ -12,6 +12,7 @@ #include "System/OverlayManager.hpp" #include "Unknown/UnkStruct_0203dae0.hpp" #include "Unknown/UnkStruct_02075dac.hpp" +#include "Unknown/UnkStruct_020ec7dc.hpp" #include "Unknown/UnkStruct_020ee734.hpp" #define FRAME_COUNTER (*(u32 *) 0x027ffc3c) @@ -25,7 +26,6 @@ extern unk32 data_02068ed0; extern unk32 data_02068e64; extern unk32 data_02062d4c; extern unk32 data_020683f4; -extern unk32 data_ov000_020ec7dc; extern unk32 data_027e0d54; extern bool data_027e0f8c; extern unk32 data_ov009_0211e0c0; @@ -163,7 +163,8 @@ extern "C" void func_0202c0cc(); extern "C" void func_0202c128(unk32 param1, u16 param2); extern "C" void func_02017cb0(unk32 *param0, unk32 param1); extern "C" void func_02031024(unk32 *param0); -extern "C" void Fill16(unk16 value, void *dest, s32 count); +extern "C" void Fill16(int value, unsigned short *dst, int size); +; extern "C" void func_02033d40(unk32 (*param0)[]); extern "C" void func_ov000_0207c0f0(unk32 *param0, unk32 param1); extern "C" void func_ov000_0207a2e8(unk32 *param0, unk32 param1); @@ -193,11 +194,11 @@ THUMB bool Game::StartGameMode() { func_02031024(&data_020683f4); data_027e077c.Init(0); - Fill16(0, &data_027e0d04, 6); + Fill16(0, (u16 *) &data_027e0d04, 6); func_02033d40(&data_027e0c38); data_027e05f8.Init(); if (gOverlayManager.mLoadedOverlays[0] != OverlayId_None) { - func_ov000_0207c0f0(&data_ov000_020ec7dc, mModeId); + data_ov000_020ec7dc.func_ov000_0207c0f0(mModeId); gTouchControl.Init(); data_027e0e2c.func_ov000_0207bcb4(); data_027e0db0.func_ov000_0207b288(mModeId); diff --git a/src/Main/Message/func_0203c72c.cpp b/src/Main/Message/func_0203c72c.cpp index b61c35be..85b68f7c 100644 --- a/src/Main/Message/func_0203c72c.cpp +++ b/src/Main/Message/func_0203c72c.cpp @@ -7,7 +7,7 @@ #include "System/SysNew.hpp" #include "global.h" -extern "C" void func_0204f614(UnkClass_func_ov000_020d0644 *, unk32, unk32, void *, void *); +extern "C" void __cxa_vec_ctor(void *, unk32, unk32, void *, void *); // non-matching ARM MsgProc_Type3::MsgProc_Type3(unk32 param_2, unk16 param_3, unk32 param_4) : @@ -22,8 +22,10 @@ ARM MsgProc_Type3::MsgProc_Type3(unk32 param_2, unk16 param_3, unk32 param_4) : this->mUnk_172 = -1; this->mUnk_174 = -1; - func_0204f614(this->mUnk_180, ARRAY_LEN(this->mUnk_180), sizeof(UnkClass_func_ov000_020d0644), - UnkClass_func_ov000_020d0644::func_020d060c, this->func_0203c83c); + //! TODO: move instructions above in an inlined ctor (create a dedicated class for it). + //! The call below will be automatically generated. + __cxa_vec_ctor(this->mUnk_180, ARRAY_LEN(this->mUnk_180), sizeof(UnkClass_func_ov000_020d0644), + UnkClass_func_ov000_020d0644::func_020d060c, this->func_0203c83c); this->mUnk_180[0].func_ov000_020d0644(0x1E, 0, 0x8A, 0, 0); this->mUnk_180[1].func_ov000_020d0644(0x1E, 1, 0x8B, 0, 0); diff --git a/src/Main/System/OverlayManager.cpp b/src/Main/System/OverlayManager.cpp index 0a24f2d8..8454e27b 100644 --- a/src/Main/System/OverlayManager.cpp +++ b/src/Main/System/OverlayManager.cpp @@ -1,12 +1,8 @@ #include "System/OverlayManager.hpp" #include "Game/Game.hpp" - -struct UnkStruct_020ee698 { - /* 00 */ unk8 mUnk_00[0x2C]; - /* 2c */ unk32 mUnk_2c; - /* 30 */ -}; -extern UnkStruct_020ee698 data_ov000_020ee698; +#include "Unknown/UnkStruct_020ee698.hpp" +#include "global.h" +#include "nds/overlay.h" extern u32 *data_027e0ce0[]; extern "C" void func_ov007_02102850(u32 **); @@ -50,7 +46,7 @@ THUMB void OverlayManager::LoadGameMode(s32 mode) { } else { overlayId = pSetup->slot12Overlay; - if (mode == 6 && data_ov000_020ee698.mUnk_2c == 2) { + if (mode == 6 && data_ov000_020ee698.mUnk_0c.mUnk_2c == 2) { overlayId = OverlayId_61; }