From 36b9d9dea418bfde388216dd2e0707c4be7f19d2 Mon Sep 17 00:00:00 2001 From: Aetias Date: Sun, 6 Jul 2025 14:47:44 +0200 Subject: [PATCH 1/3] Game 26% --- config/eur/arm9/delinks.txt | 1 + config/eur/arm9/dtcm/symbols.txt | 2 +- config/eur/arm9/itcm/symbols.txt | 2 +- config/eur/arm9/overlays/ov000/symbols.txt | 12 +- config/eur/arm9/symbols.txt | 14 +- config/usa/arm9/delinks.txt | 1 + config/usa/arm9/dtcm/symbols.txt | 2 +- config/usa/arm9/itcm/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 12 +- config/usa/arm9/symbols.txt | 14 +- include/DTCM/UnkStruct_027e05f8.hpp | 2 +- include/DTCM/UnkStruct_027e077c.hpp | 6 +- include/DTCM/UnkStruct_027e0e2c.hpp | 2 + include/DTCM/UnkStruct_027e0ffc.hpp | 3 + include/Game/Game.hpp | 28 ++- include/Message/MessageManager.hpp | 2 +- include/Message/MsgProc.hpp | 19 +- include/Player/TouchControl.hpp | 2 +- include/Render/FadeController.hpp | 2 + include/System/OverlayManager.hpp | 24 +- include/Unknown/UnkStruct_02075dac.hpp | 11 + include/Unknown/UnkStruct_020ee734.hpp | 7 + src/00_Core/Player/TouchControl.cpp | 2 +- src/Main/DTCM/UnkStruct_027e05f8_2.cpp | 2 +- src/Main/DTCM/UnkStruct_027e077c.cpp | 2 +- src/Main/Game/Game.cpp | 260 ++++++++++++++++++++- src/Main/Message/MessageManager.cpp | 2 +- src/Main/System/OverlayManager.cpp | 20 +- src/Main/Unknown/UnkStruct_0203dae0.cpp | 7 +- 29 files changed, 364 insertions(+), 101 deletions(-) create mode 100644 include/Unknown/UnkStruct_02075dac.hpp diff --git a/config/eur/arm9/delinks.txt b/config/eur/arm9/delinks.txt index 17120ecf..faed4006 100644 --- a/config/eur/arm9/delinks.txt +++ b/config/eur/arm9/delinks.txt @@ -63,6 +63,7 @@ src/Main/Unknown/UnkStruct_02063220.cpp: src/Main/Game/Game.cpp: .text start:0x0202c6c8 end:0x0202d0cc + .rodata start:0x020561f4 end:0x020562d4 src/Main/Game/GameMode.cpp: complete diff --git a/config/eur/arm9/dtcm/symbols.txt b/config/eur/arm9/dtcm/symbols.txt index 6edc5d7d..995c23fc 100644 --- a/config/eur/arm9/dtcm/symbols.txt +++ b/config/eur/arm9/dtcm/symbols.txt @@ -71,7 +71,7 @@ data_027e0698 kind:bss addr:0x027e0698 data_027e06d8 kind:bss addr:0x027e06d8 data_027e06e4 kind:bss addr:0x027e06e4 data_027e0718 kind:bss addr:0x027e0718 -data_027e071c kind:bss addr:0x027e071c +gFadeController kind:bss addr:0x027e071c gRandom kind:bss(size=0x18) addr:0x027e0764 data_027e077c kind:bss addr:0x027e077c data_027e080c kind:bss addr:0x027e080c diff --git a/config/eur/arm9/itcm/symbols.txt b/config/eur/arm9/itcm/symbols.txt index fc6a1ac1..81862c03 100644 --- a/config/eur/arm9/itcm/symbols.txt +++ b/config/eur/arm9/itcm/symbols.txt @@ -65,7 +65,7 @@ func_01ffa674 kind:function(arm,size=0xcc) addr:0x01ffa674 func_01ffa740 kind:function(arm,size=0x14) addr:0x01ffa740 func_01ffa754 kind:function(arm,size=0xa8) addr:0x01ffa754 func_01ffa7fc kind:function(arm,size=0xd8) addr:0x01ffa7fc -func_01ffa8d4 kind:function(arm,size=0x60) addr:0x01ffa8d4 +FlushGfxQueue kind:function(arm,size=0x60) addr:0x01ffa8d4 func_01ffa934 kind:function(arm,size=0x18) addr:0x01ffa934 func_01ffa94c kind:function(arm,size=0xb0) addr:0x01ffa94c PushGeometryCommand kind:function(arm,size=0xf0) addr:0x01ffa9fc diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index e39c1b5e..97208bfb 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -179,7 +179,7 @@ func_ov000_0207a908 kind:function(thumb,size=0x30) addr:0x0207a908 func_ov000_0207a938 kind:function(thumb,size=0x18) addr:0x0207a938 func_ov000_0207a950 kind:function(arm,size=0x29c) addr:0x0207a950 func_ov000_0207abec kind:function(arm,size=0x38) addr:0x0207abec -_ZN12TouchControlC2Ev kind:function(thumb,size=0x3c) addr:0x0207ac24 +_ZN12TouchControl4InitEv kind:function(thumb,size=0x3c) addr:0x0207ac24 _ZN12TouchControl13IncreaseSpeedEs kind:function(arm,size=0x18) addr:0x0207ac60 _ZN12TouchControl11UpdateFlagsEt kind:function(arm,size=0x118) addr:0x0207ac78 _ZN12TouchControl20UpdateWithStateFlagsEP15TouchStateFlagst kind:function(arm,size=0xdc) addr:0x0207ad90 @@ -199,7 +199,7 @@ func_ov000_0207b144 kind:function(thumb,size=0xa0) addr:0x0207b144 func_ov000_0207b1e4 kind:function(thumb,size=0x18) addr:0x0207b1e4 func_ov000_0207b1fc kind:function(thumb,size=0x7c) addr:0x0207b1fc func_ov000_0207b278 kind:function(thumb,size=0x10) addr:0x0207b278 -func_ov000_0207b288 kind:function(thumb,size=0x3c) addr:0x0207b288 +_ZN15Struct_027e0db019func_ov000_0207b288Ei kind:function(thumb,size=0x3c) addr:0x0207b288 func_ov000_0207b2c4 kind:function(thumb,size=0x2c) addr:0x0207b2c4 func_ov000_0207b2f0 kind:function(thumb,size=0x44) addr:0x0207b2f0 func_ov000_0207b334 kind:function(thumb,size=0x44) addr:0x0207b334 @@ -227,7 +227,7 @@ func_ov000_0207bc48 kind:function(arm,size=0x20) addr:0x0207bc48 func_ov000_0207bc68 kind:function(arm,size=0x14) addr:0x0207bc68 func_ov000_0207bc7c kind:function(thumb,size=0x1e) addr:0x0207bc7c func_ov000_0207bc9c kind:function(arm,size=0x18) addr:0x0207bc9c -func_ov000_0207bcb4 kind:function(thumb,size=0x28) addr:0x0207bcb4 +_ZN18UnkStruct_027e0e2c19func_ov000_0207bcb4Ev kind:function(thumb,size=0x28) addr:0x0207bcb4 func_ov000_0207bcdc kind:function(thumb,size=0x70) addr:0x0207bcdc func_ov000_0207bd4c kind:function(thumb,size=0x50) addr:0x0207bd4c func_ov000_0207bd9c kind:function(thumb,size=0x38) addr:0x0207bd9c @@ -3213,7 +3213,7 @@ func_ov000_020ce6b0 kind:function(arm,size=0x8) addr:0x020ce6b0 func_ov000_020ce6b8 kind:function(arm,size=0x1c) addr:0x020ce6b8 func_ov000_020ce6d4 kind:function(arm,size=0x14) addr:0x020ce6d4 func_ov000_020ce6e8 kind:function(arm,size=0x1c) addr:0x020ce6e8 -func_ov000_020ce704 kind:function(thumb,size=0x3a) addr:0x020ce704 +_ZN18UnkStruct_027e0ffc19func_ov000_020ce704Ev kind:function(thumb,size=0x3a) addr:0x020ce704 func_ov000_020ce740 kind:function(arm,size=0x1a4) addr:0x020ce740 func_ov000_020ce8e4 kind:function(arm,size=0x30) addr:0x020ce8e4 func_ov000_020ce914 kind:function(arm,size=0x5c) addr:0x020ce914 @@ -3551,8 +3551,8 @@ func_ov000_020d61b0 kind:function(arm,size=0x1e4) addr:0x020d61b0 func_ov000_020d6394 kind:function(arm,size=0x50) addr:0x020d6394 func_ov000_020d63e4 kind:function(arm,size=0x18) addr:0x020d63e4 func_ov000_020d63fc kind:function(arm,size=0x3c) addr:0x020d63fc -func_ov000_020d6438 kind:function(thumb,size=0x50) addr:0x020d6438 -func_ov000_020d6488 kind:function(thumb,size=0x24) addr:0x020d6488 +_ZN18UnkStruct_020ee73419func_ov000_020d6438Ei kind:function(thumb,size=0x50) addr:0x020d6438 +_ZN18UnkStruct_020ee73419func_ov000_020d6488Ev kind:function(thumb,size=0x24) addr:0x020d6488 func_ov000_020d64ac kind:function(arm,size=0x94) addr:0x020d64ac func_ov000_020d6540 kind:function(thumb,size=0x2c) addr:0x020d6540 func_ov000_020d656c kind:function(thumb,size=0x28) addr:0x020d656c diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index 3dfe41b7..5a4b3870 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -1431,7 +1431,7 @@ _ZN18UnkStruct_0202e1a013func_0202e58cEv kind:function(arm,size=0x40) addr:0x020 _ZN18UnkStruct_0202e1a013func_0202e5ccEv kind:function(arm,size=0xa4) addr:0x0202e5cc _ZN18UnkStruct_0202e1a013func_0202e670Ev kind:function(arm,size=0x34) addr:0x0202e670 func_0202e6a4 kind:function(thumb,size=0x8c) addr:0x0202e6a4 -_ZN18UnkStruct_027e077cC2Ei kind:function(thumb,size=0x10) addr:0x0202e730 +_ZN18UnkStruct_027e077c4InitEi kind:function(thumb,size=0x10) addr:0x0202e730 _ZN18UnkStruct_027e077c13func_0202e740Ei kind:function(arm,size=0x34) addr:0x0202e740 func_0202e774 kind:function(thumb,size=0x30) addr:0x0202e774 func_0202e7a4 kind:function(thumb,size=0x18) addr:0x0202e7a4 @@ -1790,7 +1790,7 @@ func_02036240 kind:function(arm,size=0x170) addr:0x02036240 func_020363b0 kind:function(arm,size=0x18) addr:0x020363b0 func_020363c8 kind:function(arm,size=0x74) addr:0x020363c8 _ZN14MessageManager13func_0203643cEPiPS_j kind:function(arm,size=0x54) addr:0x0203643c -_ZN14MessageManager13func_02036490Eiii kind:function(thumb,size=0x1cc) addr:0x02036490 +_ZN14MessageManager13func_02036490Ev kind:function(thumb,size=0x1cc) addr:0x02036490 _ZN14MessageManager13func_0203665cEv kind:function(thumb,size=0x4a) addr:0x0203665c func_020366a8 kind:function(arm,size=0x1c) addr:0x020366a8 _ZN14MessageManager13func_020366c4Ev kind:function(arm,size=0x3c) addr:0x020366c4 @@ -1828,7 +1828,7 @@ _ZN11BMGFileInfo13func_0203728cEi kind:function(arm,size=0x64) addr:0x0203728c _ZN9BMGGroups13func_020372f0E12BMGFileIndexs kind:function(thumb,size=0xc4) addr:0x020372f0 _ZN9BMGGroups13func_020373b4Es kind:function(thumb,size=0x36) addr:0x020373b4 _ZN9BMGGroups13func_020373ecEi kind:function(arm,size=0x60) addr:0x020373ec -_ZN18UnkStruct_027e05f8C2Ev kind:function(thumb,size=0xa) addr:0x0203744c +_ZN18UnkStruct_027e05f84InitEv kind:function(thumb,size=0xa) addr:0x0203744c _ZN18UnkStruct_027e05f813func_02037458Et kind:function(arm,size=0x28) addr:0x02037458 _ZN18UnkStruct_027e05f813func_02037480Ev kind:function(arm,size=0x10) addr:0x02037480 _ZN18UnkStruct_027e05f813func_02037490Ei kind:function(arm,size=0x24) addr:0x02037490 @@ -2005,15 +2005,15 @@ func_0203d448 kind:function(arm,size=0x1c) addr:0x0203d448 func_0203d464 kind:function(arm,size=0x4c) addr:0x0203d464 func_0203d4b0 kind:function(arm,size=0x88) addr:0x0203d4b0 func_0203d538 kind:function(arm,size=0x44) addr:0x0203d538 -func_0203d57c kind:function(thumb,size=0x44) addr:0x0203d57c -func_0203d5c0 kind:function(thumb,size=0x1a) addr:0x0203d5c0 +_ZN17UnkClass_027e0cbc13func_0203d57cEv kind:function(thumb,size=0x44) addr:0x0203d57c +_ZN17UnkClass_027e0cbc13func_0203d5c0Ev kind:function(thumb,size=0x1a) addr:0x0203d5c0 func_0203d5dc kind:function(thumb,size=0x24) addr:0x0203d5dc func_0203d600 kind:function(arm,size=0x4c) addr:0x0203d600 func_0203d64c kind:function(arm,size=0x18) addr:0x0203d64c func_0203d664 kind:function(arm,size=0x18) addr:0x0203d664 func_0203d67c kind:function(arm,size=0x1c) addr:0x0203d67c func_0203d698 kind:function(thumb,size=0x38) addr:0x0203d698 -func_0203d6d0 kind:function(thumb,size=0x6) addr:0x0203d6d0 +_ZN17UnkClass_027e0cbc13func_0203d6d0Ev kind:function(thumb,size=0x6) addr:0x0203d6d0 func_0203d6d8 kind:function(thumb,size=0x58) addr:0x0203d6d8 func_0203d730 kind:function(thumb,size=0x4c) addr:0x0203d730 func_0203d77c kind:function(arm,size=0x3c) addr:0x0203d77c @@ -2095,7 +2095,7 @@ func_0203f6dc kind:function(arm,size=0x28) addr:0x0203f6dc func_0203f704 kind:function(arm,size=0xc8) addr:0x0203f704 func_0203f7cc kind:function(arm,size=0xd0) addr:0x0203f7cc func_0203f89c kind:function(arm,size=0x68) addr:0x0203f89c -func_0203f904 kind:function(thumb,size=0x70) addr:0x0203f904 +_ZN18UnkStruct_02075dac13func_0203f904Ev kind:function(thumb,size=0x70) addr:0x0203f904 func_0203f974 kind:function(arm,size=0x44) addr:0x0203f974 func_0203f9b8 kind:function(arm,size=0x9c) addr:0x0203f9b8 func_0203fa54 kind:function(arm,size=0x2c) addr:0x0203fa54 diff --git a/config/usa/arm9/delinks.txt b/config/usa/arm9/delinks.txt index d20da38e..7b78a04d 100644 --- a/config/usa/arm9/delinks.txt +++ b/config/usa/arm9/delinks.txt @@ -63,6 +63,7 @@ src/Main/Unknown/UnkStruct_02063220.cpp: src/Main/Game/Game.cpp: .text start:0x0202c6b0 end:0x0202d0b4 + .rodata start:0x020561b0 end:0x02056290 src/Main/Game/GameMode.cpp: complete diff --git a/config/usa/arm9/dtcm/symbols.txt b/config/usa/arm9/dtcm/symbols.txt index 1c691b67..f2c6013e 100644 --- a/config/usa/arm9/dtcm/symbols.txt +++ b/config/usa/arm9/dtcm/symbols.txt @@ -71,7 +71,7 @@ data_027e0698 kind:bss addr:0x027e0698 data_027e06d8 kind:bss addr:0x027e06d8 data_027e06e4 kind:bss addr:0x027e06e4 data_027e0718 kind:bss addr:0x027e0718 -data_027e071c kind:bss addr:0x027e071c +gFadeController kind:bss addr:0x027e071c gRandom kind:bss addr:0x027e0764 data_027e077c kind:bss addr:0x027e077c data_027e080c kind:bss addr:0x027e080c diff --git a/config/usa/arm9/itcm/symbols.txt b/config/usa/arm9/itcm/symbols.txt index fc6a1ac1..81862c03 100644 --- a/config/usa/arm9/itcm/symbols.txt +++ b/config/usa/arm9/itcm/symbols.txt @@ -65,7 +65,7 @@ func_01ffa674 kind:function(arm,size=0xcc) addr:0x01ffa674 func_01ffa740 kind:function(arm,size=0x14) addr:0x01ffa740 func_01ffa754 kind:function(arm,size=0xa8) addr:0x01ffa754 func_01ffa7fc kind:function(arm,size=0xd8) addr:0x01ffa7fc -func_01ffa8d4 kind:function(arm,size=0x60) addr:0x01ffa8d4 +FlushGfxQueue kind:function(arm,size=0x60) addr:0x01ffa8d4 func_01ffa934 kind:function(arm,size=0x18) addr:0x01ffa934 func_01ffa94c kind:function(arm,size=0xb0) addr:0x01ffa94c PushGeometryCommand kind:function(arm,size=0xf0) addr:0x01ffa9fc diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index fcf35446..60e20642 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -179,7 +179,7 @@ func_ov000_0207a908 kind:function(thumb,size=0x30) addr:0x0207a8a8 func_ov000_0207a938 kind:function(thumb,size=0x18) addr:0x0207a8d8 func_ov000_0207a950 kind:function(arm,size=0x29c) addr:0x0207a8f0 func_ov000_0207abec kind:function(arm,size=0x38) addr:0x0207ab8c -_ZN12TouchControlC2Ev kind:function(thumb,size=0x3c) addr:0x0207abc4 +_ZN12TouchControl4InitEv kind:function(thumb,size=0x3c) addr:0x0207abc4 _ZN12TouchControl13IncreaseSpeedEs kind:function(arm,size=0x18) addr:0x0207ac00 _ZN12TouchControl11UpdateFlagsEt kind:function(arm,size=0x118) addr:0x0207ac18 _ZN12TouchControl20UpdateWithStateFlagsEP15TouchStateFlagst kind:function(arm,size=0xdc) addr:0x0207ad30 @@ -199,7 +199,7 @@ func_ov000_0207b144 kind:function(thumb,size=0xa0) addr:0x0207b0e4 func_ov000_0207b1e4 kind:function(thumb,size=0x18) addr:0x0207b184 func_ov000_0207b1fc kind:function(thumb,size=0x7c) addr:0x0207b19c func_ov000_0207b278 kind:function(thumb,size=0x10) addr:0x0207b218 -func_ov000_0207b288 kind:function(thumb,size=0x3c) addr:0x0207b228 +_ZN15Struct_027e0db019func_ov000_0207b288Ei kind:function(thumb,size=0x3c) addr:0x0207b228 func_ov000_0207b2c4 kind:function(thumb,size=0x2c) addr:0x0207b264 func_ov000_0207b2f0 kind:function(thumb,size=0x44) addr:0x0207b290 func_ov000_0207b334 kind:function(thumb,size=0x44) addr:0x0207b2d4 @@ -227,7 +227,7 @@ func_ov000_0207bc48 kind:function(arm,size=0x20) addr:0x0207bbe8 func_ov000_0207bc68 kind:function(arm,size=0x14) addr:0x0207bc08 func_ov000_0207bc7c kind:function(thumb,size=0x1e) addr:0x0207bc1c func_ov000_0207bc9c kind:function(arm,size=0x18) addr:0x0207bc3c -func_ov000_0207bcb4 kind:function(thumb,size=0x28) addr:0x0207bc54 +_ZN18UnkStruct_027e0e2c19func_ov000_0207bcb4Ev kind:function(thumb,size=0x28) addr:0x0207bc54 func_ov000_0207bcdc kind:function(thumb,size=0x70) addr:0x0207bc7c func_ov000_0207bd4c kind:function(thumb,size=0x50) addr:0x0207bcec func_ov000_0207bd9c kind:function(thumb,size=0x38) addr:0x0207bd3c @@ -3213,7 +3213,7 @@ func_ov000_020ce6b0 kind:function(arm,size=0x8) addr:0x020ce650 func_ov000_020ce6b8 kind:function(arm,size=0x1c) addr:0x020ce658 func_ov000_020ce6d4 kind:function(arm,size=0x14) addr:0x020ce674 func_ov000_020ce6e8 kind:function(arm,size=0x1c) addr:0x020ce688 -func_ov000_020ce704 kind:function(thumb,size=0x3a) addr:0x020ce6a4 +_ZN18UnkStruct_027e0ffc19func_ov000_020ce704Ev kind:function(thumb,size=0x3a) addr:0x020ce6a4 func_ov000_020ce740 kind:function(arm,size=0x1a4) addr:0x020ce6e0 func_ov000_020ce8e4 kind:function(arm,size=0x30) addr:0x020ce884 func_ov000_020ce914 kind:function(arm,size=0x5c) addr:0x020ce8b4 @@ -3551,8 +3551,8 @@ func_ov000_020d61b0 kind:function(arm,size=0x1e4) addr:0x020d6150 func_ov000_020d6394 kind:function(arm,size=0x50) addr:0x020d6334 func_ov000_020d63e4 kind:function(arm,size=0x18) addr:0x020d6384 func_ov000_020d63fc kind:function(arm,size=0x3c) addr:0x020d639c -func_ov000_020d6438 kind:function(thumb,size=0x50) addr:0x020d63d8 -func_ov000_020d6488 kind:function(thumb,size=0x24) addr:0x020d6428 +_ZN18UnkStruct_020ee73419func_ov000_020d6438Ei kind:function(thumb,size=0x50) addr:0x020d63d8 +_ZN18UnkStruct_020ee73419func_ov000_020d6488Ev kind:function(thumb,size=0x24) addr:0x020d6428 func_ov000_020d64ac kind:function(arm,size=0x94) addr:0x020d644c func_ov000_020d6540 kind:function(thumb,size=0x2c) addr:0x020d64e0 func_ov000_020d656c kind:function(thumb,size=0x28) addr:0x020d650c diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt index 02f69854..69afc0ef 100644 --- a/config/usa/arm9/symbols.txt +++ b/config/usa/arm9/symbols.txt @@ -1431,7 +1431,7 @@ _ZN18UnkStruct_0202e1a013func_0202e58cEv kind:function(arm,size=0x40) addr:0x020 _ZN18UnkStruct_0202e1a013func_0202e5ccEv kind:function(arm,size=0xa4) addr:0x0202e5c8 _ZN18UnkStruct_0202e1a013func_0202e670Ev kind:function(arm,size=0x34) addr:0x0202e66c func_0202e6a4 kind:function(thumb,size=0x8c) addr:0x0202e6a0 -_ZN18UnkStruct_027e077cC2Ei kind:function(thumb,size=0x10) addr:0x0202e72c +_ZN18UnkStruct_027e077c4InitEi kind:function(thumb,size=0x10) addr:0x0202e72c _ZN18UnkStruct_027e077c13func_0202e740Ei kind:function(arm,size=0x34) addr:0x0202e73c func_0202e774 kind:function(thumb,size=0x30) addr:0x0202e770 func_0202e7a4 kind:function(thumb,size=0x18) addr:0x0202e7a0 @@ -1790,7 +1790,7 @@ func_02036240 kind:function(arm,size=0x170) addr:0x020361fc func_020363b0 kind:function(arm,size=0x18) addr:0x0203636c func_020363c8 kind:function(arm,size=0x74) addr:0x02036384 _ZN14MessageManager13func_0203643cEPiPS_j kind:function(arm,size=0x54) addr:0x020363f8 -_ZN14MessageManager13func_02036490Eiii kind:function(thumb,size=0x1cc) addr:0x0203644c +_ZN14MessageManager13func_02036490Ev kind:function(thumb,size=0x1cc) addr:0x0203644c _ZN14MessageManager13func_0203665cEv kind:function(thumb,size=0x4a) addr:0x02036618 func_020366a8 kind:function(arm,size=0x1c) addr:0x02036664 _ZN14MessageManager13func_020366c4Ev kind:function(arm,size=0x3c) addr:0x02036680 @@ -1828,7 +1828,7 @@ _ZN11BMGFileInfo13func_0203728cEi kind:function(arm,size=0x64) addr:0x02037248 _ZN9BMGGroups13func_020372f0E12BMGFileIndexs kind:function(thumb,size=0xc4) addr:0x020372ac _ZN9BMGGroups13func_020373b4Es kind:function(thumb,size=0x36) addr:0x02037370 _ZN9BMGGroups13func_020373ecEi kind:function(arm,size=0x60) addr:0x020373a8 -_ZN18UnkStruct_027e05f8C2Ev kind:function(thumb,size=0xa) addr:0x02037408 +_ZN18UnkStruct_027e05f84InitEv kind:function(thumb,size=0xa) addr:0x02037408 _ZN18UnkStruct_027e05f813func_02037458Et kind:function(arm,size=0x28) addr:0x02037414 _ZN18UnkStruct_027e05f813func_02037480Ev kind:function(arm,size=0x10) addr:0x0203743c _ZN18UnkStruct_027e05f813func_02037490Ei kind:function(arm,size=0x24) addr:0x0203744c @@ -2005,15 +2005,15 @@ func_0203d448 kind:function(arm,size=0x1c) addr:0x0203d404 func_0203d464 kind:function(arm,size=0x4c) addr:0x0203d420 func_0203d4b0 kind:function(arm,size=0x88) addr:0x0203d46c func_0203d538 kind:function(arm,size=0x44) addr:0x0203d4f4 -func_0203d57c kind:function(thumb,size=0x44) addr:0x0203d538 -func_0203d5c0 kind:function(thumb,size=0x1a) addr:0x0203d57c +_ZN17UnkClass_027e0cbc13func_0203d57cEv kind:function(thumb,size=0x44) addr:0x0203d538 +_ZN17UnkClass_027e0cbc13func_0203d5c0Ev kind:function(thumb,size=0x1a) addr:0x0203d57c func_0203d5dc kind:function(thumb,size=0x24) addr:0x0203d598 func_0203d600 kind:function(arm,size=0x4c) addr:0x0203d5bc func_0203d64c kind:function(arm,size=0x18) addr:0x0203d608 func_0203d664 kind:function(arm,size=0x18) addr:0x0203d620 func_0203d67c kind:function(arm,size=0x1c) addr:0x0203d638 func_0203d698 kind:function(thumb,size=0x38) addr:0x0203d654 -func_0203d6d0 kind:function(thumb,size=0x6) addr:0x0203d68c +_ZN17UnkClass_027e0cbc13func_0203d6d0Ev kind:function(thumb,size=0x6) addr:0x0203d68c func_0203d6d8 kind:function(thumb,size=0x58) addr:0x0203d694 func_0203d730 kind:function(thumb,size=0x4c) addr:0x0203d6ec func_0203d77c kind:function(arm,size=0x3c) addr:0x0203d738 @@ -2095,7 +2095,7 @@ func_0203f6dc kind:function(arm,size=0x28) addr:0x0203f698 func_0203f704 kind:function(arm,size=0xc8) addr:0x0203f6c0 func_0203f7cc kind:function(arm,size=0xd0) addr:0x0203f788 func_0203f89c kind:function(arm,size=0x68) addr:0x0203f858 -func_0203f904 kind:function(thumb,size=0x70) addr:0x0203f8c0 +_ZN18UnkStruct_02075dac13func_0203f904Ev kind:function(thumb,size=0x70) addr:0x0203f8c0 func_0203f974 kind:function(arm,size=0x44) addr:0x0203f930 func_0203f9b8 kind:function(arm,size=0x9c) addr:0x0203f974 func_0203fa54 kind:function(arm,size=0x2c) addr:0x0203fa10 diff --git a/include/DTCM/UnkStruct_027e05f8.hpp b/include/DTCM/UnkStruct_027e05f8.hpp index a5bc24d6..721c1be9 100644 --- a/include/DTCM/UnkStruct_027e05f8.hpp +++ b/include/DTCM/UnkStruct_027e05f8.hpp @@ -13,7 +13,7 @@ struct UnkStruct_027e05f8 { ~UnkStruct_027e05f8(); // Big gap to next TU - UnkStruct_027e05f8(); + void Init(); void func_02037458(u16 param1); void func_02037480(); static unk32 func_02037490(unk32 param1); diff --git a/include/DTCM/UnkStruct_027e077c.hpp b/include/DTCM/UnkStruct_027e077c.hpp index 57ef477d..d5d1788a 100644 --- a/include/DTCM/UnkStruct_027e077c.hpp +++ b/include/DTCM/UnkStruct_027e077c.hpp @@ -4,16 +4,14 @@ #include "types.h" struct UnkStruct_027e077c { -private: +public: /* 0 */ unk32 mUnk_0; /* 4 */ unk32 mUnk_4; - -public: /* 8 */ unk16 mUnk_8; /* a */ unk8 mUnk_a; /* b */ - UnkStruct_027e077c(unk32 param1); + void Init(unk32 param1); bool func_0202e740(unk32 param1); inline volatile unk32 GetUnk0() const { diff --git a/include/DTCM/UnkStruct_027e0e2c.hpp b/include/DTCM/UnkStruct_027e0e2c.hpp index b8923bde..00efac4c 100644 --- a/include/DTCM/UnkStruct_027e0e2c.hpp +++ b/include/DTCM/UnkStruct_027e0e2c.hpp @@ -17,6 +17,8 @@ struct UnkStruct_027e0e2c { /* 24 */ unk32 mUnk_24; /* 28 */ unk32 mUnk_28; /* 2c */ + + void func_ov000_0207bcb4(); }; extern UnkStruct_027e0e2c data_027e0e2c; diff --git a/include/DTCM/UnkStruct_027e0ffc.hpp b/include/DTCM/UnkStruct_027e0ffc.hpp index 463d9ec8..571c3761 100644 --- a/include/DTCM/UnkStruct_027e0ffc.hpp +++ b/include/DTCM/UnkStruct_027e0ffc.hpp @@ -3,6 +3,8 @@ #include "global.h" #include "types.h" +#include "Physics/Cylinder.hpp" + struct UnkStruct_027e0ffc { /* 00 */ unk32 mUnk_00; /* 04 */ unk32 mUnk_04[0x4]; @@ -19,6 +21,7 @@ struct UnkStruct_027e0ffc { /* 38 */ unk8 mUnk_38; /* 39 */ + void func_ov000_020ce704(); void func_ov000_020cebcc(u32 param1, unk16 param2, unk32 param3); void func_ov000_020ced64(Cylinder *param1, u32 param2, u32 param3); void func_ov000_020ced7c(Vec3p *param1, s32 param2, s32 param3, unk32 param4); diff --git a/include/Game/Game.hpp b/include/Game/Game.hpp index 8bb41b95..4c60c0ab 100644 --- a/include/Game/Game.hpp +++ b/include/Game/Game.hpp @@ -5,11 +5,29 @@ #include "Game/GameMode.hpp" #include "Render/FadeControl.hpp" +#include "System/OverlayManager.hpp" + +typedef GameMode *(*GameModeCreateFunc)(GameModeId modeId); + +struct GameModeData { + /* 00 */ u8 mUnk_00; + /* 01 */ u8 mUnk_01; + /* 02 */ u8 mUnk_02; + /* 03 */ u8 mUnk_03; + /* 04 */ OverlayId slot1Overlay; + /* 08 */ OverlayId slot2Overlay; + /* 0c */ OverlayId slot3Overlay; + /* 10 */ OverlayId slot12Overlay; + /* 14 */ GameModeCreateFunc mModeCreateFunc; + /* 18 */ void *mUnk_18; + /* 1c */ +}; +extern const GameModeData gGameModes[]; class Game { public: - /* 000 */ s32 mModeId; - /* 004 */ s32 mPrevModeId; + /* 000 */ GameModeId mModeId; + /* 004 */ GameModeId mPrevModeId; /* 008 */ GameMode *mMode; /* 00c */ unk8 mUnk_00c[0xc0]; /* 0cc */ FadeControl mFadeControl; @@ -17,8 +35,8 @@ public: /* 0f2 */ u16 mUnk_0f2; /* 0f4 */ s32 mUnk_0f4; /* 0f8 */ s32 mUnk_0f8; - /* 0fc */ unk16 mUnk_0fc; - /* 0fe */ unk16 mUnk_0fe; + /* 0fc */ u16 mUnk_0fc; + /* 0fe */ u16 mUnk_0fe; /* 100 */ unk8 mUnk_100; /* 101 */ s8 mUnk_101; /* 102 */ bool mUnk_102; @@ -29,7 +47,7 @@ public: ~Game(); void EndGameMode(); - void StartGameMode(); + bool StartGameMode(); void func_0202c974(); void func_0202c97c(); void Run(); diff --git a/include/Message/MessageManager.hpp b/include/Message/MessageManager.hpp index ed4ddcd2..7884cadc 100644 --- a/include/Message/MessageManager.hpp +++ b/include/Message/MessageManager.hpp @@ -40,7 +40,7 @@ public: /* 0x4C */ static void func_0203643c(u32 *param_1, MessageManager *param_2, u32 param_3); - void func_02036490(unk32 param_2, unk32 param_3, unk32 param_4); + void func_02036490(); void func_0203665c(void); MessageManager(); ~MessageManager(); diff --git a/include/Message/MsgProc.hpp b/include/Message/MsgProc.hpp index 00536c57..a48cbb0c 100644 --- a/include/Message/MsgProc.hpp +++ b/include/Message/MsgProc.hpp @@ -1,9 +1,12 @@ #pragma once +#include "nds/math.h" + +#include "DTCM/UnkStruct_027e077c.hpp" +#include "Game/Game.hpp" #include "Message/BMG.hpp" #include "System/SysNew.hpp" #include "Unknown/func_ov000_020d0644.hpp" -#include "nds/math.h" // temp #define UNK_TYPE void @@ -88,20 +91,16 @@ extern char *data_02057ed8; // "MSP:opening.nclr" struct Struct_027e0db0 { /* 0x00 */ unk32 mUnk_00; /* 0x04 */ unk32 mUnk_04; + + void func_ov000_0207b288(GameModeId modeId); }; extern Struct_027e0db0 data_027e0db0; -// see Actor.cpp -struct UnkStruct2 { - /* 0 */ u32 mUnk_0; - /* 4 */ u32 mUnk_4; - /* 8 */ -}; -extern UnkStruct2 data_027e077c; -extern u8 data_02056be4[]; - class UnkClass_027e0cbc { public: + void func_0203d57c(); + void func_0203d5c0(); + void func_0203d6d0(); unk32 func_0203d7e0(unk32); unk32 func_0203d77c(unk32, s32, s32); }; diff --git a/include/Player/TouchControl.hpp b/include/Player/TouchControl.hpp index 8970c032..08d9d657 100644 --- a/include/Player/TouchControl.hpp +++ b/include/Player/TouchControl.hpp @@ -37,7 +37,7 @@ public: /* 34 */ TouchFlags mFlags; /* 36 */ - TouchControl(); + void Init(); void IncreaseSpeed(s16 increase); void UpdateFlags(u16 speed); void UpdateWithStateFlags(TouchStateFlags *state, u16 speed); diff --git a/include/Render/FadeController.hpp b/include/Render/FadeController.hpp index 59a17e48..e26695f6 100644 --- a/include/Render/FadeController.hpp +++ b/include/Render/FadeController.hpp @@ -31,3 +31,5 @@ struct FadeController { void ProcessFade(s32 param1); void SetScreenBrightness(s32 param1); }; + +extern FadeController gFadeController; diff --git a/include/System/OverlayManager.hpp b/include/System/OverlayManager.hpp index e2ceb3f0..4bd43104 100644 --- a/include/System/OverlayManager.hpp +++ b/include/System/OverlayManager.hpp @@ -75,21 +75,21 @@ typedef u32 OverlayId; #define OverlayId_01 OVERLAY_ID(1) #define OverlayId_02 OVERLAY_ID(2) #define OverlayId_03 OVERLAY_ID(3) -#define OverlayId_Memory OVERLAY_ID(4) +#define OverlayId_Load OVERLAY_ID(4) #define OverlayId_05 OVERLAY_ID(5) #define OverlayId_06 OVERLAY_ID(6) -#define OverlayId_07 OVERLAY_ID(7) -#define OverlayId_08 OVERLAY_ID(8) -#define OverlayId_09 OVERLAY_ID(9) -#define OverlayId_10 OVERLAY_ID(10) -#define OverlayId_11 OVERLAY_ID(11) -#define OverlayId_12 OVERLAY_ID(12) -#define OverlayId_13 OVERLAY_ID(13) +#define OverlayId_DownloadPlay OVERLAY_ID(7) +#define OverlayId_GameStart OVERLAY_ID(8) +#define OverlayId_Adventure OVERLAY_ID(9) +#define OverlayId_FileSelect OVERLAY_ID(10) +#define OverlayId_DwcSetup OVERLAY_ID(11) +#define OverlayId_Battle OVERLAY_ID(12) +#define OverlayId_Contact OVERLAY_ID(13) #define OverlayId_Land OVERLAY_ID(14) -#define OverlayId_15 OVERLAY_ID(15) -#define OverlayId_16 OVERLAY_ID(16) -#define OverlayId_17 OVERLAY_ID(17) -#define OverlayId_18 OVERLAY_ID(18) +#define OverlayId_Sea OVERLAY_ID(15) +#define OverlayId_Startup OVERLAY_ID(16) +#define OverlayId_Dungeon OVERLAY_ID(17) +#define OverlayId_Overworld OVERLAY_ID(18) #define OverlayId_19 OVERLAY_ID(19) #define OverlayId_20 OVERLAY_ID(20) #define OverlayId_21 OVERLAY_ID(21) diff --git a/include/Unknown/UnkStruct_02075dac.hpp b/include/Unknown/UnkStruct_02075dac.hpp new file mode 100644 index 00000000..934a2919 --- /dev/null +++ b/include/Unknown/UnkStruct_02075dac.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_02075dac { +public: + void func_0203f904(); + unk32 func_0203f9b8(void *); +}; +extern UnkStruct_02075dac data_02075dac; diff --git a/include/Unknown/UnkStruct_020ee734.hpp b/include/Unknown/UnkStruct_020ee734.hpp index 18e24d39..c5d3523c 100644 --- a/include/Unknown/UnkStruct_020ee734.hpp +++ b/include/Unknown/UnkStruct_020ee734.hpp @@ -1,7 +1,14 @@ #pragma once +#include "global.h" +#include "types.h" + +#include "Game/Game.hpp" + struct UnkStruct_020ee734 { + void func_ov000_020d6488(); void func_ov000_020d6620(void); + void func_ov000_020d6438(GameModeId modeId); }; extern UnkStruct_020ee734 data_ov000_020ee734; diff --git a/src/00_Core/Player/TouchControl.cpp b/src/00_Core/Player/TouchControl.cpp index 9630de1a..c4a586bc 100644 --- a/src/00_Core/Player/TouchControl.cpp +++ b/src/00_Core/Player/TouchControl.cpp @@ -1,6 +1,6 @@ #include "Player/TouchControl.hpp" -TouchControl::TouchControl() {} +void TouchControl::Init() {} void TouchControl::IncreaseSpeed(s16 increase) { this->mFlags = 0; diff --git a/src/Main/DTCM/UnkStruct_027e05f8_2.cpp b/src/Main/DTCM/UnkStruct_027e05f8_2.cpp index 7a4c76da..f4c6c079 100644 --- a/src/Main/DTCM/UnkStruct_027e05f8_2.cpp +++ b/src/Main/DTCM/UnkStruct_027e05f8_2.cpp @@ -1,6 +1,6 @@ #include "DTCM/UnkStruct_027e05f8.hpp" -UnkStruct_027e05f8::UnkStruct_027e05f8() {} +void UnkStruct_027e05f8::Init() {} void UnkStruct_027e05f8::func_02037458(u16 param1) {} void UnkStruct_027e05f8::func_02037480() {} unk32 UnkStruct_027e05f8::func_02037490(unk32 param1) {} diff --git a/src/Main/DTCM/UnkStruct_027e077c.cpp b/src/Main/DTCM/UnkStruct_027e077c.cpp index 77784316..34f3b7a3 100644 --- a/src/Main/DTCM/UnkStruct_027e077c.cpp +++ b/src/Main/DTCM/UnkStruct_027e077c.cpp @@ -1,4 +1,4 @@ #include "DTCM/UnkStruct_027e077c.hpp" -UnkStruct_027e077c::UnkStruct_027e077c(unk32 param1) {} +void UnkStruct_027e077c::Init(unk32 param1) {} bool UnkStruct_027e077c::func_0202e740(unk32 param1) {} diff --git a/src/Main/Game/Game.cpp b/src/Main/Game/Game.cpp index ceabb272..9e741291 100644 --- a/src/Main/Game/Game.cpp +++ b/src/Main/Game/Game.cpp @@ -1,11 +1,253 @@ #include "Game/Game.hpp" +#include "DTCM/UnkStruct_027e05f8.hpp" +#include "DTCM/UnkStruct_027e077c.hpp" +#include "DTCM/UnkStruct_027e0e2c.hpp" +#include "DTCM/UnkStruct_027e0ffc.hpp" +#include "Game/GameModeAdventure.hpp" +#include "Game/GameModeBattle.hpp" +#include "Message/MessageManager.hpp" +#include "Message/MsgProc.hpp" +#include "Player/TouchControl.hpp" +#include "Render/FadeController.hpp" +#include "System/OverlayManager.hpp" +#include "Unknown/UnkStruct_0203dae0.hpp" +#include "Unknown/UnkStruct_02075dac.hpp" +#include "Unknown/UnkStruct_020ee734.hpp" -void Game::EndGameMode() {} -void Game::StartGameMode() {} -void Game::func_0202c974() {} -void Game::func_0202c97c() {} -void Game::Run() {} -void Game::func_0202cec8(s32 param1, unk32 param2) {} -void Game::func_0202cf34() {} -void Game::func_0202cf44() {} -Game::~Game() {} +#define FRAME_COUNTER (*(u32 *) 0x027ffc3c) +#define REG_POWER_CNT (*(u16 *) 0x04000304) +#define REG_DISPCNT_SUB (*(volatile u32 *) 0x04001000) + +#define GAME_MODE_DATA(id) ((GameModeData *) (((u8 *) &gGameModes) + ((id) * sizeof(GameModeData)))) + +extern unk32 data_027e0dbc; +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; +extern unk32 data_ov010_0211e960; +extern unk32 data_ov007_02102920; +extern unk32 data_ov012_02134ea0; +extern unk32 data_ov013_021160b4; + +extern "C" GameMode *func_ov008_02112c20(GameModeId modeId); +extern "C" GameMode *func_ov010_02112c20(GameModeId modeId); +extern "C" GameMode *func_ov011_0212b934(GameModeId modeId); +extern "C" GameMode *func_ov007_02100ae0(GameModeId modeId); +extern "C" GameMode *func_ov013_02114f78(GameModeId modeId); +const GameModeData gGameModes[] = { + { + .mUnk_00 = 1, + .mUnk_01 = 0, + .mUnk_02 = 0, + .mUnk_03 = 0, + .slot1Overlay = OverlayId_None, + .slot2Overlay = OverlayId_None, + .slot3Overlay = OverlayId_None, + .slot12Overlay = OverlayId_None, + .mModeCreateFunc = (GameModeCreateFunc) NULL, + .mUnk_18 = NULL, + }, + { + .mUnk_00 = 1, + .mUnk_01 = 0, + .mUnk_02 = 0, + .mUnk_03 = 1, + .slot1Overlay = OverlayId_01, + .slot2Overlay = OverlayId_None, + .slot3Overlay = OverlayId_GameStart, + .slot12Overlay = OverlayId_None, + .mModeCreateFunc = (GameModeCreateFunc) func_ov008_02112c20, + .mUnk_18 = NULL, + }, + { + .mUnk_00 = 2, + .mUnk_01 = 0, + .mUnk_02 = 1, + .mUnk_03 = 1, + .slot1Overlay = OverlayId_03, + .slot2Overlay = OverlayId_Load, + .slot3Overlay = OverlayId_Adventure, + .slot12Overlay = OverlayId_None, + .mModeCreateFunc = (GameModeCreateFunc) GameModeAdventure::Create, + .mUnk_18 = &data_ov009_0211e0c0, + }, + { + .mUnk_00 = 1, + .mUnk_01 = 0, + .mUnk_02 = 0, + .mUnk_03 = 1, + .slot1Overlay = OverlayId_01, + .slot2Overlay = OverlayId_06, + .slot3Overlay = OverlayId_FileSelect, + .slot12Overlay = OverlayId_None, + .mModeCreateFunc = (GameModeCreateFunc) func_ov010_02112c20, + .mUnk_18 = &data_ov010_0211e960, + }, + { + .mUnk_00 = 1, + .mUnk_01 = 0, + .mUnk_02 = 0, + .mUnk_03 = 1, + .slot1Overlay = OverlayId_01, + .slot2Overlay = OverlayId_None, + .slot3Overlay = OverlayId_DwcSetup, + .slot12Overlay = OverlayId_61, + .mModeCreateFunc = (GameModeCreateFunc) func_ov011_0212b934, + .mUnk_18 = NULL, + }, + { + .mUnk_00 = 1, + .mUnk_01 = 0, + .mUnk_02 = 0, + .mUnk_03 = 1, + .slot1Overlay = OverlayId_01, + .slot2Overlay = OverlayId_DownloadPlay, + .slot3Overlay = OverlayId_None, + .slot12Overlay = OverlayId_None, + .mModeCreateFunc = (GameModeCreateFunc) func_ov007_02100ae0, + .mUnk_18 = &data_ov007_02102920, + }, + { + .mUnk_00 = 1, + .mUnk_01 = 0, + .mUnk_02 = 0, + .mUnk_03 = 1, + .slot1Overlay = OverlayId_01, + .slot2Overlay = OverlayId_Load, + .slot3Overlay = OverlayId_Battle, + .slot12Overlay = OverlayId_60, + .mModeCreateFunc = (GameModeCreateFunc) GameModeBattle::Create, + .mUnk_18 = &data_ov012_02134ea0, + }, + { + .mUnk_00 = 1, + .mUnk_01 = 0, + .mUnk_02 = 0, + .mUnk_03 = 1, + .slot1Overlay = OverlayId_01, + .slot2Overlay = OverlayId_None, + .slot3Overlay = OverlayId_Contact, + .slot12Overlay = OverlayId_None, + .mModeCreateFunc = (GameModeCreateFunc) func_ov013_02114f78, + .mUnk_18 = &data_ov013_021160b4, + }, +}; + +extern "C" void func_ov000_0207b9c8(unk32 *param0); +extern "C" void func_ov000_020d6488(unk32 *param0); +extern "C" void func_0203d14c(unk32 *param0); +extern "C" void func_020355e4(unk32 *param0, unk32 param1); +extern "C" void func_02036050(u8 *param0); +THUMB void Game::EndGameMode() { + delete mMode; + mMode = NULL; + if (gOverlayManager.mLoadedOverlays[0] != -1) { + func_ov000_0207b9c8(&data_027e0dbc); + data_ov000_020ee734.func_ov000_020d6488(); + } + gMessageManager.func_0203665c(); + data_027e0cbc.func_0203d5c0(); + func_0203d14c(&data_02068ed0); + func_020355e4(&data_02068e64, 2); + func_02036050(&data_027e0c54); + gOverlayManager.UnloadGameMode(); + return; +} + +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 func_02033d40(unk32 (*param0)[]); +extern "C" void func_ov000_0207c0f0(unk32 *param0, unk32 param1); +extern "C" void func_ov000_0207a2e8(unk32 *param0, unk32 param1); +extern "C" void func_02036014(u8 *param0, unk32 param1); +extern "C" void func_02035604(unk32 *param0, unk32 param1); +extern "C" void func_0203d0c0(unk32 *param0, unk32 param1); +extern "C" void func_ov000_0207b988(unk32 *param0, GameModeId modeId); +extern "C" void FlushGfxQueue(); +extern "C" void func_0200eec8(); +extern "C" void func_02005778(); +extern "C" void func_02003a54(); +THUMB bool Game::StartGameMode() { + func_0202c0cc(); + + bool bVar1 = (mModeId == 2) || (mModeId == 6); + unk16 uVar3 = bVar1 ? 0x7f72 : 0; + + mUnk_0fe = uVar3; + mUnk_0fc = mUnk_0fe; + func_0202c128(1, mUnk_0fc); + func_02017cb0(&data_02062d4c, 0xc); + mUnk_0f0 = 0; + mUnk_0f4 = 0; + mUnk_101 = 0; + mUnk_103 = GAME_MODE_DATA(mModeId)->mUnk_03; + mUnk_0f2 = GAME_MODE_DATA(mModeId)->mUnk_00; + + func_02031024(&data_020683f4); + data_027e077c.Init(0); + Fill16(0, &data_027e0d04, 6); + func_02033d40(&data_027e0c38); + data_027e05f8.Init(); + if (gOverlayManager.mLoadedOverlays[0] != OverlayId_None) { + func_ov000_0207c0f0(&data_ov000_020ec7dc, mModeId); + gTouchControl.Init(); + data_027e0e2c.func_ov000_0207bcb4(); + data_027e0db0.func_ov000_0207b288(mModeId); + func_ov000_0207a2e8(&data_027e0d54, mModeId); + data_027e0ffc.func_ov000_020ce704(); + data_027e0f8c = false; + } + + gOverlayManager.LoadGameMode(mModeId); + func_02036014(&data_027e0c54, mModeId); + func_02035604(&data_02068e64, mModeId); + func_0203d0c0(&data_02068ed0, mModeId); + data_02075dac.func_0203f904(); + data_027e0cbc.func_0203d57c(); + gMessageManager.func_02036490(); + if (gOverlayManager.mLoadedOverlays[0] != OverlayId_None) { + data_ov000_020ee734.func_ov000_020d6438(mModeId); + func_ov000_0207b988(&data_027e0dbc, mModeId); + } + + mMode = GAME_MODE_DATA(mModeId)->mModeCreateFunc(mModeId); + mUnk_102 = 0; + + data_027e0cbc.func_0203d6d0(); + FlushGfxQueue(); + func_0200eec8(); + + mUnk_0f8 = FRAME_COUNTER; + func_02005778(); + bVar1 = (mModeId == 2) || (mModeId == 6); + if (!bVar1) { + REG_POWER_CNT |= 0x8000; + } + + func_02003a54(); + u8 unk1 = GAME_MODE_DATA(mModeId)->mUnk_03; + if (unk1 != 0) { + REG_DISPCNT_SUB |= 0x10000; + } else { + REG_DISPCNT_SUB &= ~0x10000; + } + + gFadeController.func_0202d77c(&mFadeControl); + return mFadeControl.func_0202abdc(0x20, 0); +} + +THUMB void Game::func_0202c974() {} +THUMB void Game::func_0202c97c() {} +ARM void Game::Run() {} +THUMB void Game::func_0202cec8(s32 param1, unk32 param2) {} +THUMB void Game::func_0202cf34() {} +ARM void Game::func_0202cf44() {} +ARM Game::~Game() {} diff --git a/src/Main/Message/MessageManager.cpp b/src/Main/Message/MessageManager.cpp index 812a9b2a..3b667a61 100644 --- a/src/Main/Message/MessageManager.cpp +++ b/src/Main/Message/MessageManager.cpp @@ -29,7 +29,7 @@ ARM void MessageManager::func_0203643c(u32 *param_1, MessageManager *param_2, u3 } // non-matching -THUMB void MessageManager::func_02036490(unk32 param_2, unk32 param_3, unk32 param_4) { +THUMB void MessageManager::func_02036490() { this->mUnk_03 = 0; this->mUnk_0c = 0; diff --git a/src/Main/System/OverlayManager.cpp b/src/Main/System/OverlayManager.cpp index 934ad078..6ed64320 100644 --- a/src/Main/System/OverlayManager.cpp +++ b/src/Main/System/OverlayManager.cpp @@ -1,6 +1,5 @@ #include "System/OverlayManager.hpp" -#include "global.h" -#include "nds/overlay.h" +#include "Game/Game.hpp" struct UnkStruct_020ee698 { /* 00 */ unk8 mUnk_00[0x2C]; @@ -9,21 +8,6 @@ struct UnkStruct_020ee698 { }; extern UnkStruct_020ee698 data_ov000_020ee698; -struct GameModeData { - /* 00 */ unk8 mUnk_00; - /* 01 */ unk8 mUnk_01; - /* 02 */ unk8 mUnk_02; - /* 03 */ unk8 mUnk_03; - /* 04 */ OverlayId slot1Overlay; - /* 08 */ OverlayId slot2Overlay; - /* 0c */ OverlayId slot3Overlay; - /* 10 */ OverlayId slot12Overlay; - /* 14 */ void *mUnk_14; - /* 18 */ void *mUnk_18; - /* 1c */ -}; -extern GameModeData gGameModes[]; - extern u32 *data_027e0ce0[]; extern "C" void func_ov007_02102850(u32 **); extern "C" void func_ov007_021028a0(u32 **); @@ -79,7 +63,7 @@ THUMB void OverlayManager::UnloadGameMode() { this->Unload(OverlayIndex_12); this->Unload(OverlayIndex_3); - if (this->mLoadedOverlays[2] == OverlayId_07) { + if (this->mLoadedOverlays[2] == OverlayId_DownloadPlay) { func_ov007_021028a0(data_027e0ce0); this->Unload(OverlayIndex_2); } diff --git a/src/Main/Unknown/UnkStruct_0203dae0.cpp b/src/Main/Unknown/UnkStruct_0203dae0.cpp index 880511ae..7dfde88b 100644 --- a/src/Main/Unknown/UnkStruct_0203dae0.cpp +++ b/src/Main/Unknown/UnkStruct_0203dae0.cpp @@ -1,5 +1,6 @@ #include "Unknown/UnkStruct_0203dae0.hpp" #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_02075dac.hpp" extern u32 *data_027e0ce0[]; extern "C" void Fill256(unk32, unk16 *, unk32, unk32); @@ -10,12 +11,6 @@ extern "C" void func_02029830(unk32 *, unk32, unk32, unk32, unk32); extern "C" unk32 func_0203d400(u8); extern "C" void func_02035440(u8); -class UnkStruct_02075dac { -public: - unk32 func_0203f9b8(void *); -}; -extern UnkStruct_02075dac data_02075dac; - // non-matching THUMB UnkStruct_0203dae0::UnkStruct_0203dae0(u8 param1) { this->mUnk_114 = NULL; From 0a92fb84ec5beb4e51579e6d665313632779981d Mon Sep 17 00:00:00 2001 From: Aetias Date: Sun, 6 Jul 2025 14:48:09 +0200 Subject: [PATCH 2/3] configure: Print `dsd json delinks` error --- tools/configure.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/configure.py b/tools/configure.py index ef93ed71..3cba9d45 100755 --- a/tools/configure.py +++ b/tools/configure.py @@ -225,7 +225,10 @@ def main(): "json", "delinks", "--config-path", config_path / args.version / "arm9" / "config.yaml" - ], capture_output=True, text=True, check=True) + ], capture_output=True, text=True) + if out.returncode != 0: + print(f"Error running dsd:\n{out.stderr.strip()}") + return delinks_json = json.loads(out.stdout) project = Project(args.version, platform=platform, delinks_json=delinks_json) From 8806b998c287d63c93f32835236b3092b5ad50fc Mon Sep 17 00:00:00 2001 From: Aetias Date: Sun, 6 Jul 2025 14:52:03 +0200 Subject: [PATCH 3/3] Fix build --- src/Main/System/OverlayManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Main/System/OverlayManager.cpp b/src/Main/System/OverlayManager.cpp index 6ed64320..0a24f2d8 100644 --- a/src/Main/System/OverlayManager.cpp +++ b/src/Main/System/OverlayManager.cpp @@ -38,7 +38,7 @@ THUMB void OverlayManager::Unload(OverlayIndex index) { THUMB void OverlayManager::LoadGameMode(s32 mode) { OverlayId overlayId; - GameModeData *pSetup; + const GameModeData *pSetup; pSetup = &gGameModes[mode];