summaryrefslogtreecommitdiff
path: root/soh
diff options
context:
space:
mode:
Diffstat (limited to 'soh')
-rw-r--r--soh/soh/Enhancements/QoL/BetterSaveMenu.cpp220
-rw-r--r--soh/soh/Enhancements/custom-message/CustomMessageManager.cpp4
-rw-r--r--soh/soh/Enhancements/custom-message/CustomMessageManager.h1
-rw-r--r--soh/soh/Enhancements/custom-message/CustomMessageTypes.h3
-rw-r--r--soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h20
-rw-r--r--soh/soh/SohGui/SohMenuEnhancements.cpp6
-rw-r--r--soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c182
7 files changed, 347 insertions, 89 deletions
diff --git a/soh/soh/Enhancements/QoL/BetterSaveMenu.cpp b/soh/soh/Enhancements/QoL/BetterSaveMenu.cpp
new file mode 100644
index 000000000..53e2f4a54
--- /dev/null
+++ b/soh/soh/Enhancements/QoL/BetterSaveMenu.cpp
@@ -0,0 +1,220 @@
+#include "soh/Enhancements/custom-message/CustomMessageManager.h"
+#include "soh/Enhancements/custom-message/CustomMessageTypes.h"
+#include "soh/Enhancements/game-interactor/GameInteractor.h"
+#include "soh/Enhancements/randomizer/randomizer_entrance.h"
+#include "soh/ShipInit.hpp"
+
+extern "C" {
+extern PlayState* gPlayState;
+#include "functions.h"
+#include "macros.h"
+#include "variables.h"
+#include "z64scene.h"
+}
+
+#define CVAR_BETTERSAVE CVAR_ENHANCEMENT("BetterSaveMenu")
+#define CVAR_BETTERSAVE_DEFAULT 0
+#define CVAR_BETTERSAVE_VALUE CVarGetInteger(CVAR_BETTERSAVE, CVAR_BETTERSAVE_DEFAULT)
+static CustomMessage saveMsg = CustomMessage(
+ "\x08Would you like to save?&&" + CustomMessage::TWO_WAY_CHOICE() + "%gYes&No%w\x09", TEXTBOX_TYPE_BLUE);
+static CustomMessage continueOverworldMsg = CustomMessage(
+ "\x08 Continue?&&" + CustomMessage::TWO_WAY_CHOICE() + "%gContinue&Return to Spawn%w\x09", TEXTBOX_TYPE_BLUE);
+static CustomMessage continueDungeonMsg =
+ CustomMessage("\x08 Continue?&" + CustomMessage::THREE_WAY_CHOICE() + "%gContinue&Restart&Return to Spawn%w\x09",
+ TEXTBOX_TYPE_BLUE);
+
+extern "C" uint8_t Randomizer_GetSettingValue(RandomizerSettingKey randoSettingKey);
+
+bool IsSceneDungeon(int16_t scene) {
+ switch (scene) {
+ case SCENE_DEKU_TREE:
+ case SCENE_DEKU_TREE_BOSS:
+ case SCENE_DODONGOS_CAVERN:
+ case SCENE_DODONGOS_CAVERN_BOSS:
+ case SCENE_JABU_JABU:
+ case SCENE_JABU_JABU_BOSS:
+ case SCENE_FOREST_TEMPLE:
+ case SCENE_FOREST_TEMPLE_BOSS:
+ case SCENE_FIRE_TEMPLE:
+ case SCENE_FIRE_TEMPLE_BOSS:
+ case SCENE_WATER_TEMPLE:
+ case SCENE_WATER_TEMPLE_BOSS:
+ case SCENE_SPIRIT_TEMPLE:
+ case SCENE_SPIRIT_TEMPLE_BOSS:
+ case SCENE_SHADOW_TEMPLE:
+ case SCENE_SHADOW_TEMPLE_BOSS:
+ case SCENE_BOTTOM_OF_THE_WELL:
+ case SCENE_GERUDO_TRAINING_GROUND:
+ case SCENE_ICE_CAVERN:
+ case SCENE_INSIDE_GANONS_CASTLE:
+ case SCENE_GANONS_TOWER:
+ case SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR:
+ case SCENE_GANONS_TOWER_COLLAPSE_INTERIOR:
+ case SCENE_GANONDORF_BOSS:
+ case SCENE_GANON_BOSS:
+ case SCENE_INSIDE_GANONS_CASTLE_COLLAPSE:
+ return true;
+ default:
+ return false;
+ }
+}
+
+void HandleSaveMenu(bool* should, PlayState* play) {
+ PauseContext* pauseCtx = &play->pauseCtx;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ switch (pauseCtx->unk_1EC) {
+ case 0:
+ *should = false;
+ Message_StartTextbox(play, TEXT_SAVE_MSG, NULL);
+ pauseCtx->unk_1EC = 1;
+ break;
+ case 1:
+ *should = false;
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) {
+ if (play->msgCtx.choiceIndex == 0) {
+ Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
+ &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ Play_PerformSave(play);
+ pauseCtx->unk_1EC = 4;
+ if (IsSceneDungeon(gSaveContext.savedSceneNum)) {
+ Message_StartTextbox(play, TEXT_CONTINUE_DUNGEON_MSG, NULL);
+ } else {
+ Message_StartTextbox(play, TEXT_CONTINUE_OVERWORLD_MSG, NULL);
+ }
+ } else {
+ Interface_SetDoAction(play, DO_ACTION_NONE);
+ gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
+ gSaveContext.buttonStatus[3] = BTN_ENABLED;
+ gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
+ gSaveContext.buttonStatus[8] = BTN_ENABLED;
+ gSaveContext.hudVisibilityMode = 0;
+ Interface_ChangeHudVisibilityMode(50);
+ pauseCtx->unk_1EC = 2;
+ WREG(2) = -6240;
+ YREG(8) = static_cast<int16_t>(pauseCtx->unk_204);
+ func_800F64E0(0);
+ }
+ }
+ break;
+ case 4:
+ *should = false;
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) {
+ switch (play->msgCtx.choiceIndex) {
+ case 0:
+ // Continue
+ Interface_SetDoAction(play, DO_ACTION_NONE);
+ gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
+ gSaveContext.buttonStatus[3] = BTN_ENABLED;
+ gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
+ gSaveContext.buttonStatus[8] = BTN_ENABLED;
+ gSaveContext.hudVisibilityMode = 0;
+ Interface_ChangeHudVisibilityMode(50);
+ pauseCtx->unk_1EC = 5;
+ WREG(2) = -6240;
+ YREG(8) = static_cast<int16_t>(pauseCtx->unk_204);
+ func_800F64E0(0);
+ break;
+ case 1:
+ // Reset (Dungeon) / Return to Spawn (Overworld)
+ Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
+ &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ Play_SaveSceneFlags(play);
+ Sram_OpenSave();
+ if (!IsSceneDungeon(gSaveContext.savedSceneNum)) {
+ if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS)) {
+ if (LINK_AGE_IN_YEARS == YEARS_ADULT) {
+ gSaveContext.entranceIndex = ENTR_HYRULE_FIELD_10;
+ }
+ gSaveContext.entranceIndex = Entrance_OverrideNextIndex(gSaveContext.entranceIndex);
+ }
+ }
+ pauseCtx->promptChoice = 0;
+ pauseCtx->unk_1EC = 7;
+ break;
+ case 2:
+ // Reset to Spawn (Dungeon)
+ Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
+ &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ Play_SaveSceneFlags(play);
+ Sram_OpenSave();
+ gSaveContext.entranceIndex = (LINK_AGE_IN_YEARS == YEARS_CHILD) ? ENTR_LINKS_HOUSE_CHILD_SPAWN
+ : ENTR_TEMPLE_OF_TIME_WARP_PAD;
+ if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS)) {
+ if (LINK_AGE_IN_YEARS == YEARS_ADULT) {
+ gSaveContext.entranceIndex = ENTR_HYRULE_FIELD_10;
+ }
+ gSaveContext.entranceIndex = Entrance_OverrideNextIndex(gSaveContext.entranceIndex);
+ }
+ pauseCtx->promptChoice = 0;
+ pauseCtx->unk_1EC = 7;
+ break;
+ }
+ }
+ break;
+ case 7:
+ if (interfaceCtx->unk_244 != 255) {
+ interfaceCtx->unk_244 += 10;
+ if (interfaceCtx->unk_244 >= 255) {
+ interfaceCtx->unk_244 = 255;
+ pauseCtx->state = 0;
+ R_UPDATE_RATE = 3;
+ R_PAUSE_MENU_MODE = 0;
+ func_800981B8(&play->objectCtx);
+ func_800418D0(&play->colCtx, play);
+ // Reset frame counter to prevent autosave on respawn
+ play->gameplayFrames = 0;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
+ gSaveContext.health = CVarGetInteger(CVAR_ENHANCEMENT("FullHealthSpawn"), 0)
+ ? gSaveContext.healthCapacity
+ : STARTING_HEALTH;
+ Audio_QueueSeqCmd(0xF << 28 | SEQ_PLAYER_BGM_MAIN << 24 | 0xA);
+ gSaveContext.healthAccumulator = 0;
+ gSaveContext.magicState = MAGIC_STATE_IDLE;
+ gSaveContext.prevMagicState = MAGIC_STATE_IDLE;
+ gSaveContext.magicCapacity = 0;
+ gSaveContext.magicFillTarget = gSaveContext.magic;
+ gSaveContext.magicLevel = gSaveContext.magic = 0;
+ play->state.running = false;
+ SET_NEXT_GAMESTATE(&play->state, Play_Init, PlayState);
+ }
+ }
+ break;
+
+ default:
+ *should = true;
+ }
+ Message_Update(play);
+}
+
+void RegisterBetterSave() {
+ saveMsg.Format();
+ continueOverworldMsg.Format();
+ continueDungeonMsg.Format();
+
+ REGISTER_VB_SHOULD(VB_LOAD_SAVE_MENU, {
+ PlayState* play = va_arg(args, PlayState*);
+ HandleSaveMenu(should, play);
+ });
+
+ REGISTER_VB_SHOULD(VB_DRAW_SAVE_MENU, { *should = false; });
+
+ COND_ID_HOOK(OnOpenText, TEXT_SAVE_MSG, true, [](uint16_t* textId, bool* loadFromMessageTable) {
+ saveMsg.LoadIntoFont();
+ *loadFromMessageTable = false;
+ return;
+ });
+
+ COND_ID_HOOK(OnOpenText, TEXT_CONTINUE_DUNGEON_MSG, true, [](uint16_t* textId, bool* loadFromMessageTable) {
+ continueDungeonMsg.LoadIntoFont();
+ *loadFromMessageTable = false;
+ return;
+ });
+
+ COND_ID_HOOK(OnOpenText, TEXT_CONTINUE_OVERWORLD_MSG, true, [](uint16_t* textId, bool* loadFromMessageTable) {
+ continueOverworldMsg.LoadIntoFont();
+ *loadFromMessageTable = false;
+ return;
+ });
+}
+
+static RegisterShipInitFunc initFunc(RegisterBetterSave, { CVAR_BETTERSAVE });
diff --git a/soh/soh/Enhancements/custom-message/CustomMessageManager.cpp b/soh/soh/Enhancements/custom-message/CustomMessageManager.cpp
index 5f5f806de..3e5d62b1c 100644
--- a/soh/soh/Enhancements/custom-message/CustomMessageManager.cpp
+++ b/soh/soh/Enhancements/custom-message/CustomMessageManager.cpp
@@ -806,6 +806,10 @@ std::string CustomMessage::TWO_WAY_CHOICE() {
return "\x1B"s;
}
+std::string CustomMessage::THREE_WAY_CHOICE() {
+ return "\x1C"s;
+}
+
bool CustomMessageManager::InsertCustomMessage(const std::string& tableID, uint16_t textID, CustomMessage messages) {
auto foundMessageTable = messageTables.find(tableID);
if (foundMessageTable == messageTables.end()) {
diff --git a/soh/soh/Enhancements/custom-message/CustomMessageManager.h b/soh/soh/Enhancements/custom-message/CustomMessageManager.h
index 37395e08f..bc646ab6a 100644
--- a/soh/soh/Enhancements/custom-message/CustomMessageManager.h
+++ b/soh/soh/Enhancements/custom-message/CustomMessageManager.h
@@ -62,6 +62,7 @@ class CustomMessage {
static std::string WAIT_FOR_INPUT();
static std::string PLAYER_NAME();
static std::string TWO_WAY_CHOICE();
+ static std::string THREE_WAY_CHOICE();
const std::string GetEnglish(MessageFormat format = MF_FORMATTED) const;
const std::string GetFrench(MessageFormat format = MF_FORMATTED) const;
diff --git a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h
index 205e44dc6..6867f5922 100644
--- a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h
+++ b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h
@@ -240,6 +240,9 @@ typedef enum {
TEXT_SHOOTING_GALLERY_MAN_COME_BACK_WITH_BOW = 0x9210,
TEXT_CARPET_SALESMAN_MYSTERIOUS = 0x9211,
TEXT_CARPET_SALESMAN_ARMS_DEALER = 0x9212,
+ TEXT_SAVE_MSG = 0x9213,
+ TEXT_CONTINUE_OVERWORLD_MSG = 0x9214,
+ TEXT_CONTINUE_DUNGEON_MSG = 0x9215,
} TextIDs;
#ifdef __cplusplus
diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h
index d953bb1a7..c550186bc 100644
--- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h
+++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h
@@ -3387,6 +3387,26 @@ typedef enum {
// #### `args`
// - None
VB_TEMP_B_RESTORE_SWORDLESS,
+
+ // #### `result`
+ // ```c
+ // true
+ // // ```
+ // Hook to override the save menu for a message box allowing you to
+ // Continue, Reset, and Reset to Spawn after saving (only from the pause menu, not the
+ // game over screen).
+ // #### `args`
+ // - `*PlayState`
+ VB_LOAD_SAVE_MENU,
+
+ // #### `result`
+ // ```c
+ // pauseCtx->state == 7
+ // ```
+ // Hook to override the drawing/loading textures for the save menu so that
+ // a textbox can be rendered instead. Pause screen only, Game Over version left
+ // intact.
+ VB_DRAW_SAVE_MENU,
} GIVanillaBehavior;
#endif
diff --git a/soh/soh/SohGui/SohMenuEnhancements.cpp b/soh/soh/SohGui/SohMenuEnhancements.cpp
index 7afe4ff04..27ccfe998 100644
--- a/soh/soh/SohGui/SohMenuEnhancements.cpp
+++ b/soh/soh/SohGui/SohMenuEnhancements.cpp
@@ -180,6 +180,12 @@ void SohMenu::AddMenuEnhancements() {
"When loading a save, places Link at the last entrance he went through.\n"
"This doesn't work if the save was made in grottos, fairy fountains, or dungeons."));
+ AddWidget(path, "Better Save Menu", WIDGET_CVAR_CHECKBOX)
+ .CVar(CVAR_ENHANCEMENT("BetterSaveMenu"))
+ .Options(CheckboxOptions().Tooltip(
+ "Replaces the authentic save menu with a textbox that asks Yes or No for saving,\n"
+ "then asks if you want to Continue, Reset, or Reset to Spawn."));
+
AddWidget(path, "Containers Match Contents", WIDGET_SEPARATOR_TEXT);
AddWidget(path, "Containers Match Contents", WIDGET_CVAR_CHECKBOX)
.CVar(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"))
diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c
index c0cea481b..9ee4922d8 100644
--- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c
+++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c
@@ -1764,7 +1764,8 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
Gfx_SetupDL_42Opa(gfxCtx);
- if ((pauseCtx->state == 7) || ((pauseCtx->state >= 8) && (pauseCtx->state < 0x12))) {
+ if ((GameInteractor_Should(VB_DRAW_SAVE_MENU, pauseCtx->state == 7, pauseCtx)) ||
+ ((pauseCtx->state >= 8) && (pauseCtx->state < 0x12))) {
KaleidoScope_UpdatePrompt(play);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA);
@@ -4397,109 +4398,112 @@ void KaleidoScope_Update(PlayState* play) {
break;
case 7:
- switch (pauseCtx->unk_1EC) {
- case 0:
- pauseCtx->unk_204 -= 314.0f / WREG(6);
- WREG(16) -= WREG(25) / WREG(6);
- WREG(17) -= WREG(26) / WREG(6);
- if (pauseCtx->unk_204 <= -628.0f) {
- pauseCtx->unk_204 = -628.0f;
- pauseCtx->unk_1EC = 1;
- }
- break;
+ if (GameInteractor_Should(VB_LOAD_SAVE_MENU, 1, play)) {
+ switch (pauseCtx->unk_1EC) {
+ case 0:
+ pauseCtx->unk_204 -= 314.0f / WREG(6);
+ WREG(16) -= WREG(25) / WREG(6);
+ WREG(17) -= WREG(26) / WREG(6);
+ if (pauseCtx->unk_204 <= -628.0f) {
+ pauseCtx->unk_204 = -628.0f;
+ pauseCtx->unk_1EC = 1;
+ }
+ break;
- case 1:
- if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
- if (pauseCtx->promptChoice != 0) {
+ case 1:
+ if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
+ if (pauseCtx->promptChoice != 0) {
+ Interface_SetDoAction(play, DO_ACTION_NONE);
+ gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] =
+ gSaveContext.buttonStatus[2] = gSaveContext.buttonStatus[3] = BTN_ENABLED;
+ gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] =
+ gSaveContext.buttonStatus[7] = gSaveContext.buttonStatus[8] = BTN_ENABLED;
+ gSaveContext.hudVisibilityMode = 0;
+ Interface_ChangeHudVisibilityMode(50);
+ pauseCtx->unk_1EC = 2;
+ WREG(2) = -6240;
+ YREG(8) = pauseCtx->unk_204;
+ func_800F64E0(0);
+ } else {
+ Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4,
+ &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
+ &gSfxDefaultReverb);
+ Play_PerformSave(play);
+ pauseCtx->unk_1EC = 4;
+ D_8082B25C = CVarGetInteger(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 0)
+ ? 3 /* 0.1 sec */
+ : 90 /* 3 secs */;
+ }
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_START) ||
+ CHECK_BTN_ALL(input->press.button, BTN_B)) {
Interface_SetDoAction(play, DO_ACTION_NONE);
+ pauseCtx->unk_1EC = 2;
+ WREG(2) = -6240;
+ YREG(8) = pauseCtx->unk_204;
+ func_800F64E0(0);
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
gSaveContext.buttonStatus[8] = BTN_ENABLED;
gSaveContext.hudVisibilityMode = 0;
Interface_ChangeHudVisibilityMode(50);
- pauseCtx->unk_1EC = 2;
+ }
+ break;
+
+ case 4:
+ if (CHECK_BTN_ALL(input->press.button, BTN_B) || CHECK_BTN_ALL(input->press.button, BTN_A) ||
+ CHECK_BTN_ALL(input->press.button, BTN_START) || (--D_8082B25C == 0)) {
+ Interface_SetDoAction(play, DO_ACTION_NONE);
+ gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
+ gSaveContext.buttonStatus[3] = BTN_ENABLED;
+ gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
+ gSaveContext.buttonStatus[8] = BTN_ENABLED;
+ gSaveContext.hudVisibilityMode = 0;
+ Interface_ChangeHudVisibilityMode(50);
+ pauseCtx->unk_1EC = 5;
WREG(2) = -6240;
YREG(8) = pauseCtx->unk_204;
func_800F64E0(0);
- } else {
- Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4,
- &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
- &gSfxDefaultReverb);
- Play_PerformSave(play);
- pauseCtx->unk_1EC = 4;
- D_8082B25C = CVarGetInteger(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 0) ? 3 /* 0.1 sec */
- : 90 /* 3 secs */;
}
- } else if (CHECK_BTN_ALL(input->press.button, BTN_START) ||
- CHECK_BTN_ALL(input->press.button, BTN_B)) {
- Interface_SetDoAction(play, DO_ACTION_NONE);
- pauseCtx->unk_1EC = 2;
- WREG(2) = -6240;
- YREG(8) = pauseCtx->unk_204;
- func_800F64E0(0);
- gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
- gSaveContext.buttonStatus[3] = BTN_ENABLED;
- gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
- gSaveContext.buttonStatus[8] = BTN_ENABLED;
- gSaveContext.hudVisibilityMode = 0;
- Interface_ChangeHudVisibilityMode(50);
- }
- break;
-
- case 4:
- if (CHECK_BTN_ALL(input->press.button, BTN_B) || CHECK_BTN_ALL(input->press.button, BTN_A) ||
- CHECK_BTN_ALL(input->press.button, BTN_START) || (--D_8082B25C == 0)) {
- Interface_SetDoAction(play, DO_ACTION_NONE);
- gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
- gSaveContext.buttonStatus[3] = BTN_ENABLED;
- gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
- gSaveContext.buttonStatus[8] = BTN_ENABLED;
- gSaveContext.hudVisibilityMode = 0;
- Interface_ChangeHudVisibilityMode(50);
- pauseCtx->unk_1EC = 5;
- WREG(2) = -6240;
- YREG(8) = pauseCtx->unk_204;
- func_800F64E0(0);
- }
- break;
+ break;
- case 3:
- case 6:
- pauseCtx->unk_204 += 314.0f / WREG(6);
- WREG(16) += WREG(25) / WREG(6);
- WREG(17) += WREG(26) / WREG(6);
- if (pauseCtx->unk_204 >= -314.0f) {
- pauseCtx->state = 6;
- pauseCtx->unk_1EC = 0;
- pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 = 0.0f;
- pauseCtx->unk_204 = -314.0f;
- }
- break;
+ case 3:
+ case 6:
+ pauseCtx->unk_204 += 314.0f / WREG(6);
+ WREG(16) += WREG(25) / WREG(6);
+ WREG(17) += WREG(26) / WREG(6);
+ if (pauseCtx->unk_204 >= -314.0f) {
+ pauseCtx->state = 6;
+ pauseCtx->unk_1EC = 0;
+ pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 = 0.0f;
+ pauseCtx->unk_204 = -314.0f;
+ }
+ break;
- case 2:
- case 5:
- if (pauseCtx->unk_204 != (YREG(8) + 160.0f)) {
- pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 +=
- 160.0f / WREG(6);
- pauseCtx->unk_204 += 160.0f / WREG(6);
- pauseCtx->infoPanelOffsetY -= 40 / WREG(6);
- WREG(16) -= WREG(25) / WREG(6);
- WREG(17) -= WREG(26) / WREG(6);
- XREG(5) -= 150 / WREG(6);
- pauseCtx->alpha -= (u16)(255 / WREG(6));
- if (pauseCtx->unk_204 == (YREG(8) + 160.0f)) {
- pauseCtx->alpha = 0;
+ case 2:
+ case 5:
+ if (pauseCtx->unk_204 != (YREG(8) + 160.0f)) {
+ pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 +=
+ 160.0f / WREG(6);
+ pauseCtx->unk_204 += 160.0f / WREG(6);
+ pauseCtx->infoPanelOffsetY -= 40 / WREG(6);
+ WREG(16) -= WREG(25) / WREG(6);
+ WREG(17) -= WREG(26) / WREG(6);
+ XREG(5) -= 150 / WREG(6);
+ pauseCtx->alpha -= (u16)(255 / WREG(6));
+ if (pauseCtx->unk_204 == (YREG(8) + 160.0f)) {
+ pauseCtx->alpha = 0;
+ }
+ } else {
+ pauseCtx->debugState = 0;
+ pauseCtx->state = 0x13;
+ pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 = 160.0f;
+ pauseCtx->namedItem = PAUSE_ITEM_NONE;
+ pauseCtx->unk_1E4 = 0;
+ pauseCtx->unk_204 = -434.0f;
}
- } else {
- pauseCtx->debugState = 0;
- pauseCtx->state = 0x13;
- pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 = 160.0f;
- pauseCtx->namedItem = PAUSE_ITEM_NONE;
- pauseCtx->unk_1E4 = 0;
- pauseCtx->unk_204 = -434.0f;
- }
- break;
+ break;
+ }
}
break;