diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 98d844f2f..d7c9ef6aa 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -110,7 +110,7 @@ public: virtual void checkCutCharge() const; virtual void getBokoFlamePos(cXyz*); virtual void checkTactWait() const; - virtual void setTactZev(unsigned int, int, char*); + virtual void setTactZev(unsigned int, int, const char*); virtual void onDekuSpReturnFlg(u8); virtual void checkComboCutTurn() const; virtual f32 getBaseAnimeFrameRate() = 0; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 7d6bfa1de..0f4ccdde4 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -837,6 +837,10 @@ inline fopAc_ac_c* dComIfGp_getPlayer(int idx) { return g_dComIfG_gameInfo.play.getPlayer(idx); } +inline fopAc_ac_c* dComIfGp_getCb1Player() { + return g_dComIfG_gameInfo.play.getPlayerPtr(1); +} + inline roomRead_class* dComIfGp_getStageRoom() { return g_dComIfG_gameInfo.play.getStage().getRoom(); } @@ -1195,6 +1199,10 @@ inline fopAc_ac_c* dComIfGp_event_getTalkPartner() { return g_dComIfG_gameInfo.play.getEvent().convPId(t); } +inline void dComIfGp_event_setTalkPartner(void* i_actor) { + g_dComIfG_gameInfo.play.getEvent().setPtT(i_actor); +} + inline fopAc_ac_c* dComIfGp_event_getItemPartner() { u32 i = g_dComIfG_gameInfo.play.getEvent().mPtItem; return g_dComIfG_gameInfo.play.getEvent().convPId(i); @@ -1246,6 +1254,10 @@ inline char* dComIfGp_evmng_getMyStringP(int staffIdx, const char* name) { return reinterpret_cast(dComIfGp_getEventManager().getMySubstanceP(staffIdx, name, 4)); //type 4 is string } +inline BOOL dComIfGp_evmng_startCheck(s16 eventID) { + return dComIfGp_getEventManager().startCheck(eventID); +} + inline BOOL dComIfGp_evmng_endCheck(s16 eventID) { return dComIfGp_getEventManager().endCheck(eventID); } diff --git a/include/d/d_event.h b/include/d/d_event.h index 464231fc4..a17cb00c0 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -69,7 +69,7 @@ public: void remove(); void getStageEventDt(); void nextStageEventDt(void*); - void getPId(void*); + int getPId(void*); fopAc_ac_c * convPId(unsigned int); void getTactFreeMStick(int); void getTactFreeCStick(int); @@ -78,6 +78,7 @@ public: u8 getTalkXYBtn() { return mTalkButton; } bool chkTalkXY() { return mTalkButton == 1 || mTalkButton == 2 || mTalkButton == 3; } void setPtI_Id(u32 id) { mPtItem = id; } + void setPtT(void* i_actor) { mPtTalk = getPId(i_actor); } u8 getPreItemNo() { return mItemNo; } u16 chkEventFlag(u16 flag) { return flag & mEventFlag; } @@ -116,4 +117,4 @@ public: /* 0xEE */ u8 mTactFreeCStick[4]; }; // Size = 0xF4 -#endif /* D_EVENT_D_EVENT_H */ \ No newline at end of file +#endif /* D_EVENT_D_EVENT_H */ diff --git a/include/d/d_event_manager.h b/include/d/d_event_manager.h index 4be016f03..dbcc0fba8 100644 --- a/include/d/d_event_manager.h +++ b/include/d/d_event_manager.h @@ -37,7 +37,7 @@ public: void getEventData(s16); s16 getEventIdx(const char*, u8); void order(s16); - void startCheck(s16); + bool startCheck(s16); BOOL startCheckOld(const char*); BOOL endCheck(s16); BOOL endCheckOld(const char*); @@ -76,4 +76,4 @@ inline int dEvmng_strcmp(const char* s1, const char* s2) { return strcmp(s1, s2); } -#endif /* D_EVENT_D_EVENT_MANAGER_H */ \ No newline at end of file +#endif /* D_EVENT_D_EVENT_MANAGER_H */ diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index a0eee9707..1dd104b46 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -55,6 +55,10 @@ inline void mDoAud_load2ndDynamicWave() { mDoAud_zelAudio_c::getInterface()->load2ndDynamicWave(); } +inline void mDoAud_taktModeMuteOff() { + mDoAud_zelAudio_c::getInterface()->taktModeMuteOff(); +} + inline void mDoAud_resetProcess() { if (mDoAud_zelAudio_c::isResetFlag()) { mDoAud_zelAudio_c::getInterface()->resetProcess(); diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 54cf9c29e..1e3fa65a6 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -103,7 +103,7 @@ namespace daObjMknjD { void privateCut(); bool daObjMknjD_break(); - int Execute(float(**)[3][4]); + int Execute(Mtx**); int Draw(); static const char M_arcname[]; @@ -816,9 +816,221 @@ bool daObjMknjD::Act_c::daObjMknjD_break() { } /* 0000195C-000020E0 .text Execute__Q210daObjMknjD5Act_cFPPA3_A4_f */ -int daObjMknjD::Act_c::Execute(float(**)[3][4]) { +int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { /* Nonmatching */ - return 0; + daPy_py_c* player = static_cast(dComIfGp_getPlayer(0)); + daPy_py_c* partner = static_cast(dComIfGp_getCb1Player()); + + switch (m043F) { + case 0: + mEvtInfo.onCondition(1); + + if (mEvtInfo.checkCommandTalk() == true) { + m0500 = 1; + m043F = 0x0B; + } + else if (partner != NULL) { + cXyz partnerDiff = current.pos - partner->current.pos; + + s16 rotDiff = cM_atan2s(partnerDiff.x, partnerDiff.z) - current.angle.y; + f32 absXZ = partnerDiff.absXZ(); + + if (absXZ < 800.0f && (rotDiff < -0x4000 || rotDiff > 0x4000)) { + if (dComIfGp_checkPlayerStatus1(0, 1) != 0) { + m043F = 1; + manage_friend_draw(0); + } + } + } + + break; + case 1: + if (m043E == 1) { + static_cast(dComIfGp_getPlayer(0))->setTactZev(fopAcM_GetID(this), 4, daObjMknjD_EventName[3]); + } + else { + static_cast(dComIfGp_getPlayer(0))->setTactZev(fopAcM_GetID(this), 3, daObjMknjD_EventName[2]); + } + + m043F = 2; + break; + case 2: + if (dComIfGp_evmng_startCheck(mCheckEventIdx) != 0) { + if (partner != NULL && player != NULL) { + s16 rotDiff = cM_atan2s(current.pos.x - partner->current.pos.x, current.pos.z - partner->current.pos.z) - current.angle.y; + f32 absXZ = (partner->current.pos - current.pos).absXZ(); + + if (absXZ < 800.0f && (rotDiff >= -0x4000 && rotDiff > 0x4000)) { + fopAcM_orderChangeEventId(this, mDemoEventIdx, 0, 0xFFFF); + dComIfGs_onEventBit(m0430); + + s16 procMedli = PROC_NPC_MD; + void* judgeResult = fopAcIt_Judge(fpcSch_JudgeForPName, &procMedli); + + if (judgeResult != NULL) { + dComIfGp_event_setTalkPartner(judgeResult); + } + + m043F = 6; + } + else { + fopAcM_orderChangeEventId(this, mErrorEventIdx, 0, 0xFFFF); + + m043F = 3; + manage_friend_draw(1); + } + } + else { + fopAcM_orderChangeEventId(this, mErrorEventIdx, 0, 0xFFFF); + + m043F = 3; + manage_friend_draw(1); + } + } + else { + if (dComIfGp_checkPlayerStatus1(0, 1) == 0) { + m043F = 0; + manage_friend_draw(1); + } + } + + break; + case 3: + if (mEvtInfo.checkCommandDemoAccrpt()) { + m043F = 4; + } + + break; + case 4: + if (dComIfGp_evmng_endCheck(mErrorEventIdx)) { + dComIfGp_event_reset(); + m043F = 5; + } + + break; + case 5: + if (dComIfGp_checkPlayerStatus1(0, 1) == 0) { + m043F = 0; + } + + break; + case 6: + if (mEvtInfo.checkCommandDemoAccrpt()) { + m043F = 7; + + mDoAud_bgmStop(0x1E); + mDoAud_taktModeMuteOff(); + + dComIfGp_getAttention().mFlags |= 0x80000000; + + if (m043E == true) { + m0432 = 0x2B; + m0434 = 5; + } + else { + m0432 = 0x0E; + m0434 = 5; + } + } + + break; + case 7: + privateCut(); + + if (dComIfGp_evmng_endCheck(mDemoEventIdx)) { + dComIfGp_getAttention().mFlags &= ~0x80000000; + dComIfGp_event_onEventFlag(8); + + fopAcM_delete(this); + } + + break; + case 8: + mEvtInfo.onCondition(1); + mEvtInfo.onCondition(32); + + if (mEvtInfo.checkCommandTalk() == true) { + bool bXyzTalk = false; + + if (dComIfGp_event_chkTalkXY()) { + bXyzTalk = true; + } + + if (bXyzTalk) { + m0500 = 0; + m043F = 9; + + fopAcM_seStartCurrent(this, JA_SE_PRE_TAKT, 0); + } + else { + m0500 = 1; + m043F = 11; + } + } + + break; + case 9: + m043F = 10; + break; + case 10: + privateCut(); + + if (g_dComIfG_gameInfo.play.mEvtCtrl.mMode == 0) { + if (checkItemGet(mGiveItemId, 1) != 0) { + m043F = 0; + } + else { + m043F = 8; + } + } + + break; + case 11: + static_cast(dComIfGp_getPlayer(0))->onPlayerNoDraw(); + m043F = 12; + break; + case 12: + if (talk(1) == 18) { + partner->offPlayerNoDraw(); + g_dComIfG_gameInfo.play.mEvtCtrl.mEventFlag |= 8; + + if (checkItemGet(mGiveItemId, 1) != 0) { + m043F = 0; + } + else { + m043F = 8; + } + } + break; + } + + set_mtx(); + + *i_mtx = &M_tmp_mtx; + + if (m0432 > 1) { + m0432--; + } + if (m0432 == 1) { + if (m043E == true) { + mDoAud_bgmStart(0x80000000 | JA_BGM_TAKT_MAKORE); + } + else { + mDoAud_bgmStart(0x80000000 | JA_BGM_TAKT_MEDRI); + } + + m0432 = 0; + } + + if (m0434 > 1) { + m0434--; + } + if (m0434 == 1) { + manage_friend_draw(1); + m0434 = 0; + } + + return 1; } /* 000020E0-000022FC .text setMaterial__10daObjMknjDFP11J3DMaterialUc */