From 8ab08c8844207b7b3228ac7a296594db25858626 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 12 Nov 2023 02:33:14 -0500 Subject: [PATCH] d_a_rd work --- include/d/actor/d_a_rd.h | 27 +-- include/f_op/f_op_actor_mng.h | 4 +- src/d/actor/d_a_obj_hole.cpp | 2 +- src/d/actor/d_a_rd.cpp | 367 ++++++++++++++++++++++++++++++-- src/d/actor/d_a_shop_item.cpp | 8 +- src/d/actor/d_a_tag_kb_item.cpp | 6 +- 6 files changed, 372 insertions(+), 42 deletions(-) diff --git a/include/d/actor/d_a_rd.h b/include/d/actor/d_a_rd.h index f34b69d13..fbe9866f8 100644 --- a/include/d/actor/d_a_rd.h +++ b/include/d/actor/d_a_rd.h @@ -47,25 +47,28 @@ public: class daRd_c : public fopEn_enemy_c { public: enum Proc_e { - + PROC_INIT = 0, + PROC_EXEC = 1 }; + typedef void (daRd_c::*ModeFunc)(); + static const u32 m_heapsize; static const char m_arc_name[]; static const dCcD_SrcCyl m_cyl_src; daRd_c() {} void isAnm(s8) {} - void isIkari() {} - void modeProcInit(int) {} - void offIkari() {} - void onIkari() {} + bool isIkari() { return mbIkari; } + void modeProcInit(int newMode) { modeProc(PROC_INIT, newMode); } + void offIkari() { mbIkari = false; } + void onIkari() { mbIkari = true; } - void _searchNearDeadRd(fopAc_ac_c*); - void _nodeControl(J3DNode*, J3DModel*); - void _nodeHeadControl(J3DNode*, J3DModel*); + fopAc_ac_c* _searchNearDeadRd(fopAc_ac_c*); + BOOL _nodeControl(J3DNode*, J3DModel*); + BOOL _nodeHeadControl(J3DNode*, J3DModel*); BOOL _createHeap(); - void createArrowHeap(); + bool createArrowHeap(); void checkPlayerInAttack(); void checkPlayerInCry(); void lookBack(); @@ -105,7 +108,7 @@ public: bool _execute(); void debugDraw(); bool _draw(); - void isLinkControl(); + bool isLinkControl(); void createInit(); void getArg(); s32 _create(); @@ -127,7 +130,7 @@ public: /* 0x300 */ u8 m300[0x310 - 0x300]; /* 0x310 */ int m310; /* 0x314 */ int m314; - /* 0x318 */ u8 m318[0x31C - 0x318]; + /* 0x318 */ int m318; /* 0x31C */ dBgS_ObjAcch mAcch; /* 0x4E0 */ dBgS_AcchCir mAcchCir; /* 0x520 */ dCcD_Stts mStts; @@ -159,7 +162,7 @@ public: /* 0xD1C */ s16 mD1C; /* 0xD1E */ s16 mD1E; /* 0xD20 */ u8 mD20[0xD34 - 0xD20]; - /* 0xD34 */ bool mD34; + /* 0xD34 */ bool mbIkari; /* 0xD35 */ u8 mD35[0xD44 - 0xD35]; }; diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index a91626cbd..536a469e4 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -110,8 +110,8 @@ inline u32 fopAcM_GetParam(void* pActor) { return fpcM_GetParam(pActor); } -inline u32 fopAcM_GetParamBit(void* ac, u8 shift, u8 bit) { - return (fopAcM_GetParam(ac) >> shift) & ((1 << bit) - 1); +inline u32 fopAcM_GetParamBit(u32 param, u8 shift, u8 bit) { + return (param >> shift) & ((1 << bit) - 1); } inline void fopAcM_SetParam(void* p_actor, u32 param) { diff --git a/src/d/actor/d_a_obj_hole.cpp b/src/d/actor/d_a_obj_hole.cpp index a86991aba..ed0530a49 100644 --- a/src/d/actor/d_a_obj_hole.cpp +++ b/src/d/actor/d_a_obj_hole.cpp @@ -295,7 +295,7 @@ s32 daObj_Hole_c::_createHeap() { /* 00000928-0000096C .text getArg__12daObj_Hole_cFv */ void daObj_Hole_c::getArg() { - u32 param = fopAcM_GetParamBit(this, 0, 0xFFFF); + u32 param = fopAcM_GetParamBit(fopAcM_GetParam(this), 0, 0xFFFF); mExitIdx = param & 0xFF; mHasModel = param >> 8; diff --git a/src/d/actor/d_a_rd.cpp b/src/d/actor/d_a_rd.cpp index 66bec781c..acbe3c520 100644 --- a/src/d/actor/d_a_rd.cpp +++ b/src/d/actor/d_a_rd.cpp @@ -15,6 +15,8 @@ static Vec dummy2 = {1.0f, 1.0f, 1.0f}; static u8 dummy3[4] = {0x02, 0x00, 0x02, 0x01}; static f64 dummy4[2] = {3.0, 0.5}; +static daRd_HIO_c l_HIO; + const u32 daRd_c::m_heapsize = 0x2520; const char daRd_c::m_arc_name[] = "Rd"; const dCcD_SrcCyl daRd_c::m_cyl_src = { @@ -127,32 +129,54 @@ daRd_HIO_c::daRd_HIO_c() { } /* 0000027C-000002A8 .text searchNeadDeadRd_CB__FPvPv */ -static void searchNeadDeadRd_CB(void*, void*) { - /* Nonmatching */ +static fopAc_ac_c* searchNeadDeadRd_CB(void* i_actor, void* i_this) { + return static_cast(i_this)->_searchNearDeadRd(static_cast(i_actor)); } /* 000002A8-0000030C .text _searchNearDeadRd__6daRd_cFP10fopAc_ac_c */ -void daRd_c::_searchNearDeadRd(fopAc_ac_c*) { - /* Nonmatching */ +fopAc_ac_c* daRd_c::_searchNearDeadRd(fopAc_ac_c* i_actor) { + if (fopAcM_GetName(i_actor) == PROC_RD) { + daRd_c* other = static_cast(i_actor); + if (other->mMode == 3) { + if (fopAcM_searchActorDistanceXZ(this, i_actor) < l_HIO.m34) { + return i_actor; + } + } + } + return FALSE; } /* 0000030C-00000358 .text nodeControl_CB__FP7J3DNodei */ -static void nodeControl_CB(J3DNode*, int) { - /* Nonmatching */ +static BOOL nodeControl_CB(J3DNode* node, int param_1) { + if (!param_1) { + J3DModel* model = j3dSys.getModel(); + daRd_c* i_this = reinterpret_cast(model->getUserArea()); + if (i_this) { + i_this->_nodeControl(node, model); + } + } + return TRUE; } /* 00000358-00000514 .text _nodeControl__6daRd_cFP7J3DNodeP8J3DModel */ -void daRd_c::_nodeControl(J3DNode*, J3DModel*) { +BOOL daRd_c::_nodeControl(J3DNode* node, J3DModel* model) { /* Nonmatching */ } /* 00000550-0000059C .text nodeHeadControl_CB__FP7J3DNodei */ -static void nodeHeadControl_CB(J3DNode*, int) { - /* Nonmatching */ +static BOOL nodeHeadControl_CB(J3DNode* node, int param_1) { + if (!param_1) { + J3DModel* model = j3dSys.getModel(); + daRd_c* i_this = reinterpret_cast(model->getUserArea()); + if (i_this) { + i_this->_nodeHeadControl(node, model); + } + } + return TRUE; } /* 0000059C-000006A0 .text _nodeHeadControl__6daRd_cFP7J3DNodeP8J3DModel */ -void daRd_c::_nodeHeadControl(J3DNode*, J3DModel*) { +BOOL daRd_c::_nodeHeadControl(J3DNode* node, J3DModel* model) { /* Nonmatching */ } @@ -163,12 +187,203 @@ static BOOL createHeap_CB(fopAc_ac_c* i_this) { /* 000006C0-0000096C .text _createHeap__6daRd_cFv */ BOOL daRd_c::_createHeap() { - /* Nonmatching */ + J3DModelData* modelData = static_cast(dComIfG_getObjectRes(m_arc_name, RD_BDL_RD)); + JUT_ASSERT(504, modelData != 0); + + mpMorf = new mDoExt_McaMorf( + modelData, + NULL, NULL, + static_cast(dComIfG_getObjectRes(m_arc_name, RD_BCK_SUWARIP)), + J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 1, + NULL, + 0x00080000, + 0x37441622 + ); + if (mpMorf == NULL || mpMorf->getModel() == NULL) { + return FALSE; + } + mpMorf->getModel()->setUserArea(reinterpret_cast(this)); + + if (!mInvisModel.create(mpMorf->getModel())) { + return FALSE; + } + + J3DAnmTextureSRTKey* btk = static_cast(dComIfG_getObjectRes(m_arc_name, RD_BTK_RD_CLOSE)); + JUT_ASSERT(525, btk != 0); + if (!mBtkAnm.init(modelData, btk, true, 0, 1.0f, 0, -1, false, 0)) { + return FALSE; + } + + modelData->getJointNodePointer(0x0C)->setCallBack(nodeHeadControl_CB); + + J3DAnmTevRegKey* brk = static_cast(dComIfG_getObjectRes(m_arc_name, RD_BRK_NML)); + JUT_ASSERT(550, brk != 0); + if (!mBrkAnm.init(modelData, brk, true, 0, 1.0f, 0, -1, false, 0)) { + return FALSE; + } + + return createArrowHeap() ? TRUE : FALSE; } /* 0000096C-000009D0 .text createArrowHeap__6daRd_cFv */ -void daRd_c::createArrowHeap() { - /* Nonmatching */ +bool daRd_c::createArrowHeap() { + static Vec sebone_cyl_offset[] = {{0.0f, 0.0f, 0.0f}, {30.0f, 0.0f, 0.0f}}; + static Vec muneA_cyl_offset[] = {{5.0f, -5.0f, 0.0f}, {20.0f, -5.0f, 0.0f}}; + static Vec muneB1_cyl_offset[] = {{15.0, 0.0, -15.0}, {50.0, 0.0, -15.0}}; + static Vec muneB2_cyl_offset[] = {{15.0f, 0.0f, 0.0f}, {50.0f, 0.0f, 0.0f}}; + static Vec muneB3_cyl_offset[] = {{15.0f, 0.0f, 15.0f}, {50.0f, 0.0f, 15.0f}}; + static Vec kosi1_cyl_offset[] = {{0.0f, 0.0f, -10.0f}, {20.0f, 0.0f, -10.0f}}; + static Vec kosi2_cyl_offset[] = {{0.0f, 0.0f, 0.0f}, {20.0f, 0.0f, 0.0f}}; + static Vec kosi3_cyl_offset[] = {{0.0f, 0.0f, 10.0f}, {20.0f, 0.0f, 10.0f}}; + static Vec asi1_cyl_offset[] = {{-8.0f, 0.0f, 0.0f}, {30.0f, 0.0f, 0.0f}}; + static Vec asi2_cyl_offset[] = {{-3.0f, 0.0f, 0.0f}, {15.0f, 0.0f, 0.0f}}; + static Vec asi3_cyl_offset[] = {{0.0f, 0.0f, 0.0f}, {11.0f, 0.0f, 0.0f}}; + static Vec head_sph_offset[] = {{30.0f, 0.0f, -5.0f}}; + static Vec ude1_cyl_offset[] = {{-5.0f, -8.0f, -1.0f}, {60.0f, 4.0f, 1.0f}}; + static Vec ude2_cyl_offset[] = {{-3.0f, 0.0f, 0.0f}, {55.0f, 0.0f, 0.0f}}; + static Vec te_cyl_offset[] = {{8.0f, 2.0f, 0.0f}, {30.0f, 2.0f, 0.0f}}; + static Vec yubi_cyl_offset[] = {{0.0f, 0.0f, 0.0f}, {17.0f, 0.0f, 0.0f}}; + static __jnt_hit_data_c search_data[] = { + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x01, + /* mRadius */ 4.0f, + /* mpOffsets */ (cXyz*)&kosi1_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x01, + /* mRadius */ 4.0f, + /* mpOffsets */ (cXyz*)&kosi2_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x01, + /* mRadius */ 4.0f, + /* mpOffsets */ (cXyz*)&kosi3_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x02, + /* mRadius */ 2.0f, + /* mpOffsets */ (cXyz*)&asi1_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x03, + /* mRadius */ 2.0f, + /* mpOffsets */ (cXyz*)&asi2_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x04, + /* mRadius */ 2.0f, + /* mpOffsets */ (cXyz*)&asi3_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x05, + /* mRadius */ 2.0f, + /* mpOffsets */ (cXyz*)&asi1_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x06, + /* mRadius */ 2.0f, + /* mpOffsets */ (cXyz*)&asi2_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x07, + /* mRadius */ 2.0f, + /* mpOffsets */ (cXyz*)&asi3_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x08, + /* mRadius */ 6.0f, + /* mpOffsets */ (cXyz*)&sebone_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x09, + /* mRadius */ 10.0f, + /* mpOffsets */ (cXyz*)&muneA_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x09, + /* mRadius */ 6.0f, + /* mpOffsets */ (cXyz*)&muneB1_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x09, + /* mRadius */ 6.0f, + /* mpOffsets */ (cXyz*)&muneB2_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x09, + /* mRadius */ 6.0f, + /* mpOffsets */ (cXyz*)&muneB3_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x0F, + /* mRadius */ 2.0f, + /* mpOffsets */ (cXyz*)&ude1_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x10, + /* mRadius */ 2.0f, + /* mpOffsets */ (cXyz*)&ude2_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x11, + /* mRadius */ 6.0f, + /* mpOffsets */ (cXyz*)&te_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x12, + /* mRadius */ 6.0f, + /* mpOffsets */ (cXyz*)&yubi_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x13, + /* mRadius */ 2.0f, + /* mpOffsets */ (cXyz*)&ude1_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x14, + /* mRadius */ 2.0f, + /* mpOffsets */ (cXyz*)&ude2_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x15, + /* mRadius */ 6.0f, + /* mpOffsets */ (cXyz*)&te_cyl_offset, + }, + { + /* mShapeType */ 0, // Cylinder + /* mJointIndex */ 0x16, + /* mRadius */ 6.0f, + /* mpOffsets */ (cXyz*)&yubi_cyl_offset, + }, + }; + mpJntHit = JntHit_create(mpMorf->getModel(), search_data, ARRAY_SIZE(search_data)); + if (mpJntHit) { + mJntHit = mpJntHit; + } else { + return false; + } + return true; } /* 000009D0-00000A38 .text checkPlayerInAttack__6daRd_cFv */ @@ -213,7 +428,8 @@ void daRd_c::setMtx() { /* 000019F8-00001A3C .text modeWaitInit__6daRd_cFv */ void daRd_c::modeWaitInit() { - /* Nonmatching */ + mAcchCir.SetWallR(60.0f); + speedF = 0.0f; } /* 00001A3C-00001DDC .text modeWait__6daRd_cFv */ @@ -273,7 +489,8 @@ void daRd_c::modeCry() { /* 000028B8-000028CC .text modeCryWaitInit__6daRd_cFv */ void daRd_c::modeCryWaitInit() { - /* Nonmatching */ + m310 = 60; + m314 = 45; } /* 000028CC-000029E4 .text modeCryWait__6daRd_cFv */ @@ -283,7 +500,12 @@ void daRd_c::modeCryWait() { /* 000029E4-00002A58 .text modeAttackInit__6daRd_cFv */ void daRd_c::modeAttackInit() { - /* Nonmatching */ + mAcchCir.SetWallR(70.0f); + m310 = l_HIO.m52; + m318 = l_HIO.m50; + m314 = 30; + setAnm(6, false); + speedF = 0.0f; } /* 00002A58-00002F30 .text modeAttack__6daRd_cFv */ @@ -330,8 +552,99 @@ void daRd_c::modeKanoke() { } /* 0000355C-000038D4 .text modeProc__6daRd_cFQ26daRd_c6Proc_ei */ -void daRd_c::modeProc(daRd_c::Proc_e, int) { +void daRd_c::modeProc(daRd_c::Proc_e proc, int newMode) { /* Nonmatching */ + struct ModeEntry { + ModeFunc init; + ModeFunc run; + const char* name; + }; + + static ModeEntry mode_tbl[] = { + { + &modeWaitInit, + &modeWait, + "WAIT", + }, + { + &modeDamageInit, + &modeDamage, + "DAMAGE", + }, + { + &modeParalysisInit, + &modeParalysis, + "PARALYSIS", + }, + { + &modeDeathInit, + &modeDeath, + "DEATH", + }, + { + &modeMoveInit, + &modeMove, + "MOVE", + }, + { + &modeCryInit, + &modeCry, + "CRY", + }, + { + &modeCryWaitInit, + &modeCryWait, + "CRY_WAIT", + }, + { + &modeAttackInit, + &modeAttack, + "ATTACK", + }, + { + &modeReturnInit, + &modeReturn, + "RETURN", + }, + { + &modeSilentPrayInit, + &modeSilentPray, + "SILENT_PRAY", + }, + { + &modeSwWaitInit, + &modeSwWait, + "SW_WAIT", + }, + { + &modeKanokeInit, + &modeKanoke, + "KANOKE", + }, + }; + + if (proc == PROC_INIT) { + if (newMode == 5 || newMode == 7) { + onIkari(); + setBtkAnm(3); + } else if (newMode != 1) { + offIkari(); + setBtkAnm(4); + } + + if (newMode == 3 || newMode == 0xA) { + fopAcM_OffStatus(this, fopAcStts_SHOWMAP_e); + cLib_offBit(mAttentionInfo.mFlags, fopAc_Attn_LOCKON_ENEMY_e); + } else { + fopAcM_OnStatus(this, fopAcStts_SHOWMAP_e); + cLib_onBit(mAttentionInfo.mFlags, fopAc_Attn_LOCKON_ENEMY_e); + } + + mMode = newMode; + (this->*mode_tbl[mMode].init)(); + } else if (proc == PROC_EXEC) { + (this->*mode_tbl[mMode].run)(); + } } /* 000038D4-000039AC .text setBrkAnm__6daRd_cFSc */ @@ -365,8 +678,8 @@ bool daRd_c::_draw() { } /* 00004318-00004338 .text isLinkControl__6daRd_cFv */ -void daRd_c::isLinkControl() { - /* Nonmatching */ +bool daRd_c::isLinkControl() { + return dComIfGp_getPlayer(0) != dComIfGp_getLinkPlayer(); } /* 00004338-000046A4 .text createInit__6daRd_cFv */ @@ -377,6 +690,15 @@ void daRd_c::createInit() { /* 000046A4-00004720 .text getArg__6daRd_cFv */ void daRd_c::getArg() { /* Nonmatching */ + u32 params = fopAcM_GetParam(this); + m2B4 = fopAcM_GetParamBit(params, 0x00, 1); + int areaRadius = fopAcM_GetParamBit(params, 0x01, 7); + m2BC = fopAcM_GetParamBit(params, 0x08, 8); + mSwNo = fopAcM_GetParamBit(params, 0x18, 8); + if (areaRadius == 0x7F) { + areaRadius = 0; + } + mAreaRadius = l_HIO.m30 + areaRadius; } /* 00004720-000047C8 .text _create__6daRd_cFv */ @@ -400,7 +722,12 @@ s32 daRd_c::_create() { /* 00004F60-00004FB8 .text _delete__6daRd_cFv */ bool daRd_c::_delete() { - /* Nonmatching */ + dComIfG_resDelete(&mPhs, m_arc_name); + enemy_fire_remove(&mEnemyFire); + if (heap) { + mpMorf->stopZelAnime(); + } + return true; } /* 00004FB8-00004FD8 .text daRdCreate__FPv */ diff --git a/src/d/actor/d_a_shop_item.cpp b/src/d/actor/d_a_shop_item.cpp index 8d8762b84..58aabf736 100644 --- a/src/d/actor/d_a_shop_item.cpp +++ b/src/d/actor/d_a_shop_item.cpp @@ -19,7 +19,7 @@ const char daShopItem_c::m_cloth_arcname[] = "Cloth"; const f32 daShopItem_c::m_cullfar_max = 5000.0f; char* daShopItem_c::getShopArcname() { - u8 type = fopAcM_GetParamBit(this, 8, 4); + u8 type = fopAcM_GetParamBit(fopAcM_GetParam(this), 8, 4); if(type == 1 || (type == 0 && mModelType[m_itemNo] == 0x01)) { return dItem_data::getFieldArc(m_itemNo); } @@ -29,7 +29,7 @@ char* daShopItem_c::getShopArcname() { } s16 daShopItem_c::getShopBmdIdx() { - u8 type = fopAcM_GetParamBit(this, 8, 4); + u8 type = fopAcM_GetParamBit(fopAcM_GetParam(this), 8, 4); if(type == 1 || (type == 0 && mModelType[m_itemNo] == 0x01)) { return dItem_data::getFieldBmdIdx(m_itemNo); } @@ -172,7 +172,7 @@ static int daShopItem_Create(void* i_this) { int daShopItem_c::_create() { fopAcM_SetupActor(this, daShopItem_c); - m_itemNo = fopAcM_GetParamBit(this, 0, 8); + m_itemNo = fopAcM_GetParamBit(fopAcM_GetParam(this), 0, 8); const char* arcName = getShopArcname(); if (getShopBmdIdx() == -1 || arcName == 0) { @@ -194,7 +194,7 @@ int daShopItem_c::_create() { return result2; } else if(result == cPhs_COMPLEATE_e && result2 == cPhs_COMPLEATE_e) { - u8 type = fopAcM_GetParamBit(this, 8, 4); + u8 type = fopAcM_GetParamBit(fopAcM_GetParam(this), 8, 4); if(type == 2 || (type == 0 && mModelType[m_itemNo] == 0x02)) { if(fopAcM_entrySolidHeap(this, &CheckItemCreateHeap, dItem_data::getHeapSize(m_itemNo)) == 0) { return cPhs_ERROR_e; diff --git a/src/d/actor/d_a_tag_kb_item.cpp b/src/d/actor/d_a_tag_kb_item.cpp index 34e5da11b..8813bbc93 100644 --- a/src/d/actor/d_a_tag_kb_item.cpp +++ b/src/d/actor/d_a_tag_kb_item.cpp @@ -22,10 +22,10 @@ bool daTagKbItem_c::_delete() { /* 000000C8-0000010C .text CreateInit__13daTagKbItem_cFv */ void daTagKbItem_c::CreateInit() { field_0x2a0 = fopAcM_GetParam(this); - s8 paramBit = fopAcM_GetParamBit(this, 8, 8); + s8 paramBit = fopAcM_GetParamBit(fopAcM_GetParam(this), 8, 8); field_0x29c = paramBit; - field_0x2a1 = fopAcM_GetParamBit(this, 0x10, 8); - field_0x2a4 = fopAcM_GetParamBit(this, 0x18, 8); + field_0x2a1 = fopAcM_GetParamBit(fopAcM_GetParam(this), 0x10, 8); + field_0x2a4 = fopAcM_GetParamBit(fopAcM_GetParam(this), 0x18, 8); field_0x298 = 0; field_0x299 = 0; mpActor = NULL;