1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
|
#ifndef D_EVENT_D_EVENT_DATA_H
#define D_EVENT_D_EVENT_DATA_H
#include "global.h"
#include "f_pc/f_pc_base.h"
struct 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 */
|