From d39c604b83c17cf100fc97f58ea25c8a3d999b7a Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 26 Sep 2023 19:26:04 -0400 Subject: [PATCH 1/2] Fix various regswaps caused by casting --- configure.py | 2 +- include/f_op/f_op_actor_mng.h | 6 +-- src/d/actor/d_a_nh.cpp | 2 +- src/d/actor/d_a_obj_Ygush00.cpp | 12 ++--- src/d/actor/d_a_obj_barrier.cpp | 78 +++++++++++++++++---------------- src/d/d_bg_s_movebg_actor.cpp | 12 ++--- src/d/d_kankyo.cpp | 8 ++-- src/d/d_kankyo_wether.cpp | 11 +++-- 8 files changed, 61 insertions(+), 70 deletions(-) diff --git a/configure.py b/configure.py index c074ce8e5..8e68d2063 100644 --- a/configure.py +++ b/configure.py @@ -372,7 +372,7 @@ config.libs = [ Object(NonMatching, "d/d_path.cpp"), Object(NonMatching, "d/d_drawlist.cpp"), Object(Matching, "d/d_kankyo_data.cpp"), - Object(NonMatching, "d/d_kankyo_wether.cpp"), + Object(Matching, "d/d_kankyo_wether.cpp"), Object(NonMatching, "d/d_kankyo_rain.cpp"), Object(Matching, "d/d_kankyo_demo.cpp"), Object(NonMatching, "d/d_detect.cpp"), diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index a9276e256..b0d8b60fd 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -62,9 +62,9 @@ class dKy_tevstr_c; typedef int (*heapCallbackFunc)(fopAc_ac_c*); typedef int (*createFunc)(void*); -struct DOUBLE_POS { - double x, y, z; -}; +// struct DOUBLE_POS { +// double x, y, z; +// }; inline s8 fopAcM_GetRoomNo(fopAc_ac_c* pActor) { return pActor->current.roomNo; diff --git a/src/d/actor/d_a_nh.cpp b/src/d/actor/d_a_nh.cpp index 8a8f0bd6e..09db19115 100644 --- a/src/d/actor/d_a_nh.cpp +++ b/src/d/actor/d_a_nh.cpp @@ -549,7 +549,7 @@ void daNh_c::playBrkAnm() { /* 800FACE8-800FAE1C .text draw__6daNh_cFv */ BOOL daNh_c::draw() { - g_env_light.settingTevStruct(0, ¤t.pos, &mTevStr); + g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &mTevStr); g_env_light.setLightTevColorType(mpModel, &mTevStr); J3DModelData* modelData = mpModel->getModelData(); diff --git a/src/d/actor/d_a_obj_Ygush00.cpp b/src/d/actor/d_a_obj_Ygush00.cpp index 631871a20..107a0955c 100644 --- a/src/d/actor/d_a_obj_Ygush00.cpp +++ b/src/d/actor/d_a_obj_Ygush00.cpp @@ -62,13 +62,9 @@ bool daObjYgush00_c::create_heap() { static u32 btk_table[] = { 0x0E, 0x0D, 0x0D, 0x0D }; static u32 bck_table[] = { 0x06, 0x05, 0x05, 0x05 }; - J3DModelData * pModelData; bool ret = true; - // TODO regswap - // r29 -> r30: g_dComIfG_gameInfo.mResControl.mObjectInfo / btkRet - // r30 -> r29: pModelData - pModelData = (J3DModelData *)dComIfG_getObjectRes(l_arcname, mdl_table[mType]); + void* pModelData = dComIfG_getObjectRes(l_arcname, mdl_table[mType]); J3DAnmTextureSRTKey * pBtk = (J3DAnmTextureSRTKey *)dComIfG_getObjectRes(l_arcname, btk_table[mType]); J3DAnmTransform * pBck = (J3DAnmTransform *)dComIfG_getObjectRes(l_arcname, bck_table[mType]); @@ -76,9 +72,9 @@ bool daObjYgush00_c::create_heap() { JUT_ASSERT(207, 0); ret = false; } else { - mpModel = mDoExt_J3DModel__create(pModelData, 0x80000, 0x11000222); - s32 btkRet = mBtkAnm.init(pModelData, pBtk, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); - s32 bckRet = mBckAnm.init(pModelData, pBck, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false); + mpModel = mDoExt_J3DModel__create((J3DModelData*)pModelData, 0x80000, 0x11000222); + s32 btkRet = mBtkAnm.init((J3DModelData*)pModelData, pBtk, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); + s32 bckRet = mBckAnm.init((J3DModelData*)pModelData, pBck, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false); if (!mpModel || !btkRet || !bckRet) ret = false; diff --git a/src/d/actor/d_a_obj_barrier.cpp b/src/d/actor/d_a_obj_barrier.cpp index a54763827..69d80200e 100644 --- a/src/d/actor/d_a_obj_barrier.cpp +++ b/src/d/actor/d_a_obj_barrier.cpp @@ -173,12 +173,12 @@ static cXyz l_ef_scale; // NONMATCHING - load order flipped void daObjBarrier_c::init_mtx() { mAnm.mpModel->setBaseScale(mScale); - mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(shape_angle.y); mAnm.mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); mDoMtx_stack_c::scaleM(mScale); - mDoMtx_copy(mDoMtx_stack_c::get(), mBgMtx); + cMtx_copy(mDoMtx_stack_c::get(), mBgMtx); } /* 0000018C-000001B0 .text solidHeapCB__14daObjBarrier_cFP10fopAc_ac_c */ @@ -187,22 +187,23 @@ int daObjBarrier_c::solidHeapCB(fopAc_ac_c* i_this) { } /* 000001B0-00000340 .text init__18daObjBarrier_anm_cFv */ -// NONMATCHING - reg alloc bool daObjBarrier_anm_c::init() { bool rt = true; - J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 10); - J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 18); - J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 14); + void* modelData = dComIfG_getObjectRes(l_arcName, 10); + void* pbtk = dComIfG_getObjectRes(l_arcName, 18); + void* pbrk = dComIfG_getObjectRes(l_arcName, 14); if (modelData == NULL || pbtk == NULL || pbrk == NULL) { JUT_PANIC(407); rt = false; } else { - mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x1000200); - BOOL btk_init = - mBtk.init(modelData, pbtk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); - BOOL brk_init = - mBrk.init(modelData, pbrk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); + mpModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x1000200); + BOOL btk_init = mBtk.init( + (J3DModelData*)modelData, (J3DAnmTextureSRTKey*)pbtk, + TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); + BOOL brk_init = mBrk.init( + (J3DModelData*)modelData, (J3DAnmTevRegKey*)pbrk, + TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); if (mpModel == NULL || !btk_init || !brk_init) { rt = false; @@ -315,11 +316,10 @@ void daObjBarrier_c::brkAnmPlay() { } /* 00000884-000009F0 .text break_start_wait_proc__14daObjBarrier_cFv */ -// NONMATCHING - regswap void daObjBarrier_c::break_start_wait_proc() { // 0x3980: Saw Hyrule 3 Electric Barrier Demo if (dComIfGs_isEventBit(0x3980) == true) { - daPy_py_c* player_p = daPy_getPlayerActorClass(); + daPy_py_c* player_p = (daPy_py_c*)daPy_getPlayerActorClass(); if ((player_p->current.pos - current.pos).absXZ() >= 8800.0f && dComIfGs_getSelectEquip(0) == MASTER_SWORD_EX) @@ -419,7 +419,7 @@ bool daObjBarrier_ef_c::checkHitActor(fopAc_ac_c* i_checkActor) { } /* 00000D5C-000011B8 .text birth__17daObjBarrier_ef_cFP10fopAc_ac_cf4cXyz4cXyzi */ -// NONMATCHING - regalloc +// NONMATCHING void daObjBarrier_ef_c::birth(fopAc_ac_c* i_hitActor, f32 i_radius, cXyz i_center, cXyz i_hitPos, int i_isNoEff) { if (!i_isNoEff || !checkHitActor(i_hitActor)) { @@ -442,7 +442,7 @@ void daObjBarrier_ef_c::birth(fopAc_ac_c* i_hitActor, f32 i_radius, cXyz i_cente if (effect_idx == -1) { f32 var_f1 = -1.0f; - for (int i = 0; i < 4; i++) { + for (int i = 0; i < 4; i++) { // nonmatching if (mBtk[i].getFrame() > var_f1) { var_f1 = mBtk[i].getFrame(); effect_idx = i; @@ -466,21 +466,21 @@ void daObjBarrier_ef_c::birth(fopAc_ac_c* i_hitActor, f32 i_radius, cXyz i_cente J3DModelData* modelData = mpModel[effect_idx]->getModelData(); - J3DAnmTextureSRTKey* btk_anm_p = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 19); + void* btk_anm_p = dComIfG_getObjectRes(l_arcName, 19); JUT_ASSERT(937, btk_anm_p != 0); - J3DAnmTransform* bck_anm_p = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 7); + void* bck_anm_p = dComIfG_getObjectRes(l_arcName, 7); JUT_ASSERT(942, bck_anm_p != 0); - J3DAnmTevRegKey* brk_anm_p = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 15); + void* brk_anm_p = dComIfG_getObjectRes(l_arcName, 15); JUT_ASSERT(947, brk_anm_p != 0); - mBtk[effect_idx].init(modelData, btk_anm_p, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, - true, 0); - mBck[effect_idx].init(modelData, bck_anm_p, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, - true); - mBrk[effect_idx].init(modelData, brk_anm_p, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, - true, 0); + mBtk[effect_idx].init(modelData, (J3DAnmTextureSRTKey*)btk_anm_p, TRUE, + J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, true, 0); + mBck[effect_idx].init(modelData, (J3DAnmTransform*)bck_anm_p, TRUE, + J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, true); + mBrk[effect_idx].init(modelData, (J3DAnmTevRegKey*)brk_anm_p, TRUE, + J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, true, 0); mDoMtx_stack_c::transS(pos.x, pos.y, pos.z); mDoMtx_stack_c::ZXYrotM(0, angle.y, 0); @@ -491,28 +491,30 @@ void daObjBarrier_ef_c::birth(fopAc_ac_c* i_hitActor, f32 i_radius, cXyz i_cente } /* 000011B8-000013E0 .text init__17daObjBarrier_ef_cFv */ -// NONMATCHING - regalloc bool daObjBarrier_ef_c::init() { bool rt = true; - J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 11); - J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 19); - J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 7); - J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 15); + void* modelData = dComIfG_getObjectRes(l_arcName, 11); + void* pbtk = dComIfG_getObjectRes(l_arcName, 19); + void* pbck = dComIfG_getObjectRes(l_arcName, 7); + void* pbrk = dComIfG_getObjectRes(l_arcName, 15); if (modelData == NULL || pbtk == NULL || pbck == NULL || pbrk == NULL) { JUT_PANIC(1016); rt = false; } else { for (int i = 0; i < 4; i++) { - mpModel[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x5020200); + mpModel[i] = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x5020200); setDummyTexture(i); - BOOL btk_init = mBtk[i].init(modelData, pbtk, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, - -1, false, 0); - BOOL bck_init = - mBck[i].init(modelData, pbck, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, false); - BOOL brk_init = mBrk[i].init(modelData, pbrk, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, - -1, false, 0); + BOOL btk_init = mBtk[i].init( + (J3DModelData*)modelData, (J3DAnmTextureSRTKey*)pbtk, + TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false, 0); + BOOL bck_init = mBck[i].init( + (J3DModelData*)modelData, (J3DAnmTransform*)pbck, + TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, false); + BOOL brk_init = mBrk[i].init( + (J3DModelData*)modelData, (J3DAnmTevRegKey*)pbrk, + TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, false, 0); if (mpModel[i] == NULL || !btk_init || !bck_init || !brk_init) { rt = false; @@ -549,7 +551,6 @@ void daObjBarrier_ef_c::execute() { } /* 000014E0-00001638 .text draw__17daObjBarrier_ef_cFv */ -// NONMATCHING - load order void daObjBarrier_ef_c::draw() { J3DModel* model_p; @@ -558,7 +559,8 @@ void daObjBarrier_ef_c::draw() { if (((active_flags >> i) & 1)) { model_p = mpModel[i]; - mBtk[i].entry(model_p->getModelData(), getBtkFrame(i)); + J3DModelData* modelData = model_p->getModelData(); + mBtk[i].entry(modelData, getBtkFrame(i)); mBck[i].entry(model_p->getModelData(), (s16)getBtkFrame(i)); mBrk[i].entry(model_p->getModelData(), (s16)getBtkFrame(i)); diff --git a/src/d/d_bg_s_movebg_actor.cpp b/src/d/d_bg_s_movebg_actor.cpp index b745e0710..dae989c2a 100644 --- a/src/d/d_bg_s_movebg_actor.cpp +++ b/src/d/d_bg_s_movebg_actor.cpp @@ -31,17 +31,11 @@ int dBgS_MoveBgActor::MoveBGCreateHeap() { } mpBgW = new dBgW(); - if (mpBgW != NULL) { - cBgD_t* res = (cBgD_t*)dComIfG_getObjectRes(m_name, m_dzb_id); - if (!mpBgW->Set(res, cBgW::MOVE_BG_e, &mBgMtx)) { - if (m_set_func != NULL) { - mpBgW->SetCrrFunc(m_set_func); - } - } else { - goto RET; // probably fake match, clean up later + if (mpBgW && !mpBgW->Set((cBgD_t*)dComIfG_getObjectRes(m_name, m_dzb_id), cBgW::MOVE_BG_e, &mBgMtx)) { + if (m_set_func != NULL) { + mpBgW->SetCrrFunc(m_set_func); } } else { - RET: mpBgW = NULL; return 0; } diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index 4da5c6f7a..b39ab1b5e 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -1746,7 +1746,6 @@ void dScnKy_env_light_c::SetBaseLight() { } /* 80193EE4-801940EC .text exeKankyo__18dScnKy_env_light_cFv */ -// NONMATCHING - one block with regswaps void dScnKy_env_light_c::exeKankyo() { g_env_light.mColPatMode = g_env_light.mColPatModeGather; @@ -1788,10 +1787,11 @@ void dScnKy_env_light_c::exeKankyo() { g_env_light.mColpatPrevGather = 0xFF; } - if (g_env_light.mColpatCurrGather != 0xFF) { - g_env_light.mColpatCurr = g_env_light.mColpatCurrGather; + u8 currGather = g_env_light.mColpatCurrGather; + if (currGather != 0xFF) { + g_env_light.mColpatCurr = currGather; g_env_light.mColpatCurrGather = 0xFF; - g_env_light.mColpatWeather = g_env_light.mColpatCurrGather; + g_env_light.mColpatWeather = currGather; } if (g_env_light.mColPatBlendGather >= 0.0f) { diff --git a/src/d/d_kankyo_wether.cpp b/src/d/d_kankyo_wether.cpp index 64883b07e..a46fd2c51 100644 --- a/src/d/d_kankyo_wether.cpp +++ b/src/d/d_kankyo_wether.cpp @@ -754,9 +754,8 @@ void wether_move_moya() { } /* 800891A8-80089698 .text wether_move_vrkumo__Fv */ -// NONMATCHING - almost, regswap void wether_move_vrkumo() { - camera_class* camera_p = dComIfGp_getCamera(0); + camera_process_class* camera_p = dComIfGp_getCamera(0); static cXyz r09o(-180000.0f, 750.0f, -200000.0f); if (strcmp(dComIfGp_getStartStageName(), "Name") != 0) { @@ -1188,7 +1187,8 @@ void dKyw_pntwind_get_info(cXyz* param_0, cXyz* i_dir, f32* i_power) { *i_power = 0.0f; WIND_INFLUENCE* influence; - for (int i = 0; i < ARRAY_SIZE(g_env_light.mpWindInfluence); i++) { + s32 influence_count = ARRAY_SIZE(g_env_light.mpWindInfluence); + for (int i = 0; i < influence_count; i++) { influence = g_env_light.mpWindInfluence[i]; if (influence != NULL) { f32 dist = param_0->abs(influence->mPos); @@ -1291,7 +1291,6 @@ cXyz dKyw_get_AllWind_vecpow(cXyz* param_0) { } /* 8008A7D0-8008A870 .text dKyw_tact_wind_set__Fss */ -// NONMATCHING - small regswap... void dKyw_tact_wind_set(s16 i_windX, s16 i_windY) { dScnKy_env_light_c& env_light = dKy_getEnvlight(); cXyz* wind_vec = dKyw_get_wind_vec(); @@ -1301,10 +1300,10 @@ void dKyw_tact_wind_set(s16 i_windX, s16 i_windY) { dComIfGs_setWindX(i_windX); dComIfGs_setWindY(i_windY); - s16 temp_r29 = -(cM_atan2s(wind_vec->x, wind_vec->z) + 0x4000); + i_windY = -(cM_atan2s(wind_vec->x, wind_vec->z) + 0x4000); env_light.mWind.mTactWindAngleFlags = 1; - if ((s16)(temp_r29 - env_light.mWind.mTactWindAngleY) < 0) { + if ((s16)(i_windY - env_light.mWind.mTactWindAngleY) < 0) { env_light.mWind.mTactWindAngleFlags |= 0x80; } } From cfffd76895bdb55c20908c63d72193b7448482f9 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 26 Sep 2023 20:05:36 -0400 Subject: [PATCH 2/2] d_a_mbdoor OK --- configure.py | 2 +- include/d/actor/d_a_player.h | 1 + include/d/d_com_inf_game.h | 4 + include/d/d_demo.h | 28 ++ src/d/actor/d_a_mbdoor.cpp | 600 +++++++++++++++++++++++++++++++---- 5 files changed, 570 insertions(+), 65 deletions(-) diff --git a/configure.py b/configure.py index 8e68d2063..de8a6f6bc 100644 --- a/configure.py +++ b/configure.py @@ -1435,7 +1435,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_lstair"), ActorRel(NonMatching, "d_a_machine"), ActorRel(NonMatching, "d_a_mant"), - ActorRel(NonMatching, "d_a_mbdoor"), + ActorRel(Matching, "d_a_mbdoor"), ActorRel(NonMatching, "d_a_mgameboard"), ActorRel(NonMatching, "d_a_mmusic"), ActorRel(NonMatching, "d_a_mo2"), diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 21be71793..b622bfc33 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -93,6 +93,7 @@ public: s16 getBodyAngleX() { return mBodyAngle.x; } s16 getBodyAngleY() { return mBodyAngle.y; } + void changeDemoMoveAngle(s16 angle) { mDemo.setMoveAngle(angle); } virtual MtxP getLeftHandMatrix() = 0; virtual MtxP getRightHandMatrix() = 0; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 12e25c848..1477ed3e7 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1306,6 +1306,10 @@ inline void dComIfGp_evmng_remove() { g_dComIfG_gameInfo.play.getEvtManager().remove(); } +inline void dComIfGp_evmng_setGoal(cXyz* pos) { + g_dComIfG_gameInfo.play.getEvtManager().setGoal(pos); +} + /** * === DRAWLIST === */ diff --git a/include/d/d_demo.h b/include/d/d_demo.h index 2484031df..ad49f9d1a 100644 --- a/include/d/d_demo.h +++ b/include/d/d_demo.h @@ -15,6 +15,34 @@ class fopAc_ac_c; class dDemo_actor_c /* : public JStage::TActor */ { public: void setActor(fopAc_ac_c*); + + bool checkEnable(u16 mask) { return mFlags & mask; } + csXyz* getRatate() { return &mRotation; } + + /* 0x00 */ u8 parent_placeholder[0x04 - 0x00]; + /* 0x04 */ u16 mFlags; + /* 0x06 */ u8 field_0x06[0x08 - 0x06]; + /* 0x08 */ cXyz mTranslation; + /* 0x14 */ cXyz mScaling; + /* 0x20 */ csXyz mRotation; + /* 0x26 */ u8 field_0x26[0x28 - 0x26]; + /* 0x28 */ u32 mShape; + /* 0x2C */ u32 mNextBckId; + /* 0x30 */ f32 mAnimationFrame; + /* 0x34 */ f32 mAnimationTransition; + /* 0x38 */ f32 mAnimationFrameMax; + /* 0x3C */ s32 mTexAnimation; + /* 0x40 */ f32 mTexAnimationFrame; + /* 0x44 */ void* mTexAnimationFrameMax; + /* 0x48 */ J3DModel* mpModel; + /* 0x4C */ u32 field_0x4c; + /* 0x50 */ void* field_0x50; + /* 0x54 */ u32 field_0x54; + /* 0x58 */ s32 mActorPcId; + /* 0x5C */ s32 mBckId; + /* 0x60 */ s32 mBtpId; + /* 0x64 */ s32 mBtkId; + /* 0x68 */ s32 mBrkId; }; class dDemo_object_c { diff --git a/src/d/actor/d_a_mbdoor.cpp b/src/d/actor/d_a_mbdoor.cpp index f786c7fcb..c01529029 100644 --- a/src/d/actor/d_a_mbdoor.cpp +++ b/src/d/actor/d_a_mbdoor.cpp @@ -3,166 +3,638 @@ // Translation Unit: d_a_mbdoor.cpp // -#include "d_a_mbdoor.h" -#include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "d/d_procname.h" +#include "d/d_com_inf_game.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_mtx.h" +#include "d/actor/d_a_player.h" + +class daMbdoor_c : public fopAc_ac_c { +public: + inline BOOL draw(); + inline BOOL execute(); + s32 create(); + + u8 getSwbit(); + u8 getType(); + u8 getShapeType(); + const char* getArcName(); + u32 getFuBdl(); + u32 getLBdl(); + u32 getRBdl(); + u32 getToBdl(); + u32 getDzb(); + f32 getLOffset(); + f32 getROffset(); + f32 getToOffset(); + BOOL CreateHeap(); + void calcMtx(); + BOOL CreateInit(); + s32 getDemoAction(); + void demoProc(); + BOOL checkArea(); + BOOL checkUnlock(); + +public: + /* 0x290 */ request_of_phase_process_class mPhs; + /* 0x298 */ J3DModel* mpFuModel; + /* 0x29C */ J3DModel* mpLModel; + /* 0x2A0 */ J3DModel* mpRModel; + /* 0x2A4 */ J3DModel* mpToModel; + /* 0x2A8 */ dBgW* mpBgW; + /* 0x2AC */ bool field_0x2ac; + /* 0x2AD */ u8 field_0x2ad; + /* 0x2AE */ u8 mCurActionIdx; + /* 0x2AF */ u8 field_0x2AF[0x2B0 - 0x2AF]; + /* 0x2B0 */ s16 field_0x2b0; + /* 0x2B2 */ s16 field_0x2b2; + /* 0x2B4 */ s16 field_0x2b4; + /* 0x2B6 */ u8 field_0x2b6; + /* 0x2B7 */ u8 field_0x2B7[0x2B8 - 0x2B7]; + /* 0x2B8 */ s16 field_0x2b8; + /* 0x2BA */ u8 field_0x2BA[0x2BC - 0x2BA]; + /* 0x2BC */ s32 field_0x2bc; + /* 0x2C0 */ s32 mEvtStaffId; + /* 0x2C4 */ cXyz field_0x2c4; + /* 0x2D0 */ cXyz field_0x2d0; + /* 0x2DC */ cXyz field_0x2dc; +}; + +typedef BOOL (daMbdoor_c_ActionFunc)(daMbdoor_c*); /* 00000078-00000084 .text getSwbit__10daMbdoor_cFv */ -void daMbdoor_c::getSwbit() { - /* Nonmatching */ +u8 daMbdoor_c::getSwbit() { + return fopAcM_GetParam(this) & 0xFF; } /* 00000084-00000090 .text getType__10daMbdoor_cFv */ -void daMbdoor_c::getType() { - /* Nonmatching */ +u8 daMbdoor_c::getType() { + return orig.angle.z & 0x3F; } /* 00000090-0000009C .text getShapeType__10daMbdoor_cFv */ -void daMbdoor_c::getShapeType() { - /* Nonmatching */ +u8 daMbdoor_c::getShapeType() { + return (fopAcM_GetParam(this) & 0x00000F00) >> 0x08; } /* 0000009C-000000E4 .text getArcName__10daMbdoor_cFv */ -void daMbdoor_c::getArcName() { - /* Nonmatching */ +const char* daMbdoor_c::getArcName() { + switch (getShapeType()) { + case 1: + return "Gbdoor"; + default: + return "Mbdoor"; + } } /* 000000E4-00000120 .text getFuBdl__10daMbdoor_cFv */ -void daMbdoor_c::getFuBdl() { - /* Nonmatching */ +u32 daMbdoor_c::getFuBdl() { + switch (getShapeType()) { + case 1: + return 6; // v_gbdfu.bdl + default: + return 6; // s_mbdfu.bdl + } } /* 00000120-0000015C .text getLBdl__10daMbdoor_cFv */ -void daMbdoor_c::getLBdl() { - /* Nonmatching */ +u32 daMbdoor_c::getLBdl() { + switch (getShapeType()) { + case 1: + return 4; // v_gbd_l.bdl + default: + return 4; // s_mbd_l.bdl + } } /* 0000015C-00000198 .text getRBdl__10daMbdoor_cFv */ -void daMbdoor_c::getRBdl() { - /* Nonmatching */ +u32 daMbdoor_c::getRBdl() { + switch (getShapeType()) { + case 1: + return 5; // v_gbd_r.bdl + default: + return 5; // s_mbd_r.bdl + } } /* 00000198-000001D4 .text getToBdl__10daMbdoor_cFv */ -void daMbdoor_c::getToBdl() { - /* Nonmatching */ +u32 daMbdoor_c::getToBdl() { + switch (getShapeType()) { + case 1: + return 7; // v_gbdto.bdl + default: + return 7; // s_mbdto.bdl + } } /* 000001D4-00000210 .text getDzb__10daMbdoor_cFv */ -void daMbdoor_c::getDzb() { - /* Nonmatching */ +u32 daMbdoor_c::getDzb() { + switch (getShapeType()) { + case 1: + return 0xA; // gbd.dzb + default: + return 0xA; // s_mbdfu.dzb + } } /* 00000210-00000254 .text getLOffset__10daMbdoor_cFv */ -void daMbdoor_c::getLOffset() { - /* Nonmatching */ +f32 daMbdoor_c::getLOffset() { + switch (getShapeType()) { + case 1: + return -300.0f; + default: + return -255.0f; + } } /* 00000254-00000298 .text getROffset__10daMbdoor_cFv */ -void daMbdoor_c::getROffset() { - /* Nonmatching */ +f32 daMbdoor_c::getROffset() { + switch (getShapeType()) { + case 1: + return 300.0f; + default: + return 277.0f; + } } /* 00000298-000002DC .text getToOffset__10daMbdoor_cFv */ -void daMbdoor_c::getToOffset() { - /* Nonmatching */ +f32 daMbdoor_c::getToOffset() { + switch (getShapeType()) { + case 1: + return 335.0f; + default: + return 300.0f; + } } /* 000002DC-000002FC .text CheckCreateHeap__FP10fopAc_ac_c */ -void CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +BOOL CheckCreateHeap(fopAc_ac_c* i_this) { + return ((daMbdoor_c*)i_this)->CreateHeap(); } /* 000002FC-0000060C .text CreateHeap__10daMbdoor_cFv */ -void daMbdoor_c::CreateHeap() { - /* Nonmatching */ +BOOL daMbdoor_c::CreateHeap() { + void* modelData = dComIfG_getObjectRes(getArcName(), getFuBdl()); + JUT_ASSERT(198, modelData != 0) + mpFuModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000022); + if (!mpFuModel) { return FALSE; } + + modelData = dComIfG_getObjectRes(getArcName(), getLBdl()); + JUT_ASSERT(209, modelData != 0) + mpLModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000022); + if (!mpLModel) { return FALSE; } + + modelData = dComIfG_getObjectRes(getArcName(), getRBdl()); + JUT_ASSERT(220, modelData != 0) + mpRModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000022); + if (!mpRModel) { return FALSE; } + + modelData = dComIfG_getObjectRes(getArcName(), getToBdl()); + JUT_ASSERT(231, modelData != 0) + mpToModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000022); + if (!mpToModel) { return FALSE; } + + mpBgW = new dBgW(); + if (!mpBgW) { return FALSE; } + cBgD_t* dzbData = (cBgD_t*)dComIfG_getObjectRes(getArcName(), getDzb()); + if (!dzbData) { return FALSE; } + calcMtx(); + bool error = mpBgW->Set(dzbData, 1, &mpFuModel->getBaseTRMtx()); + return error != true ? TRUE : FALSE; } /* 0000060C-00000898 .text calcMtx__10daMbdoor_cFv */ void daMbdoor_c::calcMtx() { - /* Nonmatching */ + // Transform the door's frame. + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(orig.angle.y); + mpFuModel->setBaseTRMtx(mDoMtx_stack_c::now); + + cXyz offset; + offset.set(0.0f, 0.0f, -150.0f); + mDoMtx_stack_c::multVec(&offset, &field_0x2d0); + offset.set(0.0f, 0.0f, -400.0f); + mDoMtx_stack_c::multVec(&offset, &field_0x2dc); + + // Transform door's right half. + if (field_0x2ad == 0) { + mpLModel->setBaseTRMtx(mDoMtx_stack_c::now); + if (field_0x2b2) { + mDoMtx_stack_c::transM(getROffset(), 0.0f, 0.0f); + mDoMtx_stack_c::YrotM(field_0x2b2); + mDoMtx_stack_c::transM(-getROffset(), 0.0f, 0.0f); + } + offset.set(80.0f, 0.0f, 75.0f); + mDoMtx_stack_c::multVec(&offset, &field_0x2c4); + } + mpRModel->setBaseTRMtx(mDoMtx_stack_c::now); + + // Transform door's left half. + if (field_0x2ad == 1) { + if (field_0x2b2) { + mDoMtx_stack_c::transM(getLOffset(), 0.0f, 0.0f); + mDoMtx_stack_c::YrotM(-field_0x2b2); + mDoMtx_stack_c::transM(-getLOffset(), 0.0f, 0.0f); + } + offset.set(-80.0f, 0.0f, 75.0f); + mDoMtx_stack_c::multVec(&offset, &field_0x2c4); + mpLModel->setBaseTRMtx(mDoMtx_stack_c::now); + } + + // Transform door's bar. + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(orig.angle.y); + if (field_0x2b0) { + mDoMtx_stack_c::transM(getToOffset(), 231.0f, 0.0f); + mDoMtx_stack_c::ZrotM(field_0x2b0); + mDoMtx_stack_c::transM(-getToOffset(), -231.0f, 0.0f); + } + mpToModel->setBaseTRMtx(mDoMtx_stack_c::now); } /* 00000898-00000A44 .text CreateInit__10daMbdoor_cFv */ -void daMbdoor_c::CreateInit() { - /* Nonmatching */ +BOOL daMbdoor_c::CreateInit() { + s32 swbit = getSwbit(); + s32 type = getType(); + + if (dComIfG_Bgsp()->Regist(mpBgW, this)) { + JUT_ASSERT(334, 0); + } + field_0x2ac = true; + mTevStr.mRoomNo = current.roomNo; + + if (type == 2) { + mCurActionIdx = 1; + field_0x2b0 = 0; + field_0x2b2 = 0; + } else if ((type == 0 && (swbit != 0xFF && !dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(this)))) + || (type == 1 && (swbit == 0xFF || dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(this))))) { + mCurActionIdx = 1; + field_0x2b0 = 0; + field_0x2b2 = 0; + } else { + mCurActionIdx = 4; + field_0x2b0 = -0x3F65; + field_0x2b2 = 0; + } + + field_0x2bc = 30; + mAttentionInfo.mPosition.y += 250.0f; + mEyePos.y += 250.0f; + mAttentionInfo.mFlags = 0x20; + calcMtx(); + mpBgW->Move(); + mStatus = mStatus & ~0x3F | 0x2B; + + return TRUE; } /* 00000A44-00000AF4 .text create__10daMbdoor_cFv */ -void daMbdoor_c::create() { - /* Nonmatching */ +s32 daMbdoor_c::create() { + s32 phase_state = dComIfG_resLoad(&mPhs, getArcName()); + + fopAcM_SetupActor(this, daMbdoor_c); + + if (phase_state != cPhs_COMPLEATE_e) { + return phase_state; + } + if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x8200)) { + return cPhs_ERROR_e; + } + + CreateInit(); + + return cPhs_COMPLEATE_e; } /* 00000AF4-00000B3C .text getDemoAction__10daMbdoor_cFv */ -void daMbdoor_c::getDemoAction() { - /* Nonmatching */ +s32 daMbdoor_c::getDemoAction() { + static char* action_table[] = { + "WAIT", + "SET_START", + "SET_ANGLE", + "END", + "OPEN", + "STOP_OPEN", + "SET_GOAL", + "SET_GOAL2", + "ADJUSTMENT", + }; + + return dComIfGp_evmng_getMyActIdx(mEvtStaffId, action_table, 9, 0, 0); } /* 00000B3C-00000F78 .text demoProc__10daMbdoor_cFv */ void daMbdoor_c::demoProc() { - /* Nonmatching */ + // Explicit cast from daPy_py_c to daPy_py_c necessary for matching regalloc. + daPy_py_c* player = (daPy_py_c*)daPy_getPlayerActorClass(); + s32 actIdx = getDemoAction(); + cXyz goal; + s16 angle; + + if (dComIfGp_evmng_getIsAddvance(mEvtStaffId)) { + switch (actIdx) { + case 1: + calcMtx(); + goal = field_0x2c4; + dComIfGp_evmng_setGoal(&goal); + break; + case 2: + angle = current.angle.y + 0x7FFF; + player->changeDemoMoveAngle(angle); + break; + case 4: + fopAcM_seStart(this, JA_SE_OBJ_MJ_GATE_OPEN, 0); + field_0x2b4 = 0; + break; + case 5: + fopAcM_seStart(this, JA_SE_OBJ_MJ_GATE_BAR_OPEN, 0); + field_0x2b4 = 0; + field_0x2b6 = 1; + break; + case 6: + goal = field_0x2d0; + dComIfGp_evmng_setGoal(&goal); + break; + case 7: + goal = field_0x2dc; + dComIfGp_evmng_setGoal(&goal); + break; + case 8: + calcMtx(); + field_0x2b8 = 0; + u32* timerP = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "Timer"); + if (timerP) { + field_0x2b8 = *timerP; + } + break; + } + } + + switch (actIdx) { + case 3: + break; + case 4: + if (field_0x2b4 < 250) { + field_0x2b4 += 50; + } + s32 temp = field_0x2b2 - field_0x2b4; + if (temp < -0x1C71) { + field_0x2b2 = -0x1C71; + dComIfGp_evmng_cutEnd(mEvtStaffId); + } else { + field_0x2b2 = temp; + } + calcMtx(); + if (field_0x2ad) { + angle = current.angle.y + 0x7FFF - field_0x2b2; + } else { + angle = current.angle.y + 0x7FFF + field_0x2b2; + } + player->setPlayerPosAndAngle(&field_0x2c4, angle); + break; + case 5: + if (field_0x2b6) { + if (field_0x2b4 < 400) { + field_0x2b4 += 40; + } + temp = field_0x2b0 - field_0x2b4; + if (temp < -0x3F65) { + field_0x2b0 = -0x3F65; + dComIfGp_evmng_cutEnd(mEvtStaffId); + field_0x2b6 = 0; + fopAcM_seStart(this, JA_SE_OBJ_MJ_GATE_BAR_STOP, 0); + } else { + field_0x2b0 = temp; + } + calcMtx(); + } else { + dComIfGp_evmng_cutEnd(mEvtStaffId); + } + break; + case 8: + angle = player->shape_angle.y; + cLib_addCalcAngleS2(&angle, current.angle.y + 0x7FFF, 10, 0x800); + goal = player->current.pos; + goal.x = goal.x*0.9f + field_0x2c4.x*0.1f; + goal.z = goal.z*0.9f + field_0x2c4.z*0.1f; + player->setPlayerPosAndAngle(&goal, angle); + if (field_0x2b8 > 0) { + field_0x2b8--; + } else { + dComIfGp_evmng_cutEnd(mEvtStaffId); + } + break; + default: + dComIfGp_evmng_cutEnd(mEvtStaffId); + break; + } } /* 00000F78-000010CC .text checkArea__10daMbdoor_cFv */ -void daMbdoor_c::checkArea() { - /* Nonmatching */ +BOOL daMbdoor_c::checkArea() { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz relPos1 = player->current.pos - orig.pos; + cXyz relPos2 = relPos1; + relPos2.x = relPos1.z * cM_ssin(current.angle.y) - relPos1.x * cM_scos(current.angle.y); + relPos2.z = relPos1.z * cM_scos(current.angle.y) + relPos1.x * cM_ssin(current.angle.y); + + if (relPos2.z > 160.0f) { + return FALSE; + } + if (relPos2.x > 200.0f || relPos2.x < -200.0f) { + return FALSE; + } + if (fopAcM_seenActorAngleY(player, this) > 0x2000) { + return FALSE; + } + + if (relPos2.x > 0.0f) { + field_0x2ad = 1; + } else { + field_0x2ad = 0; + } + + return TRUE; } /* 000010CC-00001198 .text checkUnlock__10daMbdoor_cFv */ -void daMbdoor_c::checkUnlock() { - /* Nonmatching */ +BOOL daMbdoor_c::checkUnlock() { + s32 swbit = getSwbit(); + switch (getType()) { + case 0: + return dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(this)); + case 1: + if (!fopAcM_myRoomSearchEnemy(fopAcM_GetRoomNo(this))) { + if (field_0x2bc > 0) { + field_0x2bc--; + } else { + if (swbit != 0xFF) { + dComIfGs_onSwitch(swbit, fopAcM_GetRoomNo(this)); + } + return TRUE; + } + } + } + return FALSE; } /* 00001198-000011BC .text daMbdoor_actionWait__FP10daMbdoor_c */ -void daMbdoor_actionWait(daMbdoor_c*) { - /* Nonmatching */ +BOOL daMbdoor_actionWait(daMbdoor_c* i_this) { + i_this->calcMtx(); + return TRUE; } /* 000011BC-0000121C .text daMbdoor_actionLockWait__FP10daMbdoor_c */ -void daMbdoor_actionLockWait(daMbdoor_c*) { - /* Nonmatching */ +BOOL daMbdoor_actionLockWait(daMbdoor_c* i_this) { + if (i_this->checkUnlock()) { + i_this->mCurActionIdx = 2; + fopAcM_orderOtherEvent2(i_this, "MBDOOR_STOP_OPEN", 1, -1); + } + return TRUE; } /* 0000121C-000012AC .text daMbdoor_actionLockOff__FP10daMbdoor_c */ -void daMbdoor_actionLockOff(daMbdoor_c*) { - /* Nonmatching */ +BOOL daMbdoor_actionLockOff(daMbdoor_c* i_this) { + if (i_this->mEvtInfo.checkCommandDemoAccrpt()) { + i_this->mEvtStaffId = dComIfGp_evmng_getMyStaffId("MBDOOR", NULL, 0); + i_this->demoProc(); + i_this->mCurActionIdx = 3; + } else { + fopAcM_orderOtherEvent2(i_this, "MBDOOR_STOP_OPEN", 1, -1); + } + return TRUE; } /* 000012AC-00001324 .text daMbdoor_actionLockDemo__FP10daMbdoor_c */ -void daMbdoor_actionLockDemo(daMbdoor_c*) { - /* Nonmatching */ +BOOL daMbdoor_actionLockDemo(daMbdoor_c* i_this) { + if (dComIfGp_evmng_endCheck("MBDOOR_STOP_OPEN")) { + dComIfGp_event_reset(); + i_this->mCurActionIdx = 4; + } else { + i_this->demoProc(); + } + return TRUE; } /* 00001324-000013E4 .text daMbdoor_actionCloseWait__FP10daMbdoor_c */ -void daMbdoor_actionCloseWait(daMbdoor_c*) { - /* Nonmatching */ +BOOL daMbdoor_actionCloseWait(daMbdoor_c* i_this) { + if (i_this->mEvtInfo.checkCommandDoor()) { + i_this->mEvtStaffId = dComIfGp_evmng_getMyStaffId("MBDOOR", NULL, 0); + i_this->demoProc(); + i_this->mCurActionIdx = 5; + dComIfG_Bgsp()->Release(i_this->mpBgW); + i_this->field_0x2ac = false; + } else { + if (i_this->checkArea()) { + i_this->mEvtInfo.setEventName("MBDOOR_OPEN"); + i_this->mEvtInfo.onCondition(dEvtCnd_CANDOOR_e); + } + } + return TRUE; } /* 000013E4-00001408 .text daMbdoor_actionOpen__FP10daMbdoor_c */ -void daMbdoor_actionOpen(daMbdoor_c*) { - /* Nonmatching */ +BOOL daMbdoor_actionOpen(daMbdoor_c* i_this) { + i_this->demoProc(); + return TRUE; +} + +BOOL daMbdoor_c::draw() { + g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &mTevStr); + + g_env_light.setLightTevColorType(mpFuModel, &mTevStr); + mDoExt_modelUpdateDL(mpFuModel); + + g_env_light.setLightTevColorType(mpLModel, &mTevStr); + mDoExt_modelUpdateDL(mpLModel); + + g_env_light.setLightTevColorType(mpRModel, &mTevStr); + mDoExt_modelUpdateDL(mpRModel); + + g_env_light.setLightTevColorType(mpToModel, &mTevStr); + mDoExt_modelUpdateDL(mpToModel); + + return TRUE; } /* 00001408-000014BC .text daMbdoor_Draw__FP10daMbdoor_c */ -void daMbdoor_Draw(daMbdoor_c*) { - /* Nonmatching */ +BOOL daMbdoor_Draw(daMbdoor_c* i_this) { + return i_this->draw(); +} + +BOOL daMbdoor_c::execute() { + static daMbdoor_c_ActionFunc* l_action[] = { + &daMbdoor_actionWait, + &daMbdoor_actionLockWait, + &daMbdoor_actionLockOff, + &daMbdoor_actionLockDemo, + &daMbdoor_actionCloseWait, + &daMbdoor_actionOpen, + }; + + dDemo_actor_c* demoActor = dComIfGp_demo_getActor(mDemoActorId); + if (demoActor) { + field_0x2ad = 0; + if (demoActor->checkEnable(0x8)) { + field_0x2b2 = demoActor->getRatate()->y; + field_0x2b0 = demoActor->getRatate()->z; + } + calcMtx(); + } else { + (l_action[mCurActionIdx])(this); + } + return TRUE; } /* 000014BC-00001558 .text daMbdoor_Execute__FP10daMbdoor_c */ -void daMbdoor_Execute(daMbdoor_c*) { - /* Nonmatching */ +BOOL daMbdoor_Execute(daMbdoor_c* i_this) { + return i_this->execute(); } /* 00001558-00001560 .text daMbdoor_IsDelete__FP10daMbdoor_c */ -void daMbdoor_IsDelete(daMbdoor_c*) { - /* Nonmatching */ +BOOL daMbdoor_IsDelete(daMbdoor_c* i_this) { + return TRUE; } /* 00001560-000015D4 .text daMbdoor_Delete__FP10daMbdoor_c */ -void daMbdoor_Delete(daMbdoor_c*) { - /* Nonmatching */ +BOOL daMbdoor_Delete(daMbdoor_c* i_this) { + if (i_this->heap) { + dComIfG_Bgsp()->Release(i_this->mpBgW); + } + dComIfG_resDelete(&i_this->mPhs, i_this->getArcName()); + i_this->~daMbdoor_c(); + return TRUE; } /* 000015D4-000015F4 .text daMbdoor_Create__FP10fopAc_ac_c */ -void daMbdoor_Create(fopAc_ac_c*) { - /* Nonmatching */ +s32 daMbdoor_Create(fopAc_ac_c* i_this) { + return ((daMbdoor_c*)i_this)->create(); } +static actor_method_class l_daMbdoor_Method = { + (process_method_func)daMbdoor_Create, + (process_method_func)daMbdoor_Delete, + (process_method_func)daMbdoor_Execute, + (process_method_func)daMbdoor_IsDelete, + (process_method_func)daMbdoor_Draw, +}; + +extern actor_process_profile_definition g_profile_MBDOOR = { + /* LayerID */ fpcLy_CURRENT_e, + /* ListID */ 3, + /* ListPrio */ fpcPi_CURRENT_e, + /* ProcName */ PROC_MBDOOR, + /* Proc SubMtd */ &g_fpcLf_Method.mBase, + /* Size */ sizeof(daMbdoor_c), + /* SizeOther */ 0, + /* Parameters */ 0, + /* Leaf SubMtd */ &g_fopAc_Method.base, + /* Priority */ 0x0132, + /* Actor SubMtd */ &l_daMbdoor_Method, + /* Status */ 0x00044000, + /* Group */ fopAc_ACTOR_e, + /* CullType */ fopAc_CULLBOX_6_e, +};