diff --git a/configure.py b/configure.py index 45874277a..35cd0a3a3 100644 --- a/configure.py +++ b/configure.py @@ -1216,7 +1216,7 @@ config.libs = [ ActorRel(Matching, "d_a_andsw0"), ActorRel(Matching, "d_a_andsw2"), ActorRel(NonMatching, "d_a_att"), - ActorRel(NonMatching, "d_a_bflower"), + ActorRel(Matching, "d_a_bflower", extra_cflags=['-pragma "nosyminline on"']), ActorRel(Matching, "d_a_bita", extra_cflags=['-pragma "nosyminline on"']), ActorRel(Matching, "d_a_branch"), ActorRel(NonMatching, "d_a_bridge"), diff --git a/include/d/actor/d_a_bflower.h b/include/d/actor/d_a_bflower.h index bff1e9c1c..e691f7681 100644 --- a/include/d/actor/d_a_bflower.h +++ b/include/d/actor/d_a_bflower.h @@ -1,26 +1,72 @@ #ifndef D_A_BFLOWER_H #define D_A_BFLOWER_H +#include "SSystem/SComponent/c_phase.h" #include "f_op/f_op_actor.h" +#include "f_op/f_op_actor_mng.h" +#include "m_Do/m_Do_ext.h" +#include "d/d_cc_d.h" class daBFlower_c : public fopAc_ac_c { public: + typedef BOOL (daBFlower_c::*ActionFunc)(void); + + enum State_e { + STATE_LIVE_E, + STATE_DEAD_e, + }; + inline BOOL _delete(); - void CreateHeap(); + BOOL CreateHeap(); void CreateInit(); - void init_bck_anm(short); + int init_bck_anm(s16 param); s32 _create(); void set_mtx(); BOOL _execute(); - void actLive(); - void actDead(); + BOOL actLive(); + BOOL actDead(); void animPlay(); void setCollision(); BOOL _draw(); + static const char m_arcname[]; + public: - /* Place member variables here */ + /* 0x290 */ request_of_phase_process_class mPhs; + /* 0x298 */ J3DModel* mpModel; + /* 0x29C */ dCcD_Stts mStts; + /* 0x2D8 */ dCcD_Cyl mCyl; + /* 0x408 */ dCcD_Sph mSph; + /* 0x534 */ mDoExt_bckAnm mBck1; + /* 0x544 */ mDoExt_brkAnm mBrk1; + /* 0x55C */ s16 m55C; // Current bck1 anim? + /* 0x560 */ J3DModel* mpModel2; + /* 0x564 */ mDoExt_bckAnm mBck2; + /* 0x574 */ mDoExt_brkAnm mBrk2; + /* 0x58C */ u8 m58C; + /* 0x58D */ u8 m58D; + /* 0x58E */ u8 m58E; // Unused + /* 0x58F */ u8 mState; + /* 0x590 */ s32 mSwitchNo; + /* 0x594 */ s32 m594; + /* 0x598 */ BOOL mGrabbable; + /* 0x59C */ fopAc_ac_c* mpBombActor; // Bomb2 actor + /* 0x5A0 */ s32 mAnimTimer; + /* 0x5A4 */ f32 mPrevPlayerDist; + /* 0x5A8 */ uint mPrevGrabActorID; // Actor held by player during previous frame? + /* 0x5AC */ cXyz mBombScale; + /* 0x5B8 */ u8 m5B8; }; +namespace daBFlower_prm { + inline u8 getKind(daBFlower_c* actor) { + return (fopAcM_GetParam(actor) >> 4) & 0xF; + } + + inline u8 getSwitchNo(daBFlower_c* actor) { + return (fopAcM_GetParam(actor) >> 8) & 0xFF; + } +} + #endif /* D_A_BFLOWER_H */ diff --git a/include/d/actor/d_a_bomb2.h b/include/d/actor/d_a_bomb2.h index 9a10abbad..e7edf60bd 100644 --- a/include/d/actor/d_a_bomb2.h +++ b/include/d/actor/d_a_bomb2.h @@ -64,17 +64,21 @@ namespace daBomb2 { }; // Size 0x54 enum Start_e { - + Start_UNK0_e, + Start_UNK1_e, + Start_UNK2_e, }; class Act_c : public fopAc_ac_c { public: void prm_get_start() const {} void prm_get_stick() const {} - void prm_make(Start_e, bool) {} - + static u32 prm_make(Start_e start, bool param) { // Might be wrong + return start | ((param ? 1 : 0) << 8); + } + Act_c(); - + //d_a_bomb_static functions void remove_fuse_effect(); void set_time(int); diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index c240c14cf..d3bae075a 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -1678,7 +1678,7 @@ public: } bool checkNoControll() const { return dComIfGp_getPlayer(0) != this; } void clearDamageWait() {} - void exchangeGrabActor(fopAc_ac_c*) {} + void exchangeGrabActor(fopAc_ac_c* actor) { mActorKeepGrab.setData(actor); } void getDekuLeafWindPos() const {} void getBoomerangCatchPos() const {} void getLineTopPos() {} diff --git a/src/d/actor/d_a_bflower.cpp b/src/d/actor/d_a_bflower.cpp index ba139720b..ddd28c7b5 100644 --- a/src/d/actor/d_a_bflower.cpp +++ b/src/d/actor/d_a_bflower.cpp @@ -5,90 +5,517 @@ #include "d/actor/d_a_bflower.h" #include "d/d_procname.h" +#include "d/res/res_vbakh.h" +#include "d/d_com_inf_game.h" +#include "d/actor/d_a_player_main.h" +#include "d/actor/d_a_bomb2.h" + +static cXyz bomb_offset(0.0f, 0.0f, 0.0f); + +static f32 dummy1[3] = {1.0f, 1.0f, 1.0f}; +static f32 dummy2[3] = {1.0f, 1.0f, 1.0f}; +static u8 dummy3[4] = {0x02, 0x00, 0x02, 0x01}; +static f64 dummy4[2] = {3.0f, 0.5f}; + +static dCcD_SrcCyl l_cyl_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ AT_TYPE_WATER, + /* SrcObjTg SPrm */ TG_SPRM_SET | TG_SPRM_IS_OTHER, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ dCcG_At_Spl_UNK0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ G_TG_SPRM_NO_HIT_MARK, + /* SrcGObjCo SPrm */ 0, + }, + // cCcD_SrcCylAttr + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 50.0f, + /* Height */ 10.0f, + } +}; + +static dCcD_SrcSph l_sph_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT), + /* SrcObjTg SPrm */ TG_SPRM_SET | TG_SPRM_IS_OTHER, + /* SrcObjCo SPrm */ CO_SPRM_SET | CO_SPRM_IS_UNK8 | CO_SPRM_VSGRP, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ G_TG_SPRM_NO_HIT_MARK, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGSphS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 30.0f, + }, +}; + +static dCcD_SrcSph l_sph_src2 = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ CO_SPRM_SET | CO_SPRM_IS_UNK8 | CO_SPRM_VSGRP, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ G_TG_SPRM_NO_HIT_MARK, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGSphS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 15.0f, + }, +}; + +const char daBFlower_c::m_arcname[] = "VbakH"; /* 000000EC-0000010C .text CheckCreateHeap__FP10fopAc_ac_c */ -static BOOL CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL CheckCreateHeap(fopAc_ac_c* i_this) { + return static_cast(i_this)->CreateHeap(); } /* 0000010C-0000058C .text CreateHeap__11daBFlower_cFv */ -void daBFlower_c::CreateHeap() { - /* Nonmatching */ +BOOL daBFlower_c::CreateHeap() { + mState = daBFlower_prm::getKind(this); + mSwitchNo = daBFlower_prm::getSwitchNo(this); + + if (fopAcM_isSwitch(this, mSwitchNo)) { + mState = daBFlower_c::STATE_LIVE_E; + } + + J3DModelData* modelData = static_cast(dComIfG_getObjectRes(m_arcname, VBAKH_BDL_VBAKH)); + JUT_ASSERT(0x1B2, modelData != 0); + + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022); + if (mpModel == NULL) { + return FALSE; + } + + J3DAnmTransform* pbck = static_cast(dComIfG_getObjectRes(m_arcname, VBAKH_BCK_VBAHX)); + JUT_ASSERT(0x1C3, pbck != 0); + + if (!mBck1.init(modelData, pbck, TRUE, J3DFrameCtrl::LOOP_ONCE_RESET_e, 1.0f, 0, -1, false)) { + return FALSE; + } + mBck1.setFrame(mBck1.getEndFrame()); + + J3DAnmTevRegKey* pbrk = static_cast(dComIfG_getObjectRes(m_arcname, VBAKH_BRK_VBAHX)); + JUT_ASSERT(0x1D9, pbrk != 0); + + if (!mBrk1.init(modelData, pbrk, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false, 0)) { + return FALSE; + } + mBrk1.setPlaySpeed(0.0f); + + modelData = static_cast(dComIfG_getObjectRes(m_arcname, VBAKH_BDL_VBAKM)); + JUT_ASSERT(0x1E7, modelData != 0); + + mpModel2 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022); + if (mpModel2 == NULL) { + return FALSE; + } + + pbck = static_cast(dComIfG_getObjectRes(m_arcname, VBAKH_BCK_VBAMX)); + JUT_ASSERT(0x1F7, pbck != 0); + + if (!mBck2.init(modelData, pbck, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false)) { + return FALSE; + } + mBck2.setPlaySpeed(0.0f); + + pbrk = static_cast(dComIfG_getObjectRes(m_arcname, VBAKH_BRK_VBAMX)); + JUT_ASSERT(0x208, pbrk != 0); + + if (!mBrk2.init(modelData, pbrk, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false, 0)) { + return FALSE; + } + mBrk2.setPlaySpeed(0.0f); + + if (mState == daBFlower_c::STATE_LIVE_E) { + mBrk1.setFrame(mBrk1.getEndFrame()); + mBrk2.setFrame(mBrk2.getEndFrame()); + mBck2.setFrame(mBck2.getEndFrame()); + + } else if (mState == daBFlower_c::STATE_DEAD_e) { + mBrk1.setFrame(0.0f); + mBrk2.setFrame(0.0f); + mBck2.setFrame(0.0f); + } + + return TRUE; } /* 0000058C-00000750 .text CreateInit__11daBFlower_cFv */ void daBFlower_c::CreateInit() { - /* Nonmatching */ + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + + fopAcM_setCullSizeBox(this, -50.0f, 0.0f, -50.0f, 50.0f, 100.0f, 50.0f); + mStts.Init(0xFF, 0xFF, this); + mCyl.Set(l_cyl_src); + mCyl.SetStts(&mStts); + + if (mState == daBFlower_c::STATE_LIVE_E) { + mSph.Set(l_sph_src); + } else { + mSph.Set(l_sph_src2); + } + mSph.SetStts(&mStts); + + current.angle = home.angle; + set_mtx(); + eyePos.set(0.0f, 50.0f, 0.0f); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::multVec(&eyePos, &eyePos); + attention_info.position = eyePos; + + if (current.angle.x == 0) { + mGrabbable = FALSE; + } else { + mGrabbable = TRUE; + } + + mpBombActor = NULL; + m58C = 1; + m5B8 = 0; + mBombScale = scale; + mAnimTimer = cM_rndF(150.0f) + 60.0f; + m55C = -1; } /* 00000750-0000080C .text init_bck_anm__11daBFlower_cFs */ -void daBFlower_c::init_bck_anm(short) { - /* Nonmatching */ +int daBFlower_c::init_bck_anm(s16 param) { + if (m55C != -1) { + return 1; + } + + m55C = param; + + J3DModelData* pModelData = static_cast(dComIfG_getObjectRes(m_arcname, VBAKH_BDL_VBAKH)); + J3DAnmTransform* pBck = static_cast(dComIfG_getObjectRes(m_arcname, param)); + + return mBck1.init(pModelData, pBck, TRUE, J3DFrameCtrl::LOOP_ONCE_RESET_e, 1.0f, 0, -1, true); } /* 0000080C-000008AC .text _create__11daBFlower_cFv */ s32 daBFlower_c::_create() { - /* Nonmatching */ + fopAcM_SetupActor(this, daBFlower_c); + + s32 phase_state = dComIfG_resLoad(&mPhs, m_arcname); + + if (phase_state == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0xFC0)) { + return cPhs_ERROR_e; + } + + CreateInit(); + } + + return phase_state; } /* 00000E94-00000F4C .text set_mtx__11daBFlower_cFv */ void daBFlower_c::set_mtx() { - /* Nonmatching */ + mpModel->setBaseScale(scale); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + mpModel2->setBaseScale(mBombScale); + mpModel2->setBaseTRMtx(mDoMtx_stack_c::get()); } +static daBFlower_c::ActionFunc action_tbl[] = { + &daBFlower_c::actLive, + &daBFlower_c::actDead, +}; + /* 00000F4C-00001078 .text _execute__11daBFlower_cFv */ BOOL daBFlower_c::_execute() { - /* Nonmatching */ + daPy_py_c* player = daPy_getPlayerActorClass(); + + (this->*action_tbl[mState])(); + + animPlay(); + set_mtx(); + setCollision(); + + f32 dist = (player->current.pos - current.pos).absXZ(); + + mPrevPlayerDist = dist; + mPrevGrabActorID = player->getGrabActorID(); + + return TRUE; } /* 00001078-0000160C .text actLive__11daBFlower_cFv */ -void daBFlower_c::actLive() { - /* Nonmatching */ +BOOL daBFlower_c::actLive() { + daPy_py_c* player = daPy_getPlayerActorClass(); + + f32 dist = (player->current.pos - current.pos).absXZ(); + + cLib_addCalc(&mBombScale.x, 1.0f, 0.05f, 0.1f, 0.05f); + cLib_addCalc(&mBombScale.y, 1.0f, 0.05f, 0.1f, 0.05f); + f32 tmp = cLib_addCalc(&mBombScale.z, 1.0f, 0.05f, 0.1f, 0.05f); + + if (m5B8 != 0 && tmp == 0.0f) { + init_bck_anm(VBAKH_BCK_VBAKH); + } + + // TODO: std::abs + // Play animation if player walks by bomb flower + if (dist < 50.0f && fabsf(mPrevPlayerDist - dist) > 2.0f && fabsf(player->current.pos.y - current.pos.y) < 10.0f) { + init_bck_anm(VBAKH_BCK_VBAKH); + } + + // Play animation if player dropped held actor near bomb flower? + if (dist < 200.0f && mPrevGrabActorID != player->getGrabActorID() && player->getGrabActorID() == fpcM_ERROR_PROCESS_ID_e) { + fopAc_ac_c* pActor = fopAcM_SearchByID(mPrevGrabActorID); + + if (pActor != NULL) { + if ((pActor->current.pos - current.pos).absXZ() < 70.0f) { + init_bck_anm(VBAKH_BCK_VBAKH); + } + } + } + + mBrk2.play(); + + if (mBck2.play()) { + m58D = 1; + } + + if (mGrabbable == TRUE) { + m58D = 0; + } + + if (fopAcM_IsExecuting(fopAcM_GetID(mpBombActor))) { + m58D = 0; + } else { + if (m58C == 0) { + mBombScale.setall(0.0f); + fopAcM_seStart(this, JA_SE_OBJ_BAKURETU_RECOVER, 0); + } + m58C = 1; + } + + if (m58D != 0) { + cLib_onBit(attention_info.flags, fopAc_Attn_ACTION_CARRY_e); + } else { + cLib_offBit(attention_info.flags, fopAc_Attn_ACTION_CARRY_e); + } + + if (m58C != 0 && tmp == 0.0f) { + if (mSph.ChkTgHit()) { + cCcD_Obj* tg = mSph.GetTgHitObj(); + if (tg != NULL) { + if (tg->ChkAtType(AT_TYPE_BOMB)) { + mpBombActor = static_cast(fopAcM_fastCreate(PROC_Bomb2, daBomb2::Act_c::prm_make(daBomb2::Start_UNK0_e, true), ¤t.pos, fopAcM_GetRoomNo(this), ¤t.angle)); + m58C = 0; + } else if (tg->ChkAtType(~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT))) { + // TODO: simplify + bool b = false; + if (mGrabbable == TRUE) { + b = true; + } + u32 prm = daBomb2::Act_c::prm_make(daBomb2::Start_UNK1_e, b); + + mpBombActor = static_cast(fopAcM_fastCreate(PROC_Bomb2, prm, ¤t.pos, fopAcM_GetRoomNo(this), ¤t.angle)); + m58C = 0; + } + } + } + + mSph.ClrTgHit(); + } + + if (fopAcM_checkCarryNow(this) && m58D != 0) { + m58C = 0; + mpBombActor = static_cast(fopAcM_fastCreate(PROC_Bomb2, daBomb2::Act_c::prm_make(daBomb2::Start_UNK2_e, false), ¤t.pos, fopAcM_GetRoomNo(this), ¤t.angle)); + + fopAcM_cancelCarryNow(this); + if (mpBombActor != NULL) { + fopAcM_setCarryNow(mpBombActor, FALSE); + daPy_getPlayerLinkActorClass()->exchangeGrabActor(mpBombActor); + } + + init_bck_anm(VBAKH_BCK_VBAKH); + } + + if (m58C != 0 && tmp > 0.0f) { + m5B8 = 1; + } else { + m5B8 = 0; + } + + return TRUE; } /* 0000160C-0000185C .text actDead__11daBFlower_cFv */ -void daBFlower_c::actDead() { - /* Nonmatching */ +BOOL daBFlower_c::actDead() { + daPy_py_c* player = daPy_getPlayerActorClass(); + + f32 dist = (player->current.pos - current.pos).absXZ(); + + if (mAnimTimer > 0) { + mAnimTimer -= 1; + } + + // TODO: std::abs + // Play animation if player walks by bomb flower + if (dist < 50.0f && fabsf(mPrevPlayerDist - dist) > 2.0f) { + init_bck_anm(VBAKH_BCK_VBAHX); + } + + if (mAnimTimer == 0) { + mAnimTimer = cM_rndF(100.0f) + 100.0f; + init_bck_anm(VBAKH_BCK_VBAHX); + } + + mBrk1.setPlaySpeed(0.0f); + + if (mCyl.ChkTgHit()) { + cCcD_Obj* hitObj = mCyl.GetTgHitObj(); + if (hitObj != NULL && hitObj->ChkAtType(AT_TYPE_WATER)) { + fopAcM_seStart(this, JA_SE_OBJ_W_BOMB_F_RECOVER, 0); + m594 = 0x46; + mState = daBFlower_c::STATE_LIVE_E; + fopAcM_onSwitch(this, mSwitchNo); + + init_bck_anm(VBAKH_BCK_VBAKH); + mBrk1.setPlaySpeed(1.0f); + mBrk2.setPlaySpeed(1.0f); + mBck2.setPlaySpeed(1.0f); + + mSph.Set(l_sph_src); + } + } + + m58D = 0; + m58C = 1; + cLib_offBit(attention_info.flags, fopAc_Attn_ACTION_CARRY_e); + + return TRUE; } /* 0000185C-000018A4 .text animPlay__11daBFlower_cFv */ void daBFlower_c::animPlay() { - /* Nonmatching */ + if (mBck1.play()) { + m55C = -1; + } + + mBrk1.play(); } /* 000018A4-000019AC .text setCollision__11daBFlower_cFv */ void daBFlower_c::setCollision() { - /* Nonmatching */ + if (mState == daBFlower_c::STATE_DEAD_e) { + mCyl.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCyl); + mSph.SetC(current.pos); + dComIfG_Ccsp()->Set(&mSph); + } else if (m58C != 0) { + cXyz center(0.0f, 30.0f, 0.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::multVec(¢er, ¢er); + + mSph.SetC(center); + dComIfG_Ccsp()->Set(&mSph); + } } /* 000019AC-00001AC4 .text _draw__11daBFlower_cFv */ BOOL daBFlower_c::_draw() { - /* Nonmatching */ + g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType(mpModel, &tevStr); + + mBck1.entry(mpModel->getModelData()); + mBrk1.entry(mpModel->getModelData()); + mDoExt_modelUpdateDL(mpModel); + + mBck1.remove(mpModel->getModelData()); + + if (m58C != 0) { + g_env_light.setLightTevColorType(mpModel2, &tevStr); + + mBck2.entry(mpModel2->getModelData()); + mBrk2.entry(mpModel2->getModelData()); + mDoExt_modelUpdateDL(mpModel2); + + mBck2.remove(mpModel2->getModelData()); + } + + return TRUE; +} + +BOOL daBFlower_c::_delete() { + dComIfG_resDelete(&mPhs, m_arcname); + return TRUE; } /* 00001AC4-00001AE4 .text daBFlower_Create__FPv */ -static s32 daBFlower_Create(void*) { - /* Nonmatching */ +static s32 daBFlower_Create(void* i_this) { + return static_cast(i_this)->_create(); } /* 00001AE4-00001B14 .text daBFlower_Delete__FPv */ -static BOOL daBFlower_Delete(void*) { - /* Nonmatching */ +static BOOL daBFlower_Delete(void* i_this) { + return static_cast(i_this)->_delete(); } /* 00001B14-00001B38 .text daBFlower_Draw__FPv */ -static BOOL daBFlower_Draw(void*) { - /* Nonmatching */ +static BOOL daBFlower_Draw(void* i_this) { + return (u8)static_cast(i_this)->_draw(); } /* 00001B38-00001B5C .text daBFlower_Execute__FPv */ -static BOOL daBFlower_Execute(void*) { - /* Nonmatching */ +static BOOL daBFlower_Execute(void* i_this) { + return (u8)static_cast(i_this)->_execute(); } /* 00001B5C-00001B64 .text daBFlower_IsDelete__FPv */ static BOOL daBFlower_IsDelete(void*) { - /* Nonmatching */ + return TRUE; } static actor_method_class daBFlowerMethodTable = {