From 8018710181ca147e898907a803e9db1a4548a0f8 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 24 Oct 2023 01:01:06 -0400 Subject: [PATCH] d_event_data start --- include/d/d_com_inf_game.h | 22 +++++- include/d/d_event_data.h | 52 ++++++++++++- src/d/actor/d_a_mbdoor.cpp | 16 ++-- src/d/actor/d_a_obj_mknjd.cpp | 2 +- src/d/actor/d_a_obj_toripost.cpp | 2 +- src/d/d_event_data.cpp | 126 ++++++++++++++++++++++++++++++- src/d/d_npc.cpp | 2 +- 7 files changed, 204 insertions(+), 18 deletions(-) diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index b45da38e6..d3b01bba5 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -329,6 +329,14 @@ public: mNextStage.set(i_stageName, i_roomNo, i_point, i_layer, i_wipe); } + u8 getNowStageNum() { return mPlacenameIndex; } + u8 checkStageName() { return mPlacenameState; } + void setStageNameOn(u8 idx) { + mPlacenameIndex = idx; + mPlacenameState = 2; + } + void setStageNameOff() { mPlacenameState = 1; } + fopAc_ac_c* getPlayerPtr(int idx) { return (fopAc_ac_c*)mpPlayerPtr[idx]; } fopAc_ac_c* getPlayer(int idx) { return (fopAc_ac_c*)mpPlayer[idx]; } void setPlayer(int idx, fopAc_ac_c* player) { mpPlayer[idx] = (daPy_py_c*)player; } @@ -1273,7 +1281,19 @@ inline const char* dComIfGp_getStartStageName() { } inline u32 dComIfGp_getNowStageNum() { - return g_dComIfG_gameInfo.play.mPlacenameIndex; + return g_dComIfG_gameInfo.play.getNowStageNum(); +} + +inline u8 dComIfGp_checkStageName() { + return g_dComIfG_gameInfo.play.checkStageName(); +} + +inline void dComIfGp_setStageNameOn(u8 idx) { + g_dComIfG_gameInfo.play.setStageNameOn(idx); +} + +inline void dComIfGp_setStageNameOff() { + g_dComIfG_gameInfo.play.setStageNameOff(); } inline s8 dComIfGp_getStartStageRoomNo() { diff --git a/include/d/d_event_data.h b/include/d/d_event_data.h index f3c3ee6af..30c035ca4 100644 --- a/include/d/d_event_data.h +++ b/include/d/d_event_data.h @@ -23,16 +23,61 @@ struct event_binary_data_header { class dEvDtData_c {}; -class dEvDtCut_c {}; +class dEvDtCut_c { +public: + void startCheck(); +}; -class dEvDtStaff_c {}; +class dEvDtStaff_c { +public: + void specialProc_WaitStart(int); + void specialProc_WaitProc(int); + void specialProc(); + void init(); + void advanceCut(int); + void specialProcLight(); + void specialProcMessage(); + void specialProcSound(); + void specialProcCreate(); + void specialProcDirector(); + void specialProcPackage(); + void specialProcTimekeeper(); -class dEvDtEvent_c {}; +public: + /* 0x00 */ char mName[32]; + /* 0x20 */ int mSub; + /* 0x24 */ int mIndex; + /* 0x28 */ int m28; + /* 0x2C */ int mStaffType; + /* 0x30 */ int mFirstCutIdx; + /* 0x34 */ u8 m34[0x38 - 0x34]; + /* 0x38 */ int mCurCutIdx; + /* 0x3C */ u32 mCurActionIdx; + /* 0x40 */ s16 mWipeDirection; + /* 0x42 */ s16 mTimer; + /* 0x44 */ u8 m44; + /* 0x45 */ u8 m45; + /* 0x46 */ u8 mbIsAdvance; + /* 0x47 */ u8 mbNeedsAction; + /* 0x48 */ u8 field_48[0x50 - 0x48]; +}; + +class dEvDtEvent_c { +public: + void finish_check(); + void specialStaffProc(dEvDtStaff_c*); +}; class dEvDtFlag_c { public: dEvDtFlag_c() {} + void flagCheck(int); + void flagSet(int); + void flagMaxCheck(int); + void init(); + +public: u32 mFlags[320]; }; // Size = 0x500 @@ -45,6 +90,7 @@ public: void advanceCut(dEvDtEvent_c*); void advanceCutLocal(dEvDtStaff_c*); +public: /* 0x00 */ event_binary_data_header* mHeaderP; /* 0x04 */ dEvDtEvent_c* mEventP; /* 0x08 */ dEvDtStaff_c* mStaffP; diff --git a/src/d/actor/d_a_mbdoor.cpp b/src/d/actor/d_a_mbdoor.cpp index 7ea78c60b..85258d152 100644 --- a/src/d/actor/d_a_mbdoor.cpp +++ b/src/d/actor/d_a_mbdoor.cpp @@ -323,7 +323,7 @@ s32 daMbdoor_c::getDemoAction() { "ADJUSTMENT", }; - return dComIfGp_evmng_getMyActIdx(mEvtStaffId, action_table, 9, 0, 0); + return dComIfGp_evmng_getMyActIdx(mEvtStaffId, action_table, ARRAY_SIZE(action_table), 0, 0); } /* 00000B3C-00000F78 .text demoProc__10daMbdoor_cFv */ @@ -336,33 +336,33 @@ void daMbdoor_c::demoProc() { if (dComIfGp_evmng_getIsAddvance(mEvtStaffId)) { switch (actIdx) { - case 1: + case 1: // SET_START calcMtx(); goal = field_0x2c4; dComIfGp_evmng_setGoal(&goal); break; - case 2: + case 2: // SET_ANGLE angle = current.angle.y + 0x7FFF; player->changeDemoMoveAngle(angle); break; - case 4: + case 4: // OPEN fopAcM_seStart(this, JA_SE_OBJ_MJ_GATE_OPEN, 0); field_0x2b4 = 0; break; - case 5: + case 5: // STOP_OPEN fopAcM_seStart(this, JA_SE_OBJ_MJ_GATE_BAR_OPEN, 0); field_0x2b4 = 0; field_0x2b6 = 1; break; - case 6: + case 6: // SET_GOAL goal = field_0x2d0; dComIfGp_evmng_setGoal(&goal); break; - case 7: + case 7: // SET_GOAL2 goal = field_0x2dc; dComIfGp_evmng_setGoal(&goal); break; - case 8: + case 8: // ADJUSTMENT calcMtx(); field_0x2b8 = 0; u32* timerP = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "Timer"); diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 132e3db5a..23f894362 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -547,7 +547,7 @@ void daObjMknjD::Act_c::privateCut() { int staffIdx = dComIfGp_evmng_getMyStaffId("MknjD", NULL, 0); if (staffIdx != -1) { - mActionIdx = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_table, 9, 1, 0); + mActionIdx = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_table, ARRAY_SIZE(cut_name_table), 1, 0); if (mActionIdx == -1) { dComIfGp_evmng_cutEnd(staffIdx); diff --git a/src/d/actor/d_a_obj_toripost.cpp b/src/d/actor/d_a_obj_toripost.cpp index e2485365f..15f670ea0 100644 --- a/src/d/actor/d_a_obj_toripost.cpp +++ b/src/d/actor/d_a_obj_toripost.cpp @@ -246,7 +246,7 @@ bool daObjTpost_c::cutProc() { int staffIdx = dComIfGp_evmng_getMyStaffId("Tpost", 0, 0); if(staffIdx != -1) { - int actIdx = dComIfGp_evmng_getMyActIdx(staffIdx, action_table, 3, 1, 0); + int actIdx = dComIfGp_evmng_getMyActIdx(staffIdx, action_table, ARRAY_SIZE(action_table), 1, 0); if(actIdx == -1) { dComIfGp_evmng_cutEnd(staffIdx); } diff --git a/src/d/d_event_data.cpp b/src/d/d_event_data.cpp index 619f1eb1a..734815ce1 100644 --- a/src/d/d_event_data.cpp +++ b/src/d/d_event_data.cpp @@ -3,8 +3,8 @@ // Translation Unit: d_event_data.cpp // -#include "d_event_data.h" -#include "dolphin/types.h" +#include "d/d_event_data.h" +#include "d/d_com_inf_game.h" /* 80071778-8007195C .text dEvDt_Next_Stage__Fii */ void dEvDt_Next_Stage(int, int) { @@ -73,7 +73,127 @@ void dEvDtStaff_c::specialProcLight() { /* 80071F58-80072458 .text specialProcMessage__12dEvDtStaff_cFv */ void dEvDtStaff_c::specialProcMessage() { - /* Nonmatching */ + int staffIdx = dComIfGp_evmng_getMyStaffId("MESSAGE", NULL, 0); + if (staffIdx == -1) { + JUT_ASSERT(0x1C2, 0); + return; + } + + static char* action_table[] = { + "WAIT", + "CREATE_MSG", + "PUSHBUTTON", + "FINISH", + "CONTINUE", + "END", + "DELETE", + "TELOP_ON", + "TELOP_OFF", + }; + static u32 l_msgId; + static msg_class* l_msg; + static int l_msgNo; + + int actIdx = dComIfGp_evmng_getMyActIdx(staffIdx, action_table, ARRAY_SIZE(action_table), 0, 0); + if (dComIfGp_evmng_getIsAddvance(staffIdx)) { + switch (actIdx) { + case 0: // WAIT + specialProc_WaitStart(staffIdx); + break; + case 1: // CREATE_MSG + l_msgId = -1; + l_msg = NULL; + u32* idata = dComIfGp_evmng_getMyIntegerP(staffIdx, "msgNo"); + JUT_ASSERT(0x1D2, idata); + l_msgNo = *idata; + mWipeDirection = 0; + break; + case 3: // FINISH + case 5: // END + JUT_ASSERT(0x1D8, l_msg); + l_msg->mMode = 0x10; + break; + case 4: // CONTINUE + JUT_ASSERT(0x1DC, l_msg); + l_msg->mMode = 0xF; + idata = dComIfGp_evmng_getMyIntegerP(staffIdx, "msgNo"); + JUT_ASSERT(0x1DF, idata); + l_msgNo = *idata; + fopMsgM_messageSet(l_msgNo); + break; + case 7: // TELOP_ON + idata = dComIfGp_evmng_getMyIntegerP(staffIdx, "tlpNo"); + JUT_ASSERT(0x1E5, idata); + dComIfGp_setStageNameOn(*idata); + specialProc_WaitStart(staffIdx); + break; + case 8: // TELOP_OFF + dComIfGp_setStageNameOff(); + break; + } + } + + switch (actIdx) { + case 0: // WAIT + case 7: // TELOP_ON + specialProc_WaitProc(staffIdx); + break; + case 1: // CREATE_MSG + switch (mWipeDirection) { + case 0: + l_msgId = fopMsgM_messageSet(l_msgNo); + if (l_msgId != -1) { + mWipeDirection++; + } + break; + case 1: + l_msg = fopMsgM_SearchByID(l_msgId); + if (l_msg) { + mWipeDirection++; + } + break; + case 2: + dComIfGp_evmng_cutEnd(staffIdx); + break; + } + break; + case 2: // PUSHBUTTON + JUT_ASSERT(0x209, l_msg); + if (l_msg->mMode == 0xE) { + dComIfGp_evmng_cutEnd(staffIdx); + } + break; + case 3: // FINISH + case 6: // DELETE + if (!l_msg) { + dComIfGp_evmng_cutEnd(staffIdx); + } else if (l_msg->mMode == 0x12) { + l_msg->mMode = 0x13; + l_msgId = -1; + l_msg = NULL; + dComIfGp_evmng_cutEnd(staffIdx); + } + break; + case 4: // CONTINUE + dComIfGp_evmng_cutEnd(staffIdx); + break; + case 5: // END + switch (l_msg->mMode) { + case 0x11: + case 0x12: + dComIfGp_evmng_cutEnd(staffIdx); + break; + } + break; + case 8: // TELOP_OFF + if (dComIfGp_checkStageName() == 0) { + dComIfGp_evmng_cutEnd(staffIdx); + } + break; + default: + dComIfGp_evmng_cutEnd(staffIdx); + break; + } } /* 80072458-80072748 .text specialProcSound__12dEvDtStaff_cFv */ diff --git a/src/d/d_npc.cpp b/src/d/d_npc.cpp index 28498c5fe..064660cd3 100644 --- a/src/d/d_npc.cpp +++ b/src/d/d_npc.cpp @@ -756,7 +756,7 @@ bool dNpc_EventCut_c::cutProc() { }, }; - mCurActIdx = dComIfGp_evmng_getMyActIdx(mEvtStaffId, action_table, 7, 1, 0); + mCurActIdx = dComIfGp_evmng_getMyActIdx(mEvtStaffId, action_table, ARRAY_SIZE(action_table), 1, 0); if(mCurActIdx == -1) { return false; }