Files
tp/src/f_pc/f_pc_base.cpp
T
TakaRikka 114582643f Kytag00 / Vrbox2 work, some cphase / kankyo doc (#1886)
* kytag00 work

* d_a_vrbox2 close to done

* rename cPhase enum values

* some enums from noclip / kankyo doc

* remove asm

* use macro

* uncomment ok-check.yml
2023-08-16 14:32:40 -06:00

134 lines
4.4 KiB
C++

/**
* f_pc_base.cpp
* Framework - Process Base
*/
#include "f_pc/f_pc_base.h"
#include "SSystem/SComponent/c_malloc.h"
#include "SSystem/SComponent/c_phase.h"
#include "SSystem/SStandard/s_basic.h"
#include "f_pc/f_pc_layer.h"
#include "f_pc/f_pc_method.h"
#include "f_pc/f_pc_pause.h"
#include "f_pc/f_pc_profile.h"
#include "global.h"
/* 8002064C-8002065C 0010+00 s=0 e=14 z=0 None .text fpcBs_Is_JustOfType__Fii */
s32 fpcBs_Is_JustOfType(int i_typeA, int i_typeB) {
return checkEqual(i_typeA, i_typeB); // return pType2 == pType1 matches when return type is bool
}
/* ############################################################################################## */
/* 80450D00-80450D04 0004+00 s=1 e=0 z=0 None .sbss g_fpcBs_type */
static int g_fpcBs_type;
/* 8002065C-8002069C 0040+00 s=1 e=5 z=0 None .text fpcBs_MakeOfType__FPi */
s32 fpcBs_MakeOfType(int* i_type) {
static s32 t_type = 0x9130000;
if (*i_type == 0) {
*i_type = ++t_type;
}
return *i_type;
}
/* 8002069C-800206C4 0028+00 s=0 e=2 z=0 None .text fpcBs_MakeOfId__Fv */
s32 fpcBs_MakeOfId() {
static s32 process_id = 1;
return process_id++;
}
/* 800206C4-80020720 005C+00 s=0 e=1 z=0 None .text fpcBs_Execute__FP18base_process_class */
s32 fpcBs_Execute(base_process_class* i_proc) {
s32 result;
layer_class* savedLayer = fpcLy_CurrentLayer();
fpcLy_SetCurrentLayer(i_proc->mLyTg.mpLayer);
result = fpcMtd_Execute(i_proc->mpPcMtd, i_proc);
fpcLy_SetCurrentLayer(savedLayer);
return result;
}
/* 80020720-80020760 0040+00 s=2 e=0 z=0 None .text fpcBs_DeleteAppend__FP18base_process_class
*/
void fpcBs_DeleteAppend(base_process_class* i_proc) {
if (i_proc->mpUserData != NULL) {
cMl::free(i_proc->mpUserData);
i_proc->mpUserData = NULL;
}
}
/* 80020760-800207BC 005C+00 s=0 e=1 z=0 None .text fpcBs_IsDelete__FP18base_process_class */
s32 fpcBs_IsDelete(base_process_class* i_proc) {
s32 result;
layer_class* savedLayer = fpcLy_CurrentLayer();
fpcLy_SetCurrentLayer(i_proc->mLyTg.mpLayer);
result = fpcMtd_IsDelete(i_proc->mpPcMtd, i_proc);
fpcLy_SetCurrentLayer(savedLayer);
return result;
}
/* 800207BC-80020820 0064+00 s=0 e=2 z=0 None .text fpcBs_Delete__FP18base_process_class */
s32 fpcBs_Delete(base_process_class* i_proc) {
s32 deleteResult = fpcMtd_Delete(i_proc->mpPcMtd, i_proc);
if (deleteResult == 1) {
fpcBs_DeleteAppend(i_proc);
i_proc->mBsType = 0;
cMl::free(i_proc);
}
return deleteResult;
}
/* 80020820-8002091C 00FC+00 s=0 e=2 z=0 None .text fpcBs_Create__FsUiPv */
base_process_class* fpcBs_Create(s16 i_procTypeID, unsigned int i_procID, void* i_data) {
process_profile_definition* procProfDef;
base_process_class* procClass;
u32 size;
procProfDef = (process_profile_definition*)fpcPf_Get(i_procTypeID);
size = procProfDef->mSize + procProfDef->mSizeOther;
procClass = (base_process_class*)cMl::memalignB(-4, size);
if (procClass == NULL) {
return NULL;
} else {
sBs_ClearArea(procClass, size);
fpcLyTg_Init(&procClass->mLyTg, procProfDef->mLayerID, procClass);
fpcLnTg_Init(&procClass->mLnTg, procClass);
fpcDtTg_Init(&procClass->mDtTg, procClass);
fpcPi_Init(&procClass->mPi, procClass, procProfDef->mLayerID, procProfDef->mListID,
procProfDef->mListPrio);
procClass->mInitState = 0;
procClass->mUnk0 = 0;
procClass->mBsPcId = i_procID;
procClass->mBsTypeId = i_procTypeID;
procClass->mBsType = fpcBs_MakeOfType(&g_fpcBs_type);
procClass->mProcName = procProfDef->mProcName;
fpcPause_Init(procClass);
procClass->mpPcMtd = procProfDef->mSubMtd;
procClass->mpProf = procProfDef;
procClass->mpUserData = i_data;
procClass->mParameters = procProfDef->mParameters;
return procClass;
}
}
s32 fpcBs_SubCreate(base_process_class* i_proc) {
switch (fpcMtd_Create(i_proc->mpPcMtd, i_proc)) {
case 2:
case cPhs_COMPLEATE_e:
fpcBs_DeleteAppend(i_proc);
i_proc->mUnk2 = 2;
return 2;
case cPhs_INIT_e:
case 1:
i_proc->mInitState = 1;
i_proc->mUnk2 = 0;
return cPhs_INIT_e;
case 3:
i_proc->mUnk2 = 3;
return 3;
case cPhs_ERROR_e:
default:
i_proc->mUnk2 = 5;
return cPhs_ERROR_e;
}
}