From 6eb9cffb1f43a181b6f75335bf9298ce8b68003e Mon Sep 17 00:00:00 2001 From: JoshDuMan Date: Thu, 14 Sep 2023 21:20:55 -0400 Subject: [PATCH] Address PR Feedback --- src/game_modes.c | 53 +++++++++++++++++++++++++------------------ src/game_modes.h | 19 +++------------- src/game_states.c | 34 +++++++++++++-------------- ver/ique/asm/bss.s | 2 +- ver/jp/asm/main.bss.s | 2 +- ver/us/asm/bss.s | 2 +- 6 files changed, 54 insertions(+), 58 deletions(-) diff --git a/src/game_modes.c b/src/game_modes.c index 10dfbe9da1f..24db3e6b927 100644 --- a/src/game_modes.c +++ b/src/game_modes.c @@ -26,8 +26,19 @@ s32 D_80077420[] = { // These GameModeStub are used as the struct GameMode. As GameModeStub is 0x14 long and GameMode is 0x18 long, the last element // and first element of the next struct are shared in data. +typedef struct GameModeStub { + /* 0x00 */ u16 flags; + /* 0x04 */ void (*init)(void); + /* 0x08 */ void (*step)(void); + /* 0x0C */ UNK_FUN_PTR(unusedFunc); + /* 0x10 */ void (*render)(void); + #ifdef AVOID_UB + /* 0x14 */ void (*renderAux)(void); ///< @see state_render_frontUI + #endif +} GameModeStub; // size = 0x14 + GameModeStub GameModeStartup = { - 0, + MODE_FLAG_NONE, state_init_startup, state_step_startup, NULL, @@ -38,7 +49,7 @@ GameModeStub GameModeStartup = { }; GameModeStub GameModeLogos = { - 0, + MODE_FLAG_NONE, state_init_logos, state_step_logos, NULL, @@ -49,7 +60,7 @@ GameModeStub GameModeLogos = { }; GameModeStub GameModeTitleScreen = { - 0, + MODE_FLAG_NONE, state_init_title_screen, state_step_title_screen, NULL, @@ -60,7 +71,7 @@ GameModeStub GameModeTitleScreen = { }; GameModeStub GameModeEnterDemoWorld = { - 0, + MODE_FLAG_NONE, state_init_enter_demo, state_step_enter_world, NULL, @@ -71,7 +82,7 @@ GameModeStub GameModeEnterDemoWorld = { }; GameModeStub GameModeChangeMap = { - 0, + MODE_FLAG_NONE, state_init_change_map, state_step_change_map, NULL, @@ -82,7 +93,7 @@ GameModeStub GameModeChangeMap = { }; GameModeStub GameModeGameOver = { - 0, + MODE_FLAG_NONE, state_init_game_over, state_step_game_over, NULL, @@ -93,7 +104,7 @@ GameModeStub GameModeGameOver = { }; GameModeStub GameModeEnterWorld = { - 0, + MODE_FLAG_NONE, state_init_enter_world, state_step_enter_world, NULL, @@ -104,7 +115,7 @@ GameModeStub GameModeEnterWorld = { }; GameModeStub GameModeWorld = { - 0, + MODE_FLAG_NONE, state_init_world, state_step_world, NULL, @@ -115,7 +126,7 @@ GameModeStub GameModeWorld = { }; GameModeStub GameModeBattle = { - 0, + MODE_FLAG_NONE, state_init_battle, state_step_battle, NULL, @@ -126,7 +137,7 @@ GameModeStub GameModeBattle = { }; GameModeStub GameModeEndBattle = { - 0, + MODE_FLAG_NONE, state_init_end_battle, state_step_end_battle, NULL, @@ -137,7 +148,7 @@ GameModeStub GameModeEndBattle = { }; GameModeStub GameModePause = { - 0, + MODE_FLAG_NONE, state_init_pause, state_step_pause, NULL, @@ -148,7 +159,7 @@ GameModeStub GameModePause = { }; GameModeStub GameModeUnpause = { - 0, + MODE_FLAG_NONE, state_init_unpause, state_step_unpause, NULL, @@ -159,7 +170,7 @@ GameModeStub GameModeUnpause = { }; GameModeStub GameModeLanguageSelect = { - 0, + MODE_FLAG_NONE, state_init_language_select, state_step_language_select, NULL, @@ -170,7 +181,7 @@ GameModeStub GameModeLanguageSelect = { }; GameModeStub GameModeEndLanguageSelect = { - 0, + MODE_FLAG_NONE, state_init_exit_language_select, state_step_exit_language_select, NULL, @@ -181,7 +192,7 @@ GameModeStub GameModeEndLanguageSelect = { }; GameModeStub GameModeFileSelect = { - 0, + MODE_FLAG_NONE, state_init_file_select, state_step_file_select, NULL, @@ -203,7 +214,7 @@ GameModeStub GameModeEndFileSelect = { }; GameModeStub GameModeIntro = { - 0, + MODE_FLAG_NONE, state_init_intro, state_step_intro, NULL, @@ -214,7 +225,7 @@ GameModeStub GameModeIntro = { }; GameModeStub GameModeDemo = { - 0, + MODE_FLAG_NONE, state_init_demo, state_step_demo, NULL, @@ -243,17 +254,15 @@ GameMode* gameModeMap[] = { (GameMode*) &GameModeEndFileSelect, (GameMode*) &GameModeIntro, (GameMode*) &GameModeDemo, - NULL, - NULL, }; -SHIFT_BSS s16 activeGameMode; +SHIFT_BSS s16 CurGameMode; void set_game_mode(s16 mode) { - activeGameMode = mode; + CurGameMode = mode; set_game_mode_slot(0, gameModeMap[mode]); } s16 get_game_mode(void) { - return activeGameMode; + return CurGameMode; } diff --git a/src/game_modes.h b/src/game_modes.h index 12da0bd50c7..a2cfc95e0ed 100644 --- a/src/game_modes.h +++ b/src/game_modes.h @@ -8,9 +8,9 @@ enum GameModeFlags { MODE_FLAG_NONE = 0, MODE_FLAG_INITIALIZED = (1 << 0), // Set when the mod is initialized MODE_FLAG_STEP_NOT_DONE = (1 << 1), // Turned off after the first step is done - MODE_FLAG_3 = (1 << 2), - MODE_FLAG_4 = (1 << 3), - MODE_FLAG_5 = (1 << 4), + MODE_FLAG_4 = (1 << 2), + MODE_FLAG_8 = (1 << 3), + MODE_FLAG_10 = (1 << 4), MODE_FLAG_RENDER_AUX_SET = (1 << 5), // Set when the renderAux function is set }; @@ -35,19 +35,6 @@ enum GameModeIDs { GAME_MODE_DEMO = 17, }; -// GameModeStub are treated as GameMode structs, which creates UB behavior as -// renderAux accesses are outside the range of the struct. -typedef struct GameModeStub { - /* 0x00 */ u16 flags; - /* 0x04 */ void (*init)(void); - /* 0x08 */ void (*step)(void); - /* 0x0C */ UNK_FUN_PTR(unusedFunc); - /* 0x10 */ void (*render)(void); - #ifdef AVOID_UB - /* 0x14 */ void (*renderAux)(void); ///< @see state_render_frontUI - #endif -} GameModeStub; // size = 0x14 - typedef struct GameMode { /* 0x00 */ u16 flags; /* 0x04 */ void (*init)(void); diff --git a/src/game_states.c b/src/game_states.c index b137b5b04e6..84413b496ab 100644 --- a/src/game_states.c +++ b/src/game_states.c @@ -89,24 +89,24 @@ void game_mode_set_fpDrawAuxUI(s32 i, void (*fn)(void)) { } // Unused -void set_game_mode_flag_3(s32 i) { - gMainGameMode[i].flags |= MODE_FLAG_3; +void set_game_mode_flag_4(s32 i) { + gMainGameMode[i].flags |= MODE_FLAG_4; } // Unused -void set_game_mode_flag_4(s32 i) { - gMainGameMode[i].flags |= MODE_FLAG_4; +void set_game_mode_flag_8(s32 i) { + gMainGameMode[i].flags |= MODE_FLAG_8; } // Unused void clear_game_mode_unk_flags(s32 i) { - gMainGameMode[i].flags &= ~(MODE_FLAG_3|MODE_FLAG_4|MODE_FLAG_5); + gMainGameMode[i].flags &= ~(MODE_FLAG_4 | MODE_FLAG_8 | MODE_FLAG_10); } // Unused -void set_game_mode_flag_5(s32 i) { - gMainGameMode[i].flags &= ~(MODE_FLAG_3|MODE_FLAG_4); - gMainGameMode[i].flags |= MODE_FLAG_5; +void set_game_mode_flag_10(s32 i) { + gMainGameMode[i].flags &= ~(MODE_FLAG_4 | MODE_FLAG_8); + gMainGameMode[i].flags |= MODE_FLAG_10; } void step_current_game_mode(void) { @@ -115,8 +115,8 @@ void step_current_game_mode(void) { for (i = 0; i < ARRAY_COUNT(gMainGameMode); i++, gameMode++) { if (gameMode->flags != MODE_FLAG_NONE) { - if (!(gameMode->flags & MODE_FLAG_3)) { - if (!(gameMode->flags & MODE_FLAG_4)) { + if (!(gameMode->flags & MODE_FLAG_4)) { + if (!(gameMode->flags & MODE_FLAG_8)) { gameMode->flags &= ~MODE_FLAG_STEP_NOT_DONE; gameMode->step(); } @@ -132,8 +132,8 @@ void state_do_unk(void) { for (i = 0; i < ARRAY_COUNT(gMainGameMode); i++, gameMode++) { if (gameMode->flags != MODE_FLAG_NONE) { - if (!(gameMode->flags & MODE_FLAG_3)) { - if (!(gameMode->flags & MODE_FLAG_5)) { + if (!(gameMode->flags & MODE_FLAG_4)) { + if (!(gameMode->flags & MODE_FLAG_10)) { gameMode->unusedFunc(); } } @@ -147,8 +147,8 @@ void state_render_backUI(void) { for (i = 0; i < ARRAY_COUNT(gMainGameMode); i++, gameMode++) { if (gameMode->flags != MODE_FLAG_NONE) { - if (!(gameMode->flags & MODE_FLAG_3)) { - if (!(gameMode->flags & MODE_FLAG_5)) { + if (!(gameMode->flags & MODE_FLAG_4)) { + if (!(gameMode->flags & MODE_FLAG_10)) { gameMode->render(); } } @@ -162,7 +162,7 @@ void state_render_frontUI(void) { for (i = 0; i < ARRAY_COUNT(gMainGameMode); i++, gameMode++) { if (gameMode->flags != MODE_FLAG_NONE) { - if (!(gameMode->flags & MODE_FLAG_3)) { + if (!(gameMode->flags & MODE_FLAG_4)) { if (!(gameMode->flags & MODE_FLAG_STEP_NOT_DONE)) { if (gameMode->flags & MODE_FLAG_RENDER_AUX_SET) { gameMode->renderAux(); @@ -176,9 +176,9 @@ void state_render_frontUI(void) { gameMode = &gMainGameMode[0]; for (i = 0; i < ARRAY_COUNT(gMainGameMode); i++, gameMode++) { if (gameMode->flags != MODE_FLAG_NONE) { - if (!(gameMode->flags & MODE_FLAG_3)) { + if (!(gameMode->flags & MODE_FLAG_4)) { if (!(gameMode->flags & MODE_FLAG_STEP_NOT_DONE)) { - if (gameMode->flags & MODE_FLAG_5) { + if (gameMode->flags & MODE_FLAG_10) { gameMode->render(); } } diff --git a/ver/ique/asm/bss.s b/ver/ique/asm/bss.s index 92bb68767da..0feef0f4d77 100644 --- a/ver/ique/asm/bss.s +++ b/ver/ique/asm/bss.s @@ -286,7 +286,7 @@ dlabel D_800A08E8 dlabel D_800A08EC .space 4 -dlabel activeGameMode +dlabel CurGameMode .space 4 dlabel D_800A08F4 diff --git a/ver/jp/asm/main.bss.s b/ver/jp/asm/main.bss.s index 08b2e70befc..2b021c6ae13 100644 --- a/ver/jp/asm/main.bss.s +++ b/ver/jp/asm/main.bss.s @@ -223,7 +223,7 @@ dlabel D_800A08E8 dlabel D_800A08EC .space 4 -dlabel activeGameMode +dlabel CurGameMode .space 0x00000010 dlabel D_800A0900 diff --git a/ver/us/asm/bss.s b/ver/us/asm/bss.s index 46a1dda4eae..096cf8b64f2 100644 --- a/ver/us/asm/bss.s +++ b/ver/us/asm/bss.s @@ -280,7 +280,7 @@ dlabel D_800A08E8 dlabel D_800A08EC .space 4 -dlabel activeGameMode +dlabel CurGameMode .space 4 dlabel D_800A08F4