mirror of
https://github.com/zeldaret/mm.git
synced 2026-07-09 13:45:23 -04:00
pause (Frame Advance) OK (#455)
* Matched * Rename and format * typo * Missed renames * Revert "Missed renames" This reverts commit64d9f70464. * Revert "typo" This reverts commit81696364d3. * Revert "Rename and format" This reverts commitaec7d245e8. * Rename functions * Add header explaining frame advance * Header * Format
This commit is contained in:
+36
-2
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user