summaryrefslogtreecommitdiff
path: root/src/code/z_pause.c
diff options
context:
space:
mode:
authorDerek Hensley <hensley.derek58@gmail.com>2021-12-19 11:54:52 -0800
committerGitHub <noreply@github.com>2021-12-19 19:54:52 +0000
commit98ba231fb016a7158cc14af52c96ab408644d317 (patch)
tree4bb70c1e248b3a1f00415369962ce9049f873434 /src/code/z_pause.c
parente579bf558708c8b3768be5954b01f59bd4fed1aa (diff)
pause (Frame Advance) OK (#455)
* Matched * Rename and format * typo * Missed renames * Revert "Missed renames" This reverts commit 64d9f7046407eac71b849420457968e3b38fc4d8. * Revert "typo" This reverts commit 81696364d3db71b6085fda1aa99855def390628e. * Revert "Rename and format" This reverts commit aec7d245e896777d70eb7024c336f76ed2a32c7f. * Rename functions * Add header explaining frame advance * Header * Format
Diffstat (limited to 'src/code/z_pause.c')
-rw-r--r--src/code/z_pause.c38
1 files changed, 36 insertions, 2 deletions
diff --git a/src/code/z_pause.c b/src/code/z_pause.c
index 44be6238a..bb5b33cf2 100644
--- a/src/code/z_pause.c
+++ b/src/code/z_pause.c
@@ -1,5 +1,39 @@
+/*
+ * File: z_pause.c
+ * Description: Frame Advance debug feature
+ *
+ * This allows you to advance through the game one frame at a time on command.
+ * To advance a frame, hold Z and press R on the specified controller (see z_play).
+ * Holding Z and R will advance a frame every half second.
+ *
+ * Note: While the system is fully hooked up, there is no way to enable it in game
+ * Instead one would have to add something like:
+ *
+ * if (CHECK_BTN_ALL(input->cur.button, BTN_R) && CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) {
+ * frameAdvCtx->enabled = !frameAdvCtx->enabled;
+ * }
+ *
+ * to the start of FrameAdvance_Update, which would allow the system to be toggled on and off by holding R
+ * and pressing Dpad Down on the specified controller.
+ *
+ * Note2: Controllers 2-4's inputs are normally zeroed out, so this would also need to be fixed to use frame advance
+ */
#include "global.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_pause/func_80122660.s")
+void FrameAdvance_Init(FrameAdvanceContext* frameAdvCtx) {
+ frameAdvCtx->timer = 0;
+ frameAdvCtx->enabled = false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_pause/func_80122670.s")
+/*
+ * Returns true when frame advance is not active (game will run normally)
+ */
+s32 FrameAdvance_Update(FrameAdvanceContext* frameAdvCtx, Input* input) {
+ if (!frameAdvCtx->enabled || (CHECK_BTN_ALL(input->cur.button, BTN_Z) &&
+ (CHECK_BTN_ALL(input->press.button, BTN_R) ||
+ (CHECK_BTN_ALL(input->cur.button, BTN_R) && (++frameAdvCtx->timer >= 9))))) {
+ frameAdvCtx->timer = 0;
+ return true;
+ }
+ return false;
+}