diff --git a/configure.py b/configure.py index 02c961ea3..777cd9574 100644 --- a/configure.py +++ b/configure.py @@ -368,7 +368,7 @@ config.libs = [ Object(NonMatching, "d/d_material.cpp"), Object(Matching, "d/d_event.cpp"), Object(Matching, "d/d_event_data.cpp"), - Object(NonMatching, "d/d_event_manager.cpp"), + Object(Matching, "d/d_event_manager.cpp"), Object(NonMatching, "d/d_magma.cpp"), Object(NonMatching, "d/d_boss_magma.cpp"), Object(NonMatching, "d/d_grass.cpp"), diff --git a/include/d/d_event_data.h b/include/d/d_event_data.h index 6c9e3a751..d97166eb6 100644 --- a/include/d/d_event_data.h +++ b/include/d/d_event_data.h @@ -121,7 +121,7 @@ public: void specialStaffProc(dEvDtStaff_c*); char * getName() { return mName; } - u32 getStaff(int idx) { return mStaffIdx[idx]; } + int getStaff(int idx) { return mStaffIdx[idx]; } s32 getNStaff() { return mNStaff; } u32 getPriority() { return mPriority; } u8 getEndSound() { return mEventEndSound; } diff --git a/include/d/d_event_manager.h b/include/d/d_event_manager.h index c82e8d150..33c4f7031 100644 --- a/include/d/d_event_manager.h +++ b/include/d/d_event_manager.h @@ -88,4 +88,6 @@ public: /* 0x0C */ u16 mCastInFlag; }; +int dEv_extra_createCB(void* actor); + #endif /* D_EVENT_D_EVENT_MANAGER_H */ diff --git a/src/d/d_event_manager.cpp b/src/d/d_event_manager.cpp index 8d1e0075e..9b01ff0c9 100644 --- a/src/d/d_event_manager.cpp +++ b/src/d/d_event_manager.cpp @@ -235,24 +235,23 @@ static void* allOffObjectCallBack(fopAc_ac_c* actor, void*) { /* 80073FF0-80074108 .text startProc__16dEvent_manager_cFP12dEvDtEvent_c */ void dEvent_manager_c::startProc(dEvDtEvent_c* event) { - /* Nonmatching */ dEv_seach_prm prm(NULL, 0, 0); for (s32 i = 0; i < event->getNStaff(); i++) { - u32 staffIdx = event->getStaff(i); + int staffIdx = event->getStaff(i); dEvDtStaff_c* staff = mList.getStaffP(staffIdx); if (staff->getType() == dEvDtStaff_c::NORMAL_e) { - fopAc_ac_c* actor = specialCast(staff->mName, 1); + fopAc_ac_c* actor = specialCast(staff->getName(), 1); if (actor == NULL) { setPrmStaff(&prm, staffIdx); - actor = (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)findObjectCallBack, &prm); + actor = fopAcM_Search((fopAcIt_JudgeFunc)findObjectCallBack, &prm); } if (actor != NULL) { fopAcM_OnStatus(actor, fopAcStts_FORCEMOVE_e); } } - if (staff->mStaffType == dEvDtStaff_c::ALL_e) { + if (staff->getType() == dEvDtStaff_c::ALL_e) { setPrmStaff(&prm, staffIdx); - fopAcIt_Judge((fopAcIt_JudgeFunc)extraOnObjectCallBack, &prm); + fopAcM_Search((fopAcIt_JudgeFunc)extraOnObjectCallBack, &prm); } staff->init(); } @@ -392,8 +391,6 @@ BOOL dEvent_manager_c::endCheckOld(const char* eventName) { /* 800745E0-80074718 .text getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci */ int dEvent_manager_c::getMyStaffId(const char* name, fopAc_ac_c* actor, int tagId) { - /* Nonmatching */ - if (dComIfGp_event_getMode() == dEvtMode_NONE_e) return -1; @@ -408,7 +405,7 @@ int dEvent_manager_c::getMyStaffId(const char* name, fopAc_ac_c* actor, int tagI if (event->mEventState == dEvDtEvent_c::PLAY_e || event->mEventState == dEvDtEvent_c::CLOSE_e || event->mEventState == dEvDtEvent_c::UNK3_e) { s32 nStaff = event->getNStaff(); for (s32 j = 0; j < nStaff; j++) { - u32 staffIdx = event->getStaff(j); + int staffIdx = event->getStaff(j); dEvDtStaff_c* staff = mList.getStaffP(staffIdx); if (staff->mStaffType != dEvDtStaff_c::ALL_e && strcmp(name, staff->getName()) == 0 && tagId == staff->getTagID()) return staffIdx; @@ -429,7 +426,6 @@ BOOL dEvent_manager_c::getIsAddvance(int staffIdx) { /* 8007473C-80074824 .text dEvmng_strcmp__FPCcPc */ int dEvmng_strcmp(const char* s1, char* s2) { - /* Nonmatching */ u32 len1 = strlen(s1); u32 len2 = strlen(s2); @@ -441,13 +437,9 @@ int dEvmng_strcmp(const char* s1, char* s2) { if (len1 > len2) return 1; - const char* p1 = s1; - const char* p2 = s2; - while (len1-- > 0) { - if (*p1 != *p2) + for (int i = 0; i < len1; i++) { + if (s1[i] != s2[i]) return 1; - p2++; - p1++; } return 0; @@ -573,17 +565,20 @@ u8 dEvent_manager_c::getEventEndSound(s16 eventIdx) { /* 80074BE4-80074D78 .text exceptionProc__16dEvent_manager_cFv */ void dEvent_manager_c::exceptionProc() { - /* Nonmatching */ - const char* eventName = mException.getEventName(); - s32 eventIdx = getEventIdx(eventName, 0xFF); + s16 eventIdx = getEventIdx(eventName, 0xFF); if (eventIdx == -1) { mException.mEventInfoIdx = -1; return; } - u8 mapToolID = mException.mEventInfoIdx < 200 ? mException.mEventInfoIdx : 0xFF; + u8 mapToolID; + if (200 <= mException.mEventInfoIdx) { + mapToolID = 0xFF; + } else { + mapToolID = mException.mEventInfoIdx; + } switch (mException.mState) { case 0: @@ -769,7 +764,7 @@ dEv_seach_prm::dEv_seach_prm(const char* name, u32 mask, u32 value) { } /* 80075394-800753A8 .text dEv_extra_createCB__FPv */ -static int dEv_extra_createCB(void* actor) { +int dEv_extra_createCB(void* actor) { fopAcM_OnStatus((fopAc_ac_c*)actor, fopAcStts_UNK800_e); return 4; } @@ -821,6 +816,11 @@ static u8 daNpc_Tt_tact_table[] = { 0x01, }; +// Fakematch: dEvmng_daNpc_Tt_Conv and dEvmng_daNpc_Tt_GetEvFlag are unused but need to appear in this TU for a match. +// Strangely, these two functions do not appear in the debug symbol maps, but do appear in the non-debug maps for both +// the demo and the full game. +#pragma force_active on + /* 800754EC-80075590 .text dEvmng_daNpc_Tt_Conv__FUc */ u8 dEvmng_daNpc_Tt_Conv(u8 param_0) { if (param_0 >= ARRAY_SIZE(daNpc_Tt_tact_table)) {