diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2024-10-10 07:29:58 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-10 08:29:58 -0600 |
| commit | 12eb254d769d84743b5cc6cd5424057c57eaf0ad (patch) | |
| tree | 4509be332b2ccfc6fe939f47740d68f7746eca3e /src/d/d_event.cpp | |
| parent | 2fd702c0ac170a789af879b8b92a82d4dcc9080c (diff) | |
switch to dtk setup (#2203)
* switch to dtk setup
* some cleanup / fixes
* cleanup d_a_alink literals
* Restore doxygen, update CI & README.md (#1)
* Fix build image ref (#2)
---------
Co-authored-by: Luke Street <luke@street.dev>
Diffstat (limited to 'src/d/d_event.cpp')
| -rw-r--r-- | src/d/d_event.cpp | 1223 |
1 files changed, 1223 insertions, 0 deletions
diff --git a/src/d/d_event.cpp b/src/d/d_event.cpp new file mode 100644 index 0000000000..1028ca36e7 --- /dev/null +++ b/src/d/d_event.cpp @@ -0,0 +1,1223 @@ +// +// Generated By: dol2asm +// Translation Unit: d/d_event +// + +#include "d/d_event.h" +#include "d/actor/d_a_alink.h" +#include "d/d_demo.h" +#include "d/d_msg_object.h" +#include "m_Do/m_Do_controller_pad.h" +#include "m_Do/m_Do_graphic.h" +#include "d/actor/d_a_midna.h" +#include "d/actor/d_a_tag_mhint.h" +#include "d/actor/d_a_tag_mstop.h" + +// This probably will need to be moved once actual debug rom decomp begins +#ifdef DEBUG +static dEvDb_bit_c dEvDb_bit_table[799] = { + #include "src/d/d_event_debug_bit_table.inc" +}; + +static dEvDb_reg_c dEvDb_reg_table[21] = { + #include "src/d/d_event_debug_reg_table.inc" +}; + +static dEvDb_bit_c dEvDb_bit_table_tmp[169] = { + #include "src/d/d_event_debug_bit_table_tmp.inc" +}; + +static dEvDb_reg_c dEvDb_reg_table_tmp[14] = { + #include "src/d/d_event_debug_reg_table_tmp.inc" +}; + +static dEvDb_flag_base_c dEvDb_flag_base_table = { + dEvDb_bit_table, // mBitTable + dEvDb_reg_table, // mRegTable + 799, // mBitNum + 21, // mRegNum + 22, // field_0x10 + 4 // field_0x1 +}; + +static dEvDb_flag_base_c dEvDb_flag_base_table_tmp = { + dEvDb_bit_table_tmp, // mBitTable + dEvDb_reg_table_tmp, // mRegTable + 169, // mBitNum + 14, // mRegNum + 43, // field_0x10 + 6 // field_0x14 +}; +#endif + +/* 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() { + return false; +} + +/* 80041488-80041580 03BDC8 00F8+00 1/1 0/0 0/0 .text + * clear_tmpflag_for_message__21@unnamed@d_event_cpp@Fv */ +static void clear_tmpflag_for_message() { + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[11]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[12]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[13]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[14]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[15]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[51]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[52]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[53]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[54]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[55]); +} +}; // namespace + +dEvt_control_c::dEvt_control_c() { + remove(); +} + +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); +} + +/* 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) { + int roomNo = dComIfGp_roomControl_getStayNo(); + dStage_MapEvent_dt_c* data = searchMapEventData(infoIdx, roomNo); + + if (data != NULL && data->mSwitch != 0xFF) { + if (dComIfGs_isSwitch(data->mSwitch, roomNo)) { + return 0; + } + } + } + + if (mNum >= 8) { + 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; + + if (order->mPriority == 0) { + order->mPriority = 1; + } + + if (mNum == 0) { + mOrderIdx = 0; + order->mNextOrderIdx = -1; + } else { + dEvt_order_c* curOrder; + int curOrderIdx = mOrderIdx; + curOrder = &mOrder[curOrderIdx]; + + if (order->mPriority < curOrder->mPriority) { + mOrderIdx = mNum; + order->mNextOrderIdx = curOrderIdx; + } else { + while (curOrder->mNextOrderIdx >= 0) { + if (order->mPriority < mOrder[curOrder->mNextOrderIdx].mPriority) { + break; + } + int nextOrderIdx = curOrder->mNextOrderIdx; + curOrder = &mOrder[nextOrderIdx]; + } + + order->mNextOrderIdx = curOrder->mNextOrderIdx; + curOrder->mNextOrderIdx = mNum; + } + } + mNum++; + + 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); + + mSpecifiedEvent = p_order->mEventId; + mHindFlag = p_order->mHindFlag; + + if (dComIfGp_getPlayer(0) != p_order->mActor1) { + setPtT(p_order->mActor1); + setPtI(p_order->mActor1); + } else { + setPtT(p_order->mActor2); + setPtI(p_order->mActor2); + } + + mMapToolId = p_order->mEventInfoIdx; + field_0xea = 0xFF; + field_0xec = 0xFF; + + int roomNo = dComIfGp_roomControl_getStayNo(); + dStage_MapEvent_dt_c* data = searchMapEventData(mMapToolId, roomNo); + mStageEventDt = data; + + if (data != NULL) { + field_0xea = data->field_0x16; + + if (data->mSwitch != 0xFF) { + dComIfGs_onSwitch(data->mSwitch, roomNo); + } + + if (p_order->mFlag & 0x300) { + field_0xec = data->field_0x5; + } + } + + if (!(p_order->mFlag & 0x200)) { + mEventID = p_order->mEventId; + } + + mCullRate = 1.0f; + mEventFlag = 0; +} + +/* 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; + + if (p_order->mFlag & 4 && actor->eventInfo.chkCondition(dEvtCnd_CANTALK_e) != true) { + return 0; + } + + return 1; +} + +/* 80379D80-80379D80 0063E0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +static char const* const stringBase_80379D80 = "???"; + +/* 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) { + 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; + + if ((actor1 != NULL && actor1->eventInfo.chkCondition(condition)) && + (actor2 != NULL && actor2->eventInfo.chkCondition(condition))) { + actor1->eventInfo.setCommand(command); + actor2->eventInfo.setCommand(command); + setParam(p_order); + return 1; + } + + return 0; +} + +/* 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; + 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) { + daMidna_c* midna = (daMidna_c*)daPy_py_c::getMidnaActor(); + if (!daPy_py_c::i_checkNowWolf() || midna->checkNoDraw()) { + event = "MHINT_TALK"; + } + } + + if (commonCheck(p_order, 1, 1)) { + mMode = EVT_MODE_TALK; + if (mSpecifiedEvent == -1) { + if (actor != NULL && actor->eventInfo.getEventName() != NULL) { + mSpecifiedEvent = actor->eventInfo.getEventId(); + } else { + mSpecifiedEvent = dComIfGp_getEventManager().getEventIdx(event, 0xFF, -1); + } + } + dComIfGp_getEventManager().order(mSpecifiedEvent); + return 1; + } else { + 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 itemIndex; + switch (p_order->mEventType) { + case EVT_TYPE_SHOWITEM_X: + itemIndex = SELECT_ITEM_X; + field_0xed = 1; + break; + case EVT_TYPE_SHOWITEM_Y: + field_0xed = 2; + itemIndex = SELECT_ITEM_Y; + break; + default: + field_0xed = 0; + return 0; + } + + if (dComIfGp_getSelectItem(itemIndex) == NO_ITEM) { + return 0; + } + + if (pActor2 == NULL || !pActor2->eventInfo.chkCondition(dEvtCnd_CANTALKITEM_e)) { + return 0; + } + + if (commonCheck(p_order, 1, 1)) { + mMode = EVT_MODE_TALK; + mPreItemNo = dComIfGp_getSelectItem(itemIndex); + mSpecifiedEvent = dComIfGp_getEventManager().getEventIdx(event, 0xFF, -1); + dComIfGp_getEventManager().order(mSpecifiedEvent); + return 1; + } else { + 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; + + if (actor1 == NULL || (actor2 != NULL && !actor2->eventInfo.chkCondition(0x40))) { + return 0; + } + + actor1->eventInfo.setCommand(dEvtCmd_INCATCH_e); + if (actor2 != NULL) { + actor2->eventInfo.setCommand(dEvtCmd_INCATCH_e); + } + + setParam(p_order); + mPreItemNo = dComIfGp_att_getCatchChgItem(); + mMode = EVT_MODE_DEMO; + + if (mSpecifiedEvent != -1) { + dComIfGp_getEventManager().order(mSpecifiedEvent); + } + return 1; +} + +/* 80041D34-80041DDC 03C674 00A8+00 1/1 0/0 0/0 .text talkEnd__14dEvt_control_cFv */ +int dEvt_control_c::talkEnd() { + fopAc_ac_c* actor = getPt1(); + if (actor != NULL) { + actor->eventInfo.setCommand(dEvtCmd_NONE_e); + } + + actor = getPt2(); + if (actor != NULL) { + actor->eventInfo.setCommand(dEvtCmd_NONE_e); + } + + if (mSpecifiedEvent != -1) { + dComIfGp_getEventManager().endProc(mSpecifiedEvent, 1); + mSpecifiedEvent = -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; + + if (actor2 == NULL) { + return 0; + } + + if (!(p_order->mFlag & 0x10)) { + if (actor1 != NULL && !actor1->eventInfo.chkCondition(2)) { + return 0; + } + + if (actor2 != NULL && !actor2->eventInfo.chkCondition(2)) { + return 0; + } + } + + if (!beforeFlagProc(p_order)) { + return 0; + } + + if (actor1 != NULL) { + dComIfGp_getEventManager().setObjectArchive(actor1->eventInfo.getArchiveName()); + } + + if (!dComIfGp_getEventManager().order(eventId)) { + return 0; + } + + if (actor1 != NULL) { + actor1->eventInfo.setCommand(dEvtCmd_INDEMO_e); + } + + if (actor2 != NULL) { + actor2->eventInfo.setCommand(dEvtCmd_INDEMO_e); + } + + mMode = EVT_MODE_DEMO; + setParam(p_order); + afterFlagProc(p_order); + return 1; +} + +/* 80041F18-80041FA0 03C858 0088+00 1/1 0/0 0/0 .text demoEnd__14dEvt_control_cFv */ +int dEvt_control_c::demoEnd() { + fopAc_ac_c* actor = getPt1(); + if (actor != NULL) { + actor->eventInfo.setCommand(dEvtCmd_NONE_e); + } + + actor = getPt2(); + if (actor != NULL) { + actor->eventInfo.setCommand(dEvtCmd_NONE_e); + } + + if (mSpecifiedEvent != -1) { + dComIfGp_getEventManager().endProc(mSpecifiedEvent, 1); + mSpecifiedEvent = -1; + } + return 1; +} + +int dEvt_control_c::potentialCheck(dEvt_order_c* p_order) { + fopAc_ac_c* actor = p_order->mActor1; + + 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; + } +} + +/* 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; + + fopAc_ac_c* actor2 = getPt2(); + if (actor2 != NULL) { + dComIfGp_getEventManager().setObjectArchive(actor2->eventInfo.getArchiveName()); + } + + if (mSpecifiedEvent == -1 && actor2 != NULL && actor2->eventInfo.getEventId() != -1) { + mSpecifiedEvent = actor2->eventInfo.getEventId(); + } + + if (mSpecifiedEvent != -1 && + dComIfGp_getEventManager().getEventData(mSpecifiedEvent) != NULL) { + dComIfGp_getEventManager().order(mSpecifiedEvent); + } else { + mSpecifiedEvent = -1; + reset(); + } + + if (p_order->mEventType == EVT_TYPE_TREASURE) { + onEventFlag(4); + } else { + onEventFlag(0x40); + } + + return 1; + } else { + 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"; + + if (commonCheck(p_order, 8, 4)) { + mMode = EVT_MODE_DEMO; + mSpecifiedEvent = dComIfGp_getEventManager().getEventIdx(event, -1, -1); + dComIfGp_getEventManager().order(mSpecifiedEvent); + return 1; + } else { + return 0; + } +} + +/* 800421C0-80042254 03CB00 0094+00 1/1 0/0 0/0 .text endProc__14dEvt_control_cFv */ +int dEvt_control_c::endProc() { + switch (mMode) { + case EVT_MODE_TALK: + talkEnd(); + break; + case EVT_MODE_DEMO: + demoEnd(); + break; + case 3: + break; + } + + mMode = EVT_MODE_NONE; + field_0xea = 255; + mMapToolId = 255; + mStageEventDt = NULL; + field_0xec = 255; + field_0xed = 0; + mEventID = 255; + mPreItemNo = NO_ITEM; + dComIfGp_getEventManager().setStartDemo(-2); + return 1; +} + +/* 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; + + do { + order = &mOrder[curOrderIdx]; + + if (order->mFlag & 0xE00 && order->mActor1 == mChangeOK) { + mOrderIdx = curOrderIdx; + mNum = 1; + order->mNextOrderIdx = -1; + return curOrderIdx; + } + + curOrderIdx = order->mNextOrderIdx; + } while (curOrderIdx >= 0); + } + + return -1; +} + +/* 800422C0-80042468 03CC00 01A8+00 2/1 0/0 0/0 .text entry__14dEvt_control_cFv */ +int dEvt_control_c::entry() { + if (mNum != 0) { + s8 orderIdx = mOrderIdx; + mNum = 0; + + do { + dEvt_order_c* order = &mOrder[orderIdx]; + orderIdx = order->mNextOrderIdx; + + switch (order->mEventType) { + case EVT_TYPE_TALK: + if (dComIfGs_getLife() != 0 && talkCheck(order) != 0) { + return 1; + } + break; + case EVT_TYPE_OTHER: + if (dComIfGs_getLife() != 0 && demoCheck(order) != 0) { + return 1; + } + break; + case EVT_TYPE_DOOR: + case EVT_TYPE_TREASURE: + if (dComIfGs_getLife() != 0 && doorCheck(order) != 0) { + return 1; + } + break; + case EVT_TYPE_COMPULSORY: + mMode = 3; + setParam(order); + return 1; + case EVT_TYPE_POTENTIAL: + if (dComIfGs_getLife() != 0 && potentialCheck(order) != 0) { + return 1; + } + break; + case EVT_TYPE_ITEM: + if (dComIfGs_getLife() != 0 && itemCheck(order) != 0) { + return 1; + } + break; + case EVT_TYPE_SHOWITEM_X: + case EVT_TYPE_SHOWITEM_Y: + if (dComIfGs_getLife() != 0 && talkXyCheck(order) != 0) { + return 1; + } + break; + case EVT_TYPE_CATCH: + if (dComIfGs_getLife() != 0 && catchCheck(order) != 0) { + return 1; + } + break; + case 13: + break; + } + } while (orderIdx >= 0); + } + + return 0; +} + +/* 80042468-80042518 03CDA8 00B0+00 1/1 8/8 388/388 .text reset__14dEvt_control_cFv */ +void dEvt_control_c::reset() { + if (field_0xec != 0xFF) { + fopAc_ac_c* pt1 = getPt1(); + s16 eventIdx = dComIfGp_getEventManager().getEventIdx(NULL, field_0xec, -1); + fopAc_ac_c* pt2 = getPt2(); + + order(EVT_TYPE_OTHER, 3, 0x201, mHindFlag, pt1, pt2, eventIdx, field_0xec); + mChangeOK = pt1; + } + + onEventFlag(8); +} + +/* 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); + } + + mChangeOK = param_0; + onEventFlag(8); +} + +void dEvt_control_c::clearSkipSystem() { + mSkipFunc = NULL; + field_0x104 = -1; + field_0x10c = 0; + mSkipTimer = 0; + + if (!chkFlag2(3)) { + mSkipFade = 0; + } + 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); + 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(); + + s16 eventID = -1; + dStage_MapEvent_dt_c* data = evControl->getStageEventDt(); + bool var_r27 = true; + + if (data != NULL) { + if (data->field_0x9 != 0xFF) { + var_r27 = false; + } else if (data->field_0x7 != 0xFF) { + var_r27 = false; + } + } + + switch (param_1) { + case 0: + char eventName[32]; + strcpy(eventName, data->mName); + strcat(eventName, "$0"); + eventID = dComIfGp_getEventManager().getEventIdx(eventName, 0xFF, -1); + break; + case 1: + char* skipName = dComIfGp_getEvent().getSkipEventName(); + eventID = dComIfGp_getEventManager().getEventIdx(skipName, 0xFF, -1); + break; + } + + if (eventID != -1) { + evControl->reset(param_0); + fopAcM_orderOtherEventId((fopAc_ac_c*)param_0, eventID, evControl->getMapToolId(), -1, 3, + 0x400); + return 2; + } else if (var_r27) { + evControl->reset(param_0); + return 1; + } else { + evControl->reset(param_0); + 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(); + + s16 eventID = -1; + dStage_MapEvent_dt_c* data = evControl->getStageEventDt(); + bool var_r27 = true; + + if (data != NULL) { + if (data->field_0x9 != 0xFF) { + var_r27 = false; + } else if (data->field_0x7 != 0xFF) { + var_r27 = false; + } + } + + switch (param_1) { + case 0: + char eventName[32]; + strcpy(eventName, data->mName); + strcat(eventName, "$0"); + eventID = dComIfGp_getEventManager().getEventIdx(eventName, 0xFF, -1); + break; + case 1: + char* skipName = dComIfGp_getEvent().getSkipEventName(); + eventID = dComIfGp_getEventManager().getEventIdx(skipName, 0xFF, -1); + break; + } + + if (eventID != -1) { + evControl->reset(param_0); + dDemo_c::end(); + fopAcM_orderOtherEventId((fopAc_ac_c*)param_0, eventID, evControl->getMapToolId(), -1, 3, + 0x400); + return 2; + } else if (var_r27) { + evControl->reset(param_0); + dDemo_c::end(); + return 1; + } else { + evControl->reset(param_0); + return 1; + } +} + +/* 800428DC-8004290C 03D21C 0030+00 0/0 1/1 33/33 .text dEv_noFinishSkipProc__FPvi */ +int dEv_noFinishSkipProc(void*, int) { + dComIfGp_getEvent().offSkipFade(); + return 0; +} + +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::setSkipZev(void* param_0, char* evtName) { + setSkipProc(param_0, dEv_defaultSkipZev, 1); + strcpy(mSkipEventName, evtName); +} + +void dEvt_control_c::onSkipFade() { + mSkipFade = 1; +} + +void dEvt_control_c::offSkipFade() { + if (mSkipFade != 0) { + mSkipFade = 0; + } + mSkipFade = 0; +} + +/* 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 canSkip = false; + + offFlag2(8); + if (mEventStatus == 1) { + if (mSkipFunc != NULL) { + canSkip = true; + } + + if (mDoCPd_c::getTrigStart(PAD_1)) { + if (mSkipTimer > 0) { + mSkipTimer = -1; + + if (canSkip && mSkipFade) { + mDoGph_gInf_c::fadeOut(0.1f); + } + } else if (mSkipTimer == 0) { + mSkipTimer = 1; + } + } + + if (mSkipTimer > 0) { + if (canSkip) { + dComIfGp_setSButtonStatusForce(0x43, 1); + } else { + dComIfGp_setSButtonStatusForce(0x4D, 1); + } + + int curTimer = mSkipTimer; + mSkipTimer++; + if (curTimer > 45) { + mSkipTimer = 0; + } + } else if (mSkipTimer != 0) { + if (canSkip && mSkipFade) { + int curTimer = mSkipTimer; + mSkipTimer--; + + if (curTimer < -20) { + startSkip = true; + mSkipTimer = 0; + } + } else { + if (canSkip) { + startSkip = true; + } + mSkipTimer = 0; + } + } + + if (startSkip) { + dMsgObject_onKillMessageFlag(); + + fopAc_ac_c* ptr = convPId(field_0x104); + if (ptr == NULL) { + ptr = dComIfGp_getPlayer(0); + } + + int skipRet = mSkipFunc(ptr, field_0x10c); + onFlag2(8); + + if (skipRet != 0) { + mSkipFunc = NULL; + + if (skipRet == 2) { + onFlag2(1); + } else { + onFlag2(2); + } + } + } + } + + return startSkip; +} + +/* 80451EC8-80451ECC 0004C8 0004+00 1/1 0/0 0/0 .sdata2 @5013 */ +static f32 lit_5013 = -1.0f / 20.0f; + +/* 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(); + + field_0xe7 = 0; + field_0xe8 = mNum; + skipper(); + + if (chkEventFlag(8)) { + if (mEventStatus == 1) { + mEventStatus = 5; + + if (dMsgObject_getMsgObjectClass() != NULL) { + dMsgObject_endFlowGroup(); + } + } + + dEvDtEvent_c* eventDt = evtMng->getEventData(mSpecifiedEvent); + if (eventDt != NULL) { + eventDt->forceFinish(); + } + offEventFlag(8); + } + + if (mEventStatus != 0) { + evtMng->Sequencer(); + } + offEventFlag(0x300); + + if (mEventStatus == 2) { + evtMng->cancelStaff("ALL"); + evtMng->setCameraPlay(0); + mEventFlag = 0; + onEventFlag(0x200); + mEventStatus = 0; + } else if (mEventStatus == 0) { + mEventFlag = 0; + } + + if (mEventStatus == 5 && !dComIfGp_isEnableNextStage()) { + if (chkFlag2(2) || mSkipTimer < 0) { + if (mSkipFade) { + mDoGph_gInf_c::fadeOut(-0.05f); + } + offFlag2(2); + clear_tmpflag_for_message(); + } + + endProc(); + if (!chkFlag2(3)) { + mSkipFade = false; + evtMng->setObjectArchive(NULL); + } + mEventStatus = 2; + } else if (mEventStatus == 5 && (chkFlag2(2) || mSkipTimer < 0)) { + clear_tmpflag_for_message(); + } + + if (change() != -1) { + evtMng->cancelStaff("ALL"); + evtMng->setCameraPlay(0); + onEventFlag(0x200); + mEventStatus = 0; + + if (chkFlag2(1)) { + offFlag2(1); + onFlag2(2); + } + } + mCompulsory = 0; + + int roomNo = dComIfGp_roomControl_getStayNo(); + if (mRoomNo != roomNo) { + mRoomInfoSet = 0; + mRoomNo = roomNo; + } + + if (mEventStatus == 0 && entry() != 0) { + if (dMsgObject_getMsgObjectClass() != NULL) { + dMsgObject_setKillMessageFlag(); + } + onEventFlag(0x100); + + dComIfGp_getVibration().StopQuake(31); + daAlink_c* player = daAlink_getAlinkActorClass(); + + if (!dCam_getBody()->Active() && player->checkFishingCastMode()) { + dCam_getBody()->QuickStart(); + } + mEventStatus = 1; + clearSkipSystem(); + } + + mNum = 0; + mChangeOK = NULL; + + if (chkEventFlag(0x200)) { + Z2AudioMgr::getInterface()->setDemoName(NULL); + } + + if (mEventStatus != 0) { + evtMng->Experts(); + return 1; + } else { + if (!mRoomInfoSet) { + char lastStageName[8]; + strncpy(lastStageName, dComIfGp_getStartStageName(), 7); + lastStageName[7] = 0; + + dComIfGp_setLastPlayStageName(lastStageName); + dComIfGs_onVisitedRoom(mRoomNo); + } + mRoomInfoSet = true; + } + + return 0; +} + +/* 80042FA8-8004316C 03D8E8 01C4+00 0/0 2/2 0/0 .text moveApproval__14dEvt_control_cFPv + */ +int dEvt_control_c::moveApproval(void* param_0) { + fopAc_ac_c* actor = (fopAc_ac_c*)param_0; + if (fopAcM_checkStatus(actor, 0x20000)) { + return 2; + } + + if (!runCheck()) { + return 1; + } + + switch (mMode) { + case EVT_MODE_TALK: + if (getPt1() == actor || getPt2() == actor) { + return 2; + } + break; + case EVT_MODE_DEMO: + if (getPt1() == actor || getPt2() == actor) { + return 2; + } + + if (actor->demoActorID != 0) { + return 2; + } + break; + case 3: + if (getPt1() == actor) { + return 2; + } + break; + } + + if (fopAcM_checkStatus(actor, 0x8000)) { + return 2; + } + + if (fopAcM_checkStatus(actor, 0x800)) { + return 1; + } + + if (dComIfGp_checkPlayerStatus0(0, 0x20000000) || + dComIfGp_checkPlayerStatus1(0, 0x4002000)) { + return 0; + } + + if (mMode == EVT_MODE_TALK && fopAcM_checkStatus(actor, 0x40)) { + return 1; + } + + if (dDemo_c::getMode() == 1) { + return 1; + } + + if ((getMode() == 3 || getMode() == EVT_MODE_TALK) && fopAcM_checkStatus(actor, 0x4000000)) { + return 0; + } + + if (fopAcM_checkStatus(actor, 0x4000)) { + return 1; + } + + if (fopAcM_checkStatus(actor, 0x2000)) { + return 1; + } + + return 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) { + return 0; + } + + mCompulsory = 1; + return orderOld(EVT_TYPE_COMPULSORY, 2, 0, hind, param_0, NULL, eventName); +} + +void dEvt_control_c::remove() { + mMode = EVT_MODE_NONE; + mEventStatus = 0; + mNum = 0; + mDebugStb = 0; + field_0xe6 = 0; + field_0xe7 = 0; + mCullRate = 0.0f; + field_0xea = -1; + mMapToolId = -1; + field_0xec = -1; + mStageEventDt = NULL; + mEventID = 255; + field_0xed = 0; + mPreItemNo = NO_ITEM; + mEventFlag = 0; + mFlag2 = 0; + mChangeOK = NULL; + clearSkipSystem(); + mCompulsory = 0; + mRoomInfoSet = false; + mRoomNo = -1; +} + +/* 80043278-80043280 03DBB8 0008+00 2/2 2/2 0/0 .text getStageEventDt__14dEvt_control_cFv + */ +dStage_MapEvent_dt_c* dEvt_control_c::getStageEventDt() { + return mStageEventDt; +} + +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) { + if (actor == NULL) { + return 0xFFFFFFFF; + } else { + return fopAcM_GetID(actor); + } +} + +/* 800432EC-8004331C 03DC2C 0030+00 7/7 13/13 16/16 .text convPId__14dEvt_control_cFUi */ +fopAc_ac_c* dEvt_control_c::convPId(unsigned int id) { + return (fopAc_ac_c*)fopAcIt_Judge(fpcSch_JudgeByID, &id); +} + +/* 8004331C-800433F0 03DC5C 00D4+00 0/0 1/1 0/0 .text getStbDemoData__14dEvt_control_cFPc + */ +void* dEvt_control_c::getStbDemoData(char* resName) { + char* demoArcName = dStage_roomControl_c::getDemoArcName(); + if (*demoArcName != 0) { + void* res = dComIfG_getObjectRes(demoArcName, resName); + if (res != NULL) { + event_debug_evnt(); + return res; + } + event_debug_evnt(); + } else { + event_debug_evnt(); + } + + 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; + } + } +} + +dEvt_info_c::dEvt_info_c() { + setCommand(dEvtCmd_NONE_e); + setCondition(2); + setEventId(-1); + setMapToolId(-1); + mArchiveName = NULL; + mIndex = 0; +} + +/* 80043428-80043480 03DD68 0058+00 0/0 0/0 4/4 .text setEventName__11dEvt_info_cFPc */ +void dEvt_info_c::setEventName(char* name) { + if (name == NULL) { + mEventId = -1; + } else { + mEventId = dComIfGp_getEventManager().getEventIdx(name, -1, -1); + } +} + +/* 80043480-800434CC 03DDC0 004C+00 1/1 0/0 0/0 .text getEventName__11dEvt_info_cFv */ +char* dEvt_info_c::getEventName() { + if (mEventId == -1) { + return NULL; + } else { + dEvDtEvent_c* data = dComIfGp_getEventManager().getEventData(mEventId); + if (data == NULL) { + return NULL; + } else { + return data->getName(); + } + } +} + +void dEvt_info_c::beforeProc() { + setCondition(2); +} + +/* 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()); +} + +/* 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) { + if (mapToolID == 0xFF) { + return NULL; + } + + dStage_roomStatus_c* room = dComIfGp_roomControl_getStatusRoomDt(roomNo); + if (room != NULL) { + dStage_MapEventInfo_c* roomDt = room->mRoomDt.getMapEventInfo(); + + if (roomDt != NULL) { + for (int i = 0; i < roomDt->mCount; i++) { + if (mapToolID == roomDt->mData[i].field_0x4) { + return &roomDt->mData[i]; + } + } + } + } + + dStage_MapEventInfo_c* stageDt = dComIfGp_getStage()->getMapEventInfo(); + if (stageDt != NULL) { + for (int i = 0; i < stageDt->mCount; i++) { + if (mapToolID == stageDt->mData[i].field_0x4) { + return &stageDt->mData[i]; + } + } + } + + return NULL; +} + +s16 dEvt_control_c::runningEventID(s16 eventID) { + return eventID == mEventID ? mSpecifiedEvent : eventID; +} + +void dEvt_control_c::setPt1(void* ptr) { + mPt1 = getPId(ptr); +} + +void dEvt_control_c::setPt2(void* ptr) { + mPt2 = getPId(ptr); +} + +void dEvt_control_c::setPtT(void* ptr) { + mPtT = getPId(ptr); +} + +void dEvt_control_c::setPtI(void* ptr) { + mPtI = getPId(ptr); +} + +void dEvt_control_c::setPtI_Id(unsigned int id) { + mPtI = id; +} + +void dEvt_control_c::setPtD(void* ptr) { + mPtd = getPId(ptr); +} + +void dEvt_control_c::setGtItm(u8 itemNo) { + mGtItm = itemNo; +} + +/* 80379DC6-80379DD0 006426 0008+02 0/0 0/0 0/0 .rodata None */ +static char const* const stringBase_80379DC6 = "GIVEMAN";
\ No newline at end of file |
