From 125f2325a5d4979b8142d1610937d32f2f42fb82 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Tue, 23 Sep 2025 04:20:38 -0700 Subject: [PATCH] cleanup event stuff (#2688) * cleanup event stuff * fix debug --- include/d/d_com_inf_game.h | 97 +- include/d/d_drawlist.h | 1 + include/d/d_event.h | 149 +- include/d/d_event_data.h | 28 +- include/d/d_event_debug.h | 9 +- include/d/d_event_manager.h | 138 +- include/d/d_msg_object.h | 4 +- include/d/d_stage.h | 43 +- include/f_op/f_op_msg.h | 16 + .../MSL/MSL_C/MSL_Common/Include/cstring.h | 8 +- src/d/actor/d_a_tbox.cpp | 2 +- src/d/d_camera.cpp | 4 +- src/d/d_ev_camera.cpp | 14 +- src/d/d_event.cpp | 906 +++++++---- src/d/d_event_data.cpp | 1389 +++++++++++------ src/d/d_event_debug.cpp | 329 ++-- src/d/d_event_manager.cpp | 1383 ++++++++++------ src/d/d_lib.cpp | 2 +- src/f_op/f_op_actor_mng.cpp | 28 +- src/f_op/f_op_msg_mng.cpp | 8 +- 20 files changed, 2843 insertions(+), 1715 deletions(-) diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 13b49095bd..34a08bc343 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -3504,18 +3504,18 @@ inline s16 dComIfGp_getItemMaxBombNumCount() { return g_dComIfG_gameInfo.play.getItemMaxBombNumCount(fpcNm_ITEM_NORMAL_BOMB); } -inline BOOL dComIfGp_event_compulsory(void* param_0, const char* param_1, u16 param_2) { - return g_dComIfG_gameInfo.play.getEvent().compulsory(param_0, param_1, param_2); +inline BOOL dComIfGp_event_compulsory(void* i_actor, const char* i_eventname, u16 i_hindFlag) { + return g_dComIfG_gameInfo.play.getEvent().compulsory(i_actor, i_eventname, i_hindFlag); } -inline int dComIfGp_event_moveApproval(void* actor) { - return g_dComIfG_gameInfo.play.getEvent().moveApproval(actor); +inline int dComIfGp_event_moveApproval(void* i_actor) { + return g_dComIfG_gameInfo.play.getEvent().moveApproval(i_actor); } -inline int dComIfGp_event_order(u16 eventType, u16 priority, u16 flag, u16 param_3, void* param_4, - void* param_5, s16 eventID, u8 infoIdx) { - return g_dComIfG_gameInfo.play.getEvent().order(eventType, priority, flag, param_3, param_4, - param_5, eventID, infoIdx); +inline int dComIfGp_event_order(u16 i_type, u16 i_prio, u16 i_flags, u16 i_hindFlags, void* i_requestActor, + void* i_targetActor, s16 i_eventID, u8 i_mapToolId) { + return g_dComIfG_gameInfo.play.getEvent().order(i_type, i_prio, i_flags, i_hindFlags, i_requestActor, + i_targetActor, i_eventID, i_mapToolId); } inline void dComIfGp_event_setGtItm(int i_itemNo) { @@ -3542,28 +3542,28 @@ inline void dComIfGp_event_offHindFlag(u16 i_flag) { g_dComIfG_gameInfo.play.getEvent().offHindFlag(i_flag); } -inline void dComIfGp_evmng_cutEnd(int param_0) { - dComIfGp_getPEvtManager()->cutEnd(param_0); +inline void dComIfGp_evmng_cutEnd(int i_staffId) { + dComIfGp_getPEvtManager()->cutEnd(i_staffId); } inline cXyz* dComIfGp_evmng_getGoal() { return dComIfGp_getPEvtManager()->getGoal(); } -inline BOOL dComIfGp_evmng_startCheck(char const* i_event) { - return g_dComIfG_gameInfo.play.getEvtManager().startCheckOld(i_event); +inline BOOL dComIfGp_evmng_startCheck(char const* i_eventname) { + return g_dComIfG_gameInfo.play.getEvtManager().startCheckOld(i_eventname); } inline BOOL dComIfGp_evmng_startCheck(s16 i_eventId) { return g_dComIfG_gameInfo.play.getEvtManager().startCheck(i_eventId); } -inline BOOL dComIfGp_evmng_endCheck(const char* event) { - return g_dComIfG_gameInfo.play.getEvtManager().endCheckOld(event); +inline BOOL dComIfGp_evmng_endCheck(const char* i_eventname) { + return g_dComIfG_gameInfo.play.getEvtManager().endCheckOld(i_eventname); } -inline BOOL dComIfGp_evmng_endCheck(s16 eventID) { - return g_dComIfG_gameInfo.play.getEvtManager().endCheck(eventID); +inline BOOL dComIfGp_evmng_endCheck(s16 i_eventID) { + return g_dComIfG_gameInfo.play.getEvtManager().endCheck(i_eventID); } inline int dComIfGp_evmng_cameraPlay() { @@ -3574,20 +3574,20 @@ inline u8 dComIfGp_event_getPreItemNo() { return g_dComIfG_gameInfo.play.getEvent().getPreItemNo(); } -inline void dComIfGp_event_setItemPartner(void* param_0) { - g_dComIfG_gameInfo.play.getEvent().setPtI(param_0); +inline void dComIfGp_event_setItemPartner(void* i_actor) { + g_dComIfG_gameInfo.play.getEvent().setPtI(i_actor); } -inline void dComIfGp_event_setItemPartnerId(fpc_ProcID id) { - g_dComIfG_gameInfo.play.getEvent().setPtI_Id(id); +inline void dComIfGp_event_setItemPartnerId(fpc_ProcID i_id) { + g_dComIfG_gameInfo.play.getEvent().setPtI_Id(i_id); } inline u8 dComIfGp_event_getGtItm() { return g_dComIfG_gameInfo.play.getEvent().getGtItm(); } -inline int dComIfGp_evmng_startDemo(int param_0) { - return dComIfGp_getPEvtManager()->setStartDemo(param_0); +inline int dComIfGp_evmng_startDemo(int i_mapToolId) { + return dComIfGp_getPEvtManager()->setStartDemo(i_mapToolId); } inline void dComIfGp_event_setTalkPartner(void* i_actor) { @@ -3618,23 +3618,23 @@ inline f32 dComIfGp_event_getCullRate() { return g_dComIfG_gameInfo.play.getEvent().getCullRate(); } -inline u16 dComIfGp_event_checkHind(u16 flag) { +inline u16 dComIfGp_event_checkHind(u16 i_hindFlag) { if (!dComIfGp_event_runCheck()) { return false; } - return g_dComIfG_gameInfo.play.getEvent().checkHind(flag); + return g_dComIfG_gameInfo.play.getEvent().checkHind(i_hindFlag); } -inline u16 dComIfGp_event_chkEventFlag(u16 flag) { - return g_dComIfG_gameInfo.play.getEvent().chkEventFlag(flag); +inline u16 dComIfGp_event_chkEventFlag(u16 i_flag) { + return g_dComIfG_gameInfo.play.getEvent().chkEventFlag(i_flag); } inline BOOL dComIfGp_event_chkTalkXY() { return g_dComIfG_gameInfo.play.getEvent().chkTalkXY(); } -inline void dComIfGp_event_setCullRate(f32 f) { - g_dComIfG_gameInfo.play.getEvent().setCullRate(f); +inline void dComIfGp_event_setCullRate(f32 i_rate) { + g_dComIfG_gameInfo.play.getEvent().setCullRate(i_rate); } inline u8 dComIfGp_event_getMode() { @@ -3645,41 +3645,40 @@ inline fopAc_ac_c* dComIfGp_event_getDoorPartner() { return g_dComIfG_gameInfo.play.getEvent().getPtD(); } -inline int dComIfGp_evmng_getMyStaffId(const char* pName, fopAc_ac_c* pActor, int param_2) { - return dComIfGp_getPEvtManager()->getMyStaffId(pName, pActor, param_2); +inline int dComIfGp_evmng_getMyStaffId(const char* i_staffname, fopAc_ac_c* i_actor, int i_tagId) { + return dComIfGp_getPEvtManager()->getMyStaffId(i_staffname, i_actor, i_tagId); } -inline int dComIfGp_evmng_getMyActIdx(int i_staffIdx, char** param_1, int param_2, int param_3, - int param_4) { - return dComIfGp_getPEvtManager()->getMyActIdx(i_staffIdx, param_1, param_2, param_3, param_4); +inline int dComIfGp_evmng_getMyActIdx(int i_staffId, char** i_actions, int i_actionNum, BOOL param_3, BOOL param_4) { + return dComIfGp_getPEvtManager()->getMyActIdx(i_staffId, i_actions, i_actionNum, param_3, param_4); } -inline int dComIfGp_evmng_getIsAddvance(int param_0) { - return dComIfGp_getPEvtManager()->getIsAddvance(param_0); +inline int dComIfGp_evmng_getIsAddvance(int i_staffId) { + return dComIfGp_getPEvtManager()->getIsAddvance(i_staffId); } -inline int* dComIfGp_evmng_getMyIntegerP(int index, char* name) { - return (int*)dComIfGp_getPEvtManager()->getMySubstanceP(index, name, dEvDtData_c::TYPE_INT); +inline int* dComIfGp_evmng_getMyIntegerP(int i_staffId, char* i_dataname) { + return (int*)dComIfGp_getPEvtManager()->getMySubstanceP(i_staffId, i_dataname, dEvDtData_c::TYPE_INT); } -inline char* dComIfGp_evmng_getMyStringP(int index, char* name) { - return (char*)dComIfGp_getPEvtManager()->getMySubstanceP(index, name, dEvDtData_c::TYPE_STRING); +inline char* dComIfGp_evmng_getMyStringP(int i_staffId, char* i_dataname) { + return (char*)dComIfGp_getPEvtManager()->getMySubstanceP(i_staffId, i_dataname, dEvDtData_c::TYPE_STRING); } -inline f32* dComIfGp_evmng_getMyFloatP(int index, char* name) { - return (f32*)dComIfGp_getPEvtManager()->getMySubstanceP(index, name, dEvDtData_c::TYPE_FLOAT); +inline f32* dComIfGp_evmng_getMyFloatP(int i_staffId, char* i_dataname) { + return (f32*)dComIfGp_getPEvtManager()->getMySubstanceP(i_staffId, i_dataname, dEvDtData_c::TYPE_FLOAT); } -inline cXyz* dComIfGp_evmng_getMyXyzP(int index, char* name) { - return (cXyz*)dComIfGp_getPEvtManager()->getMySubstanceP(index, name, dEvDtData_c::TYPE_VEC); +inline cXyz* dComIfGp_evmng_getMyXyzP(int i_staffId, char* i_dataname) { + return (cXyz*)dComIfGp_getPEvtManager()->getMySubstanceP(i_staffId, i_dataname, dEvDtData_c::TYPE_VEC); } -inline int dComIfGp_evmng_getMySubstanceNum(int index, char* name) { - return dComIfGp_getPEvtManager()->getMySubstanceNum(index, name); +inline int dComIfGp_evmng_getMySubstanceNum(int i_staffId, char* i_dataname) { + return dComIfGp_getPEvtManager()->getMySubstanceNum(i_staffId, i_dataname); } -inline void dComIfGp_evmng_setGoal(cXyz* i_goal) { - dComIfGp_getPEvtManager()->setGoal(i_goal); +inline void dComIfGp_evmng_setGoal(cXyz* i_pos) { + dComIfGp_getPEvtManager()->setGoal(i_pos); } inline BOOL dComIfGp_evmng_ChkPresentEnd() { @@ -3706,9 +3705,9 @@ inline BOOL dComIfGp_evmng_isMapToolCamera(u8 mapToolID) { return g_dComIfG_gameInfo.play.getEvtManager().isMapToolCamera(mapToolID, -1); } -inline bool dComIfGp_evmng_existence(const char* event_str) { +inline bool dComIfGp_evmng_existence(const char* eventname) { return g_dComIfG_gameInfo.play.getEvtManager().getEventData( - dComIfGp_evmng_getEventIdx(event_str, -1)) != NULL; + dComIfGp_evmng_getEventIdx(eventname, 0xFF)) != NULL; } inline void dComIfGp_particle_createCommon(const void* data) { diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index ed2ba1cb40..0434be72ad 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -439,6 +439,7 @@ public: void imageDrawShadow(Mtx param_0) { mShadowControl.imageDraw(param_0); } void drawShadow(Mtx param_0) { mShadowControl.draw(param_0); } + static void wipeOut(f32 i_rate) { wipeIn(-i_rate); } static void offWipe() { mWipe = 0; } static f32 getWipeRate() { return mWipeRate; } diff --git a/include/d/d_event.h b/include/d/d_event.h index fa759c5540..7c9da3e954 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -3,7 +3,10 @@ #include "d/actor/d_a_itembase.h" -int dEv_noFinishSkipProc(void*, int); +int dEv_defaultSkipProc(void* actor, int parameter); +int dEv_defaultSkipZev(void* actor, int parameter); +int dEv_defaultSkipStb(void* actor, int parameter); +int dEv_noFinishSkipProc(void* actor, int parameter); struct dStage_MapEvent_dt_c; class fopAc_ac_c; @@ -16,36 +19,36 @@ public: /* 0x00 */ u16 mEventType; /* 0x02 */ u16 mFlag; /* 0x04 */ u16 mHindFlag; - /* 0x08 */ fopAc_ac_c* mActor1; - /* 0x0C */ fopAc_ac_c* mActor2; + /* 0x08 */ fopAc_ac_c* mpRequestActor; + /* 0x0C */ fopAc_ac_c* mpTargetActor; /* 0x10 */ s16 mEventId; /* 0x12 */ u16 mPriority; /* 0x14 */ s8 mNextOrderIdx; - /* 0x15 */ u8 mEventInfoIdx; + /* 0x15 */ u8 mMapToolId; }; // Size = 0x18 STATIC_ASSERT(sizeof(dEvt_order_c) == 0x18); -typedef int (*SkipFunc)(void*, int); +typedef int (*dEvt_SkipCb)(void*, int); -enum EventMode { - /* 0x0 */ EVT_MODE_NONE, - /* 0x1 */ EVT_MODE_TALK, - /* 0x2 */ EVT_MODE_DEMO, - /* 0x3 */ +enum dEvt_mode_e { + /* 0x0 */ dEvt_mode_WAIT_e, + /* 0x1 */ dEvt_mode_TALK_e, + /* 0x2 */ dEvt_mode_DEMO_e, + /* 0x3 */ dEvt_mode_COMPULSORY_e }; -enum EventType { - /* 0x0 */ EVT_TYPE_TALK, - /* 0x1 */ EVT_TYPE_DOOR, - /* 0x2 */ EVT_TYPE_OTHER, - /* 0x3 */ EVT_TYPE_COMPULSORY, - /* 0x4 */ EVT_TYPE_POTENTIAL, - /* 0x5 */ EVT_TYPE_ITEM, - /* 0x6 */ EVT_TYPE_SHOWITEM_X, - /* 0x7 */ EVT_TYPE_SHOWITEM_Y, - /* 0xA */ EVT_TYPE_CATCH = 10, - /* 0xB */ EVT_TYPE_TREASURE, +enum dEvt_type_e { + /* 0x0 */ dEvt_type_TALK_e, + /* 0x1 */ dEvt_type_DOOR_e, + /* 0x2 */ dEvt_type_OTHER_e, + /* 0x3 */ dEvt_type_COMPULSORY_e, + /* 0x4 */ dEvt_type_POTENTIAL_e, + /* 0x5 */ dEvt_type_ITEM_e, + /* 0x6 */ dEvt_type_SHOWITEM_X_e, + /* 0x7 */ dEvt_type_SHOWITEM_Y_e, + /* 0xA */ dEvt_type_CATCH_e = 10, + /* 0xB */ dEvt_type_TREASURE_e, }; enum EventStatus { @@ -55,23 +58,24 @@ enum EventStatus { class dEvt_control_c { public: dEvt_control_c(); - s32 orderOld(u16 eventType, u16 priority, u16 flag, u16 param_3, void* param_4, void* param_5, - void const* param_6); - s32 order(u16 eventType, u16 priority, u16 flag, u16 param_3, void* param_4, void* param_5, - s16 eventID, u8 infoIdx); - void setParam(dEvt_order_c* p_order); - s32 beforeFlagProc(dEvt_order_c* p_order); - void afterFlagProc(dEvt_order_c* p_order); - int commonCheck(dEvt_order_c* p_order, u16 condition, u16 command); - int talkCheck(dEvt_order_c* p_order); - int talkXyCheck(dEvt_order_c* p_order); - int catchCheck(dEvt_order_c* p_order); + + s32 orderOld(u16 type, u16 prio, u16 flag, u16 hind, void* requestActor, + void* targetActor, const void* eventName); + s32 order(u16 type, u16 prio, u16 flag, u16 hind, void* requestActor, + void* targetActor, s16 id, u8 mapToolId); + void setParam(dEvt_order_c* order); + s32 beforeFlagProc(dEvt_order_c* order); + void afterFlagProc(dEvt_order_c* order); + int commonCheck(dEvt_order_c* order, u16 condition, u16 command); + int talkCheck(dEvt_order_c* order); + int talkXyCheck(dEvt_order_c* order); + int catchCheck(dEvt_order_c* order); int talkEnd(); - int demoCheck(dEvt_order_c* p_order); + int demoCheck(dEvt_order_c* order); int demoEnd(); - int potentialCheck(dEvt_order_c* p_order); - int doorCheck(dEvt_order_c* p_order); - int itemCheck(dEvt_order_c* p_order); + int potentialCheck(dEvt_order_c* order); + int doorCheck(dEvt_order_c* order); + int itemCheck(dEvt_order_c* order); int endProc(); int change(); int entry(); @@ -79,69 +83,79 @@ public: void reset(); void clearSkipSystem(); char* getSkipEventName(); - void setSkipProc(void*, SkipFunc, int); - void setSkipZev(void*, char*); + void setSkipProc(void* skipActor, dEvt_SkipCb skipCb, int skipParameter); + void setSkipZev(void* skipActor, char* eventName); void onSkipFade(); void offSkipFade(); bool skipper(); int Step(); int moveApproval(void*); - BOOL compulsory(void*, char const*, u16); + BOOL compulsory(void*, const char* eventName, u16 hind); void remove(); dStage_MapEvent_dt_c* getStageEventDt(); void sceneChange(int exitId); - u32 getPId(void*); - fopAc_ac_c* convPId(fpc_ProcID); + fpc_ProcID getPId(void* actor); + fopAc_ac_c* convPId(fpc_ProcID id); void* getStbDemoData(char* resName); static dStage_MapEvent_dt_c* searchMapEventData(u8 mapToolID, s32 roomNo); static dStage_MapEvent_dt_c* searchMapEventData(u8 mapToolID); s16 runningEventID(s16 eventID); - void setPt1(void* ptr); - void setPt2(void* ptr); - void setPtT(void* ptr); - void setPtI(void* ptr); + void setPt1(void* actor); + void setPt2(void* actor); + void setPtT(void* actor); + void setPtI(void* actor); void setPtI_Id(fpc_ProcID id); - void setPtD(void* ptr); + void setPtD(void* actor); void setGtItm(u8 itemNo); u16 chkFlag2(u16 flag) { return flag & mFlag2; } + BOOL runCheck() { -#if DEBUG + #if DEBUG return mEventStatus != 0 || mDebugStb != 0; -#else + #else return mEventStatus != 0; -#endif + #endif } + f32 getCullRate() { return mCullRate; } + void setCullRate(f32 rate) { mCullRate = rate; } + u16 chkEventFlag(u16 flag) { return flag & mEventFlag; } void onEventFlag(u16 flag) { mEventFlag |= flag; } void offEventFlag(u16 flag) { mEventFlag &= ~flag; } + u8 getMode() const { return mMode; } + void onHindFlag(u16 flag) { mHindFlag |= flag; } void offHindFlag(u16 flag) { mHindFlag &= ~flag; } + u16 checkHind(u16 flag) { return flag & mHindFlag; } u8 checkCompulsory() { return mCompulsory; } u8 getMapToolId() { return mMapToolId; } + void onFlag2(u16 flag) { mFlag2 |= flag; } void offFlag2(u16 flag) { mFlag2 &= ~flag; } - void setCullRate(f32 f) { mCullRate = f; } - BOOL chkTalkXY() { return field_0xed == 1 || field_0xed == 2; } + + BOOL chkTalkXY() { return mTalkXyType == 1 || mTalkXyType == 2; } BOOL isOrderOK() { return mEventStatus == 0 || mEventStatus == 2; } + fopAc_ac_c* getPt1() { return convPId(mPt1); } fopAc_ac_c* getPt2() { return convPId(mPt2); } fopAc_ac_c* getPtT() { return convPId(mPtT); } fopAc_ac_c* getPtI() { return convPId(mPtI); } fopAc_ac_c* getPtD() { return convPId(mPtd); } - bool isChangeOK(void* param_0) { return mChangeOK == param_0; } + + bool isChangeOK(void* actor) { return mChangeActor == actor; } u8 getPreItemNo() { return mPreItemNo; } u8 getGtItm() { return mGtItm; } - void startCheckSkipEdge(void* param_0) { setSkipProc(param_0, dEv_noFinishSkipProc, 0); } + void startCheckSkipEdge(void* actor) { setSkipProc(actor, dEv_noFinishSkipProc, 0); } bool checkSkipEdge() { return chkFlag2(8) != false; } void setDebugStb(u8 stb) { mDebugStb = stb; } public: - /* 0x000 */ u8 field_0x0[4]; + /* 0x000 */ u8 unk_0x0[4]; /* 0x004 */ dEvt_order_c mOrder[8]; /* 0x0C4 */ fpc_ProcID mPt1; /* 0x0C8 */ fpc_ProcID mPt2; @@ -151,31 +165,31 @@ public: /* 0x0D8 */ u16 mEventFlag; /* 0x0DA */ u16 mFlag2; /* 0x0DC */ u16 mHindFlag; - /* 0x0DE */ s16 mSpecifiedEvent; // name maybe wrong - /* 0x0E0 */ s16 mEventID; + /* 0x0DE */ s16 mEventId; + /* 0x0E0 */ s16 mUnkEventId; // unknown purpose /* 0x0E2 */ s8 mNum; /* 0x0E3 */ s8 mOrderIdx; /* 0x0E4 */ u8 mMode; /* 0x0E5 */ u8 mEventStatus; /* 0x0E6 */ u8 field_0xe6; /* 0x0E7 */ u8 field_0xe7; - /* 0x0E8 */ u8 field_0xe8; + /* 0x0E8 */ s8 field_0xe8; /* 0x0E9 */ u8 mDebugStb; /* 0x0EA */ u8 field_0xea; /* 0x0EB */ u8 mMapToolId; /* 0x0EC */ u8 field_0xec; - /* 0x0ED */ u8 field_0xed; + /* 0x0ED */ u8 mTalkXyType; /* 0x0EE */ u8 mPreItemNo; /* 0x0EF */ u8 mGtItm; /* 0x0F0 */ f32 mCullRate; /* 0x0F4 */ dStage_MapEvent_dt_c* mStageEventDt; - /* 0x0F8 */ void* mChangeOK; - /* 0x0FC */ u8 field_0xfc[4]; - /* 0x100 */ SkipFunc mSkipFunc; - /* 0x104 */ u32 field_0x104; + /* 0x0F8 */ void* mChangeActor; + /* 0x0FC */ u8 unk_0xfc[4]; + /* 0x100 */ dEvt_SkipCb mSkipFunc; + /* 0x104 */ fpc_ProcID mSkipActorId; /* 0x108 */ int mSkipTimer; - /* 0x10C */ int field_0x10c; - /* 0x110 */ int mSkipFade; + /* 0x10C */ int mSkipParameter; + /* 0x110 */ BOOL mIsSkipFade; /* 0x114 */ char mSkipEventName[20]; /* 0x128 */ u8 mCompulsory; /* 0x129 */ bool mRoomInfoSet; @@ -183,11 +197,6 @@ public: #if PLATFORM_WII || PLATFORM_SHIELD /* 0x130 */ u8 field_0x130; #endif -}; // Size = 0x130 - -int dEv_defaultSkipProc(void* param_0, int param_1); -int dEv_defaultSkipZev(void* param_0, int param_1); -int dEv_defaultSkipStb(void* param_0, int param_1); -int dEv_noFinishSkipProc(void* param_0, int param_1); +}; #endif /* D_EVENT_D_EVENT_H */ diff --git a/include/d/d_event_data.h b/include/d/d_event_data.h index 9263af07d2..f67d92eda1 100644 --- a/include/d/d_event_data.h +++ b/include/d/d_event_data.h @@ -2,6 +2,7 @@ #define D_EVENT_D_EVENT_DATA_H #include "global.h" +#include "f_pc/f_pc_base.h" class msg_class; @@ -23,6 +24,11 @@ struct event_binary_data_header { /* 0x38 */ u8 unk[8]; }; // Size: 0x40 +enum dEvDt_State_e { + dEvDt_State_START_e = 1, + dEvDt_State_END_e, +}; + class dEvDtData_c { public: enum DataType { @@ -56,6 +62,7 @@ public: char* getName() { return mName; } int getNext() { return mNext; } int getStartFlag(int idx) { return mFlags[idx]; } + u32 getTagId() { return mTagID; } private: /* 0x00 */ char mName[32]; @@ -85,11 +92,13 @@ public: }; struct StaffWork { - unsigned int _0; - msg_class* mLMsg; - unsigned int mMsgNo; - s32 mMsgSubstanceNum; - int* mMsgSubstanceP; + fpc_ProcID l_msgId; + msg_class* l_msg; + u32 l_msgNo; + struct { + int n; // substance num + int* d; // data + } msgs; }; struct MessageData { @@ -131,13 +140,13 @@ public: int getType() { return mType; } char* getName() { return mName; } + s32 getTagID() { return mTagID; } int getCurrentCut() { return mCurrentCut; } int getStartCut() { return mStartCut; } // private: /* 0x00 */ char mName[8]; - /* 0x08 */ StaffWork mWork; - /* 0x0C */ u8 field_0x1C[0x20 - 0x1C]; + /* 0x08 */ u8 mWork[0x18]; /* 0x20 */ s32 mTagID; /* 0x24 */ u32 mIndex; /* 0x28 */ u32 mFlagID; @@ -172,7 +181,7 @@ public: /* 0x7C */ int mNStaff; /* 0x80 */ u8 field_0x80[4]; /* 0x84 */ int field_0x84; - /* 0x88 */ int field_0x88[3]; + /* 0x88 */ int mFlags[3]; /* 0x94 */ bool mPlaySound; /* 0x95 */ u8 field_0x95[0xF]; /* 0xA4 */ int mEventState; @@ -187,7 +196,7 @@ public: BOOL flagMaxCheck(int flag); void init(); -#define FlagMax 0x2800 + static const int FlagMax = 0x2800; private: u32 mFlags[320]; @@ -204,6 +213,7 @@ public: event_binary_data_header* getHeaderP() { return mHeaderP; } dEvDtStaff_c* getStaffP(int i) { return &mStaffP[i]; } + dEvDtStaff_c* getStaffP() { return mStaffP; } dEvDtEvent_c* getEventP(int i) { return &mEventP[i]; } dEvDtEvent_c* getEventP() { return mEventP; } dEvDtData_c* getDataP(int i) { return &mDataP[i]; } diff --git a/include/d/d_event_debug.h b/include/d/d_event_debug.h index b6cf546ec6..5c8b8337ee 100644 --- a/include/d/d_event_debug.h +++ b/include/d/d_event_debug.h @@ -41,9 +41,10 @@ struct dEvDb_flag_base_c { struct dEvM_play_HIO_c : public JORReflexible { dEvM_play_HIO_c(); + ~dEvM_play_HIO_c() {} /* 0x04 */ s16 mTargetEvent; - /* 0x06 */ s16 field_0x6; + /* 0x06 */ s16 mEventIdx; /* 0x08 */ s16 mEventCameraMode; /* 0x0A */ s16 field_0xA; @@ -70,7 +71,7 @@ STATIC_ASSERT(sizeof(dEvM_play_HIO_c) == 0xC); struct dEvM_reg_HIO_c : public JORReflexible { dEvM_reg_HIO_c(); - ~dEvM_reg_HIO_c(); + ~dEvM_reg_HIO_c() {} /* 0x04 */ dEvDb_flag_base_c* mFlagTables; /* 0x08 */ u8 field_0x008; @@ -91,7 +92,7 @@ STATIC_ASSERT(sizeof(dEvM_reg_HIO_c) == 0xC); struct dEvM_bit_HIO_c : public JORReflexible { dEvM_bit_HIO_c(); - ~dEvM_bit_HIO_c(); + ~dEvM_bit_HIO_c() {} /* 0x04 */ dEvDb_flag_base_c* mFlagTables; /* 0x08 */ u8 field_0x008; @@ -134,7 +135,7 @@ STATIC_ASSERT(sizeof(dEvM_root_reg_HIO_c) == 0x4B8); struct dEvM_HIO_c : public JORReflexible { dEvM_HIO_c(); - ~dEvM_HIO_c(); + ~dEvM_HIO_c() {} /* 0x004 */ s8 field_0x004; /* 0x005 */ u8 m_EVdata_output; diff --git a/include/d/d_event_manager.h b/include/d/d_event_manager.h index 4bd45850ec..4bbff6879d 100644 --- a/include/d/d_event_manager.h +++ b/include/d/d_event_manager.h @@ -3,6 +3,7 @@ #include "SSystem/SComponent/c_xyz.h" #include "d/d_event_data.h" +#include "d/d_event_debug.h" class fopAc_ac_c; @@ -10,105 +11,120 @@ class dEvent_exception_c { public: dEvent_exception_c() { mEventInfoIdx = -1; } void init(); - s32 setStartDemo(int mapToolID); + int setStartDemo(int mapToolID); const char* getEventName(); - // private: - /* 0x0 */ s32 mEventInfoIdx; + /* 0x0 */ int mEventInfoIdx; /* 0x4 */ u8 field_0x4; /* 0x5 */ u8 field_0x5; /* 0x6 */ u8 field_0x6; /* 0x7 */ u8 field_0x7; - /* 0x8 */ s32 mState; + /* 0x8 */ int mState; }; #define EVT_SE_RIDDLE_A 1 #define EVT_SE_RIDDLE_B 2 -#ifdef DEBUG -#define EVENT_LIST_NUM 12 -#else -#define EVENT_LIST_NUM 11 -#endif - class dEvent_manager_c { -public: - void* getSubstance(dEvDtData_c* p_data, int type); - void setDbgData(const char*); +public: + enum { + BASE_NULL, + BASE_KEEP, + BASE_ACTOR, + BASE_STAGE, + BASE_ROOM0, + BASE_ROOM1, + BASE_ROOM2, + BASE_ROOM3, + BASE_ROOM4, + BASE_ROOM5, + BASE_DEMO, + + #if DEBUG + BASE_DEBUG, + #endif + + BASE_MAX, + }; + + void* getSubstance(dEvDtData_c* evData, int type); + void setDbgData(const char* srcData); dEvent_manager_c(); ~dEvent_manager_c() {} int create(); - bool setObjectArchive(char* arcName); + bool setObjectArchive(char* arcname); void demoInit(); void roomInit(int roomNo); void roomFinish(int roomNo); int orderStartDemo(); void remove(); - void startProc(dEvDtEvent_c* p_evnt); - void closeProc(dEvDtEvent_c* p_evnt); - void endProc(s16 eventID, int close); + void startProc(dEvDtEvent_c* event); + void closeProc(dEvDtEvent_c* event); + void endProc(s16 evId, BOOL isClose); void Sequencer(); void Experts(); - dEvDtEvent_c* getEventData(s16 eventCompositId); - dEvDtEvent_c* getEventData(s16, int); - s16 getEventIdx(char const* eventName, u8 mapToolID, s32 roomNo); - s16 getEventIdx(fopAc_ac_c* pActor, u8 mapToolID); - s16 getEventIdx(fopAc_ac_c* pActor, char const* eventName, u8 mapToolID); + dEvDtEvent_c* getEventData(s16 evCompositId); + dEvDtEvent_c* getEventData(s16 evIdx, int evType); + s16 getEventIdx(const char* eventName, u8 mapToolID, s32 roomNo); + s16 getEventIdx(fopAc_ac_c* actor, u8 mapToolID); + s16 getEventIdx(fopAc_ac_c* actor, const char* eventName, u8 mapToolID); int isMapToolCamera(u8 mapToolID, s32 roomNo); - int order(s16 eventCompositId); - int startCheck(s16 eventCompositId); - int startCheckOld(char const* name); - int endCheck(s16); - int endCheckOld(char const* name); - int getMyStaffId(char const* staffName, fopAc_ac_c* pActor, int tagId); - int getIsAddvance(int staffIdx); - int getMyActIdx(int staffIdx, char const* const* param_1, int param_2, int param_3, - int param_4); - char* getMyNowCutName(int cutIndex); - dEvDtData_c* getMyDataP(int index, char const* name, int type); - void* getMySubstanceP(int index, char const* name, int type); - int getMySubstanceNum(int index, char const* name); - void cutEnd(int cutIndex); - int getEventPrio(fopAc_ac_c* pActor, s16 eventCompositId); - void issueStaff(char const* name); - void cancelStaff(char const* name); - void setGoal(cXyz* p_goal); + int order(s16 evCompositId); + int startCheck(s16 evCompositId); + int startCheckOld(const char* eventname); + int endCheck(s16 eventID); + int endCheckOld(const char* eventname); + int getMyStaffId(const char* staffName, fopAc_ac_c* actor, int tagId); + int getIsAddvance(int staffId); + int getMyActIdx(int staffId, const char* const* action, int n_action, BOOL param_3, BOOL param_4); + char* getMyNowCutName(int staffId); + dEvDtData_c* getMyDataP(int staffId, const char* dataname, BOOL isSeekStart); + void* getMySubstanceP(int staffId, const char* dataname, int datatype); + int getMySubstanceNum(int staffId, const char* dataname); + void cutEnd(int staffId); + int getEventPrio(fopAc_ac_c* actor, s16 evCompositId); + void issueStaff(const char* staffname); + void cancelStaff(const char* staffname); + void setGoal(cXyz* pos); cXyz* getGoal(); const char* getRunEventName(); - fopAc_ac_c* specialCast_Shutter(s16 bsTypeId, int param_1); - fopAc_ac_c* specialCast(char const* name, int param_1); + fopAc_ac_c* specialCast_Shutter(s16 actorName, BOOL param_1); + fopAc_ac_c* specialCast(const char* staffname, BOOL param_1); int ChkPresentEnd(); int checkStartDemo(); - int setStartDemo(int param_0) { return mEventException.setStartDemo(param_0); } + void debugBfProc(); + + int setStartDemo(int mapToolId) { return mException.setStartDemo(mapToolId); } void setCameraPlay(int status) { mCameraPlay = status; } - dEvDtBase_c& getBase() { return mEventList[mCurrentEventType]; } + dEvDtBase_c& getBase() { return mEventList[mCurrentEvType]; } void setFlag(int flag) { mFlags.flagSet(flag); } bool dataLoaded() { return mDataLoaded; } int flagCheck(int flag) { return mFlags.flagCheck(flag); } int cameraPlay() { return mCameraPlay; } - event_binary_data_header* getHeader(u8 idx) {return mEventList[idx].getHeaderP(); } - dEvDtEvent_c* getEventList(u8 idx) { return mEventList[idx].getEventP(); } + event_binary_data_header* getHeader(u8 type) {return mEventList[type].getHeaderP(); } + dEvDtEvent_c* getEventList(u8 type) { return mEventList[type].getEventP(); } - inline static s16 getIndexCompositId(s16 param_0) { return param_0 != -1 ? (s16)(param_0 & 0xff) : (s16)-1; } - static int getTypeCompositId(s16 param_0) { return param_0 == -1 ? 0 : param_0 >> 8; } + dEvDtFlag_c& getFlags() { return mFlags; } - static s16 makeCompositId(s16 a, int b) { return a | (b << 8); } + #if DEBUG + dEvM_HIO_c& getEventHIO(); + #endif private: - /* 0x0000 */ dEvDtBase_c mEventList[EVENT_LIST_NUM]; - /* 0x018C */ s32 mCameraPlay; - /* 0x0190 */ dEvent_exception_c mEventException; - /* 0x019C */ cXyz mGoal; - /* 0x01A8 */ u8 field_0x1a8[2]; - /* 0x01AA */ s16 mCurrentEventCompositId; - /* 0x01AC */ u8 field_0x1ac[4]; - /* 0x01B0 */ int mRoomNo; - /* 0x01B4 */ u32 mCurrentEventType; - /* 0x01B8 */ s32 field_0x1b8; - /* 0x01BC */ dEvDtFlag_c mFlags; - /* 0x06BC */ bool mDataLoaded; + /* 0x000 */ dEvDtBase_c mEventList[BASE_MAX]; + /* 0x18C */ int mCameraPlay; + /* 0x190 */ dEvent_exception_c mException; + /* 0x19C */ cXyz mGoal; + /* 0x1A8 */ u8 unk_0x1a8[2]; + /* 0x1AA */ s16 mCurrentEvId; + /* 0x1AC */ u8 unk_0x1ac[4]; + /* 0x1B0 */ int mRoomNo; + /* 0x1B4 */ int mCurrentEvType; + /* 0x1B8 */ s32 unk_0x1b8; + /* 0x1BC */ dEvDtFlag_c mFlags; + /* 0x6BC */ bool mDataLoaded; }; #endif /* D_EVENT_D_EVENT_MANAGER_H */ diff --git a/include/d/d_msg_object.h b/include/d/d_msg_object.h index ecfaaf966e..67a72a1d39 100644 --- a/include/d/d_msg_object.h +++ b/include/d/d_msg_object.h @@ -537,11 +537,11 @@ inline void dMsgObject_setSelectCursorPos(u8 param_0) { } inline u8 dMsgObject_getSelectBombBagID() { - dMsgObject_getMsgObjectClass()->getSelectBombBagID(); + return dMsgObject_getMsgObjectClass()->getSelectBombBagID(); } inline s16 dMsgObject_getSelectBombPrice() { - dMsgObject_getMsgObjectClass()->getSelectBombPrice(); + return dMsgObject_getMsgObjectClass()->getSelectBombPrice(); } inline bool dMsgObject_isMouthCheck() { diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 687f4adb01..45b7b7f88d 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -378,29 +378,52 @@ struct dStage_DMap_c { /* 0x04 */ dStage_DMap_dt_c* entries; }; -// REVT +/** + * dStage_MapEvent + * Section Magic: "REVT" + * + * For STB/ZEV events, an event name is specified for data + * For MapTool events, other data is specified instead + */ +// using packing to make sure event_name doesn't get aligned +// field_0x1a / switch_no might be part of maptool data? unsure +#pragma push +#pragma pack(1) struct dStage_MapEvent_dt_c { - /* 0x00 */ u8 mType; + /* 0x00 */ u8 type; /* 0x01 */ u8 field_0x1; /* 0x02 */ u8 field_0x2; /* 0x03 */ u8 field_0x3; /* 0x04 */ u8 field_0x4; /* 0x05 */ u8 field_0x5; - /* 0x06 */ u8 mPriority; + /* 0x06 */ u8 priority; /* 0x07 */ u8 field_0x7; /* 0x08 */ u8 field_0x8; /* 0x09 */ u8 field_0x9; /* 0x0A */ u8 field_0xA; /* 0x0B */ u8 field_0xB; /* 0x0C */ u8 field_0xC; - /* 0x0D */ char mName[7]; - /* 0x14 */ u16 field_0x14; - /* 0x16 */ u8 field_0x16; - /* 0x17 */ u8 field_0x17; - /* 0x18 */ u8 mSeType; // 1: RIDDLE_A, 2: RIDDLE_B - /* 0x19 */ u8 field_0x19[0x1B - 0x19]; - /* 0x1B */ u8 mSwitch; + union { + /* 0x0D */ char event_name[13]; + struct { + /* 0x0D */ u8 field_0xd[0x14 - 0xD]; + /* 0x14 */ u16 field_0x14; + /* 0x16 */ u8 field_0x16; + /* 0x17 */ u8 field_0x17; + /* 0x18 */ u8 sound_type; + /* 0x19 */ u8 field_0x19; + } maptool; + } data; + /* 0x1A */ u8 field_0x1a; + /* 0x1B */ u8 switch_no; }; // SIZE = 0x1C +#pragma pop + +enum dStage_MapEvent_dt_type { + dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA, + dStage_MapEvent_dt_TYPE_ZEV, + dStage_MapEvent_dt_TYPE_STB, +}; struct dStage_MapEventInfo_c { /* 0x0 */ int num; diff --git a/include/f_op/f_op_msg.h b/include/f_op/f_op_msg.h index 56c3733b08..31a2928e10 100644 --- a/include/f_op/f_op_msg.h +++ b/include/f_op/f_op_msg.h @@ -4,6 +4,22 @@ #include "SSystem/SComponent/c_xyz.h" #include "f_pc/f_pc_leaf.h" +enum fopMsg_Mode_e { + fopMsg_MODE_MSG_PREPARING_e = 0x01, + fopMsg_MODE_BOX_OPENING_e = 0x02, + fopMsg_MODE_MSG_TYPING_e = 0x06, + fopMsg_MODE_UNK_A_e = 0x0A, + fopMsg_MODE_UNK_B_e = 0x0B, + fopMsg_MODE_UNK_D_e = 0x0D, + fopMsg_MODE_MSG_DISPLAYED_e = 0x0E, + fopMsg_MODE_MSG_CONTINUE_e = 0x0F, + fopMsg_MODE_MSG_END_e = 0x10, + fopMsg_MODE_BOX_CLOSING_e = 0x11, + fopMsg_MODE_BOX_CLOSED_e = 0x12, + fopMsg_MODE_MSG_DESTROYED_e = 0x13, + fopMsg_MODE_UNK15_e = 0x15, +}; + class fopAc_ac_c; class msg_class : public leafdraw_class { diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstring.h b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstring.h index 348880dd38..b6e8aec6b3 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstring.h +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstring.h @@ -1,11 +1,15 @@ -#ifndef STD_CMATH_H_ -#define STD_CMATH_H_ +#ifndef STD_CSTRING_H_ +#define STD_CSTRING_H_ #include "string.h" namespace std { using ::strlen; using ::strcpy; + +inline char* strchr(char* str, int c) { + return ::strchr(str, c); +} }; // namespace std #endif diff --git a/src/d/actor/d_a_tbox.cpp b/src/d/actor/d_a_tbox.cpp index f659889180..c54c6d11e9 100644 --- a/src/d/actor/d_a_tbox.cpp +++ b/src/d/actor/d_a_tbox.cpp @@ -1525,7 +1525,7 @@ void daTbox_c::settingDropDemoCamera() { stage_camera_class* stage_camera = roomdt->getCamera(); stage_camera2_data_class* stage_camera_data = stage_camera->m_entries; - stage_camera_data += maptooldata->field_0x16; + stage_camera_data += maptooldata->data.maptool.field_0x16; stage_arrow_class* stage_arrow = roomdt->getArrow(); stage_arrow_data_class* stage_arrow_data = stage_arrow->m_entries; diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp index 0ad5c95f06..3be0aa1a49 100644 --- a/src/d/d_camera.cpp +++ b/src/d/d_camera.cpp @@ -9214,9 +9214,9 @@ bool dCamera_c::eventCamera(s32 param_0) { break; } - if (mEventData.field_0xec->mType == 0 && (mEventData.field_0xec->field_0xC & 0x80) != 0) + if (mEventData.field_0xec->type == dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA && (mEventData.field_0xec->field_0xC & 0x80) != 0) { - field_0x8d8.mCameraIndex = mEventData.field_0xec->field_0x16; + field_0x8d8.mCameraIndex = mEventData.field_0xec->data.maptool.field_0x16; OS_REPORT("camera: event: change default type %d \n", field_0x8d8.mCameraIndex); } } else { diff --git a/src/d/d_ev_camera.cpp b/src/d/d_ev_camera.cpp index 7dfe184844..416dee084d 100644 --- a/src/d/d_ev_camera.cpp +++ b/src/d/d_ev_camera.cpp @@ -1892,8 +1892,8 @@ bool dCamera_c::maptoolIdEvCamera() { mEventData.field_0xec); int var_r6 = 0xFF; - if (mEventData.field_0xec != NULL && mEventData.field_0xec->mType == 0) { - var_r6 = mEventData.field_0xec->field_0x16; + if (mEventData.field_0xec != NULL && mEventData.field_0xec->type == dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA) { + var_r6 = mEventData.field_0xec->data.maptool.field_0x16; } getEvIntData(&mEventData.field_0x24, "CameraID", var_r6); @@ -1910,7 +1910,7 @@ bool dCamera_c::maptoolIdEvCamera() { room_no = -1; } - if (mEventData.field_0xec->mType == 0 && mEventData.field_0xec->field_0xC != 0xFF) { + if (mEventData.field_0xec->type == dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA && mEventData.field_0xec->field_0xC != 0xFF) { if (mEventData.field_0xec->field_0xC & 1) { clrFlag(0x200000); } @@ -1932,9 +1932,9 @@ bool dCamera_c::maptoolIdEvCamera() { #endif bool var_r3 = (this->*engine_tbl[mCamParam.Algorythmn(style)])(style); - if (mEventData.field_0xec->mType == 0) { - if (mEventData.field_0xec->field_0x14 == 0xFF || - mCurCamStyleTimer > mEventData.field_0xec->field_0x14) + if (mEventData.field_0xec->type == dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA) { + if (mEventData.field_0xec->data.maptool.field_0x14 == 0xFF || + mCurCamStyleTimer > mEventData.field_0xec->data.maptool.field_0x14) { var_r31 = true; } @@ -1947,7 +1947,7 @@ bool dCamera_c::maptoolIdEvCamera() { } if (var_r31) { - if (mEventData.field_0xec->mType == 0 && (mEventData.field_0xec->field_0xC & 0x20)) { + if (mEventData.field_0xec->type == dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA && (mEventData.field_0xec->field_0xC & 0x20)) { return mDoCPd_c::getHoldA(mPadID) || mDoCPd_c::getHoldB(mPadID); } return true; diff --git a/src/d/d_event.cpp b/src/d/d_event.cpp index d2de86d86c..ffce9bcd7a 100644 --- a/src/d/d_event.cpp +++ b/src/d/d_event.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: d/d_event -// - #include "d/dolzel.h" #include "d/d_event.h" @@ -15,11 +10,17 @@ #include "d/actor/d_a_tag_mhint.h" #include "d/actor/d_a_tag_mstop.h" #include "d/d_event_debug.h" +#include "SSystem/SComponent/c_counter.h" /* 80041480-80041488 03BDC0 0008+00 1/1 0/0 0/0 .text event_debug_evnt__21@unnamed@d_event_cpp@Fv */ namespace { -static bool event_debug_evnt() { +static u8 event_debug_evnt() { +#if DEBUG + dEvM_HIO_c& hio = dComIfGp_getEventManager().getEventHIO(); + return hio.m_eve_debug; +#else return false; +#endif } /* 80041488-80041580 03BDC8 00F8+00 1/1 0/0 0/0 .text clear_tmpflag_for_message__21@unnamed@d_event_cpp@Fv */ @@ -44,112 +45,153 @@ dEvt_control_c::dEvt_control_c() { dEvt_order_c::dEvt_order_c() {} /* 800415D8-80041668 03BF18 0090+00 1/1 0/0 0/0 .text orderOld__14dEvt_control_cFUsUsUsUsPvPvPCv */ -s32 dEvt_control_c::orderOld(u16 eventType, u16 priority, u16 flag, u16 hind, void* param_4, - void* param_5, void const* eventName) { - int eventIdx = dComIfGp_getEventManager().getEventIdx((char*)eventName, -1, -1); - return order(eventType, priority, flag, hind, param_4, param_5, eventIdx, -1); +s32 dEvt_control_c::orderOld(u16 type, u16 prio, u16 flag, u16 hind, void* requestActor, + void* targetActor, const void* eventName) { + #if DEBUG + if (event_debug_evnt()) { + if (type == dEvt_type_OTHER_e && eventName != NULL) { + // "requested event %s!!" + OS_REPORT("要求イベント %s!!", eventName); + } + OS_REPORT("\n"); + } + #endif + + return order(type, prio, flag, hind, requestActor, targetActor, (s16)dComIfGp_getEventManager().getEventIdx((char*)eventName, -1, -1), 0xFF); } /* 80041668-80041804 03BFA8 019C+00 3/3 13/13 0/0 .text order__14dEvt_control_cFUsUsUsUsPvPvsUc */ -s32 dEvt_control_c::order(u16 eventType, u16 priority, u16 flag, u16 hind, void* param_4, - void* param_5, s16 eventID, u8 infoIdx) { - if (!(flag & 0x400) && infoIdx != 0xFF) { +s32 dEvt_control_c::order(u16 type, u16 prio, u16 flag, u16 hind, void* requestActor, + void* targetActor, s16 id, u8 mapToolId) { + if (!(flag & 0x400) && mapToolId != 0xFF) { int roomNo = dComIfGp_roomControl_getStayNo(); - dStage_MapEvent_dt_c* data = searchMapEventData(infoIdx, roomNo); + dStage_MapEvent_dt_c* data = searchMapEventData(mapToolId, roomNo); - if (data != NULL && data->mSwitch != 0xFF) { - if (dComIfGs_isSwitch(data->mSwitch, roomNo)) { + if (data != NULL && data->switch_no != 0xFF) { + if (dComIfGs_isSwitch(data->switch_no, roomNo)) { return 0; } } } - if (mNum >= 8) { + #if DEBUG + if (event_debug_evnt()) { + OS_REPORT("%06d: event: type = %d !!", g_Counter.mCounter0, type); + + if (requestActor != NULL) { + // "Request actor %s!!" + OS_REPORT("要求者 %s!!", dStage_getName(fopAcM_GetProfName(requestActor), -1)); + } + + if (targetActor != NULL) { + // "Target actor %s!!" + OS_REPORT("対象者 %s!!", dStage_getName(fopAcM_GetProfName(targetActor), -1)); + } + + // "Request id = %d prio = %d " + OS_REPORT(" 要求 id = %d prio = %d ", id, prio); + OS_REPORT("\n"); + } + #endif + + if (mNum >= ARRAY_SIZE(mOrder)) { + // "%06d: event: order failed" + OS_REPORT("\x1b[34m%06d: event: 注文失敗\n\x1b[m", g_Counter.mCounter0); return 0; } - dEvt_order_c* order = &mOrder[mNum]; - order->mEventType = eventType; - order->mPriority = priority; - order->mFlag = flag; - order->mActor1 = (fopAc_ac_c*)param_4; - order->mActor2 = (fopAc_ac_c*)param_5; - order->mEventId = eventID; - order->mHindFlag = hind; - order->mEventInfoIdx = infoIdx; + dEvt_order_c* new_order = &mOrder[mNum]; + new_order->mEventType = type; + new_order->mPriority = prio; + new_order->mFlag = flag; + new_order->mpRequestActor = (fopAc_ac_c*)requestActor; + new_order->mpTargetActor = (fopAc_ac_c*)targetActor; + new_order->mEventId = id; + new_order->mHindFlag = hind; + new_order->mMapToolId = mapToolId; - if (order->mPriority == 0) { - order->mPriority = 1; + if (new_order->mPriority == 0) { + new_order->mPriority = 1; } if (mNum == 0) { mOrderIdx = 0; - order->mNextOrderIdx = -1; + new_order->mNextOrderIdx = -1; } else { dEvt_order_c* curOrder; int curOrderIdx = mOrderIdx; curOrder = &mOrder[curOrderIdx]; - if (order->mPriority < curOrder->mPriority) { + if (new_order->mPriority < curOrder->mPriority) { mOrderIdx = mNum; - order->mNextOrderIdx = curOrderIdx; + new_order->mNextOrderIdx = curOrderIdx; } else { while (curOrder->mNextOrderIdx >= 0) { - if (order->mPriority < mOrder[curOrder->mNextOrderIdx].mPriority) { + dEvt_order_c* next_order = &mOrder[curOrder->mNextOrderIdx]; + if (new_order->mPriority < next_order->mPriority) { break; } + int nextOrderIdx = curOrder->mNextOrderIdx; curOrder = &mOrder[nextOrderIdx]; } - order->mNextOrderIdx = curOrder->mNextOrderIdx; + new_order->mNextOrderIdx = curOrder->mNextOrderIdx; curOrder->mNextOrderIdx = mNum; } } + mNum++; + #if DEBUG + if (event_debug_evnt()) { + // "%06d: event: order success mNum = %d" + OS_REPORT("\x1B[34m%06d: event: 注文成功 mNum = %d\n\x1B[m", g_Counter.mCounter0, mNum); + } + #endif + return 1; } /* 80041804-80041934 03C144 0130+00 5/5 0/0 0/0 .text setParam__14dEvt_control_cFP12dEvt_order_c */ -void dEvt_control_c::setParam(dEvt_order_c* p_order) { - setPt1(p_order->mActor1); - setPt2(p_order->mActor2); +void dEvt_control_c::setParam(dEvt_order_c* order) { + setPt1(order->mpRequestActor); + setPt2(order->mpTargetActor); - mSpecifiedEvent = p_order->mEventId; - mHindFlag = p_order->mHindFlag; + mEventId = order->mEventId; + mHindFlag = order->mHindFlag; - if (dComIfGp_getPlayer(0) != p_order->mActor1) { - setPtT(p_order->mActor1); - setPtI(p_order->mActor1); + if (dComIfGp_getPlayer(0) != order->mpRequestActor) { + setPtT(order->mpRequestActor); + setPtI(order->mpRequestActor); } else { - setPtT(p_order->mActor2); - setPtI(p_order->mActor2); + setPtT(order->mpTargetActor); + setPtI(order->mpTargetActor); } - mMapToolId = p_order->mEventInfoIdx; + mMapToolId = order->mMapToolId; field_0xea = 0xFF; field_0xec = 0xFF; int roomNo = dComIfGp_roomControl_getStayNo(); - dStage_MapEvent_dt_c* data = searchMapEventData(mMapToolId, roomNo); - mStageEventDt = data; + dStage_MapEvent_dt_c* mapdata = searchMapEventData(mMapToolId, roomNo); + mStageEventDt = mapdata; - if (data != NULL) { - field_0xea = data->field_0x16; + if (mapdata != NULL) { + field_0xea = mapdata->data.maptool.field_0x16; - if (data->mSwitch != 0xFF) { - dComIfGs_onSwitch(data->mSwitch, roomNo); + if (mapdata->switch_no != 0xFF) { + dComIfGs_onSwitch(mapdata->switch_no, roomNo); } - if (p_order->mFlag & 0x300) { - field_0xec = data->field_0x5; + if (order->mFlag & 0x300) { + field_0xec = mapdata->field_0x5; } } - if (!(p_order->mFlag & 0x200)) { - mEventID = p_order->mEventId; + if (!(order->mFlag & 0x200)) { + mUnkEventId = order->mEventId; } mCullRate = 1.0f; @@ -158,10 +200,10 @@ void dEvt_control_c::setParam(dEvt_order_c* p_order) { /* 80041934-80041964 03C274 0030+00 2/2 0/0 0/0 .text * beforeFlagProc__14dEvt_control_cFP12dEvt_order_c */ -s32 dEvt_control_c::beforeFlagProc(dEvt_order_c* p_order) { - fopAc_ac_c* actor = p_order->mActor2; +s32 dEvt_control_c::beforeFlagProc(dEvt_order_c* order) { + fopAc_ac_c* actor = order->mpTargetActor; - if (p_order->mFlag & 4 && actor->eventInfo.chkCondition(dEvtCnd_CANTALK_e) != true) { + if ((order->mFlag & 4) && !actor->eventInfo.chkCondition(dEvtCnd_CANTALK_e)) { return 0; } @@ -174,23 +216,23 @@ static char const* dummy1() { /* 80041964-800419A8 03C2A4 0044+00 2/2 0/0 0/0 .text * afterFlagProc__14dEvt_control_cFP12dEvt_order_c */ -void dEvt_control_c::afterFlagProc(dEvt_order_c* p_order) { - if (p_order->mFlag & 2) { +void dEvt_control_c::afterFlagProc(dEvt_order_c* order) { + if (order->mFlag & 2) { dComIfGp_getEventManager().issueStaff("ALL"); } } /* 800419A8-80041A20 03C2E8 0078+00 4/4 0/0 0/0 .text * commonCheck__14dEvt_control_cFP12dEvt_order_cUsUs */ -int dEvt_control_c::commonCheck(dEvt_order_c* p_order, u16 condition, u16 command) { - fopAc_ac_c* actor1 = p_order->mActor1; - fopAc_ac_c* actor2 = p_order->mActor2; +int dEvt_control_c::commonCheck(dEvt_order_c* order, u16 condition, u16 command) { + fopAc_ac_c* actor1 = order->mpRequestActor; + fopAc_ac_c* actor2 = order->mpTargetActor; if ((actor1 != NULL && actor1->eventInfo.chkCondition(condition)) && (actor2 != NULL && actor2->eventInfo.chkCondition(condition))) { actor1->eventInfo.setCommand(command); actor2->eventInfo.setCommand(command); - setParam(p_order); + setParam(order); return 1; } @@ -199,52 +241,80 @@ int dEvt_control_c::commonCheck(dEvt_order_c* p_order, u16 condition, u16 comman /* 80041A20-80041B58 03C360 0138+00 1/1 0/0 0/0 .text talkCheck__14dEvt_control_cFP12dEvt_order_c */ -int dEvt_control_c::talkCheck(dEvt_order_c* p_order) { - char* event = "DEFAULT_TALK"; - fopAc_ac_c* actor = p_order->mActor2; +int dEvt_control_c::talkCheck(dEvt_order_c* order) { + char* eventname = "DEFAULT_TALK"; + fopAc_ac_c* actor = order->mpTargetActor; if ((fopAcM_GetName(actor) == PROC_Tag_Mhint && ((daTagMhint_c*)actor)->checkNoAttention()) || (fopAcM_GetName(actor) == PROC_Tag_Mstop && ((daTagMstop_c*)actor)->checkNoAttention()) || - fopAcM_GetName(actor) == PROC_MIDNA) { + fopAcM_GetName(actor) == PROC_MIDNA) + { daMidna_c* midna = (daMidna_c*)daPy_py_c::getMidnaActor(); if (!daPy_py_c::checkNowWolf() || midna->checkNoDraw()) { - event = "MHINT_TALK"; + eventname = "MHINT_TALK"; } } - if (commonCheck(p_order, 1, 1)) { - mMode = EVT_MODE_TALK; - if (mSpecifiedEvent == -1) { + if (commonCheck(order, dEvtCnd_CANTALK_e, dEvtCmd_INTALK_e)) { + #if DEBUG + if (event_debug_evnt()) { + // "conversation actor1 = %x actor2 = %x" + OS_REPORT("会話へ actor1 = %x actor2 = %x\n", order->mpRequestActor, order->mpTargetActor); + // "conversation partner %s" + OS_REPORT("会話相手 %s\n", dStage_getName(fopAcM_GetProfName(actor), -1)); + } + #endif + + mMode = dEvt_mode_TALK_e; + + if (mEventId == -1) { if (actor != NULL && actor->eventInfo.getEventName() != NULL) { - mSpecifiedEvent = actor->eventInfo.getEventId(); + mEventId = actor->eventInfo.getEventId(); } else { - mSpecifiedEvent = dComIfGp_getEventManager().getEventIdx(event, 0xFF, -1); + mEventId = dComIfGp_getEventManager().getEventIdx(eventname, 0xFF, -1); } } - dComIfGp_getEventManager().order(mSpecifiedEvent); + + if (!dComIfGp_getEventManager().order(mEventId)) { + // "specified event %d not ordered!!" + OS_REPORT("指定イベント %d が無い!!\n", mEventId); + JUT_ASSERT(429, 0); + } + return 1; - } else { - return 0; } + + return 0; } /* 80041B58-80041C90 03C498 0138+00 1/1 0/0 0/0 .text * talkXyCheck__14dEvt_control_cFP12dEvt_order_c */ -int dEvt_control_c::talkXyCheck(dEvt_order_c* p_order) { - const char* event = "DEFAULT_TALK_XY"; - fopAc_ac_c* pActor2 = p_order->mActor2; +int dEvt_control_c::talkXyCheck(dEvt_order_c* order) { + const char* eventname = "DEFAULT_TALK_XY"; + fopAc_ac_c* targetActor = order->mpTargetActor; int itemIndex; - switch (p_order->mEventType) { - case EVT_TYPE_SHOWITEM_X: + switch (order->mEventType) { + case dEvt_type_SHOWITEM_X_e: itemIndex = SELECT_ITEM_X; - field_0xed = 1; + mTalkXyType = 1; break; - case EVT_TYPE_SHOWITEM_Y: - field_0xed = 2; + case dEvt_type_SHOWITEM_Y_e: + mTalkXyType = 2; itemIndex = SELECT_ITEM_Y; break; + #if PLATFORM_WII || PLATFORM_SHIELD + case 8: + mTalkXyType = 3; + itemIndex = 2; + break; + case 9: + mTalkXyType = 4; + itemIndex = 3; + break; + #endif default: - field_0xed = 0; + OS_REPORT_ERROR("event XY talk unknown type %d\n", order->mEventType); + mTalkXyType = 0; return 0; } @@ -252,26 +322,40 @@ int dEvt_control_c::talkXyCheck(dEvt_order_c* p_order) { return 0; } - if (pActor2 == NULL || !pActor2->eventInfo.chkCondition(dEvtCnd_CANTALKITEM_e)) { + if (targetActor == NULL || !targetActor->eventInfo.chkCondition(dEvtCnd_CANTALKITEM_e)) { return 0; } - if (commonCheck(p_order, 1, 1)) { - mMode = EVT_MODE_TALK; + if (commonCheck(order, dEvtCnd_CANTALK_e, dEvtCmd_INTALK_e)) { + #if DEBUG + if (event_debug_evnt()) { + // "conversation actor1 = %x actor2 = %x" + OS_REPORT("会話へ actor1 = %x actor2 = %x\n", order->mpRequestActor, order->mpTargetActor); + // "conversation partner" + OS_REPORT("会話相手 %s\n", dStage_getName(fopAcM_GetProfName(targetActor), -1)); + } + #endif + + mMode = dEvt_mode_TALK_e; mPreItemNo = dComIfGp_getSelectItem(itemIndex); - mSpecifiedEvent = dComIfGp_getEventManager().getEventIdx(event, 0xFF, -1); - dComIfGp_getEventManager().order(mSpecifiedEvent); + mEventId = dComIfGp_getEventManager().getEventIdx(eventname, 0xFF, -1); + + if (!dComIfGp_getEventManager().order(mEventId)) { + // "specified event %d not ordered!!" + OS_REPORT("指定イベント %d が無い!!\n", mEventId); + JUT_ASSERT(512, 0); + } return 1; - } else { - return 0; } + + return 0; } /* 80041C90-80041D34 03C5D0 00A4+00 1/1 0/0 0/0 .text catchCheck__14dEvt_control_cFP12dEvt_order_c */ -int dEvt_control_c::catchCheck(dEvt_order_c* p_order) { - fopAc_ac_c* actor2 = p_order->mActor2; - fopAc_ac_c* actor1 = p_order->mActor1; +int dEvt_control_c::catchCheck(dEvt_order_c* order) { + fopAc_ac_c* actor2 = order->mpTargetActor; + fopAc_ac_c* actor1 = order->mpRequestActor; if (actor1 == NULL || (actor2 != NULL && !actor2->eventInfo.chkCondition(dEvtCnd_40_e))) { return 0; @@ -282,13 +366,18 @@ int dEvt_control_c::catchCheck(dEvt_order_c* p_order) { actor2->eventInfo.setCommand(dEvtCmd_INCATCH_e); } - setParam(p_order); + setParam(order); mPreItemNo = dComIfGp_att_getCatchChgItem(); - mMode = EVT_MODE_DEMO; + mMode = dEvt_mode_DEMO_e; - if (mSpecifiedEvent != -1) { - dComIfGp_getEventManager().order(mSpecifiedEvent); + if (mEventId != -1) { + if (!dComIfGp_getEventManager().order(mEventId)) { + // "specified event %d not ordered!!" + OS_REPORT("指定イベント %d が無い!!\n", mEventId); + JUT_ASSERT(551, 0); + } } + return 1; } @@ -304,45 +393,47 @@ int dEvt_control_c::talkEnd() { actor->eventInfo.setCommand(dEvtCmd_NONE_e); } - if (mSpecifiedEvent != -1) { - dComIfGp_getEventManager().endProc(mSpecifiedEvent, 1); - mSpecifiedEvent = -1; + if (mEventId != -1) { + dComIfGp_getEventManager().endProc(mEventId, TRUE); + mEventId = -1; } daItemBase_c* item = (daItemBase_c*)fopAcM_getItemEventPartner(NULL); if (item != NULL && fopAcM_GetName(item) == PROC_ITEM) { item->dead(); } + return 1; } /* 80041DDC-80041F18 03C71C 013C+00 1/1 0/0 0/0 .text demoCheck__14dEvt_control_cFP12dEvt_order_c */ -int dEvt_control_c::demoCheck(dEvt_order_c* p_order) { - fopAc_ac_c* actor1 = p_order->mActor1; - fopAc_ac_c* actor2 = p_order->mActor2; - int eventId = p_order->mEventId; +int dEvt_control_c::demoCheck(dEvt_order_c* order) { + fopAc_ac_c* actor1 = order->mpRequestActor; + fopAc_ac_c* actor2 = order->mpTargetActor; + int eventId = order->mEventId; if (actor2 == NULL) { + JUT_ASSERT(608, 0); return 0; } - if (!(p_order->mFlag & 0x10)) { - if (actor1 != NULL && !actor1->eventInfo.chkCondition(2)) { + if (!(order->mFlag & 0x10)) { + if (actor1 != NULL && !actor1->eventInfo.chkCondition(dEvtCnd_CANDEMO_e)) { return 0; } - if (actor2 != NULL && !actor2->eventInfo.chkCondition(2)) { + if (actor2 != NULL && !actor2->eventInfo.chkCondition(dEvtCnd_CANDEMO_e)) { return 0; } } - if (!beforeFlagProc(p_order)) { + if (!beforeFlagProc(order)) { return 0; } if (actor1 != NULL) { - dComIfGp_getEventManager().setObjectArchive(actor1->eventInfo.getArchiveName()); + dComIfGp_getEventManager().setObjectArchive(actor1->eventInfo.mArchiveName); } if (!dComIfGp_getEventManager().order(eventId)) { @@ -357,9 +448,9 @@ int dEvt_control_c::demoCheck(dEvt_order_c* p_order) { actor2->eventInfo.setCommand(dEvtCmd_INDEMO_e); } - mMode = EVT_MODE_DEMO; - setParam(p_order); - afterFlagProc(p_order); + mMode = dEvt_mode_DEMO_e; + setParam(order); + afterFlagProc(order); return 1; } @@ -375,97 +466,146 @@ int dEvt_control_c::demoEnd() { actor->eventInfo.setCommand(dEvtCmd_NONE_e); } - if (mSpecifiedEvent != -1) { - dComIfGp_getEventManager().endProc(mSpecifiedEvent, 1); - mSpecifiedEvent = -1; + if (mEventId != -1) { + dComIfGp_getEventManager().endProc(mEventId, TRUE); + mEventId = -1; } + return 1; } -int dEvt_control_c::potentialCheck(dEvt_order_c* p_order) { - fopAc_ac_c* actor = p_order->mActor1; +int dEvt_control_c::potentialCheck(dEvt_order_c* order) { + fopAc_ac_c* actor1 = order->mpRequestActor; + fopAc_ac_c* actor2 = order->mpTargetActor; + const char* actorname; - if (!beforeFlagProc(p_order)) { - return 0; - } else { - actor->eventInfo.setCommand(dEvtCmd_INDEMO_e); - mMode = EVT_MODE_DEMO; - setParam(p_order); - afterFlagProc(p_order); - return 1; + #if DEBUG + if (actor1 == NULL || actor2 == NULL) { + JUT_ASSERT(704, 0); } + #endif + + if (!beforeFlagProc(order)) { + return 0; + } + + actor1->eventInfo.setCommand(dEvtCmd_INDEMO_e); + mMode = dEvt_mode_DEMO_e; + setParam(order); + afterFlagProc(order); + + #if DEBUG + if (event_debug_evnt()) { + if (actor1 != NULL) { + actorname = dStage_getName(fopAcM_GetProfName(actor1), -1); + } else { + actorname = "???"; + } + + // "%06d: event: potential demo start (%s) " + OS_REPORT("\x1b[34m%06d: event: 仮想デモ開始 (%s) \n\x1b[m", g_Counter.mCounter0, actorname); + } + #endif + return 1; } /* 80042014-8004212C 03C954 0118+00 1/1 0/0 0/0 .text doorCheck__14dEvt_control_cFP12dEvt_order_c */ -int dEvt_control_c::doorCheck(dEvt_order_c* p_order) { - if (commonCheck(p_order, 4, 3)) { - mMode = EVT_MODE_DEMO; +int dEvt_control_c::doorCheck(dEvt_order_c* order) { + // "door demo check start!!" + OS_REPORT("ドアデモのチェック開始!!\n"); + + if (commonCheck(order, dEvtCnd_CANDOOR_e, dEvtCmd_INDOOR_e)) { + #if DEBUG + if (event_debug_evnt()) { + // "door demo actor1 = %x actor2 = %x" + OS_REPORT("ドアデモへ actor1 = %x actor2 = %x\n", order->mpRequestActor, order->mpTargetActor); + } + #endif + + mMode = dEvt_mode_DEMO_e; fopAc_ac_c* actor2 = getPt2(); if (actor2 != NULL) { - dComIfGp_getEventManager().setObjectArchive(actor2->eventInfo.getArchiveName()); + dComIfGp_getEventManager().setObjectArchive(actor2->eventInfo.mArchiveName); } - if (mSpecifiedEvent == -1 && actor2 != NULL && actor2->eventInfo.getEventId() != -1) { - mSpecifiedEvent = actor2->eventInfo.getEventId(); + if (mEventId == -1 && actor2 != NULL && actor2->eventInfo.getEventId() != -1) { + mEventId = actor2->eventInfo.getEventId(); } - if (mSpecifiedEvent != -1 && - dComIfGp_getEventManager().getEventData(mSpecifiedEvent) != NULL) { - dComIfGp_getEventManager().order(mSpecifiedEvent); + if (mEventId != -1 && dComIfGp_getEventManager().getEventData(mEventId) != NULL) { + if (!dComIfGp_getEventManager().order(mEventId)) { + JUT_ASSERT(773, 0); + } } else { - mSpecifiedEvent = -1; + mEventId = -1; reset(); } - if (p_order->mEventType == EVT_TYPE_TREASURE) { + if (order->mEventType == dEvt_type_TREASURE_e) { onEventFlag(4); } else { onEventFlag(0x40); } return 1; - } else { - return 0; } + + return 0; } /* 8004212C-800421C0 03CA6C 0094+00 1/1 0/0 0/0 .text itemCheck__14dEvt_control_cFP12dEvt_order_c */ -int dEvt_control_c::itemCheck(dEvt_order_c* p_order) { - const char* event = "DEFAULT_GETITEM"; +int dEvt_control_c::itemCheck(dEvt_order_c* order) { + const char* eventname = "DEFAULT_GETITEM"; - if (commonCheck(p_order, 8, 4)) { - mMode = EVT_MODE_DEMO; - mSpecifiedEvent = dComIfGp_getEventManager().getEventIdx(event, -1, -1); - dComIfGp_getEventManager().order(mSpecifiedEvent); + if (commonCheck(order, dEvtCnd_CANGETITEM_e, dEvtCmd_INGETITEM_e)) { + #if DEBUG + if (event_debug_evnt()) { + OS_REPORT("アイテムデモへ actor1 = %x actor2 = %x\n", order->mpRequestActor, order->mpTargetActor); + } + #endif + + mMode = dEvt_mode_DEMO_e; + mEventId = dComIfGp_getEventManager().getEventIdx(eventname, 0xFF, -1); + if (!dComIfGp_getEventManager().order(mEventId)) { + // "specified event %d not ordered!!" + OS_REPORT("指定イベント %s が無い!!\n", eventname); + JUT_ASSERT(817, 0); + } return 1; - } else { - return 0; } + + return 0; } /* 800421C0-80042254 03CB00 0094+00 1/1 0/0 0/0 .text endProc__14dEvt_control_cFv */ int dEvt_control_c::endProc() { + #if DEBUG + if (event_debug_evnt()) { + OS_REPORT("\x1b[34m%06d: event: イベントが終了しました mMode = %d \n\x1b[m", g_Counter.mCounter0, mMode); + } + #endif + switch (mMode) { - case EVT_MODE_TALK: + case dEvt_mode_TALK_e: talkEnd(); break; - case EVT_MODE_DEMO: + case dEvt_mode_DEMO_e: demoEnd(); break; - case 3: - break; + case dEvt_mode_COMPULSORY_e: + JUT_ASSERT(858, 0); } - mMode = EVT_MODE_NONE; - field_0xea = 255; - mMapToolId = 255; + mMode = dEvt_mode_WAIT_e; + field_0xea = 0xFF; + mMapToolId = 0xFF; mStageEventDt = NULL; - field_0xec = 255; - field_0xed = 0; - mEventID = 255; + field_0xec = 0xFF; + mTalkXyType = 0; + mUnkEventId = 255; mPreItemNo = fpcNm_ITEM_NONE; dComIfGp_getEventManager().setStartDemo(-2); return 1; @@ -474,14 +614,14 @@ int dEvt_control_c::endProc() { /* 80042254-800422C0 03CB94 006C+00 1/1 0/0 0/0 .text change__14dEvt_control_cFv */ int dEvt_control_c::change() { dEvt_order_c* order; - s8 curOrderIdx; + if (mNum != 0) { - curOrderIdx = mOrderIdx; + s8 curOrderIdx = mOrderIdx; do { order = &mOrder[curOrderIdx]; - if (order->mFlag & 0xE00 && order->mActor1 == mChangeOK) { + if ((order->mFlag & 0xE00) && order->mpRequestActor == mChangeActor) { mOrderIdx = curOrderIdx; mNum = 1; order->mNextOrderIdx = -1; @@ -498,6 +638,9 @@ int dEvt_control_c::change() { /* 800422C0-80042468 03CC00 01A8+00 2/1 0/0 0/0 .text entry__14dEvt_control_cFv */ int dEvt_control_c::entry() { if (mNum != 0) { + // "%06d: event: %d event requests!!" + OS_REPORT("\x1b[34m%06d: event: %d個のイベント要求!!\n\x1b[m", g_Counter.mCounter0, mNum); + s8 orderIdx = mOrderIdx; mNum = 0; @@ -506,51 +649,69 @@ int dEvt_control_c::entry() { orderIdx = order->mNextOrderIdx; switch (order->mEventType) { - case EVT_TYPE_TALK: - if (dComIfGs_getLife() != 0 && talkCheck(order) != 0) { + case dEvt_type_TALK_e: + if (dComIfGs_getLife() != 0 && talkCheck(order)) { return 1; } break; - case EVT_TYPE_OTHER: - if (dComIfGs_getLife() != 0 && demoCheck(order) != 0) { + case dEvt_type_OTHER_e: + if (dComIfGs_getLife() != 0 && demoCheck(order)) { return 1; } break; - case EVT_TYPE_DOOR: - case EVT_TYPE_TREASURE: - if (dComIfGs_getLife() != 0 && doorCheck(order) != 0) { + case dEvt_type_DOOR_e: + case dEvt_type_TREASURE_e: + if (dComIfGs_getLife() != 0 && doorCheck(order)) { return 1; } break; - case EVT_TYPE_COMPULSORY: - mMode = 3; + case dEvt_type_COMPULSORY_e: + mMode = dEvt_mode_COMPULSORY_e; + + #if DEBUG + if (event_debug_evnt()) { + // "%06d: event: player initiated demo start" + OS_REPORT("\x1b[34m%06d: event: プレーヤ主導デモ開始\n\x1b[m", g_Counter.mCounter0); + } + #endif + setParam(order); return 1; - case EVT_TYPE_POTENTIAL: - if (dComIfGs_getLife() != 0 && potentialCheck(order) != 0) { + case dEvt_type_POTENTIAL_e: + if (dComIfGs_getLife() != 0 && potentialCheck(order)) { return 1; } break; - case EVT_TYPE_ITEM: - if (dComIfGs_getLife() != 0 && itemCheck(order) != 0) { + case dEvt_type_ITEM_e: + if (dComIfGs_getLife() != 0 && itemCheck(order)) { return 1; } break; - case EVT_TYPE_SHOWITEM_X: - case EVT_TYPE_SHOWITEM_Y: - if (dComIfGs_getLife() != 0 && talkXyCheck(order) != 0) { + case dEvt_type_SHOWITEM_X_e: + case dEvt_type_SHOWITEM_Y_e: + if (dComIfGs_getLife() != 0 && talkXyCheck(order)) { return 1; } break; - case EVT_TYPE_CATCH: - if (dComIfGs_getLife() != 0 && catchCheck(order) != 0) { + case dEvt_type_CATCH_e: + if (dComIfGs_getLife() != 0 && catchCheck(order)) { return 1; } break; + case 12: + JUT_ASSERT(980, 0); + break; case 13: break; } } while (orderIdx >= 0); + + #if DEBUG + if (event_debug_evnt()) { + // "%06d: event: check failed or change" + OS_REPORT("\x1b[34m%06d: event: チェック失敗 or チェンジ\n\x1b[m", g_Counter.mCounter0); + } + #endif } return 0; @@ -560,11 +721,11 @@ int dEvt_control_c::entry() { void dEvt_control_c::reset() { if (field_0xec != 0xFF) { fopAc_ac_c* pt1 = getPt1(); - fopAc_ac_c* pt1_2 = pt1; + fopAc_ac_c* var_r27 = pt1; s16 eventIdx = dComIfGp_getEventManager().getEventIdx(NULL, field_0xec, -1); - order(EVT_TYPE_OTHER, 3, 0x201, mHindFlag, pt1, getPt2(), eventIdx, field_0xec); - mChangeOK = pt1; + order(dEvt_type_OTHER_e, 3, 0x201, mHindFlag, pt1, getPt2(), eventIdx, field_0xec); + mChangeActor = pt1; } onEventFlag(8); @@ -573,41 +734,48 @@ void dEvt_control_c::reset() { /* 80042518-800425B4 03CE58 009C+00 3/3 3/3 46/46 .text reset__14dEvt_control_cFPv */ void dEvt_control_c::reset(void* param_0) { if (field_0xec != 0xFF) { - s16 eventIdx = dComIfGp_getEventManager().getEventIdx((fopAc_ac_c*)param_0, field_0xec); - fopAc_ac_c* pt2 = getPt2(); - order(EVT_TYPE_OTHER, 3, 0x201, mHindFlag, param_0, pt2, eventIdx, field_0xec); + fopAc_ac_c* var_r29 = (fopAc_ac_c*)param_0; + s16 eventIdx = dComIfGp_getEventManager().getEventIdx(var_r29, field_0xec); + order(dEvt_type_OTHER_e, 3, 0x201, mHindFlag, param_0, getPt2(), eventIdx, field_0xec); } - mChangeOK = param_0; + mChangeActor = param_0; onEventFlag(8); } void dEvt_control_c::clearSkipSystem() { mSkipFunc = NULL; - field_0x104 = -1; - field_0x10c = 0; + mSkipActorId = fpcM_ERROR_PROCESS_ID_e; + mSkipParameter = 0; mSkipTimer = 0; if (!chkFlag2(3)) { - mSkipFade = 0; + mIsSkipFade = FALSE; } + mSkipEventName[0] = 0; } /* 800425E8-8004261C 03CF28 0034+00 0/0 2/2 5/5 .text dEv_defaultSkipProc__FPvi */ -int dEv_defaultSkipProc(void* param_0, int) { - dComIfGp_getEvent().reset(param_0); +int dEv_defaultSkipProc(void* actor, int parameter) { + // "%06d: event: skip event!!!" + OS_REPORT("\x1b[34m%06d: event: スキップ event!!!\n\x1b[m", g_Counter.mCounter0); + dEvt_control_c& event = dComIfGp_getEvent(); + + event.reset(actor); return 1; } /* 8004261C-80042778 03CF5C 015C+00 1/1 1/1 0/0 .text dEv_defaultSkipZev__FPvi */ -int dEv_defaultSkipZev(void* param_0, int param_1) { - dEvt_control_c* evControl = &dComIfGp_getEvent(); +int dEv_defaultSkipZev(void* actor, int parameter) { + // "%06d: event: skip ZEV event!!!" + OS_REPORT("\x1b[34m%06d: event: スキップ ZEV event!!!\n\x1b[m", g_Counter.mCounter0); + dEvt_control_c* event = &dComIfGp_getEvent(); s16 eventID = -1; - dStage_MapEvent_dt_c* data = evControl->getStageEventDt(); - bool var_r27 = true; + dStage_MapEvent_dt_c* data = event->getStageEventDt(); + bool var_r27 = true; if (data != NULL) { if (data->field_0x9 != 0xFF) { var_r27 = false; @@ -616,41 +784,47 @@ int dEv_defaultSkipZev(void* param_0, int param_1) { } } - switch (param_1) { + char eventName[28]; + char* skipName; + switch (parameter) { case 0: - char eventName[32]; - strcpy(eventName, data->mName); + strcpy(eventName, data->data.event_name); strcat(eventName, "$0"); eventID = dComIfGp_getEventManager().getEventIdx(eventName, 0xFF, -1); + OS_REPORT("%06d: event: [%d] %s!\n", g_Counter.mCounter0, eventID, eventName); break; case 1: - char* skipName = dComIfGp_getEvent().getSkipEventName(); + skipName = dComIfGp_getEvent().getSkipEventName(); eventID = dComIfGp_getEventManager().getEventIdx(skipName, 0xFF, -1); + OS_REPORT("%06d: event: [%d] %s!\n", g_Counter.mCounter0, eventID, dComIfGp_getEvent().getSkipEventName()); break; + default: + OS_REPORT("%06d: event: ERROR: illegal prameter!\n", g_Counter.mCounter0); } if (eventID != -1) { - evControl->reset(param_0); - fopAcM_orderOtherEventId((fopAc_ac_c*)param_0, eventID, evControl->getMapToolId(), -1, 3, + event->reset(actor); + fopAcM_orderOtherEventId((fopAc_ac_c*)actor, eventID, event->getMapToolId(), -1, 3, 0x400); return 2; } else if (var_r27) { - evControl->reset(param_0); + event->reset(actor); return 1; } else { - evControl->reset(param_0); + event->reset(actor); return 1; } } /* 80042778-800428DC 03D0B8 0164+00 0/0 1/1 0/0 .text dEv_defaultSkipStb__FPvi */ -int dEv_defaultSkipStb(void* param_0, int param_1) { - dEvt_control_c* evControl = &dComIfGp_getEvent(); +int dEv_defaultSkipStb(void* actor, int parameter) { + OS_REPORT("\x1b[34m%06d: event: スキップ STB event!!!\n\x1b[m", g_Counter.mCounter0); + dEvt_control_c* event = &dComIfGp_getEvent(); s16 eventID = -1; - dStage_MapEvent_dt_c* data = evControl->getStageEventDt(); - bool var_r27 = true; + dStage_MapEvent_dt_c* data = event->getStageEventDt(); + bool var_r27 = true; if (data != NULL) { if (data->field_0x9 != 0xFF) { var_r27 = false; @@ -659,37 +833,42 @@ int dEv_defaultSkipStb(void* param_0, int param_1) { } } - switch (param_1) { + char eventName[28]; + char* skipName; + switch (parameter) { case 0: - char eventName[32]; - strcpy(eventName, data->mName); + strcpy(eventName, data->data.event_name); strcat(eventName, "$0"); eventID = dComIfGp_getEventManager().getEventIdx(eventName, 0xFF, -1); + OS_REPORT("%06d: event: [%d] %s!\n", g_Counter.mCounter0, eventID, eventName); break; case 1: - char* skipName = dComIfGp_getEvent().getSkipEventName(); + skipName = dComIfGp_getEvent().getSkipEventName(); eventID = dComIfGp_getEventManager().getEventIdx(skipName, 0xFF, -1); + OS_REPORT("%06d: event: [%d] %s!\n", g_Counter.mCounter0, eventID, dComIfGp_getEvent().getSkipEventName()); break; + default: + OS_REPORT("%06d: event: ERROR: illegal prameter!\n", g_Counter.mCounter0); } if (eventID != -1) { - evControl->reset(param_0); + event->reset(actor); dDemo_c::end(); - fopAcM_orderOtherEventId((fopAc_ac_c*)param_0, eventID, evControl->getMapToolId(), -1, 3, + fopAcM_orderOtherEventId((fopAc_ac_c*)actor, eventID, event->getMapToolId(), -1, 3, 0x400); return 2; } else if (var_r27) { - evControl->reset(param_0); + event->reset(actor); dDemo_c::end(); return 1; } else { - evControl->reset(param_0); + event->reset(actor); return 1; } } /* 800428DC-8004290C 03D21C 0030+00 0/0 1/1 33/33 .text dEv_noFinishSkipProc__FPvi */ -int dEv_noFinishSkipProc(void*, int) { +int dEv_noFinishSkipProc(void* actor, int parameter) { dComIfGp_getEvent().offSkipFade(); return 0; } @@ -698,44 +877,47 @@ char* dEvt_control_c::getSkipEventName() { return mSkipEventName; } -void dEvt_control_c::setSkipProc(void* param_0, SkipFunc skipFunc, int param_2) { - mSkipFunc = skipFunc; - field_0x104 = getPId(param_0); - field_0x10c = param_2; +void dEvt_control_c::setSkipProc(void* skipActor, dEvt_SkipCb skipCb, int skipParameter) { + mSkipFunc = skipCb; + mSkipActorId = getPId(skipActor); + mSkipParameter = skipParameter; } -void dEvt_control_c::setSkipZev(void* param_0, char* evtName) { - setSkipProc(param_0, dEv_defaultSkipZev, 1); - strcpy(mSkipEventName, evtName); +void dEvt_control_c::setSkipZev(void* skipActor, char* eventName) { + setSkipProc(skipActor, dEv_defaultSkipZev, 1); + strcpy(mSkipEventName, eventName); } void dEvt_control_c::onSkipFade() { - mSkipFade = 1; + mIsSkipFade = TRUE; } void dEvt_control_c::offSkipFade() { - if (mSkipFade != 0) { - mSkipFade = 0; + if (mIsSkipFade) { + mIsSkipFade = FALSE; } - mSkipFade = 0; + + mIsSkipFade = FALSE; } /* 800429D4-80042BBC 03D314 01E8+00 1/1 0/0 0/0 .text skipper__14dEvt_control_cFv */ bool dEvt_control_c::skipper() { - bool startSkip = false; + bool doSkip = false; bool canSkip = false; offFlag2(8); + if (mEventStatus == 1) { if (mSkipFunc != NULL) { canSkip = true; } - if (mDoCPd_c::getTrigStart(PAD_1)) { + bool is_trig_skipbtn = mDoCPd_c::getTrigStart(PAD_1); + if (is_trig_skipbtn) { if (mSkipTimer > 0) { mSkipTimer = -1; - if (canSkip && mSkipFade) { + if (canSkip && mIsSkipFade) { mDoGph_gInf_c::fadeOut(0.1f); } } else if (mSkipTimer == 0) { @@ -750,37 +932,33 @@ bool dEvt_control_c::skipper() { dComIfGp_setSButtonStatusForce(0x4D, 1); } - int curTimer = mSkipTimer; - mSkipTimer++; - if (curTimer > 45) { + if (mSkipTimer++ > 45) { mSkipTimer = 0; } } else if (mSkipTimer != 0) { - if (canSkip && mSkipFade) { - int curTimer = mSkipTimer; - mSkipTimer--; - - if (curTimer < -20) { - startSkip = true; + if (canSkip && mIsSkipFade) { + if (mSkipTimer-- < -20) { + doSkip = true; mSkipTimer = 0; } } else { if (canSkip) { - startSkip = true; + doSkip = true; } mSkipTimer = 0; } } - if (startSkip) { + if (doSkip) { dMsgObject_onKillMessageFlag(); - fopAc_ac_c* ptr = convPId(field_0x104); - if (ptr == NULL) { - ptr = dComIfGp_getPlayer(0); + fopAc_ac_c* skipActor = convPId(mSkipActorId); + if (skipActor == NULL) { + OS_REPORT("\x1b[31m%06d: event: Skip ordered actor DEAD!! (%d) \n\x1b[m", g_Counter.mCounter0, mSkipActorId); + skipActor = dComIfGp_getPlayer(0); } - int skipRet = mSkipFunc(ptr, field_0x10c); + int skipRet = mSkipFunc(skipActor, mSkipParameter); onFlag2(8); if (skipRet != 0) { @@ -795,15 +973,35 @@ bool dEvt_control_c::skipper() { } } - return startSkip; + return doSkip; } /* 80042BBC-80042FA8 03D4FC 03EC+00 0/0 1/1 0/0 .text Step__14dEvt_control_cFv */ int dEvt_control_c::Step() { dEvent_manager_c* evtMng = &dComIfGp_getEventManager(); + #if DEBUG + static int prevEvId = -99; + static char* basename[] = { + "NULL", + "KEEP", + "STAGE", + "ROOM0", + "ROOM1", + "ROOM2", + "ROOM3", + "ROOM4", + "ROOM5", + "DEMO", + "DEBUG", + }; + + evtMng->debugBfProc(); + #endif + field_0xe7 = 0; field_0xe8 = mNum; + skipper(); if (chkEventFlag(8)) { @@ -815,19 +1013,24 @@ int dEvt_control_c::Step() { } } - dEvDtEvent_c* eventDt = evtMng->getEventData(mSpecifiedEvent); + dEvDtEvent_c* eventDt = evtMng->getEventData(mEventId); if (eventDt != NULL) { eventDt->forceFinish(); } + offEventFlag(8); } if (mEventStatus != 0) { evtMng->Sequencer(); } + offEventFlag(0x300); if (mEventStatus == 2) { + // "%06d: event: end (%d)" + OS_REPORT("\x1b[36m%06d: event: 終了 (%d)\n\x1b[m", g_Counter.mCounter0, prevEvId); + evtMng->cancelStaff("ALL"); evtMng->setCameraPlay(0); mEventFlag = 0; @@ -838,8 +1041,12 @@ int dEvt_control_c::Step() { } if (mEventStatus == 5 && !dComIfGp_isEnableNextStage()) { + #if DEBUG + prevEvId = mEventId; + #endif + if (chkFlag2(2) || mSkipTimer < 0) { - if (mSkipFade) { + if (mIsSkipFade) { mDoGph_gInf_c::fadeOut(-0.05f); } offFlag2(2); @@ -847,16 +1054,28 @@ int dEvt_control_c::Step() { } endProc(); + if (!chkFlag2(3)) { - mSkipFade = false; + mIsSkipFade = false; evtMng->setObjectArchive(NULL); } + mEventStatus = 2; + + // "%06d: event: order info (%d)" + OS_REPORT("\x1b[36m%06d: event: オーダー受付 (%d)\n\x1b[m", g_Counter.mCounter0, prevEvId); } else if (mEventStatus == 5 && (chkFlag2(2) || mSkipTimer < 0)) { clear_tmpflag_for_message(); } if (change() != -1) { + #if DEBUG + if (event_debug_evnt()) { + // "%06d: event: event change" + OS_REPORT("\x1b[34m%06d: event: イベント変更\n\x1b[m", g_Counter.mCounter0); + } + #endif + evtMng->cancelStaff("ALL"); evtMng->setCameraPlay(0); onEventFlag(0x200); @@ -867,6 +1086,7 @@ int dEvt_control_c::Step() { onFlag2(2); } } + mCompulsory = 0; int roomNo = dComIfGp_roomControl_getStayNo(); @@ -875,10 +1095,11 @@ int dEvt_control_c::Step() { mRoomNo = roomNo; } - if (mEventStatus == 0 && entry() != 0) { + if (mEventStatus == 0 && entry()) { if (dMsgObject_getMsgObjectClass() != NULL) { dMsgObject_setKillMessageFlag(); } + onEventFlag(0x100); dComIfGp_getVibration().StopQuake(31); @@ -887,24 +1108,54 @@ int dEvt_control_c::Step() { if (!dCam_getBody()->Active() && player->checkFishingCastMode()) { dCam_getBody()->QuickStart(); } + mEventStatus = 1; clearSkipSystem(); + + #if PLATFORM_SHIELD || PLATFORM_WII + field_0x130 = 0; + #endif + + #if DEBUG + const char* eventname; + if (mEventId == -1) { + eventname = "POTENTIAL?"; + } else { + dEvDtEvent_c* data = evtMng->getEventData(mEventId); + if (data == NULL) { + eventname = "UNKOWN"; + } else { + eventname = data->getName(); + } + } + + // "%06d: event: start (%d=%s[%d]) %s" + OS_REPORT("\x1b[36m%06d: event: 開始 (%d=%s[%d]) %s\n\x1b[m", g_Counter.mCounter0, mEventId, + mEventId == -1 ? "PROGRAM" : basename[mEventId >> 8], mEventId & 0xFF, eventname); + prevEvId = -99; + #endif } mNum = 0; - mChangeOK = NULL; + mChangeActor = NULL; if (chkEventFlag(0x200)) { - Z2AudioMgr::getInterface()->setDemoName(NULL); + Z2GetAudioMgr()->setDemoName(NULL); } if (mEventStatus != 0) { evtMng->Experts(); + + #if PLATFORM_WII || PLATFORM_SHIELD + if (field_0x130) { + mDoGph_gInf_c::onWideZoom(); + } + #endif return 1; } else { if (!mRoomInfoSet) { char lastStageName[8]; - strncpy(lastStageName, dComIfGp_getStartStageName(), 7); + strncpy(lastStageName, dComIfGp_getStartStageName(), sizeof(lastStageName) - 1); lastStageName[7] = 0; dComIfGp_setLastPlayStageName(lastStageName); @@ -929,12 +1180,12 @@ int dEvt_control_c::moveApproval(void* param_0) { } switch (mMode) { - case EVT_MODE_TALK: + case dEvt_mode_TALK_e: if (getPt1() == actor || getPt2() == actor) { return 2; } break; - case EVT_MODE_DEMO: + case dEvt_mode_DEMO_e: if (getPt1() == actor || getPt2() == actor) { return 2; } @@ -943,7 +1194,7 @@ int dEvt_control_c::moveApproval(void* param_0) { return 2; } break; - case 3: + case dEvt_mode_COMPULSORY_e: if (getPt1() == actor) { return 2; } @@ -963,7 +1214,7 @@ int dEvt_control_c::moveApproval(void* param_0) { return 0; } - if (mMode == EVT_MODE_TALK && fopAcM_CheckStatus(actor, 0x40)) { + if (mMode == dEvt_mode_TALK_e && fopAcM_CheckStatus(actor, 0x40)) { return 1; } @@ -971,7 +1222,7 @@ int dEvt_control_c::moveApproval(void* param_0) { return 1; } - if ((getMode() == 3 || getMode() == EVT_MODE_TALK) && fopAcM_CheckStatus(actor, 0x4000000)) { + if ((getMode() == 3 || getMode() == dEvt_mode_TALK_e) && fopAcM_CheckStatus(actor, 0x4000000)) { return 0; } @@ -987,35 +1238,33 @@ int dEvt_control_c::moveApproval(void* param_0) { } /* 8004316C-800431E8 03DAAC 007C+00 0/0 28/28 0/0 .text compulsory__14dEvt_control_cFPvPCcUs */ -BOOL dEvt_control_c::compulsory(void* param_0, char const* eventName, u16 hind) { - bool check = (mEventStatus == 0 || mEventStatus == 2); - - if (!check || mCompulsory) { +BOOL dEvt_control_c::compulsory(void* param_0, const char* eventName, u16 hind) { + if (!isOrderOK() || mCompulsory) { return 0; } mCompulsory = 1; - return orderOld(EVT_TYPE_COMPULSORY, 2, 0, hind, param_0, NULL, eventName); + return orderOld(dEvt_type_COMPULSORY_e, 2, 0, hind, param_0, NULL, eventName); } void dEvt_control_c::remove() { - mMode = EVT_MODE_NONE; + mMode = dEvt_mode_WAIT_e; mEventStatus = 0; mNum = 0; mDebugStb = 0; field_0xe6 = 0; field_0xe7 = 0; mCullRate = 0.0f; - field_0xea = -1; - mMapToolId = -1; - field_0xec = -1; + field_0xea = 0xFF; + mMapToolId = 0xFF; + field_0xec = 0xFF; mStageEventDt = NULL; - mEventID = 255; - field_0xed = 0; + mUnkEventId = 255; + mTalkXyType = 0; mPreItemNo = fpcNm_ITEM_NONE; mEventFlag = 0; mFlag2 = 0; - mChangeOK = NULL; + mChangeActor = NULL; clearSkipSystem(); mCompulsory = 0; mRoomInfoSet = false; @@ -1032,9 +1281,9 @@ void dEvt_control_c::sceneChange(int exitId) { dStage_changeScene4Event(exitId, mRoomNo, -1, mRoomInfoSet, 0.0f, 0, 0, -1); } -u32 dEvt_control_c::getPId(void* actor) { +fpc_ProcID dEvt_control_c::getPId(void* actor) { if (actor == NULL) { - return 0xFFFFFFFF; + return fpcM_ERROR_PROCESS_ID_e; } else { return fopAcM_GetID(actor); } @@ -1048,39 +1297,54 @@ fopAc_ac_c* dEvt_control_c::convPId(fpc_ProcID id) { /* 8004331C-800433F0 03DC5C 00D4+00 0/0 1/1 0/0 .text getStbDemoData__14dEvt_control_cFPc */ void* dEvt_control_c::getStbDemoData(char* resName) { + void* res = NULL; char* demoArcName = dStage_roomControl_c::getDemoArcName(); + if (*demoArcName != 0) { - void* res = dComIfG_getObjectRes(demoArcName, resName); + res = dComIfG_getObjectRes(demoArcName, resName); if (res != NULL) { - event_debug_evnt(); + if (event_debug_evnt()) { + OS_REPORT("%06d: event: stb data %s found in %s.arc\n", g_Counter.mCounter0, resName, demoArcName); + } return res; } - event_debug_evnt(); + + if (event_debug_evnt()) { + OS_REPORT("%06d: event: stb data %s not found in %s.arc\n", g_Counter.mCounter0, resName, demoArcName); + } } else { - event_debug_evnt(); + if (event_debug_evnt()) { + OS_REPORT("%06d: event: stb data %s unkown archive name\n", g_Counter.mCounter0, resName); + } } char* roomArcName = dComIfG_getRoomArcName(dComIfGp_roomControl_getStayNo()); - void* res2 = dComIfG_getStageRes(roomArcName, resName); - if (res2 != NULL) { - event_debug_evnt(); - return res2; - } else { - res2 = dComIfG_getStageRes(resName); - if (res2 != NULL) { - event_debug_evnt(); - return res2; - } else { - return NULL; + res = dComIfG_getStageRes(roomArcName, resName); + if (res != NULL) { + if (event_debug_evnt()) { + OS_REPORT("%06d: event: stb data %s found in %s.arc\n", g_Counter.mCounter0, resName, roomArcName); } + return res; } + + res = dComIfG_getStageRes(resName); + if (res != NULL) { + if (event_debug_evnt()) { + OS_REPORT("%06d: event: stb %s data found in %s.arc\n", g_Counter.mCounter0, resName, "Stage"); + } + return res; + } else { + OS_REPORT("\x1b[43;30m%06d: event: stb data %s NOT found\n\x1b[m", g_Counter.mCounter0, resName); + } + + return NULL; } dEvt_info_c::dEvt_info_c() { setCommand(dEvtCmd_NONE_e); - setCondition(2); + setCondition(dEvtCnd_CANDEMO_e); setEventId(-1); - setMapToolId(-1); + setMapToolId(0xFF); mArchiveName = NULL; mIndex = 0; } @@ -1090,7 +1354,7 @@ void dEvt_info_c::setEventName(char* name) { if (name == NULL) { mEventId = -1; } else { - mEventId = dComIfGp_getEventManager().getEventIdx(name, -1, -1); + mEventId = (s16)dComIfGp_getEventManager().getEventIdx(name, 0xFF, -1); } } @@ -1098,37 +1362,41 @@ void dEvt_info_c::setEventName(char* name) { char* dEvt_info_c::getEventName() { if (mEventId == -1) { return NULL; + } + + dEvDtEvent_c* data = dComIfGp_getEventManager().getEventData(mEventId); + if (data == NULL) { + return NULL; } else { - dEvDtEvent_c* data = dComIfGp_getEventManager().getEventData(mEventId); - if (data == NULL) { - return NULL; - } else { - return data->getName(); - } + return data->getName(); } } void dEvt_info_c::beforeProc() { - setCondition(2); + mCondition = dEvtCnd_CANDEMO_e; } /* 800434D8-80043500 03DE18 0028+00 0/0 4/4 1/1 .text searchMapEventData__14dEvt_control_cFUc */ dStage_MapEvent_dt_c* dEvt_control_c::searchMapEventData(u8 mapToolID) { - return searchMapEventData(mapToolID, dComIfGp_roomControl_getStayNo()); + s32 roomNo = dComIfGp_roomControl_getStayNo(); + return searchMapEventData(mapToolID, roomNo); } /* 80043500-8004360C 03DE40 010C+00 3/3 7/7 5/5 .text searchMapEventData__14dEvt_control_cFUcl */ dStage_MapEvent_dt_c* dEvt_control_c::searchMapEventData(u8 mapToolID, s32 roomNo) { + int i; if (mapToolID == 0xFF) { return NULL; } - dStage_roomDt_c* room_dt = dComIfGp_roomControl_getStatusRoomDt(roomNo); + s32 var_r28 = roomNo; + dStage_roomDt_c* room_dt = dComIfGp_roomControl_getStatusRoomDt(var_r28); + dStage_MapEventInfo_c* roomInfo; if (room_dt != NULL) { - dStage_MapEventInfo_c* roomInfo = room_dt->getMapEventInfo(); + roomInfo = room_dt->getMapEventInfo(); if (roomInfo != NULL) { - for (int i = 0; i < roomInfo->num; i++) { + for (i = 0; i < roomInfo->num; i++) { if (mapToolID == roomInfo->m_entries[i].field_0x4) { return &roomInfo->m_entries[i]; } @@ -1136,11 +1404,11 @@ dStage_MapEvent_dt_c* dEvt_control_c::searchMapEventData(u8 mapToolID, s32 roomN } } - dStage_MapEventInfo_c* stageInfo = dComIfGp_getStage()->getMapEventInfo(); - if (stageInfo != NULL) { - for (int i = 0; i < stageInfo->num; i++) { - if (mapToolID == stageInfo->m_entries[i].field_0x4) { - return &stageInfo->m_entries[i]; + roomInfo = dComIfGp_getStage()->getMapEventInfo(); + if (roomInfo != NULL) { + for (i = 0; i < roomInfo->num; i++) { + if (mapToolID == roomInfo->m_entries[i].field_0x4) { + return &roomInfo->m_entries[i]; } } } @@ -1149,31 +1417,35 @@ dStage_MapEvent_dt_c* dEvt_control_c::searchMapEventData(u8 mapToolID, s32 roomN } s16 dEvt_control_c::runningEventID(s16 eventID) { - return eventID == mEventID ? mSpecifiedEvent : eventID; + if (eventID == mUnkEventId) { + return mEventId; + } else { + return eventID; + } } -void dEvt_control_c::setPt1(void* ptr) { - mPt1 = getPId(ptr); +void dEvt_control_c::setPt1(void* actor) { + mPt1 = getPId(actor); } -void dEvt_control_c::setPt2(void* ptr) { - mPt2 = getPId(ptr); +void dEvt_control_c::setPt2(void* actor) { + mPt2 = getPId(actor); } -void dEvt_control_c::setPtT(void* ptr) { - mPtT = getPId(ptr); +void dEvt_control_c::setPtT(void* actor) { + mPtT = getPId(actor); } -void dEvt_control_c::setPtI(void* ptr) { - mPtI = getPId(ptr); +void dEvt_control_c::setPtI(void* actor) { + mPtI = getPId(actor); } void dEvt_control_c::setPtI_Id(fpc_ProcID id) { mPtI = id; } -void dEvt_control_c::setPtD(void* ptr) { - mPtd = getPId(ptr); +void dEvt_control_c::setPtD(void* actor) { + mPtd = getPId(actor); } void dEvt_control_c::setGtItm(u8 itemNo) { diff --git a/src/d/d_event_data.cpp b/src/d/d_event_data.cpp index 39bee2cb2e..2ce9ea3a4e 100644 --- a/src/d/d_event_data.cpp +++ b/src/d/d_event_data.cpp @@ -12,57 +12,94 @@ #include "d/d_gameover.h" #include "d/d_msg_object.h" #include "m_Do/m_Do_graphic.h" +#include "SSystem/SComponent/c_counter.h" -inline BOOL dEvDtFlagCheck(int flag) { - return dComIfGp_getEventManager().flagCheck(flag); +inline BOOL dEvDtFlagCheck(int i_flag) { + return dComIfGp_getEventManager().getFlags().flagCheck(i_flag); } -inline void dEvDtFlagSet(int flag) { - dComIfGp_getEventManager().setFlag(flag); +inline void dEvDtFlagSet(int i_flag) { + dComIfGp_getEventManager().getFlags().flagSet(i_flag); } struct TelopDataStruct { - s32 mName; - u16 mTelopNo; - u16 _6; - u16 _8; - // padding + s32 name; + u16 telopNo; + const u16 flag; + u16 type; }; -/* ############################################################################################## */ /* 803A7FB0-803A8238 0050D0 0288+00 2/2 0/0 0/0 .data TelopData */ static TelopDataStruct TelopData[] = { - {'D05\0', 1101, 4201, 3}, {'D05A', 1101, -1, 0}, {'D05B', 1101, -1, 0}, - {'D04\0', 1102, -1, 1}, {'D04A', 1102, -1, 0}, {'D04B', 1102, -1, 0}, - {'D01\0', 1103, 4728, 3}, {'D01A', 1103, -1, 0}, {'D01B', 1103, -1, 0}, - {'D10\0', 1104, 4908, 3}, {'D10A', 1104, -1, 0}, {'D10B', 1104, -1, 0}, - {'D11\0', 1105, 5240, 3}, {'D11A', 1105, -1, 0}, {'D11B', 1105, -1, 0}, - {'D06\0', 1106, 5465, 3}, {'D06A', 1106, -1, 0}, {'D06B', 1106, -1, 0}, - {'D07\0', 1107, 5689, 3}, {'D07A', 1107, -1, 0}, {'D07B', 1107, -1, 0}, - {'D08\0', 1108, -1, 1}, {'D08A', 1108, -1, 0}, {'D08B', 1108, -1, 0}, - {'D08C', 1108, -1, 0}, {'D08D', 1108, -1, 0}, {'D09\0', 1109, -1, 1}, - {'D09A', 1109, -1, 0}, {'D09B', 1109, -1, 0}, {'D09C', 1109, -1, 0}, - {'F00\0', 1110, -1, 1}, {'F103', 1111, 10, 3}, {'R01\0', 1111, -1, 0}, - {'F109', 1112, -1, 1}, {'R109', 1112, -1, 0}, {'R209', 1112, -1, 0}, - {'F112', 1113, 1033, 3}, {'F113', 1114, 1024, 3}, {'F108', 1115, -1, 1}, - {'R108', 1115, -1, 0}, {'F115', 1116, 1054, 3}, {'F111', 1118, -1, 1}, - {'F124', 1119, -1, 1}, {'F114', 1120, 2048, 3}, {'F125', 1121, 2572, 3}, - {'F121', 1122, 1581, 3}, {'F122', 1122, 1581, 3}, {'F123', 1122, 1581, 3}, - {'F117', 1123, -1, 1}, {'F128', 1134, 814, 3}, {'R128', 1134, -1, 0}, - {'F127', 1140, -1, 1}, {'R127', 1140, -1, 0}, {'F126', 1141, -1, 1}}; + {'D05\0', 1101, 0x1069, 3}, + {'D05A', 1101, 0xFFFF, 0}, + {'D05B', 1101, 0xFFFF, 0}, + {'D04\0', 1102, 0xFFFF, 1}, + {'D04A', 1102, 0xFFFF, 0}, + {'D04B', 1102, 0xFFFF, 0}, + {'D01\0', 1103, 0x1278, 3}, + {'D01A', 1103, 0xFFFF, 0}, + {'D01B', 1103, 0xFFFF, 0}, + {'D10\0', 1104, 0x132C, 3}, + {'D10A', 1104, 0xFFFF, 0}, + {'D10B', 1104, 0xFFFF, 0}, + {'D11\0', 1105, 0x1478, 3}, + {'D11A', 1105, 0xFFFF, 0}, + {'D11B', 1105, 0xFFFF, 0}, + {'D06\0', 1106, 0x1559, 3}, + {'D06A', 1106, 0xFFFF, 0}, + {'D06B', 1106, 0xFFFF, 0}, + {'D07\0', 1107, 0x1639, 3}, + {'D07A', 1107, 0xFFFF, 0}, + {'D07B', 1107, 0xFFFF, 0}, + {'D08\0', 1108, 0xFFFF, 1}, + {'D08A', 1108, 0xFFFF, 0}, + {'D08B', 1108, 0xFFFF, 0}, + {'D08C', 1108, 0xFFFF, 0}, + {'D08D', 1108, 0xFFFF, 0}, + {'D09\0', 1109, 0xFFFF, 1}, + {'D09A', 1109, 0xFFFF, 0}, + {'D09B', 1109, 0xFFFF, 0}, + {'D09C', 1109, 0xFFFF, 0}, + {'F00\0', 1110, 0xFFFF, 1}, + {'F103', 1111, 10, 3}, + {'R01\0', 1111, 0xFFFF, 0}, + {'F109', 1112, 0xFFFF, 1}, + {'R109', 1112, 0xFFFF, 0}, + {'R209', 1112, 0xFFFF, 0}, + {'F112', 1113, 0x409, 3}, + {'F113', 1114, 0x400, 3}, + {'F108', 1115, 0xFFFF, 1}, + {'R108', 1115, 0xFFFF, 0}, + {'F115', 1116, 0x41E, 3}, + {'F111', 1118, 0xFFFF, 1}, + {'F124', 1119, 0xFFFF, 1}, + {'F114', 1120, 0x800, 3}, + {'F125', 1121, 0xA0C, 3}, + {'F121', 1122, 0x62D, 3}, + {'F122', 1122, 0x62D, 3}, + {'F123', 1122, 0x62D, 3}, + {'F117', 1123, 0xFFFF, 1}, + {'F128', 1134, 0x32E, 3}, + {'R128', 1134, 0xFFFF, 0}, + {'F127', 1140, 0xFFFF, 1}, + {'R127', 1140, 0xFFFF, 0}, + {'F126', 1141, 0xFFFF, 1}, +}; /* 80450640-80450648 0000C0 0004+04 2/2 0/0 0/0 .sdata numTelopData */ -static s32 numTelopData = ARRAY_SIZEU(TelopData); +static int numTelopData = ARRAY_SIZE(TelopData); /* 8004372C-800437C4 03E06C 0098+00 2/2 0/0 0/0 .text getTelopNo__FPCc */ -static u16 getTelopNo(char const* pName) { - s32 val = - ((pName[3] == 'B' ? 'd' : pName[0]) << 0x18 | pName[4] << 0x10 | pName[5] << 8 | pName[6]); - for (s32 i = 0; i < numTelopData; i++) { - if (val == TelopData[i].mName) { - return TelopData[i].mTelopNo; +static u16 getTelopNo(char const* i_name) { + int i; + s32 name = ((i_name[3] == 'B' ? 'd' : i_name[0]) << 0x18 | i_name[4] << 0x10 | i_name[5] << 8 | i_name[6]); + for (i = 0; i < numTelopData; i++) { + if (name == TelopData[i].name) { + return TelopData[i].telopNo; } } + return 0xFFFF; } @@ -73,6 +110,7 @@ static u16 getTelopNo() { /* 800437F0-80043A14 03E130 0224+00 1/1 0/0 0/0 .text getStartTelopNo__Fv */ static u16 getStartTelopNo() { + int i; const char* startStageName = dComIfGp_getStartStageName(); const char* lastPlayStateName = dComIfGp_getLastPlayStageName(); @@ -80,152 +118,208 @@ static u16 getStartTelopNo() { return 0xFFFF; } + TelopDataStruct* telopData = NULL; - s32 val = ((startStageName[3] == 'B' ? 'd' : startStageName[0]) << 0x18 | - startStageName[4] << 0x10 | startStageName[5] << 8 | startStageName[6]); - for (s32 i = 0; i < numTelopData; i++) { - if (val == TelopData[i].mName) { + s32 name = ((startStageName[3] == 'B' ? 'd' : startStageName[0]) << 0x18 | + startStageName[4] << 0x10 | + startStageName[5] << 8 | + startStageName[6]); + + for (i = 0; i < numTelopData; i++) { + if (name == TelopData[i].name) { telopData = &TelopData[i]; break; } } - if (telopData == NULL || telopData->_8 == 0) { + if (telopData == NULL || telopData->type == 0) { return 0xFFFF; - } else if (telopData->_8 == 2 && telopData->_6 != 0xFFFF && - !dComIfGs_isEventBit(telopData->_6)) - { + } + + if (telopData->type == 2 && telopData->flag != 0xFFFF && !dComIfGs_isEventBit(telopData->flag)) { return 0xFFFF; - } else if (telopData->_8 == 3 && telopData->_6 != 0xFFFF && - !dComIfGs_isStageSwitch(telopData->_6 >> 8, telopData->_6 & 0xFF)) - { + } + + if (telopData->type == 3 && telopData->flag != 0xFFFF && !dComIfGs_isStageSwitch(telopData->flag >> 8, telopData->flag & 0xFF)) { return 0xFFFF; - } else { - TelopDataStruct* lastTelopData = NULL; - val = ((lastPlayStateName[3] == 'B' ? 'd' : lastPlayStateName[0]) << 0x18 | - lastPlayStateName[4] << 0x10 | lastPlayStateName[5] << 8 | lastPlayStateName[6]); + } + + TelopDataStruct* lastTelopData = NULL; + name = ((lastPlayStateName[3] == 'B' ? 'd' : lastPlayStateName[0]) << 0x18 | + lastPlayStateName[4] << 0x10 | + lastPlayStateName[5] << 8 | + lastPlayStateName[6]); - for (s32 i = 0; i < numTelopData; i++) { - if (val == TelopData[i].mName) { - lastTelopData = &TelopData[i]; - break; - } - } - - if (lastTelopData != NULL && telopData->mTelopNo == lastTelopData->mTelopNo) { - return 0xFFFF; - } else { - return telopData->mTelopNo; + for (i = 0; i < numTelopData; i++) { + if (name == TelopData[i].name) { + lastTelopData = &TelopData[i]; + break; } } + + if (lastTelopData != NULL && telopData->telopNo == lastTelopData->telopNo) { + return 0xFFFF; + } + + return telopData->telopNo; } +#if DEBUG +u8 event_debug_evdt() { + dEvM_HIO_c& hio = dComIfGp_getEventManager().getEventHIO(); + return hio.m_evd_debug; +} + +u8 event_debug_evdt_endcheck() { + dEvM_HIO_c& hio = dComIfGp_getEventManager().getEventHIO(); + return hio.m_evd_unfinished; +} + +u8 event_debug_evdt_reg1() { + dEvM_HIO_c& hio = dComIfGp_getEventManager().getEventHIO(); + return hio.m_prevent_scene_switch; +} + +s32 event_debug_evdt_sound_adjust() { + dEvM_HIO_c& hio = dComIfGp_getEventManager().getEventHIO(); + return hio.m_corrective_sound_adjustment; +} +#endif + /* 80043A14-80043D60 03E354 034C+00 1/1 0/0 0/0 .text dEvDt_Next_Stage__Fii */ -static int dEvDt_Next_Stage(int index, int wipe_type) { +static int dEvDt_Next_Stage(int i_staffId, int i_wipe) { char* stage; - s16 point; + s16 start; int mode; - s8 roomNo; + s8 room; s8 layer; - s8 wipe; - s32 noVisit; - s32 wipe_time; - f32 hour; - f32 speed; + mode = 0; - wipe = wipe_type; - noVisit = true; - wipe_time = 0; - hour = 0; - bool setHour = false; - speed = 0; - int* p_id = dComIfGp_evmng_getMyIntegerP(index, "ID"); - if (p_id != NULL) { - int id = *p_id; + s8 wipe = i_wipe; + BOOL noVisit = true; + int wipe_time = 0; + f32 hour = 0.0f; + bool do_set_nexttime = false; + f32 speed = 0.0f; + + char* sdata; + f32* fdata; + int* idata; + + idata = dComIfGp_evmng_getMyIntegerP(i_staffId, "ID"); + if (idata != NULL) { + int id = *idata; s8 room_no = dComIfGp_roomControl_getStayNo(); - stage_scls_info_dummy_class* info; + stage_scls_info_dummy_class* info; if (room_no == -1) { info = dComIfGp_getStageSclsInfo(); } else { - info = dComIfGp_roomControl_getStatusRoomDt(room_no)->getSclsInfo(); + JUT_ASSERT(297, 0 <= room_no && room_no < 64); + dStage_roomDt_c* roomdt = dComIfGp_roomControl_getStatusRoomDt(room_no); + info = roomdt->getSclsInfo(); } if (info != NULL && id >= 0 && id < info->num) { - stage_scls_info_class* stgInfo = &info->m_entries[id]; - stage = stgInfo->mStage; - point = stgInfo->mStart; - roomNo = (s8)stgInfo->mRoom; - layer = dStage_sclsInfo_getSceneLayer(stgInfo); - wipe = dStage_sclsInfo_getWipe(stgInfo); - wipe_time = dStage_sclsInfo_getWipeTime(stgInfo); + stage_scls_info_class* scls_p = &info->m_entries[id]; + stage = scls_p->mStage; + start = scls_p->mStart; + room = (s8)scls_p->mRoom; + layer = dStage_sclsInfo_getSceneLayer(scls_p); + wipe = dStage_sclsInfo_getWipe(scls_p); + wipe_time = dStage_sclsInfo_getWipeTime(scls_p); if (wipe == 15) { wipe = 0; } - int timeH = dStage_sclsInfo_getTimeH(stgInfo); + int timeH = dStage_sclsInfo_getTimeH(scls_p); if (timeH >= 0 && timeH <= 23) { - setHour = true; + do_set_nexttime = true; hour = timeH; } + } else { + // "Couldn't get Scene info(%d)!!" + OS_REPORT("\x1b[43;30mシーン情報がとれない(%d)!!\n\x1b[m", id); } } - char* stageP = dComIfGp_evmng_getMyStringP(index, "Stage"); - if (stageP != NULL) { - stage = stageP; + sdata = dComIfGp_evmng_getMyStringP(i_staffId, "Stage"); + if (sdata != NULL) { + stage = sdata; } - int* pointP = dComIfGp_evmng_getMyIntegerP(index, "StartCode"); - if (pointP != NULL) { - point = *pointP; + idata = dComIfGp_evmng_getMyIntegerP(i_staffId, "StartCode"); + if (idata != NULL) { + start = *idata; } - int* roomP = dComIfGp_evmng_getMyIntegerP(index, "RoomNo"); - if (roomP != NULL) { - roomNo = (s8)*roomP; + idata = dComIfGp_evmng_getMyIntegerP(i_staffId, "RoomNo"); + if (idata != NULL) { + room = (s8)*idata; } - int* layerP = dComIfGp_evmng_getMyIntegerP(index, "Layer"); - if (layerP != NULL) { - layer = *layerP; + idata = dComIfGp_evmng_getMyIntegerP(i_staffId, "Layer"); + if (idata != NULL) { + layer = *idata; } - int* wipeP = dComIfGp_evmng_getMyIntegerP(index, "Wipe"); - if (wipeP != NULL) { - wipe = *wipeP; + idata = dComIfGp_evmng_getMyIntegerP(i_staffId, "Wipe"); + if (idata != NULL) { + wipe = *idata; } - int* modeP = dComIfGp_evmng_getMyIntegerP(index, "Mode"); - if (modeP != NULL) { - mode = *modeP; + idata = dComIfGp_evmng_getMyIntegerP(i_staffId, "Mode"); + if (idata != NULL) { + mode = *idata; } - f32* speedP = dComIfGp_evmng_getMyFloatP(index, "Speed"); - if (speedP != NULL) { - speed = *speedP; + fdata = dComIfGp_evmng_getMyFloatP(i_staffId, "Speed"); + if (fdata != NULL) { + speed = *fdata; } - f32* hourP = dComIfGp_evmng_getMyFloatP(index, "Hour"); - if (hourP != NULL) { - hour = *hourP; - setHour = true; + fdata = dComIfGp_evmng_getMyFloatP(i_staffId, "Hour"); + if (fdata != NULL) { + hour = *fdata; + do_set_nexttime = true; } - int* noVisitP = dComIfGp_evmng_getMyIntegerP(index, "NoVisit"); - if (noVisitP != NULL) { + idata = dComIfGp_evmng_getMyIntegerP(i_staffId, "NoVisit"); + if (idata != NULL) { noVisit = false; } - if (stage != NULL && point != -1) { - if (setHour) { + #if DEBUG + if (event_debug_evdt_reg1()) { + // "Cancelled for debug!!" + OS_REPORT("デバックのためキャンセル!!\n"); + return 1; + } + #endif + + if (stage != NULL && start != -1) { + if (do_set_nexttime) { dKy_set_nexttime(15.0f * hour); } - dComIfGp_setNextStage(stage, point, roomNo, layer, speed, mode, 1, wipe, 0, noVisit, - wipe_time); + + dComIfGp_setNextStage(stage, start, room, layer, speed, mode, 1, wipe, 0, noVisit, wipe_time); + + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("!!\n!!\n"); + OS_REPORT("\x1b[46;30m%06d: event: scene change: \n stage %s start %d room %d layer %d wipe %d\n\x1b[m", + g_Counter.mCounter0, stage, start, room, layer, wipe); + OS_REPORT("!!\n!!\n"); + } + #endif + } else { + // "Scene transition data is not complete!!" + OS_REPORT_ERROR("シーン切り替えのデータ指定が足りない!!\n"); + JUT_ASSERT(379, 0); } + return 1; } @@ -233,12 +327,12 @@ static int dEvDt_Next_Stage(int index, int wipe_type) { BOOL dEvDtFlag_c::flagCheck(int flag) { if (flagMaxCheck(flag)) { return FALSE; + } + + if (mFlags[(u32)(flag & ~0x1F) / 32] & (1 << (flag & 0x1F))) { + return TRUE; } else { - if (mFlags[(u32)flag / 0x20] & (1 << (flag & 0x1F))) { - return TRUE; - } else { - return FALSE; - } + return FALSE; } } @@ -246,82 +340,91 @@ BOOL dEvDtFlag_c::flagCheck(int flag) { BOOL dEvDtFlag_c::flagSet(int flag) { if (flagMaxCheck(flag)) { return FALSE; - } else { - mFlags[(u32)flag / 0x20] |= (1 << (flag & 0x1F)); - return TRUE; } + + mFlags[(u32)(flag & ~0x1F) / 32] |= (1 << (flag & 0x1F)); + return TRUE; } -BOOL dEvDtFlag_c::flagMaxCheck(int flag) { - if (flag == -1) { +BOOL dEvDtFlag_c::flagMaxCheck(int i_flag) { + int flag_id = i_flag; + if (flag_id == -1) { return TRUE; } - if (FlagMax <= flag) { + if (flag_id >= FlagMax) { + JUT_ASSERT(445, flag_id < FlagMax); return TRUE; - } else { - return FALSE; } + + return FALSE; } void dEvDtFlag_c::init() { - for (int i = 0; i < 320; i++) { + int i; + for (i = 0; i < ARRAY_SIZEU(mFlags); i++) { mFlags[i] = 0; } } /* 80043E78-80043EFC 03E7B8 0084+00 0/0 1/1 0/0 .text finishCheck__12dEvDtEvent_cFv */ int dEvDtEvent_c::finishCheck() { - for (int i = 0; i < 3; i++) { - int tmp = field_0x88[i]; - if (tmp == -1) { + int i; + for (i = 0; i < 3; i++) { + if (mFlags[i] == -1) { return 1; } - if (!dComIfGp_getEventManager().flagCheck(tmp)) { + if (!dEvDtFlagCheck(mFlags[i])) { return 0; } } + return 1; } /* 80043EFC-80043F70 03E83C 0074+00 0/0 1/1 0/0 .text forceFinish__12dEvDtEvent_cFv */ int dEvDtEvent_c::forceFinish() { - for (int i = 0; i < 3; i++) { - int flag = field_0x88[i]; - if (flag == -1) { + int i; + for (i = 0; i < 3; i++) { + if (mFlags[i] == -1) { return 1; } - dComIfGp_getEventManager().setFlag(flag); + dEvDtFlagSet(mFlags[i]); } + return 1; } /* 80043F70-80043FD8 03E8B0 0068+00 0/0 1/1 0/0 .text * specialStaffProc__12dEvDtEvent_cFP12dEvDtStaff_c */ -void dEvDtEvent_c::specialStaffProc(dEvDtStaff_c* p_staff) { - for (int i = 0; i < mNStaff; i++) { - p_staff[mStaff[i]].specialProc(); +void dEvDtEvent_c::specialStaffProc(dEvDtStaff_c* i_staffList) { + int i; + dEvDtStaff_c* staff; + + for (i = 0; i < mNStaff; i++) { + staff = &i_staffList[getStaff(i)]; + staff->specialProc(); } } /* 80043FD8-8004403C 03E918 0064+00 4/4 0/0 0/0 .text specialProc_WaitStart__12dEvDtStaff_cFi */ -void dEvDtStaff_c::specialProc_WaitStart(int index) { - int* timer = dComIfGp_evmng_getMyIntegerP(index, "Timer"); - if (timer == NULL) { +void dEvDtStaff_c::specialProc_WaitStart(int i_staffId) { + int* idata = dComIfGp_evmng_getMyIntegerP(i_staffId, "Timer"); + if (idata == NULL) { mWaitTimer = 0; } else { - mWaitTimer = *timer; + mWaitTimer = *idata; } } /* 8004403C-80044080 03E97C 0044+00 4/4 0/0 0/0 .text specialProc_WaitProc__12dEvDtStaff_cFi */ -void dEvDtStaff_c::specialProc_WaitProc(int param_0) { +void dEvDtStaff_c::specialProc_WaitProc(int i_staffId) { if (mWaitTimer > 0) { mWaitTimer--; } else { - dComIfGp_evmng_cutEnd(param_0); + dComIfGp_evmng_cutEnd(i_staffId); } } @@ -363,16 +466,27 @@ void dEvDtStaff_c::specialProc() { void dEvDtStaff_c::init() { mCurrentCut = mStartCut; field_0x40 = true; + + #if DEBUG + if (event_debug_evdt()) { + dEvDtCut_c* cut = dComIfGp_getEventManager().getBase().getCutP(mCurrentCut); + OS_REPORT("\x1b[32m%06d: event: cut: START %s::%s[%d]\n\x1b[m", g_Counter.mCounter0, getName(), cut->getName(), cut->getTagId()); + } + #endif + field_0x41 = false; field_0x3c = -1; - if (mType == TYPE_CAMERA) { + + switch (mType) { + case TYPE_CAMERA: dComIfGp_getEventManager().setCameraPlay(1); + break; } } /* 80044170-80044190 03EAB0 0020+00 1/1 0/0 0/0 .text advanceCut__12dEvDtStaff_cFi */ -void dEvDtStaff_c::advanceCut(int cut) { - mCurrentCut = cut; +void dEvDtStaff_c::advanceCut(int i_cut) { + mCurrentCut = i_cut; field_0x40 = true; field_0x41 = false; field_0x3c = -1; @@ -381,56 +495,71 @@ void dEvDtStaff_c::advanceCut(int cut) { /* 80044190-80044324 03EAD0 0194+00 1/1 0/0 0/0 .text specialProcLight__12dEvDtStaff_cFv */ void dEvDtStaff_c::specialProcLight() { + u8* data = mData; + int staffId = dComIfGp_evmng_getMyStaffId("LIGHT", NULL, 0); - if (staffId != -1) { - char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId); + if (staffId == -1) { + JUT_ASSERT(663, 0); + return; + } + + f32* fdata; + char* nowCutName; + int* idata; - if (dComIfGp_evmng_getIsAddvance(staffId)) { - f32* hourP; + char* var_r27 = dComIfGp_getEventManager().getMyNowCutName(staffId); + nowCutName = var_r27; - switch (*(int*)nowCutName) { - case 'CHAN': { - hourP = dComIfGp_evmng_getMyFloatP(staffId, "Hour"); - if (hourP != NULL) { - dKy_instant_timechg(*hourP * 15.0f); - } - - int* weatherP = dComIfGp_evmng_getMyIntegerP(staffId, "Weather"); - if (weatherP != NULL) { - switch (*weatherP) { - case 0: - dKy_instant_rainchg(); - } - } - break; + f32 time; + if (dComIfGp_evmng_getIsAddvance(staffId)) { + switch (*(int*)nowCutName) { + case 'CHAN': + fdata = dComIfGp_evmng_getMyFloatP(staffId, "Hour"); + if (fdata != NULL) { + dKy_instant_timechg(*fdata * 15.0f); } - case 'ADD_': - hourP = dComIfGp_evmng_getMyFloatP(staffId, "Hour"); - if (hourP != NULL) { - f32 hours = dComIfGs_getTime() * (1.0f / 15.0f); - hours += *hourP; - while (hours >= 24.0) { - hours -= 24.0; - } - dKy_instant_timechg(hours * 15.0f); + + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Weather"); + if (idata != NULL) { + switch (*idata) { + case 0: + dKy_instant_rainchg(); } - break; + } + break; + case 'ADD_': + fdata = dComIfGp_evmng_getMyFloatP(staffId, "Hour"); + if (fdata != NULL) { + time = dComIfGs_getTime() * (1.0f / 15.0f); + time += *fdata; + while (time >= 24.0) { + time -= 24.0; + } + dKy_instant_timechg(time * 15.0f); } } - dComIfGp_evmng_cutEnd(staffId); } + + dComIfGp_evmng_cutEnd(staffId); } /* 80044324-80044A58 03EC64 0734+00 1/1 0/0 0/0 .text specialProcMessage__12dEvDtStaff_cFv */ void dEvDtStaff_c::specialProcMessage() { MessageData* data = (MessageData*)&mData; - StaffWork* work = &mWork; + StaffWork* wk = (StaffWork*)&mWork; + int staffId = dComIfGp_evmng_getMyStaffId("MESSAGE", NULL, 0); if (staffId == -1) { + JUT_ASSERT(741, 0); return; } - char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId); + int* idata; + char* sdata; + + char* spC = dComIfGp_getEventManager().getMyNowCutName(staffId); + char* nowCutName = spC; + if (dComIfGp_evmng_getIsAddvance(staffId)) { switch (*(int*)nowCutName) { case 'WAIT': @@ -438,63 +567,71 @@ void dEvDtStaff_c::specialProcMessage() { break; case 'CREA': case 'SHOW': - work->_0 = UINT_MAX; - work->mLMsg = NULL; - work->mMsgSubstanceNum = dComIfGp_evmng_getMySubstanceNum(staffId, "msgNo"); - work->mMsgSubstanceP = dComIfGp_evmng_getMyIntegerP(staffId, "msgNo"); - if (work->mMsgSubstanceNum < 1) { - work->mMsgSubstanceNum = dComIfGp_evmng_getMySubstanceNum(staffId, "No"); - work->mMsgSubstanceP = dComIfGp_evmng_getMyIntegerP(staffId, "No"); + wk->l_msgId = fpcM_ERROR_PROCESS_ID_e; + wk->l_msg = NULL; + + wk->msgs.n = dComIfGp_evmng_getMySubstanceNum(staffId, "msgNo"); + wk->msgs.d = dComIfGp_evmng_getMyIntegerP(staffId, "msgNo"); + if (wk->msgs.n < 1) { + wk->msgs.n = dComIfGp_evmng_getMySubstanceNum(staffId, "No"); + wk->msgs.d = dComIfGp_evmng_getMyIntegerP(staffId, "No"); } - work->mMsgNo = *work->mMsgSubstanceP; + + JUT_ASSERT(764, wk->msgs.d); + + wk->l_msgNo = *wk->msgs.d; data->unk = 0; break; case 'END\0': case 'FINI': - work->mLMsg->mode = 0x10; + JUT_ASSERT(770, wk->l_msg); + wk->l_msg->mode = fopMsg_MODE_MSG_END_e; break; - case 'CONT': { - work->mLMsg->mode = 0xF; - int* ptr = dComIfGp_evmng_getMyIntegerP(staffId, "msgNo"); - if (ptr == NULL) { - ptr = dComIfGp_evmng_getMyIntegerP(staffId, "No"); - } - work->mMsgNo = *ptr; - fopMsgM_messageSet(work->mMsgNo, 1000); - break; - } - case 'SAVE': { - work->mMsgNo = 1; - int* typeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); - if (typeP != NULL && *typeP == 1) { - work->mMsgNo = 2; - } - work->_0 = d_GameOver_Create(work->mMsgNo); - break; - } - case 'TELO': { - int* forStartP = dComIfGp_evmng_getMyIntegerP(staffId, "ForStart"); + case 'CONT': + JUT_ASSERT(774, wk->l_msg); + wk->l_msg->mode = fopMsg_MODE_MSG_CONTINUE_e; - if (forStartP != NULL && *forStartP != 0) { - work->mMsgNo = getStartTelopNo(); + idata = dComIfGp_evmng_getMyIntegerP(staffId, "msgNo"); + if (idata == NULL) { + idata = dComIfGp_evmng_getMyIntegerP(staffId, "No"); + } + + JUT_ASSERT(778, idata); + wk->l_msgNo = *idata; + fopMsgM_messageSet(wk->l_msgNo, 1000); + break; + case 'SAVE': + wk->l_msgNo = 1; + + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); + if (idata != NULL && *idata == 1) { + wk->l_msgNo = 2; + } + + wk->l_msgId = d_GameOver_Create(wk->l_msgNo); + break; + case 'TELO': + idata = dComIfGp_evmng_getMyIntegerP(staffId, "ForStart"); + + if (idata != NULL && *idata != 0) { + wk->l_msgNo = getStartTelopNo(); } else { - char* stageP = dComIfGp_evmng_getMyStringP(staffId, "Stage"); - int* noP = dComIfGp_evmng_getMyIntegerP(staffId, "No"); - if (noP != NULL) { - work->mMsgNo = *noP; - } else if (stageP != NULL) { - work->mMsgNo = getTelopNo(stageP); + sdata = dComIfGp_evmng_getMyStringP(staffId, "Stage"); + idata = dComIfGp_evmng_getMyIntegerP(staffId, "No"); + if (idata != NULL) { + wk->l_msgNo = *idata; + } else if (sdata != NULL) { + wk->l_msgNo = getTelopNo(sdata); } else { - work->mMsgNo = getTelopNo(); + wk->l_msgNo = getTelopNo(); } } data->unk = 0; - if (work->mMsgNo != 0xFFFF) { - work->_0 = fopMsgM_messageSetDemo(work->mMsgNo); + if (wk->l_msgNo != 0xFFFF) { + wk->l_msgId = fopMsgM_messageSetDemo(wk->l_msgNo); } } - } } switch (*(int*)nowCutName) { @@ -504,14 +641,14 @@ void dEvDtStaff_c::specialProcMessage() { case 'CREA': switch (data->unk) { case 0: - work->_0 = fopMsgM_messageSet(work->mMsgNo, 1000); - if (work->_0 != UINT_MAX) { + wk->l_msgId = fopMsgM_messageSet(wk->l_msgNo, 1000); + if (wk->l_msgId != fpcM_ERROR_PROCESS_ID_e) { data->unk++; } break; case 1: - work->mLMsg = fopMsgM_SearchByID(work->_0); - if (work->mLMsg != NULL) { + wk->l_msg = fopMsgM_SearchByID(wk->l_msgId); + if (wk->l_msg != NULL) { data->unk++; } break; @@ -521,7 +658,8 @@ void dEvDtStaff_c::specialProcMessage() { } break; case 'PUSH': - if (work->mLMsg->mode == 0xE) { + JUT_ASSERT(846, wk->l_msg); + if (wk->l_msg->mode == fopMsg_MODE_MSG_DISPLAYED_e) { dComIfGp_evmng_cutEnd(staffId); } break; @@ -531,33 +669,34 @@ void dEvDtStaff_c::specialProcMessage() { case 'SHOW': switch (data->unk) { case 0: - work->_0 = fopMsgM_messageSet(work->mMsgNo, 1000); - if (work->_0 != UINT_MAX) { + wk->l_msgId = fopMsgM_messageSet(wk->l_msgNo, 1000); + if (wk->l_msgId != fpcM_ERROR_PROCESS_ID_e) { data->unk = 1; } else { break; } case 1: - work->mLMsg = fopMsgM_SearchByID(work->_0); - if (work->mLMsg == NULL) { + wk->l_msg = fopMsgM_SearchByID(wk->l_msgId); + if (wk->l_msg == NULL) { break; } - switch (work->mLMsg->mode) { - case 0xE: - work->mLMsg->mode = 0x10; + switch (wk->l_msg->mode) { + case fopMsg_MODE_MSG_DISPLAYED_e: + wk->l_msg->mode = fopMsg_MODE_MSG_END_e; break; - case 0x11: + case fopMsg_MODE_BOX_CLOSING_e: break; - case 0x12: - work->mLMsg->mode = 0x13; - work->_0 = UINT_MAX; - work->mLMsg = NULL; - work->mMsgSubstanceNum--; - if (work->mMsgSubstanceNum != 0) { + case fopMsg_MODE_BOX_CLOSED_e: + wk->l_msg->mode = fopMsg_MODE_MSG_DESTROYED_e; + wk->l_msgId = fpcM_ERROR_PROCESS_ID_e; + wk->l_msg = NULL; + + wk->msgs.n--; + if (wk->msgs.n != 0) { data->unk = 0; - work->mMsgSubstanceP++; - work->mMsgNo = *work->mMsgSubstanceP; + wk->msgs.d++; + wk->l_msgNo = *wk->msgs.d; } else { dComIfGp_evmng_cutEnd(staffId); data->unk = 99; @@ -574,12 +713,12 @@ void dEvDtStaff_c::specialProcMessage() { break; case 'DELE': case 'FINI': - if (work->mLMsg == NULL) { + if (wk->l_msg == NULL) { dComIfGp_evmng_cutEnd(staffId); - } else if (work->mLMsg->mode == 0x12) { - work->mLMsg->mode = 0x13; - work->_0 = UINT_MAX; - work->mLMsg = NULL; + } else if (wk->l_msg->mode == fopMsg_MODE_BOX_CLOSED_e) { + wk->l_msg->mode = fopMsg_MODE_MSG_DESTROYED_e; + wk->l_msgId = fpcM_ERROR_PROCESS_ID_e; + wk->l_msg = NULL; dComIfGp_evmng_cutEnd(staffId); } break; @@ -587,17 +726,17 @@ void dEvDtStaff_c::specialProcMessage() { dComIfGp_evmng_cutEnd(staffId); break; case 'END\0': - switch (work->mLMsg->mode) { - case 0x11: - case 0x12: + switch (wk->l_msg->mode) { + case fopMsg_MODE_BOX_CLOSING_e: + case fopMsg_MODE_BOX_CLOSED_e: dComIfGp_evmng_cutEnd(staffId); break; } break; case 'SAVE': - if (d_GameOver_CheckDelete(work->_0) && dComIfGp_getGameoverStatus() == 1) { + if (d_GameOver_CheckDelete(wk->l_msgId) && dComIfGp_getGameoverStatus() == 1) { dComIfGp_evmng_cutEnd(staffId); - d_GameOver_Delete(work->_0); + d_GameOver_Delete(wk->l_msgId); } break; default: @@ -613,10 +752,15 @@ void dEvDtStaff_c::specialProcSound() { int staffId = dComIfGp_evmng_getMyStaffId("SOUND", NULL, 0); if (staffId == -1) { + JUT_ASSERT(960, 0); return; } - char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId); + int* idata; + + char* var_r26 = dComIfGp_getEventManager().getMyNowCutName(staffId); + char* nowCutName = var_r26; + if (dComIfGp_evmng_getIsAddvance(staffId)) { switch (*(int*)nowCutName) { case 'WAIT': @@ -624,26 +768,38 @@ void dEvDtStaff_c::specialProcSound() { break; case 'STRM': mDoAud_bgmStreamPlay(); + + #if DEBUG + if (event_debug_evdt()) { + // "d_event_data:: bgmStreamPlay called!!" + OS_REPORT("d_event_data:: bgmStreamPlay を呼んだ!!\n"); + } + #endif break; case 'NOMS': specialProc_WaitStart(staffId); + + #if DEBUG + if (event_debug_evdt()) { + // "SOUND wait %d" + OS_REPORT("SOUND 待ち %d \n", data->timer); + } + #endif break; - case 'RIDD': { - int* typeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); - if (typeP != NULL && *typeP == 1) { + case 'RIDD': + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); + if (idata != NULL && *idata == 1) { mDoAud_seStart(Z2SE_READ_RIDDLE_A, NULL, 0, 0); } else { mDoAud_seStart(Z2SE_READ_RIDDLE_B, NULL, 0, 0); } break; - } - case 'BGMS': { - int* timerP = dComIfGp_evmng_getMyIntegerP(staffId, "Timer"); - if (timerP != NULL) { - mDoAud_bgmStop(*timerP); + case 'BGMS': + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Timer"); + if (idata != NULL) { + mDoAud_bgmStop(*idata); } } - } } switch (*(int*)nowCutName) { @@ -663,58 +819,69 @@ void dEvDtStaff_c::specialProcSound() { /* 80044CB8-80044EE4 03F5F8 022C+00 1/1 0/0 0/0 .text specialProcCreate__12dEvDtStaff_cFv */ void dEvDtStaff_c::specialProcCreate() { + u8* data = mData; + char* name; + int* idata; + cXyz* xyzdata; + u32 arg; cXyz pos; csXyz angle; cXyz scale; - dStage_objectNameInf* objNameInf; + dStage_objectNameInf* objectName; int staffId = dComIfGp_evmng_getMyStaffId("CREATER", NULL, 0); if (staffId == -1) { + JUT_ASSERT(1055, 0); return; } - char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId); + char* sp14 = dComIfGp_getEventManager().getMyNowCutName(staffId); + char* nowCutName = sp14; + if (dComIfGp_evmng_getIsAddvance(staffId)) { switch (*(int*)nowCutName) { case 'WAIT': break; case 'CREA': name = dComIfGp_evmng_getMyStringP(staffId, "MAKECAST"); - objNameInf = dStage_searchName(name); + JUT_ASSERT(1071, name); - int* argP = dComIfGp_evmng_getMyIntegerP(staffId, "ARG"); - if (argP == NULL) { - arg = UINT_MAX; + objectName = dStage_searchName(name); + JUT_ASSERT(1073, objectName); + + idata = dComIfGp_evmng_getMyIntegerP(staffId, "ARG"); + if (idata == NULL) { + arg = 0xFFFFFFFF; } else { - arg = *argP; + arg = *idata; } - cXyz* posP = dComIfGp_evmng_getMyXyzP(staffId, "POS"); - if (posP == NULL) { + xyzdata = dComIfGp_evmng_getMyXyzP(staffId, "POS"); + if (xyzdata == NULL) { fopAc_ac_c* player_p = dComIfGp_getPlayer(0); pos = player_p->current.pos; } else { - pos = *posP; + pos = *xyzdata; } - int* angleP = dComIfGp_evmng_getMyIntegerP(staffId, "ANGLE"); - if (angleP == NULL) { + idata = dComIfGp_evmng_getMyIntegerP(staffId, "ANGLE"); + if (idata == NULL) { angle.setall(0); } else { - angle.set(angleP[0], angleP[1], angleP[2]); + angle.set(idata[0], idata[1], idata[2]); } - cXyz* scaleP = dComIfGp_evmng_getMyXyzP(staffId, "SCALE"); - if (scaleP == NULL) { + xyzdata = dComIfGp_evmng_getMyXyzP(staffId, "SCALE"); + if (xyzdata == NULL) { scale.setall(1.0f); } else { - scale = *scaleP; + scale = *xyzdata; } - fopAcM_create(objNameInf->procname, arg, &pos, dComIfGp_roomControl_getStayNo(), - &angle, &scale, objNameInf->argument); + fopAcM_create(objectName->procname, arg, &pos, dComIfGp_roomControl_getStayNo(), + &angle, &scale, objectName->argument); break; } } @@ -723,52 +890,102 @@ void dEvDtStaff_c::specialProcCreate() { /* 80044EE4-80045878 03F824 0994+00 1/1 0/0 0/0 .text specialProcDirector__12dEvDtStaff_cFv */ void dEvDtStaff_c::specialProcDirector() { DirectorData* data = (DirectorData*)mData; + int* idata; + int* idata2; + f32* rate; + daPy_py_c* player = dComIfGp_getLinkPlayer(); dEvt_control_c& evtControl = dComIfGp_getEvent(); + GXColor color; int staffId = dComIfGp_evmng_getMyStaffId("DIRECTOR", NULL, 0); if (staffId == -1) { + JUT_ASSERT(1146, 0); return; } - char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId); + char* sp2C = dComIfGp_getEventManager().getMyNowCutName(staffId); + char* nowCutName = sp2C; + if (dComIfGp_evmng_getIsAddvance(staffId)) { - int* eventFlagP = dComIfGp_evmng_getMyIntegerP(staffId, "EventFlag"); - if (eventFlagP != NULL) { - dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[*eventFlagP]); + int* idata_flag = dComIfGp_evmng_getMyIntegerP(staffId, "EventFlag"); + if (idata_flag != NULL) { + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: derector: event flag %d\n", g_Counter.mCounter0, *idata_flag); + } + #endif + + dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[*idata_flag]); } - int* eventFlagOffP = dComIfGp_evmng_getMyIntegerP(staffId, "EventFlagOff"); - if (eventFlagOffP != NULL) { - dComIfGs_offEventBit(dSv_event_flag_c::saveBitLabels[*eventFlagOffP]); + idata_flag = dComIfGp_evmng_getMyIntegerP(staffId, "EventFlagOff"); + if (idata_flag != NULL) { + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: derector: event flag off %d\n", g_Counter.mCounter0, *idata_flag); + } + #endif + + dComIfGs_offEventBit(dSv_event_flag_c::saveBitLabels[*idata_flag]); } - int* switchTableP = dComIfGp_evmng_getMyIntegerP(staffId, "SwitchTable"); + idata_flag = dComIfGp_evmng_getMyIntegerP(staffId, "SwitchTable"); int switchTable; - if (switchTableP != NULL) { - switchTable = *switchTableP; + if (idata_flag != NULL) { + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: derector: switchbit table %d\n", g_Counter.mCounter0, *idata_flag); + } + #endif + + switchTable = *idata_flag; } else { switchTable = dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()); } - int* switchBitP = dComIfGp_evmng_getMyIntegerP(staffId, "SwitchBit"); - if (switchBitP != NULL) { - dComIfGs_onStageSwitch(switchTable, *switchBitP); + idata_flag = dComIfGp_evmng_getMyIntegerP(staffId, "SwitchBit"); + if (idata_flag != NULL) { + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: derector: switchbit on %d\n", g_Counter.mCounter0, *idata_flag); + } + #endif + + dComIfGs_onStageSwitch(switchTable, *idata_flag); } - int* switchOffP = dComIfGp_evmng_getMyIntegerP(staffId, "SwitchOff"); - if (switchOffP != NULL) { - dComIfGs_offStageSwitch(switchTable, *switchOffP); + idata_flag = dComIfGp_evmng_getMyIntegerP(staffId, "SwitchOff"); + if (idata_flag != NULL) { + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: derector: switchbit off %d\n", g_Counter.mCounter0, *idata_flag); + } + #endif + + dComIfGs_offStageSwitch(switchTable, *idata_flag); } - int* tmpBitP = dComIfGp_evmng_getMyIntegerP(staffId, "TmpBit"); - if (tmpBitP != NULL) { - dComIfGs_onTmpBit(dSv_event_tmp_flag_c::tempBitLabels[*tmpBitP]); + idata_flag = dComIfGp_evmng_getMyIntegerP(staffId, "TmpBit"); + if (idata_flag != NULL) { + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: derector: temporary bit on %d\n", g_Counter.mCounter0, *idata_flag); + } + #endif + + dComIfGs_onTmpBit(dSv_event_tmp_flag_c::tempBitLabels[*idata_flag]); } - int* tmpOffP = dComIfGp_evmng_getMyIntegerP(staffId, "TmpBitOff"); - if (tmpOffP != NULL) { - dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[*tmpOffP]); + idata_flag = dComIfGp_evmng_getMyIntegerP(staffId, "TmpBitOff"); + if (idata_flag != NULL) { + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: derector: temporary bit off %d\n", g_Counter.mCounter0, *idata_flag); + } + #endif + + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[*idata_flag]); } switch (*(int*)nowCutName) { @@ -776,18 +993,17 @@ void dEvDtStaff_c::specialProcDirector() { specialProc_WaitStart(staffId); break; case 'PLAY': - if (strcmp(nowCutName, "PLAYER_NODRAW") == 0) { + if (strcmp(sp2C, "PLAYER_NODRAW") == 0) { player->onPlayerNoDraw(); - } else if (strcmp(nowCutName, "PLAYER_DRAW") == 0) { + } else if (strcmp(sp2C, "PLAYER_DRAW") == 0) { player->offPlayerNoDraw(); } break; case 'NEXT': - dEvDt_Next_Stage(staffId, 0xD); + dEvDt_Next_Stage(staffId, 13); break; case 'SKIP': { char* zev = dComIfGp_evmng_getMyStringP(staffId, "Zev"); - // cast needed to match void* pt = (void*)evtControl.getPt1(); if (NULL == pt) { pt = evtControl.getPt2(); @@ -800,108 +1016,156 @@ void dEvDtStaff_c::specialProcDirector() { } break; } - case 'FADE': { - f32* rateP = dComIfGp_evmng_getMyFloatP(staffId, "Rate"); - int* colorP = dComIfGp_evmng_getMyIntegerP(staffId, "Color"); + case 'FADE': + rate = dComIfGp_evmng_getMyFloatP(staffId, "Rate"); + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Color"); - if (*rateP > 0) { + JUT_ASSERT(1261, rate); + + if (*rate > 0) { mDoGph_gInf_c::setFadeRate(0); } - if (colorP != NULL) { - GXColor color; - color.r = colorP[0]; - color.g = colorP[1]; - color.b = colorP[2]; - color.a = colorP[3]; - mDoGph_gInf_c::fadeOut(*rateP, color); + + if (idata != NULL) { + color.r = idata[0]; + color.g = idata[1]; + color.b = idata[2]; + color.a = idata[3]; + mDoGph_gInf_c::fadeOut(*rate, color); + + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: derector: fade %f (%d %d %d %d)!!\n", g_Counter.mCounter0, *rate, color.r, color.g, color.b, color.a); + } + #endif + break; } else { - mDoGph_gInf_c::fadeOut(*rateP); + mDoGph_gInf_c::fadeOut(*rate); + + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: derector: fade %f!!\n", g_Counter.mCounter0, *rate); + } + #endif } break; - } - case 'VIBR': { + case 'VIBR': specialProc_WaitStart(staffId); - int* patternP = dComIfGp_evmng_getMyIntegerP(staffId, "Pattern"); - int* typeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); - dComIfGp_getVibration().StartQuake((u8*)patternP, 0, *typeP, cXyz(0, 1, 0)); + if (data->unk2 == 0) { + JUT_ASSERT(1291, 0); + } + + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Pattern"); + idata2 = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); + + if (idata == NULL || idata2 == NULL) { + JUT_ASSERT(1295, 0); + } + + dComIfGp_getVibration().StartQuake((u8*)idata, 0, *idata2, cXyz(0.0f, 1.0f, 0.0f)); break; - } - case 'WIPE': { - f32* wipeRateP = dComIfGp_evmng_getMyFloatP(staffId, "Rate"); - dDlst_list_c::wipeIn(-*wipeRateP); - if (*wipeRateP > 0) { + case 'WIPE': + rate = dComIfGp_evmng_getMyFloatP(staffId, "Rate"); + JUT_ASSERT(1302, rate); + + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: derector: wipe %f!!\n", g_Counter.mCounter0, *rate); + } + #endif + + dDlst_list_c::wipeOut(*rate); + if (*rate > 0) { data->unk = 0; } else { data->unk = 1; } - int* soundP = dComIfGp_evmng_getMyIntegerP(staffId, "SOUND"); - if (soundP != NULL) { - switch (*soundP) { + idata2 = dComIfGp_evmng_getMyIntegerP(staffId, "SOUND"); + if (idata2 != NULL) { + switch (*idata2) { case 0: mDoAud_seStart(Z2SE_SY_DUMMY, NULL, 0, 0); } } break; - } case 'MAPT': { int* idP = dComIfGp_evmng_getMyIntegerP(staffId, "ID"); data->unk = *idP; + dStage_MapEvent_dt_c* mapEvent = dEvt_control_c::searchMapEventData(data->unk); if (mapEvent != NULL) { - if (mapEvent->mType == 0) { - data->unk2 = mapEvent->field_0x14; + if (mapEvent->type == dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA) { + data->unk2 = mapEvent->data.maptool.field_0x14; } else { data->unk2 = -1; } + + #if DEBUG + data->unk2 += (s16)event_debug_evdt_sound_adjust(); + #endif } else { data->unk2 = 0; } break; } case 'CAST': { - char* pt2Name = dComIfGp_evmng_getMyStringP(staffId, "Pt2"); - if (pt2Name != NULL) { - fopAc_ac_c* pt2 = fopAcM_searchFromName4Event(pt2Name, -1); - if (pt2 != NULL) { - evtControl.setPt2(pt2); + char* sdata = dComIfGp_evmng_getMyStringP(staffId, "Pt2"); + fopAc_ac_c* evt_actor_p; + if (sdata != NULL) { + evt_actor_p = fopAcM_searchFromName4Event(sdata, -1); + if (evt_actor_p != NULL) { + evtControl.setPt2(evt_actor_p); + OS_REPORT("%06d: event: derector: set %s as Pt2!\n", g_Counter.mCounter0, sdata); + } else { + OS_REPORT("%06d: event: derector: casting: %s not found!\n", g_Counter.mCounter0, sdata); } } - char* ptTName = dComIfGp_evmng_getMyStringP(staffId, "PtT"); - if (ptTName != NULL) { - fopAc_ac_c* ptT = fopAcM_searchFromName4Event(ptTName, -1); - if (ptT != NULL) { - evtControl.setPtT(ptT); + sdata = dComIfGp_evmng_getMyStringP(staffId, "PtT"); + if (sdata != NULL) { + evt_actor_p = fopAcM_searchFromName4Event(sdata, -1); + if (evt_actor_p != NULL) { + evtControl.setPtT(evt_actor_p); + OS_REPORT("%06d: event: derector: set %s as PtT!\n", g_Counter.mCounter0, sdata); + } else { + OS_REPORT("%06d: event: derector: casting: %s not found!\n", g_Counter.mCounter0, sdata); } } - char* ptIName = dComIfGp_evmng_getMyStringP(staffId, "PtI"); - if (ptIName != NULL) { - fopAc_ac_c* ptI = fopAcM_searchFromName4Event(ptIName, -1); - if (ptI != NULL) { - evtControl.setPtI(ptI); + sdata = dComIfGp_evmng_getMyStringP(staffId, "PtI"); + if (sdata != NULL) { + evt_actor_p = fopAcM_searchFromName4Event(sdata, -1); + if (evt_actor_p != NULL) { + evtControl.setPtI(evt_actor_p); + OS_REPORT("%06d: event: derector: set %s as PtI!\n", g_Counter.mCounter0, sdata); + } else { + OS_REPORT("%06d: event: derector: casting: %s not found!\n", g_Counter.mCounter0, sdata); } } - char* ptDName = dComIfGp_evmng_getMyStringP(staffId, "PtD"); - if (ptDName != NULL) { - fopAc_ac_c* ptD = fopAcM_searchFromName4Event(ptDName, -1); - if (ptD != NULL) { - evtControl.setPtD(ptD); + sdata = dComIfGp_evmng_getMyStringP(staffId, "PtD"); + if (sdata != NULL) { + evt_actor_p = fopAcM_searchFromName4Event(sdata, -1); + if (evt_actor_p != NULL) { + evtControl.setPtD(evt_actor_p); + OS_REPORT("%06d: event: derector: set %s as PtD!\n", g_Counter.mCounter0, sdata); + } else { + OS_REPORT("%06d: event: derector: casting: %s not found!\n", g_Counter.mCounter0, sdata); } } break; } - case 'SPEC': - int* specTypeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); - if (specTypeP != NULL) { - switch (*specTypeP) { + case 'SPEC': { + int* type = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); + if (type != NULL) { + switch (*type) { case 8: /* dSv_event_flag_c::F_0506 - N/A - Only met Ooccoo Sr. - not yet son (shared Forest - Snowpeak) */ if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[506])) { /* dSv_event_flag_c::F_0566 - Ooccoo Sr. stuff - Letter from Ooccoo Sr. came in OK (no son) */ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[566]); + OS_REPORT("%06d: event: derector: obachan letter special on 566\n", g_Counter.mCounter0); } /* dSv_event_flag_c::F_0507 - N/A - Also met the son in dungeon with first Ooccoo Sr. meeting - @@ -909,11 +1173,13 @@ void dEvDtStaff_c::specialProcDirector() { if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[507])) { /* dSv_event_flag_c::F_0567 - Ooccoo Sr. stuff - Letter from Ooccoo Sr. came in OK (yes son) */ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[567]); + OS_REPORT("%06d: event: derector: obachan letter special on 567\n", g_Counter.mCounter0); } } } break; } + } } switch (*(int*)nowCutName) { @@ -921,14 +1187,23 @@ void dEvDtStaff_c::specialProcDirector() { specialProc_WaitProc(staffId); break; case 'FADE': + #if DEBUG + if (event_debug_evdt_reg1()) { + dComIfGp_evmng_cutEnd(staffId); + break; + } + #endif + if (!mDoGph_gInf_c::isFade()) { dComIfGp_evmng_cutEnd(staffId); break; } if (mDoGph_gInf_c::getFadeRate() >= 1) { - f32* rateP = dComIfGp_evmng_getMyFloatP(staffId, "Rate"); - if (*rateP > 0) { + rate = dComIfGp_evmng_getMyFloatP(staffId, "Rate"); + JUT_ASSERT(1454, rate); + + if (*rate > 0) { dComIfGp_evmng_cutEnd(staffId); } } @@ -970,46 +1245,69 @@ void dEvDtStaff_c::specialProcDirector() { /* 80045878-80045AFC 0401B8 0284+00 1/1 0/0 0/0 .text specialProcPackage__12dEvDtStaff_cFv */ void dEvDtStaff_c::specialProcPackage() { - dMsgObject_c* msgObj = dComIfGp_getMsgObjectClass(); - if (!!msgObj) { + u8* data = mData; + char* sdata; + f32* fdata; + cXyz* xyzdata; + int* idata; + + if (dMsgObject_getMsgObjectClass() != NULL) { dMsgObject_demoMessageGroup(); } + u8 sp8 = 0; + u8* demo_data = NULL; + int staffId = dComIfGp_evmng_getMyStaffId("PACKAGE", NULL, 0); if (staffId == -1) { + JUT_ASSERT(1528, 0); return; } - char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId); + char* sp14 = dComIfGp_getEventManager().getMyNowCutName(staffId); + char* nowCutName = sp14; + if (dComIfGp_evmng_getIsAddvance(staffId)) { + sp8 = 1; + switch (*(int*)nowCutName) { case 'WAIT': specialProc_WaitStart(staffId); break; case 'PLAY': - char* fileName = dComIfGp_evmng_getMyStringP(staffId, "FileName"); - cXyz* offsetPos = dComIfGp_evmng_getMyXyzP(staffId, "OffsetPos"); - f32* offsetAngYP = dComIfGp_evmng_getMyFloatP(staffId, "OffsetAngY"); + sdata = dComIfGp_evmng_getMyStringP(staffId, "FileName"); + + #if DEBUG + if (event_debug_evdt()) { + printf("%06d: event: package: %s !!!\n", g_Counter.mCounter0, sdata); + } + #endif + + xyzdata = dComIfGp_evmng_getMyXyzP(staffId, "OffsetPos"); + fdata = dComIfGp_evmng_getMyFloatP(staffId, "OffsetAngY"); + f32 offsetAngY; - if (offsetAngYP != NULL) { - offsetAngY = *offsetAngYP; + if (fdata != NULL) { + offsetAngY = *fdata; } else { offsetAngY = 0.0f; } - // should not save event from g_dComIfG_gameInfo to register + // fake match: should not save event from g_dComIfG_gameInfo to register dComIfG_play_c& info = g_dComIfG_gameInfo.play; - u8* demoData = (u8*)info.getEvent().getStbDemoData(fileName); - dDemo_c::start(demoData, offsetPos, offsetAngY); - info.getEvent().setCullRate(10.0f); + demo_data = (u8*)info.getEvent().getStbDemoData(sdata); + JUT_ASSERT(1571, demo_data); - int* eventFlagP = dComIfGp_evmng_getMyIntegerP(staffId, "EventFlag"); - if (eventFlagP != NULL) { - dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[*eventFlagP]); + dDemo_c::start(demo_data, xyzdata, offsetAngY); + info.getEvent().setCullRate(10.0f); // fake match: suppoed to be dComIfGp_event_setCullRate + + idata = dComIfGp_evmng_getMyIntegerP(staffId, "EventFlag"); + if (idata != NULL) { + dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[*idata]); } - break; } } + switch (*(int*)nowCutName) { case 'WAIT': specialProc_WaitProc(staffId); @@ -1017,9 +1315,9 @@ void dEvDtStaff_c::specialProcPackage() { case 'PLAY': { dEvt_control_c& evtControl = dComIfGp_getEvent(); if (dDemo_c::getMode() == 2) { - dStage_MapEvent_dt_c* event = evtControl.getStageEventDt(); + dStage_MapEvent_dt_c* event = dComIfGp_getEvent().getStageEventDt(); if (event != NULL && event->field_0x7 != 0xFF && !evtControl.chkFlag2(1)) { - dDemo_c::getControl()->referObject_control().suspend(100); + dDemo_c::getControl()->suspend(100); dComIfGp_evmng_cutEnd(staffId); } else { dDemo_c::end(); @@ -1039,17 +1337,37 @@ void dEvDtStaff_c::specialProcPackage() { /* 80045AFC-80045C34 04043C 0138+00 1/1 0/0 0/0 .text specialProcTimekeeper__12dEvDtStaff_cFv */ void dEvDtStaff_c::specialProcTimekeeper() { - TimerKeeperData* dataP = (TimerKeeperData*)&mData; + TimerKeeperData* data = (TimerKeeperData*)&mData; + int* idata; + int staffId = dComIfGp_evmng_getMyStaffId("TIMEKEEPER", NULL, 0); if (staffId == -1) { + JUT_ASSERT(1650, 0); return; } - char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId); + char* var_r27 = dComIfGp_getEventManager().getMyNowCutName(staffId); + char* nowCutName = var_r27; + if (dComIfGp_evmng_getIsAddvance(staffId)) { switch (*(int*)nowCutName) { case 'COUN': - dataP->timer = *dComIfGp_evmng_getMyIntegerP(staffId, "Timer"); + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Timer"); + + #if PLATFORM_SHIELD + if (idata == NULL) { + idata = dComIfGp_evmng_getMyIntegerP(staffId, "S"); + } + #endif + + JUT_ASSERT(1668, idata); + data->timer = *idata; + + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: timekeeper: COUNTDOWN::START %d\n", g_Counter.mCounter0, *idata); + } + #endif break; case 'WAIT': break; @@ -1058,8 +1376,8 @@ void dEvDtStaff_c::specialProcTimekeeper() { switch (*(int*)nowCutName) { case 'COUN': - if (dataP->timer > 0) { - dataP->timer--; + if (data->timer > 0) { + data->timer--; } else { dComIfGp_evmng_cutEnd(staffId); } @@ -1074,117 +1392,108 @@ void dEvDtStaff_c::specialProcTimekeeper() { */ void dEvDtStaff_c::specialProcEffect() { EffectData* data = (EffectData*)mData; + int* idata; + f32* fdata; + int staffId = dComIfGp_evmng_getMyStaffId("EFFECT", NULL, 0); if (staffId == -1) { + JUT_ASSERT(1720, 0); return; } - char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId); - if (dComIfGp_evmng_getIsAddvance(staffId)) { + dEvent_manager_c& evtMgr = dComIfGp_getEventManager(); + char* var_r27 = evtMgr.getMyNowCutName(staffId); + char* nowCutName = var_r27; + + if (evtMgr.getIsAddvance(staffId)) { data->unk = 0; + switch (*(int*)nowCutName) { case 'WAIT': { - int* timerP = dComIfGp_evmng_getMyIntegerP(staffId, "Timer"); - int timer; - if (timerP != NULL) { - timer = *timerP; - } else { - timer = 0; - } - data->unk = timer; - } break; + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Timer"); + data->unk = idata != NULL ? *idata : 0; + break; + } case 'SHOC': { - int* powerP = dComIfGp_evmng_getMyIntegerP(staffId, "Power"); - int power; - if (powerP != NULL) { - power = *powerP; - } else { - power = 5; - } + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Power"); + int power = idata != NULL ? *idata : 5; + + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); + int type = idata != NULL ? *idata : 15; - int* typeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); - int type; - if (typeP != NULL) { - type = *typeP; - } else { - type = 0xF; - } dComIfGp_getVibration().StartShock(power, type, cXyz(0, 1, 0)); - } break; + + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: effect: start shock %d %x\n", g_Counter.mCounter0, power, type & 0x1F); + } + #endif + break; + } case 'QUAK': { int power; int type; - int timer; int random; u8* pattern; - int* timerP = dComIfGp_evmng_getMyIntegerP(staffId, "Timer"); - if (timerP != NULL) { - timer = *timerP; - } else { - timer = 30; - } + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Timer"); + data->unk = idata != NULL ? *idata : 30; - data->unk = timer; - int* powerP = dComIfGp_evmng_getMyIntegerP(staffId, "Power"); - if (powerP != NULL) { - power = *powerP; - } else { - power = 5; - } + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Power"); + power = idata != NULL ? *idata : 5; - int* typeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); - if (typeP != NULL) { - type = *typeP; - } else { - type = 0xF; - } + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); + type = idata != NULL ? *idata : 15; pattern = (u8*)dComIfGp_evmng_getMyStringP(staffId, "Pattern"); if (pattern != NULL) { - int* randomP = dComIfGp_evmng_getMyIntegerP(staffId, "Random"); - if (randomP != NULL) { - random = *randomP; - } else { - random = 0; - } + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Random"); + random = idata != NULL ? *idata : 0; + dComIfGp_getVibration().StartQuake(pattern, random, type, cXyz(0, 1, 0)); + + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: effect: start quake %s %d %x\n", g_Counter.mCounter0, pattern, power, type & 0x1F); + } + #endif } else { dComIfGp_getVibration().StartQuake(power, type, cXyz(0, 1, 0)); + + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: effect: start quake %d\n", g_Counter.mCounter0, power); + } + #endif } - } break; + break; + } case 'BLUR': { - int* timerP = dComIfGp_evmng_getMyIntegerP(staffId, "Timer"); - int timer; - if (timerP != NULL) { - timer = *timerP; - } else { - timer = 30; - } - int timer2 = data->unk = timer; + idata = dComIfGp_evmng_getMyIntegerP(staffId, "Timer"); + int timer = data->unk = idata != NULL ? *idata : 30; - f32* alphaP = dComIfGp_evmng_getMyFloatP(staffId, "Alpha"); - f32 alpha; - if (alphaP != NULL) { - alpha = *alphaP; - } else { - alpha = 0.8f; - } + fdata = dComIfGp_evmng_getMyFloatP(staffId, "Alpha"); + f32 alpha = fdata != NULL ? *fdata : 0.8f; - f32* scaleP = dComIfGp_evmng_getMyFloatP(staffId, "Scale"); - f32 scale; - if (scaleP != NULL) { - scale = *scaleP; - } else { - scale = 1.0f; + fdata = dComIfGp_evmng_getMyFloatP(staffId, "Scale"); + f32 scale = fdata != NULL ? *fdata : 1.0f; + + dCam_getBody()->StartBlure(timer, NULL, alpha, scale); + + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: effect: blure %d %f %f\n", g_Counter.mCounter0, timer, alpha, scale); } - dCam_getBody()->StartBlure(timer2, NULL, alpha, scale); - } break; + #endif + break; + } } } + if (data->unk != 0) { data->unk--; } + switch (*(int*)nowCutName) { case 'WAIT': if (data->unk == 0) { @@ -1194,6 +1503,13 @@ void dEvDtStaff_c::specialProcEffect() { case 'QUAK': if (data->unk == 0) { dComIfGp_getVibration().StopQuake(0x1F); + + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("%06d: event: effect: stop quake\n", g_Counter.mCounter0); + } + #endif + dComIfGp_evmng_cutEnd(staffId); } break; @@ -1210,8 +1526,11 @@ void dEvDtStaff_c::specialProcEffect() { /* 800460A8-80046138 0409E8 0090+00 1/1 0/0 0/0 .text startCheck__10dEvDtCut_cFv */ int dEvDtCut_c::startCheck() { - for (int i = 0; i < 3; i++) { - int flag = this->getStartFlag(i); + int i; + int flag; + + for (i = 0; i < 3; i++) { + flag = getStartFlag(i); if (flag == -1) { if (i == 0) { return -1; @@ -1224,6 +1543,7 @@ int dEvDtCut_c::startCheck() { return 0; } } + return 1; } @@ -1242,68 +1562,113 @@ int dEvDtBase_c::init() { } /* 8004616C-8004628C 040AAC 0120+00 0/0 6/6 0/0 .text init__11dEvDtBase_cFPci */ -int dEvDtBase_c::init(char* p_data, int roomNo) { +int dEvDtBase_c::init(char* i_data, int i_roomNo) { init(); - if (p_data == NULL) { + if (i_data == NULL) { return 0; - } else { - setHeaderP((event_binary_data_header*)p_data); - - if (getEventNum() > 0) { - setEventP((dEvDtEvent_c*)(p_data + getEventTop())); - } - - if (getStaffNum() > 0) { - setStaffP((dEvDtStaff_c*)(p_data + getStaffTop())); - } - - if (getCutNum() > 0) { - setCutP((dEvDtCut_c*)(p_data + getCutTop())); - } - - if (getDataNum() > 0) { - setDataP((dEvDtData_c*)(p_data + getDataTop())); - } - - if (getFDataNum() > 0) { - setFDataP((f32*)(p_data + getFDataTop())); - } - - if (getIDataNum() > 0) { - setIDataP((int*)(p_data + getIDataTop())); - } - - if (getSDataNum() > 0) { - setSDataP((char*)(p_data + getSDataTop())); - } - - mRoomNo = roomNo; - return getEventNum(); } + + setHeaderP((event_binary_data_header*)i_data); + + if (getEventNum() > 0) { + setEventP((dEvDtEvent_c*)(i_data + getEventTop())); + } + + if (getStaffNum() > 0) { + setStaffP((dEvDtStaff_c*)(i_data + getStaffTop())); + } + + if (getCutNum() > 0) { + setCutP((dEvDtCut_c*)(i_data + getCutTop())); + } + + if (getDataNum() > 0) { + setDataP((dEvDtData_c*)(i_data + getDataTop())); + } + + if (getFDataNum() > 0) { + setFDataP((f32*)(i_data + getFDataTop())); + } + + if (getIDataNum() > 0) { + setIDataP((int*)(i_data + getIDataTop())); + } + + if (getSDataNum() > 0) { + setSDataP((char*)(i_data + getSDataTop())); + } + + mRoomNo = i_roomNo; + return getEventNum(); } /* 8004628C-800462FC 040BCC 0070+00 0/0 1/1 0/0 .text advanceCut__11dEvDtBase_cFP12dEvDtEvent_c */ -void dEvDtBase_c::advanceCut(dEvDtEvent_c* p_event) { - for (int i = 0; i < p_event->getNStaff(); i++) { - advanceCutLocal(mStaffP + p_event->getStaff(i)); +void dEvDtBase_c::advanceCut(dEvDtEvent_c* i_event) { + int i; + dEvDtStaff_c* staff; + + for (i = 0; i < i_event->getNStaff(); i++) { + staff = mStaffP + i_event->getStaff(i); + advanceCutLocal(staff); } } /* 800462FC-800463DC 040C3C 00E0+00 1/1 0/0 0/0 .text * advanceCutLocal__11dEvDtBase_cFP12dEvDtStaff_c */ -BOOL dEvDtBase_c::advanceCutLocal(dEvDtStaff_c* p_staff) { - dEvDtCut_c* cut = &mCutP[p_staff->getCurrentCut()]; +BOOL dEvDtBase_c::advanceCutLocal(dEvDtStaff_c* i_staff) { + dEvDtCut_c* cut = &mCutP[i_staff->getCurrentCut()]; + + #if DEBUG + if (event_debug_evdt_endcheck()) { + if (!dEvDtFlagCheck(cut->getFlagId())) { + OS_REPORT("\x1b[32m%06d: event: cut: %s::%s was NOT stoped\n\x1b[m", g_Counter.mCounter0, i_staff->getName(), cut->getName()); + } else { + OS_REPORT("\x1b[32m%06d: event: cut: %s::%s was stoped\n\x1b[m", g_Counter.mCounter0, i_staff->getName(), cut->getName()); + } + } + #endif + + dEvDtCut_c* cut_next; if (dEvDtFlagCheck(cut->getFlagId()) && cut->getNext() != -1) { - switch (mCutP[cut->getNext()].startCheck()) { + cut_next = &mCutP[cut->getNext()]; + switch (cut_next->startCheck()) { case -1: - p_staff->advanceCut(cut->getNext()); + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("\x1b[32m%06d: event: cut: STOP %s::%s[%d]\n\x1b[m", g_Counter.mCounter0, i_staff->getName(), cut->getName(), cut->getTagId()); + } + #endif + + i_staff->advanceCut(cut->getNext()); + + #if DEBUG + if (event_debug_evdt()) { + cut = &mCutP[i_staff->getCurrentCut()]; + OS_REPORT("\x1b[32m%06d: event: cut: START %s::%s[%d]\n\x1b[m", g_Counter.mCounter0, i_staff->getName(), cut->getName(), cut->getTagId()); + } + #endif return TRUE; case 1: dEvDtFlagSet(cut->getFlagId()); - p_staff->advanceCut(cut->getNext()); + + #if DEBUG + if (event_debug_evdt()) { + OS_REPORT("\x1b[32m%06d: event: cut: STOP %s::%s[%d]\n\x1b[m", g_Counter.mCounter0, i_staff->getName(), cut->getName(), cut->getTagId(), g_Counter.mCounter0); + } + #endif + + i_staff->advanceCut(cut->getNext()); + + #if DEBUG + if (event_debug_evdt()) { + cut = &mCutP[i_staff->getCurrentCut()]; + OS_REPORT("\x1b[32m%06d: event: cut: START %s::%s[%d]\n\x1b[m", g_Counter.mCounter0, i_staff->getName(), cut->getName(), cut->getTagId()); + } + #endif return TRUE; } } - p_staff->field_0x40 = false; + + i_staff->field_0x40 = false; return FALSE; } diff --git a/src/d/d_event_debug.cpp b/src/d/d_event_debug.cpp index c8b5d2d2be..d48e381739 100644 --- a/src/d/d_event_debug.cpp +++ b/src/d/d_event_debug.cpp @@ -5,12 +5,8 @@ #include "JSystem/JHostIO/JORFile.h" #include "JSystem/JHostIO/JORMContext.h" #include "JSystem/JHostIO/JORReflexible.h" -#include "JSystem/JKernel/JKRHeap.h" #include "d/actor/d_a_player.h" -#include "d/d_com_inf_game.h" -#include "d/d_event_data.h" #include "m_Do/m_Do_controller_pad.h" -#include "os.h" static dEvDb_bit_c dEvDb_flag_bit_table[799] = { #include "d/d_event_debug_bit_table.inc" @@ -55,7 +51,7 @@ dEvM_HIO_c::dEvM_HIO_c() { m_evd_unfinished = false; m_prioritize_file = false; - if(mDoCPd_c::getHoldL(PAD_2)) + if (mDoCPd_c::getHoldL(PAD_2)) m_prioritize_file = true; m_enable_skip = false; @@ -74,79 +70,79 @@ dEvM_HIO_c::dEvM_HIO_c() { m_temp_reg.mFlagTables = &dEvDb_flag_base_table_tmp; } -void dEvM_HIO_c::genMessage(JORMContext* ctx) { - ctx->genLabel("- ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); +void dEvM_HIO_c::genMessage(JORMContext* mctx) { + mctx->genLabel("- ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); /* "- Event Manager Testing" */ - ctx->genLabel("- イベントマネージャーテスト用", LBL_EVENT_MANAGER_TESTING, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genLabel("- イベントマネージャーテスト用", LBL_EVENT_MANAGER_TESTING, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "Playback test" - ctx->genNode("再生テスト", &m_playtest, 0, 0); + mctx->genNode("再生テスト", &m_playtest, 0, 0); // "Save B" - ctx->genNode("セーブB", &m_save_bit, 0, 0); + mctx->genNode("セーブB", &m_save_bit, 0, 0); // "Temporary B" - ctx->genNode("一時B", &m_temp_bit, 0, 0); + mctx->genNode("一時B", &m_temp_bit, 0, 0); // "Save R" - ctx->genNode("セーブR", &m_save_reg, 0, 0); + mctx->genNode("セーブR", &m_save_reg, 0, 0); // "Temporary R" - ctx->genNode("一時R", &m_temp_reg, 0, 0); + mctx->genNode("一時R", &m_temp_reg, 0, 0); // "Read" - ctx->genButton("読み込み", BTN_READ, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genButton("読み込み", BTN_READ, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "evM Debug" - ctx->genCheckBox("evM デバック", &m_evm_debug, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genCheckBox("evM デバック", &m_evm_debug, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "evD Debug" - ctx->genCheckBox("evD デバック", &m_evd_debug, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genCheckBox("evD デバック", &m_evd_debug, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "eve Debug" - ctx->genCheckBox("eve デバック", &m_eve_debug, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genCheckBox("eve デバック", &m_eve_debug, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "EV data output" - ctx->genCheckBox("EVデータ出力", &m_EVdata_output, 1, 0, NULL , 0xffff, 0xffff, 0x200, 0x18); + mctx->genCheckBox("EVデータ出力", &m_EVdata_output, 1, 0, NULL , 0xffff, 0xffff, 0x200, 0x18); // "evD unfinished" - ctx->genCheckBox("evD 未終了", &m_evd_unfinished, 1, 0, NULL, 0xffff , 0xffff, 0x200, 0x18); + mctx->genCheckBox("evD 未終了", &m_evd_unfinished, 1, 0, NULL, 0xffff , 0xffff, 0x200, 0x18); // "Scene switching prohibited" - ctx->genCheckBox("シーン切替禁止", &m_prevent_scene_switch, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genCheckBox("シーン切替禁止", &m_prevent_scene_switch, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genLabel("- ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genLabel("- ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); /* "- Map Tool Data" */ - ctx->genLabel("- マップツールデータ", 0, 0, NULL, 0xffff, 0xffff, 0x200 , 0x18); + mctx->genLabel("- マップツールデータ", 0, 0, NULL, 0xffff, 0xffff, 0x200 , 0x18); // "Corrective Sound Adjustment" - ctx->genSlider(" 正解音調整",&m_corrective_sound_adjustment, -200, 200, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genSlider(" 正解音調整",&m_corrective_sound_adjustment, -200, 200, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genLabel("- ",0,0,NULL,0xffff,0xffff,0x200,0x18); + mctx->genLabel("- ",0,0,NULL,0xffff,0xffff,0x200,0x18); /* "- Event Data" */ - ctx->genLabel("- イベントデータ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genLabel("- イベントデータ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "Continuously prioritize" - ctx->genCheckBox("常駐優先", &m_prioritize_file, 1, 0, NULL, 0xffff , 0xffff, 0x200, 0x18); + mctx->genCheckBox("常駐優先", &m_prioritize_file, 1, 0, NULL, 0xffff , 0xffff, 0x200, 0x18); /* "- Apply then Reset" */ - ctx->genLabel("- つけてから要リセット", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genLabel("- つけてから要リセット", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "Skip enabled" - ctx->genCheckBox("スキップ有効", &m_enable_skip, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genCheckBox("スキップ有効", &m_enable_skip, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genLabel("- ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genLabel("- ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genLabel("- ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genLabel("- ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "Forced termination" - ctx->genButton("強制終了", BTN_FORCED_TERMINATION, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genButton("強制終了", BTN_FORCED_TERMINATION, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); } void dEvM_HIO_c::listenPropertyEvent(const JORPropertyEvent* param_0) { @@ -155,72 +151,72 @@ void dEvM_HIO_c::listenPropertyEvent(const JORPropertyEvent* param_0) { JORReflexible::listenPropertyEvent(param_0); - switch(reinterpret_cast(param_0->id)) { - case BTN_READ: - if(!debug_data) { - // "Fly? Soar?" or maybe something along the lines of "Order change?", not entirely sure of translation... - OS_REPORT("飛ぶか?そるか?\n"); - debug_data = static_cast(JKRAlloc(0x32000,0)); - } + switch (reinterpret_cast(param_0->id)) { + case BTN_READ: + if(!debug_data) { + // "Fly? Soar?" or maybe something along the lines of "Order change?", not entirely sure of translation... + OS_REPORT("飛ぶか?そるか?\n"); + debug_data = static_cast(JKRAlloc(0x32000,0)); + } - // "Event data (*.dat)" - // Extra null terminators & *.dat needed for .data section to match?? - // Maybe the result of some kind of macro for formatting extension masks? - if(debug_data && eventDataFile.open(1, "イベントデータ(*.dat)\0*.dat\0\0\0", NULL, NULL, NULL)) { - eventDataFile.readData(debug_data, 0); - eventDataFile.close(); + // "Event data (*.dat)" + // Extra null terminators & *.dat needed for .data section to match?? + // Maybe the result of some kind of macro for formatting extension masks? + if (debug_data && eventDataFile.open(1, "イベントデータ(*.dat)\0*.dat\0\0\0", NULL, NULL, NULL)) { + eventDataFile.readData(debug_data, 0); + eventDataFile.close(); - // Update available events - m_playtest.removeComboBox(); - dComIfGp_getPEvtManager()->setDbgData(debug_data); - m_playtest.addComboBox(); - } - break; - case BTN_READ + 1: - break; - case BTN_FORCED_TERMINATION: - // "Forced termination" button - dComIfGp_getEvent().reset(); - break; + // Update available events + m_playtest.removeComboBox(); + dComIfGp_getPEvtManager()->setDbgData(debug_data); + m_playtest.addComboBox(); + } + break; + case BTN_READ + 1: + break; + case BTN_FORCED_TERMINATION: + // "Forced termination" button + dComIfGp_getEvent().reset(); + break; } } bool dEvM_HIO_c::setDebugCameraData(void* buffer) { - if(m_playtest.mEventCameraMode != dEvM_play_HIO_c::UNSET) + if (m_playtest.mEventCameraMode != dEvM_play_HIO_c::UNSET) return false; - if(dComIfGp_event_runCheck()) + if (dComIfGp_event_runCheck()) return false; dComIfGp_getPEvtManager()->setDbgData(static_cast(buffer)); m_playtest.mTargetEvent = 0; - m_playtest.field_0x6 = 0; + m_playtest.mEventIdx = 0; m_playtest.mEventCameraMode = dEvM_play_HIO_c::PLAYBACK; m_playtest.field_0xA = 0; return true; } -void dEvM_root_bit_HIO_c::genMessage(JORMContext* ctx) { +void dEvM_root_bit_HIO_c::genMessage(JORMContext* mctx) { u8 i = 0; - for(; i < ARRAY_SIZEU(mBit) && i < mFlagTables->mNumRootBits; i++) { + for (; i < ARRAY_SIZEU(mBit) && i < mFlagTables->mNumRootBits; i++) { mBit[i].mFlagTables = mFlagTables; mBit[i].mRootBitIdx = i; - if(mFlagTables->searchDirNameBit(i)) - ctx->genNode(mFlagTables->searchDirNameBit(i), &mBit[i], 0, 0); + if (mFlagTables->searchDirNameBit(i)) + mctx->genNode(mFlagTables->searchDirNameBit(i), &mBit[i], 0, 0); } } -void dEvM_root_reg_HIO_c::genMessage(JORMContext* ctx) { +void dEvM_root_reg_HIO_c::genMessage(JORMContext* mctx) { u8 i = 0; - for(; i < ARRAY_SIZEU(mReg) && i < mFlagTables->mNumRootRegs; i++) { + for (; i < ARRAY_SIZEU(mReg) && i < mFlagTables->mNumRootRegs; i++) { mReg[i].mFlagTables = mFlagTables; mReg[i].mRootRegIdx = i; - if(mFlagTables->searchDirNameReg(i)) - ctx->genNode(mFlagTables->searchDirNameReg(i), &mReg[i], 0, 0); + if (mFlagTables->searchDirNameReg(i)) + mctx->genNode(mFlagTables->searchDirNameReg(i), &mReg[i], 0, 0); } } @@ -229,87 +225,84 @@ const char* non_text = "無し"; dEvM_play_HIO_c::dEvM_play_HIO_c() { mTargetEvent = 0; - field_0x6 = 0; + mEventIdx = 0; mEventCameraMode = UNSET; field_0xA = 0; } -void dEvM_play_HIO_c::genMessage(JORMContext* ctx) { +void dEvM_play_HIO_c::genMessage(JORMContext* mctx) { event_binary_data_header* const header = dComIfGp_getPEvtManager()->getHeader(1); dEvDtEvent_c* const list = dComIfGp_getPEvtManager()->getEventList(1); /* "Event Playback Test" */ - ctx->genLabel("イベントの再生テスト", LBL_EVENT_PLAYBACK_TESTING, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genLabel("イベントの再生テスト", LBL_EVENT_PLAYBACK_TESTING, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "Playback" - ctx->genButton("再生", BTN_PLAYBACK, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genButton("再生", BTN_PLAYBACK, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "Stop" - ctx->genButton("停止", BTN_STOP, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genButton("停止", BTN_STOP, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "Target event" - ctx->startComboBox("対象イベント", &mTargetEvent, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a); + mctx->startComboBox("対象イベント", &mTargetEvent, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a); int i; - if(!header) { - ctx->genComboBoxItem(non_text,0); - } - else { - for(i = 0; i < header->eventNum; i++) { - ctx->genComboBoxItem(list[i].getName(), i); + if (!header) { + mctx->genComboBoxItem(non_text,0); + } else { + for (i = 0; i < header->eventNum; i++) { + mctx->genComboBoxItem(list[i].getName(), i); } } - ctx->endComboBox(); + mctx->endComboBox(); } void dEvM_play_HIO_c::listenPropertyEvent(const JORPropertyEvent* param_0) { JORReflexible::listenPropertyEvent(param_0); mEventCameraMode = UNSET; - switch(reinterpret_cast(param_0->id)) { - case BTN_PLAYBACK: - mEventCameraMode = PLAYBACK; - break; - case BTN_STOP: - mEventCameraMode = STOP; - break; + switch (reinterpret_cast(param_0->id)) { + case BTN_PLAYBACK: + mEventCameraMode = PLAYBACK; + break; + case BTN_STOP: + mEventCameraMode = STOP; + break; } } -void dEvM_play_HIO_c::removeComboBox() { - // Empty function -} +void dEvM_play_HIO_c::removeComboBox() {} void dEvM_play_HIO_c::addComboBox() { - JORMContext* ctx = attachJORMContext(5); - ctx->invalidNode(this, 3); - releaseJORMContext(ctx); + JORMContext* mctx = attachJORMContext(5); + mctx->invalidNode(this, 3); + releaseJORMContext(mctx); } dEvM_bit_HIO_c::dEvM_bit_HIO_c() { field_0x008 = 0; } -void dEvM_bit_HIO_c::genMessage(JORMContext* ctx) { +void dEvM_bit_HIO_c::genMessage(JORMContext* mctx) { /* "----Event Save Bit---" */ - ctx->genLabel("----イベント セーブビット---", LBL_EVENT_SAVE_BIT, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genLabel("----イベント セーブビット---", LBL_EVENT_SAVE_BIT, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "Update" - ctx->genButton("更新", BTN_UPDATE, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genButton("更新", BTN_UPDATE, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); int i = 0; u32 labelPosY = 0; int unused = labelPosY; - for(; i < mFlagTables->mTotalBitNum; i++) { - if(mRootBitIdx == mFlagTables->mBitTable[i].mRootBit) { - if(mFlagTables == &dEvDb_flag_base_table) + for (; i < mFlagTables->mTotalBitNum; i++) { + if (mRootBitIdx == mFlagTables->mBitTable[i].mRootBit) { + if (mFlagTables == &dEvDb_flag_base_table) mFlagTables->mBitTable[i].mIsSet = dComIfGs_isEventBit(mFlagTables->mBitTable[i].mFlagValue); else mFlagTables->mBitTable[i].mIsSet = dComIfGs_isTmpBit(mFlagTables->mBitTable[i].mFlagValue); - ctx->genCheckBox(mFlagTables->mBitTable[i].mFlagName, &mFlagTables->mBitTable[i].mIsSet, 1, 0, NULL, 0xffff, 0xffff, 0xfa, 0x18); - ctx->genLabel(mFlagTables->mBitTable[i].mFlagDescription, i + (1 << 31) + (1 << 1), 0, NULL, 0x100, labelPosY * 25 + 50, 0x200, 0x18); + mctx->genCheckBox(mFlagTables->mBitTable[i].mFlagName, &mFlagTables->mBitTable[i].mIsSet, 1, 0, NULL, 0xffff, 0xffff, 0xfa, 0x18); + mctx->genLabel(mFlagTables->mBitTable[i].mFlagDescription, i + (1 << 31) + (1 << 1), 0, NULL, 0x100, labelPosY * 25 + 50, 0x200, 0x18); labelPosY++; } @@ -320,134 +313,125 @@ void dEvM_bit_HIO_c::listenPropertyEvent(const JORPropertyEvent* param_0) { int i; JORReflexible::listenPropertyEvent(param_0); - switch(reinterpret_cast(param_0->id)) { - case BTN_UPDATE: - update(); - case BTN_UPDATE + 1: - break; - default: - for(i = 0; i < mFlagTables->mTotalBitNum; i++) { - if(mRootBitIdx == mFlagTables->mBitTable[i].mRootBit && param_0->id == reinterpret_cast(&mFlagTables->mBitTable[i].mIsSet)) { - if(mFlagTables == &dEvDb_flag_base_table) { - if(mFlagTables->mBitTable[i].mIsSet) - dComIfGs_onEventBit(mFlagTables->mBitTable[i].mFlagValue); - else - dComIfGs_offEventBit(mFlagTables->mBitTable[i].mFlagValue); - } - else if(mFlagTables->mBitTable[i].mIsSet) { - dComIfGs_onTmpBit(mFlagTables->mBitTable[i].mFlagValue); - } - else { - dComIfGs_offTmpBit(mFlagTables->mBitTable[i].mFlagValue); - } + switch (reinterpret_cast(param_0->id)) { + case BTN_UPDATE: + update(); + case BTN_UPDATE + 1: + break; + default: + for (i = 0; i < mFlagTables->mTotalBitNum; i++) { + if (mRootBitIdx == mFlagTables->mBitTable[i].mRootBit && param_0->id == reinterpret_cast(&mFlagTables->mBitTable[i].mIsSet)) { + if (mFlagTables == &dEvDb_flag_base_table) { + if (mFlagTables->mBitTable[i].mIsSet) + dComIfGs_onEventBit(mFlagTables->mBitTable[i].mFlagValue); + else + dComIfGs_offEventBit(mFlagTables->mBitTable[i].mFlagValue); + } else if (mFlagTables->mBitTable[i].mIsSet) { + dComIfGs_onTmpBit(mFlagTables->mBitTable[i].mFlagValue); + } else { + dComIfGs_offTmpBit(mFlagTables->mBitTable[i].mFlagValue); } } - break; + } + break; } } void dEvM_bit_HIO_c::update() { - JORMContext* context = attachJORMContext(8); + JORMContext* mctx = attachJORMContext(8); - if(mFlagTables->mTotalBitNum > 0) - context->startUpdateNode(this); + if (mFlagTables->mTotalBitNum > 0) + mctx->startUpdateNode(this); int i = 0; - for(; i < mFlagTables->mTotalBitNum; i++) { - if(mRootBitIdx == mFlagTables->mBitTable[i].mRootBit) { - if(mFlagTables == &dEvDb_flag_base_table) + for (; i < mFlagTables->mTotalBitNum; i++) { + if (mRootBitIdx == mFlagTables->mBitTable[i].mRootBit) { + if (mFlagTables == &dEvDb_flag_base_table) mFlagTables->mBitTable[i].mIsSet = dComIfGs_isEventBit(mFlagTables->mBitTable[i].mFlagValue); else mFlagTables->mBitTable[i].mIsSet = dComIfGs_isTmpBit(mFlagTables->mBitTable[i].mFlagValue); - context->updateCheckBox(2, &mFlagTables->mBitTable[i].mIsSet, 1, 0); + mctx->updateCheckBox(2, &mFlagTables->mBitTable[i].mIsSet, 1, 0); } - } - releaseJORMContext(context); + releaseJORMContext(mctx); } dEvM_reg_HIO_c::dEvM_reg_HIO_c() { field_0x008 = 0; } -void dEvM_reg_HIO_c::genMessage(JORMContext* ctx) { +void dEvM_reg_HIO_c::genMessage(JORMContext* mctx) { /* "----Event Save Register---" */ - ctx->genLabel("----イベント セーブレジスター---", LBL_EVENT_SAVE_REGISTER, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genLabel("----イベント セーブレジスター---", LBL_EVENT_SAVE_REGISTER, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // "Update" - ctx->genButton("更新", BTN_UPDATE, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - - // Stack non-matching if i is declared in the for loop header and flagVal is declared in loop body + mctx->genButton("更新", BTN_UPDATE, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + int i = 0; u8 flagVal; - for(; i < mFlagTables->mTotalRegNum; i++) { - if(mRootRegIdx == mFlagTables->mRegTable[i].mRootReg) { - if(mFlagTables == &dEvDb_flag_base_table) + for (; i < mFlagTables->mTotalRegNum; i++) { + if (mRootRegIdx == mFlagTables->mRegTable[i].mRootReg) { + if (mFlagTables == &dEvDb_flag_base_table) mFlagTables->mRegTable[i].mIsSet = dComIfGs_getEventReg(mFlagTables->mRegTable[i].mFlagValue); else mFlagTables->mRegTable[i].mIsSet = dComIfGs_getTmpReg(mFlagTables->mRegTable[i].mFlagValue); - ctx->genLabel(mFlagTables->mRegTable[i].mFlagDescription, 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genLabel(mFlagTables->mRegTable[i].mFlagDescription, 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); flagVal = mFlagTables->mRegTable[i].mFlagValue; - ctx->genSlider(mFlagTables->mRegTable[i].mFlagName, &mFlagTables->mRegTable[i].mIsSet, 0, flagVal, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + mctx->genSlider(mFlagTables->mRegTable[i].mFlagName, &mFlagTables->mRegTable[i].mIsSet, 0, flagVal, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); } } } void dEvM_reg_HIO_c::listenPropertyEvent(const JORPropertyEvent* param_0) { - // Stack non-matching if i is declared in the for loop header int i; JORReflexible::listenPropertyEvent(param_0); switch(reinterpret_cast(param_0->id)) { - case BTN_UPDATE: - update(); - case BTN_UPDATE + 1: - break; - default: - for(i = 0; i < mFlagTables->mTotalRegNum; i++) { - if(mRootRegIdx == mFlagTables->mRegTable[i].mRootReg && param_0->id == reinterpret_cast(&mFlagTables->mRegTable[i].mIsSet)) { - if(mFlagTables == &dEvDb_flag_base_table) - dComIfGs_setEventReg(mFlagTables->mRegTable[i].mFlagValue, mFlagTables->mRegTable[i].mIsSet); - else - dComIfGs_setTmpReg(mFlagTables->mRegTable[i].mFlagValue, mFlagTables->mRegTable[i].mIsSet); - } + case BTN_UPDATE: + update(); + case BTN_UPDATE + 1: + break; + default: + for (i = 0; i < mFlagTables->mTotalRegNum; i++) { + if (mRootRegIdx == mFlagTables->mRegTable[i].mRootReg && param_0->id == reinterpret_cast(&mFlagTables->mRegTable[i].mIsSet)) { + if (mFlagTables == &dEvDb_flag_base_table) + dComIfGs_setEventReg(mFlagTables->mRegTable[i].mFlagValue, mFlagTables->mRegTable[i].mIsSet); + else + dComIfGs_setTmpReg(mFlagTables->mRegTable[i].mFlagValue, mFlagTables->mRegTable[i].mIsSet); } - break; + } + break; } - } void dEvM_reg_HIO_c::update() { - JORMContext* context = attachJORMContext(8); + JORMContext* mctx = attachJORMContext(8); - if(mFlagTables->mTotalRegNum > 0) - context->startUpdateNode(this); + if (mFlagTables->mTotalRegNum > 0) + mctx->startUpdateNode(this); - // Stack non-matching if i is declared in the for loop header int i = 0; - for(; i < mFlagTables->mTotalRegNum; i++) { - if(mRootRegIdx == mFlagTables->mRegTable[i].mRootReg) { - if(mFlagTables == &dEvDb_flag_base_table) + for (; i < mFlagTables->mTotalRegNum; i++) { + if (mRootRegIdx == mFlagTables->mRegTable[i].mRootReg) { + if (mFlagTables == &dEvDb_flag_base_table) mFlagTables->mRegTable[i].mIsSet = dComIfGs_getEventReg(mFlagTables->mRegTable[i].mFlagValue); else mFlagTables->mRegTable[i].mIsSet = dComIfGs_getTmpReg(mFlagTables->mRegTable[i].mFlagValue); - context->updateSlider(2, &mFlagTables->mRegTable[i].mIsSet, 0, 0, 0); + mctx->updateSlider(2, &mFlagTables->mRegTable[i].mIsSet, 0, 0, 0); } - } - releaseJORMContext(context); + releaseJORMContext(mctx); } char* dEvDb_flag_base_c::searchDirNameBit(int bit) { - // Stack non-matching if i is declared in the for loop header int i = 0; - for(; i < mTotalBitNum; i++) { - if(bit == mBitTable[i].mRootBit) + for (; i < mTotalBitNum; i++) { + if (bit == mBitTable[i].mRootBit) return mBitTable[i].mArea; } @@ -455,13 +439,12 @@ char* dEvDb_flag_base_c::searchDirNameBit(int bit) { } char* dEvDb_flag_base_c::searchDirNameReg(int bit) { - // Stack non-matching if i is declared in the for loop header int i = 0; - for(; i < mTotalRegNum; i++) { - if(bit == mRegTable[i].mRootReg) + for (; i < mTotalRegNum; i++) { + if (bit == mRegTable[i].mRootReg) return mRegTable[i].mArea; } - + return NULL; } diff --git a/src/d/d_event_manager.cpp b/src/d/d_event_manager.cpp index 8873e3ea4a..a4f6f0f2e4 100644 --- a/src/d/d_event_manager.cpp +++ b/src/d/d_event_manager.cpp @@ -10,7 +10,41 @@ #include "d/actor/d_a_player.h" #include "d/d_camera.h" #include "d/d_com_inf_game.h" -#include "stdio.h" +#include "d/d_demo.h" +#include "d/d_s_play.h" +#include "SSystem/SComponent/c_counter.h" +#include + +#if DEBUG +static dEvM_HIO_c l_HIO; +#endif + +namespace { +inline s16 makeCompositId(const s16 index, int type) { + return index | (type << 8); +} + +inline s16 getIndexCompositId(s16 compositId) { + if (compositId == -1) { + return -1; + } else { + return compositId & 0xFF; + } +} + +inline int getTypeCompositId(s16 compositId) { + // TODO: reconcile this + #if DEBUG + if (compositId == -1) { + return 0; + } else { + return compositId >> 8; + } + #else + return compositId == -1 ? 0 : compositId >> 8; + #endif +} +} void dEvent_exception_c::init() { mEventInfoIdx = -1; @@ -18,100 +52,205 @@ void dEvent_exception_c::init() { } /* 800463F0-80046480 040D30 0090+00 0/0 2/2 0/0 .text setStartDemo__18dEvent_exception_cFi */ -s32 dEvent_exception_c::setStartDemo(int mapToolID) { +int dEvent_exception_c::setStartDemo(int mapToolID) { int roomNo = dComIfGp_roomControl_getStayNo(); - dStage_MapEvent_dt_c* eventData = dEvt_control_c::searchMapEventData(mapToolID, roomNo); + dStage_MapEvent_dt_c* mapdata = dEvt_control_c::searchMapEventData(mapToolID, roomNo); - if (eventData != NULL && eventData->mSwitch != 0xFF && - dComIfGs_isSwitch(eventData->mSwitch, roomNo)) - { + if (mapdata != NULL && mapdata->switch_no != 0xFF && dComIfGs_isSwitch(mapdata->switch_no, roomNo)) { return 0xFF; } else if (mEventInfoIdx != mapToolID) { mEventInfoIdx = mapToolID; + OS_REPORT("event manager: setStartDemo: %d \n", mapToolID); } + return mapToolID; } /* 80046480-800465E8 040DC0 0168+00 1/1 0/0 0/0 .text getEventName__18dEvent_exception_cFv */ const char* dEvent_exception_c::getEventName() { static const char* soecial_names[14] = { - "NORMAL_COMEBACK", "DEFAULT_START", "SHUTTER_START", "SHUTTER_START_STOP", - "BS_SHUTTER_START", "BS_SHUTTER_START_B", "KNOB_START", "KNOB_START_B", - "FMASTER_START", "FALL_START", "CRAWLOUT_START", "BOSSWARP_START", - "PORTALWARP_START", "PORTALWARP_START_B", + "NORMAL_COMEBACK", + "DEFAULT_START", + "SHUTTER_START", + "SHUTTER_START_STOP", + "BS_SHUTTER_START", + "BS_SHUTTER_START_B", + "KNOB_START", + "KNOB_START_B", + "FMASTER_START", + "FALL_START", + "CRAWLOUT_START", + "BOSSWARP_START", + "PORTALWARP_START", + "PORTALWARP_START_B", }; int roomNo = dComIfGp_roomControl_getStayNo(); dStage_roomDt_c* roomDt = dComIfGp_roomControl_getStatusRoomDt(roomNo); dStage_MapEventInfo_c* eventInfo = roomDt->getMapEventInfo(); + if (mEventInfoIdx == -1) { return "(!NO REGIST!)"; } if (200 < mEventInfoIdx && mEventInfoIdx < 215) { if (mEventInfoIdx == 203) { - dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()); + stage_stag_info_class* stage_info = dComIfGp_getStageStagInfo(); + JUT_ASSERT(136, stage_info); + + u32 sp8 = dStage_stagInfo_GetSTType(stage_info); } else if (mEventInfoIdx == 213) { switch (dComIfGp_SelectWarpPt_get()) { case 3: mEventInfoIdx = 214; } } + return soecial_names[mEventInfoIdx - 201]; - } else { - if (eventInfo == NULL) { - return "(!NO INFO!)"; - } + } - if (mEventInfoIdx < 0 || mEventInfoIdx > eventInfo->num) { - return "(!BAD NUMBER!)"; - } + if (eventInfo == NULL) { + OS_REPORT("event manager: get name: no event info!!\n\n"); + return "(!NO INFO!)"; + } - dStage_MapEvent_dt_c* revt = &eventInfo->m_entries[mEventInfoIdx]; - switch (revt->mType) { - case 1: - case 2: - return revt->mName; - case 0: - return "(MAP TOOL CAMERA)"; - default: - return "(!BAD DATA!)"; - } + if (mEventInfoIdx < 0 || mEventInfoIdx > eventInfo->num) { + OS_REPORT("event manager: get name: illegal number %d!!\n\n", mEventInfoIdx); + return "(!BAD NUMBER!)"; + } + + switch (eventInfo->m_entries[mEventInfoIdx].type) { + case 1: + case 2: + return eventInfo->m_entries[mEventInfoIdx].data.event_name; + case 0: + return "(MAP TOOL CAMERA)"; + default: + return "(!BAD DATA!)"; } } +#if DEBUG +void dEvent_manager_c::debugBfProc() { + s16 id = makeCompositId(l_HIO.m_playtest.mEventIdx, BASE_DEBUG); + char* eventname; + + if (mEventList[BASE_DEBUG].getHeaderP() != NULL) { + eventname = mEventList[BASE_DEBUG].getEventName(l_HIO.m_playtest.mEventIdx); + + switch (l_HIO.m_playtest.field_0xA) { + case 1: + if (startCheck(id)) { + l_HIO.m_playtest.field_0xA = 2; + mFlags.init(); + } + break; + case 2: + if (endCheck(id)) { + dComIfGp_getEvent().reset(); + l_HIO.m_playtest.field_0xA = 0; + } + break; + case 3: + if (endCheck(id)) { + dComIfGp_getEvent().reset(); + l_HIO.m_playtest.field_0xA = 0; + } + break; + } + + switch (l_HIO.m_playtest.mEventCameraMode) { + case 1: + if (l_HIO.m_playtest.field_0xA == 0) { + l_HIO.m_playtest.field_0xA = 1; + l_HIO.m_playtest.mEventIdx = l_HIO.m_playtest.mTargetEvent; + } + break; + case 2: + switch (l_HIO.m_playtest.field_0xA) { + case 1: + l_HIO.m_playtest.field_0xA = 0; + break; + case 2: + closeProc(mEventList[BASE_DEBUG].getEventP(l_HIO.m_playtest.mEventIdx)); + + if (dDemo_c::getMode() != 0) { + dDemo_c::end(); + } + + l_HIO.m_playtest.field_0xA = 3; + break; + } + break; + } + + eventname = mEventList[BASE_DEBUG].getEventName(l_HIO.m_playtest.mEventIdx); + switch (l_HIO.m_playtest.field_0xA) { + case 1: + fopAcM_orderOtherEvent(daPy_getPlayerActorClass(), eventname, 0xFFFF, 1, 0); + } + + l_HIO.m_playtest.mEventCameraMode = 0; + } +} +#endif + +#if DEBUG +static void dummyStrings() { + char* s = "debugPrint\n"; + s = "header->event.num = %d\n"; + s = "event[%d] = (name %s, n_staff = %d endSound = %d)\n"; + s = " staff[%d] = %d\n"; + s = "staff[%d] = {name %s, tag_id = %d, startCut = %d type = %d, always = %d}\n"; + s = "cut[%d] = {name %s, startFlag (%d,%d,%d) ,flagId %d, dataTop %d,next %d}\n"; + s = "data[%d] = {name %s, type %d, index %d, number %d, next %d}\n"; + s = "string = %s\n"; +} +#endif + /* 800465E8-80046688 040F28 00A0+00 1/1 0/0 0/0 .text * getSubstance__16dEvent_manager_cFP11dEvDtData_ci */ -void* dEvent_manager_c::getSubstance(dEvDtData_c* p_data, int type) { - if (p_data->getIndex() < 0 || p_data->getNumber() <= 0) { - return NULL; - } else { - switch (p_data->getType()) { - case dEvDtData_c::TYPE_FLOAT: - case dEvDtData_c::TYPE_VEC: - case 2: - return getBase().getFDataP(p_data->getIndex()); - case dEvDtData_c::TYPE_INT: - return getBase().getIDataP(p_data->getIndex()); - case dEvDtData_c::TYPE_STRING: - return getBase().getSDataP(p_data->getIndex()); - } +void* dEvent_manager_c::getSubstance(dEvDtData_c* evData, int type) { + if (evData->getIndex() < 0 || evData->getNumber() <= 0) { + JUT_ASSERT(378, 0); return NULL; } + + if (type != -1 && type != evData->getType()) { + JUT_ASSERT(383, 0); + } + + switch (evData->getType()) { + case dEvDtData_c::TYPE_FLOAT: + case dEvDtData_c::TYPE_VEC: + case 2: + return getBase().getFDataP(evData->getIndex()); + case dEvDtData_c::TYPE_INT: + return getBase().getIDataP(evData->getIndex()); + case dEvDtData_c::TYPE_STRING: + return getBase().getSDataP(evData->getIndex()); + default: + // "dEvent_manager_c::getSubstance unsupported type %d" + OS_REPORT("dEvent_manager_c::getSubstance 未対応タイプ %d\n", evData->getType()); + JUT_ASSERT(403, 0); + } + + return NULL; } -void dEvent_manager_c::setDbgData(const char* buffer) { - if(buffer) { - char* writableBuffer = const_cast(buffer); - mEventList[11].init(writableBuffer, -1); +#if DEBUG +void dEvent_manager_c::setDbgData(const char* srcData) { + if (srcData != NULL) { + char* data = const_cast(srcData); + mEventList[BASE_DEBUG].init(data, -1); } } +#endif dEvent_manager_c::dEvent_manager_c() { mDataLoaded = false; } -/* ############################################################################################## */ /* 80379F50-80379F60 0065B0 000F+01 6/6 0/0 0/0 .rodata * DataFileName__29@unnamed@d_event_manager_cpp@ */ namespace { @@ -121,83 +260,189 @@ static char const DataFileName[] = "event_list.dat"; /* 80046710-80046800 041050 00F0+00 0/0 1/1 0/0 .text create__16dEvent_manager_cFv */ int dEvent_manager_c::create() { mCameraPlay = 0; - mEventException.init(); + mException.init(); mFlags.init(); - mCurrentEventType = 0; - mCurrentEventCompositId = -1; - field_0x1b8 = 0; + mCurrentEvType = 0; + mCurrentEvId = -1; + unk_0x1b8 = 0; mRoomNo = -1; mDataLoaded = 0; - for (int i = 4; i <= 9; i++) { + char* res; + int base_status; + int i; + + // "event manager: Stage Data init!!" + OS_REPORT("event manager: \x1b[31mステージデータ初期化!!\n\x1b[m"); + for (i = BASE_ROOM0; i <= BASE_ROOM5; i++) { mEventList[i].init(); } - mEventList[3].init((char*)dComIfG_getStageRes(DataFileName), -1); - mEventList[10].init(); - mEventList[1].init((char*)dComIfG_getObjectRes("Event", DataFileName), -1); - mEventList[2].init(); + res = (char*)dComIfG_getStageRes(DataFileName); + base_status = mEventList[BASE_STAGE].init(res, -1); + +#if DEBUG + if (res != NULL) { + // "event manager: BASE_SCENE loaded (%d)" + OS_REPORT("event manager: BASE_SCENEを読み込んだ (%d)\n", base_status); + } else { + // "event manager: BASE_SCENE couldn't be loaded" + OS_REPORT("event manager: BASE_SCENEは読み込めなかった\n"); + } +#endif + + mEventList[BASE_DEMO].init(); + + res = (char*)dComIfG_getObjectRes("Event", DataFileName); + base_status = mEventList[BASE_KEEP].init(res, -1); + + #if DEBUG + if (base_status) { + // "event manager: BASE_KEEP loaded (%d)" + OS_REPORT("event manager: BASE_KEEPを読み込んだ (%d)\n", base_status); + } else { + // "event manager: BASE_KEEP couldn't be loaded" + OS_REPORT("event manager: BASE_KEEPは読み込めなかった\n"); + } + #endif + + mEventList[BASE_ACTOR].init(); + +#if DEBUG + if (l_HIO.field_0x004 < 0) { + // "Event Manager" + l_HIO.field_0x004 = mDoHIO_CREATE_CHILD("イベントマネージャ", &l_HIO); + } + + if (mDoCPd_c::getHoldL(PAD_2)) { + // "event: file priority mode ON!!" + OS_REPORT("event: 常駐優先モード ON!!\n"); + l_HIO.m_prioritize_file = true; + } + + if (l_HIO.m_prioritize_file) { + mEventList[BASE_DEBUG].init(res, -1); + } else { + mEventList[BASE_DEBUG].init(); + } + + if (l_HIO.m_evm_debug && res == NULL) { + // "!!\n!!\n!!\nEvent List not found!!\n!!\n!!\n" + OS_REPORT("!!\n!!\n!!\nイベントリスト見つからず!!\n!!\n!!\n"); + } +#endif + return 1; } /* 80046800-80046888 041140 0088+00 0/0 8/8 24/24 .text setObjectArchive__16dEvent_manager_cFPc */ -bool dEvent_manager_c::setObjectArchive(char* arcName) { +bool dEvent_manager_c::setObjectArchive(char* arcname) { char* rt = NULL; - if (arcName != NULL) { - char* res = (char*)dComIfG_getObjectRes(arcName, DataFileName); + if (arcname != NULL) { + char* res = (char*)dComIfG_getObjectRes(arcname, DataFileName); rt = res; - mEventList[2].init(res, -1); + int base_status = mEventList[BASE_ACTOR].init(res, -1); + + #if DEBUG + if (base_status) { + // "event manager: BASE_ACTOR loaded (%d)" + OS_REPORT("event manager: BASE_ACTORを読み込んだ (%d)\n", base_status); + } else { + // "event manager: BASE_ACTOR couldn't be loaded" + OS_REPORT("event manager: BASE_ACTORは読み込めなかった\n"); + } + #endif } else { - mEventList[2].init(); + mEventList[BASE_ACTOR].init(); } + return rt != NULL; } /* 80046888-80046904 0411C8 007C+00 0/0 1/1 0/0 .text demoInit__16dEvent_manager_cFv */ void dEvent_manager_c::demoInit() { - if (mDataLoaded == false) { - if (dStage_roomControl_c::getDemoArcName()[0] != '\0') { - mEventList[10].init( - (char*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), DataFileName), - -1); + if (!mDataLoaded) { + // "event manager: init demo data!!" + OS_REPORT("event manager: \x1b[31mデモデータ初期化!!\n\x1b[m"); + + char* demo_arcname = dStage_roomControl_c::getDemoArcName(); + if (demo_arcname[0] != '\0') { + char* res = (char*)dComIfG_getObjectRes(demo_arcname, DataFileName); + int base_status = mEventList[BASE_DEMO].init(res, -1); + + #if DEBUG + if (base_status) { + // "event manager: BASE_DEMO loaded (%d)" + OS_REPORT("event manager: BASE_DEMO[%s]を読み込んだ (%d)\n", demo_arcname, base_status); + } else { + // "event manager: BASE_DEMO couldn't be loaded" + OS_REPORT("event manager: BASE_DEMO[%s]は読み込めなかった\n", demo_arcname); + } + #endif + } else { + // "event manager: BASE_DEMO not available." + OS_REPORT("event manager: BASE_DEMOはありません。\n"); } + mDataLoaded = true; } } /* 80046904-800469EC 041244 00E8+00 0/0 1/1 0/0 .text roomInit__16dEvent_manager_cFi */ void dEvent_manager_c::roomInit(int roomNo) { + // "event manager: room data init!! (%d)" + OS_REPORT("event manager: \x1b[31m部屋データ初期化!!(%d)\n\x1b[m", roomNo); + if (roomNo == -1) { roomNo = dComIfGp_roomControl_getStayNo(); } - char arc_name[8]; - strcpy(arc_name, dComIfG_getRoomArcName(roomNo)); - char* data = (char*)dComIfG_getStageRes(arc_name, DataFileName); + + char arcname[8]; + strcpy(arcname, dComIfG_getRoomArcName(roomNo)); + char* res = (char*)dComIfG_getStageRes(arcname, DataFileName); int i; - int eventIdx = -1; - for (i = 4; i <= 9; i++) { + int room_idx = -1; + for (i = BASE_ROOM0; i <= BASE_ROOM5; i++) { if (mEventList[i].getHeaderP() == NULL) { - eventIdx = i; + room_idx = i; continue; } if (mEventList[i].roomNo() == roomNo) { - eventIdx = i; + room_idx = i; break; } } - if (eventIdx != -1) { - mEventList[eventIdx].init(data, roomNo); + int base_status; + if (room_idx != -1) { + base_status = mEventList[room_idx].init(res, roomNo); } + mRoomNo = roomNo; + +#if DEBUG + if (room_idx == -1) { + // "event manager: BASE_ROOM no free space." + OS_REPORT("event manager: BASE_ROOM空きがなかった。\n"); + } else if (base_status != 0) { + // "event manager: BASE_ROOM:%d[%s] loaded (%d)" + OS_REPORT("event manager: BASE_ROOM:%d[%s]を読み込んだ (%d)\n", room_idx, arcname, base_status); + } else { + // "event manager: BASE_ROOM[%s] couldn't be loaded" + OS_REPORT("event manager: BASE_ROOM[%s]は読み込めなかった\n", arcname); + } +#endif } void dEvent_manager_c::roomFinish(int roomNo) { - for (int i = 4; i <= 9; i++) { + int i; + for (i = BASE_ROOM0; i <= BASE_ROOM5; i++) { if (mEventList[i].getHeaderP() != NULL && roomNo == mEventList[i].roomNo()) { + // "event manager: BASE_ROOM:%d[%s] delete." + OS_REPORT("event manager: BASE_ROOM:%d[%s]削除。\n", i, dComIfG_getRoomArcName(roomNo)); mEventList[i].init(); } } @@ -206,135 +451,226 @@ void dEvent_manager_c::roomFinish(int roomNo) { /* 80046A58-80046C0C 041398 01B4+00 0/0 1/1 0/0 .text orderStartDemo__16dEvent_manager_cFv */ int dEvent_manager_c::orderStartDemo() { BOOL success = FALSE; - if (mEventException.mEventInfoIdx == -2) { + fopAc_ac_c* var_r26 = NULL; + + if (mException.mEventInfoIdx == -2) { return -2; } - s16 eventIdx; - if (200 < mEventException.mEventInfoIdx && mEventException.mEventInfoIdx < 215) { - eventIdx = getEventIdx(mEventException.getEventName(), -1, -1); - success = fopAcM_orderOtherEventId(NULL, eventIdx, 0xFF, 0xFFFF, 5, 1); - } else if (mEventException.mEventInfoIdx != -1 && mEventException.mEventInfoIdx != 0xFF) { - u8 eventInfoIdx = mEventException.mEventInfoIdx; - eventIdx = getEventIdx(NULL, eventInfoIdx, -1); - success = fopAcM_orderMapToolAutoNextEvent(NULL, eventInfoIdx, eventIdx, 0xFFFF, 1, 5); + s16 evId; + if (200 < mException.mEventInfoIdx && mException.mEventInfoIdx < 215) { + evId = getEventIdx(mException.getEventName(), 0xFF, -1); + OS_REPORT("event manager: event ID %d (%s) order as soecial %d\n", evId, mException.getEventName(), mException.mEventInfoIdx); + + success = fopAcM_orderOtherEventId(var_r26, evId, 0xFF, 0xFFFF, 5, 1); + } else if (mException.mEventInfoIdx != -1 && mException.mEventInfoIdx != 0xFF) { + u8 eventInfoIdx = mException.mEventInfoIdx; + daPy_py_c* spC = daPy_getPlayerActorClass(); + evId = getEventIdx(NULL, eventInfoIdx, -1); + OS_REPORT("event manager: event ID %d order as maptool %d\n", evId, mException.mEventInfoIdx); + JUT_ASSERT(679, evId != (-1)); + + success = fopAcM_orderMapToolAutoNextEvent(var_r26, eventInfoIdx, evId, 0xFFFF, 1, 5); } else if (dComIfGp_getStartStagePoint() == -2 || dComIfGp_getStartStagePoint() == -3) { - eventIdx = getEventIdx( - daPy_py_c::checkNowWolf() ? "WOLF_WORLD_CHANGE_OUT" : "WORLD_CHANGE_OUT", 0xFF, -1); - success = fopAcM_orderOtherEventId(NULL, eventIdx, 0xFF, 0xFFFF, 5, 1); + evId = getEventIdx( daPy_py_c::checkNowWolf() ? "WOLF_WORLD_CHANGE_OUT" : "WORLD_CHANGE_OUT", 0xFF, -1); + OS_REPORT("event manager: event ID %d (WORLD_CHANGE_OUT) order for [%d]\n", evId, mException.mEventInfoIdx); + + success = fopAcM_orderOtherEventId(var_r26, evId, 0xFF, 0xFFFF, 5, 1); } if (success == FALSE) { - eventIdx = getEventIdx("DEFAULT_START", 0xFF, -1); - fopAcM_orderOtherEventId(NULL, eventIdx, 0xFF, 0xFFFF, 5, 1); + evId = getEventIdx("DEFAULT_START", 0xFF, -1); + OS_REPORT("event manager: event ID %d (DEFAULT_START) order for [%d]\n", evId, mException.mEventInfoIdx); + + fopAcM_orderOtherEventId(var_r26, evId, 0xFF, 0xFFFF, 5, 1); } - return eventIdx; + return evId; } void dEvent_manager_c::remove() { - for (int i = 0; i < 11; i++) { + int i; + for (i = 0; i < BASE_MAX; i++) { mEventList[i].init(); } + mCameraPlay = 0; - mEventException.init(); + mException.init(); mFlags.init(); + +#if DEBUG + if (l_HIO.field_0x004 >= 0) { + mDoHIO_DELETE_CHILD(l_HIO.field_0x004); + l_HIO.field_0x004 = -1; + } +#endif } /* 80046C74-80046C88 0415B4 0014+00 1/1 0/0 0/0 .text extraOnObjectCallBack__FP10fopAc_ac_cPv */ -static int extraOnObjectCallBack(fopAc_ac_c* pActor, void* param_1) { - fopAcM_OnStatus(pActor, 0x800); - return 0; +static void* extraOnObjectCallBack(fopAc_ac_c* actor, void* data) { + fopAcM_OnStatus(actor, fopAcM_STATUS_UNK_0x800); + return NULL; } /* 80046C88-80046C9C 0415C8 0014+00 1/1 0/0 0/0 .text extraOffObjectCallBack__FP10fopAc_ac_cPv */ -static int extraOffObjectCallBack(fopAc_ac_c* pActor, void* param_1) { - fopAcM_OffStatus(pActor, 0x800); - return 0; +static void* extraOffObjectCallBack(fopAc_ac_c* actor, void* data) { + fopAcM_OffStatus(actor, fopAcM_STATUS_UNK_0x800); + return NULL; } /* 80046C9C-80046CB8 0415DC 001C+00 1/1 0/0 0/0 .text allOffObjectCallBack__FP10fopAc_ac_cPv */ -static int allOffObjectCallBack(fopAc_ac_c* pActor, void* param_1) { - fopAcM_OffStatus(pActor, 0x9000); - return 0; +static void* allOffObjectCallBack(fopAc_ac_c* actor, void* data) { + fopAc_ac_c* spC = (fopAc_ac_c*)data; + + fopAcM_OffStatus(actor, fopAcM_STATUS_UNK_0x8000 | fopAcM_STATUS_UNK_0x1000); + return NULL; } /* 80046CB8-80046DA0 0415F8 00E8+00 1/1 0/0 0/0 .text * startProc__16dEvent_manager_cFP12dEvDtEvent_c */ -void dEvent_manager_c::startProc(dEvDtEvent_c* p_evnt) { - for (int i = 0; i < p_evnt->getNStaff(); i++) { - dEvDtStaff_c* staff = getBase().getStaffP(p_evnt->getStaff(i)); +void dEvent_manager_c::startProc(dEvDtEvent_c* event) { + #if DEBUG + if (l_HIO.m_evm_debug) { + // "event manager: event %s started!!" + OS_REPORT("\x1b[34m%06d: event manager: %sのイベント開始!!\n\x1b[m", g_Counter.mCounter0, event->getName()); + } + #endif + + dEvDtStaff_c* staff; + fopAc_ac_c* event_actor_p; + int staffNo; + + int i; + for (i = 0; i < event->getNStaff(); i++) { + staffNo = event->getStaff(i); + staff = getBase().getStaffP(staffNo); if (staff->getType() == dEvDtStaff_c::TYPE_DEFAULT) { - fopAc_ac_c* ac = specialCast(staff->getName(), 1); - if (ac == NULL) { - ac = fopAcM_searchFromName4Event(staff->getName(), -1); + #if DEBUG + if (l_HIO.m_evm_debug) { + // "participant %s" + OS_REPORT("参加者 %s\n", staff->getName()); + } + #endif + + event_actor_p = specialCast(staff->getName(), 1); + if (event_actor_p == NULL) { + event_actor_p = fopAcM_searchFromName4Event(staff->getName(), -1); } - if (ac != NULL) { - fopAcM_OnStatus(ac, 0x8000); + if (event_actor_p != NULL) { + fopAcM_OnStatus(event_actor_p, fopAcM_STATUS_UNK_0x8000); + // "event manager: C:Staff ON %s!!" + OS_REPORT("\x1B[34m%06d: event manager: C:スタッフ ON %s!!\n\x1B[m", g_Counter.mCounter0, dStage_getName(fopAcM_GetProfName(event_actor_p), -1)); + } else { + #if DEBUG + if (l_HIO.m_evm_debug) { + // "No actor for demo!! Name<%s>" + OS_REPORT("デモの出演者がいません!! 名前<%s>\n", staff->getName()); + } + #endif } } if (staff->getType() == dEvDtStaff_c::TYPE_ALL) { + #if DEBUG + if (l_HIO.m_evm_debug) { + // "bystander %s" + OS_REPORT("傍観者 %s\n", staff->getName()); + } + #endif + issueStaff(staff->getName()); } + staff->init(); } - p_evnt->mEventState = 1; + event->mEventState = dEvDt_State_START_e; mFlags.init(); } /* 80046DA0-80046DAC 0416E0 000C+00 2/2 0/0 0/0 .text * closeProc__16dEvent_manager_cFP12dEvDtEvent_c */ -void dEvent_manager_c::closeProc(dEvDtEvent_c* p_evnt) { - p_evnt->mEventState = 2; +void dEvent_manager_c::closeProc(dEvDtEvent_c* event) { + event->mEventState = dEvDt_State_END_e; } /* 80046DAC-80046E64 0416EC 00B8+00 0/0 2/2 0/0 .text endProc__16dEvent_manager_cFsi */ -void dEvent_manager_c::endProc(s16 eventID, int close) { - dEvDtEvent_c* event = getEventData(eventID); - if (event != NULL) { - if (close != 0) { - closeProc(event); - } - - if (event->mEventState == 2) { - const char* param = "ALL"; - fopAcM_Search((fopAcIt_JudgeFunc)allOffObjectCallBack, (void*)param); - mCameraPlay = 2; - event->mEventState = 0; - mCurrentEventType = 0; - mCurrentEventCompositId = -1; - dComIfGp_getEvent().setPtD(NULL); - dComIfGp_getEvent().setPtI(NULL); - } +void dEvent_manager_c::endProc(s16 evId, BOOL isClose) { + #if DEBUG + if (l_HIO.m_evm_debug) { + // "event manager: evId = %d event end process!!" + OS_REPORT("\x1b[34m%06d: event manager: evId = %d の イベント終了処理!! \n\x1b[m", g_Counter.mCounter0, evId); } + #endif + + dEvDtEvent_c* event = getEventData(evId); + + if (event == NULL) { + #if DEBUG + if (l_HIO.m_evm_debug) { + // "event manager: event not found!!" + OS_REPORT("\x1b[31mイベントが見つからない!!\n\x1b[m"); + } + #endif + return; + } + + if (isClose) { + closeProc(event); + } + + if (event->mEventState != dEvDt_State_END_e) { + #if DEBUG + if (l_HIO.m_evm_debug) { + // "%s(%d) event not in end state!! state = %d" + OS_REPORT("%s(%d) イベントが終了条件でない!! state = %d\n", getBase().getEventName(evId), evId, event->mEventState); + } + #endif + return; + } + + const char* param = "ALL"; + fopAcM_Search((fopAcIt_JudgeFunc)allOffObjectCallBack, (void*)param); + mCameraPlay = 2; + event->mEventState = 0; + mCurrentEvType = 0; + mCurrentEvId = -1; + dComIfGp_getEvent().setPtD(NULL); + dComIfGp_getEvent().setPtI(NULL); } /* 80046E64-800473FC 0417A4 0598+00 0/0 1/1 0/0 .text Sequencer__16dEvent_manager_cFv */ void dEvent_manager_c::Sequencer() { dEvt_control_c& evtControl = dComIfGp_getEvent(); - dEvDtEvent_c* event = getEventData(mCurrentEventCompositId); - dStage_MapEvent_dt_c* mapEvent = evtControl.getStageEventDt(); + dEvDtEvent_c* event = getEventData(mCurrentEvId); + dStage_MapEvent_dt_c* mapdata = evtControl.getStageEventDt(); if (event != NULL) { if (evtControl.chkEventFlag(0x100)) { char* name = NULL; - if (mapEvent != NULL) { - switch (mapEvent->mType) { - case 0: + if (mapdata != NULL) { + switch (mapdata->type) { + case dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA: default: break; - case 1: - case 2: - name = mapEvent->mName; + case dStage_MapEvent_dt_TYPE_ZEV: + case dStage_MapEvent_dt_TYPE_STB: + name = mapdata->data.event_name; break; } - if (dStage_MapEvent_dt_c_getEventSCutSW(mapEvent) != 0 && !evtControl.chkFlag2(2)) { - if (dStage_MapEvent_dt_c_getEventSCutType(mapEvent) == 2) { + if ( + #if DEBUG + (dStage_MapEvent_dt_c_getEventSCutSW(mapdata) != 0 || l_HIO.m_enable_skip) && + #else + dStage_MapEvent_dt_c_getEventSCutSW(mapdata) != 0 && + #endif + !evtControl.chkFlag2(2) + ) { + int scut_type = dStage_MapEvent_dt_c_getEventSCutType(mapdata); + if (scut_type == 2) { evtControl.onSkipFade(); } @@ -348,20 +684,21 @@ void dEvent_manager_c::Sequencer() { } if (actor != NULL) { - switch (mapEvent->mType) { - case 2: + switch (mapdata->type) { + case dStage_MapEvent_dt_TYPE_STB: evtControl.setSkipProc(actor, dEv_defaultSkipStb, 0); break; - case 1: + case dStage_MapEvent_dt_TYPE_ZEV: evtControl.setSkipProc(actor, dEv_defaultSkipZev, 0); break; - case 0: + case dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA: evtControl.setSkipProc(actor, dEv_defaultSkipProc, 0); break; } } } } + Z2GetAudioMgr()->setDemoName(name); } @@ -371,28 +708,25 @@ void dEvent_manager_c::Sequencer() { bVar1 = true; } - int exit = -1; - bool iVar5; - if (evtControl.chkFlag2(2)) { - iVar5 = true; - } else { - iVar5 = false; - } + int exitId = -1; + bool iVar5 = evtControl.chkFlag2(2) != 0; - if (mapEvent != NULL) { - int cutType = dStage_MapEvent_dt_c_getEventSCutType(mapEvent); - if (iVar5 && cutType != 1) { + if (mapdata != NULL) { + int scut_type = dStage_MapEvent_dt_c_getEventSCutType(mapdata); + if (iVar5 && scut_type != 1) { bVar1 = true; - cXyz attentionPos(dComIfGp_getPlayer(0)->attention_info.position); - cXyz camCenter = dCam_getBody()->Center(); - f32 distance = cXyz((attentionPos - camCenter)).abs(); + cXyz pl_attn_pos(dComIfGp_getPlayer(0)->attention_info.position); + cXyz cam_center = dCam_getBody()->Center(); + f32 distance = cXyz((pl_attn_pos - cam_center)).abs(); - if (cutType == 0) { + OS_REPORT("camera: event manager: skip after %d (%f)\n", scut_type, distance); + + if (scut_type == 0) { if (distance > 180) { dCam_getBody()->EventRecoverNotime(); } } else { - switch (mapEvent->field_0x3) { + switch (mapdata->field_0x3) { case 1: case 2: if (distance > 180) { @@ -406,9 +740,9 @@ void dEvent_manager_c::Sequencer() { } } - switch (mapEvent->mType) { - case 0: - switch (mapEvent->mSeType) { + switch (mapdata->type) { + case dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA: + switch (mapdata->data.maptool.sound_type) { case EVT_SE_RIDDLE_A: mDoAud_seStart(Z2SE_READ_RIDDLE_A, NULL, 0, 0); break; @@ -418,53 +752,55 @@ void dEvent_manager_c::Sequencer() { } if (!bVar1) { - if (iVar5 && mapEvent->field_0x9 != 0xFF) { - exit = mapEvent->field_0x9; - evtControl.sceneChange(exit); - } else if (mapEvent->field_0x17 != 0xFF) { - exit = mapEvent->field_0x17; - evtControl.sceneChange(exit); + if (iVar5 && mapdata->field_0x9 != 0xFF) { + exitId = mapdata->field_0x9; + evtControl.sceneChange(exitId); + } else if (mapdata->data.maptool.field_0x17 != 0xFF) { + exitId = mapdata->data.maptool.field_0x17; + evtControl.sceneChange(exitId); + } + } + + if (mapdata->field_0x7 != 0xFF) {} + break; + case dStage_MapEvent_dt_TYPE_STB: + if (!bVar1) { + if (iVar5 && mapdata->field_0x9 != 0xFF) { + exitId = mapdata->field_0x9; + evtControl.sceneChange(exitId); + } else if (mapdata->field_0x7 != 0xFF) { + exitId = mapdata->field_0x7; + evtControl.sceneChange(exitId); } } break; - case 2: + case dStage_MapEvent_dt_TYPE_ZEV: if (!bVar1) { - if (iVar5 && mapEvent->field_0x9 != 0xFF) { - exit = mapEvent->field_0x9; - evtControl.sceneChange(exit); - } else if (mapEvent->field_0x7 != 0xFF) { - exit = mapEvent->field_0x7; - evtControl.sceneChange(exit); - } - } - break; - case 1: - if (!bVar1) { - if (iVar5 && mapEvent->field_0x9 != 0xFF) { - exit = mapEvent->field_0x9; - evtControl.sceneChange(exit); - } else if (mapEvent->field_0x7 != 0xFF) { - exit = mapEvent->field_0x7; - evtControl.sceneChange(exit); + if (iVar5 && mapdata->field_0x9 != 0xFF) { + exitId = mapdata->field_0x9; + evtControl.sceneChange(exitId); + } else if (mapdata->field_0x7 != 0xFF) { + exitId = mapdata->field_0x7; + evtControl.sceneChange(exitId); } } break; } } - if (exit == -1) { + if (exitId == -1) { getBase().advanceCut(event); closeProc(event); evtControl.reset(); } } else { - if (event->mEventState == 1) { + if (event->mEventState == dEvDt_State_START_e) { getBase().advanceCut(event); } } - if (field_0x1b8 != 0) { - field_0x1b8--; + if (unk_0x1b8 != 0) { + unk_0x1b8--; } } else { if (evtControl.chkEventFlag(0x100)) { @@ -475,59 +811,64 @@ void dEvent_manager_c::Sequencer() { /* 800473FC-80047454 041D3C 0058+00 0/0 1/1 0/0 .text Experts__16dEvent_manager_cFv */ void dEvent_manager_c::Experts() { - dEvDtEvent_c* event = getEventData(mCurrentEventCompositId); - if (event != NULL && event->mEventState == 1) { - event->specialStaffProc(getBase().getStaffP(0)); + dEvDtEvent_c* event = getEventData(mCurrentEvId); + if (event != NULL && event->mEventState == dEvDt_State_START_e) { + event->specialStaffProc(getBase().getStaffP()); } } /* 80047454-800474BC 041D94 0068+00 1/1 0/0 0/0 .text getEventData__16dEvent_manager_cFsi */ -dEvDtEvent_c* dEvent_manager_c::getEventData(s16 param_0, int idx) { - if (idx <= 0 || idx > 11) { +dEvDtEvent_c* dEvent_manager_c::getEventData(s16 evIdx, int evType) { + if (evType <= 0 || evType > BASE_MAX) { + return NULL; + } + + dEvDtBase_c* base = &mEventList[evType]; + if (base == NULL || base->getHeaderP() == NULL) { + return NULL; + } else if (evIdx < 0 || evIdx >= base->getEventNum()) { return NULL; } else { - dEvDtBase_c* base = &mEventList[idx]; - - if (base == NULL || base->getHeaderP() == NULL) { - return NULL; - } else if (param_0 < 0 || param_0 >= base->getEventNum()) { - return NULL; - } else { - return base->getEventP(param_0); - } + return base->getEventP(evIdx); } + return NULL; } /* 800474BC-80047514 041DFC 0058+00 9/9 3/3 4/4 .text getEventData__16dEvent_manager_cFs */ -dEvDtEvent_c* dEvent_manager_c::getEventData(s16 eventCompositId) { - if (eventCompositId == -1) { +dEvDtEvent_c* dEvent_manager_c::getEventData(s16 evCompositId) { + if (evCompositId == -1) { return NULL; } else { - return getEventData(getIndexCompositId(eventCompositId), - getTypeCompositId(eventCompositId)); + return getEventData(getIndexCompositId(evCompositId), + getTypeCompositId(evCompositId)); } } /* 80047514-80047698 041E54 0184+00 3/3 8/8 3/3 .text getEventIdx__16dEvent_manager_cFPCcUcl */ -s16 dEvent_manager_c::getEventIdx(char const* eventName, u8 mapToolID, s32 roomNo) { +s16 dEvent_manager_c::getEventIdx(const char* eventName, u8 mapToolID, s32 roomNo) { + static char map_tool_name[17]; + if (roomNo == -1) { roomNo = dComIfGp_roomControl_getStayNo(); } + int index, type; + dStage_MapEvent_dt_c* mapdata = NULL; if (mapToolID != 0xFF) { - dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(mapToolID, roomNo); - if (data != NULL) { - switch (data->mType) { - case 1: - case 2: - return getEventIdx(data->mName, 0xFF, roomNo); - case 0: - static char map_tool_name[17]; + mapdata = dEvt_control_c::searchMapEventData(mapToolID, roomNo); + if (mapdata != NULL) { + switch (mapdata->type) { + case dStage_MapEvent_dt_TYPE_ZEV: + case dStage_MapEvent_dt_TYPE_STB: + return getEventIdx(mapdata->data.event_name, 0xFF, roomNo); + case dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA: sprintf(map_tool_name, "MapToolCamera%d", mapToolID); return getEventIdx(map_tool_name, 0xFF, roomNo); + default: + JUT_ASSERT(1278, 0); } } } @@ -536,58 +877,67 @@ s16 dEvent_manager_c::getEventIdx(char const* eventName, u8 mapToolID, s32 roomN return -1; } - dEvDtBase_c* event; - int j; - int i; - for (i = ARRAY_SIZEU(mEventList) - 1; i >= 1; i--) { - if (i < 4 || 9 < i || roomNo == mEventList[i].roomNo()) { - event = &mEventList[i]; - if (event->getHeaderP() != NULL) { - for (j = 0; j < event->getHeaderP()->eventNum; j++) { - if (strcmp(eventName, event->getEventName(j)) == 0) { - return makeCompositId(j, i); + for (type = BASE_MAX - 1; type >= BASE_KEEP; type--) { + if (type < BASE_ROOM0 || BASE_ROOM5 < type || roomNo == mEventList[type].roomNo()) { + if (mEventList[type].getHeaderP() != NULL) { + for (index = 0; index < mEventList[type].getEventNum(); index++) { + if (strcmp(eventName, mEventList[type].getEventName(index)) == 0) { + return makeCompositId(index, type); } } } } } + return -1; } /* 80047698-80047758 041FD8 00C0+00 0/0 3/3 25/25 .text * getEventIdx__16dEvent_manager_cFP10fopAc_ac_cUc */ -s16 dEvent_manager_c::getEventIdx(fopAc_ac_c* pActor, u8 mapToolID) { - dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(mapToolID, fopAcM_GetRoomNo(pActor)); - if (data != NULL) { - switch (data->mType) { - case 1: - case 2: - return getEventIdx(pActor, data->mName, 0xFF); - case 0: - static char map_tool_name[17]; +s16 dEvent_manager_c::getEventIdx(fopAc_ac_c* actor, u8 mapToolID) { + static char map_tool_name[17]; + + s32 roomNo = fopAcM_GetRoomNo(actor); + dStage_MapEvent_dt_c* mapdata = NULL; + + mapdata = dEvt_control_c::searchMapEventData(mapToolID, roomNo); + if (mapdata != NULL) { + switch (mapdata->type) { + case dStage_MapEvent_dt_TYPE_ZEV: + case dStage_MapEvent_dt_TYPE_STB: + return getEventIdx(actor, mapdata->data.event_name, 0xFF); + case dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA: sprintf(map_tool_name, "MapToolCamera%d", mapToolID); - return getEventIdx(pActor, map_tool_name, 0xFF); + return getEventIdx(actor, map_tool_name, 0xFF); + default: + JUT_ASSERT(1341, 0); } } + return -1; } /* 80047758-80047930 042098 01D8+00 1/1 10/10 92/92 .text * getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc */ -s16 dEvent_manager_c::getEventIdx(fopAc_ac_c* pActor, char const* eventName, u8 mapToolID) { - s8 actorRoomNo = fopAcM_GetRoomNo(pActor); +s16 dEvent_manager_c::getEventIdx(fopAc_ac_c* actor, const char* eventName, u8 mapToolID) { + static char map_tool_name[17]; + s32 actorRoomNo = fopAcM_GetRoomNo(actor); + + int type, index; + dStage_MapEvent_dt_c* mapdata = NULL; if (mapToolID != 0xFF) { - dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(mapToolID, actorRoomNo); - if (data != NULL) { - switch (data->mType) { - case 1: - case 2: - return getEventIdx(pActor, data->mName, 0xFF); - case 0: - static char map_tool_name[17]; + mapdata = dEvt_control_c::searchMapEventData(mapToolID, actorRoomNo); + if (mapdata != NULL) { + switch (mapdata->type) { + case dStage_MapEvent_dt_TYPE_ZEV: + case dStage_MapEvent_dt_TYPE_STB: + return getEventIdx(actor, mapdata->data.event_name, 0xFF); + case dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA: sprintf(map_tool_name, "MapToolCamera%d", mapToolID); - return getEventIdx(pActor, map_tool_name, 0xFF); + return getEventIdx(actor, map_tool_name, 0xFF); + default: + JUT_ASSERT(1376, 0); } } } @@ -596,285 +946,335 @@ s16 dEvent_manager_c::getEventIdx(fopAc_ac_c* pActor, char const* eventName, u8 return -1; } - dEvDtBase_c* event; - int j; - int type; - for (type = ARRAY_SIZEU(mEventList) - 1; type >= 1; type--) { - dEvDtBase_c* eventP = &mEventList[type]; - dEvDtBase_c event; - if (type < 4 || 9 < type || actorRoomNo == mEventList[type].roomNo()) { - if (pActor != NULL && type == 2 && pActor->eventInfo.getArchiveName() != NULL) { - event.init( - (char*)dComIfG_getObjectRes(pActor->eventInfo.getArchiveName(), DataFileName), - -1); - eventP = &event; + for (type = BASE_MAX - 1; type >= BASE_KEEP; type--) { + dEvDtBase_c* base = &mEventList[type]; + dEvDtBase_c actor_event; + if (type < BASE_ROOM0 || BASE_ROOM5 < type || actorRoomNo == mEventList[type].roomNo()) { + if (actor != NULL && type == BASE_ACTOR) { + char* arcname = actor->eventInfo.getArchiveName(); + if (arcname != NULL) { + char* data = (char*)dComIfG_getObjectRes(arcname, DataFileName); + actor_event.init(data, -1); + base = &actor_event; + } } - if (eventP->getHeaderP() != NULL) { - for (j = 0; j < eventP->getHeaderP()->eventNum; j++) { - if (strcmp(eventName, eventP->getEventName(j)) == 0) { - return makeCompositId(j, type); + + if (base->getHeaderP() != NULL) { + for (index = 0; index < base->getEventNum(); index++) { + if (strcmp(eventName, base->getEventName(index)) == 0) { + return makeCompositId(index, type); } } } } } + return -1; } /* 80047930-80047984 042270 0054+00 0/0 0/0 1/1 .text isMapToolCamera__16dEvent_manager_cFUcl */ -int dEvent_manager_c::isMapToolCamera(u8 mapToolID, s32 roomNo) { +BOOL dEvent_manager_c::isMapToolCamera(u8 mapToolID, s32 roomNo) { if (roomNo == -1) { roomNo = dComIfGp_roomControl_getStayNo(); } - dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(mapToolID, roomNo); - if (data != NULL) { - return data->mType == 0; + dStage_MapEvent_dt_c* mapdata = dEvt_control_c::searchMapEventData(mapToolID, roomNo); + if (mapdata != NULL) { + return mapdata->type == dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA; } else { - return 0; + return FALSE; } } /* 80047984-800479F8 0422C4 0074+00 0/0 6/6 0/0 .text order__16dEvent_manager_cFs */ -int dEvent_manager_c::order(s16 eventCompositId) { - dEvDtEvent_c* event = getEventData(eventCompositId); +int dEvent_manager_c::order(s16 evCompositId) { + dEvDtEvent_c* event = getEventData(evCompositId); if (event == NULL) { return 0; - } else { - mCurrentEventType = getTypeCompositId(eventCompositId); - mCurrentEventCompositId = eventCompositId; - startProc(event); - return 1; } + + #if DEBUG + if (l_HIO.m_evm_debug) { + // "event manager: event(%d) ready!!" + OS_REPORT("\x1b[34m%06d: event manager: イベント(%d)準備状態!! \n\x1b[m", g_Counter.mCounter0, evCompositId); + } + #endif + + mCurrentEvType = getTypeCompositId(evCompositId); + mCurrentEvId = evCompositId; + startProc(event); + return 1; } /* 800479F8-80047A38 042338 0040+00 1/1 0/0 9/9 .text startCheck__16dEvent_manager_cFs */ -int dEvent_manager_c::startCheck(s16 eventCompositId) { - dEvDtEvent_c* event = getEventData(eventCompositId); +int dEvent_manager_c::startCheck(s16 evCompositId) { + dEvDtEvent_c* event = getEventData(evCompositId); if (event == NULL) { - return 0; + return FALSE; + } + + if (event->mEventState == dEvDt_State_START_e) { + return TRUE; } else { - if (event->mEventState == 1) { - return 1; - } else { - return 0; - } + return FALSE; } } /* 80047A38-80047A78 042378 0040+00 0/0 2/2 0/0 .text startCheckOld__16dEvent_manager_cFPCc */ -int dEvent_manager_c::startCheckOld(char const* name) { - return startCheck(getEventIdx(name, 0xFF, -1)); +int dEvent_manager_c::startCheckOld(const char* eventname) { + s16 evId = getEventIdx(eventname, 0xFF, -1); + return startCheck(evId); } /* 80047A78-80047ADC 0423B8 0064+00 1/1 2/2 122/122 .text endCheck__16dEvent_manager_cFs */ int dEvent_manager_c::endCheck(s16 eventID) { - dEvDtEvent_c* event = getEventData(dComIfGp_getEvent().runningEventID(eventID)); + s16 compositId = dComIfGp_getEvent().runningEventID(eventID); + dEvDtEvent_c* event = getEventData(compositId); if (event == NULL) { return 0; + } + + if (event->mEventState == dEvDt_State_END_e) { + return TRUE; } else { - if (event->mEventState == 2) { - return 1; - } else { - return 0; - } + return FALSE; } } /* 80047ADC-80047B1C 04241C 0040+00 0/0 2/2 10/10 .text endCheckOld__16dEvent_manager_cFPCc */ -int dEvent_manager_c::endCheckOld(char const* name) { - return endCheck(getEventIdx(name, 0xFF, -1)); +int dEvent_manager_c::endCheckOld(const char* eventname) { + s16 evId = getEventIdx(eventname, 0xFF, -1); + return endCheck(evId); } /* 80047B1C-80047D4C 04245C 0230+00 1/1 10/10 210/210 .text * getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci */ -int dEvent_manager_c::getMyStaffId(char const* staffName, fopAc_ac_c* pActor, int tagId) { - int staffNum; +int dEvent_manager_c::getMyStaffId(const char* staffName, fopAc_ac_c* actor, int tagId) { int i; + int staff_id; + int n_staff; int evtIdx = -1; - if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) { - return -1; - } else { - if (pActor != NULL) { - evtIdx = pActor->eventInfo.getIdx(); - } - if (mCurrentEventCompositId == -1) { - return -1; - } else { - dEvDtEvent_c* event = getEventData(mCurrentEventCompositId); - if (event != NULL && (event->mEventState == 1 || event->mEventState == 2)) { - int staffCount = event->getNStaff(); - bool hasDp = false; - if (strchr(staffName, ':') != NULL) { - hasDp = true; + if (dComIfGp_getEvent().getMode() == dEvt_mode_WAIT_e) { + return -1; + } + + if (actor != NULL) { + evtIdx = actor->eventInfo.getIdx(); + } + + if (mCurrentEvId == -1) { + return -1; + } + + dEvDtEvent_c* event = getEventData(mCurrentEvId); + if (event != NULL && (event->mEventState == dEvDt_State_START_e || event->mEventState == dEvDt_State_END_e)) { + n_staff = event->getNStaff(); + + bool hasDp = false; + if (strchr(staffName, ':') != NULL) { + hasDp = true; + } + + for (i = 0; i < n_staff; i++) { + staff_id = event->getStaff(i); + dEvDtStaff_c* staff = getBase().getStaffP(staff_id); + if (staff->getType() != dEvDtStaff_c::TYPE_ALL) { + char buf[20]; + strcpy(buf, staff->getName()); + + char* ptr = NULL; + if (!hasDp) { + ptr = std::strchr(buf, ':'); + if (ptr != NULL) { + *ptr = '\0'; + ptr++; + } } - for (i = 0; i < staffCount; i++) { - staffNum = event->getStaff(i); - dEvDtStaff_c* staff = getBase().getStaffP(staffNum); - if (staff->mType != dEvDtStaff_c::TYPE_ALL) { - char buf[0x18]; - strcpy(buf, staff->mName); - char* ptr = NULL; - if (!hasDp) { - char* tmpPtr = strchr(buf, ':'); - ptr = tmpPtr; - if (tmpPtr != NULL) { - *tmpPtr = '\0'; - ptr++; + if (strcmp(staffName, buf) == 0 && (tagId < 0 || tagId == staff->getTagID())) { + s16 num = 0; + if (ptr != NULL) { + while (*ptr != '\0') { + if (*ptr < '0' || '9' < *ptr) { + num = 0; + break; } + num = *ptr - '0' + num * 10; + ptr++; } - if (strcmp(staffName, buf) == 0 && (tagId < 0 || tagId == staff->mTagID)) { - s16 num = 0; - if (ptr != NULL) { - char c; - while ((c = *ptr) != '\0') { - if (c < '0' || '9' < c) { - num = 0; - break; - } - num = c - '0' + num * 10; - ptr++; - } - if (evtIdx < 0 || num == evtIdx) { - return staffNum; - } - } else { - return staffNum; - } - } - - if (strcmp(staffName, "Alink") == 0 && strcmp("Link", buf) == 0 && - tagId == staff->mTagID) - { - return staffNum; + if (evtIdx < 0 || num == evtIdx) { + return staff_id; } + } else { + return staff_id; } } + + if (strcmp(staffName, "Alink") == 0 && strcmp("Link", buf) == 0 && + tagId == staff->getTagID()) + { + return staff_id; + } } } } + return -1; } /* 80047D4C-80047DAC 04268C 0060+00 0/0 9/9 417/417 .text getIsAddvance__16dEvent_manager_cFi */ -int dEvent_manager_c::getIsAddvance(int staffIdx) { - if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) { +int dEvent_manager_c::getIsAddvance(int staffId) { + if (dComIfGp_getEvent().getMode() == dEvt_mode_WAIT_e) { + if (OREG_F(8)) { + // "%s: %d: events not running so don't call." + OS_REPORT("%s: %d: イベント走ってないので呼ばないでください。\n", __FILE__, 1672); + } return 0; - } else if (staffIdx == -1) { + } else if (staffId == -1) { return 0; - } else if (mCurrentEventCompositId == -1) { + } else if (mCurrentEvId == -1) { return 0; } else { - return getBase().getStaffP(staffIdx)->field_0x40; + return getBase().getStaffP(staffId)->field_0x40; } } /* 80047DAC-80047E10 0426EC 0064+00 1/1 0/0 0/0 .text dEvmng_strcmp__FPCcPc */ -static int dEvmng_strcmp(char const* strA, char* strB) { +static int dEvmng_strcmp(const char* strA, char* strB) { u32 len = 0; - while (*strA != '\0') { - if (*strB == '\0') { + while (strA[len] != '\0') { + if (strB[len] == '\0') { return 1; } + if (len >= 100) { return -1; } - if (*strA != *strB) { + + if (strA[len] != strB[len]) { return 1; } + len++; - strA++; - strB++; } + return 0; } /* 80047E10-80047F5C 042750 014C+00 1/1 1/1 118/118 .text * getMyActIdx__16dEvent_manager_cFiPCPCciii */ -int dEvent_manager_c::getMyActIdx(int staffIdx, char const* const* param_1, int param_2, - int param_3, int param_4) { - if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) { +int dEvent_manager_c::getMyActIdx(int staffId, const char* const* action, int n_action, + BOOL param_3, BOOL param_4) { + if (dComIfGp_getEvent().getMode() == dEvt_mode_WAIT_e) { + if (OREG_F(8)) { + // "%s: %d: events not running so don't call." + OS_REPORT("%s: %d: イベント走ってないので呼ばないでください。\n", __FILE__, 1733); + } return 0; - } else if (staffIdx == -1) { + } else if (staffId == -1) { return -1; - } else if (mCurrentEventCompositId == -1) { + } else if (mCurrentEvId == -1) { return -1; } - dEvDtStaff_c* staff = getBase().getStaffP(staffIdx); - if (staff) { - if (staff->field_0x41 != false && param_3 == 0) { + dEvDtStaff_c* staff = getBase().getStaffP(staffId); + if (staff != NULL) { + if (staff->field_0x41 != false && !param_3) { return staff->field_0x3c; } } else { + // "event: getMyActIdx(): staff ID %d data not found." + OS_REPORT_ERROR("event: getMyActIdx(): スタッフID %d のデータが見つかりません。\n", staffId); return -1; } int i; - char* nowCutName = getMyNowCutName(staffIdx); + char* nowCutName = getMyNowCutName(staffId); if (nowCutName == NULL) { staff->field_0x3c = -1; + // "event: getMyActIdx(): staff %s is not an active participant." + OS_REPORT_ERROR("event: getMyActIdx(): スタッフ %s はアクティブな参加者ではありません。\n", staff->getName()); return -1; - } else { - staff->field_0x41 = true; - for (i = 0; i < param_2; i++) { - if (param_4 != 0) { - if (dEvmng_strcmp(param_1[i], nowCutName) == 0) { - staff->field_0x3c = i; - return i; - } - } else { - if (strcmp(param_1[i], nowCutName) == 0) { - staff->field_0x3c = i; - return i; - } + } + + staff->field_0x41 = true; + for (i = 0; i < n_action; i++) { + JUT_ASSERT(1772, action[i]); + if (param_4) { + if (dEvmng_strcmp(action[i], nowCutName) == 0) { + staff->field_0x3c = i; + return i; + } + } else { + if (strcmp(action[i], nowCutName) == 0) { + staff->field_0x3c = i; + return i; } } - staff->field_0x3c = -1; } + + staff->field_0x3c = -1; + + if (!param_3) { + // "event: getMyActIdx(): action %s not found. current action %s" + OS_REPORT_ERROR("event: getMyActIdx(): 動作 %s が見つかりません。現在の動作 %s\n", nowCutName, staff->getName()); + } + return 0; } /* 80047F5C-80047FC8 04289C 006C+00 1/1 9/9 62/62 .text getMyNowCutName__16dEvent_manager_cFi */ -char* dEvent_manager_c::getMyNowCutName(int cutIndex) { - if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) { +char* dEvent_manager_c::getMyNowCutName(int staffId) { + dEvDtCut_c* cut; + if (dComIfGp_getEvent().getMode() == dEvt_mode_WAIT_e) { + if (OREG_F(8)) { + // "%s: %d: events not running so don't call." + OS_REPORT("%s: %d: イベント走ってないので呼ばないでください。\n", __FILE__, 1856); + } return NULL; - } else if (cutIndex == -1) { + } else if (staffId == -1) { return NULL; - } else if (mCurrentEventCompositId == -1) { + } else if (mCurrentEvId == -1) { return NULL; } else { - return getBase().getCutStaffCurrentCutP(cutIndex)->getName(); + cut = getBase().getCutStaffCurrentCutP(staffId); + return cut->getName(); } } /* 80047FC8-800480EC 042908 0124+00 2/2 0/0 0/0 .text getMyDataP__16dEvent_manager_cFiPCci */ -dEvDtData_c* dEvent_manager_c::getMyDataP(int index, char const* name, int type) { - if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) { +dEvDtData_c* dEvent_manager_c::getMyDataP(int staffId, const char* dataname, BOOL isSeekStart) { + dEvDtData_c* data; + int index; + dEvDtCut_c* cut; + + if (dComIfGp_getEvent().getMode() == dEvt_mode_WAIT_e) { + if (OREG_F(8)) { + // "%s: %d: events not running so don't call." + OS_REPORT("%s: %d: イベント走ってないので呼ばないでください。\n", __FILE__, 1886); + } return NULL; - } else if (index == -1) { + } else if (staffId == -1) { return NULL; - } else if (mCurrentEventCompositId == -1) { + } else if (mCurrentEvId == -1) { return NULL; } else { - dEvDtCut_c* cut; - if (type != 0) { - cut = getBase().getCutStaffStartCutP(index); + if (isSeekStart) { + cut = getBase().getCutStaffStartCutP(staffId); } else { - cut = getBase().getCutStaffCurrentCutP(index); + cut = getBase().getCutStaffCurrentCutP(staffId); } - int top = cut->getDataTop(); - while (top != -1) { - dEvDtData_c* data = getBase().getDataP(top); - if (!strcmp(name, data->getName())) { + index = cut->getDataTop(); + while (index != -1) { + data = getBase().getDataP(index); + if (strcmp(dataname, data->getName()) == 0) { return data; } - top = data->getNext(); + index = data->getNext(); } return NULL; @@ -883,18 +1283,19 @@ dEvDtData_c* dEvent_manager_c::getMyDataP(int index, char const* name, int type) /* 800480EC-80048144 042A2C 0058+00 0/0 22/22 355/355 .text * getMySubstanceP__16dEvent_manager_cFiPCci */ -void* dEvent_manager_c::getMySubstanceP(int index, char const* name, int type) { - dEvDtData_c* data = getMyDataP(index, name, 0); +void* dEvent_manager_c::getMySubstanceP(int staffId, const char* dataname, int datatype) { + dEvDtData_c* data = getMyDataP(staffId, dataname, FALSE); if (data == NULL) { return NULL; } - return getSubstance(data, type); + + return getSubstance(data, datatype); } /* 80048144-8004817C 042A84 0038+00 0/0 12/12 0/0 .text getMySubstanceNum__16dEvent_manager_cFiPCc */ -int dEvent_manager_c::getMySubstanceNum(int index, char const* name) { - dEvDtData_c* data = getMyDataP(index, name, 0); +int dEvent_manager_c::getMySubstanceNum(int staffId, const char* dataname) { + dEvDtData_c* data = getMyDataP(staffId, dataname, FALSE); if (data == NULL) { return NULL; } else { @@ -904,35 +1305,41 @@ int dEvent_manager_c::getMySubstanceNum(int index, char const* name) { /* 8004817C-800481F4 042ABC 0078+00 1/1 78/78 182/182 .text cutEnd__16dEvent_manager_cFi */ -void dEvent_manager_c::cutEnd(int cutIndex) { - if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) { +void dEvent_manager_c::cutEnd(int staffId) { + dEvDtCut_c* cut; + if (dComIfGp_getEvent().getMode() == dEvt_mode_WAIT_e) { + if (OREG_F(8)) { + // "%s: %d: events not running so don't call." + OS_REPORT("%s: %d: イベント走ってないので呼ばないでください。\n", __FILE__, 1984); + } return; - } else if (cutIndex == -1) { + } else if (staffId == -1) { return; - } else if (mCurrentEventCompositId == -1) { + } else if (mCurrentEvId == -1) { return; } else { - // instruction swap - dEvDtCut_c* cut = getBase().getCutStaffCurrentCutP(cutIndex); + cut = getBase().getCutStaffCurrentCutP(staffId); mFlags.flagSet(cut->getFlagId()); } } /* 800481F4-800482CC 042B34 00D8+00 0/0 4/4 0/0 .text * getEventPrio__16dEvent_manager_cFP10fopAc_ac_cs */ -int dEvent_manager_c::getEventPrio(fopAc_ac_c* pActor, s16 eventCompositId) { +int dEvent_manager_c::getEventPrio(fopAc_ac_c* actor, s16 evCompositId) { dEvDtEvent_c* event = NULL; dEvDtBase_c eventBase; - if (getTypeCompositId(eventCompositId) == 2 && pActor != NULL && - pActor->eventInfo.getArchiveName() != NULL) - { - char* data = (char*)dComIfG_getObjectRes(pActor->eventInfo.getArchiveName(), DataFileName); - eventBase.init(data, -1); - event = eventBase.mEventP; + + if (getTypeCompositId(evCompositId) == 2 && actor != NULL) { + char* arcname = actor->eventInfo.getArchiveName(); + if (arcname != NULL) { + char* data = (char*)dComIfG_getObjectRes(arcname, DataFileName); + eventBase.init(data, -1); + event = eventBase.getEventP(); + } } if (event == NULL) { - event = getEventData(eventCompositId); + event = getEventData(evCompositId); } if (event == NULL) { @@ -944,31 +1351,33 @@ int dEvent_manager_c::getEventPrio(fopAc_ac_c* pActor, s16 eventCompositId) { /* 800482CC-80048348 042C0C 007C+00 1/1 1/1 0/0 .text issueStaff__16dEvent_manager_cFPCc */ -void dEvent_manager_c::issueStaff(char const* name) { - if (!strcmp(name, "ALL")) { +void dEvent_manager_c::issueStaff(const char* staffname) { + if (strcmp(staffname, "ALL") == 0) { fopAcM_Search((fopAcIt_JudgeFunc)extraOnObjectCallBack, NULL); } else { - char nameBuf[0x20]; - strcpy(nameBuf, name); - fopAcM_OnStatus(fopAcM_searchFromName4Event(nameBuf, -1), 0x800); + char nameBuf[32]; + strcpy(nameBuf, staffname); + fopAc_ac_c* actor = fopAcM_searchFromName4Event(nameBuf, -1); + fopAcM_OnStatus(actor, fopAcM_STATUS_UNK_0x800); } } /* 80048348-800483C4 042C88 007C+00 0/0 1/1 0/0 .text cancelStaff__16dEvent_manager_cFPCc */ -void dEvent_manager_c::cancelStaff(char const* name) { - if (!strcmp(name, "ALL")) { +void dEvent_manager_c::cancelStaff(const char* staffname) { + if (!strcmp(staffname, "ALL")) { fopAcM_Search((fopAcIt_JudgeFunc)extraOffObjectCallBack, NULL); } else { - char nameBuf[0x20]; - strcpy(nameBuf, name); - fopAcM_OffStatus(fopAcM_searchFromName4Event(nameBuf, -1), 0x800); + char nameBuf[32]; + strcpy(nameBuf, staffname); + fopAc_ac_c* actor = fopAcM_searchFromName4Event(nameBuf, -1); + fopAcM_OffStatus(actor, fopAcM_STATUS_UNK_0x800); } } /* 800483C4-800483E0 042D04 001C+00 1/1 2/2 38/38 .text setGoal__16dEvent_manager_cFP4cXyz */ -void dEvent_manager_c::setGoal(cXyz* p_goal) { - mGoal = *p_goal; +void dEvent_manager_c::setGoal(cXyz* pos) { + mGoal.set(*pos); } /* 800483E0-800483E8 042D20 0008+00 0/0 1/1 1/1 .text getGoal__16dEvent_manager_cFv */ @@ -978,7 +1387,7 @@ cXyz* dEvent_manager_c::getGoal() { /* 800483E8-8004846C 042D28 0084+00 0/0 5/5 27/27 .text getRunEventName__16dEvent_manager_cFv */ const char* dEvent_manager_c::getRunEventName() { - if (mCurrentEventCompositId == -1) { + if (mCurrentEvId == -1) { return "NO DATA"; } @@ -986,74 +1395,91 @@ const char* dEvent_manager_c::getRunEventName() { return "NO DATA"; } - dEvDtEvent_c* event = getEventData(mCurrentEventCompositId); - if (event != NULL && event->mEventState == 1) { + dEvDtEvent_c* event = getEventData(mCurrentEvId); + if (event != NULL && event->mEventState == dEvDt_State_START_e) { return event->getName(); } else { return "NOT RUNNING"; } } +#if DEBUG +dEvM_HIO_c& dEvent_manager_c::getEventHIO() { + return l_HIO; +} +#endif + struct FindShtrCbPrms { s16 profname; - fopAc_ac_c* mActor; + fopAc_ac_c* actor; }; /* 8004846C-80048520 042DAC 00B4+00 1/1 0/0 0/0 .text findShutterCallBack__FP10fopAc_ac_cPv */ -static fopAc_ac_c* findShutterCallBack(fopAc_ac_c* pActor, void* param_1) { - FindShtrCbPrms* prms = (FindShtrCbPrms*)param_1; - if (prms->profname != fopAcM_GetProfName(pActor)) { +static fopAc_ac_c* findShutterCallBack(fopAc_ac_c* actor, void* data) { + FindShtrCbPrms* prms = (FindShtrCbPrms*)data; + cXyz diff; + + if (prms->profname != fopAcM_GetProfName(actor)) { return NULL; } - cXyz diff = pActor->home.pos - prms->mActor->home.pos; + diff = actor->home.pos - prms->actor->home.pos; if (diff.x < 10 && diff.x > -10 && diff.y < 10 && diff.y > -10 && diff.z < 10 && diff.z > -10) { - return pActor; + return actor; } + return NULL; } /* 80048520-80048618 042E60 00F8+00 1/1 0/0 0/0 .text specialCast_Shutter__16dEvent_manager_cFsi */ -fopAc_ac_c* dEvent_manager_c::specialCast_Shutter(s16 bsTypeId, int param_1) { - FindShtrCbPrms prms; - prms.profname = bsTypeId; - prms.mActor = dComIfGp_getPlayer(0); - fopAc_ac_c* shutterActor = - (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)findShutterCallBack, &prms); +fopAc_ac_c* dEvent_manager_c::specialCast_Shutter(s16 actorName, BOOL param_1) { + fopAc_ac_c* shutterActor = NULL; - if (shutterActor != NULL && param_1 != 0) { + FindShtrCbPrms prms; + prms.profname = actorName; + prms.actor = dComIfGp_getPlayer(0); + + if (prms.actor == NULL) { + JUT_ASSERT(2238, 0); + } + + shutterActor = fopAcM_Search((fopAcIt_JudgeFunc)findShutterCallBack, &prms); + if (shutterActor != NULL && param_1) { cXyz goal(shutterActor->home.pos); - s16 angle = prms.mActor->home.angle.y + 0x8000; + s16 angle = prms.actor->home.angle.y + 0x8000; + goal.x += cM_ssin(angle) * 100; goal.z += cM_scos(angle) * 100; setGoal(&goal); + dComIfGp_getEvent().setPt2(shutterActor); dComIfGp_getEvent().setPtD(shutterActor); } + return shutterActor; } /* 80048618-80048748 042F58 0130+00 1/1 0/0 0/0 .text specialCast__16dEvent_manager_cFPCci */ -fopAc_ac_c* dEvent_manager_c::specialCast(char const* name, int param_1) { +fopAc_ac_c* dEvent_manager_c::specialCast(const char* staffname, BOOL param_1) { fopAc_ac_c* shutterActor = NULL; - if (name == NULL) { - return NULL; + if (staffname == NULL) { + return shutterActor; } - if (!strcmp(name, "SHUTTER_DOOR")) { - shutterActor = specialCast_Shutter(0x226, param_1); + if (strcmp(staffname, "SHUTTER_DOOR") == 0) { + shutterActor = specialCast_Shutter(PROC_KNOB20, param_1); if (shutterActor == NULL) { - shutterActor = specialCast_Shutter(0x228, param_1); + shutterActor = specialCast_Shutter(PROC_BOSS_DOOR, param_1); } if (shutterActor == NULL) { - shutterActor = specialCast_Shutter(0x229, param_1); + shutterActor = specialCast_Shutter(PROC_L1BOSS_DOOR, param_1); } if (shutterActor == NULL) { - shutterActor = specialCast_Shutter(0x22A, param_1); + shutterActor = specialCast_Shutter(PROC_L1MBOSS_DOOR, param_1); } if (shutterActor == NULL) { - shutterActor = specialCast_Shutter(0x22B, param_1); + shutterActor = specialCast_Shutter(PROC_L5BOSS_DOOR, param_1); } if (shutterActor != NULL) { dComIfGp_getEvent().onEventFlag(0x10); @@ -1061,12 +1487,13 @@ fopAc_ac_c* dEvent_manager_c::specialCast(char const* name, int param_1) { } if (shutterActor != NULL) { - if (param_1 != 0) { + if (param_1) { fopAcM_OnStatus(shutterActor, 0x1000); } else { fopAcM_OffStatus(shutterActor, 0x1000); } } + return shutterActor; } @@ -1075,20 +1502,21 @@ static int dEv_talkman_get_action(int param_0) { int staffId = dComIfGp_getEventManager().getMyStaffId("TALKMAN", NULL, -1); if (staffId == -1) { return -1; - } else { - /* 803A82A8-803A82B8 -00001 000C+04 1/1 0/0 0/0 .data action_table$5100 */ - static const char* action_table[] = { - "WAIT", - "TALK0", - "TALK1", - }; - int actIdx = dComIfGp_getEventManager().getMyActIdx(staffId, action_table, - ARRAY_SIZEU(action_table), 0, 0); - if (actIdx == param_0) { - dComIfGp_getEventManager().cutEnd(staffId); - } - return actIdx; } + + static const char* action_table[] = { + "WAIT", + "TALK0", + "TALK1", + }; + + int actIdx = dComIfGp_getEventManager().getMyActIdx(staffId, action_table, ARRAY_SIZE(action_table), FALSE, FALSE); + if (actIdx == param_0) { + dComIfGp_getEventManager().cutEnd(staffId); + } + + return actIdx; + } /* 800487F0-8004882C 043130 003C+00 0/0 0/0 108/108 .text ChkPresentEnd__16dEvent_manager_cFv */ @@ -1099,15 +1527,16 @@ int dEvent_manager_c::ChkPresentEnd() { /* 8004882C-8004886C 04316C 0040+00 0/0 2/2 2/2 .text checkStartDemo__16dEvent_manager_cFv */ int dEvent_manager_c::checkStartDemo() { if (!dComIfGp_getEvent().runCheck()) { - return 0; + return FALSE; } - if (mEventException.mEventInfoIdx == -1) { - return 0; + if (mException.mEventInfoIdx == -1) { + return FALSE; } - if (mEventException.mEventInfoIdx == -2) { - return 0; + if (mException.mEventInfoIdx == -2) { + return FALSE; } - return 1; + + return TRUE; } diff --git a/src/d/d_lib.cpp b/src/d/d_lib.cpp index ec7e54264b..a88d3f67a4 100644 --- a/src/d/d_lib.cpp +++ b/src/d/d_lib.cpp @@ -231,7 +231,7 @@ bool STControl::checkDownTrigger() { u8 dLib_getEventSwitchNo(int param_0) { dStage_MapEvent_dt_c* mapEvent = dEvt_control_c::searchMapEventData(param_0); if (mapEvent != NULL) { - return mapEvent->mSwitch; + return mapEvent->switch_no; } return 0xff; } diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index c530b8de15..5a75945aeb 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -836,7 +836,7 @@ s32 fopAcM_orderTalkEvent(fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, u16 i_prio i_priority = 0x1FF; } - return dComIfGp_event_order(EVT_TYPE_TALK, i_priority, i_flag, 0x14F, i_actorA, i_actorB, -1, + return dComIfGp_event_order(dEvt_type_TALK_e, i_priority, i_flag, 0x14F, i_actorA, i_actorB, -1, -1); } @@ -870,7 +870,7 @@ s32 fopAcM_orderSpeakEvent(fopAc_ac_c* i_actor, u16 i_priority, u16 i_flag) { i_priority = 0x1EA; } - return dComIfGp_event_order(EVT_TYPE_TALK, i_priority, i_flag, 0x14F, dComIfGp_getPlayer(0), + return dComIfGp_event_order(dEvt_type_TALK_e, i_priority, i_flag, 0x14F, dComIfGp_getPlayer(0), i_actor, -1, -1); } @@ -894,7 +894,7 @@ s32 fopAcM_orderDoorEvent(fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, u16 i_prio eventID = dComIfGp_getEventManager().getEventIdx(i_actorA, NULL, toolID); } - return dComIfGp_event_order(EVT_TYPE_DOOR, i_priority, i_flag, -1, i_actorA, i_actorB, eventID, + return dComIfGp_event_order(dEvt_type_DOOR_e, i_priority, i_flag, -1, i_actorA, i_actorB, eventID, toolID); } @@ -911,7 +911,7 @@ s32 fopAcM_orderCatchEvent(fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, u16 i_pri i_priority = 2; } - return dComIfGp_event_order(EVT_TYPE_CATCH, i_priority, i_flag, -1, i_actorA, i_actorB, -1, -1); + return dComIfGp_event_order(dEvt_type_CATCH_e, i_priority, i_flag, -1, i_actorA, i_actorB, -1, -1); } /* 8001B3CC-8001B4E0 015D0C 0114+00 0/0 2/2 6/6 .text @@ -938,7 +938,7 @@ s32 fopAcM_orderOtherEvent(fopAc_ac_c* i_actor, char const* i_eventName, u16 par eventPrio = i_priority; } - return dComIfGp_event_order(EVT_TYPE_OTHER, eventPrio, i_flag, param_2, i_actor, + return dComIfGp_event_order(dEvt_type_OTHER_e, eventPrio, i_flag, param_2, i_actor, event_second_actor(i_flag), eventIdx, -1); } @@ -966,7 +966,7 @@ s32 fopAcM_orderOtherEvent(fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, char cons eventPrio = i_priority; } - return dComIfGp_event_order(EVT_TYPE_OTHER, eventPrio, i_flag, param_3, i_actorA, i_actorB, + return dComIfGp_event_order(dEvt_type_OTHER_e, eventPrio, i_flag, param_3, i_actorA, i_actorB, eventIdx, -1); } @@ -978,7 +978,7 @@ s32 fopAcM_orderChangeEventId(fopAc_ac_c* i_actor, s16 i_eventID, u16 i_flag, u1 eventPrio = 0xFF; } - return dComIfGp_event_order(EVT_TYPE_OTHER, eventPrio, i_flag | 0x400, param_3, i_actor, + return dComIfGp_event_order(dEvt_type_OTHER_e, eventPrio, i_flag | 0x400, param_3, i_actor, event_second_actor(i_flag), i_eventID, -1); } @@ -1009,12 +1009,12 @@ s32 fopAcM_orderOtherEventId(fopAc_ac_c* i_actor, s16 i_eventID, u8 i_mapToolID, dStage_MapEvent_dt_c* dt = dEvt_control_c::searchMapEventData(i_mapToolID, roomNo); if (dt != NULL) { - newPriority = dt->mPriority; + newPriority = dt->priority; } } } - return dComIfGp_event_order(EVT_TYPE_OTHER, newPriority, i_flag, param_3, i_actor, + return dComIfGp_event_order(dEvt_type_OTHER_e, newPriority, i_flag, param_3, i_actor, event_second_actor(i_flag), i_eventID, i_mapToolID); } @@ -1036,7 +1036,7 @@ s32 fopAcM_orderMapToolEvent(fopAc_ac_c* i_actor, u8 param_1, s16 i_eventID, u16 dStage_MapEvent_dt_c* dt = dEvt_control_c::searchMapEventData(param_1, roomNo); if (dt != NULL) { - newPriority = dt->mPriority; + newPriority = dt->priority; if (i_eventID == 0xFF) { i_eventID = dComIfGp_getEventManager().getEventIdx(i_actor, param_1); @@ -1051,7 +1051,7 @@ s32 fopAcM_orderMapToolEvent(fopAc_ac_c* i_actor, u8 param_1, s16 i_eventID, u16 newPriority = param_5; } - return dComIfGp_event_order(EVT_TYPE_OTHER, newPriority, i_flag, param_3, i_actor, + return dComIfGp_event_order(dEvt_type_OTHER_e, newPriority, i_flag, param_3, i_actor, event_second_actor(i_flag), i_eventID, param_1); } @@ -1075,7 +1075,7 @@ s32 fopAcM_orderPotentialEvent(fopAc_ac_c* i_actor, u16 i_flag, u16 param_2, u16 i_priority = 0xFF; } - return dComIfGp_event_order(EVT_TYPE_POTENTIAL, i_priority, i_flag, param_2, i_actor, + return dComIfGp_event_order(dEvt_type_POTENTIAL_e, i_priority, i_flag, param_2, i_actor, event_second_actor(i_flag), -1, -1); } @@ -1092,7 +1092,7 @@ s32 fopAcM_orderItemEvent(fopAc_ac_c* i_actor, u16 i_priority, u16 i_flag) { i_priority = 0xFF; } - return dComIfGp_event_order(EVT_TYPE_ITEM, i_priority, i_flag, -1, dComIfGp_getPlayer(0), + return dComIfGp_event_order(dEvt_type_ITEM_e, i_priority, i_flag, -1, dComIfGp_getPlayer(0), i_actor, -1, -1); } @@ -1110,7 +1110,7 @@ s32 fopAcM_orderTreasureEvent(fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, u16 i_ i_priority = 0xFF; } - return dComIfGp_event_order(EVT_TYPE_TREASURE, i_priority, i_flag, -1, i_actorA, i_actorB, -1, + return dComIfGp_event_order(dEvt_type_TREASURE_e, i_priority, i_flag, -1, i_actorA, i_actorB, -1, -1); } diff --git a/src/f_op/f_op_msg_mng.cpp b/src/f_op/f_op_msg_mng.cpp index b6264b08ca..00326665f7 100644 --- a/src/f_op/f_op_msg_mng.cpp +++ b/src/f_op/f_op_msg_mng.cpp @@ -153,7 +153,7 @@ fpc_ProcID fopMsgM_messageSet(u32 i_msgIdx, fopAc_ac_c* i_talkActor, u32 param_2 dMsgObject_c* msg = (dMsgObject_c*)fopMsgM_SearchByID(i_msgID); - if (msg != NULL && msg->mode == 1) { + if (msg != NULL && msg->mode == fopMsg_MODE_MSG_PREPARING_e) { msg->pos.set(pos); msg->msg_idx = i_msgIdx; msg->field_0xf0 = param_2; @@ -185,7 +185,7 @@ fpc_ProcID fopMsgM_messageSet(u32 i_msgIdx, u32 param_1) { dMsgObject_c* msg = (dMsgObject_c*)fopMsgM_SearchByID(i_msgID); if (msg != NULL) { - if (msg->mode == 1) { + if (msg->mode == fopMsg_MODE_MSG_PREPARING_e) { msg->pos.set(pos); msg->msg_idx = i_msgIdx; msg->field_0xf0 = param_1; @@ -193,7 +193,7 @@ fpc_ProcID fopMsgM_messageSet(u32 i_msgIdx, u32 param_1) { msg->setTalkPartner(NULL); msg->setMessageIndex(i_msgIdx, param_1, false); return i_msgID; - } else if (msg->mode == 15) { + } else if (msg->mode == fopMsg_MODE_MSG_CONTINUE_e) { msg->pos.set(pos); msg->msg_idx = i_msgIdx; msg->field_0xf0 = param_1; @@ -225,7 +225,7 @@ fpc_ProcID fopMsgM_messageSetDemo(u32 i_msgidx) { dMsgObject_c* msg = (dMsgObject_c*)fopMsgM_SearchByID(i_msgID); - if (msg != NULL && msg->mode == 1) { + if (msg != NULL && msg->mode == fopMsg_MODE_MSG_PREPARING_e) { msg->pos.set(pos); msg->msg_idx = i_msgidx; msg->field_0xf0 = 1000;