Document main_menu

This commit is contained in:
PikalaxALT
2019-10-08 13:40:04 -04:00
parent 99bd3d9154
commit 3c3fd189d8
2 changed files with 250 additions and 140 deletions
BIN
View File
Binary file not shown.
+250 -140
View File
@@ -25,6 +25,30 @@
#include "text_window_graphics.h"
#include "constants/songs.h"
enum MainMenuType
{
MAIN_MENU_NEWGAME = 0,
MAIN_MENU_CONTINUE,
MAIN_MENU_MYSTERYGIFT
};
enum MainMenuWindow
{
MAIN_MENU_WINDOW_NEWGAME_ONLY = 0,
MAIN_MENU_WINDOW_CONTINUE,
MAIN_MENU_WINDOW_NEWGAME,
MAIN_MENU_WINDOW_MYSTERYGIFT,
MAIN_MENU_WINDOW_ERROR,
MAIN_MENU_WINDOW_COUNT
};
#define tMenuType data[0]
#define tCursorPos data[1]
#define tUnused8 data[8]
#define tMGErrorMsgState data[9]
#define tMGErrorType data[10]
static bool32 MainMenuGpuInit(u8 a0);
static void Task_SetWin0BldRegsAndCheckSaveFile(u8 taskId);
static void PrintSaveErrorStatus(u8 taskId, const u8 *str);
@@ -48,14 +72,14 @@ static void PrintDexCount(void);
static void PrintBadgeCount(void);
static void LoadUserFrameToBg(u8 bgId);
static void SetStdFrame0OnBg(u8 bgId);
static void DrawBubbleBorder(const struct WindowTemplate * template);
static void DestroyWindowBubbleFrame(const struct WindowTemplate * template);
static void MainMenu_DrawWindow(const struct WindowTemplate * template);
static void MainMenu_EraseWindow(const struct WindowTemplate * template);
static const u8 sString_Dummy[] = _("");
static const u8 sString_Newline[] = _("\n");
static const struct WindowTemplate sWindowTemplate[] = {
{
[MAIN_MENU_WINDOW_NEWGAME_ONLY] = {
.bg = 0,
.tilemapLeft = 3,
.tilemapTop = 1,
@@ -63,7 +87,8 @@ static const struct WindowTemplate sWindowTemplate[] = {
.height = 2,
.paletteNum = 15,
.baseBlock = 0x001
}, {
},
[MAIN_MENU_WINDOW_CONTINUE] = {
.bg = 0,
.tilemapLeft = 3,
.tilemapTop = 1,
@@ -71,7 +96,8 @@ static const struct WindowTemplate sWindowTemplate[] = {
.height = 10,
.paletteNum = 15,
.baseBlock = 0x001
}, {
},
[MAIN_MENU_WINDOW_NEWGAME] = {
.bg = 0,
.tilemapLeft = 3,
.tilemapTop = 13,
@@ -79,7 +105,8 @@ static const struct WindowTemplate sWindowTemplate[] = {
.height = 2,
.paletteNum = 15,
.baseBlock = 0x0f1
}, {
},
[MAIN_MENU_WINDOW_MYSTERYGIFT] = {
.bg = 0,
.tilemapLeft = 3,
.tilemapTop = 17,
@@ -87,7 +114,8 @@ static const struct WindowTemplate sWindowTemplate[] = {
.height = 2,
.paletteNum = 15,
.baseBlock = 0x121
}, {
},
[MAIN_MENU_WINDOW_ERROR] = {
.bg = 0,
.tilemapLeft = 3,
.tilemapTop = 15,
@@ -95,7 +123,8 @@ static const struct WindowTemplate sWindowTemplate[] = {
.height = 4,
.paletteNum = 15,
.baseBlock = 0x001
}, DUMMY_WIN_TEMPLATE
},
[MAIN_MENU_WINDOW_COUNT] = DUMMY_WIN_TEMPLATE
};
static const u16 sBgPal00[] = INCBIN_U16("data/main_menu/unk_8234648.gbapal");
@@ -114,7 +143,7 @@ static const struct BgTemplate sBgTemplate[] = {
}
};
static const u8 gUnknown_8234694[] = { 0, 1, 2 };
static const u8 sMenuCursorYMax[] = { 0, 1, 2 };
static void CB2_MainMenu(void)
{
@@ -186,11 +215,16 @@ static bool32 MainMenuGpuInit(u8 a0)
SetMainCallback2(CB2_MainMenu);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON);
taskId = CreateTask(Task_SetWin0BldRegsAndCheckSaveFile, 0);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[8] = a0;
gTasks[taskId].tCursorPos = 0;
gTasks[taskId].tUnused8 = a0;
return FALSE;
}
/*
* The entire screen is darkened slightly except at WIN0 to indicate
* the player cursor position.
*/
static void Task_SetWin0BldRegsAndCheckSaveFile(u8 taskId)
{
if (!gPaletteFade.active)
@@ -204,45 +238,45 @@ static void Task_SetWin0BldRegsAndCheckSaveFile(u8 taskId)
SetGpuReg(REG_OFFSET_BLDY, 7);
switch (gSaveFileStatus)
{
case 1:
case SAVE_STATUS_OK:
LoadUserFrameToBg(0);
if (Flag_0x839_IsSet() == TRUE)
{
gTasks[taskId].data[0] = 2;
gTasks[taskId].tMenuType = MAIN_MENU_MYSTERYGIFT;
}
else
{
gTasks[taskId].data[0] = 1;
gTasks[taskId].tMenuType = MAIN_MENU_CONTINUE;
}
gTasks[taskId].func = Task_SetWin0BldRegsNoSaveFileCheck;
break;
case 2:
case SAVE_STATUS_INVALID:
SetStdFrame0OnBg(0);
gTasks[taskId].data[0] = 0;
gTasks[taskId].tMenuType = MAIN_MENU_NEWGAME;
PrintSaveErrorStatus(taskId, gText_SaveFileHasBeenDeleted);
break;
case 0xFF:
case SAVE_STATUS_ERROR:
SetStdFrame0OnBg(0);
gTasks[taskId].data[0] = 1;
gTasks[taskId].tMenuType = MAIN_MENU_CONTINUE;
PrintSaveErrorStatus(taskId, gText_SaveFileCorruptedPrevWillBeLoaded);
if (Flag_0x839_IsSet() == TRUE)
{
gTasks[taskId].data[0] = 2;
gTasks[taskId].tMenuType = MAIN_MENU_MYSTERYGIFT;
}
else
{
gTasks[taskId].data[0] = 1;
gTasks[taskId].tMenuType = MAIN_MENU_CONTINUE;
}
break;
case 0:
case SAVE_STATUS_EMPTY:
default:
LoadUserFrameToBg(0);
gTasks[taskId].data[0] = 0;
gTasks[taskId].tMenuType = MAIN_MENU_NEWGAME;
gTasks[taskId].func = Task_SetWin0BldRegsNoSaveFileCheck;
break;
case 4:
case SAVE_STATUS_NO_FLASH:
SetStdFrame0OnBg(0);
gTasks[taskId].data[0] = 0;
gTasks[taskId].tMenuType = MAIN_MENU_NEWGAME;
PrintSaveErrorStatus(taskId, gText_1MSubCircuitBoardNotInstalled);
break;
}
@@ -263,12 +297,12 @@ static void Task_SaveErrorStatus_RunPrinterThenWaitButton(u8 taskId)
if (!gPaletteFade.active)
{
RunTextPrinters();
if (!IsTextPrinterActive(4) && JOY_NEW(A_BUTTON))
if (!IsTextPrinterActive(MAIN_MENU_WINDOW_ERROR) && JOY_NEW(A_BUTTON))
{
ClearWindowTilemap(4);
DestroyWindowBubbleFrame(&sWindowTemplate[4]);
ClearWindowTilemap(MAIN_MENU_WINDOW_ERROR);
MainMenu_EraseWindow(&sWindowTemplate[MAIN_MENU_WINDOW_ERROR]);
LoadUserFrameToBg(0);
if (gTasks[taskId].data[0] == 0)
if (gTasks[taskId].tMenuType == MAIN_MENU_NEWGAME)
gTasks[taskId].func = Task_SetWin0BldRegsNoSaveFileCheck;
else
gTasks[taskId].func = Task_PrintMainMenuText;
@@ -284,12 +318,10 @@ static void Task_SetWin0BldRegsNoSaveFileCheck(u8 taskId)
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_WININ, 0x0001);
SetGpuReg(REG_OFFSET_WINOUT, 0x0021);
SetGpuReg(REG_OFFSET_BLDCNT,
BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ |
BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
SetGpuReg(REG_OFFSET_BLDY, 7);
if (gTasks[taskId].data[0] == 0)
if (gTasks[taskId].tMenuType == 0)
gTasks[taskId].func = Task_ExecuteMainMenuSelection;
else
gTasks[taskId].func = Task_WaitFadeAndPrintMainMenuText;
@@ -311,9 +343,7 @@ static void Task_PrintMainMenuText(u8 taskId)
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_WININ, 0x0001);
SetGpuReg(REG_OFFSET_WINOUT, 0x0021);
SetGpuReg(REG_OFFSET_BLDCNT,
BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ |
BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
SetGpuReg(REG_OFFSET_BLDY, 7);
if (gSaveBlock2Ptr->playerGender == MALE)
@@ -321,47 +351,47 @@ static void Task_PrintMainMenuText(u8 taskId)
else
pal = RGB(31, 3, 21);
LoadPalette(&pal, 0xF1, 2);
switch (gTasks[taskId].data[0])
switch (gTasks[taskId].tMenuType)
{
case 0:
case MAIN_MENU_NEWGAME:
default:
FillWindowPixelBuffer(0, PIXEL_FILL(10));
AddTextPrinterParameterized3(0, 2, 2, 2, sTextColor1, -1, gText_NewGame);
DrawBubbleBorder(&sWindowTemplate[0]);
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME_ONLY, PIXEL_FILL(10));
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME_ONLY, 2, 2, 2, sTextColor1, -1, gText_NewGame);
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME_ONLY]);
PutWindowTilemap(MAIN_MENU_WINDOW_NEWGAME_ONLY);
CopyWindowToVram(MAIN_MENU_WINDOW_NEWGAME_ONLY, 3);
break;
case 1:
FillWindowPixelBuffer(1, PIXEL_FILL(10));
FillWindowPixelBuffer(2, PIXEL_FILL(10));
AddTextPrinterParameterized3(1, 2, 2, 2, sTextColor1, -1, gText_Continue);
AddTextPrinterParameterized3(2, 2, 2, 2, sTextColor1, -1, gText_NewGame);
case MAIN_MENU_CONTINUE:
FillWindowPixelBuffer(MAIN_MENU_WINDOW_CONTINUE, PIXEL_FILL(10));
FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME, PIXEL_FILL(10));
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 2, sTextColor1, -1, gText_Continue);
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, 2, 2, 2, sTextColor1, -1, gText_NewGame);
PrintContinueStats();
DrawBubbleBorder(&sWindowTemplate[1]);
DrawBubbleBorder(&sWindowTemplate[2]);
PutWindowTilemap(1);
PutWindowTilemap(2);
CopyWindowToVram(1, 2);
CopyWindowToVram(2, 3);
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_CONTINUE]);
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME]);
PutWindowTilemap(MAIN_MENU_WINDOW_CONTINUE);
PutWindowTilemap(MAIN_MENU_WINDOW_NEWGAME);
CopyWindowToVram(MAIN_MENU_WINDOW_CONTINUE, 2);
CopyWindowToVram(MAIN_MENU_WINDOW_NEWGAME, 3);
break;
case 2:
FillWindowPixelBuffer(1, PIXEL_FILL(10));
FillWindowPixelBuffer(2, PIXEL_FILL(10));
FillWindowPixelBuffer(3, PIXEL_FILL(10));
AddTextPrinterParameterized3(1, 2, 2, 2, sTextColor1, -1, gText_Continue);
AddTextPrinterParameterized3(2, 2, 2, 2, sTextColor1, -1, gText_NewGame);
gTasks[taskId].data[10] = 1;
AddTextPrinterParameterized3(3, 2, 2, 2, sTextColor1, -1, gText_MysteryGift);
case MAIN_MENU_MYSTERYGIFT:
FillWindowPixelBuffer(MAIN_MENU_WINDOW_CONTINUE, PIXEL_FILL(10));
FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME, PIXEL_FILL(10));
FillWindowPixelBuffer(MAIN_MENU_WINDOW_MYSTERYGIFT, PIXEL_FILL(10));
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 2, sTextColor1, -1, gText_Continue);
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, 2, 2, 2, sTextColor1, -1, gText_NewGame);
gTasks[taskId].tMGErrorType = 1;
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_MYSTERYGIFT, 2, 2, 2, sTextColor1, -1, gText_MysteryGift);
PrintContinueStats();
DrawBubbleBorder(&sWindowTemplate[1]);
DrawBubbleBorder(&sWindowTemplate[2]);
DrawBubbleBorder(&sWindowTemplate[3]);
PutWindowTilemap(1);
PutWindowTilemap(2);
PutWindowTilemap(3);
CopyWindowToVram(1, 2);
CopyWindowToVram(2, 2);
CopyWindowToVram(3, 3);
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_CONTINUE]);
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME]);
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_MYSTERYGIFT]);
PutWindowTilemap(MAIN_MENU_WINDOW_CONTINUE);
PutWindowTilemap(MAIN_MENU_WINDOW_NEWGAME);
PutWindowTilemap(MAIN_MENU_WINDOW_MYSTERYGIFT);
CopyWindowToVram(MAIN_MENU_WINDOW_CONTINUE, 2);
CopyWindowToVram(MAIN_MENU_WINDOW_NEWGAME, 2);
CopyWindowToVram(MAIN_MENU_WINDOW_MYSTERYGIFT, 3);
break;
}
gTasks[taskId].func = Task_WaitDma3AndFadeIn;
@@ -380,7 +410,7 @@ static void Task_WaitDma3AndFadeIn(u8 taskId)
static void Task_UpdateVisualSelection(u8 taskId)
{
MoveWindowByMenuTypeAndCursorPos(gTasks[taskId].data[0], gTasks[taskId].data[1]);
MoveWindowByMenuTypeAndCursorPos(gTasks[taskId].tMenuType, gTasks[taskId].tCursorPos);
gTasks[taskId].func = Task_HandleMenuInput;
}
@@ -394,36 +424,36 @@ static void Task_HandleMenuInput(u8 taskId)
static void Task_ExecuteMainMenuSelection(u8 taskId)
{
s32 r0;
s32 menuAction;
if (!gPaletteFade.active)
{
switch (gTasks[taskId].data[0])
switch (gTasks[taskId].tMenuType)
{
default:
case 0:
r0 = 0;
case MAIN_MENU_NEWGAME:
menuAction = MAIN_MENU_NEWGAME;
break;
case 1:
switch (gTasks[taskId].data[1])
case MAIN_MENU_CONTINUE:
switch (gTasks[taskId].tCursorPos)
{
default:
case 0:
r0 = 1;
menuAction = MAIN_MENU_CONTINUE;
break;
case 1:
r0 = 0;
menuAction = MAIN_MENU_NEWGAME;
break;
}
break;
case 2:
switch (gTasks[taskId].data[1])
case MAIN_MENU_MYSTERYGIFT:
switch (gTasks[taskId].tCursorPos)
{
default:
case 0:
r0 = 1;
menuAction = MAIN_MENU_CONTINUE;
break;
case 1:
r0 = 0;
menuAction = MAIN_MENU_NEWGAME;
break;
case 2:
if (!IsWirelessAdapterConnected())
@@ -435,29 +465,29 @@ static void Task_ExecuteMainMenuSelection(u8 taskId)
}
else
{
r0 = 2;
menuAction = MAIN_MENU_MYSTERYGIFT;
}
break;
}
break;
}
switch (r0)
switch (menuAction)
{
default:
case 0:
case MAIN_MENU_NEWGAME:
gUnknown_2031DE0 = 0;
FreeAllWindowBuffers();
DestroyTask(taskId);
StartNewGameScene();
break;
case 1:
case MAIN_MENU_CONTINUE:
gPlttBufferUnfaded[0] = RGB_BLACK;
gPlttBufferFaded[0] = RGB_BLACK;
gUnknown_2031DE0 = 0;
FreeAllWindowBuffers();
TrySetUpQuestLogScenes_ElseContinueFromSave(taskId);
break;
case 2:
case MAIN_MENU_MYSTERYGIFT:
SetMainCallback2(c2_mystery_gift);
HelpSystem_Disable();
FreeAllWindowBuffers();
@@ -469,24 +499,24 @@ static void Task_ExecuteMainMenuSelection(u8 taskId)
static void Task_MysteryGiftError(u8 taskId)
{
switch (gTasks[taskId].data[9])
switch (gTasks[taskId].tMGErrorMsgState)
{
case 0:
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
if (gTasks[taskId].data[10] == 1)
if (gTasks[taskId].tMGErrorType == 1)
PrintMessageOnWindow4(gText_WirelessAdapterIsNotConnected);
else
PrintMessageOnWindow4(gText_MysteryGiftCantBeUsedWhileWirelessAdapterIsAttached);
gTasks[taskId].data[9]++;
gTasks[taskId].tMGErrorMsgState++;
break;
case 1:
if (!gPaletteFade.active)
gTasks[taskId].data[9]++;
gTasks[taskId].tMGErrorMsgState++;
break;
case 2:
RunTextPrinters();
if (!IsTextPrinterActive(4))
gTasks[taskId].data[9]++;
gTasks[taskId].tMGErrorMsgState++;
break;
case 3:
if (JOY_NEW(A_BUTTON | B_BUTTON))
@@ -510,36 +540,36 @@ static void Task_ReturnToTileScreen(u8 taskId)
static void MoveWindowByMenuTypeAndCursorPos(u8 menuType, u8 cursorPos)
{
u16 win0v1, win0v2;
u16 win0vTop, win0vBot;
SetGpuReg(REG_OFFSET_WIN0H, 0x12DE);
switch (menuType)
{
default:
case 0:
win0v1 = 0x00;
win0v2 = 0x20;
case MAIN_MENU_NEWGAME:
win0vTop = 0x00 << 8;
win0vBot = 0x20;
break;
case 1:
case 2:
case MAIN_MENU_CONTINUE:
case MAIN_MENU_MYSTERYGIFT:
switch (cursorPos)
{
default:
case 0:
win0v1 = 0x00;
win0v2 = 0x60;
case 0: // CONTINUE
win0vTop = 0x00 << 8;
win0vBot = 0x60;
break;
case 1:
win0v1 = 0x60 << 8;
win0v2 = 0x80;
case 1: // NEW GAME
win0vTop = 0x60 << 8;
win0vBot = 0x80;
break;
case 2:
win0v1 = 0x80 << 8;
win0v2 = 0xA0;
case 2: // MYSTERY GIFT
win0vTop = 0x80 << 8;
win0vBot = 0xA0;
break;
}
break;
}
SetGpuReg(REG_OFFSET_WIN0V, (win0v1 + (2 << 8)) | (win0v2 - 2));
SetGpuReg(REG_OFFSET_WIN0V, (win0vTop + (2 << 8)) | (win0vBot - 2));
}
static bool8 HandleMenuInput(u8 taskId)
@@ -559,14 +589,14 @@ static bool8 HandleMenuInput(u8 taskId)
SetGpuReg(REG_OFFSET_WIN0V, 0xA0);
gTasks[taskId].func = Task_ReturnToTileScreen;
}
else if (JOY_NEW(DPAD_UP) && gTasks[taskId].data[1] > 0)
else if (JOY_NEW(DPAD_UP) && gTasks[taskId].tCursorPos > 0)
{
gTasks[taskId].data[1]--;
gTasks[taskId].tCursorPos--;
return TRUE;
}
else if (JOY_NEW(DPAD_DOWN) && gTasks[taskId].data[1] < gUnknown_8234694[gTasks[taskId].data[0]])
else if (JOY_NEW(DPAD_DOWN) && gTasks[taskId].tCursorPos < sMenuCursorYMax[gTasks[taskId].tMenuType])
{
gTasks[taskId].data[1]++;
gTasks[taskId].tCursorPos++;
return TRUE;
}
@@ -575,11 +605,11 @@ static bool8 HandleMenuInput(u8 taskId)
static void PrintMessageOnWindow4(const u8 *str)
{
FillWindowPixelBuffer(4, PIXEL_FILL(10));
DrawBubbleBorder(&sWindowTemplate[4]);
AddTextPrinterParameterized3(4, 2, 0, 2, sTextColor1, 2, str);
PutWindowTilemap(4);
CopyWindowToVram(4, 2);
FillWindowPixelBuffer(MAIN_MENU_WINDOW_ERROR, PIXEL_FILL(10));
MainMenu_DrawWindow(&sWindowTemplate[4]);
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_ERROR, 2, 0, 2, sTextColor1, 2, str);
PutWindowTilemap(MAIN_MENU_WINDOW_ERROR);
CopyWindowToVram(MAIN_MENU_WINDOW_ERROR, 2);
SetGpuReg(REG_OFFSET_WIN0H, 0x13DD);
SetGpuReg(REG_OFFSET_WIN0V, 0x739D);
}
@@ -597,12 +627,12 @@ static void PrintPlayerName(void)
s32 i;
u8 name[OT_NAME_LENGTH + 1];
u8 *ptr;
AddTextPrinterParameterized3(1, 2, 2, 18, sTextColor2, -1, gText_Player);
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 18, sTextColor2, -1, gText_Player);
ptr = name;
for (i = 0; i < OT_NAME_LENGTH; i++)
*ptr++ = gSaveBlock2Ptr->playerName[i];
*ptr = EOS;
AddTextPrinterParameterized3(1, 2, 62, 18, sTextColor2, -1, name);
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 62, 18, sTextColor2, -1, name);
}
static void PrintPlayTime(void)
@@ -610,11 +640,11 @@ static void PrintPlayTime(void)
u8 strbuf[30];
u8 *ptr;
AddTextPrinterParameterized3(1, 2, 2, 34, sTextColor2, -1, gText_Time);
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 34, sTextColor2, -1, gText_Time);
ptr = ConvertIntToDecimalStringN(strbuf, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
*ptr++ = CHAR_COLON;
ConvertIntToDecimalStringN(ptr, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
AddTextPrinterParameterized3(1, 2, 62, 34, sTextColor2, -1, strbuf);
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 62, 34, sTextColor2, -1, strbuf);
}
static void PrintDexCount(void)
@@ -628,10 +658,10 @@ static void PrintDexCount(void)
dexcount = GetNationalPokedexCount(FLAG_GET_CAUGHT);
else
dexcount = GetKantoPokedexCount(FLAG_GET_CAUGHT);
AddTextPrinterParameterized3(1, 2, 2, 50, sTextColor2, -1, gText_Pokedex);
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 50, sTextColor2, -1, gText_Pokedex);
ptr = ConvertIntToDecimalStringN(strbuf, dexcount, STR_CONV_MODE_LEFT_ALIGN, 3);
StringAppend(ptr, gTextJPDummy_Hiki);
AddTextPrinterParameterized3(1, 2, 62, 50, sTextColor2, -1, strbuf);
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 62, 50, sTextColor2, -1, strbuf);
}
}
@@ -646,40 +676,120 @@ static void PrintBadgeCount(void)
if (FlagGet(flagId))
nbadges++;
}
AddTextPrinterParameterized3(1, 2, 2, 66, sTextColor2, -1, gText_Badges);
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 66, sTextColor2, -1, gText_Badges);
ptr = ConvertIntToDecimalStringN(strbuf, nbadges, STR_CONV_MODE_LEADING_ZEROS, 1);
StringAppend(ptr, gTextJPDummy_Ko);
AddTextPrinterParameterized3(1, 2, 62, 66, sTextColor2, -1, strbuf);
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 62, 66, sTextColor2, -1, strbuf);
}
static void LoadUserFrameToBg(u8 bgId)
{
LoadBgTiles(bgId, GetUserFrameGraphicsInfo(gSaveBlock2Ptr->optionsWindowFrameType)->tiles, 0x120, 0x1B1);
LoadPalette(GetUserFrameGraphicsInfo(gSaveBlock2Ptr->optionsWindowFrameType)->palette, 0x20, 0x20);
DestroyWindowBubbleFrame(&sWindowTemplate[4]);
MainMenu_EraseWindow(&sWindowTemplate[MAIN_MENU_WINDOW_ERROR]);
}
static void SetStdFrame0OnBg(u8 bgId)
{
TextWindow_SetStdFrame0_WithPal(0, 0x1B1, 0x20);
DestroyWindowBubbleFrame(&sWindowTemplate[4]);
TextWindow_SetStdFrame0_WithPal(MAIN_MENU_WINDOW_NEWGAME_ONLY, 0x1B1, 0x20);
MainMenu_EraseWindow(&sWindowTemplate[MAIN_MENU_WINDOW_ERROR]);
}
static void DrawBubbleBorder(const struct WindowTemplate * windowTemplate)
static void MainMenu_DrawWindow(const struct WindowTemplate * windowTemplate)
{
FillBgTilemapBufferRect(windowTemplate->bg, 0x1B1, windowTemplate->tilemapLeft - 1, windowTemplate->tilemapTop - 1, 1, 1, 2);
FillBgTilemapBufferRect(windowTemplate->bg, 0x1B2, windowTemplate->tilemapLeft, windowTemplate->tilemapTop - 1, windowTemplate->width, windowTemplate->height, 2);
FillBgTilemapBufferRect(windowTemplate->bg, 0x1B3, windowTemplate->tilemapLeft + windowTemplate->width, windowTemplate->tilemapTop - 1, 1, 1, 2);
FillBgTilemapBufferRect(windowTemplate->bg, 0x1B4, windowTemplate->tilemapLeft - 1, windowTemplate->tilemapTop, 1, windowTemplate->height, 2);
FillBgTilemapBufferRect(windowTemplate->bg, 0x1B6, windowTemplate->tilemapLeft + windowTemplate->width, windowTemplate->tilemapTop, 1, windowTemplate->height, 2);
FillBgTilemapBufferRect(windowTemplate->bg, 0x1B7, windowTemplate->tilemapLeft - 1, windowTemplate->tilemapTop + windowTemplate->height, 1, 1, 2);
FillBgTilemapBufferRect(windowTemplate->bg, 0x1B8, windowTemplate->tilemapLeft, windowTemplate->tilemapTop + windowTemplate->height, windowTemplate->width, 1, 2);
FillBgTilemapBufferRect(windowTemplate->bg, 0x1B9, windowTemplate->tilemapLeft + windowTemplate->width, windowTemplate->tilemapTop + windowTemplate->height, 1, 1, 2);
FillBgTilemapBufferRect(
windowTemplate->bg,
0x1B1,
windowTemplate->tilemapLeft - 1,
windowTemplate->tilemapTop - 1,
1,
1,
2
);
FillBgTilemapBufferRect(
windowTemplate->bg,
0x1B2,
windowTemplate->tilemapLeft,
windowTemplate->tilemapTop - 1,
windowTemplate->width,
windowTemplate->height,
2
);
FillBgTilemapBufferRect(
windowTemplate->bg,
0x1B3,
windowTemplate->tilemapLeft +
windowTemplate->width,
windowTemplate->tilemapTop - 1,
1,
1,
2
);
FillBgTilemapBufferRect(
windowTemplate->bg,
0x1B4,
windowTemplate->tilemapLeft - 1,
windowTemplate->tilemapTop,
1,
windowTemplate->height,
2
);
FillBgTilemapBufferRect(
windowTemplate->bg,
0x1B6,
windowTemplate->tilemapLeft +
windowTemplate->width,
windowTemplate->tilemapTop,
1,
windowTemplate->height,
2
);
FillBgTilemapBufferRect(
windowTemplate->bg,
0x1B7,
windowTemplate->tilemapLeft - 1,
windowTemplate->tilemapTop +
windowTemplate->height,
1,
1,
2
);
FillBgTilemapBufferRect(
windowTemplate->bg,
0x1B8,
windowTemplate->tilemapLeft,
windowTemplate->tilemapTop +
windowTemplate->height,
windowTemplate->width,
1,
2
);
FillBgTilemapBufferRect(
windowTemplate->bg,
0x1B9,
windowTemplate->tilemapLeft +
windowTemplate->width,
windowTemplate->tilemapTop +
windowTemplate->height,
1,
1,
2
);
CopyBgTilemapBufferToVram(windowTemplate->bg);
}
static void DestroyWindowBubbleFrame(const struct WindowTemplate * windowTemplate)
static void MainMenu_EraseWindow(const struct WindowTemplate * windowTemplate)
{
FillBgTilemapBufferRect(windowTemplate->bg, 0x000, windowTemplate->tilemapLeft - 1, windowTemplate->tilemapTop - 1, windowTemplate->tilemapLeft + windowTemplate->width + 1, windowTemplate->tilemapTop + windowTemplate->height + 1, 2);
FillBgTilemapBufferRect(
windowTemplate->bg,
0x000,
windowTemplate->tilemapLeft - 1,
windowTemplate->tilemapTop - 1,
windowTemplate->tilemapLeft +
windowTemplate->width + 1,
windowTemplate->tilemapTop +
windowTemplate->height + 1,
2
);
CopyBgTilemapBufferToVram(windowTemplate->bg);
}