diff options
Diffstat (limited to 'src/option_menu.c')
-rw-r--r-- | src/option_menu.c | 423 |
1 files changed, 198 insertions, 225 deletions
diff --git a/src/option_menu.c b/src/option_menu.c index 8450633f5..fb4844bec 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -29,16 +29,41 @@ enum MENUITEM_BUTTONMODE, MENUITEM_FRAMETYPE, MENUITEM_CANCEL, - MENUITEM_COUNT, + MENUITEM_COUNT }; + // Window Ids enum { WIN_TEXT_OPTION, - WIN_OPTIONS, + WIN_OPTIONS }; -static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8 +// RAM sumbols +EWRAM_DATA struct OptionMenu *sOptionMenuPtr = NULL; + +//Function Declarataions +static void CB2_InitOptionMenu(void); +static void VBlankCB_OptionMenu(void); +static void OptionMenu_InitCallbacks(void); +static void OptionMenu_SetVBlankCallback(void); +static void CB2_OptionMenu(void); +static void SetOptionMenuTask(void); +static void InitOptionMenuBg(void); +static void OptionMenu_PickSwitchCancel(void); +static void OptionMenu_ResetSpriteData(void); +static bool8 LoadOptionMenuPalette(void); +static void Task_OptionMenu(u8 taskId); +static u8 OptionMenu_ProcessInput(void); +static void BufferOptionMenuString(u8 selection); +static void CloseAndSaveOptionMenu(u8 taskId); +static void PrintOptionMenuHeader(void); +static void sub_8088C0C(void); +static void LoadOptionMenuItemNames(void); +static void sub_8088DE0(u16 selection); + +// Data Definitions +static const struct WindowTemplate sOptionMenuWinTemplates[] = { { .bg = 1, @@ -47,7 +72,7 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8 .width = 26, .height = 2, .paletteNum = 1, - .baseBlock = 2, + .baseBlock = 2 }, { .bg = 0, @@ -56,7 +81,7 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8 .width = 26, .height = 12, .paletteNum = 1, - .baseBlock = 0x36, + .baseBlock = 0x36 }, { .bg = 2, @@ -65,11 +90,12 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8 .width = 30, .height = 2, .paletteNum = 0xF, - .baseBlock = 0x16e, + .baseBlock = 0x16e }, - DUMMY_WIN_TEMPLATE, + DUMMY_WIN_TEMPLATE }; -static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8 + +static const struct BgTemplate sOptionMenuBgTemplates[] = { { .bg = 1, @@ -78,7 +104,7 @@ static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8 .screenSize = 0, .paletteMode = 0, .priority = 0, - .baseTile = 0, + .baseTile = 0 }, { .bg = 0, @@ -87,7 +113,7 @@ static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8 .screenSize = 0, .paletteMode = 0, .priority = 1, - .baseTile = 0, + .baseTile = 0 }, { .bg = 2, @@ -96,12 +122,14 @@ static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8 .screenSize = 0, .paletteMode = 0, .priority = 2, - .baseTile = 0, + .baseTile = 0 }, }; -static const u16 sOptionsMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4 -static const u16 sOptionsMenuItemCounts[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //3CC304 -static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314 + +static const u16 sOptionMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); +static const u16 sOptionMenuItemCounts[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; + +static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = { [MENUITEM_TEXTSPEED] = gText_TextSpeed, [MENUITEM_BATTLESCENE] = gText_BattleScene, @@ -111,60 +139,44 @@ static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314 [MENUITEM_FRAMETYPE] = gText_Frame, [MENUITEM_CANCEL] = gText_OptionMenuCancel, }; -static const u8 *const sTextSpeedOptions[] = //3CC330 + +static const u8 *const sTextSpeedOptions[] = { gText_TextSpeedSlow, gText_TextSpeedMid, gText_TextSpeedFast }; -static const u8 *const sBattleSceneOptions[] = //3CC33C + +static const u8 *const sBattleSceneOptions[] = { gText_BattleSceneOn, gText_BattleSceneOff }; -static const u8 *const sBattleStyleOptions[] = //3CC344 + +static const u8 *const sBattleStyleOptions[] = { gText_BattleStyleShift, gText_BattleStyleSet }; -static const u8 *const sSoundOptions[] = //3CC34C +static const u8 *const sSoundOptions[] = { gText_SoundMono, gText_SoundStereo }; -static const u8 *const sButtonTypeOptions[] = //3CC354 + +static const u8 *const sButtonTypeOptions[] = { gText_ButtonTypeNormal, - gText_ButtonTypeLEqualsA, - gText_ButtonTypeLR, + gText_ButtonTypeLR, + gText_ButtonTypeLEqualsA }; -static const u8 sOptionsMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; //3CC360 -static const u8 sOptionsMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}; //3CC363 - - -//This file's functions -static void sub_808835C(void); -static void sub_8088374(void); -static void sub_8088430(void); -static void sub_8088444(void); -static void sub_8088454(void); -static void sub_8088514(void); -static void sub_8088530(void); -static void sub_8088680(void); -static void sub_80886D4(void); -static bool8 sub_80886F0(void); -static void sub_8088780(u8 taskId); -static u8 sub_80888C0(void); -static void sub_80889A8(u8 selection); -static void sub_8088B00(u8 taskId); -static void sub_8088BD0(void); -static void sub_8088C0C(void); -static void sub_8088D8C(void); -static void sub_8088DE0(u16 selection); -struct OptionsMenu +static const u8 sOptionMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; +static const u8 sOptionMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}; + +struct OptionMenu { - /*0x00*/ u16 option[MENUITEM_COUNT]; //0,2,4,6,8,a,c + /*0x00*/ u16 option[MENUITEM_COUNT]; /*0x0E*/ u16 unkE; /*0x10*/ u8 state3; /*0x11*/ u8 state; @@ -172,12 +184,7 @@ struct OptionsMenu /*0x13*/ u8 unk13; }; -EWRAM_DATA struct OptionsMenu *sOptionsMenuPtr = {0}; - - - -//CB2_InitOptionsMenu -static void sub_808835C(void) +static void CB2_InitOptionMenu(void) { RunTasks(); AnimateSprites(); @@ -185,123 +192,110 @@ static void sub_808835C(void) UpdatePaletteFade(); } - -//VBlankCB_OptionsMenu -static void sub_8088374(void) +static void VBlankCB_OptionMenu(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } - -//sub_8088388 void CB2_OptionsMenuFromStartMenu(void) { u8 i; if (gMain.savedCallback == NULL) gMain.savedCallback = CB2_ReturnToStartMenu; - sOptionsMenuPtr = AllocZeroed(sizeof(struct OptionsMenu)); - sOptionsMenuPtr->state3 = 0; - sOptionsMenuPtr->state2 = 0; - sOptionsMenuPtr->state = 0; - sOptionsMenuPtr->unkE = 0; - sOptionsMenuPtr->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed; - sOptionsMenuPtr->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff; - sOptionsMenuPtr->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle; - sOptionsMenuPtr->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound; - sOptionsMenuPtr->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; - sOptionsMenuPtr->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; + sOptionMenuPtr = AllocZeroed(sizeof(struct OptionMenu)); + sOptionMenuPtr->state3 = 0; + sOptionMenuPtr->state2 = 0; + sOptionMenuPtr->state = 0; + sOptionMenuPtr->unkE = 0; + sOptionMenuPtr->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed; + sOptionMenuPtr->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff; + sOptionMenuPtr->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle; + sOptionMenuPtr->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound; + sOptionMenuPtr->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; + sOptionMenuPtr->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; for (i = 0; i < MENUITEM_COUNT-1; i++) { - if (sOptionsMenuPtr->option[i] > (sOptionsMenuItemCounts[i])-1) - sOptionsMenuPtr->option[i] = 0; + if (sOptionMenuPtr->option[i] > (sOptionMenuItemCounts[i])-1) + sOptionMenuPtr->option[i] = 0; } HelpSystem_SetSomeVariable2(0xD); - SetMainCallback2(sub_8088454); + SetMainCallback2(CB2_OptionMenu); } - -//sub_8088430 -static void sub_8088430(void) +static void OptionMenu_InitCallbacks(void) { SetVBlankCallback(0); SetHBlankCallback(0); } - -//sub_8088444 -static void sub_8088444(void) +static void OptionMenu_SetVBlankCallback(void) { - SetVBlankCallback(sub_8088374); + SetVBlankCallback(VBlankCB_OptionMenu); } -//sub_8088454 -static void sub_8088454(void) +static void CB2_OptionMenu(void) { u8 i, state; - state = sOptionsMenuPtr->state; + state = sOptionMenuPtr->state; switch (state) { case 0: - sub_8088430(); + OptionMenu_InitCallbacks(); break; case 1: - sub_8088530(); + InitOptionMenuBg(); break; case 2: - sub_80886D4(); + OptionMenu_ResetSpriteData(); break; case 3: - if (sub_80886F0() != TRUE) //silly matching quirk + if (LoadOptionMenuPalette() != TRUE) return; break; case 4: - sub_8088BD0(); + PrintOptionMenuHeader(); break; case 5: sub_8088C0C(); break; case 6: - sub_8088D8C(); + LoadOptionMenuItemNames(); break; case 7: for (i = 0; i < MENUITEM_COUNT; i++) - sub_80889A8(i); + BufferOptionMenuString(i); break; case 8: - sub_8088DE0(sOptionsMenuPtr->unkE); + sub_8088DE0(sOptionMenuPtr->unkE); break; case 9: - sub_8088680(); + OptionMenu_PickSwitchCancel(); break; default: - sub_8088514(); + SetOptionMenuTask(); } - sOptionsMenuPtr->state++; + sOptionMenuPtr->state++; } -//sub_8088514 -static void sub_8088514(void) +static void SetOptionMenuTask(void) { - CreateTask(sub_8088780, 0); - SetMainCallback2(sub_808835C); + CreateTask(Task_OptionMenu, 0); + SetMainCallback2(CB2_InitOptionMenu); } - -//sub_8088530 -static void sub_8088530(void) +static void InitOptionMenuBg(void) { void * dest = (void *) VRAM; - DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000); - + DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000); DmaClear32(3, (void *)OAM, OAM_SIZE); DmaClear16(3, (void *)PLTT, PLTT_SIZE); - SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sOptionMenuBgTemplates, ARRAY_COUNT(sOptionMenuBgTemplates)); + InitBgsFromTemplates(0, sOptionMenuBgTemplates, NELEMS(sOptionMenuBgTemplates)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -312,30 +306,27 @@ static void sub_8088530(void) ChangeBgY(3, 0, 0); InitWindows(sOptionMenuWinTemplates); DeactivateAllTextPrinters(); - SetGpuReg(REG_OFFSET_BLDCNT, 0xC1); - SetGpuReg(REG_OFFSET_BLDY, 2); - SetGpuReg(REG_OFFSET_WININ, 1); - SetGpuReg(REG_OFFSET_WINOUT, 0x27); - SetGpuReg(0, 0x3040); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_EFFECT_LIGHTEN); + SetGpuReg(REG_OFFSET_BLDY, BLDCNT_TGT1_BG1); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON); ShowBg(0); ShowBg(1); ShowBg(2); }; -//sub_8088680 -static void sub_8088680(void) +static void OptionMenu_PickSwitchCancel(void) { s32 x; x = 0xE4 - GetStringWidth(0, gText_PickSwitchCancel, 0); - FillWindowPixelBuffer(2, 0xFF); - AddTextPrinterParameterized3(2, 0, x, 0, sOptionsMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel); + FillWindowPixelBuffer(2, PIXEL_FILL(15)); + AddTextPrinterParameterized3(2, 0, x, 0, sOptionMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel); PutWindowTilemap(2); CopyWindowToVram(2, 3); } - -//sub_80886D4 -static void sub_80886D4(void) +static void OptionMenu_ResetSpriteData(void) { ResetSpriteData(); ResetPaletteFade(); @@ -344,19 +335,18 @@ static void sub_80886D4(void) ScanlineEffect_Stop(); } -//sub_80886F0 -static bool8 sub_80886F0(void) +static bool8 LoadOptionMenuPalette(void) { - switch (sOptionsMenuPtr->state2) + switch (sOptionMenuPtr->state2) { case 0: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); break; case 1: - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); + LoadPalette(GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); break; case 2: - LoadPalette(sOptionsMenuPalette, 0x10, 0x20); + LoadPalette(sOptionMenuPalette, 0x10, 0x20); LoadPalette(stdpal_get(2), 0xF0, 0x20); break; case 3: @@ -365,60 +355,58 @@ static bool8 sub_80886F0(void) default: return TRUE; } - sOptionsMenuPtr->state2++; + sOptionMenuPtr->state2++; return FALSE; } - - // I could not get this function to match. GOTO statements weren't even compiling correctly. #ifdef NONMATCHING -static void sub_8088780(u8 taskId) +static void Task_OptionMenu(u8 taskId) { u8 v2, v5; - struct OptionsMenu v4; + struct OptionMenu v4; - switch (sOptionsMenuPtr->state3) + switch (sOptionMenuPtr->state3) { case 0: - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - sub_8088444(); - sOptionsMenuPtr->state3++; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + OptionMenu_SetVBlankCallback(); + sOptionMenuPtr->state3++; break; case 2: if ((bool32) sub_80BF72C() == TRUE) //cast to bool32 to remove the lsl/lsr 0x18 after func call return; - switch (sub_80888C0()) + switch (OptionMenu_ProcessInput()) { case 1: - sOptionsMenuPtr->state3++; + sOptionMenuPtr->state3++; break; case 2: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); - sub_80889A8(sOptionsMenuPtr->unkE); - sOptionsMenuPtr->state3++; + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); + LoadPalette(GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); + BufferOptionMenuString(sOptionMenuPtr->unkE); + sOptionMenuPtr->state3++; break; case 3: - sub_8088DE0(sOptionsMenuPtr->unkE); + sub_8088DE0(sOptionMenuPtr->unkE); break; case 4: - sub_80889A8(sOptionsMenuPtr->unkE); - sOptionsMenuPtr->state3++; + BufferOptionMenuString(sOptionMenuPtr->unkE); + sOptionMenuPtr->state3++; break; default: return; } case 3: - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - sOptionsMenuPtr->state3++; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + sOptionMenuPtr->state3++; case 1: case 4: if (gPaletteFade.active) return; - sOptionsMenuPtr->state3++; + sOptionMenuPtr->state3++; case 5: - sub_8088B00(taskId); + CloseAndSaveOptionMenu(taskId); break; default: return; @@ -426,13 +414,13 @@ static void sub_8088780(u8 taskId) } #else NAKED -static void sub_8088780(u8 taskId) +static void Task_OptionMenu(u8 taskId) { asm_unified("\tpush {r4,lr}\n" "\tsub sp, 0x4\n" "\tlsls r0, 24\n" "\tlsrs r2, r0, 24\n" - "\tldr r1, _080887A0 @ =sOptionsMenuPtr\n" + "\tldr r1, _080887A0 @ =sOptionMenuPtr\n" "\tldr r0, [r1]\n" "\tldrb r0, [r0, 0x10]\n" "\tadds r3, r1, 0\n" @@ -446,7 +434,7 @@ static void sub_8088780(u8 taskId) "\tldr r0, [r0]\n" "\tmov pc, r0\n" "\t.align 2, 0\n" - "_080887A0: .4byte sOptionsMenuPtr\n" + "_080887A0: .4byte sOptionMenuPtr\n" "_080887A4: .4byte _080887A8\n" "\t.align 2, 0\n" "_080887A8:\n" @@ -464,17 +452,17 @@ static void sub_8088780(u8 taskId) "\tmovs r2, 0x10\n" "\tmovs r3, 0\n" "\tbl BeginNormalPaletteFade\n" - "\tbl sub_8088444\n" - "\tldr r0, _080887DC @ =sOptionsMenuPtr\n" + "\tbl OptionMenu_SetVBlankCallback\n" + "\tldr r0, _080887DC @ =sOptionMenuPtr\n" "\tldr r1, [r0]\n" "\tb _080888A2\n" "\t.align 2, 0\n" - "_080887DC: .4byte sOptionsMenuPtr\n" + "_080887DC: .4byte sOptionMenuPtr\n" "_080887E0:\n" "\tbl sub_80BF72C\n" "\tcmp r0, 0x1\n" "\tbeq _080888B6\n" - "\tbl sub_80888C0\n" + "\tbl OptionMenu_ProcessInput\n" "\tlsls r0, 24\n" "\tlsrs r0, 24\n" "\tcmp r0, 0x4\n" @@ -494,13 +482,13 @@ static void sub_8088780(u8 taskId) "\t.4byte _08088858\n" "\t.4byte _08088868\n" "_08088818:\n" - "\tldr r0, _08088820 @ =sOptionsMenuPtr\n" + "\tldr r0, _08088820 @ =sOptionMenuPtr\n" "\tldr r1, [r0]\n" "\tb _080888A2\n" "\t.align 2, 0\n" - "_08088820: .4byte sOptionsMenuPtr\n" + "_08088820: .4byte sOptionMenuPtr\n" "_08088824:\n" - "\tldr r4, _08088854 @ =sOptionsMenuPtr\n" + "\tldr r4, _08088854 @ =sOptionMenuPtr\n" "\tldr r0, [r4]\n" "\tldrb r0, [r0, 0xA]\n" "\tbl GetUserFrameGraphicsInfo\n" @@ -521,24 +509,24 @@ static void sub_8088780(u8 taskId) "\tldr r0, [r4]\n" "\tb _0808886C\n" "\t.align 2, 0\n" - "_08088854: .4byte sOptionsMenuPtr\n" + "_08088854: .4byte sOptionMenuPtr\n" "_08088858:\n" - "\tldr r0, _08088864 @ =sOptionsMenuPtr\n" + "\tldr r0, _08088864 @ =sOptionMenuPtr\n" "\tldr r0, [r0]\n" "\tldrh r0, [r0, 0xE]\n" "\tbl sub_8088DE0\n" "\tb _080888B6\n" "\t.align 2, 0\n" - "_08088864: .4byte sOptionsMenuPtr\n" + "_08088864: .4byte sOptionMenuPtr\n" "_08088868:\n" - "\tldr r0, _08088874 @ =sOptionsMenuPtr\n" + "\tldr r0, _08088874 @ =sOptionMenuPtr\n" "\tldr r0, [r0]\n" "_0808886C:\n" "\tldrb r0, [r0, 0xE]\n" - "\tbl sub_80889A8\n" + "\tbl BufferOptionMenuString\n" "\tb _080888B6\n" "\t.align 2, 0\n" - "_08088874: .4byte sOptionsMenuPtr\n" + "_08088874: .4byte sOptionMenuPtr\n" "_08088878:\n" "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" @@ -547,11 +535,11 @@ static void sub_8088780(u8 taskId) "\tmovs r2, 0\n" "\tmovs r3, 0x10\n" "\tbl BeginNormalPaletteFade\n" - "\tldr r0, _08088890 @ =sOptionsMenuPtr\n" + "\tldr r0, _08088890 @ =sOptionMenuPtr\n" "\tldr r1, [r0]\n" "\tb _080888A2\n" "\t.align 2, 0\n" - "_08088890: .4byte sOptionsMenuPtr\n" + "_08088890: .4byte sOptionMenuPtr\n" "_08088894:\n" "\tldr r0, _080888AC @ =gPaletteFade\n" "\tldrb r1, [r0, 0x7]\n" @@ -569,7 +557,7 @@ static void sub_8088780(u8 taskId) "_080888AC: .4byte gPaletteFade\n" "_080888B0:\n" "\tadds r0, r2, 0\n" - "\tbl sub_8088B00\n" + "\tbl CloseAndSaveOptionMenu\n" "_080888B6:\n" "\tadd sp, 0x4\n" "\tpop {r4}\n" @@ -578,53 +566,52 @@ static void sub_8088780(u8 taskId) } #endif -//OptionsMenu_ProcessInput -static u8 sub_80888C0(void) +static u8 OptionMenu_ProcessInput(void) { u16 current; u16* curr; - if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + if (JOY_REPT(DPAD_RIGHT)) { - current = sOptionsMenuPtr->option[(sOptionsMenuPtr->unkE)]; - if (current == (sOptionsMenuItemCounts[sOptionsMenuPtr->unkE] - 1)) - sOptionsMenuPtr->option[sOptionsMenuPtr->unkE] = 0; + current = sOptionMenuPtr->option[(sOptionMenuPtr->unkE)]; + if (current == (sOptionMenuItemCounts[sOptionMenuPtr->unkE] - 1)) + sOptionMenuPtr->option[sOptionMenuPtr->unkE] = 0; else - sOptionsMenuPtr->option[sOptionsMenuPtr->unkE] = current + 1; - if (sOptionsMenuPtr->unkE == MENUITEM_FRAMETYPE) + sOptionMenuPtr->option[sOptionMenuPtr->unkE] = current + 1; + if (sOptionMenuPtr->unkE == MENUITEM_FRAMETYPE) return 2; else return 4; } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + else if (JOY_REPT(DPAD_LEFT)) { - curr = &sOptionsMenuPtr->option[sOptionsMenuPtr->unkE]; + curr = &sOptionMenuPtr->option[sOptionMenuPtr->unkE]; if (*curr == 0) - *curr = sOptionsMenuItemCounts[sOptionsMenuPtr->unkE] - 1; + *curr = sOptionMenuItemCounts[sOptionMenuPtr->unkE] - 1; else - --*(curr); + --*curr; - if (sOptionsMenuPtr->unkE == MENUITEM_FRAMETYPE) + if (sOptionMenuPtr->unkE == MENUITEM_FRAMETYPE) return 2; else return 4; } - else if (gMain.newAndRepeatedKeys & DPAD_UP) + else if (JOY_REPT(DPAD_UP)) { - if (sOptionsMenuPtr->unkE == MENUITEM_TEXTSPEED) - sOptionsMenuPtr->unkE = MENUITEM_CANCEL; + if (sOptionMenuPtr->unkE == MENUITEM_TEXTSPEED) + sOptionMenuPtr->unkE = MENUITEM_CANCEL; else - sOptionsMenuPtr->unkE = sOptionsMenuPtr->unkE - 1; + sOptionMenuPtr->unkE = sOptionMenuPtr->unkE - 1; return 3; } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPT(DPAD_DOWN)) { - if (sOptionsMenuPtr->unkE == MENUITEM_CANCEL) - sOptionsMenuPtr->unkE = MENUITEM_TEXTSPEED; + if (sOptionMenuPtr->unkE == MENUITEM_CANCEL) + sOptionMenuPtr->unkE = MENUITEM_TEXTSPEED; else - sOptionsMenuPtr->unkE = sOptionsMenuPtr->unkE + 1; + sOptionMenuPtr->unkE = sOptionMenuPtr->unkE + 1; return 3; } - else if ((gMain.newKeys & B_BUTTON) || (gMain.newKeys & A_BUTTON)) + else if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON)) { return 1; } @@ -634,17 +621,15 @@ static u8 sub_80888C0(void) } } - -//sub_80889A8 #ifdef NONMATCHING // could not get it to match perfectly, no idea how they put so many vars on the stack -static void sub_80889A8(u8 selection) +static void BufferOptionMenuString(u8 selection) { - u8* dst; + u8 dst[3]; u8* str; u8* v8; u8 x, y; - memcpy(&dst, sOptionsMenuTextColor, 3); + memcpy(&dst, sOptionMenuTextColor, 3); y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; x = 0x82; FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); @@ -668,7 +653,7 @@ static void sub_80889A8(u8 selection) break; case MENUITEM_FRAMETYPE: StringCopy(str, gText_FrameType); - ConvertIntToDecimalStringN(v8, sOptionsMenuPtr->option[2*selection] + 1, 1, 2); + ConvertIntToDecimalStringN(v8, sOptionMenuPtr->option[2 * selection] + 1, 1, 2); StringAppendN(str, v8, 3); AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str); break; @@ -680,7 +665,7 @@ static void sub_80889A8(u8 selection) } #else NAKED -static void sub_80889A8(u8 selection) +static void BufferOptionMenuString(u8 selection) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r8\n" @@ -689,7 +674,7 @@ static void sub_80889A8(u8 selection) "\tlsls r0, 24\n" "\tlsrs r5, r0, 24\n" "\tadd r4, sp, 0x2C\n" - "\tldr r1, _08088A08 @ =sOptionsMenuTextColor\n" + "\tldr r1, _08088A08 @ =sOptionMenuTextColor\n" "\tadds r0, r4, 0\n" "\tmovs r2, 0x3\n" "\tbl memcpy\n" @@ -727,7 +712,7 @@ static void sub_80889A8(u8 selection) "\tldr r0, [r0]\n" "\tmov pc, r0\n" "\t.align 2, 0\n" - "_08088A08: .4byte sOptionsMenuTextColor\n" + "_08088A08: .4byte sOptionMenuTextColor\n" "_08088A0C: .4byte _08088A10\n" "\t.align 2, 0\n" "_08088A10:\n" @@ -780,7 +765,7 @@ static void sub_80889A8(u8 selection) "\tstr r0, [sp, 0x4]\n" "\tldr r2, _08088A94 @ =sButtonTypeOptions\n" "_08088A72:\n" - "\tldr r0, _08088A98 @ =sOptionsMenuPtr\n" + "\tldr r0, _08088A98 @ =sOptionMenuPtr\n" "\tldr r0, [r0]\n" "\tlsls r1, r5, 1\n" "\tadds r0, r1\n" @@ -797,13 +782,13 @@ static void sub_80889A8(u8 selection) "\tb _08088ADE\n" "\t.align 2, 0\n" "_08088A94: .4byte sButtonTypeOptions\n" - "_08088A98: .4byte sOptionsMenuPtr\n" + "_08088A98: .4byte sOptionMenuPtr\n" "_08088A9C:\n" "\tldr r1, _08088AF8 @ =gText_FrameType\n" "\tadd r0, sp, 0xC\n" "\tbl StringCopy\n" "\tadd r4, sp, 0x20\n" - "\tldr r0, _08088AFC @ =sOptionsMenuPtr\n" + "\tldr r0, _08088AFC @ =sOptionMenuPtr\n" "\tldr r0, [r0]\n" "\tlsls r1, r5, 1\n" "\tadds r0, r1\n" @@ -842,43 +827,35 @@ static void sub_80889A8(u8 selection) "\tbx r0\n" "\t.align 2, 0\n" "_08088AF8: .4byte gText_FrameType\n" - "_08088AFC: .4byte sOptionsMenuPtr\n"); + "_08088AFC: .4byte sOptionMenuPtr\n"); } #endif - -//sub_8088B00 -static void sub_8088B00(u8 taskId) +static void CloseAndSaveOptionMenu(u8 taskId) { gFieldCallback = sub_807DF64; SetMainCallback2(gMain.savedCallback); FreeAllWindowBuffers(); - gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionsMenuPtr->option[MENUITEM_TEXTSPEED]; - gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionsMenuPtr->option[MENUITEM_BATTLESCENE]; - gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionsMenuPtr->option[MENUITEM_BATTLESTYLE]; - gSaveBlock2Ptr->optionsSound = sOptionsMenuPtr->option[MENUITEM_SOUND]; - gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionsMenuPtr->option[MENUITEM_BUTTONMODE]; - gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionsMenuPtr->option[MENUITEM_FRAMETYPE]; + gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionMenuPtr->option[MENUITEM_TEXTSPEED]; + gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionMenuPtr->option[MENUITEM_BATTLESCENE]; + gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionMenuPtr->option[MENUITEM_BATTLESTYLE]; + gSaveBlock2Ptr->optionsSound = sOptionMenuPtr->option[MENUITEM_SOUND]; + gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionMenuPtr->option[MENUITEM_BUTTONMODE]; + gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionMenuPtr->option[MENUITEM_FRAMETYPE]; SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); - Free(sOptionsMenuPtr); - sOptionsMenuPtr = NULL; + FREE_AND_SET_NULL(sOptionMenuPtr); DestroyTask(taskId); } - - -//sub_8088BD0 -static void sub_8088BD0(void) +static void PrintOptionMenuHeader(void) { - FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gText_MenuOptionOption, 8, 1, TEXT_SPEED_FF, NULL); + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gText_MenuOption, 8, 1, TEXT_SPEED_FF, NULL); PutWindowTilemap(0); CopyWindowToVram(0, 3); } - -//sub_8088C0C static void sub_8088C0C(void) { u8 h; @@ -903,27 +880,23 @@ static void sub_8088C0C(void) CopyBgTilemapBufferToVram(1); } -//sub_8088D8C -static void sub_8088D8C(void) +static void LoadOptionMenuItemNames(void) { u8 i; - FillWindowPixelBuffer(1, 0x11); + FillWindowPixelBuffer(1, PIXEL_FILL(1)); for (i = 0; i < MENUITEM_COUNT; i++) { - AddTextPrinterParameterized(1, 2, sOptionMenuItemsNames[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); + AddTextPrinterParameterized(WIN_OPTIONS, 2, sOptionMenuItemsNames[i], 8, (u8) ((i * (GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, TEXT_SPEED_FF, NULL); } } - -//sub_8088DE0 static void sub_8088DE0(u16 selection) { u16 v1, v2; v1 = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); v2 = selection * (v1 - 1) + 0x3A; - SetGpuReg(0x44, (v2 << 8) | (v2 + v1)); - SetGpuReg(0x40, 0x10E0); + SetGpuReg(REG_OFFSET_WIN0V, (v2 << 8) | (v2 + v1)); + SetGpuReg(REG_OFFSET_WIN0H, WINOUT_WINOBJ_OBJ | WIN_RANGE(0, 0xE0)); } - |