From ee52d98f78b51019c1f519cbea880bf1f35d33fa Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Wed, 19 Jun 2024 21:41:04 -0700 Subject: [PATCH] d_a_wind_tag start --- include/d/actor/d_a_wind_tag.h | 58 ++++++- include/d/actor/d_a_windmill.h | 20 ++- src/d/actor/d_a_fan.cpp | 2 +- src/d/actor/d_a_toge.cpp | 2 +- src/d/actor/d_a_wind_tag.cpp | 293 ++++++++++++++++++++++++++++++--- src/d/actor/d_a_windmill.cpp | 38 +++-- 6 files changed, 361 insertions(+), 52 deletions(-) diff --git a/include/d/actor/d_a_wind_tag.h b/include/d/actor/d_a_wind_tag.h index 41ac371cc..6d94583db 100644 --- a/include/d/actor/d_a_wind_tag.h +++ b/include/d/actor/d_a_wind_tag.h @@ -2,6 +2,13 @@ #define D_A_WIND_TAG_H #include "f_op/f_op_actor.h" +#include "SSystem/SComponent/c_phase.h" +#include "d/d_point_wind.h" +#include "d/d_cc_d.h" +#include "m_Do/m_Do_ext.h" + +class JPABaseEmitter; +class dPath; namespace daWindTag { static BOOL CheckCreateHeap(fopAc_ac_c*); @@ -11,28 +18,61 @@ namespace daWindTag { void getCurLength() const {} void getMaxLength() const {} - BOOL _delete(); - void CreateHeap(); + bool _delete(); + BOOL CreateHeap(); void CreateInit(); void set_wind_angle(); s32 _create(); void set_mtx(); - void checkSizeSpecialBig(); + bool checkSizeSpecialBig(); void set_wind_se_sub(unsigned long, cXyz*); void set_wind_se(); - BOOL _execute(); + bool _execute(); void path_move(); void set_next_pnt(); - BOOL _draw(); + bool _draw(); void MoveEmitter(); static const f32 mData[]; - + static const char* m_arcname[]; + static s16 m_bdlidx[]; + static s16 m_heapsize[]; + static s16 m_bckidx[]; + static s16 m_btkidx[]; + static s16 m_btkidx2[]; + static f32 m_cullsize_far; + static f32 m_ef_cullsize_far; + public: /* Place member variables here */ - /* 0x290 */ char pad290[0x208]; /* Placeholder padding */ - /* 0x498 */ f32 unk498; -}; + /* 0x290 */ dCcD_Stts mStts; + /* 0x2CC */ dCcD_Cps mCps; + /* 0x404 */ cM3dGCpsS mCpsS; + /* 0x420 */ request_of_phase_process_class mPhs; + /* 0x428 */ J3DModel* mpModel; + /* 0x42C */ mDoExt_btkAnm mBtkAnm0; + /* 0x440 */ mDoExt_btkAnm mBtkAnm1; + /* 0x454 */ mDoExt_bckAnm mBckAnm; + /* 0x464 */ dPointWind_c mPointWind; + /* 0x494 */ u8 mType; + /* 0x498 */ f32 mOffsY; + /* 0x49C */ f32 field_0x49c; + /* 0x4A0 */ JPABaseEmitter* mpEmitter; + /* 0x4A4 */ GXColor mEfColor; + /* 0x4A8 */ dKy_tevstr_c mEfTevStr; + /* 0x558 */ cXyz mSePos; + /* 0x564 */ cXyz mTargetPos; + /* 0x570 */ dPath* mpPath; + /* 0x574 */ u8 mPathId; + /* 0x575 */ s8 mCurPathPoint; + /* 0x576 */ s8 mPathPointDir; + /* 0x578 */ s32 mSwNo; + /* 0x57C */ u8 field_0x57c; + /* 0x57D */ u8 field_0x57d; + /* 0x57E */ bool mbDraw; + /* 0x57F */ u8 field_0x57f; + /* 0x580 */ uint mLevelSeID; + }; }; // namespace daWindTag #endif /* D_A_WIND_TAG_H */ diff --git a/include/d/actor/d_a_windmill.h b/include/d/actor/d_a_windmill.h index 253307874..121b200b2 100644 --- a/include/d/actor/d_a_windmill.h +++ b/include/d/actor/d_a_windmill.h @@ -2,6 +2,10 @@ #define D_A_WINDMILL_H #include "f_op/f_op_actor.h" +#include "d/d_cc_d.h" +#include "SSystem/SComponent/c_phase.h" + +class dBgW; class daWindMill_c : public fopAc_ac_c { public: @@ -10,7 +14,7 @@ public: void getType() const {} BOOL _delete(); - void CreateHeap(); + BOOL CreateHeap(); void CreateInit(); void search_wind(); s32 _create(); @@ -22,9 +26,21 @@ public: BOOL _draw(); static const s16 m_max_rot_speed[]; + static const char* m_arcname[]; public: - /* Place member variables here */ + /* 0x0290 */ request_of_phase_process_class mPhs; + /* 0x0298 */ J3DModel* mpModel; + /* 0x029C */ dCcD_Stts mStts; + /* 0x02D8 */ dCcD_Sph mSph[9]; + /* 0x06D4 */ dCcD_Cps mCps[4]; + /* 0x1244 */ f32 m1244[28]; + /* 0x12B4 */ dBgW* mpBgW; + /* 0x12B8 */ Mtx mMtx; + /* 0x12E8 */ dCcD_Cyl mCyl; + /* 0x1418 */ u8 mType; + /* 0x141A */ u16 mAngle[3]; + /* 0x1420 */ u32 mWindTagId; }; #endif /* D_A_WINDMILL_H */ diff --git a/src/d/actor/d_a_fan.cpp b/src/d/actor/d_a_fan.cpp index 3b6b926fb..4b0b018d2 100644 --- a/src/d/actor/d_a_fan.cpp +++ b/src/d/actor/d_a_fan.cpp @@ -52,7 +52,7 @@ static dCcD_SrcCps l_cps_src = { { /* P0 */ 0.0f, 0.0f, 0.0f, /* P1 */ 0.0f, 0.0f, 0.0f, - /* Hieght */ 100.0f, + /* Height */ 100.0f, }, }; diff --git a/src/d/actor/d_a_toge.cpp b/src/d/actor/d_a_toge.cpp index 91a7fc7ce..48bd22cbe 100644 --- a/src/d/actor/d_a_toge.cpp +++ b/src/d/actor/d_a_toge.cpp @@ -189,7 +189,7 @@ BOOL daToge_c::_execute() { daWindTag::daWindTag_c* pActor = (daWindTag::daWindTag_c*)fopAcM_SearchByID(mWindTagId); if (pActor != NULL) { - if (pActor->unk498 > 0.0f) { + if (pActor->mOffsY > 0.0f) { if (mEventState != 4) { mEventState = 3; } diff --git a/src/d/actor/d_a_wind_tag.cpp b/src/d/actor/d_a_wind_tag.cpp index 912ba2523..353f91fa0 100644 --- a/src/d/actor/d_a_wind_tag.cpp +++ b/src/d/actor/d_a_wind_tag.cpp @@ -4,76 +4,319 @@ // #include "d/actor/d_a_wind_tag.h" +#include "d/res/res_yaflw00.h" +#include "d/res/res_ybgaf00.h" +#include "f_op/f_op_camera.h" +#include "f_op/f_op_kankyo_mng.h" +#include "d/d_cc_d.h" +#include "d/d_com_inf_game.h" +#include "d/d_level_se.h" +#include "d/d_path.h" #include "d/d_procname.h" +namespace daWindTag { + dCcD_SrcCps l_cps_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ AT_TYPE_WIND, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ AT_SPRM_SET | AT_SPRM_VS_PLAYER | AT_SPRM_VS_OTHER, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ G_AT_SPRM_NO_HIT_MARK, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ G_TG_SPRM_NO_HIT_MARK, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGCpsS + { + /* P0 */ 0.0f, 0.0f, 0.0f, + /* P1 */ 0.0f, 0.0f, 0.0f, + /* Height */ 200.0f, + }, + }; +} + +const char *daWindTag::daWindTag_c::m_arcname[] = { "Yaflw00", "Ybgaf00" }; +s16 daWindTag::daWindTag_c::m_bdlidx[] = { YAFLW00_BDL_YAFLW00, YBGAF00_BDL_YBGAF00 }; +s16 daWindTag::daWindTag_c::m_heapsize[] = { 0x0C40, 0x0C40 }; +s16 daWindTag::daWindTag_c::m_bckidx[] = { YAFLW00_BCK_YAFLW00, YBGAF00_BCK_YBGAF00 }; +s16 daWindTag::daWindTag_c::m_btkidx[] = { YAFLW00_BTK_YAFLW00_01, YBGAF00_BTK_YBGAF00_01 }; +s16 daWindTag::daWindTag_c::m_btkidx2[] = { YAFLW00_BTK_YAFLW00_02, YBGAF00_BTK_YBGAF00_02 }; +f32 daWindTag::daWindTag_c::m_cullsize_far = 4.0f; +f32 daWindTag::daWindTag_c::m_ef_cullsize_far = 2.0f; + /* 00000078-000000F0 .text _delete__Q29daWindTag11daWindTag_cFv */ -BOOL daWindTag::daWindTag_c::_delete() { - /* Nonmatching */ +bool daWindTag::daWindTag_c::_delete() { + if (mpEmitter != NULL) { + mpEmitter->becomeInvalidEmitter(); + mpEmitter = NULL; + } + + dComIfG_resDelete(&mPhs, m_arcname[mType]); + mPointWind.set_pwind_delete(); + return true; } /* 000000F0-00000110 .text CheckCreateHeap__9daWindTagFP10fopAc_ac_c */ -BOOL daWindTag::CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +BOOL daWindTag::CheckCreateHeap(fopAc_ac_c* i_ac) { + return ((daWindTag::daWindTag_c*)i_ac)->CreateHeap(); } /* 00000110-000003E4 .text CreateHeap__Q29daWindTag11daWindTag_cFv */ -void daWindTag::daWindTag_c::CreateHeap() { +BOOL daWindTag::daWindTag_c::CreateHeap() { /* Nonmatching */ + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(m_arcname[mType], m_bdlidx[mType]); + JUT_ASSERT(0x16A, modelData != 0); + + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000222); + if (mpModel == NULL) + return FALSE; + + J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(m_arcname[mType], m_btkidx[mType]); + JUT_ASSERT(0x17A, pbtk != NULL); + if (!mBtkAnm0.init(modelData, pbtk, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false, 0)) + return FALSE; + + pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(m_arcname[mType], m_btkidx2[mType]); + JUT_ASSERT(0x17A, pbtk != NULL); + if (!mBtkAnm1.init(modelData, pbtk, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false, 0)) + return FALSE; + + J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(m_arcname[mType], m_bckidx[mType]); + JUT_ASSERT(0x192, pbck != NULL); + if (!mBckAnm.init(modelData, pbck, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false)) + return FALSE; + + return TRUE; } /* 000003E4-00000828 .text CreateInit__Q29daWindTag11daWindTag_cFv */ void daWindTag::daWindTag_c::CreateInit() { /* Nonmatching */ + mbDraw = true; + if (((home.angle.z >> 4) & 0x0F) == 1) { + mbDraw = false; + } + + field_0x57f = false; + if ((home.angle.z & 0x0F) == 1) { + field_0x57f = true; + } + + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + f32 radius = scale.x * mData[mType * 2]; + fopAcM_setCullSizeBox(this, -radius, 0.0f, -radius, radius, 0.0f, radius); + fopAcM_setCullSizeFar(this, m_cullsize_far); + + mStts.Init(0xFF, 0xFF, this); + mCps.Set(l_cps_src); + mCps.SetStts(&mStts); + field_0x49c = scale.y; + mSwNo = fopAcM_GetParam(this) >> 24; + field_0x57c = fopAcM_isSwitch(this, mSwNo); + + bool state; + if (((fopAcM_GetParam(this) >> 23) & 1) == 0) { + state = (mSwNo != 0xFF && !fopAcM_isSwitch(this, mSwNo)); + } else { + state = (mSwNo != 0xFF && fopAcM_isSwitch(this, mSwNo)); + } + + if (mSwNo == 0xFF | state) { // nice bug + mOffsY = field_0x49c * mData[mType * 2 + 1]; + mBtkAnm1.setFrame(mBtkAnm1.getEndFrame()); + } else { + mOffsY = 0.0f; + mBtkAnm1.setFrame(0.0f); + } + + set_wind_angle(); + mPathId = (fopAcM_GetParam(this) >> 8) & 0xFF; + if (mPathId != 0xFF) { + mpPath = dPath_GetRoomPath(mPathId, fopAcM_GetRoomNo(this)); + if (mpPath != NULL) { + mPathPointDir = 1; + mCurPathPoint = 1; + mTargetPos = mpPath->mpPnt[mCurPathPoint].mPos; + current.pos = mpPath->mpPnt[0].mPos; + speedF = 10.0f + ((fopAcM_GetParam(this) >> 16) & 0x1F); + } else { + mPathId = 0xFF; + } + } + mPointWind.set_pwind_init(&mCpsS); + mLevelSeID = fopKyM_create(PROC_LEVEL_SE, checkSizeSpecialBig() ? 0x701e : 0x701d, &eyePos); + mpEmitter = NULL; + cXyz efScale(scale.x, scale.x, scale.x); + if (field_0x57f) { + g_env_light.settingTevStruct(TEV_TYPE_BG1, ¤t.pos, &mEfTevStr); + mEfColor.r = mEfTevStr.mColorC0.r; + mEfColor.g = mEfTevStr.mColorC0.g; + mEfColor.b = mEfTevStr.mColorC0.b; + mEfColor.a = mEfTevStr.mColorC0.a; + mpEmitter = dComIfGp_particle_set(0x8290, ¤t.pos, NULL, &scale, 0xFF, NULL, fopAcM_GetRoomNo(this), &mEfColor); + if (mpEmitter != NULL) + mpEmitter->setGlobalScale(efScale); + } + + current.angle.z = 0; + home.angle.z = 0; + dKy_tevstr_init(&mEfTevStr, fopAcM_GetRoomNo(this), 0xFF); } /* 00000828-000008D4 .text set_wind_angle__Q29daWindTag11daWindTag_cFv */ void daWindTag::daWindTag_c::set_wind_angle() { - /* Nonmatching */ + mCpsS.mStart = current.pos; + mCpsS.mRadius = scale.x * mData[mType * 2]; + set_mtx(); + mCps.cM3dGCps::Set(mCpsS); + mCps.CalcAtVec(); } /* 000008D4-0000099C .text _create__Q29daWindTag11daWindTag_cFv */ s32 daWindTag::daWindTag_c::_create() { - /* Nonmatching */ + fopAcM_SetupActor(this, daWindTag_c); + mType = (fopAcM_GetParam(this) >> 21) & 0x03; + s32 rt = dComIfG_resLoad(&mPhs, m_arcname[mType]); + if (rt == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, m_heapsize[mType])) + return cPhs_ERROR_e; + CreateInit(); + } + return rt; } /* 00000E60-00000F74 .text set_mtx__Q29daWindTag11daWindTag_cFv */ void daWindTag::daWindTag_c::set_mtx() { - /* Nonmatching */ + f32 offsY = mOffsY; + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::transM(0.0f, offsY, 0.0f); + mDoMtx_stack_c::multVec(&cXyz::Zero, &mCpsS.mEnd); + if (current.angle.x == 0) { + mCpsS.mEnd.x = current.pos.x; + mCpsS.mEnd.z = current.pos.z; + } + mpModel->setBaseScale(scale); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 00000F74-00000F88 .text checkSizeSpecialBig__Q29daWindTag11daWindTag_cFv */ -void daWindTag::daWindTag_c::checkSizeSpecialBig() { - /* Nonmatching */ +bool daWindTag::daWindTag_c::checkSizeSpecialBig() { + if (mType == 1) + return true; + return false; } /* 00000F88-00001044 .text set_wind_se_sub__Q29daWindTag11daWindTag_cFUlP4cXyz */ -void daWindTag::daWindTag_c::set_wind_se_sub(unsigned long, cXyz*) { - /* Nonmatching */ +void daWindTag::daWindTag_c::set_wind_se_sub(u32, cXyz* pos) { + if (mLevelSeID != fpcM_ERROR_PROCESS_ID_e) { + dLevelSe_c* se = (dLevelSe_c*)fopKyM_SearchByID(mLevelSeID); + if (se != NULL) { + s8 reverb = dComIfGp_getReverb(fopAcM_GetRoomNo(this)); + se->setReverb(100, reverb); + se->mPos = *pos; + if (mOffsY < 1.0f) + se->mFlag |= 0x08; + else + se->mFlag &= ~0x08; + } + } } /* 00001044-000011CC .text set_wind_se__Q29daWindTag11daWindTag_cFv */ void daWindTag::daWindTag_c::set_wind_se() { /* Nonmatching */ + f32 radius = scale.x * mData[mType * 2]; + camera_class* camera = dComIfGp_getCamera(0); + + cM3dGCps cps; + cM3dGSph camSph; + cps.SetR(radius); + cps.SetStartEnd(mCpsS.mStart, mCpsS.mEnd); + camSph.SetC(camera->mLookat.mEye); + camSph.SetR(1.0f); + Vec cross; + if (cM3d_Cross_CpsSph(cps, camSph, &cross)) { + mSePos = eyePos; + set_wind_se_sub(0, &mSePos); + } else { + cXyz pos = eyePos; + cps.NearPos(pos, &mSePos); + set_wind_se_sub(0, &mSePos); + } } /* 00001234-000015C8 .text _execute__Q29daWindTag11daWindTag_cFv */ -BOOL daWindTag::daWindTag_c::_execute() { +bool daWindTag::daWindTag_c::_execute() { /* Nonmatching */ } /* 000015C8-0000161C .text path_move__Q29daWindTag11daWindTag_cFv */ void daWindTag::daWindTag_c::path_move() { - /* Nonmatching */ + if (mPathId != 0xFF && cLib_chasePos(¤t.pos, mTargetPos, speedF)) + set_next_pnt(); } /* 0000161C-00001700 .text set_next_pnt__Q29daWindTag11daWindTag_cFv */ void daWindTag::daWindTag_c::set_next_pnt() { /* Nonmatching */ + if (mPathId == 0xFF) + return; + + mCurPathPoint += mPathPointDir; + if (mpPath->mLoops & 1) { + if (mCurPathPoint > mpPath->m_num - 1) { + mCurPathPoint = 0; + } else if (mCurPathPoint < 0) { + mCurPathPoint = mpPath->m_num - 1; + } + } else { + if (mCurPathPoint > mpPath->m_num - 1) { + mPathPointDir = -1; + mCurPathPoint = mpPath->m_num - 2; + } else if (mCurPathPoint < 0) { + mPathPointDir = 1; + mCurPathPoint = 0; + } + } + + mTargetPos = mpPath->mpPnt[mCurPathPoint].mPos; } /* 00001700-00001814 .text _draw__Q29daWindTag11daWindTag_cFv */ -BOOL daWindTag::daWindTag_c::_draw() { - /* Nonmatching */ +bool daWindTag::daWindTag_c::_draw() { + if (!mbDraw) + return TRUE; + + g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType(mpModel, &tevStr); + mBtkAnm0.entry(mpModel->getModelData()); + mBtkAnm1.entry(mpModel->getModelData()); + mBckAnm.entry(mpModel->getModelData()); + mDoExt_modelUpdateDL(mpModel); + + if (mpEmitter != NULL) { + g_env_light.settingTevStruct(TEV_TYPE_BG1, ¤t.pos, &mEfTevStr); + mEfColor.r = mEfTevStr.mColorC0.r; + mEfColor.g = mEfTevStr.mColorC0.g; + mEfColor.b = mEfTevStr.mColorC0.b; + mpEmitter->setGlobalPrmColor(mEfColor.r, mEfColor.g, mEfColor.b); + } + + return TRUE; } /* 00001814-00001AA4 .text MoveEmitter__Q29daWindTag11daWindTag_cFv */ @@ -82,28 +325,28 @@ void daWindTag::daWindTag_c::MoveEmitter() { } /* 00001B00-00001B20 .text daWindTag_Create__FPv */ -static s32 daWindTag_Create(void*) { - /* Nonmatching */ +static s32 daWindTag_Create(void* i_ac) { + return ((daWindTag::daWindTag_c*)i_ac)->_create(); } /* 00001B20-00001B44 .text daWindTag_Delete__FPv */ -static BOOL daWindTag_Delete(void*) { - /* Nonmatching */ +static BOOL daWindTag_Delete(void* i_ac) { + return ((daWindTag::daWindTag_c*)i_ac)->_delete(); } /* 00001B44-00001B68 .text daWindTag_Draw__FPv */ -static BOOL daWindTag_Draw(void*) { - /* Nonmatching */ +static BOOL daWindTag_Draw(void* i_ac) { + return ((daWindTag::daWindTag_c*)i_ac)->_draw(); } /* 00001B68-00001B8C .text daWindTag_Execute__FPv */ -static BOOL daWindTag_Execute(void*) { - /* Nonmatching */ +static BOOL daWindTag_Execute(void* i_ac) { + return ((daWindTag::daWindTag_c*)i_ac)->_execute(); } /* 00001B8C-00001B94 .text daWindTag_IsDelete__FPv */ static BOOL daWindTag_IsDelete(void*) { - /* Nonmatching */ + return TRUE; } static actor_method_class daWindTagMethodTable = { diff --git a/src/d/actor/d_a_windmill.cpp b/src/d/actor/d_a_windmill.cpp index f8e3a8452..441178459 100644 --- a/src/d/actor/d_a_windmill.cpp +++ b/src/d/actor/d_a_windmill.cpp @@ -5,20 +5,26 @@ #include "d/actor/d_a_windmill.h" #include "m_Do/m_Do_ext.h" +#include "d/d_com_inf_game.h" #include "d/d_procname.h" +const char* daWindMill_c::m_arcname[] = { "Hpu1", "Hpu2" }; + /* 00000078-000000E8 .text _delete__12daWindMill_cFv */ BOOL daWindMill_c::_delete() { - /* Nonmatching */ + if (heap != NULL && mpBgW != NULL) + dComIfG_Bgsp()->Release(mpBgW); + dComIfG_resDelete(&mPhs, m_arcname[mType]); + return TRUE; } /* 000000E8-00000108 .text CheckCreateHeap__FP10fopAc_ac_c */ -static BOOL CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL CheckCreateHeap(fopAc_ac_c* i_ac) { + return ((daWindMill_c*)i_ac)->CreateHeap(); } /* 00000108-000002A0 .text CreateHeap__12daWindMill_cFv */ -void daWindMill_c::CreateHeap() { +BOOL daWindMill_c::CreateHeap() { /* Nonmatching */ } @@ -34,7 +40,11 @@ static BOOL nodeCallBack(J3DNode*, int) { /* 00000608-00000670 .text search_wind__12daWindMill_cFv */ void daWindMill_c::search_wind() { - /* Nonmatching */ + fopAc_ac_c* windTag = fopAcM_SearchByName(PROC_WindTag); + if (windTag != NULL) + mWindTagId = fopAcM_GetID(windTag); + else + mWindTagId = fpcM_ERROR_PROCESS_ID_e; } /* 00000670-00000804 .text _create__12daWindMill_cFv */ @@ -73,28 +83,28 @@ BOOL daWindMill_c::_draw() { } /* 000017A4-000017C4 .text daWindMill_Create__FPv */ -static s32 daWindMill_Create(void*) { - /* Nonmatching */ +static s32 daWindMill_Create(void* i_ac) { + return ((daWindMill_c*)i_ac)->_create(); } /* 000017C4-000017E8 .text daWindMill_Delete__FPv */ -static BOOL daWindMill_Delete(void*) { - /* Nonmatching */ +static BOOL daWindMill_Delete(void* i_ac) { + return ((daWindMill_c*)i_ac)->_delete(); } /* 000017E8-0000180C .text daWindMill_Draw__FPv */ -static BOOL daWindMill_Draw(void*) { - /* Nonmatching */ +static BOOL daWindMill_Draw(void* i_ac) { + return ((daWindMill_c*)i_ac)->_draw(); } /* 0000180C-00001830 .text daWindMill_Execute__FPv */ -static BOOL daWindMill_Execute(void*) { - /* Nonmatching */ +static BOOL daWindMill_Execute(void* i_ac) { + return ((daWindMill_c*)i_ac)->_execute(); } /* 00001830-00001838 .text daWindMill_IsDelete__FPv */ static BOOL daWindMill_IsDelete(void*) { - /* Nonmatching */ + return TRUE; } static actor_method_class daWindMillMethodTable = {