Files
dusklight/src/d/event/d_event_manager.cpp
T
2022-05-21 21:25:05 +02:00

1217 lines
42 KiB
C++

//
// Generated By: dol2asm
// Translation Unit: d/event/d_event_manager
//
#include "d/event/d_event_manager.h"
#include "SSystem/SComponent/c_math.h"
#include "Z2AudioLib/Z2AudioMgr.h"
#include "d/com/d_com_inf_game.h"
#include "d/d_camera.h"
#include "d/d_stage.h"
#include "dol2asm.h"
#include "dolphin/types.h"
#include "m_Do/m_Do_audio.h"
//
// Forward References:
//
extern "C" void init__18dEvent_exception_cFv();
extern "C" void setStartDemo__18dEvent_exception_cFi();
extern "C" void getEventName__18dEvent_exception_cFv();
extern "C" void getSubstance__16dEvent_manager_cFP11dEvDtData_ci();
extern "C" void __ct__16dEvent_manager_cFv();
extern "C" void __ct__11dEvDtBase_cFv();
extern "C" void create__16dEvent_manager_cFv();
extern "C" void setObjectArchive__16dEvent_manager_cFPc();
extern "C" void demoInit__16dEvent_manager_cFv();
extern "C" void roomInit__16dEvent_manager_cFi();
extern "C" void roomFinish__16dEvent_manager_cFi();
extern "C" void orderStartDemo__16dEvent_manager_cFv();
extern "C" void remove__16dEvent_manager_cFv();
extern "C" static void extraOnObjectCallBack__FP10fopAc_ac_cPv();
extern "C" static void extraOffObjectCallBack__FP10fopAc_ac_cPv();
extern "C" static void allOffObjectCallBack__FP10fopAc_ac_cPv();
extern "C" void startProc__16dEvent_manager_cFP12dEvDtEvent_c();
extern "C" void closeProc__16dEvent_manager_cFP12dEvDtEvent_c();
extern "C" void endProc__16dEvent_manager_cFsi();
extern "C" void Sequencer__16dEvent_manager_cFv();
extern "C" void Experts__16dEvent_manager_cFv();
extern "C" void getEventData__16dEvent_manager_cFsi();
extern "C" void getEventData__16dEvent_manager_cFs();
extern "C" void getEventIdx__16dEvent_manager_cFPCcUcl();
extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cUc();
extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc();
extern "C" void isMapToolCamera__16dEvent_manager_cFUcl();
extern "C" void order__16dEvent_manager_cFs();
extern "C" void startCheck__16dEvent_manager_cFs();
extern "C" void startCheckOld__16dEvent_manager_cFPCc();
extern "C" void endCheck__16dEvent_manager_cFs();
extern "C" void endCheckOld__16dEvent_manager_cFPCc();
extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci();
extern "C" void getIsAddvance__16dEvent_manager_cFi();
extern "C" static void dEvmng_strcmp__FPCcPc();
extern "C" void getMyActIdx__16dEvent_manager_cFiPCPCciii();
extern "C" void getMyNowCutName__16dEvent_manager_cFi();
extern "C" void getMyDataP__16dEvent_manager_cFiPCci();
extern "C" void getMySubstanceP__16dEvent_manager_cFiPCci();
extern "C" void getMySubstanceNum__16dEvent_manager_cFiPCc();
extern "C" void cutEnd__16dEvent_manager_cFi();
extern "C" void getEventPrio__16dEvent_manager_cFP10fopAc_ac_cs();
extern "C" void issueStaff__16dEvent_manager_cFPCc();
extern "C" void cancelStaff__16dEvent_manager_cFPCc();
extern "C" void setGoal__16dEvent_manager_cFP4cXyz();
extern "C" void getGoal__16dEvent_manager_cFv();
extern "C" void getRunEventName__16dEvent_manager_cFv();
extern "C" static void findShutterCallBack__FP10fopAc_ac_cPv();
extern "C" void specialCast_Shutter__16dEvent_manager_cFsi();
extern "C" void specialCast__16dEvent_manager_cFPCci();
extern "C" static void dEv_talkman_get_action__Fi();
extern "C" void ChkPresentEnd__16dEvent_manager_cFv();
extern "C" void checkStartDemo__16dEvent_manager_cFv();
extern "C" extern char const* const d_event_d_event_manager__stringBase0;
//
// External References:
//
extern "C" void fopAcIt_Judge__FPFPvPv_PvPv();
extern "C" void fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs();
extern "C" void fopAcM_orderMapToolAutoNextEvent__FP10fopAc_ac_cUcsUsUsUs();
extern "C" void fopAcM_searchFromName4Event__FPCcs();
extern "C" void getStatusRoomDt__20dStage_roomControl_cFi();
extern "C" void dComIfG_getStageRes__FPCc();
extern "C" void dComIfG_getRoomArcName__Fi();
extern "C" void dComIfGp_SelectWarpPt_get__Fv();
extern "C" void __dt__11dEvDtBase_cFv();
extern "C" void isSwitch__10dSv_info_cCFii();
extern "C" void getRes__14dRes_control_cFPCcPCcP11dRes_info_ci();
extern "C" void reset__14dEvt_control_cFv();
extern "C" void dEv_defaultSkipProc__FPvi();
extern "C" void dEv_defaultSkipZev__FPvi();
extern "C" void dEv_defaultSkipStb__FPvi();
extern "C" void setSkipProc__14dEvt_control_cFPvPFPvi_ii();
extern "C" void onSkipFade__14dEvt_control_cFv();
extern "C" void getStageEventDt__14dEvt_control_cFv();
extern "C" void sceneChange__14dEvt_control_cFi();
extern "C" void convPId__14dEvt_control_cFUi();
extern "C" void searchMapEventData__14dEvt_control_cFUcl();
extern "C" void runningEventID__14dEvt_control_cFs();
extern "C" void setPt2__14dEvt_control_cFPv();
extern "C" void setPtI__14dEvt_control_cFPv();
extern "C" void setPtD__14dEvt_control_cFPv();
extern "C" void flagSet__11dEvDtFlag_cFi();
extern "C" void init__11dEvDtFlag_cFv();
extern "C" void finishCheck__12dEvDtEvent_cFv();
extern "C" void specialStaffProc__12dEvDtEvent_cFP12dEvDtStaff_c();
extern "C" void init__12dEvDtStaff_cFv();
extern "C" void init__11dEvDtBase_cFv();
extern "C" void init__11dEvDtBase_cFPci();
extern "C" void advanceCut__11dEvDtBase_cFP12dEvDtEvent_c();
extern "C" void EventRecoverNotime__9dCamera_cFv();
extern "C" void dCam_getBody__Fv();
extern "C" void Center__9dCamera_cFv();
extern "C" void __mi__4cXyzCFRC3Vec();
extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void setDemoName__11Z2StatusMgrFPc();
extern "C" void __construct_array();
extern "C" void _savegpr_20();
extern "C" void _savegpr_22();
extern "C" void _savegpr_24();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_20();
extern "C" void _restgpr_22();
extern "C" void _restgpr_24();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" u8 mDemoArcName__20dStage_roomControl_c[10 + 2 /* padding */];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
inline dEvent_manager_c& dComIfGp_getEventManager() {
return g_dComIfG_gameInfo.play.getEvtManager();
}
inline dEvt_control_c& dComIfGp_getEvent() {
return g_dComIfG_gameInfo.play.getEvent();
}
BOOL daPy_py_c::checkNowWolf() {
return dComIfGp_getLinkPlayer()->i_checkWolf();
}
//
// Declarations:
//
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 index) {
int tmp = dComIfGp_roomControl_getStayNo();
dStage_MapEvent_dt_c* eventData = dEvt_control_c::searchMapEventData(index, tmp);
if (eventData != NULL && eventData->field_0x1B != 0xFF &&
dComIfGs_isSwitch(eventData->field_0x1B, tmp)) {
return 0xFF;
} else if (mEventInfoIdx != index) {
mEventInfoIdx = index;
}
return index;
}
/* 80046480-800465E8 040DC0 0168+00 1/1 0/0 0/0 .text getEventName__18dEvent_exception_cFv */
const char* dEvent_exception_c::getEventName() {
/* 803A8270-803A82A8 -00001 0038+00 1/1 0/0 0/0 .data soecial_names$3966 */
static 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",
};
s32 roomNo = dComIfGp_roomControl_getStayNo();
dStage_roomStatus_c* roomStatus = dComIfGp_roomControl_getStatusRoomDt(roomNo);
dStage_MapEventInfo_c* eventInfo = roomStatus->mRoomDt.getMapEventInfo();
if (mEventInfoIdx == -1) {
return "(!NO REGIST!)";
}
if (0xC8 < mEventInfoIdx && mEventInfoIdx < 0xD7) {
if (mEventInfoIdx == 0xCB) {
dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo());
} else if (mEventInfoIdx == 0xD5) {
switch (dComIfGp_SelectWarpPt_get()) {
case 3:
mEventInfoIdx = 0xD6;
}
}
return soecial_names[mEventInfoIdx - 0xC9];
} else {
if (eventInfo == NULL) {
return "(!NO INFO!)";
}
if (mEventInfoIdx < 0 || mEventInfoIdx > eventInfo->mCount) {
return "(!BAD NUMBER!)";
}
dStage_MapEvent_dt_c* revt = &eventInfo->mData[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;
}
}
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@ */
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* param_0) {
char* rt = NULL;
if (param_0 != NULL) {
char* res = (char*)dComIfG_getObjectRes(param_0, 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 param_0) {
for (int i = 4; i <= 9; i++) {
if (mEventList[i].getHeaderP() != NULL && param_0 == 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 (0xC8 < mEventException.mEventInfoIdx && mEventException.mEventInfoIdx < 0xD7) {
eventIdx = this->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 = this->getEventIdx(NULL, eventInfoIdx, -1);
success = fopAcM_orderMapToolAutoNextEvent(NULL, eventInfoIdx, eventIdx, 0xFFFF, 1, 5);
} else if (dComIfGp_getStartStagePoint() == -2 || dComIfGp_getStartStagePoint() == -3) {
eventIdx = this->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 = this->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 param_0, int param_1) {
dEvDtEvent_c* event = this->getEventData(param_0);
if (event != NULL) {
if (param_1 != 0) {
this->closeProc(event);
}
if (event->mEventState == 2) {
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 = this->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();
}
void* 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()->mStatusMgr.setDemoName(name);
}
if (event->finishCheck() != 0) {
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(
((fopAc_ac_c*)dComIfGp_getPlayer(0))->mAttentionInfo.mPosition);
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->field_0x18) {
case 1:
mDoAud_seStart(0xC, NULL, 0, 0);
break;
case 2:
mDoAud_seStart(0xD, 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()->mStatusMgr.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 = this->getEventData(mCurrentEventCompositId);
if (event != NULL && event->mEventState == 1) {
event->specialStaffProc(this->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
*/
#ifdef NONMATCHING
dEvDtEvent_c* dEvent_manager_c::getEventData(s16 eventCompositId) {
if (param_0 == -1) {
return NULL;
} else {
// extsh instead of mr here
return this->getEventData(getIndexCompositId(param_0), getTypeCompositId(param_0));
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm dEvDtEvent_c* dEvent_manager_c::getEventData(s16 eventCompositId) {
nofralloc
#include "asm/d/event/d_event_manager/getEventData__16dEvent_manager_cFs.s"
}
#pragma pop
#endif
/* 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 param_1, s32 roomNo) {
if (roomNo == -1) {
roomNo = dComIfGp_roomControl_getStayNo();
}
if (param_1 != 0xFF) {
dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(param_1, 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", param_1);
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 param_1) {
dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(param_1, pActor->getRoomNo());
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", param_1);
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 param_2) {
s8 actorRoomNo = pActor->getRoomNo();
if (param_2 != 0xFF) {
dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(param_2, 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", param_2);
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->mEvtInfo.getArchiveName() != NULL) {
event.init(
(char*)dComIfG_getObjectRes(pActor->mEvtInfo.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 param_0, s32 roomNo) {
if (roomNo == -1) {
roomNo = dComIfGp_roomControl_getStayNo();
}
dStage_MapEvent_dt_c* data = dEvt_control_c::searchMapEventData(param_0, 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 = this->getEventData(eventCompositId);
if (event == NULL) {
return 0;
} else {
mCurrentEventType = getTypeCompositId(eventCompositId);
mCurrentEventCompositId = eventCompositId;
this->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 = this->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* pName) {
return this->startCheck(this->getEventIdx(pName, 0xFF, -1));
}
/* 80047A78-80047ADC 0423B8 0064+00 1/1 2/2 122/122 .text endCheck__16dEvent_manager_cFs
*/
int dEvent_manager_c::endCheck(s16 param_0) {
dEvDtEvent_c* event = this->getEventData(dComIfGp_getEvent().runningEventID(param_0));
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* pName) {
return this->endCheck(this->getEventIdx(pName, 0xFF, -1));
}
/* 80047B1C-80047D4C 04245C 0230+00 1/1 10/10 210/210 .text
* getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci */
s32 dEvent_manager_c::getMyStaffId(char const* pStaffName, fopAc_ac_c* pActor, int tagId) {
int staffNum;
int i;
int evtIdx = -1;
if (dComIfGp_getEvent().getMode() == 0) {
return -1;
} else {
if (pActor != NULL) {
evtIdx = pActor->mEvtInfo.getIdx();
}
if (mCurrentEventCompositId == -1) {
return -1;
} else {
dEvDtEvent_c* event = this->getEventData(mCurrentEventCompositId);
if (event != NULL && (event->mEventState == 1 || event->mEventState == 2)) {
int staffCount = event->getNStaff();
bool hasDp = false;
if (strchr(pStaffName, ':') != NULL) {
hasDp = true;
}
for (i = 0; i < staffCount; i++) {
staffNum = event->getStaff(i);
dEvDtStaff_c* staff = getBase().getStaffP(staffNum);
if (staff->mType != 1) {
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(pStaffName, 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(pStaffName, "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 param_0) {
if (dComIfGp_getEvent().getMode() == 0) {
return 0;
} else if (param_0 == -1) {
return 0;
} else if (mCurrentEventCompositId == -1) {
return 0;
} else {
return this->getBase().getStaffP(param_0)->field_0x40;
}
}
/* 80047DAC-80047E10 0426EC 0064+00 1/1 0/0 0/0 .text dEvmng_strcmp__FPCcPc */
static int dEvmng_strcmp(char const* param_0, char* param_1) {
u32 len = 0;
while (*param_0 != '\0') {
if (*param_1 == '\0') {
return 1;
}
if (len >= 100) {
return -1;
}
if (*param_0 != *param_1) {
return 1;
}
len++;
param_0++;
param_1++;
}
return 0;
}
/* 80047E10-80047F5C 042750 014C+00 1/1 1/1 118/118 .text
* getMyActIdx__16dEvent_manager_cFiPCPCciii */
int dEvent_manager_c::getMyActIdx(int param_0, char const* const* param_1, int param_2, int param_3,
int param_4) {
if (dComIfGp_getEvent().getMode() == 0) {
return 0;
} else if (param_0 == -1) {
return -1;
} else if (mCurrentEventCompositId == -1) {
return -1;
}
dEvDtStaff_c* staff = getBase().getStaffP(param_0);
if (staff) {
if (staff->field_0x41 != false && param_3 == 0) {
return staff->field_0x3c;
}
} else {
return -1;
}
int i;
char* nowCutName = this->getMyNowCutName(param_0);
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 index) {
if (dComIfGp_getEvent().getMode() == 0) {
return NULL;
} else if (index == -1) {
return NULL;
} else if (mCurrentEventCompositId == -1) {
return NULL;
} else {
return getBase().getCutStaffCurrentCutP(index)->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() == 0) {
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
*/
#ifdef NONMATCHING
void dEvent_manager_c::cutEnd(int index) {
if (dComIfGp_getEvent().getMode() == 0) {
return;
} else if (index == -1) {
return;
} else if (field_0x1aa == -1) {
return;
} else {
// instruction swap
mFlags.flagSet(getBase().getCutStaffCurrentCutP(index)->getFlagId());
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dEvent_manager_c::cutEnd(int param_0) {
nofralloc
#include "asm/d/event/d_event_manager/cutEnd__16dEvent_manager_cFi.s"
}
#pragma pop
#endif
/* 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->mEvtInfo.getArchiveName() != NULL) {
char* data = (char*)dComIfG_getObjectRes(pActor->mEvtInfo.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* pName) {
if (!strcmp(pName, "ALL")) {
fopAcM_Search((fopAcIt_JudgeFunc)extraOnObjectCallBack, NULL);
} else {
char nameBuf[0x20];
strcpy(nameBuf, pName);
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* pName) {
if (!strcmp(pName, "ALL")) {
fopAcM_Search((fopAcIt_JudgeFunc)extraOffObjectCallBack, NULL);
} else {
char nameBuf[0x20];
strcpy(nameBuf, pName);
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* pGoal) {
mGoal = *pGoal;
}
/* 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 mBsTypeId;
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->mBsTypeId != fpcAcM_GetProfName(pActor)) {
return NULL;
}
cXyz diff = pActor->mOrig.mPosition - prms->mActor->mOrig.mPosition;
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.mBsTypeId = bsTypeId;
prms.mActor = (fopAc_ac_c*)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->mOrig.mPosition);
s16 angle = prms.mActor->mOrig.mAngle.y + 0x8000;
goal.x += cM_ssin(angle) * 100;
goal.z += cM_scos(angle) * 100;
this->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* pName, int param_1) {
fopAc_ac_c* shutterActor = NULL;
if (pName == NULL) {
return NULL;
}
if (!strcmp(pName, "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 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;
}
/* 80379F60-80379F60 0065C0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */