tp/include/d/d_event_data.h

352 lines
9.1 KiB
C++

#ifndef D_EVENT_D_EVENT_DATA_H
#define D_EVENT_D_EVENT_DATA_H
#include "global.h"
#include "f_pc/f_pc_base.h"
class msg_class;
struct event_binary_data_header {
/* 0x00 */ u32 eventTop; // offset to Event chunk
/* 0x04 */ s32 eventNum;
/* 0x08 */ u32 staffTop; // offset to Staff chunk
/* 0x0C */ s32 staffNum;
/* 0x10 */ u32 cutTop; // offset to Cut chunk
/* 0x14 */ s32 cutNum;
/* 0x18 */ u32 dataTop; // offset to Data chunk
/* 0x1C */ s32 dataNum;
/* 0x20 */ u32 fDataTop; // offset to FData chunk
/* 0x24 */ s32 fDataNum;
/* 0x28 */ u32 iDataTop; // offset to IData chunk
/* 0x2C */ s32 iDataNum;
/* 0x30 */ u32 sDataTop; // offset to SData chunk
/* 0x34 */ s32 sDataNum;
/* 0x38 */ u8 unk[8];
}; // Size: 0x40
enum dEvDt_State_e {
dEvDt_State_START_e = 1,
dEvDt_State_END_e,
};
class dEvDtData_c {
public:
enum DataType {
/* 0x0 */ TYPE_FLOAT,
/* 0x1 */ TYPE_VEC,
/* 0x3 */ TYPE_INT = 3,
/* 0x4 */ TYPE_STRING
};
int getIndex() { return mDataIndex; }
int getNumber() { return mNumber; }
int getType() { return mType; }
int getNext() { return mNext; }
char* getName() { return mName; }
/* 0x00 */ char mName[32];
/* 0x20 */ u32 mIndex;
/* 0x24 */ int mType;
/* 0x28 */ int mDataIndex;
/* 0x2C */ int mNumber;
/* 0x30 */ int mNext;
/* 0x34 */ u8 field_0x34[12];
}; // Size: 0x40
#if DEBUG
class dEvDtData_DBG_c : public dEvDtData_c {
public:
void Init() {
mName[0] = '\0';
mIndex = 0;
mType = 5;
mDataIndex = 0;
mNumber = 0;
mNext = -1;
}
};
#endif
class dEvDtCut_c {
public:
int startCheck();
int getDataTop() { return mDataTop; }
int getFlagId() { return mFlagId; }
char* getName() { return mName; }
int getNext() { return mNext; }
int getStartFlag(int idx) { return mFlags[idx]; }
u32 getTagId() { return mTagID; }
/* 0x00 */ char mName[32];
/* 0x20 */ u32 mTagID;
/* 0x24 */ u32 mIndex;
/* 0x28 */ int mFlags[3];
/* 0x34 */ u32 mFlagId;
/* 0x38 */ int mDataTop;
/* 0x3C */ int mNext;
/* 0x40 */ u8 field_0x40[0x10];
}; // Size: 0x50
#if DEBUG
class dEvDtCut_DBG_c : public dEvDtCut_c {
public:
void Init() {
int i;
mName[0] = '\0';
mTagID = 0;
mIndex = 0;
for (i = 0; i < 3; i++) {
mFlags[i] = -1;
}
mFlagId = 0;
mDataTop = -1;
mNext = -1;
}
};
#endif
class dEvDtStaff_c {
public:
enum StaffType {
/* 0x0 */ TYPE_DEFAULT,
/* 0x1 */ TYPE_ALL,
/* 0x2 */ TYPE_CAMERA,
/* 0x3 */ TYPE_EFFECT,
/* 0x4 */ TYPE_TIMEKEEPER,
/* 0x6 */ TYPE_DIRECTOR = 6,
/* 0x7 */ TYPE_MESSAGE,
/* 0x8 */ TYPE_SOUND,
/* 0x9 */ TYPE_LIGHT,
/* 0xB */ TYPE_PACKAGE = 11,
/* 0xC */ TYPE_CREATE,
};
struct StaffWork {
fpc_ProcID l_msgId;
msg_class* l_msg;
u32 l_msgNo;
struct {
int n; // substance num
int* d; // data
} msgs;
};
struct MessageData {
s16 unk;
};
struct SoundData {
s16 unk;
s16 timer;
};
struct TimerKeeperData {
s32 timer;
};
struct DirectorData {
s16 unk;
s16 unk2;
};
struct EffectData {
u8 pad[8];
s32 unk;
};
void specialProc_WaitStart(int index);
void specialProc_WaitProc(int);
void specialProc();
void init();
void advanceCut(int cut);
void specialProcLight();
void specialProcMessage();
void specialProcSound();
void specialProcCreate();
void specialProcDirector();
void specialProcPackage();
void specialProcTimekeeper();
void specialProcEffect();
int getType() { return mType; }
char* getName() { return mName; }
s32 getTagID() { return mTagID; }
int getCurrentCut() { return mCurrentCut; }
int getStartCut() { return mStartCut; }
// private:
/* 0x00 */ char mName[8];
/* 0x08 */ u8 mWork[0x18];
/* 0x20 */ s32 mTagID;
/* 0x24 */ u32 mIndex;
/* 0x28 */ u32 mFlagID;
/* 0x2C */ int mType;
/* 0x30 */ int mStartCut;
/* 0x34 */ s16 field_0x34;
/* 0x36 */ s16 mWaitTimer;
/* 0x38 */ int mCurrentCut;
/* 0x3C */ s32 field_0x3c;
/* 0x40 */ bool field_0x40;
/* 0x41 */ bool field_0x41;
/* 0x42 */ u8 mData[0x50 - 0x42];
}; // Size: 0x50
STATIC_ASSERT(sizeof(dEvDtStaff_c) == 0x50);
#if DEBUG
class dEvDtStaff_DBG_c : public dEvDtStaff_c {
public:
void Init() {
mName[0] = '\0';
mTagID = 0;
mIndex = 0;
mFlagID = 0;
mType = 13;
mStartCut = 0;
field_0x34 = 0;
}
};
#endif
class dEvDtEvent_c {
public:
int finishCheck();
int forceFinish();
void specialStaffProc(dEvDtStaff_c* p_staff);
int getNStaff() { return mNStaff; }
int getStaff(int idx) { return mStaff[idx]; }
char* getName() { return mName; }
int getPriority() { return mPriority; }
/* 0x00 */ char mName[32];
/* 0x20 */ u32 mIndex;
/* 0x24 */ int field_0x24;
/* 0x28 */ int mPriority;
/* 0x2C */ int mStaff[20];
/* 0x7C */ int mNStaff;
/* 0x80 */ int field_0x80;
/* 0x84 */ int field_0x84;
/* 0x88 */ int mFlags[3];
/* 0x94 */ bool mPlaySound;
/* 0x96 */ s16 field_0x96;
/* 0x98 */ f32 field_0x98;
/* 0x9C */ f32 field_0x9c;
/* 0xA0 */ f32 field_0xa0;
/* 0xA4 */ int mEventState;
/* 0xA8 */ int field_0xa8;
/* 0xAC */ u8 field_0xac[4];
}; // Size: 0xB0
#if DEBUG
class dEvDtEvent_DBG_c : public dEvDtEvent_c {
public:
void Init() {
int i;
mName[0] = '\0';
mIndex = 0;
mStaff[0] = 0;
mNStaff = 0;
for (i = 0; i < 3; i++) {
mFlags[i] = -1;
}
field_0x80 = field_0x84 = 0;
mPlaySound = false;
field_0x24 = 1;
mPriority = 0;
mEventState = 0;
field_0xa8 = 0;
field_0x96 = 0;
field_0x98 = 0.0f;
field_0x9c = 0.0f;
field_0xa0 = 0.0f;
}
}; // Size: 0xB0
#endif
class dEvDtFlag_c {
public:
dEvDtFlag_c() {}
~dEvDtFlag_c() {}
BOOL flagCheck(int flag);
BOOL flagSet(int flag);
BOOL flagMaxCheck(int flag);
void init();
static const int FlagMax = 0x2800;
private:
u32 mFlags[320];
}; // Size = 0x500
class dEvDtBase_c {
public:
dEvDtBase_c() { init(); }
~dEvDtBase_c() {}
int init();
int init(char* p_data, int roomNo);
void advanceCut(dEvDtEvent_c* p_event);
BOOL advanceCutLocal(dEvDtStaff_c* p_staff);
event_binary_data_header* getHeaderP() { return mHeaderP; }
dEvDtStaff_c* getStaffP(int i) { return &mStaffP[i]; }
dEvDtStaff_c* getStaffP() { return mStaffP; }
dEvDtEvent_c* getEventP(int i) { return &mEventP[i]; }
dEvDtEvent_c* getEventP() { return mEventP; }
dEvDtData_c* getDataP(int i) { return &mDataP[i]; }
dEvDtCut_c* getCutP(int i) { return &mCutP[i]; }
char* getEventName(int i) { return mEventP[i].getName(); }
int getStaffCurrentCut(int i) { return mStaffP[i].getCurrentCut(); }
dEvDtCut_c* getCutStaffCurrentCutP(int i) { return getCutP(getStaffCurrentCut(i)); }
int getStaffStartCut(int i) { return mStaffP[i].getStartCut(); }
dEvDtCut_c* getCutStaffStartCutP(int i) { return getCutP(getStaffStartCut(i)); }
int* getIDataP(int i) { return &mIDataP[i]; }
f32* getFDataP(int i) { return &mFDataP[i]; }
char* getSDataP(int i) { return &mSDataP[i]; }
u32 getEventTop() { return mHeaderP->eventTop; }
s32 getEventNum() { return mHeaderP->eventNum; }
u32 getStaffTop() { return mHeaderP->staffTop; }
s32 getStaffNum() { return mHeaderP->staffNum; }
u32 getCutTop() { return mHeaderP->cutTop; }
s32 getCutNum() { return mHeaderP->cutNum; }
u32 getDataTop() { return mHeaderP->dataTop; }
s32 getDataNum() { return mHeaderP->dataNum; }
u32 getFDataTop() { return mHeaderP->fDataTop; }
s32 getFDataNum() { return mHeaderP->fDataNum; }
u32 getIDataTop() { return mHeaderP->iDataTop; }
s32 getIDataNum() { return mHeaderP->iDataNum; }
u32 getSDataTop() { return mHeaderP->sDataTop; }
s32 getSDataNum() { return mHeaderP->sDataNum; }
s32 roomNo() { return mRoomNo; }
void setHeaderP(event_binary_data_header* p_header) { mHeaderP = p_header; }
void setEventP(dEvDtEvent_c* p_event) { mEventP = p_event; }
void setStaffP(dEvDtStaff_c* p_staff) { mStaffP = p_staff; }
void setCutP(dEvDtCut_c* p_cut) { mCutP = p_cut; }
void setDataP(dEvDtData_c* p_data) { mDataP = p_data; }
void setFDataP(f32* p_fdata) { mFDataP = p_fdata; }
void setIDataP(int* p_idata) { mIDataP = p_idata; }
void setSDataP(char* p_sdata) { mSDataP = p_sdata; }
// private:
/* 0x00 */ event_binary_data_header* mHeaderP;
/* 0x04 */ dEvDtEvent_c* mEventP;
/* 0x08 */ dEvDtStaff_c* mStaffP;
/* 0x0C */ dEvDtCut_c* mCutP;
/* 0x10 */ dEvDtData_c* mDataP;
/* 0x14 */ f32* mFDataP;
/* 0x18 */ int* mIDataP;
/* 0x1C */ char* mSDataP;
/* 0x20 */ s32 mRoomNo;
}; // Size = 0x24
STATIC_ASSERT(sizeof(dEvDtBase_c) == 0x24);
#endif /* D_EVENT_D_EVENT_DATA_H */