summaryrefslogtreecommitdiff
path: root/src/d/d_event.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-10-10 07:29:58 -0700
committerGitHub <noreply@github.com>2024-10-10 08:29:58 -0600
commit12eb254d769d84743b5cc6cd5424057c57eaf0ad (patch)
tree4509be332b2ccfc6fe939f47740d68f7746eca3e /src/d/d_event.cpp
parent2fd702c0ac170a789af879b8b92a82d4dcc9080c (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.cpp1223
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