Options menu: standardize task data

This commit is contained in:
Martin Griffin
2022-08-21 09:45:55 +01:00
parent d57442a511
commit ba6d4866e4
+70 -73
View File
@@ -17,16 +17,13 @@
#include "constants/rgb.h" #include "constants/rgb.h"
// Task data // Task data
enum #define tMenuSelection data[0]
{ #define tTextSpeed data[1]
TD_MENUSELECTION, #define tBattleSceneOff data[2]
TD_TEXTSPEED, #define tBattleStyle data[3]
TD_BATTLESCENE, #define tSound data[4]
TD_BATTLESTYLE, #define tButtonMode data[5]
TD_SOUND, #define tWindowFrameType data[6]
TD_BUTTONMODE,
TD_FRAMETYPE,
};
// Menu items // Menu items
enum enum
@@ -44,7 +41,7 @@ enum
// Window Ids // Window Ids
enum enum
{ {
WIN_TEXT_OPTION, WIN_HEADER,
WIN_OPTIONS WIN_OPTIONS
}; };
@@ -73,7 +70,7 @@ static u8 FrameType_ProcessInput(u8 selection);
static void FrameType_DrawChoices(u8 selection); static void FrameType_DrawChoices(u8 selection);
static u8 ButtonMode_ProcessInput(u8 selection); static u8 ButtonMode_ProcessInput(u8 selection);
static void ButtonMode_DrawChoices(u8 selection); static void ButtonMode_DrawChoices(u8 selection);
static void DrawTextOption(void); static void DrawHeaderText(void);
static void DrawOptionMenuTexts(void); static void DrawOptionMenuTexts(void);
static void DrawBgWindowFrames(void); static void DrawBgWindowFrames(void);
@@ -96,7 +93,7 @@ static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] =
static const struct WindowTemplate sOptionMenuWinTemplates[] = static const struct WindowTemplate sOptionMenuWinTemplates[] =
{ {
{ [WIN_HEADER] = {
.bg = 1, .bg = 1,
.tilemapLeft = 2, .tilemapLeft = 2,
.tilemapTop = 1, .tilemapTop = 1,
@@ -105,7 +102,7 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] =
.paletteNum = 1, .paletteNum = 1,
.baseBlock = 2 .baseBlock = 2
}, },
{ [WIN_OPTIONS] = {
.bg = 0, .bg = 0,
.tilemapLeft = 2, .tilemapLeft = 2,
.tilemapTop = 5, .tilemapTop = 5,
@@ -217,7 +214,7 @@ void CB2_InitOptionMenu(void)
break; break;
case 6: case 6:
PutWindowTilemap(0); PutWindowTilemap(0);
DrawTextOption(); DrawHeaderText();
gMain.state++; gMain.state++;
break; break;
case 7: case 7:
@@ -235,21 +232,21 @@ void CB2_InitOptionMenu(void)
{ {
u8 taskId = CreateTask(Task_OptionMenuFadeIn, 0); u8 taskId = CreateTask(Task_OptionMenuFadeIn, 0);
gTasks[taskId].data[TD_MENUSELECTION] = 0; gTasks[taskId].tMenuSelection = 0;
gTasks[taskId].data[TD_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed; gTasks[taskId].tTextSpeed = gSaveBlock2Ptr->optionsTextSpeed;
gTasks[taskId].data[TD_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff; gTasks[taskId].tBattleSceneOff = gSaveBlock2Ptr->optionsBattleSceneOff;
gTasks[taskId].data[TD_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle; gTasks[taskId].tBattleStyle = gSaveBlock2Ptr->optionsBattleStyle;
gTasks[taskId].data[TD_SOUND] = gSaveBlock2Ptr->optionsSound; gTasks[taskId].tSound = gSaveBlock2Ptr->optionsSound;
gTasks[taskId].data[TD_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; gTasks[taskId].tButtonMode = gSaveBlock2Ptr->optionsButtonMode;
gTasks[taskId].data[TD_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; gTasks[taskId].tWindowFrameType = gSaveBlock2Ptr->optionsWindowFrameType;
TextSpeed_DrawChoices(gTasks[taskId].data[TD_TEXTSPEED]); TextSpeed_DrawChoices(gTasks[taskId].tTextSpeed);
BattleScene_DrawChoices(gTasks[taskId].data[TD_BATTLESCENE]); BattleScene_DrawChoices(gTasks[taskId].tBattleSceneOff);
BattleStyle_DrawChoices(gTasks[taskId].data[TD_BATTLESTYLE]); BattleStyle_DrawChoices(gTasks[taskId].tBattleStyle);
Sound_DrawChoices(gTasks[taskId].data[TD_SOUND]); Sound_DrawChoices(gTasks[taskId].tSound);
ButtonMode_DrawChoices(gTasks[taskId].data[TD_BUTTONMODE]); ButtonMode_DrawChoices(gTasks[taskId].tButtonMode);
FrameType_DrawChoices(gTasks[taskId].data[TD_FRAMETYPE]); FrameType_DrawChoices(gTasks[taskId].tWindowFrameType);
HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); HighlightOptionMenuItem(gTasks[taskId].tMenuSelection);
CopyWindowToVram(WIN_OPTIONS, COPYWIN_FULL); CopyWindowToVram(WIN_OPTIONS, COPYWIN_FULL);
gMain.state++; gMain.state++;
@@ -273,7 +270,7 @@ static void Task_OptionMenuProcessInput(u8 taskId)
{ {
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
if (gTasks[taskId].data[TD_MENUSELECTION] == MENUITEM_CANCEL) if (gTasks[taskId].tMenuSelection == MENUITEM_CANCEL)
gTasks[taskId].func = Task_OptionMenuSave; gTasks[taskId].func = Task_OptionMenuSave;
} }
else if (JOY_NEW(B_BUTTON)) else if (JOY_NEW(B_BUTTON))
@@ -282,67 +279,67 @@ static void Task_OptionMenuProcessInput(u8 taskId)
} }
else if (JOY_NEW(DPAD_UP)) else if (JOY_NEW(DPAD_UP))
{ {
if (gTasks[taskId].data[TD_MENUSELECTION] > 0) if (gTasks[taskId].tMenuSelection > 0)
gTasks[taskId].data[TD_MENUSELECTION]--; gTasks[taskId].tMenuSelection--;
else else
gTasks[taskId].data[TD_MENUSELECTION] = MENUITEM_CANCEL; gTasks[taskId].tMenuSelection = MENUITEM_CANCEL;
HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); HighlightOptionMenuItem(gTasks[taskId].tMenuSelection);
} }
else if (JOY_NEW(DPAD_DOWN)) else if (JOY_NEW(DPAD_DOWN))
{ {
if (gTasks[taskId].data[TD_MENUSELECTION] < MENUITEM_CANCEL) if (gTasks[taskId].tMenuSelection < MENUITEM_CANCEL)
gTasks[taskId].data[TD_MENUSELECTION]++; gTasks[taskId].tMenuSelection++;
else else
gTasks[taskId].data[TD_MENUSELECTION] = 0; gTasks[taskId].tMenuSelection = 0;
HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); HighlightOptionMenuItem(gTasks[taskId].tMenuSelection);
} }
else else
{ {
u8 previousOption; u8 previousOption;
switch (gTasks[taskId].data[TD_MENUSELECTION]) switch (gTasks[taskId].tMenuSelection)
{ {
case MENUITEM_TEXTSPEED: case MENUITEM_TEXTSPEED:
previousOption = gTasks[taskId].data[TD_TEXTSPEED]; previousOption = gTasks[taskId].tTextSpeed;
gTasks[taskId].data[TD_TEXTSPEED] = TextSpeed_ProcessInput(gTasks[taskId].data[TD_TEXTSPEED]); gTasks[taskId].tTextSpeed = TextSpeed_ProcessInput(gTasks[taskId].tTextSpeed);
if (previousOption != gTasks[taskId].data[TD_TEXTSPEED]) if (previousOption != gTasks[taskId].tTextSpeed)
TextSpeed_DrawChoices(gTasks[taskId].data[TD_TEXTSPEED]); TextSpeed_DrawChoices(gTasks[taskId].tTextSpeed);
break; break;
case MENUITEM_BATTLESCENE: case MENUITEM_BATTLESCENE:
previousOption = gTasks[taskId].data[TD_BATTLESCENE]; previousOption = gTasks[taskId].tBattleSceneOff;
gTasks[taskId].data[TD_BATTLESCENE] = BattleScene_ProcessInput(gTasks[taskId].data[TD_BATTLESCENE]); gTasks[taskId].tBattleSceneOff = BattleScene_ProcessInput(gTasks[taskId].tBattleSceneOff);
if (previousOption != gTasks[taskId].data[TD_BATTLESCENE]) if (previousOption != gTasks[taskId].tBattleSceneOff)
BattleScene_DrawChoices(gTasks[taskId].data[TD_BATTLESCENE]); BattleScene_DrawChoices(gTasks[taskId].tBattleSceneOff);
break; break;
case MENUITEM_BATTLESTYLE: case MENUITEM_BATTLESTYLE:
previousOption = gTasks[taskId].data[TD_BATTLESTYLE]; previousOption = gTasks[taskId].tBattleStyle;
gTasks[taskId].data[TD_BATTLESTYLE] = BattleStyle_ProcessInput(gTasks[taskId].data[TD_BATTLESTYLE]); gTasks[taskId].tBattleStyle = BattleStyle_ProcessInput(gTasks[taskId].tBattleStyle);
if (previousOption != gTasks[taskId].data[TD_BATTLESTYLE]) if (previousOption != gTasks[taskId].tBattleStyle)
BattleStyle_DrawChoices(gTasks[taskId].data[TD_BATTLESTYLE]); BattleStyle_DrawChoices(gTasks[taskId].tBattleStyle);
break; break;
case MENUITEM_SOUND: case MENUITEM_SOUND:
previousOption = gTasks[taskId].data[TD_SOUND]; previousOption = gTasks[taskId].tSound;
gTasks[taskId].data[TD_SOUND] = Sound_ProcessInput(gTasks[taskId].data[TD_SOUND]); gTasks[taskId].tSound = Sound_ProcessInput(gTasks[taskId].tSound);
if (previousOption != gTasks[taskId].data[TD_SOUND]) if (previousOption != gTasks[taskId].tSound)
Sound_DrawChoices(gTasks[taskId].data[TD_SOUND]); Sound_DrawChoices(gTasks[taskId].tSound);
break; break;
case MENUITEM_BUTTONMODE: case MENUITEM_BUTTONMODE:
previousOption = gTasks[taskId].data[TD_BUTTONMODE]; previousOption = gTasks[taskId].tButtonMode;
gTasks[taskId].data[TD_BUTTONMODE] = ButtonMode_ProcessInput(gTasks[taskId].data[TD_BUTTONMODE]); gTasks[taskId].tButtonMode = ButtonMode_ProcessInput(gTasks[taskId].tButtonMode);
if (previousOption != gTasks[taskId].data[TD_BUTTONMODE]) if (previousOption != gTasks[taskId].tButtonMode)
ButtonMode_DrawChoices(gTasks[taskId].data[TD_BUTTONMODE]); ButtonMode_DrawChoices(gTasks[taskId].tButtonMode);
break; break;
case MENUITEM_FRAMETYPE: case MENUITEM_FRAMETYPE:
previousOption = gTasks[taskId].data[TD_FRAMETYPE]; previousOption = gTasks[taskId].tWindowFrameType;
gTasks[taskId].data[TD_FRAMETYPE] = FrameType_ProcessInput(gTasks[taskId].data[TD_FRAMETYPE]); gTasks[taskId].tWindowFrameType = FrameType_ProcessInput(gTasks[taskId].tWindowFrameType);
if (previousOption != gTasks[taskId].data[TD_FRAMETYPE]) if (previousOption != gTasks[taskId].tWindowFrameType)
FrameType_DrawChoices(gTasks[taskId].data[TD_FRAMETYPE]); FrameType_DrawChoices(gTasks[taskId].tWindowFrameType);
break; break;
default: default:
return; return;
@@ -358,12 +355,12 @@ static void Task_OptionMenuProcessInput(u8 taskId)
static void Task_OptionMenuSave(u8 taskId) static void Task_OptionMenuSave(u8 taskId)
{ {
gSaveBlock2Ptr->optionsTextSpeed = gTasks[taskId].data[TD_TEXTSPEED]; gSaveBlock2Ptr->optionsTextSpeed = gTasks[taskId].tTextSpeed;
gSaveBlock2Ptr->optionsBattleSceneOff = gTasks[taskId].data[TD_BATTLESCENE]; gSaveBlock2Ptr->optionsBattleSceneOff = gTasks[taskId].tBattleSceneOff;
gSaveBlock2Ptr->optionsBattleStyle = gTasks[taskId].data[TD_BATTLESTYLE]; gSaveBlock2Ptr->optionsBattleStyle = gTasks[taskId].tBattleStyle;
gSaveBlock2Ptr->optionsSound = gTasks[taskId].data[TD_SOUND]; gSaveBlock2Ptr->optionsSound = gTasks[taskId].tSound;
gSaveBlock2Ptr->optionsButtonMode = gTasks[taskId].data[TD_BUTTONMODE]; gSaveBlock2Ptr->optionsButtonMode = gTasks[taskId].tButtonMode;
gSaveBlock2Ptr->optionsWindowFrameType = gTasks[taskId].data[TD_FRAMETYPE]; gSaveBlock2Ptr->optionsWindowFrameType = gTasks[taskId].tWindowFrameType;
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
gTasks[taskId].func = Task_OptionMenuFadeOut; gTasks[taskId].func = Task_OptionMenuFadeOut;
@@ -623,11 +620,11 @@ static void ButtonMode_DrawChoices(u8 selection)
DrawOptionMenuChoice(gText_ButtonTypeLEqualsA, GetStringRightAlignXOffset(FONT_NORMAL, gText_ButtonTypeLEqualsA, 198), YPOS_BUTTONMODE, styles[2]); DrawOptionMenuChoice(gText_ButtonTypeLEqualsA, GetStringRightAlignXOffset(FONT_NORMAL, gText_ButtonTypeLEqualsA, 198), YPOS_BUTTONMODE, styles[2]);
} }
static void DrawTextOption(void) static void DrawHeaderText(void)
{ {
FillWindowPixelBuffer(WIN_TEXT_OPTION, PIXEL_FILL(1)); FillWindowPixelBuffer(WIN_HEADER, PIXEL_FILL(1));
AddTextPrinterParameterized(WIN_TEXT_OPTION, FONT_NORMAL, gText_Option, 8, 1, TEXT_SKIP_DRAW, NULL); AddTextPrinterParameterized(WIN_HEADER, FONT_NORMAL, gText_Option, 8, 1, TEXT_SKIP_DRAW, NULL);
CopyWindowToVram(WIN_TEXT_OPTION, COPYWIN_FULL); CopyWindowToVram(WIN_HEADER, COPYWIN_FULL);
} }
static void DrawOptionMenuTexts(void) static void DrawOptionMenuTexts(void)