mirror of
https://github.com/zeldaret/st
synced 2026-05-23 15:01:41 -04:00
e9789bf360
* match GameModeManager and surroundings * add small comment about data_ov000_020b1e48 * minor fixes * overlay 0 gamemode stuff * tool hotfix
226 lines
6.9 KiB
C++
226 lines
6.9 KiB
C++
#pragma once
|
|
|
|
#include "Game/GameModeManager.hpp"
|
|
#include "Unknown/Common.hpp"
|
|
#include "regs.h"
|
|
#include "types.h"
|
|
|
|
extern "C" {
|
|
void GX_SetGraphicsMode(unk32 param1, unk32 param2, unk32 param3);
|
|
void GXS_SetGraphicsMode(unk32 param1);
|
|
}
|
|
|
|
DECL_PTMF(TitleScreenPTMF, Input *pButtons, TouchControl *pTouchControl);
|
|
|
|
typedef u32 TitleScreenState;
|
|
enum TitleScreenState_ {
|
|
TitleScreenState_None = 0, // does nothing
|
|
TitleScreenState_IdleBeforeUI = 1,
|
|
TitleScreenState_DrawUIOnInput = 2,
|
|
TitleScreenState_DrawUIOnCsCmd = 3, //! TODO: definitely related to the cs, "cs cmd" is assumed
|
|
TitleScreenState_IdleBeforeFileSelect = 4,
|
|
TitleScreenState_ToFileSelect = 5,
|
|
TitleScreenState_Max = 6
|
|
};
|
|
|
|
class TitleScreenManager_Base : public GameModeManagerBase {
|
|
public:
|
|
/* 000 (base) */
|
|
/* 154 */
|
|
|
|
TitleScreenManager_Base();
|
|
|
|
// data_ov000_020b1d14 vtable
|
|
/* 08 */ virtual ~TitleScreenManager_Base() override;
|
|
/* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2, unk32 param3) override;
|
|
/* 38 */ virtual void vfunc_38();
|
|
/* 3C */ virtual void vfunc_3C();
|
|
/* 40 */ virtual void vfunc_40();
|
|
/* 44 */ virtual void vfunc_44();
|
|
/* 48 */
|
|
};
|
|
|
|
class TitleScreen_Sub2 : public GameModeLinkListNode {
|
|
public:
|
|
/* 00 (vtable) */
|
|
/* 0C */ unk32 mUnk_0C;
|
|
/* 10 */ bool mUnk_10;
|
|
/* 11 */ unk8 mUnk_11;
|
|
/* 12 */ unk8 mUnk_12;
|
|
/* 13 */ unk8 mUnk_13;
|
|
|
|
TitleScreen_Sub2() :
|
|
mUnk_0C(0),
|
|
mUnk_10(false) {}
|
|
|
|
GameModeLinkListNode *GetNode() {
|
|
return this;
|
|
}
|
|
|
|
// data_ov025_020c5b24 vtable
|
|
/* 00 */ virtual void vfunc_00();
|
|
};
|
|
|
|
// similar to UnkSubStruct1
|
|
class TitleScreen_Sub3 {
|
|
public:
|
|
/* 00 (vtable) */
|
|
/* 04 */ u16 mUnk_04;
|
|
/* 04 */ u16 mUnk_06;
|
|
/* 08 */ u16 mUnk_08; // 220
|
|
/* 08 */ bool mUnk_0A; // 222
|
|
/* 08 */ bool mUnk_0B; // 223
|
|
/* 0C */ bool mUnk_0C; // 224
|
|
/* 0C */ bool mUnk_0D;
|
|
/* 0C */ bool mUnk_0E;
|
|
/* 0C */ bool mUnk_0F;
|
|
/* 10 */ unk32 mUnk_10;
|
|
/* 14 */ unk32 mUnk_14;
|
|
/* 18 */ unk32 mUnk_18;
|
|
/* 1C */ unk32 mUnk_1C;
|
|
/* 20 */ unk32 mUnk_20;
|
|
|
|
TitleScreen_Sub3();
|
|
void func_0201effc(unk32 param1, unk32 param2, unk32 param3);
|
|
bool func_0201f04c();
|
|
|
|
// data_020442d4 vtable
|
|
/* 00 */ virtual void vfunc_00();
|
|
/* 04 */ virtual void vfunc_04();
|
|
/* 08 */ virtual void vfunc_08();
|
|
/* 0C */
|
|
|
|
void UnkOperations() {
|
|
int iVar1;
|
|
|
|
if (this->mUnk_08 != 0) {
|
|
iVar1 = this->mUnk_08 - this->mUnk_0D;
|
|
this->mUnk_08 = CLAMP(iVar1, 0, 0xFFFF);
|
|
} else {
|
|
if (this->mUnk_0A) {
|
|
if (this->mUnk_04 < this->mUnk_06) {
|
|
iVar1 = this->mUnk_04 + this->mUnk_0D;
|
|
|
|
if (iVar1 > this->mUnk_06) {
|
|
iVar1 = this->mUnk_06;
|
|
} else if (iVar1 < 0) {
|
|
iVar1 = 0;
|
|
}
|
|
|
|
this->mUnk_04 = iVar1;
|
|
this->vfunc_00();
|
|
|
|
if (this->mUnk_04 >= this->mUnk_06) {
|
|
this->mUnk_10 = this->mUnk_18;
|
|
this->mUnk_0A = false;
|
|
this->mUnk_0C = true;
|
|
}
|
|
}
|
|
} else {
|
|
if (this->mUnk_0B && this->mUnk_04 != 0) {
|
|
iVar1 = this->mUnk_04 - this->mUnk_0D;
|
|
|
|
if (iVar1 > this->mUnk_06) {
|
|
iVar1 = this->mUnk_06;
|
|
} else if (iVar1 < 0) {
|
|
iVar1 = 0;
|
|
}
|
|
|
|
this->mUnk_04 = iVar1;
|
|
this->vfunc_04();
|
|
|
|
if (this->mUnk_04 == 0) {
|
|
this->mUnk_10 = this->mUnk_14;
|
|
this->mUnk_0B = false;
|
|
this->mUnk_0C = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
class TitleScreen : public SysObject, public GameModeManagerBase_104 { // 0233c6d4
|
|
public:
|
|
/* 000 (base) */
|
|
/* 01C */ TitleScreenState mState;
|
|
/* 020 */ bool mShowUI;
|
|
/* 021 */ u8 mUnk_021;
|
|
/* 022 */ unk8 mUnk_022;
|
|
/* 023 */ unk8 mUnk_023;
|
|
/* 024 */ UnkSubStruct19 mUnk_024; // feather
|
|
/* 09C */ UnkSubStruct19 mUnk_09C; // green rectangle
|
|
/* 114 */ UnkSubStruct19 mUnk_114; // "touch screen!" text
|
|
/* 18C */ UnkSubStruct19 mUnk_18C; // copyright text
|
|
/* 204 */ TitleScreen_Sub2 mUnk_204;
|
|
/* 218 */ TitleScreen_Sub3 mUnk_218;
|
|
/* 23C */ UnkStruct_ov019_020d24c8_28_258 mUnk_23C;
|
|
/* 254 */ UnkSubStruct19 mUnk_254; // logo shine
|
|
/* 2CC */ UnkSubStruct19 mUnk_2CC; // logo shine outline (it's barely visible)
|
|
/* 344 */ unk32 mUnk_344;
|
|
/* 348 */
|
|
|
|
GameModeLinkListNode *GetNode() {
|
|
GameModeLinkListNode *node = (GameModeLinkListNode *) this;
|
|
if (this != NULL) {
|
|
node = (GameModeLinkListNode *) ((u32 *) node + 1);
|
|
}
|
|
return node;
|
|
}
|
|
|
|
TitleScreen();
|
|
|
|
void func_ov025_020c4e54();
|
|
void func_ov025_020c4e6c();
|
|
void func_ov025_020c4e90();
|
|
void func_ov025_020c4ea0(TitleScreenState state);
|
|
void func_ov025_020c592c();
|
|
void func_ov025_020c5964();
|
|
void func_ov025_020c5988();
|
|
|
|
// data_ov025_020c5aec
|
|
void func_ov025_020c5200(Input *pButtons, TouchControl *pTouchControl);
|
|
void func_ov025_020c5204(Input *pButtons, TouchControl *pTouchControl);
|
|
void func_ov025_020c5240(Input *pButtons, TouchControl *pTouchControl);
|
|
void func_ov025_020c53d0(Input *pButtons, TouchControl *pTouchControl);
|
|
void func_ov025_020c55a4(Input *pButtons, TouchControl *pTouchControl);
|
|
void func_ov025_020c55e4(Input *pButtons, TouchControl *pTouchControl);
|
|
|
|
// data_ov025_020c5b30 vtable
|
|
/* 00 */ virtual ~TitleScreen() override;
|
|
/* 08 */ virtual void vfunc_08(Input *pButtons, TouchControl *pTouchControl) override;
|
|
/* 0C */ virtual void vfunc_0C(unk32 param1) override;
|
|
/* 10 */ virtual void vfunc_10(unk8 *param1) override;
|
|
/* 14 */ virtual void vfunc_14(unk8 *param1) override;
|
|
};
|
|
|
|
class TitleScreenManager : public TitleScreenManager_Base {
|
|
public:
|
|
/* 000 (base) */
|
|
/* 154 */ TitleScreen *mpTitleScreen;
|
|
/* 158 */
|
|
|
|
TitleScreenManager(unk32 param1) NO_INLINE {
|
|
this->mpTitleScreen = NULL;
|
|
GX_SetGraphicsMode(1, 0, 1);
|
|
GXS_SetGraphicsMode(5);
|
|
REG_BG3CNT_SUB = (REG_BG3CNT_SUB & 0x0043) | 0x4E14;
|
|
}
|
|
|
|
void func_ov025_020c4c20();
|
|
void func_ov025_020c4c30();
|
|
|
|
// data_ov025_020c5a98 vtable
|
|
/* 08 */ virtual ~TitleScreenManager() override;
|
|
/* 14 */ virtual void vfunc_14() override;
|
|
/* 18 */ virtual void vfunc_18() override;
|
|
/* 24 */ virtual void vfunc_24() override;
|
|
/* 28 */ virtual void vfunc_28(unk8 *param1) override;
|
|
/* 2C */ virtual void vfunc_2C(unk8 *param1) override;
|
|
/* 38 */ virtual void vfunc_38() override;
|
|
|
|
static TitleScreenManager *Create(unk32 param1);
|
|
};
|
|
|
|
extern TitleScreenManager *data_027e0994;
|