Files
tp/src/f/f_pc/f_pc_pause.cpp
T
2020-12-26 13:03:37 -05:00

55 lines
1.5 KiB
C++

#include "f/f_pc/f_pc_pause.h"
#include "f/f_pc/f_pc_base.h"
#include "f/f_pc/f_pc_layer_iter.h"
#include "f/f_pc/f_pc_node.h"
extern "C" {
// f_pc_node::g_fpcNd_type
extern int lbl_80450D40;
#if NON_MATCHING
bool fpcPause_IsEnable(void* pProcess, u8 flag) {
base_process_class* pProc = (base_process_class*)pProcess;
// extra addic/subfe?
return (pProc->mPauseFlag & flag) == flag;
}
#else
asm bool fpcPause_IsEnable(void* pProcess, u8 flag) {
nofralloc
#include "f/f_pc/f_pc_pause/asm/func_80023844.s"
}
#endif
int fpcPause_Enable(void* pProcess, u8 flag) {
base_process_class* pProc = (base_process_class*)pProcess;
pProc->mPauseFlag |= flag;
if (fpcBs_Is_JustOfType(lbl_80450D40, pProc->mSubType)) {
process_node_class* pNode = (process_node_class*)pProc;
fpcLyIt_OnlyHere(&pNode->mLayer, (cNdIt_MethodFunc)fpcPause_Enable, (void*)(flag & 0xFF));
}
return 1;
}
// According to symbols, they used u8 instead of u32, but I can't get a match with u8 here. This is
// the best I got...
int fpcPause_Disable(void* pProcess, u32 flag) {
base_process_class* pProc = (base_process_class*)pProcess;
pProc->mPauseFlag &= (0xFF - flag) & 0xFF;
if (fpcBs_Is_JustOfType(lbl_80450D40, pProc->mSubType)) {
process_node_class* pNode = (process_node_class*)pProc;
fpcLyIt_OnlyHere(&pNode->mLayer, (cNdIt_MethodFunc)fpcPause_Disable, (void*)(flag & 0xFF));
}
return 1;
}
void fpcPause_Init(void* pProcess) {
base_process_class* pProc = (base_process_class*)pProcess;
pProc->mPauseFlag = 0;
}
}