Match GameModeManager and nearby/related functions (#22)

* match GameModeManager and surroundings

* add small comment about data_ov000_020b1e48

* minor fixes

* overlay 0 gamemode stuff

* tool hotfix
This commit is contained in:
Yanis
2026-01-19 02:23:52 +01:00
committed by GitHub
parent b80acf3455
commit e9789bf360
72 changed files with 1042 additions and 471 deletions
@@ -0,0 +1,28 @@
#include "Game/GameModeManager.hpp"
ARM GameModeManagerBase_104::GameModeManagerBase_104() :
mUnk_18(false),
mUnk_19(false),
mUnk_1A(false) {}
ARM GameModeManagerBase_104::~GameModeManagerBase_104() {
GameModeLinkList<GameModeManagerBase_104_0C> *pNode = this->mUnk_0C.mList.GetPrev();
GameModeLinkList<GameModeManagerBase_104_0C> *pOrigin =
(GameModeLinkList<GameModeManagerBase_104_0C> *) ((u8 *) this + offsetof(GameModeManagerBase_104, mUnk_0C));
while (pNode != pOrigin) {
GameModeLinkList<GameModeManagerBase_104_0C> *pNextNode = pNode->GetNext2();
delete pNode->GetTarget();
pNode = pNextNode;
}
}
ARM void GameModeManagerBase_104::vfunc_08(Input *pButtons, TouchControl *pTouchControl) {}
ARM void GameModeManagerBase_104::vfunc_0C(unk32 param1) {}
ARM void GameModeManagerBase_104::vfunc_10(unk8 *param1) {}
ARM void GameModeManagerBase_104::vfunc_14(unk8 *param1) {}
ARM void GameModeManagerBase_104::vfunc_18(void) {}
@@ -0,0 +1,7 @@
#include "Game/GameModeManager.hpp"
GameModeManagerBase_104_0C::~GameModeManagerBase_104_0C() {}
void GameModeManagerBase_104_0C::vfunc_08(void *param1) {}
void GameModeManagerBase_104_0C::vfunc_0C(void *param1) {}
+1 -4
View File
@@ -13,7 +13,6 @@
extern "C" {
void func_02013768(void *param1);
void func_020141dc(unk16 *param1);
void func_020261f0(unk32 param1, void *param2);
void func_0201245c();
void func_02027a28(void *param1, unk32 param2);
@@ -37,7 +36,6 @@ void func_0202e820();
unk32 func_020271b0();
unk32 func_0202e864(void *param1);
void func_0202e8f8(void *param1);
void func_020183b8();
void func_0200a7b0(unk32 param1, void *param2, void *param3, void *param4, unk32 param5, unk32 param6, unk32 param7,
unk32 param8);
@@ -150,7 +148,6 @@ ARM UnkStruct_02049b80::UnkStruct_02049b80() {
ARM UnkStruct_02049b18_06::UnkStruct_02049b18_06() {
unk8 auStack_18[8];
func_020141dc(&this->mUnk_00);
func_0202e820();
if (func_020271b0() != 0) {
@@ -208,7 +205,7 @@ ARM void GameModeStartUp::vfunc_0C() {
this->mUnk_2C = SHARED_WORK_C3C;
data_02049a2c.func_ov018_020c48f8();
} else if (!this->mUnk_2A && (SHARED_WORK_C3C - this->mUnk_2C) >= 0x3C) {
this->mUnk_2A = data_0204a060.func_020183d4(false, func_020183b8, 1);
this->mUnk_2A = data_0204a060.func_020183d4(false, UnkStruct_0204a060::func_020183b8, 1);
if (data_ov018_020c5bc0 != 0) {
data_0204a060.func_0201bb84(1, 0, 1);
-2
View File
@@ -24,7 +24,6 @@ extern "C" {
unk32 func_02014fe0();
unk16 func_02026738();
void func_02023548();
void func_020141dc(unk16 *param1);
void func_020327c8(void *param1, unk32 param2);
void func_02030d48(u16 param1);
void func_02030d58(u16 param1);
@@ -82,7 +81,6 @@ ARM UnkStruct_ov000_020b4f84_00::~UnkStruct_ov000_020b4f84_00() {}
ARM UnkStruct_ov000_020b504c::UnkStruct_ov000_020b504c() :
mUnk_008(NULL),
mUnk_030(1) {
func_020141dc(&this->mUnk_03A);
Fill32(0, this->mUnk_05C, sizeof(this->mUnk_05C));
this->mUnk_06F = 0;
+17 -17
View File
@@ -156,7 +156,7 @@ ARM FileSelectMain::FileSelectMain() :
params.param1 = &this->mUnk_0C;
this->mUnk_03E0.Init(&params);
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_0100.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_0100.mUnk_04);
this->mUnk_0100.mUnk_2A = 0;
this->mUnk_0488.mUnk_2C = 1;
this->mUnk_07E4.mUnk_2C = 1;
@@ -188,7 +188,7 @@ ARM FileSelectMain::FileSelectMain() :
REG_DISPCNT &= 0xFFFFE0FF;
REG_DISPCNT |= 0x00001C00;
func_020249d4(&REG_BLDCNT, 4, 8, 0, 0x10);
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_005C.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_005C.mUnk_04);
this->func_ov019_020c63dc();
this->func_ov019_020c6d10();
}
@@ -200,31 +200,31 @@ ARM FileSelectMain::~FileSelectMain() {
ARM void FileSelectMain::func_ov019_020c6c14() {}
ARM void FileSelectMain::func_ov019_020c6c18() {
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_0488.mUnk_04);
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_07E4.mUnk_04);
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_0AC4.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_0488.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_07E4.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_0AC4.mUnk_04);
}
ARM void FileSelectMain::func_ov019_020c6c54() {
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_0DA4.mUnk_04);
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_11BC.mUnk_04);
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_15D4.mUnk_04);
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_18EC.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_0DA4.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_11BC.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_15D4.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_18EC.mUnk_04);
}
ARM void FileSelectMain::func_ov019_020c6c9c() {}
ARM void FileSelectMain::func_ov019_020c6ca0() {
this->mUnk_0488.mUnk_04.func_020166ac();
this->mUnk_07E4.mUnk_04.func_020166ac();
this->mUnk_0AC4.mUnk_04.func_020166ac();
GameModeLinkListNode::func_020166ac(&this->mUnk_0488.mUnk_04);
GameModeLinkListNode::func_020166ac(&this->mUnk_07E4.mUnk_04);
GameModeLinkListNode::func_020166ac(&this->mUnk_0AC4.mUnk_04);
}
ARM void FileSelectMain::func_ov019_020c6cd0() {
this->mUnk_0DA4.mUnk_04.func_020166ac();
this->mUnk_11BC.mUnk_04.func_020166ac();
this->mUnk_15D4.mUnk_04.func_020166ac();
this->mUnk_18EC.mUnk_04.func_020166ac();
GameModeLinkListNode::func_020166ac(&this->mUnk_0DA4.mUnk_04);
GameModeLinkListNode::func_020166ac(&this->mUnk_11BC.mUnk_04);
GameModeLinkListNode::func_020166ac(&this->mUnk_15D4.mUnk_04);
GameModeLinkListNode::func_020166ac(&this->mUnk_18EC.mUnk_04);
}
ARM void FileSelectMain::func_ov019_020c6d08() {}
@@ -1112,7 +1112,7 @@ ARM void FileSelectMain::func_ov019_020c80e8() {
ARM void FileSelectMain::func_ov019_020c80f4() {}
// non-matching
ARM void FileSelectMain::vfunc_08(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {
ARM void FileSelectMain::vfunc_08(Input *pButtons, TouchControl *pTouchControl) {
for (int i = 0; i < MAX_SAVE_SLOTS; i++) {
this->mUnk_03E8[i].func_ov000_02063f64();
this->GetUnk03E0(i).func_ov019_020cbb94();
+7 -17
View File
@@ -32,26 +32,16 @@ ARM FileSelectManager::~FileSelectManager() {
}
ARM void FileSelectManager::vfunc_10(unk32 param1, unk32 param2, unk32 param3) {
void *unkPtr;
this->mUnk_004.func_0201c00c(0x25, 1);
FileSelectMain *newSub3 = new(HeapIndex_1) FileSelectMain();
unkPtr = newSub3;
if (newSub3 != NULL) {
unkPtr = &newSub3->mUnk_04;
}
this->mUnk_158 = newSub3;
this->mUnk_154->mUnk_04.func_020166cc(unkPtr);
this->mUnk_158 = newSub3;
this->mUnk_154->mList.func_020166cc(newSub3->GetNode());
newSub3->vfunc_18();
FileSelectSubScreen *newSub4 = new(HeapIndex_1) FileSelectSubScreen();
unkPtr = newSub4;
if (newSub4 != NULL) {
unkPtr = &newSub4->mUnk_04;
}
this->mUnk_15C = newSub4;
this->mUnk_154->mUnk_04.func_020166cc(unkPtr);
this->mUnk_15C = newSub4;
this->mUnk_154->mList.func_020166cc(newSub4->GetNode());
newSub4->vfunc_18();
this->mUnk_160 = new(HeapIndex_1) FileSelectManager_160(&this->mUnk_104, this->mUnk_158);
@@ -65,7 +55,7 @@ ARM void FileSelectManager::vfunc_24() {
this->func_0201875c();
this->func_02018908();
if (this->mUnk_132 == 0) {
if (!this->mTouchControl.mTouch) {
this->mUnk_148 = -1;
}
@@ -119,12 +109,12 @@ ARM void FileSelectManager::func_ov019_020c503c() {
}
}
ARM void FileSelectManager::vfunc_28(unk32 param1) {
ARM void FileSelectManager::vfunc_28(unk8 *param1) {
this->GameModeManagerBase::vfunc_28(param1);
this->func_02018a14(param1);
}
ARM void FileSelectManager::vfunc_2C(unk32 param1) {
ARM void FileSelectManager::vfunc_2C(unk8 *param1) {
this->func_02018984(param1);
this->func_02018830(param1);
}
+2 -2
View File
@@ -48,7 +48,7 @@ ARM void FileSelectManager_160::vfunc_10() {
data_0204999c.mUnk_60 = 0xD6D8;
data_0204a088->func_ov000_02061248();
data_0204a110.func_02019538(0x27, 1);
this->mUnk_10->mUnk_04.func_020166ac();
GameModeLinkListNode::func_020166ac(&this->mUnk_10->mList);
this->mUnk_10->func_ov019_020cb664();
this->mUnk_14 = func_ov003_020b6520(&this->mUnk_18, this->mUnk_1C);
REG_DISPCNT &= 0xFFFFE0FF;
@@ -88,7 +88,7 @@ ARM void FileSelectManager_160::vfunc_20() {
data_0204a110.func_02019538(0x25, 1);
FileSelectMain *temp_r4 = this->mUnk_10;
this->mUnk_18->mUnk_04.func_020166cc(temp_r4 == NULL ? temp_r4 : (FileSelectMain *) ((unk32 *) temp_r4 + 1));
this->mUnk_18->mList.func_020166cc(temp_r4->GetNode());
temp_r4->vfunc_18();
this->mUnk_10->func_ov019_020cb5dc();
+3 -4
View File
@@ -50,14 +50,13 @@ ARM void FileSelectManager_164::vfunc_10() {
data_0204999c.func_02013014();
data_0204999c.mUnk_60 = 0xD6D8;
data_ov000_020b50c0.func_ov000_0206a758();
this->mUnk_10->mUnk_04.func_020166ac();
GameModeLinkListNode::func_020166ac(&this->mUnk_10->mList);
this->mUnk_10->func_ov019_020cb664();
data_0204a110.func_02019538(0x26, 1);
FileSelectOptionsManager::Create(this->mUnk_18, this->mUnk_10->mSaveSlotIndex);
FileSelectOptionsManager *pVar1 = gpFSOptionsManager;
this->mUnk_14->mUnk_04.func_020166cc(gpFSOptionsManager == NULL ? (u32 *) gpFSOptionsManager
: (u32 *) gpFSOptionsManager + 1);
this->mUnk_14->mList.func_020166cc(pVar1->GetNode());
pVar1->vfunc_18();
data_0204999c.func_02013070();
@@ -98,7 +97,7 @@ ARM void FileSelectManager_164::vfunc_20() {
data_0204a110.func_02019538(0x25, 1);
FileSelectMain *temp_r4 = this->mUnk_10;
this->mUnk_14->mUnk_04.func_020166cc(temp_r4 == NULL ? temp_r4 : (FileSelectMain *) ((unk32 *) temp_r4 + 1));
this->mUnk_14->mList.func_020166cc(temp_r4->GetNode());
temp_r4->vfunc_18();
this->mUnk_10->func_ov019_020cb5dc();
+2 -2
View File
@@ -56,7 +56,7 @@ ARM FileSelectMicTest::FileSelectMicTest() :
mUnk_304(0x05, 0x8E, 0x00, 0x01, 0x8E, 0x00),
mUnk_3F8(0x8D, 0x01),
mUnk_630(1) {
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_304.mUnk_044.mUnk_04.mUnk_00);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_304.mUnk_044.mUnk_04);
this->mUnk_020.func_0201f730(0x00020006);
this->mUnk_3F8.mUnk_14E = 1;
this->mUnk_3F8.func_0201f730(0x00020043);
@@ -138,7 +138,7 @@ ARM void FileSelectMicTest::func_ov019_020cebcc() {
this->mUnk_304.mUnk_0A4.func_ov000_0206415c(&local_10, 7, data_ov019_020d2248.mUnk_00, 0);
}
ARM void FileSelectMicTest::vfunc_08(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {
ARM void FileSelectMicTest::vfunc_08(Input *pButtons, TouchControl *pTouchControl) {
switch (this->mState) {
case FSMicTestState_MicTestIdle:
this->mUnk_270.func_ov019_020cf168();
+19 -28
View File
@@ -97,7 +97,6 @@ ARM GameModeManagerBase_104 *FileSelectOptionsManager::Create(void *param1, s32
return new(HeapIndex_1) FileSelectOptionsManager(param1, saveSlotIndex);
}
// non-matching
//! TODO: move to class
ARM FileSelectOptionsManager::FileSelectOptionsManager(void *param1, s32 saveSlotIndex) {
this->mUnk_24 = (GameModeManagerBase_104 *) param1;
@@ -106,9 +105,9 @@ ARM FileSelectOptionsManager::FileSelectOptionsManager(void *param1, s32 saveSlo
this->mpMicTest = new(HeapIndex_1) FileSelectMicTest();
FileSelectOptions *var_r5 = new(HeapIndex_1) FileSelectOptions(saveSlotIndex);
this->mpOptions = var_r5 == NULL ? var_r5 : (FileSelectOptions *) &var_r5->mUnk_04;
this->mUnk_24->mUnk_04.func_020166cc(&var_r5->mUnk_04);
this->vfunc_18();
this->mpOptions = var_r5;
this->mUnk_24->mList.func_020166cc(var_r5->GetNode());
var_r5->vfunc_18();
}
ARM FileSelectOptionsManager::~FileSelectOptionsManager() {
@@ -119,7 +118,7 @@ ARM FileSelectOptionsManager::~FileSelectOptionsManager() {
this->mpOptions = NULL;
}
ARM void FileSelectOptionsManager::vfunc_08(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {
ARM void FileSelectOptionsManager::vfunc_08(Input *pButtons, TouchControl *pTouchControl) {
if (this->mUnk_20 == 0) {
return;
}
@@ -129,25 +128,17 @@ ARM void FileSelectOptionsManager::vfunc_08(GameModePTMFParam2Struct *param1, To
switch (this->mUnk_1C) {
case 0:
FileSelectOptions *pFVar4 = this->mpOptions;
FileSelectOptions *pFVar2 = pFVar4;
if (pFVar4 != NULL) {
pFVar2 = (FileSelectOptions *) &pFVar4->mUnk_04;
}
this->mUnk_24->mUnk_04.func_020166cc(&pFVar2->mUnk_04);
this->mUnk_24->mList.func_020166cc(pFVar4->GetNode());
pFVar4->vfunc_18();
this->mpOptions->func_ov019_020cde9c();
this->mpMicTest->mUnk_04.func_020166ac();
GameModeLinkListNode::func_020166ac(&this->mpMicTest->mList);
break;
case 1:
FileSelectMicTest *pFVar5 = this->mpMicTest;
FileSelectMicTest *pFVar3 = pFVar5;
if (pFVar5 != NULL) {
pFVar3 = (FileSelectMicTest *) &pFVar5->mUnk_04;
}
this->mUnk_24->mUnk_04.func_020166cc(&pFVar3->mUnk_04);
this->mUnk_24->mList.func_020166cc(pFVar5->GetNode());
pFVar5->vfunc_18();
this->mpMicTest->func_ov019_020cefe4();
this->mpOptions->mUnk_04.func_020166ac();
GameModeLinkListNode::func_020166ac(&this->mpOptions->mList);
break;
case 2:
this->mpOptions->func_ov019_020ccdf4();
@@ -188,10 +179,10 @@ ARM FileSelectOptions::FileSelectOptions(s32 saveSlotIndex) :
mUnk_1A68(&mUnk_19D0),
mUnk_1AB8(&mUnk_19D0, 0x8C, 0x09, 0x00020007) {
this->mUnk_1CF5 = false;
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_10A8.mUnk_04);
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_19D0.mUnk_04);
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_1388.mUnk_04);
this->mUnk_0C.mUnk_04.mUnk_00.func_020166cc(&this->mUnk_16AC.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_10A8.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_19D0.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_1388.mUnk_04);
this->mUnk_0C.mList.func_020166cc(&this->mUnk_16AC.mUnk_04);
this->mUnk_10A8.mUnk_2A = false;
this->mUnk_1388.mUnk_2C = true;
this->mUnk_16AC.mUnk_2C = true;
@@ -213,7 +204,7 @@ ARM void FileSelectOptions::func_ov019_020ccd40() {
CALL_PTMF(PTMF<FileSelectOptions>, data_ov019_020d21c0[this->mState]);
}
ARM void FileSelectOptions::vfunc_08(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {
ARM void FileSelectOptions::vfunc_08(Input *pButtons, TouchControl *pTouchControl) {
CALL_PTMF(PTMF<FileSelectOptions>, data_ov019_020d2188[this->mState]);
}
@@ -632,12 +623,12 @@ ARM UnkStruct_ov019_020d24c8_2C_24::UnkStruct_ov019_020d24c8_2C_24(GameModeManag
this->mUnk_FC2 = pSaveSub17->mUnk_02;
this->mUnk_103E = pSaveSub17[1].mUnk_00;
param1->mUnk_04.mUnk_00.func_020166cc(&this->mUnk_490.mUnk_04);
param1->mUnk_04.mUnk_00.func_020166cc(&this->mUnk_4F0.mUnk_04);
param1->mUnk_04.mUnk_00.func_020166cc(&this->mUnk_9C0.mUnk_04);
param1->mUnk_04.mUnk_00.func_020166cc(&this->mUnk_A20.mUnk_04);
param1->mUnk_04.mUnk_00.func_020166cc(&this->mUnk_EF0.mUnk_04);
param1->mUnk_04.mUnk_00.func_020166cc(&this->mUnk_F50.mUnk_04);
param1->mList.func_020166cc(&this->mUnk_490.mUnk_04);
param1->mList.func_020166cc(&this->mUnk_4F0.mUnk_04);
param1->mList.func_020166cc(&this->mUnk_9C0.mUnk_04);
param1->mList.func_020166cc(&this->mUnk_A20.mUnk_04);
param1->mList.func_020166cc(&this->mUnk_EF0.mUnk_04);
param1->mList.func_020166cc(&this->mUnk_F50.mUnk_04);
this->mUnk_490.mPosOffset.x = 0;
this->mUnk_490.mPosOffset.y = 0;
+1 -1
View File
@@ -77,7 +77,7 @@ ARM FileSelectSubScreen::FileSelectSubScreen() :
this->func_ov019_020cf73c(2, 1);
}
ARM void FileSelectSubScreen::vfunc_08(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {
ARM void FileSelectSubScreen::vfunc_08(Input *pButtons, TouchControl *pTouchControl) {
this->mUnk_0024 = this->mUnk_0020;
this->mUnk_0020 += 0x800;
+3 -3
View File
@@ -31,15 +31,15 @@ ARM GameModeFileSelect::~GameModeFileSelect() {
}
// https://decomp.me/scratch/bJVks
ARM void GameModeFileSelect::vfunc_08(unk32 param1, unk32 param2, unk32 param3) {
ARM void GameModeFileSelect::vfunc_08() {
gSaveManager.func_ov019_020d0964();
this->func_02018374();
this->GameModeBase::vfunc_08();
const UnkStruct_ov019_020d1d80 *ptr2 = &data_ov019_020d1d80;
this->mUnk_04.mUnk_14 = gSaveManager.mpSaveFile;
data_ov000_020b504c.func_ov000_0206807c((void *) &data_ov019_020d1d80, &this->mUnk_04);
data_ov000_020b50c0.func_ov000_020bd8ac();
data_ov000_020b50c0.func_ov001_020bd8ac();
data_ov000_020b51b8.func_ov000_0206c9a8(3, 0, 0x7F, 0);
}
+2 -2
View File
@@ -49,8 +49,8 @@ struct stack_struct {
/* 14 */
};
ARM void GameModeTitleScreen::vfunc_08(unk32 param1, unk32 param2, unk32 param3) {
this->GameModeBase::vfunc_08(param1, param2, param3);
ARM void GameModeTitleScreen::vfunc_08() {
this->GameModeBase::vfunc_08();
UnkStruct_ov000_020a782c *iVar1 = func_ov000_020a782c(0);
u8 mUnk_04 = iVar1->mUnk_04;
+12 -20
View File
@@ -12,7 +12,6 @@
#include <string.h>
extern "C" {
void func_02018424();
void func_ov000_0205be34(void *param1, unk32 param2);
void func_ov000_0205bedc(void *param1, void *param2, void *param3, void *param4, unk32 param5, int);
}
@@ -168,7 +167,7 @@ void TitleScreen::func_ov025_020c4ea0(TitleScreenState state) {
}
}
void TitleScreen::vfunc_08(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {
void TitleScreen::vfunc_08(Input *pButtons, TouchControl *pTouchControl) {
if (this->mShowUI) {
this->mUnk_024.func_ov000_020609c4();
this->mUnk_09C.func_ov000_020609c4();
@@ -178,29 +177,29 @@ void TitleScreen::vfunc_08(GameModePTMFParam2Struct *param1, TouchControl *pTouc
this->mUnk_2CC.func_ov000_020609c4();
}
CALL_PTMF(TitleScreenPTMF<TitleScreen>, data_ov025_020c5aec[this->mState], param1, pTouchControl);
CALL_PTMF(TitleScreenPTMF<TitleScreen>, data_ov025_020c5aec[this->mState], pButtons, pTouchControl);
data_0204aeac.func_0201c4d8(0, 0x0B, 8);
data_0204aeac.func_0201c504(1, 10, 0x10, 8);
}
void TitleScreen::func_ov025_020c5200(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {}
void TitleScreen::func_ov025_020c5200(Input *pButtons, TouchControl *pTouchControl) {}
// https://decomp.me/scratch/6nDGM
void TitleScreen::func_ov025_020c5204(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {
void TitleScreen::func_ov025_020c5204(Input *pButtons, TouchControl *pTouchControl) {
if (pTouchControl->mFlags & 1) {
this->mUnk_021 = 1U;
}
if ((pTouchControl->mFlags & 2) && (this->mUnk_021 != 0)) {
goto test;
}
if (!(param1->mButtons & 8)) {
if (!(pButtons->press & 8)) {
return;
}
test:
func_ov025_020c4e54();
}
void TitleScreen::func_ov025_020c5240(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {
void TitleScreen::func_ov025_020c5240(Input *pButtons, TouchControl *pTouchControl) {
this->mUnk_218.UnkOperations();
this->mUnk_204.mUnk_10 = this->mUnk_218.func_0201f04c();
@@ -223,7 +222,7 @@ void TitleScreen::func_ov025_020c5240(GameModePTMFParam2Struct *param1, TouchCon
this->func_ov025_020c4ea0(TitleScreenState_IdleBeforeFileSelect);
}
void TitleScreen::func_ov025_020c53d0(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {
void TitleScreen::func_ov025_020c53d0(Input *pButtons, TouchControl *pTouchControl) {
this->mUnk_344++;
if (this->mUnk_344 == 15) {
@@ -262,14 +261,14 @@ void TitleScreen::func_ov025_020c53d0(GameModePTMFParam2Struct *param1, TouchCon
}
}
void TitleScreen::func_ov025_020c55a4(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {
if (CHECK_TOUCH_FLAGS(pTouchControl, TouchFlag_UntouchedNow) || CHECK_BUTTON_COMBO(param1->mButtons, BTN_START)) {
void TitleScreen::func_ov025_020c55a4(Input *pButtons, TouchControl *pTouchControl) {
if (CHECK_TOUCH_FLAGS(pTouchControl, TouchFlag_UntouchedNow) || CHECK_BUTTON_COMBO(pButtons->press, BTN_START)) {
data_ov000_020b5214.func_ov000_0206db44(0x0B);
this->func_ov025_020c4ea0(TitleScreenState_ToFileSelect);
}
}
void TitleScreen::func_ov025_020c55e4(GameModePTMFParam2Struct *param1, TouchControl *pTouchControl) {
void TitleScreen::func_ov025_020c55e4(Input *pButtons, TouchControl *pTouchControl) {
if (this->mUnk_024.func_ov000_02060af8() == 0) {
return;
}
@@ -286,7 +285,7 @@ void TitleScreen::func_ov025_020c55e4(GameModePTMFParam2Struct *param1, TouchCon
return;
}
data_0204a060.func_020183d4(true, func_02018424, 1);
data_0204a060.func_020183d4(true, UnkStruct_0204a060::func_02018424, 1);
}
void TitleScreen::vfunc_14(unk8 *param1) {
@@ -348,17 +347,10 @@ void TitleScreen::vfunc_10(unk8 *param1) {
}
}
//! TODO: fake match?
void TitleScreen::vfunc_0C(unk32 param1) {
if (param1 == 1 && this->mShowUI) {
UnkStruct_027e0954 *ptr = data_027e0954;
void *iVar1 = &this->mUnk_204;
if (iVar1 != NULL) {
iVar1 = (u32 *) iVar1 + 1;
}
ptr->mUnk_14.func_020166f4(iVar1);
ptr->mUnk_14.func_020166f4(this->mUnk_204.GetNode());
}
}
+4 -9
View File
@@ -17,13 +17,8 @@ ARM void TitleScreenManager::vfunc_14() {
this->mUnk_004.func_0201c00c(0x24, 1);
TitleScreen *pTitleScreen = new(HeapIndex_1) TitleScreen();
void *pUVar2 = pTitleScreen;
if (pTitleScreen != NULL) {
pUVar2 = &pTitleScreen->mUnk_04;
}
this->mpTitleScreen = pTitleScreen;
this->mUnk_104.mUnk_04.func_020166cc(pUVar2);
this->mpTitleScreen = pTitleScreen;
this->mUnk_104.mList.func_020166cc(pTitleScreen->GetNode());
pTitleScreen->vfunc_18();
}
@@ -40,12 +35,12 @@ ARM void TitleScreenManager::vfunc_24() {
this->func_02018908();
}
ARM void TitleScreenManager::vfunc_28(unk32 param1) {
ARM void TitleScreenManager::vfunc_28(unk8 *param1) {
this->GameModeManagerBase::vfunc_28(param1);
this->func_02018a14(param1);
}
ARM void TitleScreenManager::vfunc_2C(unk32 param1) {
ARM void TitleScreenManager::vfunc_2C(unk8 *param1) {
this->func_02018984(param1);
this->func_02018830(param1);
}
+26
View File
@@ -0,0 +1,26 @@
#include "Game/GameMode.hpp"
#include "Unknown/UnkStruct_0204a110.hpp"
GameModeBase::GameModeBase() {}
GameModeBase::~GameModeBase() {
data_0204a110.func_ov001_020bd58c();
}
void GameModeBase::vfunc_08() {
data_0204a110.func_02018d34();
}
void GameModeBase::vfunc_14() {}
void GameModeBase::vfunc_10() {}
void GameModeBase::vfunc_18() {}
void GameModeBase::vfunc_1C() {}
void GameModeBase::vfunc_20() {}
unk32 GameModeBase::vfunc_24() {
return 1;
}
+39
View File
@@ -0,0 +1,39 @@
#include "Game/GameModeManager.hpp"
ARM GameModeLinkListNode::GameModeLinkListNode() {
this->mNext = this;
this->mPrev = this;
}
ARM GameModeLinkListNode::~GameModeLinkListNode() {
this->mNext->mPrev = this->mPrev;
this->mPrev->mNext = this->mNext;
}
ARM void GameModeLinkListNode::func_020166ac(GameModeLinkListNode *node) {
node->mNext->mPrev = node->mPrev;
node->mPrev->mNext = node->mNext;
node->mNext = node;
node->mPrev = node;
}
ARM void GameModeLinkListNode::func_020166cc(GameModeLinkListNode *node) {
this->func_020166ac(node);
GameModeLinkListNode *nextNode = this->mNext;
nextNode->mPrev = node;
node->mNext = nextNode;
node->mPrev = this;
this->mNext = node;
}
ARM void GameModeLinkListNode::func_020166f4(GameModeLinkListNode *node) {
this->func_020166ac(node);
GameModeLinkListNode *prevNode = this->mPrev;
prevNode->mNext = node;
node->mPrev = prevNode;
node->mNext = this;
this->mPrev = node;
}
+247
View File
@@ -0,0 +1,247 @@
#include "Game/GameModeManager.hpp"
#include "Unknown/UnkStruct_02049b18.hpp"
#include "Unknown/UnkStruct_0204a110.hpp"
#include "Unknown/UnkStruct_0204e5f8.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_ov000_02067bc4.hpp"
#include "Unknown/UnkStruct_ov000_020b50c0.hpp"
THUMB GameModeManagerBase *GameModeManagerBase::Create(unk32 param1) {
return new(HeapIndex_1) GameModeManagerBase(param1);
}
THUMB GameModeManagerBase::GameModeManagerBase(unk32 param1) :
mUnk_100((void *) param1),
mUnk_148(-1),
mUnk_14C(-1),
mUnk_150(false) {
data_ov000_020b504c.mUnk_004 = &this->mUnk_004;
}
THUMB void GameModeManagerBase::func_02018550(void) {}
THUMB void GameModeManagerBase::func_02018554(void) {}
THUMB GameModeManagerBase::~GameModeManagerBase() {
this->func_02018a8c();
}
THUMB void GameModeManagerBase::vfunc_10(unk32 param1, unk32 param2, unk32 param3) {}
THUMB void GameModeManagerBase::vfunc_14() {}
THUMB void GameModeManagerBase::vfunc_18() {}
THUMB void GameModeManagerBase::vfunc_1C() {}
THUMB void GameModeManagerBase::vfunc_20() {}
ARM void GameModeManagerBase::vfunc_00() {
data_ov000_020b50c0.func_ov000_02069d3c(1);
if (!this->mUnk_150) {
this->mUnk_150 = true;
}
}
ARM void GameModeManagerBase::vfunc_04() {
data_ov000_020b50c0.func_ov000_02069d7c();
if (this->mUnk_150) {
this->mUnk_150 = false;
}
}
ARM void GameModeManagerBase::func_02018634(unk32 param1) {
this->mButtons.func_02013b24(this->mButtons.func_02013c08(data_02049b18.mUnk_28));
this->mTouchControl.func_02014478(&data_02049b4c, param1);
}
ARM void GameModeManagerBase::vfunc_24() {
this->mUnk_14C = -1;
this->mUnk_004.func_0201bf24();
}
ARM void GameModeManagerBase::vfunc_28(unk8 *param1) {
this->mUnk_004.func_0201bf54();
}
ARM void GameModeManagerBase::vfunc_2C(unk8 *param1) {}
ARM void GameModeManagerBase::vfunc_30(unk32 param1) {
GameModeLinkList<GameModeManagerBase_104> *pNode;
for (pNode = this->mUnk_104.mList.GetNext(); pNode != this->mUnk_104.GetOrigin(); pNode = pNode->GetPrev()) {
pNode->GetTarget()->vfunc_0C(param1);
}
}
ARM void GameModeManagerBase::vfunc_34() {}
struct UnkStruct3 {
unk32 mUnk_00;
unk32 *mUnk_04;
};
//! TODO: fake match
ARM void *GameModeManagerBase::func_020186f8(unk32 param1) {
return ((UnkStruct3 *) (((u32 *) this) + param1))->mUnk_04;
}
ARM void GameModeManagerBase::func_02018704(void) {
this->mUnk_004.func_0201c22c();
}
ARM void GameModeManagerBase::func_02018714(unk32 param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5) {
this->mUnk_004.func_0201c124(param1, param2, param3, param4, param5);
}
ARM void GameModeManagerBase::func_0201873c(void) {
this->mUnk_004.func_0201c19c();
}
ARM void GameModeManagerBase::func_0201874c(void) {
this->mUnk_004.func_0201c1e4();
}
struct UnkStruct4 {
void *a;
void *b;
void *c;
void *d;
};
// non-matching
ARM void GameModeManagerBase::func_0201875c(void) {
GameModeLinkList<GameModeManagerBase_104_0C> *pNode2;
GameModeLinkList<GameModeManagerBase_104> *pNode;
UnkStruct4 local_30;
local_30.a = &this->mUnk_148;
local_30.b = &this->mUnk_14C;
local_30.c = &this->mButtons;
local_30.d = &this->mTouchControl;
for (pNode = this->mUnk_104.mList.GetNext(); pNode != this->mUnk_104.GetOrigin(); pNode = pNode->GetPrev()) {
if (this->func_02018af0(pNode) && this->func_02018b54(pNode)) {
for (pNode2 = pNode->GetTarget()->mUnk_0C.mList.GetNext(); pNode2 != pNode->GetTarget()->mUnk_0C.GetOrigin();
pNode2 = pNode2->GetPrev()) {
pNode2->GetTarget()->vfunc_08(&local_30);
}
}
}
}
struct UnkStruct5 {
unk32 a;
void *b;
};
// non-matching
ARM void GameModeManagerBase::func_02018830(unk8 *param1) {
GameModeLinkList<GameModeManagerBase_104_0C> *pNode2;
GameModeLinkList<GameModeManagerBase_104> *pNode;
UnkStruct5 local_28;
local_28.a = this->mUnk_148;
local_28.b = param1;
for (pNode = this->mUnk_104.mList.GetPrev(); pNode != this->mUnk_104.GetOrigin(); pNode = pNode->GetNext2()) {
if (this->func_02018af0(pNode) && this->func_02018b54(pNode) && this->func_02018b90(pNode, (unk8 *) param1)) {
for (pNode2 = pNode->GetTarget()->mUnk_0C.mList.GetPrev(); pNode2 != pNode->GetTarget()->mUnk_0C.GetOrigin();
pNode2 = pNode2->GetNext2()) {
pNode2->GetTarget()->vfunc_0C(&local_28);
}
}
}
}
ARM void GameModeManagerBase::func_02018908() {
GameModeLinkList<GameModeManagerBase_104> *pNode;
for (pNode = this->mUnk_104.mList.GetNext(); pNode != this->mUnk_104.GetOrigin(); pNode = pNode->GetPrev()) {
if (this->func_02018af0(pNode) && this->func_02018b54(pNode)) {
pNode->GetTarget()->vfunc_08(&this->mButtons, &this->mTouchControl);
}
}
}
ARM void GameModeManagerBase::func_02018984(unk8 *param1) {
GameModeLinkList<GameModeManagerBase_104> *pNode;
for (pNode = this->mUnk_104.mList.GetPrev(); pNode != this->mUnk_104.GetOrigin(); pNode = pNode->GetNext2()) {
if (this->func_02018af0(pNode) && this->func_02018b54(pNode) && this->func_02018b90(pNode, param1)) {
pNode->GetTarget()->vfunc_10(param1);
}
}
}
ARM void GameModeManagerBase::func_02018a14(unk8 *param1) {
GameModeLinkList<GameModeManagerBase_104> *pNode;
for (pNode = this->mUnk_104.mList.GetNext(); pNode != this->mUnk_104.GetOrigin(); pNode = pNode->GetPrev()) {
if (this->func_02018af0(pNode) && this->func_02018b54(pNode)) {
pNode->GetTarget()->vfunc_14(param1);
}
}
}
ARM void GameModeManagerBase::func_02018a8c() {
this->mUnk_004.func_0201bf90();
}
void GameModeManagerBase::func_02018a9c(unk32 param1, unk32 param2) {
this->mUnk_004.func_0201c00c(param1, param2);
}
void GameModeManagerBase::func_02018aac(unk32 param1) {
this->mUnk_004.func_0201c068(param1);
}
void GameModeManagerBase::func_02018ac4(void) {
this->mUnk_004.func_0201bfec();
}
bool GameModeManagerBase::func_02018ad4(void) {
return !this->mUnk_0F4 && !this->mUnk_0F5;
}
bool GameModeManagerBase::func_02018af0(GameModeLinkList<GameModeManagerBase_104> *param1) {
if (param1->GetTarget()->mUnk_18) {
return true;
}
if (data_027e09b8 != NULL) {
if (data_027e09b8->func_ov000_020732dc(0) != 0 || data_027e09b8->func_ov000_020732dc(4) != 0) {
return false;
}
return true;
}
return true;
}
bool GameModeManagerBase::func_02018b54(GameModeLinkList<GameModeManagerBase_104> *param1) {
if (param1->GetTarget()->mUnk_19) {
return true;
}
if (data_0204e5f8.mUnk_18 || data_0204e5f8.mUnk_3A != 0 || data_0204e5f8.mUnk_3E != 0) {
return false;
}
return true;
}
bool GameModeManagerBase::func_02018b90(GameModeLinkList<GameModeManagerBase_104> *param1, unk8 *param2) {
if (param1->GetTarget()->mUnk_1A) {
return true;
}
if (data_0204a110.mUnk_008 == 1 && param2[1] == 0) {
return false;
}
return true;
}
+42
View File
@@ -0,0 +1,42 @@
#include "Unknown/UnkStruct_0204a060.hpp"
#include "System/OverlayManager.hpp"
#include "Unknown/UnkStruct_02049a2c.hpp"
#include "Unknown/UnkStruct_0204e5f8.hpp"
#include "Unknown/UnkStruct_ov000_020b51b8.hpp"
extern "C" void func_ov001_020be078();
THUMB bool UnkStruct_0204a060::vfunc_0C(void) {
return data_02049a2c.func_02013724(this->callback);
}
THUMB void UnkStruct_0204a060::func_020183b8(void) {
func_ov001_020be078();
}
THUMB void UnkStruct_0204a060::func_020183c0(void) {
this->func_020183d4(false, func_ov001_020be078, 1);
}
THUMB bool UnkStruct_0204a060::func_020183d4(bool param1, void *param2, unk32 param3) {
if (this->mUnk_0C) {
return false;
}
this->mUnk_14 = param1 ? 0x00010000 : 0xFFFF0000;
this->callback = param2;
this->func_0201bb84(0x20, 4, 0x20);
if (param3 != 0) {
data_ov000_020b51b8.func_ov000_0206d0bc(this->mUnk_1A);
}
data_0204e5f8.func_0201b9a8(this);
return true;
}
THUMB void UnkStruct_0204a060::func_02018424(void) {
data_02049ba0.func_020148d0(0x18)->func_ov018_020c4840();
}
ARM UnkStruct_0204a060::~UnkStruct_0204a060() {}