From 56f9e016e3fc3041e5fbdb6366ceae62f3cee70f Mon Sep 17 00:00:00 2001 From: Zeclos Date: Mon, 18 May 2026 05:33:22 +0200 Subject: [PATCH] D_a_npc_ho matching (#1008) * matching * cleanup * tiny bit more cleanup --- configure.py | 2 +- include/d/actor/d_a_npc_ho.h | 193 +++++--- include/d/d_com_inf_game.h | 4 + include/d/d_event.h | 2 +- include/d/d_snap.h | 2 +- src/d/actor/d_a_npc_ho.cpp | 898 ++++++++++++++++++++++++++++++++--- src/d/d_event.cpp | 4 +- 7 files changed, 973 insertions(+), 132 deletions(-) diff --git a/configure.py b/configure.py index c1ab0fd0c..6f9a38d5e 100755 --- a/configure.py +++ b/configure.py @@ -1644,7 +1644,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_npc_gk1"), ActorRel(NonMatching, "d_a_npc_gp1"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_npc_hi1"), - ActorRel(NonMatching, "d_a_npc_ho"), + ActorRel(Matching, "d_a_npc_ho"), ActorRel(Matching, "d_a_npc_hr"), ActorRel(Matching, "d_a_npc_jb1"), ActorRel(NonMatching, "d_a_npc_ji1"), diff --git a/include/d/actor/d_a_npc_ho.h b/include/d/actor/d_a_npc_ho.h index f89aea304..69cf69e5d 100644 --- a/include/d/actor/d_a_npc_ho.h +++ b/include/d/actor/d_a_npc_ho.h @@ -8,93 +8,156 @@ class daNpc_Ho_c : public fopAc_ac_c { public: - void ChkOrder(unsigned char) {} - void ClrOrder() {} - void SetOrder(unsigned char) {} - void chkFlag(unsigned short) {} - void clrFlag(unsigned short) {} - void getBackboneJntNum() {} - void getBackbone_y() {} - void getHeadJntNum() {} - void getHead_x() {} - void getHead_y() {} - void incAttnSetCount() {} - void setAction(int (daNpc_Ho_c::*)(void*), void*) {} - void setAttentionBasePos(cXyz) {} - void setEyePos(cXyz) {} - void setFlag(unsigned short) {} - void XyCheckCB(int); + enum HoFlags { + HO_FLAG_00000001 = 0x00000001, + HO_FLAG_00000004 = 0x00000004, + HO_FLAG_00000008 = 0x00000008, + HO_FLAG_00000010 = 0x00000010, + HO_FLAG_00000020 = 0x00000020, + }; + + enum HoStates { + HO_STATE_WAIT_01 = 0, + HO_STATE_TALK_01 = 1, + HO_STATE_TALK_02 = 2, + HO_STATE_TALK_03 = 3, + HO_STATE_TALK_03_CONTINUE = 4, + HO_STATE_GIVE_01 = 5, + HO_STATE_GIVE_02 = 6, + HO_STATE_PREACH = 7 + + }; + + enum ActionStatus { + ACTION_STARTING = 0, + ACTION_ONGOING = 1, + ACTION_ENDING = -1, + }; + + enum TalkStates { + TALK_INIT = 0, + TALK_MSG_CREATE = 1, + TALK_ACTIVE = 2, + TALK_FINISHED = -1 + }; + + typedef int (daNpc_Ho_c::*ActionFunc)(void*); + + + bool ChkOrder(u8 temp) { return mOrderFlags & temp; } + void ClrOrder() { mOrderFlags = 0; } + void SetOrder(u8 temp) { mOrderFlags |= temp; } + bool chkFlag(u16 flag) { return (mFlags & flag) == flag; } + void clrFlag(u16 flag) { mFlags &= ~flag; } + + s8 getBackboneJntNum() { return m_jnt.getBackboneJntNum(); } + s16 getBackbone_y() { return m_jnt.getBackbone_y(); } + s8 getHeadJntNum() { return m_jnt.getHeadJntNum(); } + s16 getHead_x() { return m_jnt.getHead_x(); } + s16 getHead_y() { return m_jnt.getHead_y(); } + + void incAttnSetCount() { + if (mAttnSetCount != 0xff) { + mAttnSetCount++; + } + } + + BOOL setAction(ActionFunc actionFunc, void* arg) { + if (mCurrActionFunc != actionFunc) { + if (mCurrActionFunc != NULL) { + mActionStatus = ACTION_ENDING; + (this->*mCurrActionFunc)(arg); + } + mCurrActionFunc = actionFunc; + mActionStatus = ACTION_STARTING; + (this->*mCurrActionFunc)(arg); + } + return TRUE; + } + + void setAttentionBasePos(cXyz i_attnBasePos) { mAttnBasePos = i_attnBasePos; } + void setEyePos(cXyz i_eyePos) { mEyePos = i_eyePos; } + void setFlag(u16 flag) { mFlags |= flag; } + + s16 XyCheckCB(int); void receivePendant(int); - void initTexPatternAnm(bool); + BOOL initTexPatternAnm(bool); void playTexPatternAnm(); - void setAnm(signed char); + void setAnm(s8); void setAnmStatus(); - void chkAttentionLocal(); + bool chkAttentionLocal(); void chkAttention(); void eventOrder(); void checkOrder(); - void next_msg_sub0(unsigned long); - void next_msgStatus(unsigned long*); - void getMsg(); + u32 next_msg_sub0(u32); + u16 next_msgStatus(u32*); + u32 getMsg(); void setCollision(); void msgPushButton(); - void msgAnm(unsigned char); + void msgAnm(u8); void talkInit(); - void talk(); - void init(); + u16 talk(); + BOOL init(); void setAttention(bool); void lookBack(); - void wait01(); - void talk01(); - void talk02(); - void talk03(); - void give01(); - void give02(); - void preach(); - void wait_action(void*); + bool wait01(); + bool talk01(); + bool talk02(); + bool talk03(); + bool give01(); + bool give02(); + bool preach(); + BOOL wait_action(void*); BOOL _draw(); BOOL _execute(); BOOL _delete(); cPhs_State _create(); - void CreateHeap(); + BOOL CreateHeap(); public: - /* 0x290 */ u8 m290[0x298 - 0x290]; - /* 0x298 */ mDoExt_McaMorf* mpMcaMorf; + /* 0x290 */ request_of_phase_process_class mPhs; + /* 0x298 */ mDoExt_McaMorf* mpMorf; /* 0x29C */ J3DModel* mpJoyPendentModel; - /* 0x2A0 */ u8 m2A0[0x2A4 - 0x2A0]; - /* 0x2A4 */ J3DAnmTexPattern* mpCurrentBtpAnim; - /* 0x2A8 */ mDoExt_btpAnm mBtpAnimator; - /* 0x2BC */ u8 mBtpTimer; - /* 0x2BD */ u8 m2BD[0x2BE - 0x2BD]; - /* 0x2BE */ s16 mTimer1; - /* 0x2C0 */ dBgS_Acch mAcch; + /* 0x2A0 */ u32 mShadowId; + /* 0x2A4 */ J3DAnmTexPattern* m_head_tex_pattern; + /* 0x2A8 */ mDoExt_btpAnm mBtpAnm; + /* 0x2BC */ u8 mBlinkFrame; + /* 0x2BD */ u8 field_0x2BD[0x2BE - 0x2BD]; + /* 0x2BE */ s16 mBlinkTimer; + /* 0x2C0 */ dBgS_ObjAcch mObjAcch; /* 0x484 */ dBgS_AcchCir mAcchCir; /* 0x4C4 */ dCcD_Stts mStts; - /* 0x500 */ dCcD_Cyl mCylinderCollision; - /* 0x630 */ dNpc_JntCtrl_c* mpJointControl; - /* 0x634 */ u8 m634[0x638 - 0x634]; - /* 0x638 */ u8 mHeadJointIndex; - /* 0x639 */ u8 mBackboneJointIndex; - /* 0x63A */ u8 m63A[0x664 - 0x63A]; + /* 0x500 */ dCcD_Cyl mCyl; + /* 0x630 */ dNpc_JntCtrl_c m_jnt; /* 0x664 */ cXyz mEyePos; - /* 0x670 */ cXyz mAttentionBasePos; - /* 0x67C */ u8 m67C[0x680 - 0x67C]; - /* 0x680 */ f32 mLastMorftime; - /* 0x684 */ int mCurrentMessageId; - /* 0x688 */ u8 m688[0x68C - 0x688]; - /* 0x68C */ u8 mCurrentSpeakingAnimIdx; - /* 0x68D */ u8 m68D[0x690 - 0x68D]; + /* 0x670 */ cXyz mAttnBasePos; + /* 0x67C */ s16 mMaxHeadTurnVelocity; + /* 0x67E */ s8 mAnmEnded; + /* 0x67F */ u8 mAttnSetCount; + /* 0x680 */ f32 mAnmTimer; + /* 0x684 */ u32 mCurrMsgNo; + /* 0x688 */ u16 mFlags; + /* 0x68A */ u8 mAttentionTimer; + /* 0x68B */ u8 mMsgSelectNum; + /* 0x68C */ u8 mMsgAnmIdx; + /* 0x68D */ u8 mAnmLoopCount; + /* 0x68E */ u8 mItemNum; + /* 0x68F */ u8 field_0x68F[0x690 - 0x68F]; /* 0x690 */ int mNextMessageId; - /* 0x694 */ f32 mCylinderCollisionRadius; - /* 0x698 */ u8 m698[0x6A5 - 0x698]; - /* 0x6A5 */ s8 mCurrentAnimIndex; - /* 0x6A6 */ u8 m6A6[0x6A7 - 0x6A6]; - /* 0x6A7 */ u8 mCurrentState; - /* 0x6A8 */ u8 m6A8[0x6AC - 0x6A8]; - /* 0x6AC */ int mCurrentFloorSoundId; - /* 0x6B0 */ u8 m6B0[0x6B4 - 0x6B0]; -}; + /* 0x694 */ f32 mCylCollisionRadius; + /* 0x698 */ ActionFunc mCurrActionFunc; + /* 0x6A4 */ s8 mTexPatternIdx; + /* 0x6A5 */ s8 mCurrAnmIdx; + /* 0x6A6 */ s8 mOrderFlags; + /* 0x6A7 */ s8 mState; + /* 0x6A8 */ s8 mPrevState; + /* 0x6A9 */ u8 mType; + /* 0x6AA */ s8 mActionStatus; + /* 0x6AB */ s8 mTalkState; + /* 0x6AC */ u32 mtrlSndId; + /* 0x6B0 */ s8 mReverb; + /* 0x6B1 */ u8 field_0x6B1[0x6B4 - 0x6B1]; +}; // Size: 0x6B4 #endif /* D_A_NPC_HO_H */ diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 6be1f50c6..df179afc1 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -3348,6 +3348,10 @@ inline u8 dComIfGp_event_getGtItm() { return g_dComIfG_gameInfo.play.getEvent()->getGtItm(); } +inline int dComIfGp_event_giveItemCut(u8 itemNo) { + return g_dComIfG_gameInfo.play.getEvent()->giveItemCut(itemNo); +} + inline s32 dComIfGp_event_moveApproval(void* actor) { return g_dComIfG_gameInfo.play.getEvent()->moveApproval(actor); } diff --git a/include/d/d_event.h b/include/d/d_event.h index 2dc2caa05..8e76648c1 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -101,7 +101,7 @@ public: fopAc_ac_c* convPId(fpc_ProcID); u8 getTactFreeMStick(int); u8 getTactFreeCStick(int); - bool giveItemCut(u8); + int giveItemCut(u8); u8 getTalkXYBtn() { return mTalkButton; } bool chkTalkXY() { diff --git a/include/d/d_snap.h b/include/d/d_snap.h index 0aa1abea3..e5f74d7bf 100644 --- a/include/d/d_snap.h +++ b/include/d/d_snap.h @@ -101,7 +101,7 @@ enum { /* 0x5D */ DSNAP_TYPE_UNK5D, /* 0x5E */ DSNAP_TYPE_NPC_PHOTO, /* 0x5F */ DSNAP_TYPE_RSH1, - /* 0x60 */ DSNAP_TYPE_UNK60, + /* 0x60 */ DSNAP_TYPE_HO, /* 0x61 */ DSNAP_TYPE_UNK61, /* 0x62 */ DSNAP_TYPE_UNK62, /* 0x63 */ DSNAP_TYPE_UNK63, diff --git a/src/d/actor/d_a_npc_ho.cpp b/src/d/actor/d_a_npc_ho.cpp index b3349e9e9..255c84273 100644 --- a/src/d/actor/d_a_npc_ho.cpp +++ b/src/d/actor/d_a_npc_ho.cpp @@ -7,190 +7,964 @@ #include "d/actor/d_a_npc_ho.h" #include "d/d_procname.h" #include "d/d_priority.h" +#include "d/res/res_ho.h" +#include "d/d_snap.h" +#include "m_Do/m_Do_controller_pad.h" + +static fpc_ProcID l_msgId; +static msg_class* l_msg; + +static const int l_bck_ix_tbl[] = { + HO_BCK_HO_WAIT01, + HO_BCK_HO_TALK01, + HO_BCK_HO_TALK02, + HO_BCK_HO_GLAD, + HO_BCK_HO_TALK02, +}; + +static const int l_btp_ix_tbl[] = { + HO_BTP_HO_MABA01 +}; /* 00000078-0000022C .text nodeCallBack_Ho__FP7J3DNodei */ -static BOOL nodeCallBack_Ho(J3DNode*, int) { - /* Nonmatching */ +static BOOL nodeCallBack_Ho(J3DNode* node, int calcTiming) { + cXyz temp; + cXyz temp2; + if (calcTiming == J3DNodeCBCalcTiming_In) { + J3DModel* model = j3dSys.getModel(); + daNpc_Ho_c* i_this = (daNpc_Ho_c*)model->getUserArea(); + J3DJoint* joint = (J3DJoint*)node; + int jntNo = joint->getJntNo(); + + if(i_this != NULL) { + MTXCopy(model->getAnmMtx(jntNo), *calc_mtx); + if (jntNo == i_this->getHeadJntNum()) { + temp.setall(0.0f); + cMtx_YrotM(*calc_mtx, -i_this->getHead_y()); + cMtx_ZrotM(*calc_mtx, -i_this->getHead_x()); + MtxPosition(&temp, &temp2); + i_this->setAttentionBasePos(temp2); + temp.set(20.0f, -20.0f, 0.0f); + + MtxPosition(&temp, &temp2); + i_this->setEyePos(temp2); + i_this->incAttnSetCount(); + + } else if (jntNo == i_this->getBackboneJntNum()) { + mDoMtx_XrotM(*calc_mtx, i_this->getBackbone_y()); + } + cMtx_copy(*calc_mtx, J3DSys::mCurrentMtx); + model->setAnmMtx(jntNo, *calc_mtx); + } + } + return TRUE; } /* 0000022C-0000024C .text daNpc_ho_XyCheckCB__FPvi */ -static s16 daNpc_ho_XyCheckCB(void*, int) { - /* Nonmatching */ +static s16 daNpc_ho_XyCheckCB(void* i_this, int i_itemBtn) { + return ((daNpc_Ho_c*)i_this)->XyCheckCB(i_itemBtn); } -/* 0000024C-00000254 .text XyCheckCB__10daNpc_Ho_cFi */ -void daNpc_Ho_c::XyCheckCB(int) { - /* Nonmatching */ +/* 0000024C-00000254 .text XyChedaNpc_Ho_c::XyCheckCBckCB__10daNpc_Ho_cFi */ +s16 daNpc_Ho_c::XyCheckCB(int) { + return 1; } /* 00000254-000002F8 .text receivePendant__10daNpc_Ho_cFi */ -void daNpc_Ho_c::receivePendant(int) { - /* Nonmatching */ +void daNpc_Ho_c::receivePendant(int numPendantsGiven) { + int totalGiven = dComIfGs_getEventReg(dSv_event_flag_c::UNK_C0FF); + dComIfGp_setItemBeastNumCount(7, -numPendantsGiven); + totalGiven += numPendantsGiven; + + if(totalGiven > 99) { +#if VERSION > VERSION_DEMO + dComIfGp_setItemBeastNumCount(7, totalGiven - 99); +#endif + totalGiven = 99; + } + dComIfGs_setEventReg(dSv_event_flag_c::UNK_C0FF, totalGiven); } /* 000002F8-0000040C .text initTexPatternAnm__10daNpc_Ho_cFb */ -void daNpc_Ho_c::initTexPatternAnm(bool) { - /* Nonmatching */ +BOOL daNpc_Ho_c::initTexPatternAnm(bool i_modify) { + J3DModelData* modelData = mpMorf->getModel()->getModelData(); + + m_head_tex_pattern = (J3DAnmTexPattern*)dComIfG_getObjectRes("Ho", l_btp_ix_tbl[mTexPatternIdx]); + JUT_ASSERT(DEMO_SELECT(317, 320), m_head_tex_pattern != NULL); + + if (!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, FALSE)) { + return FALSE; + } + + mBlinkFrame = 0; + mBlinkTimer = 0; + return TRUE; } /* 0000040C-00000498 .text playTexPatternAnm__10daNpc_Ho_cFv */ void daNpc_Ho_c::playTexPatternAnm() { - /* Nonmatching */ + if (cLib_calcTimer(&mBlinkTimer) == 0) { + if (mBlinkFrame >= m_head_tex_pattern->getFrameMax()) { + mBlinkFrame -= m_head_tex_pattern->getFrameMax(); + mBlinkTimer = cM_rndF(100.0f) + 30.0f; + } else { + mBlinkFrame++; + } + } } /* 00000498-0000051C .text setAnm__10daNpc_Ho_cFSc */ -void daNpc_Ho_c::setAnm(signed char) { - /* Nonmatching */ +void daNpc_Ho_c::setAnm(s8 newAnmIdx) { + f32 morf = 8.0f; + if (newAnmIdx != mCurrAnmIdx && newAnmIdx != -1) { + mCurrAnmIdx = newAnmIdx; + mAnmTimer = 0.0f; + dNpc_setAnm(mpMorf, J3DFrameCtrl::EMode_NULL, morf, 1.0f, l_bck_ix_tbl[mCurrAnmIdx], -1, "Ho"); + } } /* 0000051C-00000540 .text setAnmStatus__10daNpc_Ho_cFv */ void daNpc_Ho_c::setAnmStatus() { - /* Nonmatching */ + setAnm(0); } /* 00000540-000005F4 .text chkAttentionLocal__10daNpc_Ho_cFv */ -void daNpc_Ho_c::chkAttentionLocal() { - /* Nonmatching */ +bool daNpc_Ho_c::chkAttentionLocal() { + dAttention_c& attention = dComIfGp_getAttention(); + + if (chkFlag(HO_FLAG_00000001 | HO_FLAG_00000010)) { + return true; + } + + if (mAttentionTimer != 0) { + mAttentionTimer--; + return true; + } + + if(attention.LockonTruth()) { + return this == attention.LockonTarget(0); + } + + return this == attention.ActionTarget(0); } /* 000005F4-00000690 .text chkAttention__10daNpc_Ho_cFv */ void daNpc_Ho_c::chkAttention() { - /* Nonmatching */ + bool temp = chkFlag(HO_FLAG_00000004); + + if(chkAttentionLocal()) { + setFlag(HO_FLAG_00000004); + } else { + clrFlag(HO_FLAG_00000004); + } + + if(temp != chkFlag(HO_FLAG_00000004) && temp == true) { + m_jnt.setTrn(); + } } /* 00000690-00000708 .text eventOrder__10daNpc_Ho_cFv */ void daNpc_Ho_c::eventOrder() { - /* Nonmatching */ + if (ChkOrder(1)) { + eventInfo.onCondition(dEvtCnd_CANTALK_e); + } + if (ChkOrder(2)) { + eventInfo.onCondition(dEvtCnd_CANTALK_e); + fopAcM_orderSpeakEvent(this); + } + if (ChkOrder(4)) { + eventInfo.onCondition(dEvtCnd_CANTALKITEM_e); + } } /* 00000708-000007A8 .text checkOrder__10daNpc_Ho_cFv */ void daNpc_Ho_c::checkOrder() { - /* Nonmatching */ + if (eventInfo.mCommand == dEvtCmd_INTALK_e && ChkOrder(7)) { + if (dComIfGp_event_chkTalkXY()) { + setFlag(HO_FLAG_00000010); + } else { + setFlag(HO_FLAG_00000001); + } + talkInit(); + } + ClrOrder(); } /* 000007A8-00000884 .text next_msg_sub0__10daNpc_Ho_cFUl */ -void daNpc_Ho_c::next_msg_sub0(unsigned long) { - /* Nonmatching */ +u32 daNpc_Ho_c::next_msg_sub0(u32 msgNo) { + switch(mMsgSelectNum) { + case 0: + if(msgNo == 0x2712) { + if(dComIfGs_isEventBit(dSv_event_flag_c::UNK_2201)) { + if(dComIfGs_isEventBit(dSv_event_flag_c::UNK_1340)) { + if(dComIfGs_isEventBit(dSv_event_flag_c::UNK_1F80)) { + return 0x2720; + } + + dComIfGs_onEventBit(dSv_event_flag_c::UNK_1F80); +#if VERSION > VERSION_DEMO + if(!dKy_daynight_check()) { + dComIfGs_onTmpBit(dSv_event_tmp_flag_c::UNK_0580); + } +#else + dComIfGs_onTmpBit(dSv_event_tmp_flag_c::UNK_0580); +#endif + return 0x271E; + } + return 0x271D; + } + return 0x2716; + } + return 0x272B; + default: + return 0x2714; + } } /* 00000884-00000C0C .text next_msgStatus__10daNpc_Ho_cFPUl */ -void daNpc_Ho_c::next_msgStatus(unsigned long*) { - /* Nonmatching */ +u16 daNpc_Ho_c::next_msgStatus(u32* pMsgNo) { + u16 msgStatus = fopMsgStts_MSG_CONTINUES_e; + switch (*pMsgNo) { + case 0x2712: + case 0x2713: + *pMsgNo = next_msg_sub0(*pMsgNo); + break; + case 0x2718: + switch(mMsgSelectNum) { + case 0: + *pMsgNo = 0x271A; + dComIfGs_onEventBit(dSv_event_flag_c::UNK_1380); + break; + default: + *pMsgNo = 0x2719; + break; + } + break; + case 0x271E: + mNextMessageId = 0x2748; + mItemNum = dItem_PURPLE_RUPEE_e; + *pMsgNo = *pMsgNo + 1; + mState = HO_STATE_TALK_03; + break; + case 0x272B: + switch(mMsgSelectNum) { + case 0: + *pMsgNo = 0x272C; + break; + case 1: + *pMsgNo = 0x272E; + break; + default: + *pMsgNo = 0x2732; + break; + } + break; + case 0x2732: + *pMsgNo = 0x2736; + break; + case 0x272C: + if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1C04)) { + *pMsgNo = 0x2758; + } else if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1C08)) { + *pMsgNo = 0x2759; + } else { + *pMsgNo = 0x272D; + } + break; + case 0x2725: + setFlag(HO_FLAG_00000020); + mNextMessageId = 0x2726; + msgStatus = fopMsgStts_MSG_ENDS_e; + break; + case 0x2716: + case 0x2717: + case 0x271A: + case 0x271B: + case 0x2720: + case 0x2724: + case 0x2726: + case 0x2727: + case 0x2728: + case 0x272E: + case 0x272F: + case 0x2730: + case 0x2736: + case 0x2737: + *pMsgNo += 1; + break; + case 0x273D: + *pMsgNo = 0x275B; + receivePendant(1); + break; + case 0x273E: + if (dComIfGs_getBeastNum(7) >= 0x14) { + *pMsgNo = 0x2741; + } else { + *pMsgNo = 0x273F; + } + break; + case 0x2749: + *pMsgNo = 0x273E; + break; + case 0x275C: + mNextMessageId = 0x275D; + mItemNum = dItem_RED_RUPEE_e; + msgStatus = fopMsgStts_MSG_ENDS_e; + break; + case 0x2742: + *pMsgNo = 0x2743; + receivePendant(0x14); + break; + case 0x2743: + mNextMessageId = 0x2744; + mItemNum = COTTAGE_PAPER; + msgStatus = fopMsgStts_MSG_ENDS_e; + dComIfGs_onEventBit(dSv_event_flag_c::UNK_1C08); + dComIfGs_onTmpBit(dSv_event_tmp_flag_c::UNK_0104); + break; + case 0x274B: + *pMsgNo = 0x274D; + break; + case 0x274D: + *pMsgNo = 0x274E; + receivePendant(dComIfGs_getBeastNum(7)); + break; + case 0x274E: + if (dComIfGs_getEventReg(dSv_event_flag_c::UNK_C0FF) >= 0x28 && !dComIfGs_isEventBit(dSv_event_flag_c::UNK_1C04)) { + *pMsgNo = 0x274F; + } else { + msgStatus = fopMsgStts_MSG_ENDS_e; + } + break; + case 0x2754: + *pMsgNo = 0x2755; + int numPendantsGiven = dComIfGs_getBeastNum(7); + receivePendant(numPendantsGiven); + if (numPendantsGiven < 3) { + mItemNum = dItem_RED_RUPEE_e; + } else if (numPendantsGiven < 5) { + mItemNum = dItem_PURPLE_RUPEE_e; + } else { + mItemNum = dItem_ORANGE_RUPEE_e; + } + mNextMessageId = 0x2757; + break; + case 0x2751: + mNextMessageId = 0x2752; + mItemNum = dItem_HEROS_CHARM_e; + msgStatus = fopMsgStts_MSG_ENDS_e; + dComIfGs_onEventBit(dSv_event_flag_c::UNK_1C04); + break; + case 0x2756: + msgStatus = fopMsgStts_MSG_ENDS_e; + break; + case 0x273A: + case 0x274C: + *pMsgNo += 1; + break; + case 0x273B: + case 0x273C: + case 0x273F: + case 0x2741: + case 0x2744: + case 0x2745: + case 0x2746: + case 0x2747: + case 0x274A: + case 0x274F: + case 0x2750: + case 0x2752: + case 0x2755: + case 0x275B: + *pMsgNo += 1; + break; + default: + msgStatus = fopMsgStts_MSG_ENDS_e; + break; + } + return msgStatus; } /* 00000C0C-00000DA8 .text getMsg__10daNpc_Ho_cFv */ -void daNpc_Ho_c::getMsg() { - /* Nonmatching */ +u32 daNpc_Ho_c::getMsg() { + switch(mState) { + case HO_STATE_TALK_01: + if (dKy_checkEventNightStop()) { + return 0x2722; + } + + if (!dComIfGs_isEventBit(dSv_event_flag_c::UNK_1E01)) { + dComIfGs_onEventBit(dSv_event_flag_c::UNK_1E01); + return 0x2711; + } + + return (dComIfGs_getEventReg(dSv_event_flag_c::UNK_C0FF) == 0 ? 0 : 1) + 0x2712; + + case HO_STATE_TALK_03: + if(dComIfGp_event_getPreItemNo() != dItem_JOY_PENDANT_e || !dComIfGs_isEventBit(DEMO_SELECT(dSv_event_flag_c::UNK_1E02, dSv_event_flag_c::UNK_1E04))) { + return 0x2739; + } + + if (dComIfGs_getEventReg(dSv_event_flag_c::UNK_C0FF) == 0) { + return 0x273A; + } + + if(!dComIfGs_isEventBit(dSv_event_flag_c::UNK_1C08)) { + return 0x2749; + } + + if(!dComIfGs_isEventBit(dSv_event_flag_c::UNK_1C04)) { + if(dComIfGs_isTmpBit(dSv_event_tmp_flag_c::UNK_0104)) { + return 0x274A; + } + return 0x274C; + } + + if(dComIfGs_getEventReg(dSv_event_flag_c::UNK_C0FF) >= 0x63) { + return 0x275E; + } + return 0x2754; + + case HO_STATE_TALK_03_CONTINUE: + return mNextMessageId; + } + return 0; } /* 00000DA8-00000E4C .text setCollision__10daNpc_Ho_cFv */ void daNpc_Ho_c::setCollision() { - /* Nonmatching */ + cXyz temp(0.0f, 0.0f, 0.0f); // unused + + cXyz centerPos(current.pos); + f32 cylCollision = mCylCollisionRadius; + f32 height = 140.0f; + mCyl.SetC(centerPos); + mCyl.SetR(cylCollision); + mCyl.SetH(height); + dComIfG_Ccsp()->Set(&mCyl); } /* 00000E4C-00000E90 .text msgPushButton__10daNpc_Ho_cFv */ void daNpc_Ho_c::msgPushButton() { - /* Nonmatching */ + switch(mCurrMsgNo) { + case 0x2712: + case 0x2713: + case 0x2718: + case 0x272B: + mMsgSelectNum = l_msg->mSelectNum; + break; + } } /* 00000E90-00000EF0 .text msgAnm__10daNpc_Ho_cFUc */ -void daNpc_Ho_c::msgAnm(unsigned char) { - /* Nonmatching */ +void daNpc_Ho_c::msgAnm(u8 param_1) { + static s8 msg_anm_table[] = { + 0, 1, 2, 3, 4 + }; + + if (mMsgAnmIdx != param_1) { + mMsgAnmIdx = param_1; + if (mMsgAnmIdx < 5) { + setAnm(msg_anm_table[mMsgAnmIdx]); + } + mAnmLoopCount = 0; + } } /* 00000EF0-00000F04 .text talkInit__10daNpc_Ho_cFv */ void daNpc_Ho_c::talkInit() { - /* Nonmatching */ + mTalkState = TALK_INIT; + mMsgAnmIdx = 0xff; } /* 00000F04-000010EC .text talk__10daNpc_Ho_cFv */ -void daNpc_Ho_c::talk() { - /* Nonmatching */ +u16 daNpc_Ho_c::talk() { + u16 msgStatus = 0xFF; + if (mTalkState == TALK_INIT) { + l_msgId = fpcM_ERROR_PROCESS_ID_e; + mCurrMsgNo = getMsg(); + mTalkState = TALK_MSG_CREATE; + } else if (mTalkState != TALK_FINISHED) { + if(l_msgId == fpcM_ERROR_PROCESS_ID_e) { + l_msgId = fopMsgM_messageSet(mCurrMsgNo, this); + } else { + if (!chkFlag(HO_FLAG_00000008)) { + msgAnm(dComIfGp_getMesgAnimeAttrInfo()); + } + switch(mTalkState) { + case 1: + l_msg = fopMsgM_SearchByID(l_msgId); + if (l_msg != NULL) { + mTalkState = TALK_ACTIVE; + } + break; + case 2: + msgStatus = l_msg->mStatus; + if (msgStatus == fopMsgStts_MSG_DISPLAYED_e) { + msgPushButton(); + l_msg->mStatus = next_msgStatus(&mCurrMsgNo); + if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) { + fopMsgM_messageSet(mCurrMsgNo); + } + } else if (msgStatus == fopMsgStts_BOX_CLOSED_e) { + l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e; + mTalkState = TALK_FINISHED; + } + + if (msgStatus == fopMsgStts_MSG_CONTINUES_e && (CPad_CHECK_TRIG_A(0) || CPad_CHECK_TRIG_B(0))) { + switch (mCurrMsgNo) { + case 0x274D: + case 0x273E: + case 0x273B: + case 0x2755: + dComIfGp_evmng_CancelPresent(); + break; + } + } + break; + } + } + } + return msgStatus; } /* 000010EC-000012B8 .text init__10daNpc_Ho_cFv */ -void daNpc_Ho_c::init() { - /* Nonmatching */ +BOOL daNpc_Ho_c::init() { + attention_info.flags = fopAc_Attn_ACTION_SPEAK_e|fopAc_Attn_LOCKON_TALK_e; + attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0x6F; + attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0x6F; + gravity = -30.0f; + + switch(mType) { + case 0: + if(setAction(&daNpc_Ho_c::wait_action, NULL)) { + eventInfo.setXyCheckCB(daNpc_ho_XyCheckCB); + } + break; + } + + mAttnBasePos.set(current.pos); + mAttnBasePos.y += 100.0f; + mEyePos.set(mAttnBasePos); + eyePos.set(mEyePos); + attention_info.position.set(mAttnBasePos.x, mAttnBasePos.y + 50.0f, mAttnBasePos.z); + + mStts.Init(0xFF, 0xFF, this); + mCyl.Set(dNpc_cyl_src); + mCyl.SetStts(&mStts); + mCylCollisionRadius = 40.0f; + mtrlSndId = 0; + mReverb = dComIfGp_getReverb(fopAcM_GetRoomNo(this)); + return TRUE; } /* 000012B8-0000130C .text setAttention__10daNpc_Ho_cFb */ -void daNpc_Ho_c::setAttention(bool) { - /* Nonmatching */ +void daNpc_Ho_c::setAttention(bool param_1) { + if (!param_1 && mAttnSetCount >= 2) { + return; + } + + eyePos.set(mEyePos.x, mEyePos.y, mEyePos.z); + attention_info.position.set(mAttnBasePos.x, mAttnBasePos.y + 90.0f, mAttnBasePos.z); } /* 0000130C-00001498 .text lookBack__10daNpc_Ho_cFv */ void daNpc_Ho_c::lookBack() { - /* Nonmatching */ + cXyz temp2; + cXyz temp(0.0f, 0.0f, 0.0f); + cXyz* dstPos = NULL; + s16 desiredYRot = current.angle.y; + bool headOnlyFollow = false; + + switch(mState) { + case HO_STATE_WAIT_01: + if (chkFlag(HO_FLAG_00000004)) { + temp2 = dNpc_playerEyePos(-20.0f); + dstPos = &temp2; + temp.set(current.pos); + temp.y = eyePos.y; + headOnlyFollow = true; + } else { + desiredYRot = home.angle.y; + } + break; + default: + m_jnt.setTrn(); + temp2 = dNpc_playerEyePos(-20.0f); + dstPos = &temp2; + temp.set(current.pos); + temp.y = eyePos.y; + break; + } + + if (m_jnt.trnChk()) { + cLib_addCalcAngleS2(&mMaxHeadTurnVelocity, 0x5DC, 4, 0x800); + } else { + mMaxHeadTurnVelocity = 0; + } + + m_jnt.lookAtTarget(¤t.angle.y, dstPos, temp, desiredYRot, mMaxHeadTurnVelocity, headOnlyFollow); + shape_angle.y = current.angle.y; } /* 00001498-0000157C .text wait01__10daNpc_Ho_cFv */ -void daNpc_Ho_c::wait01() { - /* Nonmatching */ +bool daNpc_Ho_c::wait01() { + if (chkFlag(HO_FLAG_00000010)) { + mPrevState = mState; + mState = HO_STATE_TALK_02; + setAnmStatus(); + mItemNum = dItem_NONE_e; + } else if (chkFlag(HO_FLAG_00000001)) { + mPrevState = mState; + mState = HO_STATE_TALK_01; + setAnmStatus(); + } else { + SetOrder(HO_FLAG_00000001); + if (dComIfGs_isEventBit(DEMO_SELECT(dSv_event_flag_c::UNK_1E02, dSv_event_flag_c::UNK_1E04)) && !dKy_checkEventNightStop()) { + SetOrder(HO_FLAG_00000004); + } + } + return mpMorf->isMorf(); } /* 0000157C-00001678 .text talk01__10daNpc_Ho_cFv */ -void daNpc_Ho_c::talk01() { - /* Nonmatching */ +bool daNpc_Ho_c::talk01() { + if (talk() == fopMsgStts_BOX_CLOSED_e) { + if (chkFlag(HO_FLAG_00000020)) { + mState = HO_STATE_PREACH; + fopAcM_orderChangeEvent(dComIfGp_getLinkPlayer(), this, "HO_PREACH", 0, 0xFFFF); + clrFlag(HO_FLAG_00000020); + + } else { + mState = mPrevState; + setAnmStatus(); + dComIfGp_event_reset(); + clrFlag(HO_FLAG_00000001 | HO_FLAG_00000010); + + mAttentionTimer = 5; + mCylCollisionRadius = 40.0f; + } + } + return mpMorf->isMorf(); } /* 00001678-000016E8 .text talk02__10daNpc_Ho_cFv */ -void daNpc_Ho_c::talk02() { - /* Nonmatching */ +bool daNpc_Ho_c::talk02() { + if (dComIfGp_evmng_ChkPresentEnd()) { + mState = HO_STATE_TALK_03; + } + if (mCylCollisionRadius < 90.0f) { + mCylCollisionRadius += 5.0f; + } + return false; } /* 000016E8-000017D4 .text talk03__10daNpc_Ho_cFv */ -void daNpc_Ho_c::talk03() { - /* Nonmatching */ +bool daNpc_Ho_c::talk03() { + if (talk() == fopMsgStts_BOX_CLOSED_e) { + if (mItemNum != dItem_NONE_e) { + mState = HO_STATE_GIVE_01; + fopAcM_orderChangeEvent(dComIfGp_getLinkPlayer(), this, "DEFAULT_GIVEITEM", 0, 0xFFFF); + } else { + mState = mPrevState; + setAnmStatus(); + dComIfGp_event_reset(); + clrFlag(HO_FLAG_00000001 | HO_FLAG_00000010); + mAttentionTimer = 5; + mCylCollisionRadius = 40.0f; + } + } + + return mpMorf->isMorf(); } /* 000017D4-00001884 .text give01__10daNpc_Ho_cFv */ -void daNpc_Ho_c::give01() { - /* Nonmatching */ +bool daNpc_Ho_c::give01() { + if (dComIfGp_event_giveItemCut(mItemNum) != 0) { + mState = HO_STATE_GIVE_02; + } else { + JUT_ASSERT(DEMO_SELECT(1220, 1233), NULL); + } + return mpMorf->isMorf(); } /* 00001884-0000193C .text give02__10daNpc_Ho_cFv */ -void daNpc_Ho_c::give02() { - /* Nonmatching */ +bool daNpc_Ho_c::give02() { + if (dComIfGp_evmng_endCheck("DEFAULT_GIVEITEM")) { + fopAcM_orderChangeEvent(dComIfGp_getLinkPlayer(), this, "DEFAULT_TALK", 0, 0xFFFF); + mState = HO_STATE_TALK_03_CONTINUE; + mItemNum = dItem_NONE_e; + talkInit(); + } + return mpMorf->isMorf(); } /* 0000193C-00001A00 .text preach__10daNpc_Ho_cFv */ -void daNpc_Ho_c::preach() { - /* Nonmatching */ +bool daNpc_Ho_c::preach() { + setFlag(HO_FLAG_00000004); + + if (dComIfGp_evmng_endCheck("HO_PREACH")) { + fopAcM_orderChangeEvent(dComIfGp_getLinkPlayer(), this, "DEFAULT_TALK", 0, 0xFFFF); + mItemNum = dItem_NONE_e; + mState = HO_STATE_TALK_03_CONTINUE; + talkInit(); + } + return mpMorf->isMorf(); } /* 00001A00-00001B2C .text wait_action__10daNpc_Ho_cFPv */ -void daNpc_Ho_c::wait_action(void*) { - /* Nonmatching */ +BOOL daNpc_Ho_c::wait_action(void*) { + if(mActionStatus == ACTION_STARTING) { + mState = HO_STATE_WAIT_01; + setAnmStatus(); + mActionStatus++; // set to ACTION_ONGOING + } else if(mActionStatus != ACTION_ENDING) { + chkAttention(); + bool temp; + + switch(mState) { + case HO_STATE_WAIT_01: + temp = wait01(); + break; + case HO_STATE_TALK_01: + temp = talk01(); + break; + case HO_STATE_TALK_02: + temp = talk02(); + break; + case HO_STATE_TALK_03: + temp = talk03(); + break; + case HO_STATE_TALK_03_CONTINUE: + temp = talk03(); + break; + case HO_STATE_GIVE_01: + temp = give01(); + break; + case HO_STATE_GIVE_02: + temp = give02(); + break; + case HO_STATE_PREACH: + temp = preach(); + break; + default: + temp = false; + break; + } + lookBack(); + setAttention(temp); + } + return TRUE; } /* 00001B2C-00001C94 .text _draw__10daNpc_Ho_cFv */ BOOL daNpc_Ho_c::_draw() { - /* Nonmatching */ + J3DModel* pModel = mpMorf->getModel(); + J3DModelData* pModelData = pModel->getModelData(); + + g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType(pModel, &tevStr); + g_env_light.setLightTevColorType(mpJoyPendentModel, &tevStr); + mBtpAnm.entry(pModelData, mBlinkFrame); + mpMorf->entry(); + mBtpAnm.remove(pModelData); + mpJoyPendentModel->setBaseTRMtx(pModel->getAnmMtx(m_jnt.getBackboneJntNum())); + if(dComIfGs_getEventReg(dSv_event_flag_c::UNK_C0FF) != 0) { + mDoExt_modelUpdateDL(mpJoyPendentModel); + } + + f32 _90 = 90.0f; + f32 _420 = 420.0f; + cXyz shadowPos(current.pos.x, current.pos.y + _90, current.pos.z); + mShadowId = dComIfGd_setShadow( + mShadowId, 1, pModel, &shadowPos, _420, 20.0f, + current.pos.y, mObjAcch.GetGroundH(), mObjAcch.m_gnd, &tevStr + ); + + dSnap_RegistFig(DSNAP_TYPE_HO, this, 1.0f, 1.0f, 1.0f); + return TRUE; } /* 00001C94-00001EB0 .text _execute__10daNpc_Ho_cFv */ BOOL daNpc_Ho_c::_execute() { - /* Nonmatching */ + m_jnt.setParam( + /* mMaxBackboneX */ 200, + /* mMaxBackboneY */ 0x9C4, + /* mMinBackboneX */ -500, + /* mMinBackboneY */ -0x9C4, + /* mMaxHeadX */ 8000, + /* mMaxHeadY */ 8000, + /* mMinHeadX */ -0x9C4, + /* mMinHeadY */ -8000, + /* mMaxTurnStep */ 0x3E8 + ); + + playTexPatternAnm(); + + mAnmEnded = mpMorf->play(&eyePos, mtrlSndId, mReverb); + if(mpMorf->getFrame() < mAnmTimer) { + mAnmEnded = 1; + } + mAnmTimer = mpMorf->getFrame(); + if (mAnmEnded != 0) { + switch(mCurrAnmIdx) { + case 3: + if (mAnmLoopCount < 2) { + mAnmLoopCount++; + } else { + mAnmLoopCount = 0; + setAnm(2); + } + break; + case 4: + if (mAnmLoopCount < 2) { + mAnmLoopCount++; + } else { + mAnmLoopCount = 0; + setAnm(0); + } + break; + + } + } + checkOrder(); + (this->*mCurrActionFunc)(NULL); + eventOrder(); + shape_angle.y = current.angle.y; + fopAcM_posMoveF(this, mStts.GetCCMoveP()); + mObjAcch.CrrPos(*dComIfG_Bgsp()); + mtrlSndId = 0; + + if (!mObjAcch.ChkGroundHit()) { + mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(mObjAcch.m_gnd); + } + + tevStr.mRoomNo = dComIfG_Bgsp()->GetRoomId(mObjAcch.m_gnd); + tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mObjAcch.m_gnd); + + J3DModel* pModel = mpMorf->getModel(); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(current.angle.y); + pModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mpMorf->calc(); + setCollision(); + return TRUE; } /* 00001EB0-00001EFC .text _delete__10daNpc_Ho_cFv */ BOOL daNpc_Ho_c::_delete() { - /* Nonmatching */ + dComIfG_resDelete(&mPhs, "Ho"); + if (mpMorf != NULL) { + mpMorf->stopZelAnime(); + } + return TRUE; } /* 00001EFC-00001F1C .text CheckCreateHeap__FP10fopAc_ac_c */ -static BOOL CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL CheckCreateHeap(fopAc_ac_c* i_this) { + return ((daNpc_Ho_c*)i_this)->CreateHeap(); } /* 00001F1C-00002124 .text _create__10daNpc_Ho_cFv */ cPhs_State daNpc_Ho_c::_create() { - /* Nonmatching */ + fopAcM_ct_Retail(this, daNpc_Ho_c); + cPhs_State state = dComIfG_resLoad(&mPhs, "Ho"); + + if (state == cPhs_COMPLEATE_e) { + fopAcM_ct_Demo(this, daNpc_Ho_c); + + switch(fopAcM_GetName(this)) { + case PROC_NPC_HO: + mType = 0; + break; + default: + return cPhs_ERROR_e; + } + + fopAcM_SetStatusMap(this, 0x28); + fopAcM_OnStatus(this, fopAcStts_SHOWMAP_e); + + if (!fopAcM_entrySolidHeap(this, &CheckCreateHeap, 0xB7B0)) { +#if VERSION > VERSION_DEMO + mpMorf = NULL; +#endif + return cPhs_ERROR_e; + } + + fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); + + if (!init()) { +#if VERSION > VERSION_DEMO + mpMorf = NULL; +#endif + return cPhs_ERROR_e; + } + } + return state; } /* 000023F0-00002784 .text CreateHeap__10daNpc_Ho_cFv */ -void daNpc_Ho_c::CreateHeap() { - /* Nonmatching */ +BOOL daNpc_Ho_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Ho", HO_BDL_HO); + JUT_ASSERT(DEMO_SELECT(1566, 1581), modelData); + + mpMorf = new mDoExt_McaMorf( + modelData, + NULL, NULL, + (J3DAnmTransformKey*)dComIfG_getObjectRes("Ho", HO_BCK_HO_WAIT01), + J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1, + NULL, + 0x80000, + 0x11020022 + ); + + if (mpMorf == NULL || mpMorf->getModel() == NULL) { + return FALSE; + } + + J3DModel* pModel = mpMorf->getModel(); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(current.angle.y); + pModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mpMorf->calc(); + + m_jnt.setHeadJntNum(modelData->getJointName()->getIndex("head")); + JUT_ASSERT(DEMO_SELECT(1601, 1616), m_jnt.getHeadJntNum() >= 0); + + m_jnt.setBackboneJntNum(modelData->getJointName()->getIndex("backbone")); + JUT_ASSERT(DEMO_SELECT(1606, 1621), m_jnt.getBackboneJntNum() >= 0); + + J3DModelData* penModelData = (J3DModelData*)dComIfG_getObjectRes("Ho", HO_BDL_HO_PEND); + JUT_ASSERT(DEMO_SELECT(1612, 1627), penModelData); + + mpJoyPendentModel = mDoExt_J3DModel__create(penModelData, 0, 0x11020203); + + if(mpJoyPendentModel == NULL) { + return FALSE; + } + + mTexPatternIdx = 0; + +#if VERSION == VERSION_DEMO + initTexPatternAnm(false); +#else + if (!initTexPatternAnm(false)) { + return FALSE; + } +#endif + + for(u16 i = 0; i < modelData->getJointNum(); i++) { + if(i == m_jnt.getHeadJntNum() || i == m_jnt.getBackboneJntNum()) { + mpMorf->getModel()->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_Ho); + } + } + + mpMorf->getModel()->setUserArea((u32)(this)); + + mAcchCir.SetWall(30.0f, 30.0f); + mObjAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this)); + + return TRUE; } /* 00002784-000027A4 .text daNpc_Ho_Create__FP10fopAc_ac_c */ diff --git a/src/d/d_event.cpp b/src/d/d_event.cpp index e5cb903c2..374168d07 100644 --- a/src/d/d_event.cpp +++ b/src/d/d_event.cpp @@ -774,12 +774,12 @@ char* dEvt_info_c::getEventName() { } /* 800716F8-80071778 .text giveItemCut__14dEvt_control_cFUc */ -bool dEvt_control_c::giveItemCut(u8 item) { +int dEvt_control_c::giveItemCut(u8 item) { s32 staffIdx = dComIfGp_evmng_getMyStaffId("GIVEMAN"); if (staffIdx == -1) return false; dComIfGp_evmng_cutEnd(staffIdx); mGetItemNo = item; - return true; + return 1; }