summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
Diffstat (limited to 'src/code')
-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;
+}