Files
st/src/018_StartUp/StartUpInitializers.cpp
T
Yanis 645ed65b76 Misc stuff 4 (#59)
* playrget progress and match treasuremanager remaining functions

* some docs

* fix build issues

* random docs

* match func_ov094_02172290

* random docs

* actor cleanup

* match freestanding item funcs

* mType -> mpProfile

* decompile random functions

* docs and start of wip chest stuff

* random docs

* more random docs

* match func_ov036_0211d0a8

* match func_ov036_0211d2dc & func_ov036_0211d570

* match func_ov110_02184a40

* random doc

* document letter/stamps system

* match func_ov001_020bb9f8

* fix build issues

* decompile tres

* start decomp chest base

* fix regressions

* name TRES

* name UnkStruct_ov024_020d86b0

* name stamp types and update save struct stuff

* name things and document BMG IDs
2026-05-03 18:57:01 +02:00

476 lines
13 KiB
C++

#include "Save/SaveManager.hpp"
#include "System/Random.hpp"
#include "System/SysFault.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkMemFuncs.h"
#include "Unknown/UnkStruct_02049f04.hpp"
#include "Unknown/UnkStruct_0204a060.hpp"
#include "Unknown/UnkStruct_0204a090.hpp"
#include "Unknown/UnkStruct_0204a110.hpp"
#include "Unknown/UnkStruct_0204af1c.hpp"
#include "Unknown/UnkStruct_0204e5f8.hpp"
#include "Unknown/UnkStruct_0204e640.hpp"
#include "Unknown/UnkStruct_ov000_020b4eec.hpp"
#include "Unknown/UnkStruct_ov000_020b4f84.hpp"
#include "Unknown/UnkStruct_ov000_020b50c0.hpp"
#include "Unknown/UnkStruct_ov000_020b51b8.hpp"
#include "Unknown/UnkStruct_ov000_020b52b4.hpp"
#include "Unknown/UnkStruct_ov000_020b52e8.hpp"
#include "Unknown/UnkStruct_ov000_020b5340.hpp"
#include "regs.h"
#include "versions.h"
extern "C" {
unk32 func_02014fe0();
unk16 OS_GetLockID();
void GX_DispOn();
void func_020327c8(void *param1, unk32 param2);
void CARD_LockBackup(u16 param1);
void CARD_UnlockBackup(u16 param1);
unk32 CARD_IdentifyBackup(unk32 param1);
unk32 CARD_ReadWriteBackupAsync(void *param1, void *param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6,
unk32 param7, unk32 param8, unk32 param9);
unk32 CARD_GetResultCode();
void func_0201bdd0();
void OS_SetIrqFunction(unk32 param1, void *param2);
void NNS_SndInit();
void NNS_SndArcInit(void *param1, const char *soundDataPath, unk32 param2, unk32 param3);
void NNS_SndArcPlayerSetup(unk32 param1);
void func_02004d2c(unk32 param1, unk32 param2);
void func_02001778(unk32 param1);
void func_02003f98(unk32 param1, unk32 param2);
void NNS_SndHeapSaveState(unk32 param1);
void func_0202ee0c();
void func_0202f910(unk32 param1);
void func_0202f958(unk32 param1);
void func_02005030(void *param1);
void NNS_SndHandleInit(void *param1);
void NNS_SndPlayerStopSeq(void *param1, unk32 param2);
void RTC_Init();
}
ARM void func_ov018_020c4e8c(void) {
RTC_Init();
gRandom.Init();
data_0204999c.func_ov018_020c4980();
data_02049984.func_ov018_020c4840();
}
THUMB UnkStruct_0204a060::UnkStruct_0204a060() {
this->createCallback = NULL;
}
ARM UnkStruct_ov000_020b4eec::UnkStruct_ov000_020b4eec() {
this->mUnk_00 = 0;
MI_CpuFill32(0, this->mUnk_04, sizeof(this->mUnk_04));
}
ARM UnkStruct_ov000_020b4f84::UnkStruct_ov000_020b4f84() {
// fake match?
int *arg0 = 0;
this->mUnk_C0 = (int) arg0 + 1;
this->func_ov000_0206667c(FontIndex_DSZ2_msg, 0);
if (func_02014fe0() == 0) {
this->func_ov000_0206667c(FontIndex_LC_Font_s, 0);
}
}
ARM UnkStruct_ov000_020b4f84_00::~UnkStruct_ov000_020b4f84_00() {}
ARM UnkStruct_ov000_020b504c::UnkStruct_ov000_020b504c() :
mUnk_008(NULL),
mUnk_030(1) {
MI_CpuFill32(0, this->mUnk_05C, sizeof(this->mUnk_05C));
this->mUnk_06F = 0;
this->mUnk_000 = new(HeapIndex_Main) UnkStruct_ov000_020b504c_Sub3(0x21);
MI_CpuFill32(0, this->mUnk_00C, sizeof(this->mUnk_00C));
this->mUnk_000->func_ov000_020676f8("regular", 0);
for (int i = 0; i < ARRAY_LEN(this->mUnk_06C); i++) {
this->mUnk_06C[i] = 0;
}
this->mUnk_06E = 0;
for (int i = 0; i < ARRAY_LEN(this->mUnk_00C); i++) {
this->mUnk_00C[i].mUnk_00 = 0;
}
this->mUnk_028 = 0;
this->mUnk_02C = 0;
}
struct stack_struct {
/* 00 */ unk32 mUnk_00;
/* 04 */ u16 mUnk_04;
/* 08 */ unk8 mUnk_06[0x14];
/* 1C */ unk32 mUnk_1C;
bool UnkCheck() {
return this->mUnk_00 == 0x0C1D2E3F && this->mUnk_1C == 0xF4E5D6C7 && this->mUnk_04 >= 0x1A;
}
};
// non-matching
ARM SaveManager::SaveManager() {
this->mUnk_210 = 0;
this->mUnk_000 = NULL;
this->mUnk_206 = 0xFFFF;
this->mUnk_208 = 0xFFFF;
this->mUnk_20A = 0;
this->mUnk_214 = 0;
this->mpSaveFile = NULL;
this->mUnk_244 = 0;
func_020327c8(&this->mUnk_004, 0x1021);
this->mUnk_204 = OS_GetLockID();
int uVar8 = 1;
CARD_LockBackup(this->mUnk_204);
if (CARD_IdentifyBackup(0x1402) != 0) {
stack_struct stack[MAX_SAVE_SLOTS];
int cVar1;
if (CARD_ReadWriteBackupAsync((void *) 0xF4E00, &stack[0], 0x40, 0, 0, 0, 6, 1, 0) == 1) {
if (!stack[0].UnkCheck() && !stack[1].UnkCheck()) {
cVar1 = 1;
} else {
cVar1 = 0;
}
this->mUnk_20A = cVar1;
if ((cVar1 & 0xFF) == 0) {
if (!stack[0].UnkCheck() || !stack[1].UnkCheck()) {
stack[0].mUnk_00 = 0x0C1D2E3F;
stack[0].mUnk_1C = 0xF4E5D6C7;
stack[0].mUnk_04 = 0x1A;
MI_CpuFill16(0, (u16 *) stack[0].mUnk_06, 0x16);
stack[1].mUnk_00 = 0x0C1D2E3F;
stack[1].mUnk_1C = 0xF4E5D6C7;
stack[1].mUnk_04 = 0x1A;
MI_CpuFill16(0, (u16 *) stack[1].mUnk_06, 0x16);
uVar8 = 2;
CARD_ReadWriteBackupAsync(stack, (void *) 0xF4E00, 0x40, 0, 0, 0, 7, 10, 2);
}
}
}
}
this->mUnk_20C = CARD_GetResultCode();
CARD_UnlockBackup(this->mUnk_204);
if (this->mUnk_20C != 0) {
this->mUnk_214 = uVar8;
}
}
ARM UnkStruct_0204a110::UnkStruct_0204a110() :
mUnk_000(0),
mUnk_008(-1),
mUnk_00C(-1),
mUnk_DEC(NULL),
mUnk_DF2(-1),
mUnk_DF3(-1),
mUnk_DFC(0),
mUnk_DFD(0),
mUnk_DFE(0),
mUnk_DFF(0),
mUnk_E00(0) {
this->mUnk_DF0 = 0;
this->mUnk_E02 = 0;
this->mUnk_E04 = 0;
data_0204a090.func_020073ac(8);
}
ARM void UnkStruct_0204a110::func_ov018_020c5300() {
func_02018c90(2);
this->mUnk_010.func_0201c890(0x0004800, 0x00016800, 1, 1, 0);
GX_DispOn();
REG_DISPCNT_SUB |= 0x00010000;
}
ARM UnkStruct_0204e640::UnkStruct_0204e640() {
this->mUnk_00 = 0;
this->mUnk_04 = 0;
OS_SetIrqFunction(2, func_0201bdd0);
}
ARM UnkStruct_0204af1c::UnkStruct_0204af1c() {
MI_CpuFill16(0, (u16 *) this->mUnk_2920, sizeof(this->mUnk_2920));
for (u32 i = 0; i < ARRAY_LEN(this->mUnk_0000); i++) {
this->mUnk_0000[i].func_0201af10(i);
}
this->func_0201a800();
}
ARM UnkStruct_0204e5f8::UnkStruct_0204e5f8() :
mUnk_18(0) {
this->mUnk_10 = 0;
this->mUnk_14 = 0;
this->mUnk_38 = 1;
this->mUnk_39 = 1;
REG_WININ = (REG_WININ & ~0x3F) | 0x3F;
REG_WINOUT = (REG_WINOUT & ~0x3F) | 0x30;
REG_WININ_SUB = (REG_WININ_SUB & ~0x3F) | 0x3F;
REG_WINOUT_SUB = (REG_WINOUT_SUB & ~0x3F) | 0x30;
}
ARM UnkStruct_0204a110_Sub3::UnkStruct_0204a110_Sub3() {
for (u32 i = 0; i < ARRAY_LEN(this->mUnk_00); i++) {
this->mUnk_400[i].mUnk_00 = 0;
this->mUnk_400[i].mUnk_04 = 0;
this->mUnk_400[i].mUnk_08 = 0;
this->mUnk_400[i].mUnk_0C = &this->mUnk_00[i];
this->mUnk_420[i] = 0;
}
}
ARM UnkStruct_0204a110_Sub2::UnkStruct_0204a110_Sub2() {
u32 i;
int j;
UnkStruct_0204a110_Sub2_158 *pUnk158;
for (i = 0; i < 2; i++) {
this->mUnk_000[i] = 0;
this->mUnk_008[i] = 0;
this->mUnk_010[i] = 0;
this->mUnk_018[i] = 0;
this->mUnk_024[i] = 0;
this->mUnk_02C[i] = 0;
this->mUnk_034[i] = 0;
this->mUnk_03C[i] = 0;
this->mUnk_044[i] = 0;
this->mUnk_150[i] = -1;
this->mUnk_358[i] = -1;
pUnk158 = this->mUnk_158[i];
for (j = 0; j < ARRAY_LEN(this->mUnk_158[i]); j++) {
pUnk158[j].mUnk_0C = 0;
}
}
}
ARM UnkStruct_0204a110_Sub6::UnkStruct_0204a110_Sub6() {
this->mUnk_04 = 1;
this->mUnk_08 = 0;
this->mUnk_0C = -1;
this->mUnk_0E = 0;
this->mUnk_10 = 0;
this->mUnk_12 = 0;
this->mUnk_13 = 0;
}
ARM UnkStruct_0204a110_Sub7::UnkStruct_0204a110_Sub7() {
this->mUnk_00 = 0;
this->mUnk_01 = 0;
this->mUnk_0C = data_027e0120;
this->mUnk_04 = new(HeapIndex_Main) UnkSystem2_UnkSubSystem9();
this->mUnk_08 = new(HeapIndex_Main) UnkStruct_0204a110_Sub7_08();
}
ARM UnkStruct_0204a110_Sub8::UnkStruct_0204a110_Sub8() {
this->mUnk_00 = 1;
this->mUnk_04 = 0;
this->mUnk_08 = 0;
this->mUnk_0C = new(HeapIndex_Main) UnkSystem2_UnkSubSystem9();
}
ARM UnkStruct_02049f04::UnkStruct_02049f04() {
MI_CpuFill32(0, this->mUnk_00, sizeof(this->mUnk_00));
this->mUnk_80 = 0;
}
ARM UnkStruct_ov000_020b50c0::UnkStruct_ov000_020b50c0() {
this->mUnk_94 = 0;
this->mUnk_98 = 0;
this->mUnk_9C = 2;
this->mUnk_9E = 0;
this->mUnk_9F = 0;
this->mUnk_A0 = 0;
this->mUnk_A1 = 0;
this->mUnk_A2 = 0;
this->mUnk_A3 = 0;
this->mUnk_A4 = -1;
this->mUnk_CC = 0;
this->mUnk_D0 = 0;
this->mUnk_D4 = 0;
this->mUnk_D8 = 0;
this->mUnk_DC = 0;
this->mUnk_E0 = 0;
this->mUnk_E4 = 0;
for (int i = 0; i < ARRAY_LEN(this->mUnk_A8); i++) {
this->mUnk_A8[i] = 0;
}
NNS_SndInit();
NNS_SndArcInit(this, "SoundData/final_sound_data.sdat", data_0204999c.mUnk_24[0], 0);
}
ARM UnkStruct_ov018_020c5ac0 *UnkStruct_ov000_020b50c0::func_ov018_020c5718() {
unk32 uVar1 = data_0204999c.mUnk_24[0];
data_ov000_020b51b8.func_ov018_020c5940();
NNS_SndArcPlayerSetup(uVar1);
func_02004d2c(0x0C, uVar1);
func_02001778(3);
this->mUnk_CC = this->func_ov000_0206a5d8(0x800);
this->mUnk_D0 = this->func_ov000_0206a5d8(0x400);
func_02003f98(1, uVar1);
this->mUnk_A8[1] = 1;
NNS_SndHeapSaveState(uVar1);
data_ov000_020b5300.func_ov018_020c583c(this->mUnk_D0);
data_ov000_020b5340.func_ov018_020c57fc();
data_ov000_020b5340.func_ov000_0206ffc0();
return UnkStruct_ov018_020c5ac0::Create();
}
ARM UnkStruct_ov000_020b5340::UnkStruct_ov000_020b5340() :
mUnk_04(0),
mUnk_05(0),
mUnk_08(-1),
mUnk_28(0),
mUnk_2C(0) {
func_0202ee0c();
this->mUnk_00 = &data_ov000_020b5300;
}
ARM void UnkStruct_ov000_020b5340::func_ov018_020c57fc() {
func_0202f910(1);
func_0202f958(3);
}
ARM UnkStruct_ov000_020b5300::UnkStruct_ov000_020b5300() {
this->mUnk_1C = 0;
this->mUnk_20 = 0;
this->mUnk_24 = 0;
this->mUnk_28 = 0;
this->mUnk_29 = 0;
this->mUnk_2C = 0;
this->mUnk_30 = 0;
this->mUnk_34 = 0;
#if IS_JP
this->mUnk_38 = 0;
this->mUnk_3C = 0;
#endif
}
ARM void UnkStruct_ov000_020b5300::func_ov018_020c583c(unk32 param1) {
this->mUnk_1C = param1;
this->mUnk_00 = 0;
this->mUnk_04 = param1;
this->mUnk_08 = 0x0400;
this->mUnk_0C = 0x105D;
this->mUnk_10 = 1;
this->mUnk_14 = 0;
this->mUnk_18 = 0;
}
ARM UnkStruct_ov000_020b51b8::UnkStruct_ov000_020b51b8() {
this->mUnk_18 = 0x7F;
this->mUnk_1C = 0;
this->mUnk_1E = 0;
this->mUnk_20 = 0;
this->mUnk_24 = 0;
this->mUnk_28 = 0;
this->mUnk_2C = 0;
this->mUnk_30 = 0x18;
this->mUnk_34 = -1;
this->mUnk_38 = -1;
this->mUnk_40 = 0;
this->mUnk_41 = 0;
this->mUnk_44 = 0;
this->mUnk_48 = 1;
this->mUnk_4C = -1;
this->mUnk_50 = 0;
this->mUnk_54 = 0;
this->mUnk_56 = 0x7F;
for (int i = 0; i < ARRAY_LEN(this->mUnk_08); i++) {
NNS_SndHandleInit(&this->mUnk_08[i]);
}
func_02005030(&this->mUnk_14);
}
ARM UnkStruct_ov000_020b51b8::~UnkStruct_ov000_020b51b8() {
delete this->mUnk_00;
delete this->mUnk_04;
}
ARM void UnkStruct_ov000_020b51b8::func_ov018_020c5940() {
this->mUnk_00 = new(HeapIndex_1) UnkStruct_ov000_020b51b8_00(&this->mUnk_08[0]);
this->mUnk_04 = new(HeapIndex_1) UnkStruct_ov000_020b51b8_04(&this->mUnk_08[1]);
this->mUnk_00->vfunc_0C(0);
this->mUnk_04->vfunc_0C(0);
}
ARM UnkStruct_ov000_020b5214::UnkStruct_ov000_020b5214() {
this->mUnk_64 = 0;
this->mUnk_66 = 0;
this->mUnk_67 = 0;
this->mUnk_68 = -1;
this->mUnk_6C = 0x7F;
this->mUnk_90 = 0;
this->mUnk_94 = 0;
this->mUnk_95 = 0;
this->mUnk_98 = 0;
NNS_SndHandleInit(this);
for (int i = 0; i < ARRAY_LEN(this->mUnk_70); i++) {
this->mUnk_70[i].mUnk_00 = 0;
}
}
ARM UnkStruct_ov000_020b52b4::UnkStruct_ov000_020b52b4() {
this->mUnk_00 = 0;
this->mUnk_10 = 0;
this->mUnk_18 = 0;
this->mUnk_1C = 0x10;
this->mUnk_20 = 0x10;
this->func_ov000_0206f6ac();
}
ARM UnkStruct_ov000_020b52e8::UnkStruct_ov000_020b52e8() :
mUnk_0C(-1),
mUnk_10(0),
mUnk_12(0),
mUnk_13(0) {
NNS_SndHandleInit(this);
this->mUnk_04 = 0;
this->mUnk_08 = 0;
}
ARM UnkStruct_ov000_020b52e8::~UnkStruct_ov000_020b52e8() {
NNS_SndPlayerStopSeq(this, 1);
}
ARM UnkStruct_ov018_020c5ac0::UnkStruct_ov018_020c5ac0() {
this->SetInstance();
this->mUnk_00 = 0;
this->mUnk_01 = 0;
this->mUnk_02 = 0;
}
ARM UnkStruct_ov018_020c5ac0 *UnkStruct_ov018_020c5ac0::Create() {
return new(HeapIndex_1) UnkStruct_ov018_020c5ac0();
}
ARM void UnkStruct_ov018_020c5ac0::SetInstance() {
data_027e099c = this;
}