tp/src/d/d_event.cpp

1184 lines
32 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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"
#include "d/d_event_debug.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() {
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;
}
static char const* dummy1() {
return "???";
}
/* 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::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) == fpcNm_ITEM_NONE) {
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(dEvtCnd_40_e))) {
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 = fpcNm_ITEM_NONE;
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;
}
/* 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 = fpcNm_ITEM_NONE;
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(fpc_ProcID id) {
return fopAcM_SearchByID(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_roomDt_c* room_dt = dComIfGp_roomControl_getStatusRoomDt(roomNo);
if (room_dt != NULL) {
dStage_MapEventInfo_c* roomInfo = room_dt->getMapEventInfo();
if (roomInfo != NULL) {
for (int i = 0; i < roomInfo->num; i++) {
if (mapToolID == roomInfo->m_entries[i].field_0x4) {
return &roomInfo->m_entries[i];
}
}
}
}
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];
}
}
}
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(fpc_ProcID id) {
mPtI = id;
}
void dEvt_control_c::setPtD(void* ptr) {
mPtd = getPId(ptr);
}
void dEvt_control_c::setGtItm(u8 itemNo) {
mGtItm = itemNo;
}
static char const* dummy2() {
return "GIVEMAN";
}