From 32cc123547fef2ff4aa170ef27ee0a825957a859 Mon Sep 17 00:00:00 2001 From: Aetias <144526980+AetiasHax@users.noreply.github.com> Date: Sat, 19 Jul 2025 18:51:07 +0200 Subject: [PATCH] Game 73% (#122) * Game 73% * Fix build --- config/eur/arm9/overlays/ov000/symbols.txt | 8 +- config/eur/arm9/overlays/ov005/symbols.txt | 2 +- config/eur/arm9/overlays/ov009/symbols.txt | 2 +- config/eur/arm9/symbols.txt | 26 +-- config/usa/arm9/overlays/ov000/symbols.txt | 8 +- config/usa/arm9/overlays/ov005/symbols.txt | 2 +- config/usa/arm9/overlays/ov009/symbols.txt | 2 +- config/usa/arm9/symbols.txt | 26 +-- include/DTCM/UnkStruct_027e037c.hpp | 43 +++++ include/DTCM/UnkStruct_027e077c.hpp | 2 + include/DTCM/UnkStruct_027e080c.hpp | 29 ++++ include/DTCM/UnkStruct_027e08fc.hpp | 18 +++ include/DTCM/UnkStruct_027e0c38.hpp | 20 +++ include/DTCM/UnkStruct_027e0c54.hpp | 21 +++ include/DTCM/UnkStruct_027e0e2c.hpp | 1 + include/DTCM/UnkStruct_027e103c.hpp | 1 + include/Game/Game.hpp | 4 +- include/Message/MessageManager.hpp | 2 +- include/Message/MsgProc.hpp | 6 +- include/Unknown/UnkStruct_020ee734.hpp | 1 + include/Unknown/UnkStruct_027e0d54.hpp | 7 +- include/Unknown/UnkStruct_027e0dbc.hpp | 3 + libs/nds/include/nds/gfx.h | 19 +++ libs/nds/include/nds/irq.h | 18 +++ src/00_Core/Actor/Actor.cpp | 4 +- src/Main/Game/Game.cpp | 177 +++++++++++++++++++-- src/Main/Message/MessageManager.cpp | 5 +- src/Main/Unknown/UnkStruct_02038aa0.cpp | 3 +- src/Main/Unknown/UnkStruct_020397f8.cpp | 6 +- 29 files changed, 399 insertions(+), 67 deletions(-) create mode 100644 include/DTCM/UnkStruct_027e037c.hpp create mode 100644 include/DTCM/UnkStruct_027e080c.hpp create mode 100644 include/DTCM/UnkStruct_027e08fc.hpp create mode 100644 include/DTCM/UnkStruct_027e0c38.hpp create mode 100644 include/DTCM/UnkStruct_027e0c54.hpp create mode 100644 libs/nds/include/nds/gfx.h create mode 100644 libs/nds/include/nds/irq.h diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 5ad4b0a3..48f35300 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -203,7 +203,7 @@ _ZN15Struct_027e0db019func_ov000_0207b288Ei kind:function(thumb,size=0x3c) addr: 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 -func_ov000_0207b378 kind:function(arm,size=0xc4) addr:0x0207b378 +_ZN15Struct_027e0db019func_ov000_0207b378Ei kind:function(arm,size=0xc4) addr:0x0207b378 func_ov000_0207b43c kind:function(arm,size=0xf4) addr:0x0207b43c func_ov000_0207b530 kind:function(thumb,size=0x2c) addr:0x0207b530 func_ov000_0207b55c kind:function(thumb,size=0x60) addr:0x0207b55c @@ -214,7 +214,7 @@ func_ov000_0207b8fc kind:function(arm,size=0x10) addr:0x0207b8fc func_ov000_0207b90c kind:function(arm,size=0x7c) addr:0x0207b90c func_ov000_0207b988 kind:function(thumb,size=0x40) addr:0x0207b988 func_ov000_0207b9c8 kind:function(thumb,size=0x14) addr:0x0207b9c8 -func_ov000_0207b9dc kind:function(arm,size=0xb4) addr:0x0207b9dc +_ZN18UnkStruct_027e0dbc19func_ov000_0207b9dcEv kind:function(arm,size=0xb4) addr:0x0207b9dc func_ov000_0207ba90 kind:function(thumb,size=0x4) addr:0x0207ba90 func_ov000_0207ba94 kind:function(thumb,size=0x20) addr:0x0207ba94 func_ov000_0207bab4 kind:function(arm,size=0x5c) addr:0x0207bab4 @@ -233,7 +233,7 @@ func_ov000_0207bd4c kind:function(thumb,size=0x50) addr:0x0207bd4c func_ov000_0207bd9c kind:function(thumb,size=0x38) addr:0x0207bd9c func_ov000_0207bdd4 kind:function(thumb,size=0x26) addr:0x0207bdd4 func_ov000_0207bdfc kind:function(thumb,size=0x86) addr:0x0207bdfc -func_ov000_0207be84 kind:function(arm,size=0x140) addr:0x0207be84 +_ZN18UnkStruct_027e0e2c19func_ov000_0207be84Ei kind:function(arm,size=0x140) addr:0x0207be84 func_ov000_0207bfc4 kind:function(thumb,size=0x3a) addr:0x0207bfc4 func_ov000_0207c000 kind:function(thumb,size=0x30) addr:0x0207c000 func_ov000_0207c030 kind:function(thumb,size=0x44) addr:0x0207c030 @@ -3553,7 +3553,7 @@ func_ov000_020d63e4 kind:function(arm,size=0x18) addr:0x020d63e4 func_ov000_020d63fc kind:function(arm,size=0x3c) addr:0x020d63fc _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 +_ZN18UnkStruct_020ee73419func_ov000_020d64acEv 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 func_ov000_020d6594 kind:function(thumb,size=0x24) addr:0x020d6594 diff --git a/config/eur/arm9/overlays/ov005/symbols.txt b/config/eur/arm9/overlays/ov005/symbols.txt index 9db27826..a43ce370 100644 --- a/config/eur/arm9/overlays/ov005/symbols.txt +++ b/config/eur/arm9/overlays/ov005/symbols.txt @@ -77,7 +77,7 @@ func_ov005_02103c6c kind:function(arm,size=0x44) addr:0x02103c6c func_ov005_02103cb0 kind:function(arm,size=0x140) addr:0x02103cb0 func_ov005_02103df0 kind:function(arm,size=0x2c) addr:0x02103df0 func_ov005_02103e1c kind:function(arm,size=0x3c) addr:0x02103e1c -func_ov005_02103e58 kind:function(arm,size=0x30) addr:0x02103e58 +_ZN18UnkStruct_027e103c19func_ov005_02103e58EPt kind:function(arm,size=0x30) addr:0x02103e58 func_ov005_02103e88 kind:function(arm,size=0x18) addr:0x02103e88 func_ov005_02103ea0 kind:function(arm,size=0x18) addr:0x02103ea0 func_ov005_02103eb8 kind:function(arm,size=0x5c) addr:0x02103eb8 diff --git a/config/eur/arm9/overlays/ov009/symbols.txt b/config/eur/arm9/overlays/ov009/symbols.txt index 9ccdaa66..43eebc06 100644 --- a/config/eur/arm9/overlays/ov009/symbols.txt +++ b/config/eur/arm9/overlays/ov009/symbols.txt @@ -146,7 +146,7 @@ func_ov009_0211620c kind:function(thumb,size=0x24) addr:0x0211620c func_ov009_02116230 kind:function(thumb,size=0x98) addr:0x02116230 func_ov009_021162c8 kind:function(thumb,size=0x3c) addr:0x021162c8 func_ov009_02116304 kind:function(thumb,size=0x5e) addr:0x02116304 -func_ov009_02116364 kind:function(arm,size=0x1d8) addr:0x02116364 +_ZN18UnkStruct_027e077c19func_ov009_02116364Ev kind:function(arm,size=0x1d8) addr:0x02116364 func_ov009_0211653c kind:function(arm,size=0x30) addr:0x0211653c func_ov009_0211656c kind:function(arm,size=0xb4) addr:0x0211656c func_ov009_02116620 kind:function(arm,size=0x44) addr:0x02116620 diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index c1757bca..549e436d 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -585,8 +585,8 @@ func_0200ed9c kind:function(arm,size=0x8) addr:0x0200ed9c func_0200eda4 kind:function(arm,size=0x6c) addr:0x0200eda4 func_0200ee10 kind:function(thumb,size=0x28) addr:0x0200ee10 IrqDisable kind:function(arm,size=0x14) addr:0x0200ee38 -IrqEnable kind:function(arm,size=0x14) addr:0x0200ee4c -IrqSet kind:function(arm,size=0x18) addr:0x0200ee60 +OS_DisableInterrupts_Irq kind:function(arm,size=0x14) addr:0x0200ee4c +OS_RestoreInterrupts kind:function(arm,size=0x18) addr:0x0200ee60 IrqFiqEnable kind:function(arm,size=0x14) addr:0x0200ee78 IrqFiqSet kind:function(arm,size=0x18) addr:0x0200ee8c IrqGet kind:function(arm,size=0xc) addr:0x0200eea4 @@ -1461,7 +1461,7 @@ func_0202ec70 kind:function(arm,size=0x70) addr:0x0202ec70 func_0202ece0 kind:function(thumb,size=0x34) addr:0x0202ece0 func_0202ed14 kind:function(arm,size=0x44) addr:0x0202ed14 func_0202ed58 kind:function(arm,size=0x164) addr:0x0202ed58 -func_0202eebc kind:function(arm,size=0x3c) addr:0x0202eebc +_ZN18UnkStruct_027e080c13func_0202eebcEi kind:function(arm,size=0x3c) addr:0x0202eebc func_0202eef8 kind:function(arm,size=0x23c) addr:0x0202eef8 func_0202f134 kind:function(thumb,size=0x20) addr:0x0202f134 func_0202f154 kind:function(thumb,size=0x3e) addr:0x0202f154 @@ -1483,9 +1483,9 @@ _ZN18UnkStruct_0206322016DisplayExceptionEP9Registers kind:function(thumb,size=0 _ZN18UnkStruct_0206322013func_0202f754Ei kind:function(thumb,size=0x194) addr:0x0202f754 func_0202f8e8 kind:function(thumb,size=0x30) addr:0x0202f8e8 func_0202f918 kind:function(thumb,size=0x88) addr:0x0202f918 -func_0202f9a0 kind:function(arm,size=0x88) addr:0x0202f9a0 +_ZN18UnkStruct_027e08f813func_0202f9a0Ei kind:function(arm,size=0x88) addr:0x0202f9a0 func_0202fa28 kind:function(thumb,size=0x1bc) addr:0x0202fa28 -func_0202fbe4 kind:function(arm,size=0x1b8) addr:0x0202fbe4 +_ZN18UnkStruct_027e08fc13func_0202fbe4Ev kind:function(arm,size=0x1b8) addr:0x0202fbe4 func_0202fd9c kind:function(thumb,size=0x40) addr:0x0202fd9c func_0202fddc kind:function(thumb,size=0x150) addr:0x0202fddc func_0202ff2c kind:function(arm,size=0x4) addr:0x0202ff2c @@ -1681,7 +1681,7 @@ _ZN18UnkStruct_02032f0c13func_02033cbcEPs kind:function(arm,size=0x70) addr:0x02 _ZN18UnkStruct_02032e7cD0Ev kind:function(arm,size=0x14) addr:0x02033d2c func_02033d40 kind:function(arm,size=0x18) addr:0x02033d40 func_02033d58 kind:function(arm,size=0x18) addr:0x02033d58 -func_02033d70 kind:function(arm,size=0x14) addr:0x02033d70 +_ZN18UnkStruct_027e0c3813func_02033d70Ei kind:function(arm,size=0x14) addr:0x02033d70 func_02033d84 kind:function(arm,size=0xec) addr:0x02033d84 func_02033e70 kind:function(arm,size=0x1c) addr:0x02033e70 func_02033e8c kind:function(arm,size=0x30) addr:0x02033e8c @@ -1784,10 +1784,10 @@ func_020360a8 kind:function(arm,size=0x28) addr:0x020360a8 func_020360d0 kind:function(thumb,size=0x4c) addr:0x020360d0 func_0203611c kind:function(thumb,size=0x24) addr:0x0203611c func_02036140 kind:function(thumb,size=0x34) addr:0x02036140 -func_02036174 kind:function(arm,size=0x5c) addr:0x02036174 -func_020361d0 kind:function(arm,size=0x70) addr:0x020361d0 +_ZN18UnkStruct_027e0c5413func_02036174Ev kind:function(arm,size=0x5c) addr:0x02036174 +_ZN18UnkStruct_027e0c5413func_020361d0Ev kind:function(arm,size=0x70) addr:0x020361d0 func_02036240 kind:function(arm,size=0x170) addr:0x02036240 -func_020363b0 kind:function(arm,size=0x18) addr:0x020363b0 +_ZN18UnkStruct_027e0c5413func_020363b0Ev 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_02036490Ev kind:function(thumb,size=0x1cc) addr:0x02036490 @@ -1805,7 +1805,7 @@ _ZN14MessageManager13func_02036824Ev kind:function(arm,size=0x2c) addr:0x0203682 _ZN14MessageManager13func_02036850Ev kind:function(arm,size=0x38) addr:0x02036850 _ZN14MessageManager13func_02036888EP18UnkStruct_020386d8 kind:function(arm,size=0x6c) addr:0x02036888 _ZN14MessageManager13func_020368f4EP18UnkStruct_02037750 kind:function(arm,size=0x18) addr:0x020368f4 -_ZN14MessageManager13func_0203690cEiii kind:function(arm,size=0x2b0) addr:0x0203690c +_ZN14MessageManager13func_0203690cEi kind:function(arm,size=0x2b0) addr:0x0203690c _ZN14MessageManager13func_02036bbcEv kind:function(arm,size=0x94) addr:0x02036bbc _ZN14MessageManager13func_02036c50Ei kind:function(arm,size=0x54) addr:0x02036c50 _ZN14MessageManager13func_02036ca4Ei kind:function(arm,size=0x40) addr:0x02036ca4 @@ -2009,8 +2009,8 @@ _ZN17UnkClass_027e0cbc13func_0203d57cEv kind:function(thumb,size=0x44) addr:0x02 _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 +_ZN17UnkClass_027e0cbc13func_0203d64cEi kind:function(arm,size=0x18) addr:0x0203d64c +_ZN17UnkClass_027e0cbc13func_0203d664Ei 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 _ZN17UnkClass_027e0cbc13func_0203d6d0Ev kind:function(thumb,size=0x6) addr:0x0203d6d0 @@ -2108,7 +2108,7 @@ func_0203fb9c kind:function(arm,size=0x6c) addr:0x0203fb9c func_0203fc08 kind:function(arm,size=0x28) addr:0x0203fc08 func_0203fc30 kind:function(arm,size=0x48) addr:0x0203fc30 func_0203fc78 kind:function(arm,size=0x188) addr:0x0203fc78 -func_0203fe00 kind:function(arm,size=0x60) addr:0x0203fe00 +_ZN23UnkClass_ov000_027e0d0413func_0203fe00Ev kind:function(arm,size=0x60) addr:0x0203fe00 func_0203fe60 kind:function(thumb,size=0x28) addr:0x0203fe60 func_0203fe88 kind:function(thumb,size=0x2c) addr:0x0203fe88 func_0203feb4 kind:function(thumb,size=0x38) addr:0x0203feb4 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index a555eb80..66617da6 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -203,7 +203,7 @@ _ZN15Struct_027e0db019func_ov000_0207b288Ei kind:function(thumb,size=0x3c) addr: 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 -func_ov000_0207b378 kind:function(arm,size=0xc4) addr:0x0207b318 +_ZN15Struct_027e0db019func_ov000_0207b378Ei kind:function(arm,size=0xc4) addr:0x0207b318 func_ov000_0207b43c kind:function(arm,size=0xf4) addr:0x0207b3dc func_ov000_0207b530 kind:function(thumb,size=0x2c) addr:0x0207b4d0 func_ov000_0207b55c kind:function(thumb,size=0x60) addr:0x0207b4fc @@ -214,7 +214,7 @@ func_ov000_0207b8fc kind:function(arm,size=0x10) addr:0x0207b89c func_ov000_0207b90c kind:function(arm,size=0x7c) addr:0x0207b8ac func_ov000_0207b988 kind:function(thumb,size=0x40) addr:0x0207b928 func_ov000_0207b9c8 kind:function(thumb,size=0x14) addr:0x0207b968 -func_ov000_0207b9dc kind:function(arm,size=0xb4) addr:0x0207b97c +_ZN18UnkStruct_027e0dbc19func_ov000_0207b9dcEv kind:function(arm,size=0xb4) addr:0x0207b97c func_ov000_0207ba90 kind:function(thumb,size=0x4) addr:0x0207ba30 func_ov000_0207ba94 kind:function(thumb,size=0x20) addr:0x0207ba34 func_ov000_0207bab4 kind:function(arm,size=0x5c) addr:0x0207ba54 @@ -233,7 +233,7 @@ func_ov000_0207bd4c kind:function(thumb,size=0x50) addr:0x0207bcec func_ov000_0207bd9c kind:function(thumb,size=0x38) addr:0x0207bd3c func_ov000_0207bdd4 kind:function(thumb,size=0x26) addr:0x0207bd74 func_ov000_0207bdfc kind:function(thumb,size=0x86) addr:0x0207bd9c -func_ov000_0207be84 kind:function(arm,size=0x140) addr:0x0207be24 +_ZN18UnkStruct_027e0e2c19func_ov000_0207be84Ei kind:function(arm,size=0x140) addr:0x0207be24 func_ov000_0207bfc4 kind:function(thumb,size=0x3a) addr:0x0207bf64 func_ov000_0207c000 kind:function(thumb,size=0x30) addr:0x0207bfa0 func_ov000_0207c030 kind:function(thumb,size=0x44) addr:0x0207bfd0 @@ -3553,7 +3553,7 @@ func_ov000_020d63e4 kind:function(arm,size=0x18) addr:0x020d6384 func_ov000_020d63fc kind:function(arm,size=0x3c) addr:0x020d639c _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 +_ZN18UnkStruct_020ee73419func_ov000_020d64acEv 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 func_ov000_020d6594 kind:function(thumb,size=0x24) addr:0x020d6534 diff --git a/config/usa/arm9/overlays/ov005/symbols.txt b/config/usa/arm9/overlays/ov005/symbols.txt index 941eb12b..8489ae26 100644 --- a/config/usa/arm9/overlays/ov005/symbols.txt +++ b/config/usa/arm9/overlays/ov005/symbols.txt @@ -77,7 +77,7 @@ func_ov005_02103c6c kind:function(arm,size=0x44) addr:0x02103bec func_ov005_02103cb0 kind:function(arm,size=0x140) addr:0x02103c30 func_ov005_02103df0 kind:function(arm,size=0x2c) addr:0x02103d70 func_ov005_02103e1c kind:function(arm,size=0x3c) addr:0x02103d9c -func_ov005_02103e58 kind:function(arm,size=0x30) addr:0x02103dd8 +_ZN18UnkStruct_027e103c19func_ov005_02103e58EPt kind:function(arm,size=0x30) addr:0x02103dd8 func_ov005_02103e88 kind:function(arm,size=0x18) addr:0x02103e08 func_ov005_02103ea0 kind:function(arm,size=0x18) addr:0x02103e20 func_ov005_02103eb8 kind:function(arm,size=0x5c) addr:0x02103e38 diff --git a/config/usa/arm9/overlays/ov009/symbols.txt b/config/usa/arm9/overlays/ov009/symbols.txt index 01d80f08..2975274d 100644 --- a/config/usa/arm9/overlays/ov009/symbols.txt +++ b/config/usa/arm9/overlays/ov009/symbols.txt @@ -146,7 +146,7 @@ func_ov009_0211620c kind:function(thumb,size=0x24) addr:0x0211618c func_ov009_02116230 kind:function(thumb,size=0x98) addr:0x021161b0 func_ov009_021162c8 kind:function(thumb,size=0x3c) addr:0x02116248 func_ov009_02116304 kind:function(thumb,size=0x5e) addr:0x02116284 -func_ov009_02116364 kind:function(arm,size=0x1d8) addr:0x021162e4 +_ZN18UnkStruct_027e077c19func_ov009_02116364Ev kind:function(arm,size=0x1d8) addr:0x021162e4 func_ov009_0211653c kind:function(arm,size=0x30) addr:0x021164bc func_ov009_0211656c kind:function(arm,size=0xb4) addr:0x021164ec func_ov009_02116620 kind:function(arm,size=0x44) addr:0x021165a0 diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt index cc04e899..632e9967 100644 --- a/config/usa/arm9/symbols.txt +++ b/config/usa/arm9/symbols.txt @@ -585,8 +585,8 @@ func_0200ed9c kind:function(arm,size=0x8) addr:0x0200ed9c func_0200eda4 kind:function(arm,size=0x6c) addr:0x0200eda4 func_0200ee10 kind:function(thumb,size=0x28) addr:0x0200ee10 IrqDisable kind:function(arm,size=0x14) addr:0x0200ee38 -IrqEnable kind:function(arm,size=0x14) addr:0x0200ee4c -IrqSet kind:function(arm,size=0x18) addr:0x0200ee60 +OS_DisableInterrupts_Irq kind:function(arm,size=0x14) addr:0x0200ee4c +OS_RestoreInterrupts kind:function(arm,size=0x18) addr:0x0200ee60 IrqFiqEnable kind:function(arm,size=0x14) addr:0x0200ee78 IrqFiqSet kind:function(arm,size=0x18) addr:0x0200ee8c IrqGet kind:function(arm,size=0xc) addr:0x0200eea4 @@ -1461,7 +1461,7 @@ func_0202ec70 kind:function(arm,size=0x70) addr:0x0202ec6c func_0202ece0 kind:function(thumb,size=0x34) addr:0x0202ecdc func_0202ed14 kind:function(arm,size=0x44) addr:0x0202ed10 func_0202ed58 kind:function(arm,size=0x164) addr:0x0202ed54 -func_0202eebc kind:function(arm,size=0x3c) addr:0x0202eeb8 +_ZN18UnkStruct_027e080c13func_0202eebcEi kind:function(arm,size=0x3c) addr:0x0202eeb8 func_0202eef8 kind:function(arm,size=0x23c) addr:0x0202eef4 func_0202f134 kind:function(thumb,size=0x20) addr:0x0202f130 func_0202f154 kind:function(thumb,size=0x3e) addr:0x0202f150 @@ -1483,9 +1483,9 @@ _ZN18UnkStruct_0206322016DisplayExceptionEP9Registers kind:function(thumb,size=0 _ZN18UnkStruct_0206322013func_0202f754Ei kind:function(thumb,size=0x194) addr:0x0202f750 func_0202f8e8 kind:function(thumb,size=0x30) addr:0x0202f8e4 func_0202f918 kind:function(thumb,size=0x88) addr:0x0202f914 -func_0202f9a0 kind:function(arm,size=0x88) addr:0x0202f99c +_ZN18UnkStruct_027e08f813func_0202f9a0Ei kind:function(arm,size=0x88) addr:0x0202f99c func_0202fa28 kind:function(thumb,size=0x1bc) addr:0x0202fa24 -func_0202fbe4 kind:function(arm,size=0x1b8) addr:0x0202fbe0 +_ZN18UnkStruct_027e08fc13func_0202fbe4Ev kind:function(arm,size=0x1b8) addr:0x0202fbe0 func_0202fd9c kind:function(thumb,size=0x40) addr:0x0202fd98 func_0202fddc kind:function(thumb,size=0x150) addr:0x0202fdd8 func_0202ff2c kind:function(arm,size=0x4) addr:0x0202ff28 @@ -1681,7 +1681,7 @@ _ZN18UnkStruct_02032f0c13func_02033cbcEPs kind:function(arm,size=0x70) addr:0x02 _ZN18UnkStruct_02032e7cD0Ev kind:function(arm,size=0x14) addr:0x02033ce8 func_02033d40 kind:function(arm,size=0x18) addr:0x02033cfc func_02033d58 kind:function(arm,size=0x18) addr:0x02033d14 -func_02033d70 kind:function(arm,size=0x14) addr:0x02033d2c +_ZN18UnkStruct_027e0c3813func_02033d70Ei kind:function(arm,size=0x14) addr:0x02033d2c func_02033d84 kind:function(arm,size=0xec) addr:0x02033d40 func_02033e70 kind:function(arm,size=0x1c) addr:0x02033e2c func_02033e8c kind:function(arm,size=0x30) addr:0x02033e48 @@ -1784,10 +1784,10 @@ func_020360a8 kind:function(arm,size=0x28) addr:0x02036064 func_020360d0 kind:function(thumb,size=0x4c) addr:0x0203608c func_0203611c kind:function(thumb,size=0x24) addr:0x020360d8 func_02036140 kind:function(thumb,size=0x34) addr:0x020360fc -func_02036174 kind:function(arm,size=0x5c) addr:0x02036130 -func_020361d0 kind:function(arm,size=0x70) addr:0x0203618c +_ZN18UnkStruct_027e0c5413func_02036174Ev kind:function(arm,size=0x5c) addr:0x02036130 +_ZN18UnkStruct_027e0c5413func_020361d0Ev kind:function(arm,size=0x70) addr:0x0203618c func_02036240 kind:function(arm,size=0x170) addr:0x020361fc -func_020363b0 kind:function(arm,size=0x18) addr:0x0203636c +_ZN18UnkStruct_027e0c5413func_020363b0Ev 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_02036490Ev kind:function(thumb,size=0x1cc) addr:0x0203644c @@ -1805,7 +1805,7 @@ _ZN14MessageManager13func_02036824Ev kind:function(arm,size=0x2c) addr:0x020367e _ZN14MessageManager13func_02036850Ev kind:function(arm,size=0x38) addr:0x0203680c _ZN14MessageManager13func_02036888EP18UnkStruct_020386d8 kind:function(arm,size=0x6c) addr:0x02036844 _ZN14MessageManager13func_020368f4EP18UnkStruct_02037750 kind:function(arm,size=0x18) addr:0x020368b0 -_ZN14MessageManager13func_0203690cEiii kind:function(arm,size=0x2b0) addr:0x020368c8 +_ZN14MessageManager13func_0203690cEi kind:function(arm,size=0x2b0) addr:0x020368c8 _ZN14MessageManager13func_02036bbcEv kind:function(arm,size=0x94) addr:0x02036b78 _ZN14MessageManager13func_02036c50Ei kind:function(arm,size=0x54) addr:0x02036c0c _ZN14MessageManager13func_02036ca4Ei kind:function(arm,size=0x40) addr:0x02036c60 @@ -2009,8 +2009,8 @@ _ZN17UnkClass_027e0cbc13func_0203d57cEv kind:function(thumb,size=0x44) addr:0x02 _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 +_ZN17UnkClass_027e0cbc13func_0203d64cEi kind:function(arm,size=0x18) addr:0x0203d608 +_ZN17UnkClass_027e0cbc13func_0203d664Ei 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 _ZN17UnkClass_027e0cbc13func_0203d6d0Ev kind:function(thumb,size=0x6) addr:0x0203d68c @@ -2108,7 +2108,7 @@ func_0203fb9c kind:function(arm,size=0x6c) addr:0x0203fb58 func_0203fc08 kind:function(arm,size=0x28) addr:0x0203fbc4 func_0203fc30 kind:function(arm,size=0x48) addr:0x0203fbec func_0203fc78 kind:function(arm,size=0x188) addr:0x0203fc34 -func_0203fe00 kind:function(arm,size=0x60) addr:0x0203fdbc +_ZN23UnkClass_ov000_027e0d0413func_0203fe00Ev kind:function(arm,size=0x60) addr:0x0203fdbc func_0203fe60 kind:function(thumb,size=0x28) addr:0x0203fe1c func_0203fe88 kind:function(thumb,size=0x2c) addr:0x0203fe44 func_0203feb4 kind:function(thumb,size=0x38) addr:0x0203fe70 diff --git a/include/DTCM/UnkStruct_027e037c.hpp b/include/DTCM/UnkStruct_027e037c.hpp new file mode 100644 index 00000000..96359f03 --- /dev/null +++ b/include/DTCM/UnkStruct_027e037c.hpp @@ -0,0 +1,43 @@ +#pragma once + +#include "global.h" +#include "types.h" + +#include + +struct UnkStruct_027e037c { +public: + /* 000 */ unk32 mUnk_000; + /* 004 */ unk32 mUnk_004; + /* 008 */ Mat4p mUnk_008; + /* 048 */ unk32 mUnk_048; + /* 04c */ Mat4x3p mUnk_04c; + /* 07c */ unk32 mUnk_07c; + /* 080 */ unk32 mUnk_080; + /* 084 */ unk32 mUnk_084; + /* 088 */ unk32 mUnk_088; + /* 08c */ unk32 mUnk_08c; + /* 090 */ unk32 mUnk_090; + /* 094 */ unk32 mUnk_094; + /* 098 */ unk32 mUnk_098; + /* 09c */ unk32 mUnk_09c; + /* 0a0 */ unk32 mUnk_0a0; + /* 0a4 */ unk32 mUnk_0a4; + /* 0a8 */ unk32 mUnk_0a8; + /* 0ac */ unk32 mUnk_0ac; + /* 0b0 */ unk32 mUnk_0b0; + /* 0b4 */ unk32 mUnk_0b4; + /* 0b8 */ unk32 mUnk_0b8; + /* 0bc */ Mat3p rotation; + /* 0e0 */ Vec3p translation; + /* 0ec */ Vec3p scale; + /* 0f8 */ unk32 mUnk_0f8; + /* 0fc */ u32 flags; + /* 100 */ Mat4x3p mUnk_100; + /* 130 */ Mat4x3p mUnk_130; + /* 160 */ Mat4x3p mUnk_160; + /* 190 */ Mat4x3p mUnk_190; + /* 1c0 */ +}; + +extern UnkStruct_027e037c data_027e037c; diff --git a/include/DTCM/UnkStruct_027e077c.hpp b/include/DTCM/UnkStruct_027e077c.hpp index d5d1788a..f7f2cf32 100644 --- a/include/DTCM/UnkStruct_027e077c.hpp +++ b/include/DTCM/UnkStruct_027e077c.hpp @@ -14,6 +14,8 @@ public: void Init(unk32 param1); bool func_0202e740(unk32 param1); + void func_ov009_02116364(); + inline volatile unk32 GetUnk0() const { return mUnk_0; } diff --git a/include/DTCM/UnkStruct_027e080c.hpp b/include/DTCM/UnkStruct_027e080c.hpp new file mode 100644 index 00000000..8c021336 --- /dev/null +++ b/include/DTCM/UnkStruct_027e080c.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include "global.h" +#include "types.h" + +struct UnkStruct_027e080c_010 { + /* 00 */ s32 mUnk_00; + /* 04 */ unk8 mUnk_04[0x8]; + /* 0c */ unk32 mUnk_0c; + /* 10 */ unk32 mUnk_10; + /* 14 */ unk8 mUnk_14[0x50]; + /* 64 */ +}; + +struct UnkStruct_027e080c { +public: + /* 00 */ u8 mUnk_00; + /* 01 */ u8 mUnk_01; + /* 02 */ u8 mUnk_02; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0c */ unk8 mUnk_0c[0x4]; + /* 10 */ UnkStruct_027e080c_010 mUnk_10[2]; + /* d8 */ + + void func_0202eebc(unk32); +}; + +extern UnkStruct_027e080c data_027e080c; diff --git a/include/DTCM/UnkStruct_027e08fc.hpp b/include/DTCM/UnkStruct_027e08fc.hpp new file mode 100644 index 00000000..24553edd --- /dev/null +++ b/include/DTCM/UnkStruct_027e08fc.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "global.h" +#include "types.h" + +#include "Game/GameMode.hpp" + +struct UnkStruct_027e08fc { +public: + /* 0 */ u8 mUnk_0; + /* 1 */ bool mUnk_1; + /* 2 */ u16 mUnk_2; + /* 4 */ + + void func_0202fbe4(); +}; + +extern UnkStruct_027e08fc data_027e08fc; diff --git a/include/DTCM/UnkStruct_027e0c38.hpp b/include/DTCM/UnkStruct_027e0c38.hpp new file mode 100644 index 00000000..8957bc80 --- /dev/null +++ b/include/DTCM/UnkStruct_027e0c38.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include "global.h" +#include "types.h" + +struct UnkStruct_027e0c38 { +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 */ + + void func_02033d70(s32 param1); + void func_02033d40(); +}; + +extern "C" UnkStruct_027e0c38 data_027e0c38; diff --git a/include/DTCM/UnkStruct_027e0c54.hpp b/include/DTCM/UnkStruct_027e0c54.hpp new file mode 100644 index 00000000..57a5db1f --- /dev/null +++ b/include/DTCM/UnkStruct_027e0c54.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include "global.h" +#include "types.h" + +#include "Game/GameMode.hpp" + +struct UnkStruct_027e0c54 { +public: + /* 0 */ bool mUnk_0; + /* 4 */ unk32 mUnk_4; + /* 8 */ + + void func_02036014(GameModeId modeId); + void func_02036050(); + bool func_02036174(); + bool func_020361d0(); + void func_020363b0(); +}; + +extern UnkStruct_027e0c54 data_027e0c54; diff --git a/include/DTCM/UnkStruct_027e0e2c.hpp b/include/DTCM/UnkStruct_027e0e2c.hpp index 00efac4c..8f7a2749 100644 --- a/include/DTCM/UnkStruct_027e0e2c.hpp +++ b/include/DTCM/UnkStruct_027e0e2c.hpp @@ -19,6 +19,7 @@ struct UnkStruct_027e0e2c { /* 2c */ void func_ov000_0207bcb4(); + void func_ov000_0207be84(unk32 param_1); }; extern UnkStruct_027e0e2c data_027e0e2c; diff --git a/include/DTCM/UnkStruct_027e103c.hpp b/include/DTCM/UnkStruct_027e103c.hpp index 02f58f4c..bb094ec1 100644 --- a/include/DTCM/UnkStruct_027e103c.hpp +++ b/include/DTCM/UnkStruct_027e103c.hpp @@ -117,6 +117,7 @@ struct UnkStruct_027e103c { void func_ov004_02104ffc(unk32 param1, unk32 param2); void func_ov004_0210504c(); + void func_ov005_02103e58(u16 *param1); void func_ov005_02103f20(); void func_ov005_02103f3c(); bool func_ov005_02103f4c(); diff --git a/include/Game/Game.hpp b/include/Game/Game.hpp index 4c60c0ab..53c03988 100644 --- a/include/Game/Game.hpp +++ b/include/Game/Game.hpp @@ -31,14 +31,14 @@ public: /* 008 */ GameMode *mMode; /* 00c */ unk8 mUnk_00c[0xc0]; /* 0cc */ FadeControl mFadeControl; - /* 0f0 */ unk16 mUnk_0f0; + /* 0f0 */ u16 mUnk_0f0; /* 0f2 */ u16 mUnk_0f2; /* 0f4 */ s32 mUnk_0f4; /* 0f8 */ s32 mUnk_0f8; /* 0fc */ u16 mUnk_0fc; /* 0fe */ u16 mUnk_0fe; /* 100 */ unk8 mUnk_100; - /* 101 */ s8 mUnk_101; + /* 101 */ u8 mUnk_101; /* 102 */ bool mUnk_102; /* 103 */ u8 mUnk_103; /* 104 */ diff --git a/include/Message/MessageManager.hpp b/include/Message/MessageManager.hpp index 7884cadc..d7cbc98e 100644 --- a/include/Message/MessageManager.hpp +++ b/include/Message/MessageManager.hpp @@ -56,7 +56,7 @@ public: bool func_02036850(void); void func_02036888(UnkStruct_020386d8 *param_2); bool func_020368f4(UnkStruct_02037750 *param_2); - void func_0203690c(unk32 param_2, unk32 param_3, unk32 param_4); + void func_0203690c(unk32 param_2); void func_02036bbc(void); void func_02036c50(unk32 param_2); void func_02036ca4(unk32 param_2); diff --git a/include/Message/MsgProc.hpp b/include/Message/MsgProc.hpp index bdef3a22..81497633 100644 --- a/include/Message/MsgProc.hpp +++ b/include/Message/MsgProc.hpp @@ -94,6 +94,7 @@ struct Struct_027e0db0 { /* 0x04 */ unk32 mUnk_04; void func_ov000_0207b288(GameModeId modeId); + void func_ov000_0207b378(unk32 param_1); }; extern Struct_027e0db0 data_027e0db0; @@ -101,6 +102,8 @@ class UnkClass_027e0cbc { public: void func_0203d57c(); void func_0203d5c0(); + void func_0203d64c(s32); + void func_0203d664(s32); void func_0203d6d0(); unk32 func_0203d7e0(unk32); unk32 func_0203d77c(unk32, s32, s32); @@ -109,7 +112,6 @@ extern UnkClass_027e0cbc data_027e0cbc; extern unk16 data_02056a10[]; extern unk16 data_02056a16[]; extern unk32 data_02056a04[]; -extern unk32 data_027e0c38[]; extern "C" void func_0203489c(unk32, unk16, unk32 *, unk32 *); extern "C" void func_020347b0(unk32, unk16, unk32 *, unk32 *, unk32, unk32); extern THUMB unk32 func_0202ab48(void); @@ -123,7 +125,6 @@ public: void func_ov000_0207bc9c(); }; extern UnkClass_027e0e28 *data_027e0e28; -extern u8 data_027e0c54; extern unk32 *data_ov009_0211f5b4; extern "C" unk32 func_ov003_020f3f94(unk32 *); extern "C" void func_ov003_020f4060(unk32 **); @@ -174,6 +175,7 @@ class UnkClass_ov000_027e0d04 { public: /* 0x00 */ unk16 mUnk_00; + void func_0203fe00(); void func_0203fe60(unk32); }; extern UnkClass_ov000_027e0d04 data_027e0d04; diff --git a/include/Unknown/UnkStruct_020ee734.hpp b/include/Unknown/UnkStruct_020ee734.hpp index 9b958c9f..bd30e7fd 100644 --- a/include/Unknown/UnkStruct_020ee734.hpp +++ b/include/Unknown/UnkStruct_020ee734.hpp @@ -32,6 +32,7 @@ public: void func_ov000_020d6488(); void func_ov000_020d6620(void); void func_ov000_020d6438(GameModeId modeId); + void func_ov000_020d64ac(); void func_ov008_021131ac(void); }; diff --git a/include/Unknown/UnkStruct_027e0d54.hpp b/include/Unknown/UnkStruct_027e0d54.hpp index 4604778a..c7ce111f 100644 --- a/include/Unknown/UnkStruct_027e0d54.hpp +++ b/include/Unknown/UnkStruct_027e0d54.hpp @@ -1,9 +1,11 @@ #pragma once -#include "System/SysNew.hpp" #include "global.h" #include "types.h" +#include "Game/GameMode.hpp" +#include "System/SysNew.hpp" + class UnkStruct_027e0d54_08 : public SysObject { public: /* 00 */ u32 mUnk_00[1]; @@ -17,7 +19,7 @@ public: /* 04 */ bool mUnk_0c; /* 04 */ unk8 mUnk_0d; /* 04 */ unk8 mUnk_0e; - /* 04 */ unk8 mUnk_0f; + /* 04 */ u8 mUnk_0f; /* 10 */ unk32 mUnk_10; /* 10 */ u16 mUnk_14; /* 10 */ unk16 mUnk_16; @@ -25,6 +27,7 @@ public: UnkStruct_027e0d54(); void func_ov008_02112f28(); + void func_ov000_0207a2e8(GameModeId modeId); }; extern UnkStruct_027e0d54 data_027e0d54; diff --git a/include/Unknown/UnkStruct_027e0dbc.hpp b/include/Unknown/UnkStruct_027e0dbc.hpp index 2a2e077a..76dbf9a1 100644 --- a/include/Unknown/UnkStruct_027e0dbc.hpp +++ b/include/Unknown/UnkStruct_027e0dbc.hpp @@ -21,6 +21,9 @@ public: UnkStruct_027e0dbc(); void func_02042744(unk32 *param_1); + void func_ov000_0207b9dc(); + void func_ov000_0207b9c8(); + void func_ov000_0207b988(GameModeId modeId); }; extern UnkStruct_027e0dbc data_027e0dbc; diff --git a/libs/nds/include/nds/gfx.h b/libs/nds/include/nds/gfx.h new file mode 100644 index 00000000..3992a4e1 --- /dev/null +++ b/libs/nds/include/nds/gfx.h @@ -0,0 +1,19 @@ +#ifndef _NDS_GFX_H +#define _NDS_GFX_H + +#include "global.h" +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define GFX_FIFO_SWAP_BUFFERS (*(volatile u32 *) 0x04000540) +#define GFX_FIFO_VIEWPORT (*(volatile u32 *) 0x04000580) +#define REG_VCOUNT (*(volatile u16 *) 0x04000006) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libs/nds/include/nds/irq.h b/libs/nds/include/nds/irq.h new file mode 100644 index 00000000..2c1863df --- /dev/null +++ b/libs/nds/include/nds/irq.h @@ -0,0 +1,18 @@ +#ifndef _NDS_IRQ_H +#define _NDS_IRQ_H + +#include "global.h" +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +u32 OS_DisableInterrupts_Irq(); +void OS_RestoreInterrupts(u32); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp index 3c981075..7b15d166 100644 --- a/src/00_Core/Actor/Actor.cpp +++ b/src/00_Core/Actor/Actor.cpp @@ -6,6 +6,7 @@ extern "C" { #include "Actor/ActorManager.hpp" #include "Actor/ActorPlayerDummy.hpp" #include "DTCM/UnkStruct_027e077c.hpp" +#include "DTCM/UnkStruct_027e0c54.hpp" #include "DTCM/UnkStruct_027e103c.hpp" #include "Item/ItemManager.hpp" #include "Map/MapManager.hpp" @@ -946,9 +947,8 @@ ARM bool Actor::func_ov00_020c3118(unk16 param1) { return func_ov00_020c5924(&mPos, param1, &mRef, 2, NULL); } -extern u8 data_027e0c54; ARM bool Actor::func_ov00_020c313c(u32 param1) { - return param1 == data_027e0c54; + return param1 == data_027e0c54.mUnk_0; } ARM void Actor::func_ov00_020c3158() { diff --git a/src/Main/Game/Game.cpp b/src/Main/Game/Game.cpp index 6519614f..71ccde10 100644 --- a/src/Main/Game/Game.cpp +++ b/src/Main/Game/Game.cpp @@ -1,8 +1,19 @@ #include "Game/Game.hpp" + +#include +#include + +#include "DTCM/UnkStruct_027e037c.hpp" #include "DTCM/UnkStruct_027e05f8.hpp" #include "DTCM/UnkStruct_027e077c.hpp" +#include "DTCM/UnkStruct_027e080c.hpp" +#include "DTCM/UnkStruct_027e08f8.hpp" +#include "DTCM/UnkStruct_027e08fc.hpp" +#include "DTCM/UnkStruct_027e0c38.hpp" +#include "DTCM/UnkStruct_027e0c54.hpp" #include "DTCM/UnkStruct_027e0e2c.hpp" #include "DTCM/UnkStruct_027e0ffc.hpp" +#include "DTCM/UnkStruct_027e103c.hpp" #include "Game/GameModeAdventure.hpp" #include "Game/GameModeBattle.hpp" #include "Message/MessageManager.hpp" @@ -10,10 +21,14 @@ #include "Player/TouchControl.hpp" #include "Render/FadeController.hpp" #include "System/OverlayManager.hpp" +#include "System/Random.hpp" #include "Unknown/UnkStruct_0203dae0.hpp" +#include "Unknown/UnkStruct_02063220.hpp" #include "Unknown/UnkStruct_02075dac.hpp" #include "Unknown/UnkStruct_020ec7dc.hpp" #include "Unknown/UnkStruct_020ee734.hpp" +#include "Unknown/UnkStruct_027e0d54.hpp" +#include "Unknown/UnkStruct_027e0dbc.hpp" #define FRAME_COUNTER (*(u32 *) 0x027ffc3c) #define REG_POWER_CNT (*(u16 *) 0x04000304) @@ -21,12 +36,13 @@ #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_027e0d54; +extern unk32 data_02063e4c; +extern unk32 data_02068780; +extern unk32 data_027e08e4; extern bool data_027e0f8c; extern unk32 data_ov009_0211e0c0; extern unk32 data_ov010_0211e960; @@ -138,23 +154,21 @@ const GameModeData gGameModes[] = { }, }; -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_027e0dbc.func_ov000_0207b9c8(); 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); + data_027e0c54.func_02036050(); gOverlayManager.UnloadGameMode(); return; } @@ -164,14 +178,11 @@ 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(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); 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(); @@ -195,20 +206,20 @@ THUMB bool Game::StartGameMode() { func_02031024(&data_020683f4); data_027e077c.Init(0); Fill16(0, (u16 *) &data_027e0d04, 6); - func_02033d40(&data_027e0c38); + data_027e0c38.func_02033d40(); data_027e05f8 = UnkStruct_027e05f8(); if (gOverlayManager.mLoadedOverlays[0] != OverlayId_None) { data_ov000_020ec7dc.func_ov000_0207c0f0(mModeId); gTouchControl.Init(); data_027e0e2c.func_ov000_0207bcb4(); data_027e0db0.func_ov000_0207b288(mModeId); - func_ov000_0207a2e8(&data_027e0d54, mModeId); + data_027e0d54.func_ov000_0207a2e8(mModeId); data_027e0ffc.func_ov000_020ce704(); data_027e0f8c = false; } gOverlayManager.LoadGameMode(mModeId); - func_02036014(&data_027e0c54, mModeId); + data_027e0c54.func_02036014(mModeId); func_02035604(&data_02068e64, mModeId); func_0203d0c0(&data_02068ed0, mModeId); data_02075dac.func_0203f904(); @@ -216,7 +227,7 @@ THUMB bool Game::StartGameMode() { gMessageManager.func_02036490(); if (gOverlayManager.mLoadedOverlays[0] != OverlayId_None) { data_ov000_020ee734.func_ov000_020d6438(mModeId); - func_ov000_0207b988(&data_027e0dbc, mModeId); + data_027e0dbc.func_ov000_0207b988(mModeId); } mMode = GAME_MODE_DATA(mModeId)->mModeCreateFunc(mModeId); @@ -245,9 +256,145 @@ THUMB bool Game::StartGameMode() { return mFadeControl.func_0202abdc(0x20, 0); } -THUMB void Game::func_0202c974() {} +THUMB void Game::func_0202c974() { + this->func_0202cf34(); +} + THUMB void Game::func_0202c97c() {} -ARM void Game::Run() {} + +extern "C" void func_0200a440(); +extern "C" void func_020310fc(unk32 *param0); +extern "C" void func_02025c7c(unk32 *param0); +extern "C" void func_020363c8(u16 *param0, UnkStruct_027e0c54 *param1); +extern "C" void func_02025d2c(); +extern "C" void func_0202f2ac(unk32 *param0); +extern "C" bool func_0202f328(unk32 *param0); +ARM void Game::Run() { + bool bVar2; + u32 uVar4; + s32 iVar5; + bool ov00Loaded; + bool bVar6; + s32 nextGameMode; + u16 local_28[2]; + unk8 *vcount; + + func_0202c97c(); + do { + this->StartGameMode(); + do { + data_027e0c54.func_020363b0(); + data_027e08fc.func_0202fbe4(); + bVar2 = data_027e0c54.func_02036174(); + ov00Loaded = gOverlayManager.mLoadedOverlays[0] != -1; + data_027e0cbc.func_0203d64c(bVar2); + if ((ov00Loaded) && (bVar2 == 0)) { + func_0200a440(); + } + data_027e05f8.func_0202adf4(this->mUnk_0f2, bVar2); + data_027e08f8.func_0202f9a0(0); + bVar6 = data_027e080c.mUnk_04 == 3 || data_027e080c.mUnk_10[0].mUnk_00 == 3; + data_027e080c.func_0202eebc(this->mUnk_0f2); + data_027e0d04.func_0203fe00(); + data_027e0c38.func_02033d70(bVar2); + if (ov00Loaded) { + gTouchControl.func_ov00_0207af38(this->mUnk_0f2, bVar2); + if ((this->mUnk_0f4 & 7U) == 0) { + data_027e0dbc.func_ov000_0207b9dc(); + } else { + gRandom.Next(0); + } + } + nextGameMode = 0; + if (!bVar6) { + nextGameMode = this->mMode->vfunc_08(bVar2); + } + gMessageManager.func_0203690c(bVar2); + data_027e0cbc.func_0203d664(bVar2); + if (this->mModeId != 1) { + iVar5 = 1; + if (data_027e0c54.mUnk_0) { + iVar5 = bVar2; + } + if (iVar5 != 0) { + data_ov000_020ee734.func_ov000_020d64ac(); + } + } + if (bVar6) { + gFadeController.ProcessFade((u32) this->mUnk_0f2); + if ((this->mUnk_101 == 0) && (ov00Loaded)) { + data_027e0e2c.func_ov000_0207be84(bVar2); + data_027e0db0.func_ov000_0207b378(bVar2); + } + if (this->mModeId == 2) { + data_027e077c.func_ov009_02116364(); + } + } + data_027e037c.scale.x = FLOAT_TO_Q20(1.0); + data_027e037c.scale.y = FLOAT_TO_Q20(1.0); + data_027e037c.scale.z = FLOAT_TO_Q20(1.0); + data_027e037c.translation.x = 0; + data_027e037c.translation.y = 0; + data_027e037c.translation.z = 0; + Mat3p_InitIdentity(&data_027e037c.rotation); + data_027e037c.flags = 0; + FlushGfxQueue(); + GFX_FIFO_VIEWPORT = 0xbfff0000; + this->mMode->vfunc_14(data_027e0c54.func_020361d0()); + FlushGfxQueue(); + func_020310fc(&data_02063e4c); + func_02025c7c(&data_02068780); + func_020363c8(local_28, &data_027e0c54); + this->mUnk_0f0 = local_28[0]; + this->mMode->vfunc_10(&this->mUnk_0f0); + gMessageManager.func_02036ca4((unk32) & this->mUnk_0f0); + if (this->mModeId == 2) { + data_027e103c->func_ov005_02103e58(&this->mUnk_0f0); + } + func_02025d2c(); + bool unk = (this->mUnk_0f2 >= 1); + bVar2 = (s32) (this->mUnk_0f2 - (FRAME_COUNTER - this->mUnk_0f8) - 1) > 0; + if (unk && bVar2) { + do { + if ((s32) REG_VCOUNT < 0xb0) { + break; + } + } while ((s32) REG_VCOUNT <= 0xc5); + bVar2 = (u32) this->mUnk_0f2 - (FRAME_COUNTER - this->mUnk_0f8); + while ((0 < bVar2 + -1) ? 1 : 0) { + func_0202f2ac(&data_027e08e4); + bVar2 = (u32) this->mUnk_0f2 - (FRAME_COUNTER - this->mUnk_0f8); + } + } + uVar4 = OS_DisableInterrupts_Irq(); + this->mUnk_100 = 1; + GFX_FIFO_SWAP_BUFFERS = 3; + OS_RestoreInterrupts(uVar4); + func_0202f2ac(&data_027e08e4); + this->mUnk_100 = 0; + this->mUnk_0f8 = FRAME_COUNTER; + if (gOverlayManager.mLoadedOverlays[0] != -1) { + switch (data_027e0d54.mUnk_0f) { + case 1: + data_02063220.func_0202f754(2); + break; + case 2: + data_02063220.func_0202f754(3); + break; + } + } + } while (nextGameMode == 0); + while (func_0202f328(&data_027e08e4)) { + func_0202f2ac(&data_027e08e4); + } + FlushGfxQueue(); + this->EndGameMode(); + FlushGfxQueue(); + this->mPrevModeId = this->mModeId; + this->mModeId = nextGameMode; + } while (true); +} + THUMB void Game::func_0202cec8(s32 param1, unk32 param2) {} THUMB void Game::func_0202cf34() {} ARM void Game::func_0202cf44() {} diff --git a/src/Main/Message/MessageManager.cpp b/src/Main/Message/MessageManager.cpp index 76d883a6..705b773b 100644 --- a/src/Main/Message/MessageManager.cpp +++ b/src/Main/Message/MessageManager.cpp @@ -1,5 +1,6 @@ #include "Message/MessageManager.hpp" #include "Actor/ActorManager.hpp" +#include "DTCM/UnkStruct_027e0c54.hpp" #include "Game/Game.hpp" #include "Player/TouchControl.hpp" #include "System/SysNew.hpp" @@ -236,7 +237,7 @@ ARM bool MessageManager::func_020368f4(UnkStruct_02037750 *param_2) { } // non-matching -ARM void MessageManager::func_0203690c(unk32 param_2, unk32 param_3, unk32 param_4) { +ARM void MessageManager::func_0203690c(unk32 param_2) { UnkStruct_020397f8 *unk_28_0; UnkStruct_020397f8 *unk_28_2; UnkStruct_02038aa0 *pSVar4; @@ -308,7 +309,7 @@ ARM void MessageManager::func_0203690c(unk32 param_2, unk32 param_3, unk32 param //! TODO: fake? pSVar4 = this->func_02037178((UnkSubClass1_02256FF8 *) this->mUnk_18[0]); - if (data_027e0c54 != 0 && pSVar4 != NULL && pSVar4->mUnk_50 != ((data_02056be4[data_027e077c.mUnk_0] & 1) != 0)) { + if (data_027e0c54.mUnk_0 && pSVar4 != NULL && pSVar4->mUnk_50 != ((data_02056be4[data_027e077c.mUnk_0] & 1) != 0)) { this->mUnk_04 = 0; } } diff --git a/src/Main/Unknown/UnkStruct_02038aa0.cpp b/src/Main/Unknown/UnkStruct_02038aa0.cpp index c32b4df8..516055df 100644 --- a/src/Main/Unknown/UnkStruct_02038aa0.cpp +++ b/src/Main/Unknown/UnkStruct_02038aa0.cpp @@ -1,4 +1,5 @@ #include "Unknown/UnkStruct_02038aa0.hpp" +#include "DTCM/UnkStruct_027e0c54.hpp" #include "DTCM/UnkStruct_027e103c.hpp" #include "Game/Game.hpp" #include "Message/MessageManager.hpp" @@ -55,7 +56,7 @@ ARM void UnkStruct_02038aa0::func_02038b74(void) {} // non-matching ARM bool UnkStruct_02038aa0::func_02038b78() { - if (data_027e0c54 == 0) { + if (!data_027e0c54.mUnk_0) { if ((this->mUnk_50 != 0 && gMessageManager.func_02036850() != 0) || (this->mUnk_50 == 0 && gMessageManager.func_02036824() != 0)) { return true; diff --git a/src/Main/Unknown/UnkStruct_020397f8.cpp b/src/Main/Unknown/UnkStruct_020397f8.cpp index 03011bfe..ef07a377 100644 --- a/src/Main/Unknown/UnkStruct_020397f8.cpp +++ b/src/Main/Unknown/UnkStruct_020397f8.cpp @@ -1,4 +1,6 @@ #include "Unknown/UnkStruct_020397f8.hpp" +#include "DTCM/UnkStruct_027e0c38.hpp" +#include "DTCM/UnkStruct_027e0c54.hpp" #include "DTCM/UnkStruct_027e103c.hpp" #include "Game/Game.hpp" #include "Message/MessageManager.hpp" @@ -262,7 +264,7 @@ ARM void UnkStruct_020397f8::vfunc_40(s32 param1, s32 param2) { local_9c += param1 + local_8c + iVar6; local_a0 += param2 + local_90 + iVar7; - if (data_027e0c38[5] == 1) { + if (data_027e0c38.mUnk_14 == 1) { iVar8 = func_0202ab48(); if (iVar8 == 0) { @@ -516,7 +518,7 @@ ARM void UnkStruct_020397f8::vfunc_50(EntryINF1 *param1, unk32 param2, s32 *para iVar6 = param3[0]; - if (data_027e0c54 != 0) { + if (data_027e0c54.mUnk_0) { UnkStruct_020397f8 *pVar4 = gMessageManager.func_02036700(); if (pVar4 != NULL && pVar4->mUnk_15c > 0) {