#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; } }