diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/00_Core/Player/TouchControl.cpp | 2 | ||||
| -rw-r--r-- | src/Main/DTCM/UnkStruct_027e05f8_2.cpp | 2 | ||||
| -rw-r--r-- | src/Main/DTCM/UnkStruct_027e077c.cpp | 2 | ||||
| -rw-r--r-- | src/Main/Game/Game.cpp | 260 | ||||
| -rw-r--r-- | src/Main/Message/MessageManager.cpp | 2 | ||||
| -rw-r--r-- | src/Main/System/OverlayManager.cpp | 20 | ||||
| -rw-r--r-- | src/Main/Unknown/UnkStruct_0203dae0.cpp | 7 |
7 files changed, 258 insertions, 37 deletions
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; |
