mirror of
https://github.com/pret/pokepinballrs.git
synced 2026-10-04 15:18:26 -04:00
862 lines
23 KiB
C
862 lines
23 KiB
C
#include "global.h"
|
|
#include "agb_sram.h"
|
|
#include "m4a.h"
|
|
#include "titlescreen.h"
|
|
#include "main.h"
|
|
#include "constants/bg_music.h"
|
|
|
|
static void sub_114FC(void);
|
|
static void sub_1157C(void);
|
|
static void sub_11640(void);
|
|
|
|
// If the user doesn't press any buttons at the title screen,
|
|
// it will transition to a demo gameplay experience.
|
|
#define NUM_IDLE_FRAMES 1800
|
|
|
|
#define RESTART_GAME_BUTTONS (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)
|
|
|
|
enum
|
|
{
|
|
SUBSTATE_LOAD_GRAPHICS = 0,
|
|
SUBSTATE_WAIT_FOR_START_BUTTON = 1,
|
|
SUBSTATE_MENU_INPUT_NO_SAVED_GAME = 4,
|
|
SUBSTATE_MENU_INPUT_SAVED_GAME = 5,
|
|
SUBSTATE_ANIM_CLOSE_MENU = 6,
|
|
SUBSTATE_EXEC_MENU_SELECTION = 10
|
|
};
|
|
|
|
void TitlescreenMain(void)
|
|
{
|
|
gTitlescreenStateFuncs[gMain.subState]();
|
|
}
|
|
|
|
void LoadTitlescreenGraphics(void)
|
|
{
|
|
int autoDisplayMenu;
|
|
|
|
ResetSomeGraphicsRelatedStuff();
|
|
REG_DISPCNT = DISPCNT_OBJ_ON| DISPCNT_FORCED_BLANK;
|
|
REG_BG1CNT = BGCNT_256COLOR | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(0);
|
|
REG_DISPCNT |= DISPCNT_BG1_ON;
|
|
gMain.unk16 = REG_DISPCNT;
|
|
|
|
DmaCopy16(3, gTitlescreenBg_Gfx, (void *)BG_CHAR_ADDR(1), 0xA000);
|
|
DmaCopy16(3, gTitlescreenBg_Pals, (void *)BG_PLTT, BG_PLTT_SIZE);
|
|
DmaCopy16(3, gTitlescreenBgTilemap, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE);
|
|
|
|
SaveFile_ReadSavedGamePresent();
|
|
if (gMain.hasSavedGame == TRUE)
|
|
{
|
|
DmaCopy16(3, gTitlescreenSprites_Pals, (void *)OBJ_PLTT, 0xA0);
|
|
DmaCopy16(3, gTitlescreenSpritesSavedGame_Gfx, (void *)BG_CHAR_ADDR(4), 0x7000);
|
|
DmaCopy16(3, gGBAButtonIcons_Pals, (void *)(OBJ_PLTT + 0xA0), 0x40);
|
|
DmaCopy16(3, gOptionsSprites_Gfx, (void *)OBJ_VRAM0 + 0x7000, 0x400);
|
|
}
|
|
else
|
|
{
|
|
DmaCopy16(3, gTitlescreenSprites_Pals, (void *)OBJ_PLTT, 0xA0);
|
|
DmaCopy16(3, gTitlescreenSpritesNoSavedGame_Gfx, (void *)BG_CHAR_ADDR(4), 0x7000);
|
|
DmaCopy16(3, gGBAButtonIcons_Pals, (void *)(OBJ_PLTT + 0xA0), 0x40);
|
|
DmaCopy16(3, gOptionsSprites_Gfx, (void *)OBJ_VRAM0 + 0x7000, 0x400);
|
|
}
|
|
|
|
sub_10AC0();
|
|
|
|
autoDisplayMenu = gAutoDisplayTitlescreenMenu;
|
|
if (autoDisplayMenu == 1)
|
|
{
|
|
gUnknown_202BE24 = 0;
|
|
gTitlescreen.unk9 = 0;
|
|
gTitlescreen.unkB = autoDisplayMenu;
|
|
gMain.subState = 3;
|
|
sub_0CBC();
|
|
sub_FD5C(NULL);
|
|
}
|
|
else
|
|
{
|
|
gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON;
|
|
sub_0CBC();
|
|
sub_FD5C(sub_11640);
|
|
}
|
|
|
|
m4aSongNumStart(MUS_TITLE);
|
|
}
|
|
|
|
void sub_10AC0(void)
|
|
{
|
|
int i;
|
|
|
|
gTitlescreen.animTimer = 0;
|
|
gTitlescreen.unk2 = 0;
|
|
gTitlescreen.unk6 = 0;
|
|
gTitlescreen.unk8 = 0;
|
|
gTitlescreen.unk10 = 4;
|
|
gTitlescreen.unk9 = 1;
|
|
gTitlescreen.unk11 = 0;
|
|
gTitlescreen.unkA = 6;
|
|
gTitlescreen.unkC = 0;
|
|
gTitlescreen.unkE = 3;
|
|
gTitlescreen.unkB = 0;
|
|
gTitlescreen.unkD = 0;
|
|
gTitlescreen.unkF = 0;
|
|
gUnknown_0202C588 = 1;
|
|
gEraseSaveDataAccessStep = 0;
|
|
gEraseSaveDataAccessCounter = 0;
|
|
gEReaderAccessStep = 0;
|
|
gEReaderAccessCounter = 0;
|
|
|
|
if (gMain.hasSavedGame == TRUE)
|
|
{
|
|
for (i = 0; i < 7; i++)
|
|
gUnknown_0202BE00[i] = gUnknown_086A975C[i];
|
|
|
|
gTitlescreen.menuCursorIndex = 1;
|
|
gTitlescreen.unk7 = 1;
|
|
}
|
|
else
|
|
{
|
|
for (i = 0; i < 7; i++)
|
|
gUnknown_0201C190[i] = gUnknown_086A96F8[i];
|
|
|
|
gTitlescreen.menuCursorIndex = 0;
|
|
gTitlescreen.unk7 = 0;
|
|
gMain.unkD = 0;
|
|
}
|
|
|
|
gTitlescreen.idleFramesCounter = 0;
|
|
gTitlescreen.idleFadeoutCounter = 1;
|
|
gUnknown_020028A4 = 0;
|
|
if (JOY_HELD(RESTART_GAME_BUTTONS) == RESTART_GAME_BUTTONS)
|
|
gUnknown_020028A5 = 1;
|
|
else
|
|
gUnknown_020028A5 = 0;
|
|
|
|
gUnknown_202BE24 = 0;
|
|
}
|
|
|
|
void TitleScreen1_WaitForStartButton(void)
|
|
{
|
|
if (JOY_HELD(RESTART_GAME_BUTTONS) == RESTART_GAME_BUTTONS)
|
|
{
|
|
if (!gUnknown_020028A5)
|
|
{
|
|
gUnknown_020028A4 = 1;
|
|
gTitlescreen.unk6 = 9;
|
|
gMain.subState = 11;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gUnknown_020028A5 = 0;
|
|
}
|
|
|
|
if (!gUnknown_020028A4)
|
|
{
|
|
gTitlescreen.animTimer++;
|
|
if (gTitlescreen.animTimer >= gUnknown_086A9662[gTitlescreen.unk8])
|
|
{
|
|
gTitlescreen.animTimer = 0;
|
|
if (++gTitlescreen.unk8 > 3)
|
|
gTitlescreen.unk8 = 0;
|
|
}
|
|
|
|
if (JOY_HELD(KEYS_MASK))
|
|
gTitlescreen.idleFramesCounter = 0;
|
|
|
|
if (JOY_NEW(A_BUTTON | START_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_UNKNOWN_0x65);
|
|
gTitlescreen.animTimer = 0;
|
|
gTitlescreen.unk2 = 0;
|
|
gMain.subState = 2;
|
|
}
|
|
|
|
sub_114FC();
|
|
sub_1157C();
|
|
|
|
gTitlescreen.idleFramesCounter++;
|
|
if (gTitlescreen.idleFramesCounter > NUM_IDLE_FRAMES)
|
|
{
|
|
if (gTitlescreen.idleFramesCounter % 10 == 0)
|
|
{
|
|
gTitlescreen.idleFadeoutCounter++;
|
|
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100 / gTitlescreen.idleFadeoutCounter);
|
|
}
|
|
|
|
if (gTitlescreen.idleFadeoutCounter > 9)
|
|
{
|
|
gTitlescreen.idleFramesCounter = 0;
|
|
gTitlescreen.unk6 = 7;
|
|
gMain.subState = 11;
|
|
}
|
|
}
|
|
}
|
|
|
|
sub_11640();
|
|
}
|
|
|
|
void TitleScreen2_8010CF0(void)
|
|
{
|
|
if (JOY_HELD(RESTART_GAME_BUTTONS) == RESTART_GAME_BUTTONS)
|
|
{
|
|
gUnknown_020028A4 = 1;
|
|
gTitlescreen.unk6 = 9;
|
|
gMain.subState = 11;
|
|
}
|
|
|
|
if (!gUnknown_020028A4)
|
|
{
|
|
gTitlescreen.animTimer++;
|
|
if (gTitlescreen.animTimer >= gUnknown_086A9666[gTitlescreen.unk2][1])
|
|
{
|
|
gTitlescreen.animTimer = 0;
|
|
gTitlescreen.unk8 = gUnknown_086A9666[gTitlescreen.unk2][0];
|
|
if (++gTitlescreen.unk2 > 5)
|
|
{
|
|
gTitlescreen.unk2 = 0;
|
|
gUnknown_202BE24 = 0;
|
|
gTitlescreen.unk9 = 0;
|
|
gTitlescreen.unkB = 1;
|
|
gMain.subState = 3;
|
|
}
|
|
}
|
|
}
|
|
|
|
sub_11640();
|
|
}
|
|
|
|
void TitleScreen9_8010D84(void)
|
|
{
|
|
if (JOY_HELD(RESTART_GAME_BUTTONS) == RESTART_GAME_BUTTONS)
|
|
{
|
|
gUnknown_020028A4 = 1;
|
|
gTitlescreen.unk6 = 9;
|
|
gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
|
|
}
|
|
|
|
if (!gUnknown_020028A4)
|
|
{
|
|
if (JOY_NEW(A_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_UNKNOWN_0x65);
|
|
sub_11B74();
|
|
sub_02B4();
|
|
m4aMPlayAllStop();
|
|
sub_0D10();
|
|
gMain.subState = SUBSTATE_LOAD_GRAPHICS;
|
|
}
|
|
else if (JOY_NEW(B_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_UNKNOWN_0x66);
|
|
gTitlescreen.unk11 = 0;
|
|
gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON;
|
|
}
|
|
}
|
|
|
|
sub_11640();
|
|
}
|
|
|
|
void TitleScreen3_8010E00(void)
|
|
{
|
|
if (JOY_HELD(RESTART_GAME_BUTTONS) == RESTART_GAME_BUTTONS)
|
|
{
|
|
gUnknown_020028A4 = 1;
|
|
gTitlescreen.unk6 = 9;
|
|
gMain.subState = 11;
|
|
}
|
|
|
|
if (!gUnknown_020028A4)
|
|
{
|
|
if (!gTitlescreen.unk7)
|
|
{
|
|
gTitlescreen.animTimer++;
|
|
if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2])
|
|
{
|
|
gTitlescreen.animTimer = 0;
|
|
gUnknown_0201C190[6] = gUnknown_086A9714[gTitlescreen.unk2];
|
|
if (++gTitlescreen.unk2 > 11)
|
|
{
|
|
gTitlescreen.unk2 = 0;
|
|
gTitlescreen.unkD = 1;
|
|
gTitlescreen.unkF = 1;
|
|
gMain.subState = SUBSTATE_MENU_INPUT_NO_SAVED_GAME;
|
|
}
|
|
}
|
|
|
|
sub_1175C();
|
|
}
|
|
else
|
|
{
|
|
gTitlescreen.animTimer++;
|
|
if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2])
|
|
{
|
|
gTitlescreen.animTimer = 0;
|
|
gUnknown_0202BE00[6] = gUnknown_086A9778[gTitlescreen.unk2];
|
|
if (++gTitlescreen.unk2 > 11)
|
|
{
|
|
gTitlescreen.unk2 = 0;
|
|
gTitlescreen.unkD = 1;
|
|
gTitlescreen.unkF = 1;
|
|
gMain.subState = SUBSTATE_MENU_INPUT_SAVED_GAME;
|
|
}
|
|
}
|
|
|
|
sub_11968();
|
|
}
|
|
}
|
|
}
|
|
|
|
void TitleScreen4_MenuInputNoSavedGame(void)
|
|
{
|
|
if (JOY_HELD(RESTART_GAME_BUTTONS) == RESTART_GAME_BUTTONS)
|
|
{
|
|
gUnknown_020028A4 = 1;
|
|
gTitlescreen.unk6 = 9;
|
|
gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
|
|
}
|
|
|
|
if (!gUnknown_020028A4)
|
|
{
|
|
gTitlescreen.animTimer++;
|
|
if (gTitlescreen.animTimer >= gUnknown_086A9672[gTitlescreen.unk2][1])
|
|
{
|
|
gTitlescreen.animTimer = 0;
|
|
if (++gTitlescreen.unk2 > 6)
|
|
gTitlescreen.unk2 = 0;
|
|
|
|
gTitlescreen.unkC = gUnknown_086A9672[gTitlescreen.unk2][0];
|
|
gTitlescreen.unkE = gUnknown_086A9672[gTitlescreen.unk2][0] + 3;
|
|
}
|
|
|
|
if (JOY_NEW(DPAD_UP))
|
|
{
|
|
m4aSongNumStart(SE_SELECT);
|
|
if (--gTitlescreen.menuCursorIndex < 0)
|
|
gTitlescreen.menuCursorIndex = 3;
|
|
}
|
|
else if (JOY_NEW(DPAD_DOWN))
|
|
{
|
|
m4aSongNumStart(SE_SELECT);
|
|
if (++gTitlescreen.menuCursorIndex > 3)
|
|
gTitlescreen.menuCursorIndex = 0;
|
|
}
|
|
|
|
if (JOY_NEW(A_BUTTON | START_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_UNKNOWN_0x65);
|
|
gTitlescreen.animTimer = 0;
|
|
gTitlescreen.unk2 = 0;
|
|
gMain.subState = 7;
|
|
}
|
|
else if (JOY_NEW(B_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_UNKNOWN_0x66);
|
|
gTitlescreen.animTimer = 0;
|
|
gTitlescreen.unk2 = 12;
|
|
gTitlescreen.unkD = 0;
|
|
gTitlescreen.unkF = 0;
|
|
gMain.subState = SUBSTATE_ANIM_CLOSE_MENU;
|
|
}
|
|
|
|
sub_1157C();
|
|
}
|
|
|
|
sub_1175C();
|
|
}
|
|
|
|
void TitleScreen7_8011020(void)
|
|
{
|
|
if (JOY_HELD(RESTART_GAME_BUTTONS) == RESTART_GAME_BUTTONS)
|
|
{
|
|
gUnknown_020028A4 = 1;
|
|
gTitlescreen.unk6 = 9;
|
|
gMain.subState = 11;
|
|
}
|
|
|
|
if (!gUnknown_020028A4)
|
|
{
|
|
u16 animTimer = gTitlescreen.animTimer;
|
|
u16 mask = 0x3;
|
|
if (!(animTimer & mask))
|
|
{
|
|
if (!gTitlescreen.unk2)
|
|
{
|
|
gTitlescreen.unk2 = 1;
|
|
sub_10708((void *)(OBJ_VRAM0 + 0x1E0 + gTitlescreen.menuCursorIndex * 0x800), gUnknown_03000000, 8, 2);
|
|
sub_10708((void *)(OBJ_VRAM0 + 0x61E0), (void *)(OBJ_VRAM0 + 0x1E0 + gTitlescreen.menuCursorIndex * 0x800), 8, 2);
|
|
}
|
|
else
|
|
{
|
|
gTitlescreen.unk2 = 0;
|
|
sub_10708(gUnknown_03000000, (void *)(OBJ_VRAM0 + 0x1E0 + gTitlescreen.menuCursorIndex * 0x800), 8, 2);
|
|
}
|
|
}
|
|
|
|
if (gTitlescreen.animTimer > 20)
|
|
{
|
|
gMain.unkD = 0;
|
|
gTitlescreen.unk6 = gUnknown_086A96A4[gTitlescreen.menuCursorIndex];
|
|
gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
|
|
}
|
|
|
|
gTitlescreen.animTimer++;
|
|
}
|
|
|
|
sub_1175C();
|
|
}
|
|
|
|
void TitleScreen5_MenuInputSavedGame(void)
|
|
{
|
|
if (JOY_HELD(RESTART_GAME_BUTTONS) == RESTART_GAME_BUTTONS)
|
|
{
|
|
gUnknown_020028A4 = 1;
|
|
gTitlescreen.unk6 = 9;
|
|
gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
|
|
}
|
|
|
|
if (!gUnknown_020028A4)
|
|
{
|
|
gTitlescreen.animTimer++;
|
|
if (gTitlescreen.animTimer >= gUnknown_086A9672[gTitlescreen.unk2][1])
|
|
{
|
|
gTitlescreen.animTimer = 0;
|
|
if (++gTitlescreen.unk2 > 6)
|
|
gTitlescreen.unk2 = 0;
|
|
|
|
gTitlescreen.unkC = gUnknown_086A9672[gTitlescreen.unk2][0];
|
|
gTitlescreen.unkE = gUnknown_086A9672[gTitlescreen.unk2][0] + 3;
|
|
}
|
|
|
|
if (JOY_NEW(DPAD_UP))
|
|
{
|
|
m4aSongNumStart(SE_SELECT);
|
|
if (--gTitlescreen.menuCursorIndex < 0)
|
|
gTitlescreen.menuCursorIndex = 4;
|
|
}
|
|
else if (JOY_NEW(DPAD_DOWN))
|
|
{
|
|
m4aSongNumStart(SE_SELECT);
|
|
if (++gTitlescreen.menuCursorIndex > 4)
|
|
gTitlescreen.menuCursorIndex = 0;
|
|
}
|
|
|
|
if (JOY_NEW(A_BUTTON | START_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_UNKNOWN_0x65);
|
|
gTitlescreen.animTimer = 0;
|
|
gTitlescreen.unk2 = 0;
|
|
gMain.subState = 8;
|
|
}
|
|
else if (JOY_NEW(B_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_UNKNOWN_0x66);
|
|
gTitlescreen.animTimer = 0;
|
|
gTitlescreen.unk2 = 12;
|
|
gTitlescreen.unkD = 0;
|
|
gTitlescreen.unkF = 0;
|
|
gMain.subState = SUBSTATE_ANIM_CLOSE_MENU;
|
|
}
|
|
|
|
sub_1157C();
|
|
}
|
|
|
|
sub_11968();
|
|
}
|
|
|
|
void TitleScreen8_8011228(void)
|
|
{
|
|
if (JOY_HELD(RESTART_GAME_BUTTONS) == RESTART_GAME_BUTTONS)
|
|
{
|
|
gUnknown_020028A4 = 1;
|
|
gTitlescreen.unk6 = 9;
|
|
gMain.subState = 11;
|
|
}
|
|
|
|
if (!gUnknown_020028A4)
|
|
{
|
|
u16 animTimer = gTitlescreen.animTimer;
|
|
u16 mask = 0x3;
|
|
|
|
// Blink menu item
|
|
if (!(animTimer & mask))
|
|
{
|
|
if (!gTitlescreen.unk2)
|
|
{
|
|
gTitlescreen.unk2 = 1;
|
|
sub_10708((void *)(OBJ_VRAM0 + 0x1E0 + gTitlescreen.menuCursorIndex * 0x800), gUnknown_03000000, 8, 2);
|
|
sub_10708((void *)(OBJ_VRAM0 + 0x61E0), (void *)(OBJ_VRAM0 + 0x1E0 + gTitlescreen.menuCursorIndex * 0x800), 8, 2);
|
|
}
|
|
else
|
|
{
|
|
gTitlescreen.unk2 = 0;
|
|
sub_10708(gUnknown_03000000, (void *)(OBJ_VRAM0 + 0x1E0 + gTitlescreen.menuCursorIndex * 0x800), 8, 2);
|
|
}
|
|
}
|
|
|
|
if (gTitlescreen.animTimer > 20)
|
|
{
|
|
if (gTitlescreen.menuCursorIndex == 1)
|
|
gMain.unkD = 1;
|
|
else
|
|
gMain.unkD = 0;
|
|
|
|
gTitlescreen.unk6 = gUnknown_086A96D4[gTitlescreen.menuCursorIndex];
|
|
gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
|
|
}
|
|
|
|
gTitlescreen.animTimer++;
|
|
}
|
|
|
|
sub_11968();
|
|
}
|
|
|
|
void TitleScreen6_AnimCloseMenu(void)
|
|
{
|
|
if (JOY_HELD(RESTART_GAME_BUTTONS) == RESTART_GAME_BUTTONS)
|
|
{
|
|
gUnknown_020028A4 = 1;
|
|
gTitlescreen.unk6 = 9;
|
|
gMain.subState = 11;
|
|
}
|
|
|
|
if (!gUnknown_020028A4)
|
|
{
|
|
if (!gTitlescreen.unk7)
|
|
{
|
|
gTitlescreen.animTimer++;
|
|
if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2])
|
|
{
|
|
gTitlescreen.animTimer = 0;
|
|
if (--gTitlescreen.unk2 < 0)
|
|
{
|
|
gTitlescreen.unk2 = 0;
|
|
gTitlescreen.menuCursorIndex = 0;
|
|
gUnknown_202BE24 = 1;
|
|
gTitlescreen.unk9 = 1;
|
|
gTitlescreen.unkB = 0;
|
|
gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON;
|
|
}
|
|
|
|
gUnknown_0201C190[6] = gUnknown_086A9714[gTitlescreen.unk2];
|
|
}
|
|
|
|
sub_1175C();
|
|
}
|
|
else
|
|
{
|
|
gTitlescreen.animTimer++;
|
|
if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2])
|
|
{
|
|
gTitlescreen.animTimer = 0;
|
|
if (--gTitlescreen.unk2 < 0)
|
|
{
|
|
gTitlescreen.unk2 = 0;
|
|
gTitlescreen.menuCursorIndex = 1;
|
|
gUnknown_202BE24 = 1;
|
|
gTitlescreen.unk9 = 1;
|
|
gTitlescreen.unkB = 0;
|
|
gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON;
|
|
}
|
|
|
|
gUnknown_0202BE00[6] = gUnknown_086A9778[gTitlescreen.unk2];
|
|
}
|
|
|
|
sub_11968();
|
|
}
|
|
}
|
|
}
|
|
|
|
void TitleScreen10_ExecMenuSelection(void)
|
|
{
|
|
if (!gTitlescreen.unk7)
|
|
sub_FE04(sub_1175C);
|
|
else
|
|
sub_FE04(sub_11968);
|
|
|
|
m4aMPlayAllStop();
|
|
sub_0D10();
|
|
|
|
if (gUnknown_086A964C[gTitlescreen.unk6] == 8)
|
|
gUnknown_0202C588 = 0;
|
|
else
|
|
gUnknown_0202C588 = 1;
|
|
|
|
gAutoDisplayTitlescreenMenu = 0;
|
|
SetMainGameState(gUnknown_086A964C[gTitlescreen.unk6]);
|
|
}
|
|
|
|
void TitleScreen11_80114B4(void)
|
|
{
|
|
sub_FE04(sub_11640);
|
|
m4aMPlayAllStop();
|
|
sub_0D10();
|
|
gUnknown_0202C588 = 1;
|
|
gAutoDisplayTitlescreenMenu = 0;
|
|
SetMainGameState(gUnknown_086A964C[gTitlescreen.unk6]);
|
|
}
|
|
|
|
static void sub_114FC(void)
|
|
{
|
|
// To delete save file, press R_BUTTON 3 times while holding L_BUTTON And DPAD_LEFT.
|
|
if (JOY_HELD(L_BUTTON | DPAD_LEFT) == (L_BUTTON | DPAD_LEFT))
|
|
{
|
|
if (JOY_NEW(R_BUTTON))
|
|
{
|
|
gEraseSaveDataAccessCounter = 40;
|
|
if (++gEraseSaveDataAccessStep == 3)
|
|
{
|
|
gEraseSaveDataAccessStep = 0;
|
|
gEraseSaveDataAccessCounter = 0;
|
|
m4aSongNumStart(SE_UNKNOWN_0x68);
|
|
gTitlescreen.unk11 = 1;
|
|
gMain.subState = 9;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (gEraseSaveDataAccessCounter > 0)
|
|
{
|
|
if (--gEraseSaveDataAccessCounter <= 0)
|
|
{
|
|
gEraseSaveDataAccessCounter = 0;
|
|
gEraseSaveDataAccessStep = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
static void sub_1157C(void)
|
|
{
|
|
// To access the e-reader screen, alternate pressing R_BUTTON and L_BUTTON 6 times while holding DPAD_RIGHT.
|
|
s16 buttonMask = gEReaderAccessButtonSequence[gEReaderAccessStep];
|
|
if (JOY_HELD(DPAD_RIGHT) && JOY_NEW(buttonMask) == buttonMask)
|
|
{
|
|
gEReaderAccessCounter = 40;
|
|
gEReaderAccessStep++;
|
|
if (gEReaderAccessButtonSequence[gEReaderAccessStep] == -1)
|
|
{
|
|
gEReaderAccessStep = 0;
|
|
gEReaderAccessCounter = 0;
|
|
m4aSongNumStart(SE_UNKNOWN_0x65);
|
|
gTitlescreen.unk6 = 5;
|
|
if (gMain.subState == SUBSTATE_WAIT_FOR_START_BUTTON)
|
|
gMain.subState = 11;
|
|
else
|
|
gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
|
|
}
|
|
}
|
|
|
|
if (JOY_NEW(KEYS_MASK & ~buttonMask))
|
|
{
|
|
gEReaderAccessCounter = 0;
|
|
gEReaderAccessStep = 0;
|
|
}
|
|
|
|
if (gEReaderAccessCounter > 0)
|
|
{
|
|
if (--gEReaderAccessCounter <= 0)
|
|
{
|
|
gEReaderAccessCounter = 0;
|
|
gEReaderAccessStep = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
static void sub_11640(void)
|
|
{
|
|
int i;
|
|
const struct SpriteSet *spriteSet;
|
|
struct SpriteGroup *group1 = &gUnknown_0200B3B8[gTitlescreen.unk8];
|
|
struct SpriteGroup *group2 = &gUnknown_0200B3B8[gTitlescreen.unk10];
|
|
|
|
group1->available = gTitlescreen.unk9;
|
|
group2->available = gTitlescreen.unk11;
|
|
|
|
LoadSpriteSets(gUnknown_086A96E4, 5, gUnknown_0200B3B8);
|
|
|
|
if (group1->available == 1)
|
|
{
|
|
group1->baseX = 120;
|
|
group1->baseY = 102;
|
|
spriteSet = gUnknown_086A96E4[gTitlescreen.unk8];
|
|
for (i = 0; i < spriteSet->count; i++)
|
|
{
|
|
gOamBuffer[group1->oam[i].oamId].x = group1->oam[i].xOffset + group1->baseX;
|
|
gOamBuffer[group1->oam[i].oamId].y = group1->oam[i].yOffset + group1->baseY;
|
|
|
|
asm(""); // needed to match
|
|
}
|
|
}
|
|
|
|
if (group2->available == 1)
|
|
{
|
|
group2->baseX = 120;
|
|
group2->baseY = 80;
|
|
for (i = 0; i < 2; i++)
|
|
{
|
|
gOamBuffer[group2->oam[i].oamId].x = group2->oam[i].xOffset + group2->baseX;
|
|
gOamBuffer[group2->oam[i].oamId].y = group2->oam[i].yOffset + group2->baseY;
|
|
|
|
asm(""); // needed to match
|
|
}
|
|
}
|
|
|
|
group1->available = 0;
|
|
group2->available = 0;
|
|
}
|
|
|
|
struct UnknownStruct1
|
|
{
|
|
u16 count;
|
|
u8 filler2[6];
|
|
};
|
|
|
|
void sub_1175C(void)
|
|
{
|
|
struct SpriteGroup *r10;
|
|
struct SpriteGroup *r9;
|
|
struct SpriteGroup *r8;
|
|
const struct UnknownStruct1 *r12;
|
|
int sp0;
|
|
|
|
gMain.blendControl = 0x210;
|
|
gMain.blendAlpha = 0x808;
|
|
REG_BLDCNT = gMain.blendControl;
|
|
REG_BLDALPHA = gMain.blendAlpha;
|
|
|
|
r10 = &gMain.spriteGroups[gTitlescreen.unkA];
|
|
r9 = &gMain.spriteGroups[gTitlescreen.unkC];
|
|
r8 = &gMain.spriteGroups[gTitlescreen.unkE];
|
|
|
|
r10->available = gTitlescreen.unkB;
|
|
r9->available = gTitlescreen.unkD;
|
|
r8->available = gTitlescreen.unkF;
|
|
|
|
LoadSpriteSets((const struct SpriteSet *const *)gUnknown_0201C190, 7, gMain.spriteGroups);
|
|
|
|
if (r10->available == 1)
|
|
{
|
|
r10->baseX = 0x78;
|
|
r10->baseY = 0x66;
|
|
r12 = (const struct UnknownStruct1 *)gUnknown_0201C190[6];
|
|
for (sp0 = 0; sp0 < r12->count; sp0++)
|
|
{
|
|
struct OamDataSimple *r4 = &r10->oam[sp0];
|
|
if (r12[sp0 + 1].count == 1) // dunno. wtf?
|
|
gOamBuffer[r4->oamId].objMode = 1;
|
|
else
|
|
gOamBuffer[r4->oamId].objMode = 0;
|
|
gOamBuffer[r4->oamId].x = r4->xOffset + r10->baseX;
|
|
gOamBuffer[r4->oamId].y = r4->yOffset + r10->baseY;
|
|
}
|
|
}
|
|
|
|
if (r9->available == 1)
|
|
{
|
|
struct OamDataSimple *r5;
|
|
|
|
r9->baseX = gUnknown_086A9684[gTitlescreen.menuCursorIndex].x;
|
|
r9->baseY = gUnknown_086A9684[gTitlescreen.menuCursorIndex].y;
|
|
|
|
r5 = &r9->oam[0];
|
|
|
|
gOamBuffer[r5->oamId].x = r5->xOffset + r9->baseX;
|
|
gOamBuffer[r5->oamId].y = r5->yOffset + r9->baseY;
|
|
}
|
|
|
|
if (r8->available == 1)
|
|
{
|
|
struct OamDataSimple *r5;
|
|
|
|
r8->baseX = gUnknown_086A9694[gTitlescreen.menuCursorIndex].x;
|
|
r8->baseY = gUnknown_086A9694[gTitlescreen.menuCursorIndex].y;
|
|
|
|
r5 = &r8->oam[0];
|
|
|
|
gOamBuffer[r5->oamId].x = r5->xOffset + r8->baseX;
|
|
gOamBuffer[r5->oamId].y = r5->yOffset + r8->baseY;
|
|
}
|
|
|
|
r10->available = 0;
|
|
r9->available = 0;
|
|
r8->available = 0;
|
|
}
|
|
|
|
void sub_11968(void)
|
|
{
|
|
struct SpriteGroup *r10;
|
|
struct SpriteGroup *r9;
|
|
struct SpriteGroup *r8;
|
|
const struct UnknownStruct1 *r12;
|
|
int sp0;
|
|
|
|
gMain.blendControl = 0x210;
|
|
gMain.blendAlpha = 0x808;
|
|
REG_BLDCNT = gMain.blendControl;
|
|
REG_BLDALPHA = gMain.blendAlpha;
|
|
|
|
r10 = &gMain.spriteGroups[gTitlescreen.unkA];
|
|
r9 = &gMain.spriteGroups[gTitlescreen.unkC];
|
|
r8 = &gMain.spriteGroups[gTitlescreen.unkE];
|
|
|
|
r10->available = gTitlescreen.unkB;
|
|
r9->available = gTitlescreen.unkD;
|
|
r8->available = gTitlescreen.unkF;
|
|
|
|
LoadSpriteSets((const struct SpriteSet *const *)gUnknown_0202BE00, 7, gMain.spriteGroups);
|
|
|
|
if (r10->available == 1)
|
|
{
|
|
r10->baseX = 0x78;
|
|
r10->baseY = 0x66;
|
|
r12 = (const struct UnknownStruct1 *)gUnknown_0202BE00[6];
|
|
for (sp0 = 0; sp0 < r12->count; sp0++)
|
|
{
|
|
struct OamDataSimple *r4 = &r10->oam[sp0];
|
|
if (r12[sp0 + 1].count == 1) // dunno. wtf?
|
|
gOamBuffer[r4->oamId].objMode = 1;
|
|
else
|
|
gOamBuffer[r4->oamId].objMode = 0;
|
|
gOamBuffer[r4->oamId].x = r4->xOffset + r10->baseX;
|
|
gOamBuffer[r4->oamId].y = r4->yOffset + r10->baseY;
|
|
}
|
|
}
|
|
|
|
if (r9->available == 1)
|
|
{
|
|
struct OamDataSimple *r5;
|
|
|
|
r9->baseX = gUnknown_086A96AC[gTitlescreen.menuCursorIndex].x;
|
|
r9->baseY = gUnknown_086A96AC[gTitlescreen.menuCursorIndex].y;
|
|
|
|
r5 = &r9->oam[0];
|
|
|
|
gOamBuffer[r5->oamId].x = r5->xOffset + r9->baseX;
|
|
gOamBuffer[r5->oamId].y = r5->yOffset + r9->baseY;
|
|
}
|
|
|
|
if (r8->available == 1)
|
|
{
|
|
struct OamDataSimple *r5;
|
|
|
|
r8->baseX = gUnknown_086A96C0[gTitlescreen.menuCursorIndex].x;
|
|
r8->baseY = gUnknown_086A96C0[gTitlescreen.menuCursorIndex].y;
|
|
|
|
r5 = &r8->oam[0];
|
|
|
|
gOamBuffer[r5->oamId].x = r5->xOffset + r8->baseX;
|
|
gOamBuffer[r5->oamId].y = r5->yOffset + r8->baseY;
|
|
}
|
|
|
|
r10->available = 0;
|
|
r9->available = 0;
|
|
r8->available = 0;
|
|
}
|
|
|
|
void sub_11B74(void)
|
|
{
|
|
sub_52C64();
|
|
SaveFile_WriteToSram();
|
|
gMain.hasSavedGame = FALSE;
|
|
WriteAndVerifySramFast((const u8 *)&gMain.hasSavedGame, (void *)0x0E000544, sizeof(gMain.hasSavedGame));
|
|
}
|