From 463852850faaa721b3b9a3bd769b1adf001e5c54 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 29 Dec 2023 00:12:31 -0800 Subject: [PATCH] d_event_manager work --- include/d/d_com_inf_game.h | 6 +- include/d/d_event_data.h | 27 +- include/d/d_event_manager.h | 29 ++- include/f_op/f_op_actor.h | 1 + src/d/d_event_manager.cpp | 478 ++++++++++++++++++++++++++++++------ 5 files changed, 449 insertions(+), 92 deletions(-) diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 8f3705ac4..3f77eb2de 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -2321,6 +2321,10 @@ inline void dComIfGp_event_setCullRate(f32 ratio) { g_dComIfG_gameInfo.play.getEvent().setCullRate(ratio); } +inline BOOL dComIfGp_event_check() { + return g_dComIfG_gameInfo.play.getEvent().check(); +} + inline dEvent_manager_c* dComIfGp_getPEvtManager() { return &g_dComIfG_gameInfo.play.getEvtManager(); } @@ -2328,7 +2332,7 @@ inline dEvent_manager_c* dComIfGp_getPEvtManager() { // Note: Some of the below functions call g_dComIfG_gameInfo.play.getEvtManager(), while others use // dComIfGp_getPEvtManager(), without a clear pattern for which was chosen. -inline s16 dComIfGp_evmng_getEventPrio(s16 eventIdx) { +inline u32 dComIfGp_evmng_getEventPrio(s16 eventIdx) { return g_dComIfG_gameInfo.play.getEvtManager().getEventPrio(eventIdx); } diff --git a/include/d/d_event_data.h b/include/d/d_event_data.h index d631f281e..ea33f6eca 100644 --- a/include/d/d_event_data.h +++ b/include/d/d_event_data.h @@ -21,7 +21,16 @@ struct event_binary_data_header { /* 0x38 */ u8 unk[8]; }; // Size: 0x40 -class dEvDtData_c {}; +class dEvDtData_c { +public: + /* 0x00 */ char mName[32]; + /* 0x20 */ s32 mIndex; + /* 0x24 */ s32 mSubstanceType; + /* 0x28 */ s32 mSubstanceIdx; + /* 0x2C */ s32 mSubstanceSize; + /* 0x30 */ s32 mNextIdx; + /* 0x34 */ u32 field_0x34[3]; +}; // Size: 0x40 class dEvDtCut_c { public: @@ -36,7 +45,7 @@ public: /* 0x24 */ u32 mIndex; /* 0x28 */ u32 mFlagCheck[3]; /* 0x34 */ u32 mFlagIdx; - /* 0x38 */ u32 field_0x38; + /* 0x38 */ u32 mFirstDataIdx; /* 0x3C */ u32 mNextCutIdx; /* 0x40 */ u32 field_0x40[4]; }; @@ -56,7 +65,10 @@ public: void specialProcPackage(); void specialProcTimekeeper(); + const char* getName() { return mName; } + u32 getStartCut() { return mFirstCutIdx; } u32 getCurrentCut() { return mCurCutIdx; } + u32 getType() { return mStaffType; } enum StaffType_e { NORMAL_e, @@ -102,6 +114,15 @@ public: u32 getStaff(int idx) { return mStaffIdx[idx]; } s32 getNStaff() { return mNStaff; } u32 getPriority() { return mPriority; } + u8 getEndSound() { return mEventEndSound; } + + enum { + NONE_e, + ORDER_e, + PLAY_e, + UNK3_e, + CLOSE_e, + }; public: /* 0x00 */ char mName[0x20]; @@ -116,7 +137,7 @@ public: /* 0x98 */ u32 field_0x98; /* 0x9C */ u32 field_0x9c; /* 0xA0 */ u32 field_0xa0; - /* 0xA4 */ u32 mEventState; + /* 0xA4 */ s32 mEventState; /* 0xA8 */ u32 field_0xa8; /* 0xAC */ u32 field_0xac; }; diff --git a/include/d/d_event_manager.h b/include/d/d_event_manager.h index 3ede9bcfb..fbdb21e00 100644 --- a/include/d/d_event_manager.h +++ b/include/d/d_event_manager.h @@ -12,13 +12,10 @@ public: dEvent_exception_c() { mEventInfoIdx = -1; } void init(); int setStartDemo(int eventInfoIdx); - void getEventName(); + const char* getEventName(); /* 0x0 */ s32 mEventInfoIdx; - /* 0x4 */ u8 field_0x4; - /* 0x5 */ u8 field_0x5; - /* 0x6 */ u8 field_0x6; - /* 0x7 */ u8 field_0x7; + /* 0x4 */ s32 field_0x4; /* 0x8 */ s32 mState; }; @@ -28,9 +25,9 @@ public: ~dEvent_manager_c() {} void debugBfProc(); - void getSubstance(dEvDtData_c*, int); + void* getSubstance(dEvDtData_c*, int); void setData(const char*); - void create(); + BOOL create(); void remove(); void startProc(dEvDtEvent_c*); void closeProc(dEvDtEvent_c*); @@ -49,23 +46,23 @@ public: int getMyActIdx(int, const char* const*, int, int, int); char* getMyActName(int); char* getMyNowCutName(int); - void getMyDataP(int, const char*, int); + dEvDtData_c* getMyDataP(int, const char*, int); void* getMySubstanceP(int, const char*, int); - void getMySubstanceNum(int, const char*); + s32 getMySubstanceNum(int, const char*); void cutEnd(int); - u16 getEventPrio(s16); + u32 getEventPrio(s16); u8 getEventEndSound(s16); void exceptionProc(); void issueStaff(const char*); void cancelStaff(const char*); void setGoal(cXyz*); cXyz* getGoal(); - void specialCast_Shutter(s16, int); - void specialCast(const char*, int); + fopAc_ac_c* specialCast_Shutter(s16, int); + fopAc_ac_c* specialCast(const char*, int); void setPrmStaff(void*, int); void getToolId(u8, int); BOOL ChkPresentEnd(); - void CancelPresent(); + BOOL CancelPresent(); BOOL checkStartDemo(); dEvDtFlag_c& getFlags() { return mFlag; } @@ -83,6 +80,12 @@ public: class dEv_seach_prm { public: dEv_seach_prm(const char*, u32, u32); + +public: + /* 0x00 */ const char* mName; + /* 0x04 */ u32 mMask; + /* 0x08 */ u32 mValue; + /* 0x0C */ u16 mCastInFlag; }; inline int dEvmng_strcmp(const char* s1, const char* s2) { diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index c8b93fe06..0b81ab282 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -22,6 +22,7 @@ enum fopAc_Status_e { fopAcStts_CULL_e = 0x00000100, fopAcStts_FREEZE_e = 0x00000400, fopAcStts_UNK800_e = 0x00000800, + fopAcStts_UNK1000_e = 0x00001000, fopAcStts_CARRY_e = 0x00002000, fopAcStts_UNK4000_e = 0x00004000, fopAcStts_FORCEMOVE_e = 0x00008000, diff --git a/src/d/d_event_manager.cpp b/src/d/d_event_manager.cpp index 49be96402..b81d6537d 100644 --- a/src/d/d_event_manager.cpp +++ b/src/d/d_event_manager.cpp @@ -4,126 +4,388 @@ // #include "d/d_event_manager.h" -#include "dolphin/types.h" +#include "d/d_com_inf_game.h" /* 800737DC-800737F4 .text init__18dEvent_exception_cFv */ void dEvent_exception_c::init() { - /* Nonmatching */ + mEventInfoIdx = -1; + field_0x4 = -1; + mState = 0; } /* 800737F4-80073900 .text setStartDemo__18dEvent_exception_cFi */ -int dEvent_exception_c::setStartDemo(int) { - /* Nonmatching */ +int dEvent_exception_c::setStartDemo(int eventInfoIdx) { + dStage_EventInfo_c* stageEventInfo = dComIfGp_getStageEventInfo(); + if (eventInfoIdx == 0xFF) { + mEventInfoIdx = 206; + return 0xFF; + } else if (eventInfoIdx >= 200) { + mEventInfoIdx = eventInfoIdx; + return eventInfoIdx; + } else { + if (stageEventInfo == NULL) { + return 0xFF; + } else if (eventInfoIdx == -1 || stageEventInfo->num < eventInfoIdx) { + return 0xFF; + } else { + u8 switchNo = stageEventInfo->events[eventInfoIdx].field_0x13; + if (switchNo != 0xFF) { + if (dComIfGs_isSwitch(switchNo, dComIfGp_roomControl_getStayNo())) { + mEventInfoIdx = 206; + return 0xFF; + } + dComIfGs_onSwitch(switchNo, dComIfGp_roomControl_getStayNo()); + } + mEventInfoIdx = eventInfoIdx; + } + } + return eventInfoIdx; } /* 80073900-80073A48 .text getEventName__18dEvent_exception_cFv */ -void dEvent_exception_c::getEventName() { - /* Nonmatching */ +const char* dEvent_exception_c::getEventName() { + static const char* soecial_table[] = { + "NORMAL_COMEBACK", + "MAGMA_COMEBACK", + "TORNADO_COMEBACK", + "TIMEWARP_COMEBACK", + "SHIP_COMEBACK", + "DEFAULT_START", + "SHUTTER_START", + "SHUTTER_START_STOP", + "BS_SHUTTER_START", + "KNOB_START", + "KNOB_START_B", + "FMASTER_START", + "FALL_START", + }; + + dStage_EventInfo_c* stageEventInfo = dComIfGp_getStageEventInfo(); + stage_stag_info_class* stage_info = dComIfGp_getStageStagInfo(); + if (mEventInfoIdx == -1) + return NULL; + + if (mEventInfoIdx == 207) { + JUT_ASSERT(0x9b, stage_info); + if (dStage_stagInfo_GetSTType(stage_info) == 3) + return "BS_SHUTTER_START"; + } + + s32 idx = mEventInfoIdx; + if (idx > 0xc8 && idx < 0xd6) { + return soecial_table[idx - 0xc9]; + } else { + if (stageEventInfo == NULL) + return NULL; + if (stageEventInfo->num < idx) + return NULL; + return stageEventInfo->events[idx].mName; + } + + return NULL; } /* 80073A48-80073A4C .text debugBfProc__16dEvent_manager_cFv */ void dEvent_manager_c::debugBfProc() { - /* Nonmatching */ } +enum { + dEvtSub_FLOAT_e, + dEvtSub_XYZ_e, + dEvtSub_UNK3_e, + dEvtSub_INT_e, + dEvtSub_STR_e, +}; + /* 80073A4C-80073BC0 .text getSubstance__16dEvent_manager_cFP11dEvDtData_ci */ -void dEvent_manager_c::getSubstance(dEvDtData_c*, int) { +void* dEvent_manager_c::getSubstance(dEvDtData_c* data, int type) { /* Nonmatching */ + if (data->mSubstanceIdx < 0 || data->mSubstanceSize <= 0) { + JUT_ASSERT(0x169, 0); + return NULL; + } + + if (type != -1 && type != data->mSubstanceType) { + JUT_ASSERT(0x16e, 0); + } + + switch (data->mSubstanceType) { + case dEvtSub_FLOAT_e: + case dEvtSub_XYZ_e: + return &mList.mFDataP[data->mSubstanceIdx]; + case dEvtSub_INT_e: + return &mList.mIDataP[data->mSubstanceIdx]; + case dEvtSub_STR_e: + return &mList.mSDataP[data->mSubstanceIdx]; + default: + JUT_ASSERT(0x182, 0); + return NULL; + } } /* 80073BC0-80073C94 .text setData__16dEvent_manager_cFPCc */ -void dEvent_manager_c::setData(const char*) { - /* Nonmatching */ +void dEvent_manager_c::setData(const char* data) { + if (data == NULL) + return; + + mList.mHeaderP = (event_binary_data_header*)data; + if (mList.mHeaderP->eventNum > 0) + mList.mEventP = (dEvDtEvent_c*)(data + mList.mHeaderP->eventTop); + if (mList.mHeaderP->staffNum > 0) + mList.mStaffP = (dEvDtStaff_c*)(data + mList.mHeaderP->staffTop); + if (mList.mHeaderP->cutNum > 0) + mList.mCutP = (dEvDtCut_c*)(data + mList.mHeaderP->cutTop); + if (mList.mHeaderP->dataNum > 0) + mList.mDataP = (dEvDtData_c*)(data + mList.mHeaderP->dataTop); + if (mList.mHeaderP->fDataNum > 0) + mList.mFDataP = (f32*)(data + mList.mHeaderP->fDataTop); + if (mList.mHeaderP->iDataNum > 0) + mList.mIDataP = (int*)(data + mList.mHeaderP->iDataTop); + if (mList.mHeaderP->sDataNum > 0) + mList.mSDataP = (char*)(data + mList.mHeaderP->sDataTop); } /* 80073C94-80073D10 .text create__16dEvent_manager_cFv */ -void dEvent_manager_c::create() { +BOOL dEvent_manager_c::create() { /* Nonmatching */ + mList.init(); + mCameraPlay = 0; + mException.init(); + mFlag.init(); + setData((const char*)dComIfG_getStageRes("Stage", "event_list.dat")); + return TRUE; } /* 80073D10-80073D54 .text remove__16dEvent_manager_cFv */ void dEvent_manager_c::remove() { - /* Nonmatching */ + mList.init(); + mCameraPlay = 0; + mException.init(); + mFlag.init(); } /* 80073D54-80073E00 .text findObjectCallBack__FP10fopAc_ac_cPv */ -void findObjectCallBack(fopAc_ac_c*, void*) { - /* Nonmatching */ +static void* findObjectCallBack(fopAc_ac_c* actor, void* work) { + dEv_seach_prm* prm = (dEv_seach_prm*)work; + if (prm == NULL) + return NULL; + + dStage_objectNameInf* inf = dStage_searchName(prm->mName); + if (inf == NULL) + return NULL; + + if (inf->mProcName == fopAcM_GetProfName(actor) && inf->mSubtype == actor->mSubtype && (prm->mMask == 0 || (prm->mValue == (prm->mMask & fopAcM_GetParam(actor))))) + return actor; + + return NULL; } /* 80073E00-80073F14 .text extraOnObjectCallBack__FP10fopAc_ac_cPv */ -void extraOnObjectCallBack(fopAc_ac_c*, void*) { - /* Nonmatching */ +static void* extraOnObjectCallBack(fopAc_ac_c* actor, void* work) { + dEv_seach_prm* prm = (dEv_seach_prm*)work; + if (prm == NULL) + return NULL; + + const char* name = prm->mName; + if (strcmp(name, "ALL") == 0) { + fopAcM_OnStatus(actor, fopAcStts_UNK800_e); + if (prm->mCastInFlag & 1) + fopAcM_OnStatus(actor, fopAcStts_FORCEMOVE_e); + return NULL; + } else { + dStage_objectNameInf* inf = dStage_searchName(name); + if (inf == NULL) + return NULL; + if (inf->mProcName == fopAcM_GetProfName(actor) && inf->mSubtype == actor->mSubtype && (prm->mMask == 0 || (prm->mValue == (prm->mMask & fopAcM_GetParam(actor))))) { + fopAcM_OnStatus(actor, fopAcStts_UNK800_e); + if (prm->mCastInFlag & 1) + fopAcM_OnStatus(actor, fopAcStts_FORCEMOVE_e); + } + return NULL; + } } /* 80073F14-80073FD4 .text extraOffObjectCallBack__FP10fopAc_ac_cPv */ -void extraOffObjectCallBack(fopAc_ac_c*, void*) { - /* Nonmatching */ +static void* extraOffObjectCallBack(fopAc_ac_c* actor, void* work) { + const char* name = (const char*)work; + if (strcmp(name, "ALL") == 0) { + fopAcM_OffStatus(actor, fopAcStts_UNK800_e); + fopAcM_OffStatus(actor, fopAcStts_FORCEMOVE_e); + return NULL; + } else { + dStage_objectNameInf* inf = dStage_searchName(name); + if (inf == NULL) + return NULL; + if (inf->mProcName == fopAcM_GetProfName(actor) && inf->mSubtype == actor->mSubtype) { + fopAcM_OffStatus(actor, fopAcStts_UNK800_e); + } + return NULL; + } } /* 80073FD4-80073FF0 .text allOffObjectCallBack__FP10fopAc_ac_cPv */ -void allOffObjectCallBack(fopAc_ac_c*, void*) { - /* Nonmatching */ +static void* allOffObjectCallBack(fopAc_ac_c* actor, void*) { + fopAcM_OffStatus(actor, fopAcStts_UNK800_e | fopAcStts_UNK1000_e | fopAcStts_FORCEMOVE_e); + return NULL; } /* 80073FF0-80074108 .text startProc__16dEvent_manager_cFP12dEvDtEvent_c */ -void dEvent_manager_c::startProc(dEvDtEvent_c*) { +void dEvent_manager_c::startProc(dEvDtEvent_c* event) { /* Nonmatching */ + dEv_seach_prm prm(NULL, 0, 0); + for (s32 i = 0; i < event->mNStaff; i++) { + s32 staffIdx = event->mStaffIdx[i]; + dEvDtStaff_c* staff = &mList.mStaffP[staffIdx]; + if (staff->mStaffType == dEvDtStaff_c::NORMAL_e) { + fopAc_ac_c* actor = specialCast(staff->mName, 1); + if (actor == NULL) { + setPrmStaff(&prm, staffIdx); + actor = (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)findObjectCallBack, &prm); + } + if (actor != NULL) { + fopAcM_OnStatus(actor, fopAcStts_FORCEMOVE_e); + } + } + if (staff->mStaffType == dEvDtStaff_c::ALL_e) { + setPrmStaff(&prm, staffIdx); + fopAcIt_Judge((fopAcIt_JudgeFunc)extraOnObjectCallBack, &prm); + } + staff->init(); + } + + event->mEventState = dEvDtEvent_c::PLAY_e; + mFlag.init(); } /* 80074108-80074114 .text closeProc__16dEvent_manager_cFP12dEvDtEvent_c */ -void dEvent_manager_c::closeProc(dEvDtEvent_c*) { - /* Nonmatching */ +void dEvent_manager_c::closeProc(dEvDtEvent_c* event) { + event->mEventState = dEvDtEvent_c::CLOSE_e; } /* 80074114-800741D4 .text endProc__16dEvent_manager_cFsi */ -void dEvent_manager_c::endProc(s16, int) { +void dEvent_manager_c::endProc(s16 eventIdx, int act) { /* Nonmatching */ + dEvDtEvent_c* event = getEventData(eventIdx); + if (event == NULL) { + JUT_ASSERT(0x2ec, 0); + return; + } + + if (act) + closeProc(event); + + if (event->mEventState == dEvDtEvent_c::CLOSE_e) { + const char* all = "ALL"; + fopAcIt_Judge((fopAcIt_JudgeFunc)allOffObjectCallBack, (void*)all); + mCameraPlay = 0; + event->mEventState = dEvDtEvent_c::NONE_e; + } } /* 800741D4-80074324 .text mainProc__16dEvent_manager_cFv */ void dEvent_manager_c::mainProc() { - /* Nonmatching */ + if (mList.mHeaderP != NULL) { + dEvDtEvent_c* event; + s32 i; + + for (i = 0; i < mList.mHeaderP->eventNum; i++) { + event = &mList.mEventP[i]; + if (event->mEventState == dEvDtEvent_c::PLAY_e && event->finish_check()) + closeProc(event); + } + + for (i = 0; i < mList.mHeaderP->eventNum; i++) { + event = &mList.mEventP[i]; + if (event->mEventState == dEvDtEvent_c::ORDER_e) + startProc(event); + } + + for (i = 0; i < mList.mHeaderP->eventNum; i++) { + event = &mList.mEventP[i]; + if (event->mEventState == dEvDtEvent_c::PLAY_e) + mList.advanceCut(event); + } + + for (i = 0; i < mList.mHeaderP->eventNum; i++) { + event = &mList.mEventP[i]; + if (event->mEventState == dEvDtEvent_c::PLAY_e) + event->specialStaffProc(mList.mStaffP); + } + } } /* 80074324-80074370 .text runProc__16dEvent_manager_cFv */ void dEvent_manager_c::runProc() { - /* Nonmatching */ + exceptionProc(); + debugBfProc(); + dComIfGp_event_check(); + mainProc(); } /* 80074370-800743AC .text getEventData__16dEvent_manager_cFs */ -dEvDtEvent_c* dEvent_manager_c::getEventData(s16) { - /* Nonmatching */ +dEvDtEvent_c* dEvent_manager_c::getEventData(s16 eventIdx) { + if (mList.mHeaderP == NULL || eventIdx < 0 || eventIdx >= mList.mHeaderP->eventNum) + return NULL; + return &mList.mEventP[eventIdx]; } /* 800743AC-800744AC .text getEventIdx__16dEvent_manager_cFPCcUc */ -s16 dEvent_manager_c::getEventIdx(const char*, u8) { +s16 dEvent_manager_c::getEventIdx(const char* eventName, u8 eventInfoIdx) { /* Nonmatching */ + dStage_EventInfo_c* stageEventInfo = dComIfGp_getStageEventInfo(); + if (mList.mHeaderP == NULL) + return -1; + + if (stageEventInfo != NULL && eventInfoIdx != 0xFF && stageEventInfo->num > eventInfoIdx) + return getEventIdx(stageEventInfo->events[eventInfoIdx].mName, 0xFF); + + if (eventName == NULL) + return -1; + + for (s32 i = 0; i < mList.mHeaderP->eventNum; i++) { + if (strcmp(eventName, mList.mEventP[i].getName()) == 0) + return i; + } + + return -1; } /* 800744AC-800744E8 .text order__16dEvent_manager_cFs */ -BOOL dEvent_manager_c::order(s16) { - /* Nonmatching */ +BOOL dEvent_manager_c::order(s16 eventIdx) { + dEvDtEvent_c* event = getEventData(eventIdx); + if (event == NULL) + return FALSE; + + event->mEventState = dEvDtEvent_c::ORDER_e; + return TRUE; } /* 800744E8-80074528 .text startCheck__16dEvent_manager_cFs */ -BOOL dEvent_manager_c::startCheck(s16) { - /* Nonmatching */ +BOOL dEvent_manager_c::startCheck(s16 eventIdx) { + dEvDtEvent_c* event = getEventData(eventIdx); + if (event == NULL) + return FALSE; + + return (event->mEventState == dEvDtEvent_c::PLAY_e) ? TRUE : FALSE; } /* 80074528-80074564 .text startCheckOld__16dEvent_manager_cFPCc */ -int dEvent_manager_c::startCheckOld(const char*) { - /* Nonmatching */ +BOOL dEvent_manager_c::startCheckOld(const char* eventName) { + return startCheck(getEventIdx(eventName, 0xFF)); } /* 80074564-800745A4 .text endCheck__16dEvent_manager_cFs */ -BOOL dEvent_manager_c::endCheck(s16) { - /* Nonmatching */ +BOOL dEvent_manager_c::endCheck(s16 eventIdx) { + dEvDtEvent_c* event = getEventData(eventIdx); + if (event == NULL) + return FALSE; + + return (event->mEventState == dEvDtEvent_c::CLOSE_e) ? TRUE : FALSE; } /* 800745A4-800745E0 .text endCheckOld__16dEvent_manager_cFPCc */ -BOOL dEvent_manager_c::endCheckOld(const char*) { - /* Nonmatching */ +BOOL dEvent_manager_c::endCheckOld(const char* eventName) { + return endCheck(getEventIdx(eventName, 0xFF)); } /* 800745E0-80074718 .text getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci */ @@ -132,13 +394,12 @@ int dEvent_manager_c::getMyStaffId(const char*, fopAc_ac_c*, int) { } /* 80074718-8007473C .text getIsAddvance__16dEvent_manager_cFi */ -BOOL dEvent_manager_c::getIsAddvance(int) { +BOOL dEvent_manager_c::getIsAddvance(int staffIdx) { /* Nonmatching */ -} + if (staffIdx == -1) + return FALSE; -/* 8007473C-80074824 .text dEvmng_strcmp__FPCcPc */ -void dEvmng_strcmp(const char*, char*) { - /* Nonmatching */ + return mList.mStaffP[staffIdx].mAdvance; } /* 80074824-80074964 .text getMyActIdx__16dEvent_manager_cFiPCPCciii */ @@ -147,43 +408,86 @@ int dEvent_manager_c::getMyActIdx(int, const char* const*, int, int, int) { } /* 80074964-800749A0 .text getMyActName__16dEvent_manager_cFi */ -char* dEvent_manager_c::getMyActName(int) { - /* Nonmatching */ +char* dEvent_manager_c::getMyActName(int staffIdx) { + if (staffIdx == -1) + return NULL; + + char* cutName = getMyNowCutName(staffIdx); + if (cutName == NULL) + return NULL; + + return cutName; } /* 800749A0-800749D0 .text getMyNowCutName__16dEvent_manager_cFi */ -char* dEvent_manager_c::getMyNowCutName(int) { - /* Nonmatching */ +char* dEvent_manager_c::getMyNowCutName(int staffIdx) { + if (staffIdx == -1) + return NULL; + + return mList.getCutP(mList.mStaffP[staffIdx].getCurrentCut())->mName; } /* 800749D0-80074AA0 .text getMyDataP__16dEvent_manager_cFiPCci */ -void dEvent_manager_c::getMyDataP(int, const char*, int) { - /* Nonmatching */ +dEvDtData_c* dEvent_manager_c::getMyDataP(int staffIdx, const char* name, int mode) { + if (staffIdx == -1) + return NULL; + + dEvDtCut_c* cut; + if (mode != 0) + cut = mList.getCutP(mList.mStaffP[staffIdx].getStartCut()); + else + cut = mList.getCutP(mList.mStaffP[staffIdx].getCurrentCut()); + + s32 dataIdx = cut->mFirstDataIdx; + while (dataIdx != -1) { + dEvDtData_c* data = &mList.mDataP[dataIdx]; + if (strcmp(name, data->mName) == 0) + return data; + dataIdx = data->mNextIdx; + } + + return NULL; } /* 80074AA0-80074AF8 .text getMySubstanceP__16dEvent_manager_cFiPCci */ -void* dEvent_manager_c::getMySubstanceP(int, const char*, int) { - /* Nonmatching */ +void* dEvent_manager_c::getMySubstanceP(int staffIdx, const char* name, int type) { + dEvDtData_c* data = getMyDataP(staffIdx, name, 0); + if (data == NULL) + return 0; + return getSubstance(data, type); } /* 80074AF8-80074B30 .text getMySubstanceNum__16dEvent_manager_cFiPCc */ -void dEvent_manager_c::getMySubstanceNum(int, const char*) { - /* Nonmatching */ +s32 dEvent_manager_c::getMySubstanceNum(int staffIdx, const char* name) { + dEvDtData_c* data = getMyDataP(staffIdx, name, 0); + if (data == NULL) + return 0; + return data->mSubstanceSize; } /* 80074B30-80074B7C .text cutEnd__16dEvent_manager_cFi */ -void dEvent_manager_c::cutEnd(int) { +void dEvent_manager_c::cutEnd(int staffIdx) { /* Nonmatching */ + if (staffIdx == -1) + return; + + mFlag.flagSet(mList.getCutP(mList.mStaffP[staffIdx].getCurrentCut())->getFlagId()); } /* 80074B7C-80074BB0 .text getEventPrio__16dEvent_manager_cFs */ -u16 dEvent_manager_c::getEventPrio(s16) { - /* Nonmatching */ +u32 dEvent_manager_c::getEventPrio(s16 eventIdx) { + dEvDtEvent_c* event = getEventData(eventIdx); + if (event == NULL) + return 0; + return event->getPriority(); } /* 80074BB0-80074BE4 .text getEventEndSound__16dEvent_manager_cFs */ -u8 dEvent_manager_c::getEventEndSound(s16) { - /* Nonmatching */ +u8 dEvent_manager_c::getEventEndSound(s16 eventIdx) { + dEvDtEvent_c* event = getEventData(eventIdx); + if (event == NULL) + return 0; + return event->getEndSound(); } /* 80074BE4-80074D78 .text exceptionProc__16dEvent_manager_cFv */ @@ -192,23 +496,24 @@ void dEvent_manager_c::exceptionProc() { } /* 80074D78-80074DB4 .text issueStaff__16dEvent_manager_cFPCc */ -void dEvent_manager_c::issueStaff(const char*) { - /* Nonmatching */ +void dEvent_manager_c::issueStaff(const char* name) { + dEv_seach_prm prm(name, 0, 0); + fopAcIt_Judge((fopAcIt_JudgeFunc)extraOnObjectCallBack, &prm); } /* 80074DB4-80074DDC .text cancelStaff__16dEvent_manager_cFPCc */ -void dEvent_manager_c::cancelStaff(const char*) { - /* Nonmatching */ +void dEvent_manager_c::cancelStaff(const char* name) { + fopAcIt_Judge((fopAcIt_JudgeFunc)extraOffObjectCallBack, (void*)name); } /* 80074DDC-80074DF8 .text setGoal__16dEvent_manager_cFP4cXyz */ -void dEvent_manager_c::setGoal(cXyz*) { - /* Nonmatching */ +void dEvent_manager_c::setGoal(cXyz* goal) { + mGoal.set(*goal); } /* 80074DF8-80074E00 .text getGoal__16dEvent_manager_cFv */ cXyz* dEvent_manager_c::getGoal() { - /* Nonmatching */ + return &mGoal; } /* 80074E00-80074EB4 .text findShutterCallBack__FP10fopAc_ac_cPv */ @@ -217,18 +522,38 @@ void findShutterCallBack(fopAc_ac_c*, void*) { } /* 80074EB4-80074FE8 .text specialCast_Shutter__16dEvent_manager_cFsi */ -void dEvent_manager_c::specialCast_Shutter(s16, int) { +fopAc_ac_c* dEvent_manager_c::specialCast_Shutter(s16, int) { /* Nonmatching */ } /* 80074FE8-800750FC .text specialCast__16dEvent_manager_cFPCci */ -void dEvent_manager_c::specialCast(const char*, int) { +fopAc_ac_c* dEvent_manager_c::specialCast(const char*, int) { /* Nonmatching */ } /* 800750FC-80075288 .text setPrmStaff__16dEvent_manager_cFPvi */ -void dEvent_manager_c::setPrmStaff(void*, int) { +void dEvent_manager_c::setPrmStaff(void* work, int staffIdx) { /* Nonmatching */ + dEv_seach_prm* prm = (dEv_seach_prm*)work; + dEvDtStaff_c* staff_data = &mList.mStaffP[staffIdx]; + JUT_ASSERT(0x66b, staff_data); + JUT_ASSERT(0x66c, prm); + prm->mName = staff_data->getName(); + + dEvDtData_c* dev_prm_data = getMyDataP(staffIdx, "DEV_PRM_MASK", 0); + if (dev_prm_data == NULL) { + prm->mMask = 0; + prm->mValue = 0; + } else { + int* i_data = (int*)getSubstance(dev_prm_data, dEvtSub_INT_e); + JUT_ASSERT(0x678, i_data); + prm->mMask = i_data[0]; + prm->mValue = i_data[1]; + } + + prm->mCastInFlag = 0; + if (getMyDataP(staffIdx, "CAST_IN", 1) != NULL) + prm->mCastInFlag |= 1; } /* 80075288-8007537C .text getToolId__16dEvent_manager_cFUci */ @@ -237,17 +562,20 @@ void dEvent_manager_c::getToolId(u8, int) { } /* 8007537C-80075394 .text __ct__13dEv_seach_prmFPCcUlUl */ -dEv_seach_prm::dEv_seach_prm(const char*, u32, u32) { - /* Nonmatching */ +dEv_seach_prm::dEv_seach_prm(const char* name, u32 mask, u32 value) { + mName = name; + mMask = mask; + mValue = value; + mCastInFlag = 0; } /* 80075394-800753A8 .text dEv_extra_createCB__FPv */ -void dEv_extra_createCB(void*) { +static void dEv_extra_createCB(void*) { /* Nonmatching */ } /* 800753A8-80075450 .text dEv_talkman_get_action__Fi */ -void dEv_talkman_get_action(int) { +static int dEv_talkman_get_action(int) { /* Nonmatching */ } @@ -257,8 +585,8 @@ BOOL dEvent_manager_c::ChkPresentEnd() { } /* 8007548C-800754BC .text CancelPresent__16dEvent_manager_cFv */ -void dEvent_manager_c::CancelPresent() { - /* Nonmatching */ +BOOL dEvent_manager_c::CancelPresent() { + return dEv_talkman_get_action(1) == 1; } /* 800754BC-800754EC .text checkStartDemo__16dEvent_manager_cFv */