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