summaryrefslogtreecommitdiff
path: root/src/f_pc/f_pc_pause.cpp
diff options
context:
space:
mode:
authorlepelog <lepelog@users.noreply.github.com>2021-04-01 12:06:29 +0200
committerlepelog <lepelog@users.noreply.github.com>2021-04-01 12:06:29 +0200
commit53c6aa6c8b50d95e89f64db70d0cc08fb4111a93 (patch)
tree20ce5067caef7892c2c9bb043b10918c15dd7868 /src/f_pc/f_pc_pause.cpp
parent87bc0e711b4fb2f990f3c37ca681be1fc027d554 (diff)
ported over f_pc
Diffstat (limited to 'src/f_pc/f_pc_pause.cpp')
-rw-r--r--src/f_pc/f_pc_pause.cpp86
1 files changed, 33 insertions, 53 deletions
diff --git a/src/f_pc/f_pc_pause.cpp b/src/f_pc/f_pc_pause.cpp
index 1761eb9ee6..f3c6345f62 100644
--- a/src/f_pc/f_pc_pause.cpp
+++ b/src/f_pc/f_pc_pause.cpp
@@ -6,78 +6,58 @@
#include "f_pc/f_pc_pause.h"
#include "dol2asm.h"
#include "dolphin/types.h"
-
-//
-// Types:
-//
-
-struct layer_class {};
-
-//
-// Forward References:
-//
-
-void fpcPause_IsEnable(void*, u8);
-void fpcPause_Enable(void*, u8);
-void fpcPause_Disable(void*, u8);
-void fpcPause_Init(void*);
-
-extern "C" void fpcPause_IsEnable__FPvUc();
-extern "C" void fpcPause_Enable__FPvUc();
-extern "C" void fpcPause_Disable__FPvUc();
-extern "C" void fpcPause_Init__FPv();
-
-//
-// External References:
-//
-
-void fpcBs_Is_JustOfType(int, int);
-void fpcLyIt_OnlyHere(layer_class*, int (*)(void*, void*), void*);
-
-extern "C" void fpcBs_Is_JustOfType__Fii();
-extern "C" void fpcLyIt_OnlyHere__FP11layer_classPFPvPv_iPv();
-extern "C" extern u8 g_fpcNd_type[4 + 4 /* padding */];
+#include "f_pc/f_pc_layer_iter.h"
//
// Declarations:
//
/* 80023844-80023868 0024+00 s=0 e=3 z=0 None .text fpcPause_IsEnable__FPvUc */
+#ifdef NON_MATCHING
+s32 fpcPause_IsEnable(void* pProcess, u8 flag) {
+ base_process_class* pProc = (base_process_class*)pProcess;
+ // extra addic/subfe?
+ return (pProc->mPauseFlag & flag) == flag;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void fpcPause_IsEnable(void* param_0, u8 param_1) {
+asm s32 fpcPause_IsEnable(void* param_0, u8 param_1) {
nofralloc
#include "asm/f_pc/f_pc_pause/fpcPause_IsEnable__FPvUc.s"
}
#pragma pop
+#endif
/* 80023868-800238D4 006C+00 s=0 e=1 z=0 None .text fpcPause_Enable__FPvUc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void fpcPause_Enable(void* param_0, u8 param_1) {
- nofralloc
-#include "asm/f_pc/f_pc_pause/fpcPause_Enable__FPvUc.s"
+s32 fpcPause_Enable(void* pProcess, u8 flag) {
+ base_process_class* pProc = (base_process_class*)pProcess;
+ pProc->mPauseFlag |= flag;
+
+ if (fpcBs_Is_JustOfType(g_fpcNd_type, pProc->mSubType)) {
+ process_node_class* pNode = (process_node_class*)pProc;
+ fpcLyIt_OnlyHere(&pNode->mLayer, (fpcLyIt_OnlyHereFunc)fpcPause_Enable,
+ (void*)(flag & 0xFF));
+ }
+ return 1;
}
-#pragma pop
/* 800238D4-80023948 0074+00 s=0 e=1 z=0 None .text fpcPause_Disable__FPvUc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void fpcPause_Disable(void* param_0, u8 param_1) {
- nofralloc
-#include "asm/f_pc/f_pc_pause/fpcPause_Disable__FPvUc.s"
+s32 fpcPause_Disable(void* pProcess, u8 flag) {
+ base_process_class* pProc = (base_process_class*)pProcess;
+ pProc->mPauseFlag &= (0xFF - flag) & 0xFF;
+
+ if (fpcBs_Is_JustOfType(g_fpcNd_type, pProc->mSubType)) {
+ process_node_class* pNode = (process_node_class*)pProc;
+ fpcLyIt_OnlyHere(&pNode->mLayer, (fpcLyIt_OnlyHereFunc)fpcPause_Disable, (void*)flag);
+ }
+
+ return 1;
}
-#pragma pop
/* 80023948-80023954 000C+00 s=0 e=1 z=0 None .text fpcPause_Init__FPv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void fpcPause_Init(void* param_0) {
- nofralloc
-#include "asm/f_pc/f_pc_pause/fpcPause_Init__FPv.s"
+void fpcPause_Init(void* pProcess) {
+ base_process_class* pProc = (base_process_class*)pProcess;
+ pProc->mPauseFlag = 0;
}
-#pragma pop