mirror of
https://github.com/zeldaret/st
synced 2026-10-14 15:57:49 -04:00
2c723299b7
* create CommonFuncs.hpp * merge every `extern "C"` to a common header * fix regressions * I'm dumb
195 lines
5.4 KiB
C++
195 lines
5.4 KiB
C++
#include "Game/GameModeStartUp.hpp"
|
|
#include "CommonFuncs.hpp"
|
|
#include "Game/Game.hpp"
|
|
#include "System/OverlayManager.hpp"
|
|
#include "System/SysFault.hpp"
|
|
#include "System/SysNew.hpp"
|
|
#include "Unknown/UnkStruct_02049b80.hpp"
|
|
#include "Unknown/UnkStruct_0204a110.hpp"
|
|
#include "Unknown/UnkStruct_0204e5f8.hpp"
|
|
#include "Unknown/UnkStruct_0204e64c.hpp"
|
|
#include "Unknown/UnkStruct_ov000_020b4ec4.hpp"
|
|
#include "Unknown/UnkStruct_ov000_020b50c0.hpp"
|
|
|
|
#include <nitro/gx.h>
|
|
#include <nitro/os.h>
|
|
#include <nitro/reg.h>
|
|
#include <nitro/tp.h>
|
|
|
|
static u8 data_ov018_020c5bc0;
|
|
|
|
void SysFault::func_ov018_020c4840() {
|
|
this->mUnk_05 = 0;
|
|
func_02027a28((void *) func_0201245c, 0);
|
|
DC_FlushAll();
|
|
this->mUnk_00 = 0;
|
|
this->mUnk_04 = 0;
|
|
}
|
|
|
|
Game::Game() :
|
|
mpCurrentGameMode(NULL),
|
|
createCallback(NULL),
|
|
mUnk_08(NULL),
|
|
mpSaveSlot(NULL),
|
|
mUnk_14(NULL),
|
|
mUnk_18(NULL) {}
|
|
|
|
void Game::func_ov018_020c48a4() {
|
|
OS_SetIrqFunction(1, func_02013184);
|
|
OS_EnableIrqMask(1);
|
|
GX_VBlankIntr(1);
|
|
OS_WakeupThreadDirect(&this->mUnk_1C.mUnk_04);
|
|
func_02031e48((void *) func_020131b0);
|
|
this->TrySetCreateCallback((GameModeCreateCallback) Game::func_ov018_020c4ba8);
|
|
}
|
|
|
|
void Game::func_ov018_020c48f8() {
|
|
if (gOverlayManager.mLoadedOverlays[OverlaySlot_Second] != OverlayIndex_Second) {
|
|
data_02049ba0.LoadIfNotLoaded(OverlaySlot_Second, OverlayIndex_Second);
|
|
data_0204999c.func_ov018_020c4a5c();
|
|
data_ov000_020b50c0.func_ov018_020c5718();
|
|
data_02049ba0.func_02014994(1);
|
|
}
|
|
}
|
|
|
|
UnkStruct_02049b18::UnkStruct_02049b18() {
|
|
this->mUnk_58 = 0;
|
|
this->mUnk_5A = 0;
|
|
this->func_02013768();
|
|
}
|
|
|
|
void UnkStruct_02011e10::func_ov018_020c4980() {
|
|
u8 *arenaLo = (u8 *) OS_GetMainArenaLo();
|
|
u8 *arenaHi = (u8 *) OS_GetMainArenaHi();
|
|
|
|
for (int i = 0; i < HeapIndex_Max; i++) {
|
|
this->mUnk_00[i] = NULL;
|
|
}
|
|
|
|
for (int i = 0; i < ARRAY_LEN(this->mUnk_24); i++) {
|
|
this->mUnk_24[i] = 0;
|
|
}
|
|
|
|
this->mUnk_00[HeapIndex_Main] = func_020012e0(arenaLo, arenaHi - arenaLo, 2);
|
|
unk32 length = func_0202d624(NULL, 0);
|
|
void *ptr = ::operator new(length, 0, 4);
|
|
func_0202d624(ptr, length);
|
|
ptr = ::operator new(0xBE000, 0, 4);
|
|
void *uVar3 = func_02001fd4(ptr, 0xBE000);
|
|
|
|
this->mUnk_24[0] = (unk32) uVar3;
|
|
this->mUnk_5C = 0;
|
|
this->mUnk_60 = 0xD2F0;
|
|
this->mUnk_64 = 0;
|
|
this->mUnk_68 = 0;
|
|
this->mUnk_6C = 0;
|
|
this->mUnk_70 = 0;
|
|
this->mUnk_74 = 0;
|
|
this->mUnk_78 = 0;
|
|
this->mUnk_7C = 0;
|
|
}
|
|
|
|
void UnkStruct_02011e10::func_ov018_020c4a5c() {
|
|
UnkStruct_02011e10_Sub1 *temp_r2;
|
|
uintptr_t temp_r5;
|
|
u8 *temp_r7;
|
|
u8 *temp_r0;
|
|
|
|
func_020013ac(this->mUnk_00[0]);
|
|
temp_r2 = this->mUnk_00[0];
|
|
|
|
temp_r5 = ((uintptr_t) temp_r2->mUnk_1C - (uintptr_t) temp_r2); //! TODO: fake match?
|
|
temp_r7 = (u8 *) OS_GetArenaLo(0);
|
|
temp_r7 += temp_r5;
|
|
|
|
temp_r0 = (u8 *) OS_GetMainArenaHi();
|
|
this->mUnk_00[1] = func_02001098(temp_r7, temp_r0 - temp_r7, 2);
|
|
this->mUnk_5C = func_020011f4(this->mUnk_00[1]);
|
|
OS_SetMainArenaLo((void *) temp_r0);
|
|
this->mUnk_74 = 1;
|
|
}
|
|
|
|
UnkStruct_ov000_020b4ec4::UnkStruct_ov000_020b4ec4() {}
|
|
|
|
UnkStruct_02049b80::UnkStruct_02049b80() {
|
|
this->mUnk_08 = this;
|
|
|
|
for (int i = 0; i < ARRAY_LEN(this->mUnk_0C); i++) {
|
|
this->mUnk_0C[i] = 0;
|
|
this->mUnk_1C[i] = 0;
|
|
}
|
|
}
|
|
|
|
UnkStruct_02049b18_06::UnkStruct_02049b18_06() {
|
|
TPCalibrateParam params;
|
|
|
|
TP_Init();
|
|
|
|
if (OS_func_0065()) {
|
|
TP_SetCalibrateParam(NULL);
|
|
} else if (TP_GetUserInfo(¶ms)) {
|
|
TP_SetCalibrateParam(¶ms);
|
|
}
|
|
}
|
|
|
|
UnkStruct_0204e64c_00::UnkStruct_0204e64c_00() {
|
|
this->mUnk_04 = 0;
|
|
this->mUnk_06 = 0;
|
|
this->mUnk_08 = 0;
|
|
this->mUnk_0A = 0;
|
|
this->mUnk_0B = 0;
|
|
this->mUnk_0C = 0;
|
|
}
|
|
|
|
UnkStruct_0204e64c::UnkStruct_0204e64c() {
|
|
this->mUnk_16 = 0;
|
|
}
|
|
|
|
GameModeStartUp *Game::func_ov018_020c4ba8() {
|
|
static GameModeStartUp data_ov018_020c5bd4;
|
|
return &data_ov018_020c5bd4;
|
|
}
|
|
|
|
GameModeStartUp::GameModeStartUp() {
|
|
this->mUnk_28 = 0;
|
|
this->mUnk_2A = 0;
|
|
data_0204a110.func_02018c78(1);
|
|
data_0204a110.func_ov018_020c5300();
|
|
|
|
if (data_ov018_020c5bc0 == 0) {
|
|
UnkStruct2 stack_narc("Screen/Bg/Nlogo.bin", 1);
|
|
stack_narc.func_020154ec("NLG");
|
|
UnkResult stack_allrights("NLG:AllRights");
|
|
UnkResult stack_logo("NLG:Nlogo");
|
|
|
|
func_0200a7b0(0, stack_allrights.mUnk_00, stack_allrights.mUnk_04, stack_allrights.mUnk_08, 0, 0, 0, 2);
|
|
func_0200a7b0(4, stack_logo.mUnk_00, stack_logo.mUnk_04, stack_logo.mUnk_08, 0, 0, 0, 2);
|
|
|
|
this->mUnk_04.mUnk_14 = 0x00010000;
|
|
this->mUnk_04.func_0201bba4(0, 0x14);
|
|
} else {
|
|
this->mUnk_04.func_0201bba4(0, 0x01);
|
|
}
|
|
|
|
data_0204e5f8.func_0201b9a8(&this->mUnk_04);
|
|
}
|
|
|
|
void GameModeStartUp::vfunc_0C() {
|
|
if (this->mUnk_04.mUnk_0D == this->mUnk_04.mUnk_10) {
|
|
if (this->mUnk_28 == 0) {
|
|
this->mUnk_2C = REG_FRAME_COUNTER;
|
|
gGame.func_ov018_020c48f8();
|
|
} else if (!this->mUnk_2A && (REG_FRAME_COUNTER - this->mUnk_2C) >= 0x3C) {
|
|
this->mUnk_2A = data_0204a060.func_020183d4(false, (GameModeCreateCallback) UnkStruct_0204a060::func_020183b8, 1);
|
|
|
|
if (data_ov018_020c5bc0 != 0) {
|
|
data_0204a060.func_0201bb84(1, 0, 1);
|
|
}
|
|
}
|
|
|
|
this->mUnk_28++;
|
|
}
|
|
}
|
|
|
|
void GameModeStartUp::vfunc_20() {}
|