mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-30 00:46:29 -04:00
d_event work
This commit is contained in:
@@ -21,6 +21,19 @@ enum dEvtType_e {
|
||||
/* 0x0A */ dEvtType_CHANGE_e,
|
||||
};
|
||||
|
||||
enum {
|
||||
dEvtMode_NONE_e,
|
||||
dEvtMode_TALK_e,
|
||||
dEvtMode_DEMO_e,
|
||||
dEvtMode_COMPULSORY_e,
|
||||
};
|
||||
|
||||
enum {
|
||||
dEvtFlag_NOPARTNER_e = 0x01,
|
||||
dEvtFlag_STAFF_ALL_e = 0x02,
|
||||
dEvtFlag_TALK_e = 0x04,
|
||||
dEvtFlag_UNK8_e = 0x08,
|
||||
};
|
||||
enum {
|
||||
dEvtMove_NOMOVE_e,
|
||||
dEvtMove_MOVE_e,
|
||||
@@ -90,6 +103,8 @@ public:
|
||||
void setGtItm(u8 itemNo) { mGetItemNo = itemNo; }
|
||||
u8 getGtItm() { return mGetItemNo; }
|
||||
void setPtT(void* i_actor) { mPtTalk = getPId(i_actor); }
|
||||
void setPt1(void* i_actor) { mPt1 = getPId(i_actor); }
|
||||
void setPt2(void* i_actor) { mPt2 = getPId(i_actor); }
|
||||
u8 getPreItemNo() { return mItemNo; }
|
||||
|
||||
f32 getCullRate() { return mCullFarClipRatio; }
|
||||
|
||||
@@ -77,7 +77,8 @@ public:
|
||||
const char* getName() { return mName; }
|
||||
u32 getStartCut() { return mFirstCutIdx; }
|
||||
u32 getCurrentCut() { return mCurCutIdx; }
|
||||
u32 getType() { return mStaffType; }
|
||||
s32 getType() { return mStaffType; }
|
||||
s32 getTagID() { return mTagID; }
|
||||
|
||||
enum StaffType_e {
|
||||
NORMAL_e,
|
||||
@@ -97,7 +98,7 @@ public:
|
||||
|
||||
public:
|
||||
/* 0x00 */ char mName[32];
|
||||
/* 0x20 */ int mSub;
|
||||
/* 0x20 */ int mTagID;
|
||||
/* 0x24 */ int mStaffIdx;
|
||||
/* 0x28 */ int m28;
|
||||
/* 0x2C */ int mStaffType;
|
||||
@@ -110,7 +111,7 @@ public:
|
||||
/* 0x44 */ u8 m44;
|
||||
/* 0x45 */ u8 m45;
|
||||
/* 0x46 */ u8 mAdvance;
|
||||
/* 0x47 */ u8 mbNeedsAction;
|
||||
/* 0x47 */ u8 mbHasAction;
|
||||
/* 0x48 */ u8 field_48[0x50 - 0x48];
|
||||
}; // Size: 0x50
|
||||
|
||||
|
||||
@@ -88,8 +88,4 @@ public:
|
||||
/* 0x0C */ u16 mCastInFlag;
|
||||
};
|
||||
|
||||
inline int dEvmng_strcmp(const char* s1, const char* s2) {
|
||||
return strcmp(s1, s2);
|
||||
}
|
||||
|
||||
#endif /* D_EVENT_D_EVENT_MANAGER_H */
|
||||
|
||||
@@ -43,11 +43,10 @@ void daTag_Gship_c::modeClearEventInit() {
|
||||
void daTag_Gship_c::modeClearEvent() {
|
||||
if(mEvtInfo.checkCommandDemoAccrpt()) {
|
||||
int staffIdx = dComIfGp_evmng_getMyStaffId("PScnChg");
|
||||
if(dEvmng_strcmp(dComIfGp_getPEvtManager()->getMyNowCutName(staffIdx), "WARAIGOE") == 0) {
|
||||
if(strcmp(dComIfGp_getPEvtManager()->getMyNowCutName(staffIdx), "WARAIGOE") == 0) {
|
||||
if(dComIfGs_getEventReg(0x8803) == 3) {
|
||||
mDoAud_seStart(JA_SE_CV_G_SHIP_SCREAM);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
mDoAud_seStart(JA_SE_CV_G_SHIP_LAUGH);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,20 +11,6 @@
|
||||
#include "f_op/f_op_actor_mng.h"
|
||||
#include "f_pc/f_pc_manager.h"
|
||||
|
||||
enum {
|
||||
dEvtFlag_NOPARTNER_e = 0x01,
|
||||
dEvtFlag_STAFF_ALL_e = 0x02,
|
||||
dEvtFlag_TALK_e = 0x04,
|
||||
dEvtFlag_UNK8_e = 0x08,
|
||||
};
|
||||
|
||||
enum {
|
||||
dEvtMode_NONE_e,
|
||||
dEvtMode_TALK_e,
|
||||
dEvtMode_DEMO_e,
|
||||
dEvtMode_COMPULSORY_e,
|
||||
};
|
||||
|
||||
/* 8006FE04-8006FE54 .text __ct__14dEvt_control_cFv */
|
||||
dEvt_control_c::dEvt_control_c() {
|
||||
remove();
|
||||
|
||||
@@ -182,7 +182,7 @@ void dEvDtStaff_c::init() {
|
||||
m45 = 0;
|
||||
m44 = 0;
|
||||
mAdvance = 2;
|
||||
mbNeedsAction = false;
|
||||
mbHasAction = false;
|
||||
mCurActionIdx = -1;
|
||||
if (mStaffType == CAMERA_e)
|
||||
dComIfGp_getPEvtManager()->setCameraPlay(1);
|
||||
@@ -196,7 +196,7 @@ void dEvDtStaff_c::advanceCut(int cutIdx) {
|
||||
m45 = 0;
|
||||
m44 = 0;
|
||||
mAdvance = 1;
|
||||
mbNeedsAction = false;
|
||||
mbHasAction = false;
|
||||
mCurActionIdx = -1;
|
||||
}
|
||||
|
||||
|
||||
+186
-12
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "d/d_event_manager.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
/* 800737DC-800737F4 .text init__18dEvent_exception_cFv */
|
||||
void dEvent_exception_c::init() {
|
||||
@@ -92,7 +93,7 @@ void dEvent_manager_c::debugBfProc() {
|
||||
enum {
|
||||
dEvtSub_FLOAT_e,
|
||||
dEvtSub_XYZ_e,
|
||||
dEvtSub_UNK3_e,
|
||||
dEvtSub_UNK2_e,
|
||||
dEvtSub_INT_e,
|
||||
dEvtSub_STR_e,
|
||||
};
|
||||
@@ -112,6 +113,7 @@ void* dEvent_manager_c::getSubstance(dEvDtData_c* data, int type) {
|
||||
switch (data->getType()) {
|
||||
case dEvtSub_FLOAT_e:
|
||||
case dEvtSub_XYZ_e:
|
||||
case dEvtSub_UNK2_e:
|
||||
return mList.getFDataP(data->getIndex());
|
||||
case dEvtSub_INT_e:
|
||||
return mList.getIDataP(data->getIndex());
|
||||
@@ -233,10 +235,10 @@ static void* allOffObjectCallBack(fopAc_ac_c* actor, void*) {
|
||||
void dEvent_manager_c::startProc(dEvDtEvent_c* event) {
|
||||
/* Nonmatching */
|
||||
dEv_seach_prm prm(NULL, 0, 0);
|
||||
for (s32 i = 0; i < event->mNStaff; i++) {
|
||||
s32 staffIdx = event->mStaffIdx[i];
|
||||
for (s32 i = 0; i < event->getNStaff(); i++) {
|
||||
u32 staffIdx = event->getStaff(i);
|
||||
dEvDtStaff_c* staff = mList.getStaffP(staffIdx);
|
||||
if (staff->mStaffType == dEvDtStaff_c::NORMAL_e) {
|
||||
if (staff->getType() == dEvDtStaff_c::NORMAL_e) {
|
||||
fopAc_ac_c* actor = specialCast(staff->mName, 1);
|
||||
if (actor == NULL) {
|
||||
setPrmStaff(&prm, staffIdx);
|
||||
@@ -389,8 +391,32 @@ BOOL dEvent_manager_c::endCheckOld(const char* eventName) {
|
||||
}
|
||||
|
||||
/* 800745E0-80074718 .text getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci */
|
||||
int dEvent_manager_c::getMyStaffId(const char*, fopAc_ac_c*, int) {
|
||||
int dEvent_manager_c::getMyStaffId(const char* name, fopAc_ac_c* actor, int tagId) {
|
||||
/* Nonmatching */
|
||||
|
||||
if (dComIfGp_event_getMode() == dEvtMode_NONE_e)
|
||||
return -1;
|
||||
|
||||
if (mList.getHeaderP() == NULL)
|
||||
return -1;
|
||||
|
||||
if (actor && !fopAcM_checkStatus(actor, fopAcStts_FORCEMOVE_e))
|
||||
return -1;
|
||||
|
||||
for (s32 i = 0; i < mList.getEventNum(); i++) {
|
||||
dEvDtEvent_c* event = mList.getEventP(i);
|
||||
if (event->mEventState == 2 || event->mEventState == 4 || event->mEventState == 3) {
|
||||
s32 nStaff = event->getNStaff();
|
||||
for (s32 j = 0; j < nStaff; j++) {
|
||||
u32 staffIdx = event->getStaff(j);
|
||||
dEvDtStaff_c* staff = mList.getStaffP(staffIdx);
|
||||
if (staff->mStaffType != dEvDtStaff_c::ALL_e && strcmp(name, staff->getName()) == 0 && tagId == staff->getTagID())
|
||||
return staffIdx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* 80074718-8007473C .text getIsAddvance__16dEvent_manager_cFi */
|
||||
@@ -401,9 +427,63 @@ BOOL dEvent_manager_c::getIsAddvance(int staffIdx) {
|
||||
return mList.getStaffP(staffIdx)->mAdvance;
|
||||
}
|
||||
|
||||
int dEvmng_strcmp(const char* s1, char* s2) {
|
||||
u32 len1 = strlen(s1);
|
||||
u32 len2 = strlen(s2);
|
||||
|
||||
if (len1 >= 100 || len2 >= 100) {
|
||||
JUT_ASSERT(0x44a, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (len1 > len2)
|
||||
return 1;
|
||||
|
||||
const char* p1 = s1;
|
||||
const char* p2 = s2;
|
||||
while (len1-- > 0) {
|
||||
if (*p1 != *p2)
|
||||
return 1;
|
||||
p2++;
|
||||
p1++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 80074824-80074964 .text getMyActIdx__16dEvent_manager_cFiPCPCciii */
|
||||
int dEvent_manager_c::getMyActIdx(int, const char* const*, int, int, int) {
|
||||
int dEvent_manager_c::getMyActIdx(int staffIdx, const char* const* action, int actionNum, int force, int nameType) {
|
||||
/* Nonmatching */
|
||||
if (staffIdx == -1)
|
||||
return -1;
|
||||
|
||||
dEvDtStaff_c* staff = mList.getStaffP(staffIdx);
|
||||
if (staff->mbHasAction && !force)
|
||||
return staff->mCurActionIdx;
|
||||
|
||||
char* name = getMyNowCutName(staffIdx);
|
||||
if (name == NULL)
|
||||
return -1;
|
||||
|
||||
staff->mbHasAction = true;
|
||||
for (s32 i = 0; i < actionNum; i++) {
|
||||
JUT_ASSERT(0x46a, action[i]);
|
||||
|
||||
if (nameType != 0) {
|
||||
if (dEvmng_strcmp(action[i], name) == 0) {
|
||||
staff->mCurActionIdx = i;
|
||||
return i;
|
||||
}
|
||||
} else {
|
||||
if (strcmp(action[i], name) == 0) {
|
||||
staff->mCurActionIdx = i;
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
staff->mCurActionIdx = -1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* 80074964-800749A0 .text getMyActName__16dEvent_manager_cFi */
|
||||
@@ -492,8 +572,48 @@ u8 dEvent_manager_c::getEventEndSound(s16 eventIdx) {
|
||||
/* 80074BE4-80074D78 .text exceptionProc__16dEvent_manager_cFv */
|
||||
void dEvent_manager_c::exceptionProc() {
|
||||
/* Nonmatching */
|
||||
|
||||
const char* eventName = mException.getEventName();
|
||||
s32 eventIdx = getEventIdx(eventName, 0xFF);
|
||||
|
||||
if (eventIdx == -1) {
|
||||
mException.mEventInfoIdx = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
u8 mapToolID = mException.mEventInfoIdx < 200 ? mException.mEventInfoIdx : 0xFF;
|
||||
|
||||
switch (mException.mState) {
|
||||
case 0:
|
||||
mException.mState = 1;
|
||||
fopAcM_orderOtherEventId(NULL, eventIdx, mapToolID);
|
||||
break;
|
||||
case 1:
|
||||
if (startCheck(eventIdx)) {
|
||||
mException.mState = 2;
|
||||
if (strcmp(eventName, "MEETSHISHIOH") == 0)
|
||||
dComIfGs_onEventBit(0x0F80);
|
||||
if (strcmp(eventName, "look_tetra") == 0)
|
||||
dComIfGs_onEventBit(0x0280);
|
||||
} else {
|
||||
fopAcM_orderOtherEvent2(NULL, (char*)eventName, dEvtFlag_NOPARTNER_e);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (endCheck(eventIdx)) {
|
||||
dComIfGp_event_reset();
|
||||
mException.mState = 0;
|
||||
mException.mEventInfoIdx = -1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void dummy1() {
|
||||
OSReport("EVENT_DEBUG_OFF");
|
||||
}
|
||||
|
||||
|
||||
/* 80074D78-80074DB4 .text issueStaff__16dEvent_manager_cFPCc */
|
||||
void dEvent_manager_c::issueStaff(const char* name) {
|
||||
dEv_seach_prm prm(name, 0, 0);
|
||||
@@ -515,19 +635,73 @@ cXyz* dEvent_manager_c::getGoal() {
|
||||
return &mGoal;
|
||||
}
|
||||
|
||||
struct find_shutter_param {
|
||||
s16 profName;
|
||||
fopAc_ac_c* actor;
|
||||
};
|
||||
|
||||
/* 80074E00-80074EB4 .text findShutterCallBack__FP10fopAc_ac_cPv */
|
||||
void findShutterCallBack(fopAc_ac_c*, void*) {
|
||||
/* Nonmatching */
|
||||
static fopAc_ac_c* findShutterCallBack(fopAc_ac_c* actor, void* user) {
|
||||
find_shutter_param* param = (find_shutter_param*)user;
|
||||
if (param->profName != fopAcM_GetProfName(actor))
|
||||
return NULL;
|
||||
|
||||
cXyz diff = actor->orig.pos - param->actor->orig.pos;
|
||||
if (diff.x < 10.0f && diff.x > -10.0f && diff.y < 10.0f && diff.y > -10.0f && diff.z < 10.0f && diff.z > -10.0f)
|
||||
return actor;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 80074EB4-80074FE8 .text specialCast_Shutter__16dEvent_manager_cFsi */
|
||||
fopAc_ac_c* dEvent_manager_c::specialCast_Shutter(s16, int) {
|
||||
/* Nonmatching */
|
||||
fopAc_ac_c* dEvent_manager_c::specialCast_Shutter(s16 profName, int flag) {
|
||||
find_shutter_param param;
|
||||
param.profName = profName;
|
||||
param.actor = dComIfGp_getPlayer(0);
|
||||
|
||||
if (dComIfGp_getPlayer(0) == NULL)
|
||||
JUT_ASSERT(0x623, 0);
|
||||
|
||||
fopAc_ac_c* shutter = (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)findShutterCallBack, ¶m);
|
||||
if (shutter != NULL && flag) {
|
||||
cXyz goal = shutter->orig.pos;
|
||||
s16 angle = param.actor->orig.angle.y + 0x8000;
|
||||
goal.x += cM_ssin(angle) * 100.0f;
|
||||
goal.z += cM_scos(angle) * 100.0f;
|
||||
dComIfGp_evmng_setGoal(&goal);
|
||||
g_dComIfG_gameInfo.play.getEvent().setPt2(shutter);
|
||||
}
|
||||
|
||||
return shutter;
|
||||
}
|
||||
|
||||
/* 80074FE8-800750FC .text specialCast__16dEvent_manager_cFPCci */
|
||||
fopAc_ac_c* dEvent_manager_c::specialCast(const char*, int) {
|
||||
/* Nonmatching */
|
||||
fopAc_ac_c* dEvent_manager_c::specialCast(const char* name, int flag) {
|
||||
fopAc_ac_c* actor = NULL;
|
||||
|
||||
if (name == NULL)
|
||||
return NULL;
|
||||
|
||||
if (strcmp(name, "SHUTTER_DOOR") == 0) {
|
||||
actor = specialCast_Shutter(PROC_DOOR10, flag);
|
||||
if (actor == NULL)
|
||||
actor = specialCast_Shutter(PROC_DOOR12, flag);
|
||||
if (actor == NULL)
|
||||
actor = specialCast_Shutter(PROC_KDDOOR, flag);
|
||||
if (actor == NULL)
|
||||
actor = specialCast_Shutter(PROC_KNOB00, flag);
|
||||
if (actor != NULL)
|
||||
dComIfGp_event_onEventFlag(0x10);
|
||||
}
|
||||
|
||||
if (actor != NULL) {
|
||||
if (flag)
|
||||
fopAcM_OnStatus(actor, fopAcStts_UNK1000_e);
|
||||
else
|
||||
fopAcM_OffStatus(actor, fopAcStts_UNK1000_e);
|
||||
}
|
||||
|
||||
return actor;
|
||||
}
|
||||
|
||||
/* 800750FC-80075288 .text setPrmStaff__16dEvent_manager_cFPvi */
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "d/d_npc.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_event_manager.h"
|
||||
|
||||
bool dNpc_EventCut_c::cutProc() {
|
||||
static char* action_table[] = {
|
||||
@@ -171,7 +172,7 @@ void dNpc_EventCut_c::cutTurnToActorProc() {
|
||||
fopAcM_Search((fopAcIt_JudgeFunc)&findActorCallBack, this);
|
||||
}
|
||||
else {
|
||||
if(mpActorName == 0 || dEvmng_strcmp(mpActorName, "Player") == 0) {
|
||||
if(mpActorName == 0 || strcmp(mpActorName, "Player") == 0) {
|
||||
mpTargetActor = dComIfGp_getPlayer(0);
|
||||
}
|
||||
else {
|
||||
@@ -199,7 +200,7 @@ void dNpc_EventCut_c::cutTurnToActorProc() {
|
||||
if(mpTargetActor == 0) {
|
||||
dComIfGp_evmng_cutEnd(mEvtStaffId);
|
||||
}
|
||||
if(mpActorName == 0 || dEvmng_strcmp(mpActorName, "Player") == 0) {
|
||||
if(mpActorName == 0 || strcmp(mpActorName, "Player") == 0) {
|
||||
mPos = dNpc_playerEyePos(0.0f) + mOffsetPos;
|
||||
}
|
||||
else {
|
||||
@@ -298,7 +299,7 @@ void dNpc_EventCut_c::cutMoveToActorProc() {
|
||||
fopAcM_Search((fopAcIt_JudgeFunc)&findActorCallBack, this);
|
||||
}
|
||||
else {
|
||||
if(mpActorName == 0 || dEvmng_strcmp(mpActorName, "Player") == 0) {
|
||||
if(mpActorName == 0 || strcmp(mpActorName, "Player") == 0) {
|
||||
mpTargetActor = dComIfGp_getPlayer(0);
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user