mk64/src/menus.h

269 lines
8.3 KiB
C

#ifndef MENUS_H
#define MENUS_H
#include <PR/os.h>
#include <common_structs.h>
#include <defines.h>
// needs to be a union (or array...?) to go into rodata as a const
// terrible for endianness... Best guess as to what this is for..
union GameModePack {
u8 modes[4];
s32 word;
};
/**
* @brief Options for gMenuFadeType
*/
enum MenuFadeTypes {
MENU_FADE_TYPE_MAIN,
MENU_FADE_TYPE_BACK,
MENU_FADE_TYPE_DEMO,
MENU_FADE_TYPE_DATA,
MENU_FADE_TYPE_OPTION,
MENU_FADE_TYPE_MAX
};
/**
* @brief Options for gSubMenuSelection
*/
enum SubMenuSelectionType {
SUB_MENU_NONE,
SUB_MENU_DATA, // 0x01, value repurposed in map select
SUB_MENU_MAP_SELECT_CUP = 0x01,
SUB_MENU_MAP_SELECT_COURSE,
SUB_MENU_MAP_SELECT_OK,
SUB_MENU_MAP_SELECT_BATTLE_COURSE,
SUB_MENU_DATA_OPTIONS = 0x0B,
SUB_MENU_DATA_ERASE_CONFIRM,
SUB_MENU_DATA_CANT_ERASE,
SUB_MENU_OPTION_MIN = 0x15,
SUB_MENU_OPTION_RETURN_GAME_SELECT = SUB_MENU_OPTION_MIN,
SUB_MENU_OPTION_SOUND_MODE,
SUB_MENU_OPTION_COPY_CONTROLLER_PAK,
SUB_MENU_OPTION_ERASE_ALL_DATA,
SUB_MENU_OPTION_MAX = SUB_MENU_OPTION_ERASE_ALL_DATA, // 0x18
SUB_MENU_ERASE_MIN = 0x1E,
SUB_MENU_ERASE_QUIT = SUB_MENU_ERASE_MIN,
SUB_MENU_ERASE_ERASE,
SUB_MENU_ERASE_MAX = SUB_MENU_ERASE_ERASE, // 0x1F
SUB_MENU_SAVE_DATA_ERASED, // 0x20
SUB_MENU_COPY_PAK_FROM_GHOST_MIN = 0x28,
SUB_MENU_COPY_PAK_FROM_GHOST1_1P = SUB_MENU_COPY_PAK_FROM_GHOST_MIN,
SUB_MENU_COPY_PAK_FROM_GHOST2_1P,
SUB_MENU_COPY_PAK_FROM_GHOST_MAX = SUB_MENU_COPY_PAK_FROM_GHOST2_1P, // 0x29
SUB_MENU_COPY_PAK_ERROR_2P_MIN, // 0x2A
SUB_MENU_COPY_PAK_ERROR_NO_GHOST_DATA = SUB_MENU_COPY_PAK_ERROR_2P_MIN,
SUB_MENU_COPY_PAK_ERROR_NO_GAME_DATA,
SUB_MENU_COPY_PAK_ERROR_NO_PAK_2P,
SUB_MENU_COPY_PAK_ERROR_BAD_READ_2P,
SUB_MENU_COPY_PAK_ERROR_2P_MAX = SUB_MENU_COPY_PAK_ERROR_BAD_READ_2P, // 0x2D
SUB_MENU_COPY_PAK_TO_GHOST_MIN = 0x32,
SUB_MENU_COPY_PAK_TO_GHOST1_2P = SUB_MENU_COPY_PAK_TO_GHOST_MIN,
SUB_MENU_COPY_PAK_TO_GHOST2_2P,
SUB_MENU_COPY_PAK_TO_GHOST_MAX = SUB_MENU_COPY_PAK_TO_GHOST2_2P, // 0x33
SUB_MENU_COPY_PAK_ERROR_1P_MIN,
SUB_MENU_COPY_PAK_ERROR_NO_PAK_1P = SUB_MENU_COPY_PAK_ERROR_1P_MIN, // 0x34
SUB_MENU_COPY_PAK_ERROR_BAD_READ_1P,
SUB_MENU_COPY_PAK_ERROR_CANT_CREATE_1P,
SUB_MENU_COPY_PAK_ERROR_NO_PAGES_1P,
SUB_MENU_COPY_PAK_ERROR_1P_MAX,
SUB_MENU_COPY_PAK_PROMPT_MIN = SUB_MENU_COPY_PAK_ERROR_1P_MAX, // 0x38
SUB_MENU_COPY_PAK_PROMPT_QUIT = SUB_MENU_COPY_PAK_PROMPT_MIN,
SUB_MENU_COPY_PAK_PROMPT_COPY,
SUB_MENU_COPY_PAK_PROMPT_MAX = SUB_MENU_COPY_PAK_PROMPT_COPY, // 0x39
SUB_MENU_COPY_PAK_ACTION_MIN,
SUB_MENU_COPY_PAK_START = SUB_MENU_COPY_PAK_ACTION_MIN, // 0x3A
SUB_MENU_COPY_PAK_COPYING,
SUB_MENU_COPY_PAK_COMPLETED,
SUB_MENU_COPY_PAK_ACTION_MAX = SUB_MENU_COPY_PAK_COMPLETED, // 0x3C
SUB_MENU_COPY_PAK_UNABLE_ERROR_MIN = 0x41,
SUB_MENU_COPY_PAK_UNABLE_COPY_FROM_1P = SUB_MENU_COPY_PAK_UNABLE_ERROR_MIN,
SUB_MENU_COPY_PAK_UNABLE_READ_FROM_2P,
SUB_MENU_COPY_PAK_UNABLE_ERROR_MAX = SUB_MENU_COPY_PAK_UNABLE_READ_FROM_2P,
SUB_MENU_COPY_PAK_CREATE_GAME_DATA_INIT = 0x46,
SUB_MENU_COPY_PAK_CREATE_GAME_DATA_DONE
};
/**
* @brief Options for gMainMenuSelection
*/
enum MainMenuSelectionType {
MAIN_MENU_NONE,
MAIN_MENU_OPTION,
MAIN_MENU_DATA,
MAIN_MENU_PLAYER_SELECT,
MAIN_MENU_MODE_SELECT, // Mario GP - T. Trials - VS - Battle
MAIN_MENU_MODE_SUB_SELECT, // CC Selection and T.Trials options (Begin, Data)
MAIN_MENU_OK_SELECT, // OK option after selecting a submode
MAIN_MENU_OK_SELECT_GO_BACK, // OK option after going back from player select
MAIN_MENU_MODE_SUB_SELECT_GO_BACK // Used in T.Trials after going back to Data option from course data
};
/**
* @brief Options for gPlayerSelectMenuSelection
*/
enum PlayerSelectMenuSelectionTypes {
PLAYER_SELECT_MENU_NONE,
PLAYER_SELECT_MENU_MAIN,
PLAYER_SELECT_MENU_OK, // OK option after selecting characters
PLAYER_SELECT_MENU_OK_GO_BACK // OK option after going back from map select
};
/**
* @brief Options for gDebugMenuSelection
*/
enum DebugMenuSelectionTypes {
DEBUG_MENU_NONE,
DEBUG_MENU_DISABLED,
DEBUG_MENU_DEBUG_MODE,
DEBUG_MENU_COURSE,
DEBUG_MENU_SCREEN_MODE,
DEBUG_MENU_PLAYER,
DEBUG_MENU_SOUND_MODE,
DEBUG_MENU_GIVE_ALL_GOLD_CUP,
DEBUG_MENU_OPTION_SELECTED = 0x40
};
/**
* @brief Options for gControllerPakMenuSelection
*/
enum ControllerPakMenuSelectionTypes {
CONTROLLER_PAK_MENU_NONE,
CONTROLLER_PAK_MENU_SELECT_RECORD,
CONTROLLER_PAK_MENU_END,
CONTROLLER_PAK_MENU_ERASE,
CONTROLLER_PAK_MENU_QUIT,
CONTROLLER_PAK_MENU_TABLE_GAME_DATA,
CONTROLLER_PAK_MENU_GO_TO_ERASING,
CONTROLLER_PAK_MENU_ERASING,
CONTROLLER_PAK_MENU_ERASE_ERROR_NOT_ERASED,
CONTROLLER_PAK_MENU_ERASE_ERROR_NO_PAK,
CONTROLLER_PAK_MENU_ERASE_ERROR_PAK_CHANGED
};
/**
* @brief Options for gCourseRecordsMenuSelection
*/
enum CourseRecordsMenuSelectionTypes {
COURSE_RECORDS_MENU_MIN,
COURSE_RECORDS_MENU_RETURN_MENU = COURSE_RECORDS_MENU_MIN,
COURSE_RECORDS_MENU_ERASE_RECORDS,
COURSE_RECORDS_MENU_ERASE_GHOST,
COURSE_RECORDS_MENU_MAX = COURSE_RECORDS_MENU_ERASE_GHOST
};
/**
* @brief Options for gCourseRecordsSubMenuSelection
*/
enum CourseRecordsSubMenuSelectionTypes {
COURSE_RECORDS_SUB_MENU_MIN,
COURSE_RECORDS_SUB_MENU_QUIT = COURSE_RECORDS_SUB_MENU_MIN,
COURSE_RECORDS_SUB_MENU_ERASE,
COURSE_RECORDS_SUB_MENU_MAX = COURSE_RECORDS_SUB_MENU_ERASE
};
/**
* @brief Options for gDebugGotoScene
*/
enum DebugGotoSceneTypes {
DEBUG_GOTO_RACING,
DEBUG_GOTO_ENDING,
DEBUG_GOTO_CREDITS_SEQUENCE_DEFAULT,
DEBUG_GOTO_CREDITS_SEQUENCE_EXTRA
};
/**
* @brief Options for gFadeModeSelection
*/
enum FadeModeSelectionTypes {
FADE_MODE_NONE,
FADE_MODE_MAIN,
FADE_MODE_LOGO
};
/**
* @brief Options for gControllerPakScrollDirection
*/
enum ControllerPakScrollDirectionTypes {
CONTROLLER_PAK_SCROLL_DIR_NONE,
CONTROLLER_PAK_SCROLL_DIR_DOWN,
CONTROLLER_PAK_SCROLL_DIR_UP
};
/* functions */
void update_menus(void);
void options_menu_act(struct Controller*, u16);
void data_menu_act(struct Controller*, u16);
void course_data_menu_act(struct Controller*, u16);
void logo_intro_menu_act(struct Controller*, u16);
void controller_pak_menu_act(struct Controller*, u16);
void splash_menu_act(struct Controller*, u16);
void setup_selected_game_mode(void);
void main_menu_act(struct Controller*, u16);
bool is_character_spot_free(s32);
void player_select_menu_act(struct Controller*, u16);
void course_select_menu_act(struct Controller*, u16);
void load_menu_states(s32);
void reset_cycle_flash_menu(void);
void set_sound_mode(void);
bool is_screen_being_faded(void);
/* data */
extern s32 gIntroModelZEye;
extern f32 gIntroModelScale;
extern f32 gIntroModelRotX;
extern f32 gIntroModelRotY;
extern f32 gIntroModelRotZ;
extern f32 gIntroModelPosX;
extern f32 gIntroModelPosY;
extern f32 gIntroModelPosZ;
extern s32 gMenuFadeType;
extern s8 gCharacterGridSelections[4];
extern s8 gCharacterGridIsSelected[4];
extern s8 gSubMenuSelection;
extern s8 gMainMenuSelection;
extern s8 gPlayerSelectMenuSelection;
extern s8 gDebugMenuSelection;
extern s8 gControllerPakMenuSelection;
extern s8 gScreenModeListIndex;
extern u8 gSoundMode;
extern s8 gPlayerCount;
extern s8 gVersusResultCursorSelection;
extern s8 gTimeTrialsResultCursorSelection;
extern s8 gBattleResultCursorSelection;
extern s8 gTimeTrialDataCourseIndex;
extern s8 gCourseRecordsMenuSelection;
extern s8 gCourseRecordsSubMenuSelection;
extern s8 gDebugGotoScene;
extern s8 gGhostPlayerInit;
extern s8 gCourseMapInit;
extern s32 gMenuTimingCounter;
extern s32 gMenuDelayTimer;
extern s8 gDemoUseController;
extern s8 gCupSelection;
extern s8 gCourseIndexInCup;
extern s8 unref_8018EE0C;
extern s32 gMenuSelection; // D_800E86A0
extern s32 gFadeModeSelection;
extern s8 gCharacterSelections[];
extern s8 gGameModeMenuColumn[];
extern s8 gGameModeSubMenuColumn[4][3];
extern s8 gNextDemoId;
extern s8 gControllerPakSelectedTableRow;
extern s8 gControllerPakVisibleTableRows[];
extern s8 gControllerPakScrollDirection;
extern const s8 gPlayerModeSelection[];
extern const s32 gGameModePlayerSelection[][3];
extern const s16 gCupCourseOrder[NUM_CUPS][NUM_COURSES_PER_CUP];
// end of menus.c variables
#endif /* MENUS_H */