mirror of https://github.com/zeldaret/tp.git
1111 lines
36 KiB
C++
1111 lines
36 KiB
C++
/**
|
|
* d_event_manager.cpp
|
|
* Event System Manager
|
|
*/
|
|
|
|
#include "d/d_event_manager.h"
|
|
#include "SSystem/SComponent/c_math.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "stdio.h"
|
|
|
|
void dEvent_exception_c::init() {
|
|
mEventInfoIdx = -1;
|
|
mState = 0;
|
|
}
|
|
|
|
/* 800463F0-80046480 040D30 0090+00 0/0 2/2 0/0 .text setStartDemo__18dEvent_exception_cFi */
|
|
s32 dEvent_exception_c::setStartDemo(int mapToolID) {
|
|
int roomNo = dComIfGp_roomControl_getStayNo();
|
|
dStage_MapEvent_dt_c* eventData = dEvt_control_c::searchMapEventData(mapToolID, roomNo);
|
|
|
|
if (eventData != NULL && eventData->mSwitch != 0xFF &&
|
|
dComIfGs_isSwitch(eventData->mSwitch, roomNo))
|
|
{
|
|
return 0xFF;
|
|
} else if (mEventInfoIdx != mapToolID) {
|
|
mEventInfoIdx = mapToolID;
|
|
}
|
|
return mapToolID;
|
|
}
|
|
|
|
/* 80046480-800465E8 040DC0 0168+00 1/1 0/0 0/0 .text getEventName__18dEvent_exception_cFv */
|
|
const char* dEvent_exception_c::getEventName() {
|
|
static const char* soecial_names[14] = {
|
|
"NORMAL_COMEBACK", "DEFAULT_START", "SHUTTER_START", "SHUTTER_START_STOP",
|
|
"BS_SHUTTER_START", "BS_SHUTTER_START_B", "KNOB_START", "KNOB_START_B",
|
|
"FMASTER_START", "FALL_START", "CRAWLOUT_START", "BOSSWARP_START",
|
|
"PORTALWARP_START", "PORTALWARP_START_B",
|
|
};
|
|
|
|
int roomNo = dComIfGp_roomControl_getStayNo();
|
|
dStage_roomDt_c* roomDt = dComIfGp_roomControl_getStatusRoomDt(roomNo);
|
|
dStage_MapEventInfo_c* eventInfo = roomDt->getMapEventInfo();
|
|
if (mEventInfoIdx == -1) {
|
|
return "(!NO REGIST!)";
|
|
}
|
|
|
|
if (200 < mEventInfoIdx && mEventInfoIdx < 215) {
|
|
if (mEventInfoIdx == 203) {
|
|
dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo());
|
|
} else if (mEventInfoIdx == 213) {
|
|
switch (dComIfGp_SelectWarpPt_get()) {
|
|
case 3:
|
|
mEventInfoIdx = 214;
|
|
}
|
|
}
|
|
return soecial_names[mEventInfoIdx - 201];
|
|
} else {
|
|
if (eventInfo == NULL) {
|
|
return "(!NO INFO!)";
|
|
}
|
|
|
|
if (mEventInfoIdx < 0 || mEventInfoIdx > eventInfo->num) {
|
|
return "(!BAD NUMBER!)";
|
|
}
|
|
|
|
dStage_MapEvent_dt_c* revt = &eventInfo->m_entries[mEventInfoIdx];
|
|
switch (revt->mType) {
|
|
case 1:
|
|
case 2:
|
|
return revt->mName;
|
|
case 0:
|
|
return "(MAP TOOL CAMERA)";
|
|
default:
|
|
return "(!BAD DATA!)";
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 800465E8-80046688 040F28 00A0+00 1/1 0/0 0/0 .text
|
|
* getSubstance__16dEvent_manager_cFP11dEvDtData_ci */
|
|
void* dEvent_manager_c::getSubstance(dEvDtData_c* p_data, int type) {
|
|
if (p_data->getIndex() < 0 || p_data->getNumber() <= 0) {
|
|
return NULL;
|
|
} else {
|
|
switch (p_data->getType()) {
|
|
case dEvDtData_c::TYPE_FLOAT:
|
|
case dEvDtData_c::TYPE_VEC:
|
|
case 2:
|
|
return getBase().getFDataP(p_data->getIndex());
|
|
case dEvDtData_c::TYPE_INT:
|
|
return getBase().getIDataP(p_data->getIndex());
|
|
case dEvDtData_c::TYPE_STRING:
|
|
return getBase().getSDataP(p_data->getIndex());
|
|
}
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
void dEvent_manager_c::setDbgData(const char* buffer) {
|
|
if(buffer) {
|
|
char* writableBuffer = const_cast<char*>(buffer);
|
|
mEventList[11].init(writableBuffer, -1);
|
|
}
|
|
}
|
|
|
|
dEvent_manager_c::dEvent_manager_c() {
|
|
mDataLoaded = false;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 80379F50-80379F60 0065B0 000F+01 6/6 0/0 0/0 .rodata
|
|
* DataFileName__29@unnamed@d_event_manager_cpp@ */
|
|
namespace {
|
|
static char const DataFileName[] = "event_list.dat";
|
|
};
|
|
|
|
/* 80046710-80046800 041050 00F0+00 0/0 1/1 0/0 .text create__16dEvent_manager_cFv */
|
|
int dEvent_manager_c::create() {
|
|
mCameraPlay = 0;
|
|
mEventException.init();
|
|
mFlags.init();
|
|
mCurrentEventType = 0;
|
|
mCurrentEventCompositId = -1;
|
|
field_0x1b8 = 0;
|
|
mRoomNo = -1;
|
|
mDataLoaded = 0;
|
|
|
|
for (int i = 4; i <= 9; i++) {
|
|
mEventList[i].init();
|
|
}
|
|
|
|
mEventList[3].init((char*)dComIfG_getStageRes(DataFileName), -1);
|
|
mEventList[10].init();
|
|
mEventList[1].init((char*)dComIfG_getObjectRes("Event", DataFileName), -1);
|
|
mEventList[2].init();
|
|
return 1;
|
|
}
|
|
|
|
/* 80046800-80046888 041140 0088+00 0/0 8/8 24/24 .text setObjectArchive__16dEvent_manager_cFPc */
|
|
bool dEvent_manager_c::setObjectArchive(char* arcName) {
|
|
char* rt = NULL;
|
|
|
|
if (arcName != NULL) {
|
|
char* res = (char*)dComIfG_getObjectRes(arcName, DataFileName);
|
|
rt = res;
|
|
mEventList[2].init(res, -1);
|
|
} else {
|
|
mEventList[2].init();
|
|
}
|
|
return rt != NULL;
|
|
}
|
|
|
|
/* 80046888-80046904 0411C8 007C+00 0/0 1/1 0/0 .text demoInit__16dEvent_manager_cFv */
|
|
void dEvent_manager_c::demoInit() {
|
|
if (mDataLoaded == false) {
|
|
if (dStage_roomControl_c::getDemoArcName()[0] != '\0') {
|
|
mEventList[10].init(
|
|
(char*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), DataFileName),
|
|
-1);
|
|
}
|
|
mDataLoaded = true;
|
|
}
|
|
}
|
|
|
|
/* 80046904-800469EC 041244 00E8+00 0/0 1/1 0/0 .text roomInit__16dEvent_manager_cFi */
|
|
void dEvent_manager_c::roomInit(int roomNo) {
|
|
if (roomNo == -1) {
|
|
roomNo = dComIfGp_roomControl_getStayNo();
|
|
}
|
|
char arc_name[8];
|
|
strcpy(arc_name, dComIfG_getRoomArcName(roomNo));
|
|
char* data = (char*)dComIfG_getStageRes(arc_name, DataFileName);
|
|
|
|
int i;
|
|
int eventIdx = -1;
|
|
for (i = 4; i <= 9; i++) {
|
|
if (mEventList[i].getHeaderP() == NULL) {
|
|
eventIdx = i;
|
|
continue;
|
|
}
|
|
|
|
if (mEventList[i].roomNo() == roomNo) {
|
|
eventIdx = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (eventIdx != -1) {
|
|
mEventList[eventIdx].init(data, roomNo);
|
|
}
|
|
mRoomNo = roomNo;
|
|
}
|
|
|
|
void dEvent_manager_c::roomFinish(int roomNo) {
|
|
for (int i = 4; i <= 9; i++) {
|
|
if (mEventList[i].getHeaderP() != NULL && roomNo == mEventList[i].roomNo()) {
|
|
mEventList[i].init();
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80046A58-80046C0C 041398 01B4+00 0/0 1/1 0/0 .text orderStartDemo__16dEvent_manager_cFv */
|
|
int dEvent_manager_c::orderStartDemo() {
|
|
BOOL success = FALSE;
|
|
if (mEventException.mEventInfoIdx == -2) {
|
|
return -2;
|
|
}
|
|
|
|
s16 eventIdx;
|
|
if (200 < mEventException.mEventInfoIdx && mEventException.mEventInfoIdx < 215) {
|
|
eventIdx = getEventIdx(mEventException.getEventName(), -1, -1);
|
|
success = fopAcM_orderOtherEventId(NULL, eventIdx, 0xFF, 0xFFFF, 5, 1);
|
|
} else if (mEventException.mEventInfoIdx != -1 && mEventException.mEventInfoIdx != 0xFF) {
|
|
u8 eventInfoIdx = mEventException.mEventInfoIdx;
|
|
eventIdx = getEventIdx(NULL, eventInfoIdx, -1);
|
|
success = fopAcM_orderMapToolAutoNextEvent(NULL, eventInfoIdx, eventIdx, 0xFFFF, 1, 5);
|
|
} else if (dComIfGp_getStartStagePoint() == -2 || dComIfGp_getStartStagePoint() == -3) {
|
|
eventIdx = getEventIdx(
|
|
daPy_py_c::checkNowWolf() ? "WOLF_WORLD_CHANGE_OUT" : "WORLD_CHANGE_OUT", 0xFF, -1);
|
|
success = fopAcM_orderOtherEventId(NULL, eventIdx, 0xFF, 0xFFFF, 5, 1);
|
|
}
|
|
|
|
if (success == FALSE) {
|
|
eventIdx = getEventIdx("DEFAULT_START", 0xFF, -1);
|
|
fopAcM_orderOtherEventId(NULL, eventIdx, 0xFF, 0xFFFF, 5, 1);
|
|
}
|
|
|
|
return eventIdx;
|
|
}
|
|
|
|
void dEvent_manager_c::remove() {
|
|
for (int i = 0; i < 11; i++) {
|
|
mEventList[i].init();
|
|
}
|
|
mCameraPlay = 0;
|
|
mEventException.init();
|
|
mFlags.init();
|
|
}
|
|
|
|
/* 80046C74-80046C88 0415B4 0014+00 1/1 0/0 0/0 .text extraOnObjectCallBack__FP10fopAc_ac_cPv */
|
|
static int extraOnObjectCallBack(fopAc_ac_c* pActor, void* param_1) {
|
|
fopAcM_OnStatus(pActor, 0x800);
|
|
return 0;
|
|
}
|
|
|
|
/* 80046C88-80046C9C 0415C8 0014+00 1/1 0/0 0/0 .text extraOffObjectCallBack__FP10fopAc_ac_cPv */
|
|
static int extraOffObjectCallBack(fopAc_ac_c* pActor, void* param_1) {
|
|
fopAcM_OffStatus(pActor, 0x800);
|
|
return 0;
|
|
}
|
|
|
|
/* 80046C9C-80046CB8 0415DC 001C+00 1/1 0/0 0/0 .text allOffObjectCallBack__FP10fopAc_ac_cPv */
|
|
static int allOffObjectCallBack(fopAc_ac_c* pActor, void* param_1) {
|
|
fopAcM_OffStatus(pActor, 0x9000);
|
|
return 0;
|
|
}
|
|
|
|
/* 80046CB8-80046DA0 0415F8 00E8+00 1/1 0/0 0/0 .text
|
|
* startProc__16dEvent_manager_cFP12dEvDtEvent_c */
|
|
void dEvent_manager_c::startProc(dEvDtEvent_c* p_evnt) {
|
|
for (int i = 0; i < p_evnt->getNStaff(); i++) {
|
|
dEvDtStaff_c* staff = getBase().getStaffP(p_evnt->getStaff(i));
|
|
|
|
if (staff->getType() == dEvDtStaff_c::TYPE_DEFAULT) {
|
|
fopAc_ac_c* ac = specialCast(staff->getName(), 1);
|
|
if (ac == NULL) {
|
|
ac = fopAcM_searchFromName4Event(staff->getName(), -1);
|
|
}
|
|
|
|
if (ac != NULL) {
|
|
fopAcM_OnStatus(ac, 0x8000);
|
|
}
|
|
}
|
|
|
|
if (staff->getType() == dEvDtStaff_c::TYPE_ALL) {
|
|
issueStaff(staff->getName());
|
|
}
|
|
staff->init();
|
|
}
|
|
|
|
p_evnt->mEventState = 1;
|
|
mFlags.init();
|
|
}
|
|
|
|
/* 80046DA0-80046DAC 0416E0 000C+00 2/2 0/0 0/0 .text
|
|
* closeProc__16dEvent_manager_cFP12dEvDtEvent_c */
|
|
void dEvent_manager_c::closeProc(dEvDtEvent_c* p_evnt) {
|
|
p_evnt->mEventState = 2;
|
|
}
|
|
|
|
/* 80046DAC-80046E64 0416EC 00B8+00 0/0 2/2 0/0 .text endProc__16dEvent_manager_cFsi */
|
|
void dEvent_manager_c::endProc(s16 eventID, int close) {
|
|
dEvDtEvent_c* event = getEventData(eventID);
|
|
if (event != NULL) {
|
|
if (close != 0) {
|
|
closeProc(event);
|
|
}
|
|
|
|
if (event->mEventState == 2) {
|
|
const char* param = "ALL";
|
|
fopAcM_Search((fopAcIt_JudgeFunc)allOffObjectCallBack, (void*)param);
|
|
mCameraPlay = 2;
|
|
event->mEventState = 0;
|
|
mCurrentEventType = 0;
|
|
mCurrentEventCompositId = -1;
|
|
dComIfGp_getEvent().setPtD(NULL);
|
|
dComIfGp_getEvent().setPtI(NULL);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80046E64-800473FC 0417A4 0598+00 0/0 1/1 0/0 .text Sequencer__16dEvent_manager_cFv */
|
|
void dEvent_manager_c::Sequencer() {
|
|
dEvt_control_c& evtControl = dComIfGp_getEvent();
|
|
dEvDtEvent_c* event = getEventData(mCurrentEventCompositId);
|
|
dStage_MapEvent_dt_c* mapEvent = evtControl.getStageEventDt();
|
|
|
|
if (event != NULL) {
|
|
if (evtControl.chkEventFlag(0x100)) {
|
|
char* name = NULL;
|
|
if (mapEvent != NULL) {
|
|
switch (mapEvent->mType) {
|
|
case 0:
|
|
default:
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
name = mapEvent->mName;
|
|
break;
|
|
}
|
|
|
|
if (dStage_MapEvent_dt_c_getEventSCutSW(mapEvent) != 0 && !evtControl.chkFlag2(2)) {
|
|
if (dStage_MapEvent_dt_c_getEventSCutType(mapEvent) == 2) {
|
|
evtControl.onSkipFade();
|
|
}
|
|
|
|
fopAc_ac_c* actor = evtControl.getPt1();
|
|
if (actor == NULL) {
|
|
actor = evtControl.getPt2();
|
|
}
|
|
|
|
if (actor == NULL) {
|
|
actor = dComIfGp_getPlayer(0);
|
|
}
|
|
|
|
if (actor != NULL) {
|
|
switch (mapEvent->mType) {
|
|
case 2:
|
|
evtControl.setSkipProc(actor, dEv_defaultSkipStb, 0);
|
|
break;
|
|
case 1:
|
|
evtControl.setSkipProc(actor, dEv_defaultSkipZev, 0);
|
|
break;
|
|
case 0:
|
|
evtControl.setSkipProc(actor, dEv_defaultSkipProc, 0);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Z2GetAudioMgr()->setDemoName(name);
|
|
}
|
|
|
|
if (event->finishCheck()) {
|
|
bool bVar1 = false;
|
|
if (evtControl.chkFlag2(1)) {
|
|
bVar1 = true;
|
|
}
|
|
|
|
int exit = -1;
|
|
bool iVar5;
|
|
if (evtControl.chkFlag2(2)) {
|
|
iVar5 = true;
|
|
} else {
|
|
iVar5 = false;
|
|
}
|
|
|
|
if (mapEvent != NULL) {
|
|
int cutType = dStage_MapEvent_dt_c_getEventSCutType(mapEvent);
|
|
if (iVar5 && cutType != 1) {
|
|
bVar1 = true;
|
|
cXyz attentionPos(dComIfGp_getPlayer(0)->attention_info.position);
|
|
cXyz camCenter = dCam_getBody()->Center();
|
|
f32 distance = cXyz((attentionPos - camCenter)).abs();
|
|
|
|
if (cutType == 0) {
|
|
if (distance > 180) {
|
|
dCam_getBody()->EventRecoverNotime();
|
|
}
|
|
} else {
|
|
switch (mapEvent->field_0x3) {
|
|
case 1:
|
|
case 2:
|
|
if (distance > 180) {
|
|
dCam_getBody()->EventRecoverNotime();
|
|
}
|
|
break;
|
|
case 3:
|
|
dCam_getBody()->EventRecoverNotime();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
switch (mapEvent->mType) {
|
|
case 0:
|
|
switch (mapEvent->mSeType) {
|
|
case EVT_SE_RIDDLE_A:
|
|
mDoAud_seStart(Z2SE_READ_RIDDLE_A, NULL, 0, 0);
|
|
break;
|
|
case EVT_SE_RIDDLE_B:
|
|
mDoAud_seStart(Z2SE_READ_RIDDLE_B, NULL, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (!bVar1) {
|
|
if (iVar5 && mapEvent->field_0x9 != 0xFF) {
|
|
exit = mapEvent->field_0x9;
|
|
evtControl.sceneChange(exit);
|
|
} else if (mapEvent->field_0x17 != 0xFF) {
|
|
exit = mapEvent->field_0x17;
|
|
evtControl.sceneChange(exit);
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if (!bVar1) {
|
|
if (iVar5 && mapEvent->field_0x9 != 0xFF) {
|
|
exit = mapEvent->field_0x9;
|
|
evtControl.sceneChange(exit);
|
|
} else if (mapEvent->field_0x7 != 0xFF) {
|
|
exit = mapEvent->field_0x7;
|
|
evtControl.sceneChange(exit);
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
if (!bVar1) {
|
|
if (iVar5 && mapEvent->field_0x9 != 0xFF) {
|
|
exit = mapEvent->field_0x9;
|
|
evtControl.sceneChange(exit);
|
|
} else if (mapEvent->field_0x7 != 0xFF) {
|
|
exit = mapEvent->field_0x7;
|
|
evtControl.sceneChange(exit);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (exit == -1) {
|
|
getBase().advanceCut(event);
|
|
closeProc(event);
|
|
evtControl.reset();
|
|
}
|
|
} else {
|
|
if (event->mEventState == 1) {
|
|
getBase().advanceCut(event);
|
|
}
|
|
}
|
|
|
|
if (field_0x1b8 != 0) {
|
|
field_0x1b8--;
|
|
}
|
|
} else {
|
|
if (evtControl.chkEventFlag(0x100)) {
|
|
Z2GetAudioMgr()->setDemoName(NULL);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 800473FC-80047454 041D3C 0058+00 0/0 1/1 0/0 .text Experts__16dEvent_manager_cFv */
|
|
void dEvent_manager_c::Experts() {
|
|
dEvDtEvent_c* event = getEventData(mCurrentEventCompositId);
|
|
if (event != NULL && event->mEventState == 1) {
|
|
event->specialStaffProc(getBase().getStaffP(0));
|
|
}
|
|
}
|
|
|
|
/* 80047454-800474BC 041D94 0068+00 1/1 0/0 0/0 .text getEventData__16dEvent_manager_cFsi
|
|
*/
|
|
dEvDtEvent_c* dEvent_manager_c::getEventData(s16 param_0, int idx) {
|
|
if (idx <= 0 || idx > 11) {
|
|
return NULL;
|
|
} else {
|
|
dEvDtBase_c* base = &mEventList[idx];
|
|
|
|
if (base == NULL || base->getHeaderP() == NULL) {
|
|
return NULL;
|
|
} else if (param_0 < 0 || param_0 >= base->getEventNum()) {
|
|
return NULL;
|
|
} else {
|
|
return base->getEventP(param_0);
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 800474BC-80047514 041DFC 0058+00 9/9 3/3 4/4 .text getEventData__16dEvent_manager_cFs
|
|
*/
|
|
dEvDtEvent_c* dEvent_manager_c::getEventData(s16 eventCompositId) {
|
|
if (eventCompositId == -1) {
|
|
return NULL;
|
|
} else {
|
|
return getEventData(getIndexCompositId(eventCompositId),
|
|
getTypeCompositId(eventCompositId));
|
|
}
|
|
}
|
|
|
|
/* 80047514-80047698 041E54 0184+00 3/3 8/8 3/3 .text getEventIdx__16dEvent_manager_cFPCcUcl */
|
|
s16 dEvent_manager_c::getEventIdx(char const* eventName, u8 mapToolID, s32 roomNo) {
|
|
if (roomNo == -1) {
|
|
roomNo = dComIfGp_roomControl_getStayNo();
|
|
}
|
|
|
|
if (mapToolID != 0xFF) {
|
|
dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(mapToolID, roomNo);
|
|
if (data != NULL) {
|
|
switch (data->mType) {
|
|
case 1:
|
|
case 2:
|
|
return getEventIdx(data->mName, 0xFF, roomNo);
|
|
case 0:
|
|
static char map_tool_name[17];
|
|
sprintf(map_tool_name, "MapToolCamera%d", mapToolID);
|
|
return getEventIdx(map_tool_name, 0xFF, roomNo);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (eventName == NULL) {
|
|
return -1;
|
|
}
|
|
|
|
dEvDtBase_c* event;
|
|
int j;
|
|
int i;
|
|
for (i = ARRAY_SIZE(mEventList) - 1; i >= 1; i--) {
|
|
if (i < 4 || 9 < i || roomNo == mEventList[i].roomNo()) {
|
|
event = &mEventList[i];
|
|
if (event->getHeaderP() != NULL) {
|
|
for (j = 0; j < event->getHeaderP()->eventNum; j++) {
|
|
if (strcmp(eventName, event->getEventName(j)) == 0) {
|
|
return makeCompositId(j, i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/* 80047698-80047758 041FD8 00C0+00 0/0 3/3 25/25 .text
|
|
* getEventIdx__16dEvent_manager_cFP10fopAc_ac_cUc */
|
|
s16 dEvent_manager_c::getEventIdx(fopAc_ac_c* pActor, u8 mapToolID) {
|
|
dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(mapToolID, fopAcM_GetRoomNo(pActor));
|
|
if (data != NULL) {
|
|
switch (data->mType) {
|
|
case 1:
|
|
case 2:
|
|
return getEventIdx(pActor, data->mName, 0xFF);
|
|
case 0:
|
|
static char map_tool_name[17];
|
|
sprintf(map_tool_name, "MapToolCamera%d", mapToolID);
|
|
return getEventIdx(pActor, map_tool_name, 0xFF);
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/* 80047758-80047930 042098 01D8+00 1/1 10/10 92/92 .text
|
|
* getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc */
|
|
s16 dEvent_manager_c::getEventIdx(fopAc_ac_c* pActor, char const* eventName, u8 mapToolID) {
|
|
s8 actorRoomNo = fopAcM_GetRoomNo(pActor);
|
|
|
|
if (mapToolID != 0xFF) {
|
|
dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(mapToolID, actorRoomNo);
|
|
if (data != NULL) {
|
|
switch (data->mType) {
|
|
case 1:
|
|
case 2:
|
|
return getEventIdx(pActor, data->mName, 0xFF);
|
|
case 0:
|
|
static char map_tool_name[17];
|
|
sprintf(map_tool_name, "MapToolCamera%d", mapToolID);
|
|
return getEventIdx(pActor, map_tool_name, 0xFF);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (eventName == NULL) {
|
|
return -1;
|
|
}
|
|
|
|
dEvDtBase_c* event;
|
|
int j;
|
|
int type;
|
|
for (type = ARRAY_SIZE(mEventList) - 1; type >= 1; type--) {
|
|
dEvDtBase_c* eventP = &mEventList[type];
|
|
dEvDtBase_c event;
|
|
if (type < 4 || 9 < type || actorRoomNo == mEventList[type].roomNo()) {
|
|
if (pActor != NULL && type == 2 && pActor->eventInfo.getArchiveName() != NULL) {
|
|
event.init(
|
|
(char*)dComIfG_getObjectRes(pActor->eventInfo.getArchiveName(), DataFileName),
|
|
-1);
|
|
eventP = &event;
|
|
}
|
|
if (eventP->getHeaderP() != NULL) {
|
|
for (j = 0; j < eventP->getHeaderP()->eventNum; j++) {
|
|
if (strcmp(eventName, eventP->getEventName(j)) == 0) {
|
|
return makeCompositId(j, type);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/* 80047930-80047984 042270 0054+00 0/0 0/0 1/1 .text isMapToolCamera__16dEvent_manager_cFUcl */
|
|
int dEvent_manager_c::isMapToolCamera(u8 mapToolID, s32 roomNo) {
|
|
if (roomNo == -1) {
|
|
roomNo = dComIfGp_roomControl_getStayNo();
|
|
}
|
|
|
|
dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(mapToolID, roomNo);
|
|
if (data != NULL) {
|
|
return data->mType == 0;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/* 80047984-800479F8 0422C4 0074+00 0/0 6/6 0/0 .text order__16dEvent_manager_cFs */
|
|
int dEvent_manager_c::order(s16 eventCompositId) {
|
|
dEvDtEvent_c* event = getEventData(eventCompositId);
|
|
if (event == NULL) {
|
|
return 0;
|
|
} else {
|
|
mCurrentEventType = getTypeCompositId(eventCompositId);
|
|
mCurrentEventCompositId = eventCompositId;
|
|
startProc(event);
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
/* 800479F8-80047A38 042338 0040+00 1/1 0/0 9/9 .text startCheck__16dEvent_manager_cFs */
|
|
int dEvent_manager_c::startCheck(s16 eventCompositId) {
|
|
dEvDtEvent_c* event = getEventData(eventCompositId);
|
|
if (event == NULL) {
|
|
return 0;
|
|
} else {
|
|
if (event->mEventState == 1) {
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80047A38-80047A78 042378 0040+00 0/0 2/2 0/0 .text startCheckOld__16dEvent_manager_cFPCc */
|
|
int dEvent_manager_c::startCheckOld(char const* name) {
|
|
return startCheck(getEventIdx(name, 0xFF, -1));
|
|
}
|
|
|
|
/* 80047A78-80047ADC 0423B8 0064+00 1/1 2/2 122/122 .text endCheck__16dEvent_manager_cFs
|
|
*/
|
|
int dEvent_manager_c::endCheck(s16 eventID) {
|
|
dEvDtEvent_c* event = getEventData(dComIfGp_getEvent().runningEventID(eventID));
|
|
if (event == NULL) {
|
|
return 0;
|
|
} else {
|
|
if (event->mEventState == 2) {
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80047ADC-80047B1C 04241C 0040+00 0/0 2/2 10/10 .text endCheckOld__16dEvent_manager_cFPCc */
|
|
int dEvent_manager_c::endCheckOld(char const* name) {
|
|
return endCheck(getEventIdx(name, 0xFF, -1));
|
|
}
|
|
|
|
/* 80047B1C-80047D4C 04245C 0230+00 1/1 10/10 210/210 .text
|
|
* getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci */
|
|
int dEvent_manager_c::getMyStaffId(char const* staffName, fopAc_ac_c* pActor, int tagId) {
|
|
int staffNum;
|
|
int i;
|
|
int evtIdx = -1;
|
|
if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) {
|
|
return -1;
|
|
} else {
|
|
if (pActor != NULL) {
|
|
evtIdx = pActor->eventInfo.getIdx();
|
|
}
|
|
if (mCurrentEventCompositId == -1) {
|
|
return -1;
|
|
} else {
|
|
dEvDtEvent_c* event = getEventData(mCurrentEventCompositId);
|
|
|
|
if (event != NULL && (event->mEventState == 1 || event->mEventState == 2)) {
|
|
int staffCount = event->getNStaff();
|
|
bool hasDp = false;
|
|
if (strchr(staffName, ':') != NULL) {
|
|
hasDp = true;
|
|
}
|
|
|
|
for (i = 0; i < staffCount; i++) {
|
|
staffNum = event->getStaff(i);
|
|
dEvDtStaff_c* staff = getBase().getStaffP(staffNum);
|
|
if (staff->mType != dEvDtStaff_c::TYPE_ALL) {
|
|
char buf[0x18];
|
|
strcpy(buf, staff->mName);
|
|
char* ptr = NULL;
|
|
if (!hasDp) {
|
|
char* tmpPtr = strchr(buf, ':');
|
|
ptr = tmpPtr;
|
|
if (tmpPtr != NULL) {
|
|
*tmpPtr = '\0';
|
|
ptr++;
|
|
}
|
|
}
|
|
|
|
if (strcmp(staffName, buf) == 0 && (tagId < 0 || tagId == staff->mTagID)) {
|
|
s16 num = 0;
|
|
if (ptr != NULL) {
|
|
char c;
|
|
while ((c = *ptr) != '\0') {
|
|
if (c < '0' || '9' < c) {
|
|
num = 0;
|
|
break;
|
|
}
|
|
num = c - '0' + num * 10;
|
|
ptr++;
|
|
}
|
|
if (evtIdx < 0 || num == evtIdx) {
|
|
return staffNum;
|
|
}
|
|
} else {
|
|
return staffNum;
|
|
}
|
|
}
|
|
|
|
if (strcmp(staffName, "Alink") == 0 && strcmp("Link", buf) == 0 &&
|
|
tagId == staff->mTagID)
|
|
{
|
|
return staffNum;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/* 80047D4C-80047DAC 04268C 0060+00 0/0 9/9 417/417 .text getIsAddvance__16dEvent_manager_cFi */
|
|
int dEvent_manager_c::getIsAddvance(int staffIdx) {
|
|
if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) {
|
|
return 0;
|
|
} else if (staffIdx == -1) {
|
|
return 0;
|
|
} else if (mCurrentEventCompositId == -1) {
|
|
return 0;
|
|
} else {
|
|
return getBase().getStaffP(staffIdx)->field_0x40;
|
|
}
|
|
}
|
|
|
|
/* 80047DAC-80047E10 0426EC 0064+00 1/1 0/0 0/0 .text dEvmng_strcmp__FPCcPc */
|
|
static int dEvmng_strcmp(char const* strA, char* strB) {
|
|
u32 len = 0;
|
|
while (*strA != '\0') {
|
|
if (*strB == '\0') {
|
|
return 1;
|
|
}
|
|
if (len >= 100) {
|
|
return -1;
|
|
}
|
|
if (*strA != *strB) {
|
|
return 1;
|
|
}
|
|
len++;
|
|
strA++;
|
|
strB++;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 80047E10-80047F5C 042750 014C+00 1/1 1/1 118/118 .text
|
|
* getMyActIdx__16dEvent_manager_cFiPCPCciii */
|
|
int dEvent_manager_c::getMyActIdx(int staffIdx, char const* const* param_1, int param_2,
|
|
int param_3, int param_4) {
|
|
if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) {
|
|
return 0;
|
|
} else if (staffIdx == -1) {
|
|
return -1;
|
|
} else if (mCurrentEventCompositId == -1) {
|
|
return -1;
|
|
}
|
|
|
|
dEvDtStaff_c* staff = getBase().getStaffP(staffIdx);
|
|
if (staff) {
|
|
if (staff->field_0x41 != false && param_3 == 0) {
|
|
return staff->field_0x3c;
|
|
}
|
|
} else {
|
|
return -1;
|
|
}
|
|
|
|
int i;
|
|
char* nowCutName = getMyNowCutName(staffIdx);
|
|
if (nowCutName == NULL) {
|
|
staff->field_0x3c = -1;
|
|
return -1;
|
|
} else {
|
|
staff->field_0x41 = true;
|
|
for (i = 0; i < param_2; i++) {
|
|
if (param_4 != 0) {
|
|
if (dEvmng_strcmp(param_1[i], nowCutName) == 0) {
|
|
staff->field_0x3c = i;
|
|
return i;
|
|
}
|
|
} else {
|
|
if (strcmp(param_1[i], nowCutName) == 0) {
|
|
staff->field_0x3c = i;
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
staff->field_0x3c = -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 80047F5C-80047FC8 04289C 006C+00 1/1 9/9 62/62 .text getMyNowCutName__16dEvent_manager_cFi */
|
|
char* dEvent_manager_c::getMyNowCutName(int cutIndex) {
|
|
if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) {
|
|
return NULL;
|
|
} else if (cutIndex == -1) {
|
|
return NULL;
|
|
} else if (mCurrentEventCompositId == -1) {
|
|
return NULL;
|
|
} else {
|
|
return getBase().getCutStaffCurrentCutP(cutIndex)->getName();
|
|
}
|
|
}
|
|
|
|
/* 80047FC8-800480EC 042908 0124+00 2/2 0/0 0/0 .text getMyDataP__16dEvent_manager_cFiPCci */
|
|
dEvDtData_c* dEvent_manager_c::getMyDataP(int index, char const* name, int type) {
|
|
if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) {
|
|
return NULL;
|
|
} else if (index == -1) {
|
|
return NULL;
|
|
} else if (mCurrentEventCompositId == -1) {
|
|
return NULL;
|
|
} else {
|
|
dEvDtCut_c* cut;
|
|
if (type != 0) {
|
|
cut = getBase().getCutStaffStartCutP(index);
|
|
} else {
|
|
cut = getBase().getCutStaffCurrentCutP(index);
|
|
}
|
|
|
|
int top = cut->getDataTop();
|
|
while (top != -1) {
|
|
dEvDtData_c* data = getBase().getDataP(top);
|
|
if (!strcmp(name, data->getName())) {
|
|
return data;
|
|
}
|
|
top = data->getNext();
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
/* 800480EC-80048144 042A2C 0058+00 0/0 22/22 355/355 .text
|
|
* getMySubstanceP__16dEvent_manager_cFiPCci */
|
|
void* dEvent_manager_c::getMySubstanceP(int index, char const* name, int type) {
|
|
dEvDtData_c* data = getMyDataP(index, name, 0);
|
|
if (data == NULL) {
|
|
return NULL;
|
|
}
|
|
return getSubstance(data, type);
|
|
}
|
|
|
|
/* 80048144-8004817C 042A84 0038+00 0/0 12/12 0/0 .text getMySubstanceNum__16dEvent_manager_cFiPCc
|
|
*/
|
|
int dEvent_manager_c::getMySubstanceNum(int index, char const* name) {
|
|
dEvDtData_c* data = getMyDataP(index, name, 0);
|
|
if (data == NULL) {
|
|
return NULL;
|
|
} else {
|
|
return data->getNumber();
|
|
}
|
|
}
|
|
|
|
/* 8004817C-800481F4 042ABC 0078+00 1/1 78/78 182/182 .text cutEnd__16dEvent_manager_cFi
|
|
*/
|
|
void dEvent_manager_c::cutEnd(int cutIndex) {
|
|
if (dComIfGp_getEvent().getMode() == EVT_MODE_NONE) {
|
|
return;
|
|
} else if (cutIndex == -1) {
|
|
return;
|
|
} else if (mCurrentEventCompositId == -1) {
|
|
return;
|
|
} else {
|
|
// instruction swap
|
|
dEvDtCut_c* cut = getBase().getCutStaffCurrentCutP(cutIndex);
|
|
mFlags.flagSet(cut->getFlagId());
|
|
}
|
|
}
|
|
|
|
/* 800481F4-800482CC 042B34 00D8+00 0/0 4/4 0/0 .text
|
|
* getEventPrio__16dEvent_manager_cFP10fopAc_ac_cs */
|
|
int dEvent_manager_c::getEventPrio(fopAc_ac_c* pActor, s16 eventCompositId) {
|
|
dEvDtEvent_c* event = NULL;
|
|
dEvDtBase_c eventBase;
|
|
if (getTypeCompositId(eventCompositId) == 2 && pActor != NULL &&
|
|
pActor->eventInfo.getArchiveName() != NULL)
|
|
{
|
|
char* data = (char*)dComIfG_getObjectRes(pActor->eventInfo.getArchiveName(), DataFileName);
|
|
eventBase.init(data, -1);
|
|
event = eventBase.mEventP;
|
|
}
|
|
|
|
if (event == NULL) {
|
|
event = getEventData(eventCompositId);
|
|
}
|
|
|
|
if (event == NULL) {
|
|
return 0;
|
|
} else {
|
|
return event->getPriority();
|
|
}
|
|
}
|
|
|
|
/* 800482CC-80048348 042C0C 007C+00 1/1 1/1 0/0 .text issueStaff__16dEvent_manager_cFPCc
|
|
*/
|
|
void dEvent_manager_c::issueStaff(char const* name) {
|
|
if (!strcmp(name, "ALL")) {
|
|
fopAcM_Search((fopAcIt_JudgeFunc)extraOnObjectCallBack, NULL);
|
|
} else {
|
|
char nameBuf[0x20];
|
|
strcpy(nameBuf, name);
|
|
fopAcM_OnStatus(fopAcM_searchFromName4Event(nameBuf, -1), 0x800);
|
|
}
|
|
}
|
|
|
|
/* 80048348-800483C4 042C88 007C+00 0/0 1/1 0/0 .text cancelStaff__16dEvent_manager_cFPCc
|
|
*/
|
|
void dEvent_manager_c::cancelStaff(char const* name) {
|
|
if (!strcmp(name, "ALL")) {
|
|
fopAcM_Search((fopAcIt_JudgeFunc)extraOffObjectCallBack, NULL);
|
|
} else {
|
|
char nameBuf[0x20];
|
|
strcpy(nameBuf, name);
|
|
fopAcM_OffStatus(fopAcM_searchFromName4Event(nameBuf, -1), 0x800);
|
|
}
|
|
}
|
|
|
|
/* 800483C4-800483E0 042D04 001C+00 1/1 2/2 38/38 .text setGoal__16dEvent_manager_cFP4cXyz */
|
|
void dEvent_manager_c::setGoal(cXyz* p_goal) {
|
|
mGoal = *p_goal;
|
|
}
|
|
|
|
/* 800483E0-800483E8 042D20 0008+00 0/0 1/1 1/1 .text getGoal__16dEvent_manager_cFv */
|
|
cXyz* dEvent_manager_c::getGoal() {
|
|
return &mGoal;
|
|
}
|
|
|
|
/* 800483E8-8004846C 042D28 0084+00 0/0 5/5 27/27 .text getRunEventName__16dEvent_manager_cFv */
|
|
const char* dEvent_manager_c::getRunEventName() {
|
|
if (mCurrentEventCompositId == -1) {
|
|
return "NO DATA";
|
|
}
|
|
|
|
if (getBase().getHeaderP() == NULL) {
|
|
return "NO DATA";
|
|
}
|
|
|
|
dEvDtEvent_c* event = getEventData(mCurrentEventCompositId);
|
|
if (event != NULL && event->mEventState == 1) {
|
|
return event->getName();
|
|
} else {
|
|
return "NOT RUNNING";
|
|
}
|
|
}
|
|
|
|
struct FindShtrCbPrms {
|
|
s16 profname;
|
|
fopAc_ac_c* mActor;
|
|
};
|
|
|
|
/* 8004846C-80048520 042DAC 00B4+00 1/1 0/0 0/0 .text findShutterCallBack__FP10fopAc_ac_cPv */
|
|
static fopAc_ac_c* findShutterCallBack(fopAc_ac_c* pActor, void* param_1) {
|
|
FindShtrCbPrms* prms = (FindShtrCbPrms*)param_1;
|
|
if (prms->profname != fopAcM_GetProfName(pActor)) {
|
|
return NULL;
|
|
}
|
|
|
|
cXyz diff = pActor->home.pos - prms->mActor->home.pos;
|
|
if (diff.x < 10 && diff.x > -10 && diff.y < 10 && diff.y > -10 && diff.z < 10 && diff.z > -10) {
|
|
return pActor;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 80048520-80048618 042E60 00F8+00 1/1 0/0 0/0 .text specialCast_Shutter__16dEvent_manager_cFsi
|
|
*/
|
|
fopAc_ac_c* dEvent_manager_c::specialCast_Shutter(s16 bsTypeId, int param_1) {
|
|
FindShtrCbPrms prms;
|
|
prms.profname = bsTypeId;
|
|
prms.mActor = dComIfGp_getPlayer(0);
|
|
fopAc_ac_c* shutterActor =
|
|
(fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)findShutterCallBack, &prms);
|
|
|
|
if (shutterActor != NULL && param_1 != 0) {
|
|
cXyz goal(shutterActor->home.pos);
|
|
s16 angle = prms.mActor->home.angle.y + 0x8000;
|
|
goal.x += cM_ssin(angle) * 100;
|
|
goal.z += cM_scos(angle) * 100;
|
|
setGoal(&goal);
|
|
dComIfGp_getEvent().setPt2(shutterActor);
|
|
dComIfGp_getEvent().setPtD(shutterActor);
|
|
}
|
|
return shutterActor;
|
|
}
|
|
|
|
/* 80048618-80048748 042F58 0130+00 1/1 0/0 0/0 .text specialCast__16dEvent_manager_cFPCci */
|
|
fopAc_ac_c* dEvent_manager_c::specialCast(char const* name, int param_1) {
|
|
fopAc_ac_c* shutterActor = NULL;
|
|
if (name == NULL) {
|
|
return NULL;
|
|
}
|
|
|
|
if (!strcmp(name, "SHUTTER_DOOR")) {
|
|
shutterActor = specialCast_Shutter(0x226, param_1);
|
|
if (shutterActor == NULL) {
|
|
shutterActor = specialCast_Shutter(0x228, param_1);
|
|
}
|
|
if (shutterActor == NULL) {
|
|
shutterActor = specialCast_Shutter(0x229, param_1);
|
|
}
|
|
if (shutterActor == NULL) {
|
|
shutterActor = specialCast_Shutter(0x22A, param_1);
|
|
}
|
|
if (shutterActor == NULL) {
|
|
shutterActor = specialCast_Shutter(0x22B, param_1);
|
|
}
|
|
if (shutterActor != NULL) {
|
|
dComIfGp_getEvent().onEventFlag(0x10);
|
|
}
|
|
}
|
|
|
|
if (shutterActor != NULL) {
|
|
if (param_1 != 0) {
|
|
fopAcM_OnStatus(shutterActor, 0x1000);
|
|
} else {
|
|
fopAcM_OffStatus(shutterActor, 0x1000);
|
|
}
|
|
}
|
|
return shutterActor;
|
|
}
|
|
|
|
/* 80048748-800487F0 043088 00A8+00 1/1 0/0 0/0 .text dEv_talkman_get_action__Fi */
|
|
static int dEv_talkman_get_action(int param_0) {
|
|
int staffId = dComIfGp_getEventManager().getMyStaffId("TALKMAN", NULL, -1);
|
|
if (staffId == -1) {
|
|
return -1;
|
|
} else {
|
|
/* 803A82A8-803A82B8 -00001 000C+04 1/1 0/0 0/0 .data action_table$5100 */
|
|
static const char* action_table[] = {
|
|
"WAIT",
|
|
"TALK0",
|
|
"TALK1",
|
|
};
|
|
int actIdx = dComIfGp_getEventManager().getMyActIdx(staffId, action_table,
|
|
ARRAY_SIZE(action_table), 0, 0);
|
|
if (actIdx == param_0) {
|
|
dComIfGp_getEventManager().cutEnd(staffId);
|
|
}
|
|
return actIdx;
|
|
}
|
|
}
|
|
|
|
/* 800487F0-8004882C 043130 003C+00 0/0 0/0 108/108 .text ChkPresentEnd__16dEvent_manager_cFv */
|
|
int dEvent_manager_c::ChkPresentEnd() {
|
|
return dEv_talkman_get_action(0) >= 1;
|
|
}
|
|
|
|
/* 8004882C-8004886C 04316C 0040+00 0/0 2/2 2/2 .text checkStartDemo__16dEvent_manager_cFv */
|
|
int dEvent_manager_c::checkStartDemo() {
|
|
if (!dComIfGp_getEvent().runCheck()) {
|
|
return 0;
|
|
}
|
|
|
|
if (mEventException.mEventInfoIdx == -1) {
|
|
return 0;
|
|
}
|
|
|
|
if (mEventException.mEventInfoIdx == -2) {
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|