Files
tp/include/d/d_event.h
T

203 lines
6.2 KiB
C++
Raw Normal View History

2021-03-28 22:49:05 +02:00
#ifndef D_EVENT_D_EVENT_H
#define D_EVENT_D_EVENT_H
2024-10-10 07:29:58 -07:00
#include "d/actor/d_a_itembase.h"
2023-05-12 12:10:14 -07:00
2025-09-23 04:20:38 -07:00
int dEv_defaultSkipProc(void* actor, int parameter);
int dEv_defaultSkipZev(void* actor, int parameter);
int dEv_defaultSkipStb(void* actor, int parameter);
int dEv_noFinishSkipProc(void* actor, int parameter);
2023-05-12 12:10:14 -07:00
struct dStage_MapEvent_dt_c;
class fopAc_ac_c;
2021-03-28 22:49:05 +02:00
class dEvt_order_c {
public:
2021-08-17 02:59:00 +02:00
~dEvt_order_c() {}
2021-06-12 15:22:36 -07:00
dEvt_order_c();
/* 0x00 */ u16 mEventType;
/* 0x02 */ u16 mFlag;
/* 0x04 */ u16 mHindFlag;
2025-09-23 04:20:38 -07:00
/* 0x08 */ fopAc_ac_c* mpRequestActor;
/* 0x0C */ fopAc_ac_c* mpTargetActor;
/* 0x10 */ s16 mEventId;
/* 0x12 */ u16 mPriority;
/* 0x14 */ s8 mNextOrderIdx;
2025-09-23 04:20:38 -07:00
/* 0x15 */ u8 mMapToolId;
2021-06-12 15:22:36 -07:00
}; // Size = 0x18
2021-08-17 02:59:00 +02:00
STATIC_ASSERT(sizeof(dEvt_order_c) == 0x18);
2025-09-23 04:20:38 -07:00
typedef int (*dEvt_SkipCb)(void*, int);
2025-09-23 04:20:38 -07:00
enum dEvt_mode_e {
/* 0x0 */ dEvt_mode_WAIT_e,
/* 0x1 */ dEvt_mode_TALK_e,
/* 0x2 */ dEvt_mode_DEMO_e,
/* 0x3 */ dEvt_mode_COMPULSORY_e
};
2025-09-23 04:20:38 -07:00
enum dEvt_type_e {
/* 0x0 */ dEvt_type_TALK_e,
/* 0x1 */ dEvt_type_DOOR_e,
/* 0x2 */ dEvt_type_OTHER_e,
/* 0x3 */ dEvt_type_COMPULSORY_e,
/* 0x4 */ dEvt_type_POTENTIAL_e,
/* 0x5 */ dEvt_type_ITEM_e,
/* 0x6 */ dEvt_type_SHOWITEM_X_e,
/* 0x7 */ dEvt_type_SHOWITEM_Y_e,
/* 0xA */ dEvt_type_CATCH_e = 10,
/* 0xB */ dEvt_type_TREASURE_e,
};
enum EventStatus {
/* 0x0 */ STATUS_NONE,
};
class dEvt_control_c {
public:
2021-06-12 15:22:36 -07:00
dEvt_control_c();
2025-09-23 04:20:38 -07:00
s32 orderOld(u16 type, u16 prio, u16 flag, u16 hind, void* requestActor,
void* targetActor, const void* eventName);
s32 order(u16 type, u16 prio, u16 flag, u16 hind, void* requestActor,
void* targetActor, s16 id, u8 mapToolId);
void setParam(dEvt_order_c* order);
s32 beforeFlagProc(dEvt_order_c* order);
void afterFlagProc(dEvt_order_c* order);
int commonCheck(dEvt_order_c* order, u16 condition, u16 command);
int talkCheck(dEvt_order_c* order);
int talkXyCheck(dEvt_order_c* order);
int catchCheck(dEvt_order_c* order);
2022-07-02 01:29:13 +02:00
int talkEnd();
2025-09-23 04:20:38 -07:00
int demoCheck(dEvt_order_c* order);
2022-07-02 01:29:13 +02:00
int demoEnd();
2025-09-23 04:20:38 -07:00
int potentialCheck(dEvt_order_c* order);
int doorCheck(dEvt_order_c* order);
int itemCheck(dEvt_order_c* order);
int endProc();
int change();
int entry();
2021-06-12 15:22:36 -07:00
void reset(void*);
void reset();
void clearSkipSystem();
char* getSkipEventName();
2025-09-23 04:20:38 -07:00
void setSkipProc(void* skipActor, dEvt_SkipCb skipCb, int skipParameter);
void setSkipZev(void* skipActor, char* eventName);
2021-06-12 15:22:36 -07:00
void onSkipFade();
void offSkipFade();
bool skipper();
int Step();
int moveApproval(void*);
2025-09-23 04:20:38 -07:00
BOOL compulsory(void*, const char* eventName, u16 hind);
2021-06-12 15:22:36 -07:00
void remove();
2022-05-03 12:55:30 +02:00
dStage_MapEvent_dt_c* getStageEventDt();
void sceneChange(int exitId);
2025-09-23 04:20:38 -07:00
fpc_ProcID getPId(void* actor);
fopAc_ac_c* convPId(fpc_ProcID id);
void* getStbDemoData(char* resName);
static dStage_MapEvent_dt_c* searchMapEventData(u8 mapToolID, s32 roomNo);
static dStage_MapEvent_dt_c* searchMapEventData(u8 mapToolID);
s16 runningEventID(s16 eventID);
2025-09-23 04:20:38 -07:00
void setPt1(void* actor);
void setPt2(void* actor);
void setPtT(void* actor);
void setPtI(void* actor);
2024-10-12 15:11:17 -07:00
void setPtI_Id(fpc_ProcID id);
2025-09-23 04:20:38 -07:00
void setPtD(void* actor);
void setGtItm(u8 itemNo);
2021-06-12 15:22:36 -07:00
u16 chkFlag2(u16 flag) { return flag & mFlag2; }
2025-09-23 04:20:38 -07:00
2025-08-15 05:50:49 -04:00
BOOL runCheck() {
2025-09-23 04:20:38 -07:00
#if DEBUG
2025-08-15 05:50:49 -04:00
return mEventStatus != 0 || mDebugStb != 0;
2025-09-23 04:20:38 -07:00
#else
2025-08-15 05:50:49 -04:00
return mEventStatus != 0;
2025-09-23 04:20:38 -07:00
#endif
2025-08-15 05:50:49 -04:00
}
2025-09-23 04:20:38 -07:00
f32 getCullRate() { return mCullRate; }
2025-09-23 04:20:38 -07:00
void setCullRate(f32 rate) { mCullRate = rate; }
2021-11-10 23:54:31 -08:00
u16 chkEventFlag(u16 flag) { return flag & mEventFlag; }
2022-05-03 12:55:30 +02:00
void onEventFlag(u16 flag) { mEventFlag |= flag; }
void offEventFlag(u16 flag) { mEventFlag &= ~flag; }
2025-09-23 04:20:38 -07:00
2021-12-04 05:10:59 -08:00
u8 getMode() const { return mMode; }
2025-09-23 04:20:38 -07:00
void onHindFlag(u16 flag) { mHindFlag |= flag; }
2024-04-16 03:26:26 +03:00
void offHindFlag(u16 flag) { mHindFlag &= ~flag; }
2025-09-23 04:20:38 -07:00
2021-12-27 05:15:35 -08:00
u16 checkHind(u16 flag) { return flag & mHindFlag; }
2022-01-04 04:53:20 -08:00
u8 checkCompulsory() { return mCompulsory; }
u8 getMapToolId() { return mMapToolId; }
2025-09-23 04:20:38 -07:00
void onFlag2(u16 flag) { mFlag2 |= flag; }
void offFlag2(u16 flag) { mFlag2 &= ~flag; }
2025-09-23 04:20:38 -07:00
BOOL chkTalkXY() { return mTalkXyType == 1 || mTalkXyType == 2; }
2021-06-12 15:22:36 -07:00
2024-10-12 15:11:17 -07:00
BOOL isOrderOK() { return mEventStatus == 0 || mEventStatus == 2; }
2025-09-23 04:20:38 -07:00
fopAc_ac_c* getPt1() { return convPId(mPt1); }
fopAc_ac_c* getPt2() { return convPId(mPt2); }
fopAc_ac_c* getPtT() { return convPId(mPtT); }
2024-11-06 22:20:22 -05:00
fopAc_ac_c* getPtI() { return convPId(mPtI); }
2024-05-01 03:08:21 +03:00
fopAc_ac_c* getPtD() { return convPId(mPtd); }
2025-09-23 04:20:38 -07:00
bool isChangeOK(void* actor) { return mChangeActor == actor; }
2023-03-07 10:44:25 -08:00
u8 getPreItemNo() { return mPreItemNo; }
2023-11-17 20:02:04 -08:00
u8 getGtItm() { return mGtItm; }
2025-09-23 04:20:38 -07:00
void startCheckSkipEdge(void* actor) { setSkipProc(actor, dEv_noFinishSkipProc, 0); }
2024-03-19 04:31:53 -07:00
bool checkSkipEdge() { return chkFlag2(8) != false; }
2025-04-12 00:54:08 +03:00
void setDebugStb(u8 stb) { mDebugStb = stb; }
2021-12-21 06:06:57 -08:00
2021-06-12 15:22:36 -07:00
public:
2025-09-23 04:20:38 -07:00
/* 0x000 */ u8 unk_0x0[4];
2021-06-12 15:22:36 -07:00
/* 0x004 */ dEvt_order_c mOrder[8];
2024-11-06 22:20:22 -05:00
/* 0x0C4 */ fpc_ProcID mPt1;
/* 0x0C8 */ fpc_ProcID mPt2;
/* 0x0CC */ fpc_ProcID mPtT;
/* 0x0D0 */ fpc_ProcID mPtI;
/* 0x0D4 */ fpc_ProcID mPtd;
/* 0x0D8 */ u16 mEventFlag;
/* 0x0DA */ u16 mFlag2;
/* 0x0DC */ u16 mHindFlag;
2025-09-23 04:20:38 -07:00
/* 0x0DE */ s16 mEventId;
/* 0x0E0 */ s16 mUnkEventId; // unknown purpose
/* 0x0E2 */ s8 mNum;
/* 0x0E3 */ s8 mOrderIdx;
/* 0x0E4 */ u8 mMode;
/* 0x0E5 */ u8 mEventStatus;
/* 0x0E6 */ u8 field_0xe6;
/* 0x0E7 */ u8 field_0xe7;
2025-09-23 04:20:38 -07:00
/* 0x0E8 */ s8 field_0xe8;
/* 0x0E9 */ u8 mDebugStb;
/* 0x0EA */ u8 field_0xea;
/* 0x0EB */ u8 mMapToolId;
/* 0x0EC */ u8 field_0xec;
2025-09-23 04:20:38 -07:00
/* 0x0ED */ u8 mTalkXyType;
/* 0x0EE */ u8 mPreItemNo;
/* 0x0EF */ u8 mGtItm;
/* 0x0F0 */ f32 mCullRate;
2022-05-03 12:55:30 +02:00
/* 0x0F4 */ dStage_MapEvent_dt_c* mStageEventDt;
2025-09-23 04:20:38 -07:00
/* 0x0F8 */ void* mChangeActor;
/* 0x0FC */ u8 unk_0xfc[4];
/* 0x100 */ dEvt_SkipCb mSkipFunc;
/* 0x104 */ fpc_ProcID mSkipActorId;
/* 0x108 */ int mSkipTimer;
2025-09-23 04:20:38 -07:00
/* 0x10C */ int mSkipParameter;
/* 0x110 */ BOOL mIsSkipFade;
2021-06-12 15:22:36 -07:00
/* 0x114 */ char mSkipEventName[20];
/* 0x128 */ u8 mCompulsory;
/* 0x129 */ bool mRoomInfoSet;
/* 0x12C */ int mRoomNo;
2025-06-27 03:14:58 -07:00
#if PLATFORM_WII || PLATFORM_SHIELD
/* 0x130 */ u8 field_0x130;
#endif
2025-09-23 04:20:38 -07:00
};
2022-05-03 12:55:30 +02:00
2021-03-28 22:49:05 +02:00
#endif /* D_EVENT_D_EVENT_H */