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
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
|
#ifndef SCENE_H
#define SCENE_H
#include "avoid_ub.h"
#include "ultra64.h"
#include "bgcheck.h"
#include "environment.h"
#include "light.h"
#include "z_math.h"
#include "path.h"
#include "command_macros_base.h"
struct GameState;
struct PlayState;
struct RoomShapeBase;
typedef struct SceneTableEntry {
/* 0x00 */ RomFile sceneFile;
/* 0x08 */ RomFile titleFile;
/* 0x10 */ u8 unk_10;
/* 0x11 */ u8 drawConfig;
/* 0x12 */ u8 unk_12;
/* 0x13 */ u8 unk_13;
} SceneTableEntry; // size = 0x14
typedef struct ActorEntry {
/* 0x00 */ s16 id;
/* 0x02 */ Vec3s pos;
/* 0x08 */ Vec3s rot;
/* 0x0E */ s16 params;
} ActorEntry; // size = 0x10
typedef struct TransitionActorEntry {
struct {
s8 room; // Room to switch to
s8 bgCamIndex; // How the camera reacts during the transition. See `Camera_ChangeDoorCam`
} /* 0x00 */ sides[2]; // 0 = front, 1 = back
/* 0x04 */ s16 id;
/* 0x06 */ Vec3s pos;
/* 0x0C */ s16 rotY;
/* 0x0E */ s16 params;
} TransitionActorEntry; // size = 0x10
typedef struct TransitionActorList {
/* 0x00 */ u8 count;
/* 0x04 */ TransitionActorEntry* list;
} TransitionActorList; // size = 0x8
typedef struct Spawn {
/* 0x00 */ u8 playerEntryIndex;
/* 0x01 */ u8 room;
} Spawn;
// Scene commands
typedef struct SCmdBase {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x04 */ u32 data2;
} SCmdBase;
typedef struct SCmdPlayerEntryList {
/* 0x00 */ u8 code;
/* 0x01 */ u8 length;
/* 0x04 */ ActorEntry* data;
} SCmdPlayerEntryList;
typedef struct SCmdActorEntryList {
/* 0x00 */ u8 code;
/* 0x01 */ u8 length;
/* 0x04 */ ActorEntry* data;
} SCmdActorEntryList;
typedef struct SCmdUnused02 {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x04 */ void* segment;
} SCmdUnused02;
typedef struct SCmdColHeader {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x04 */ CollisionHeader* data;
} SCmdColHeader;
typedef struct SCmdRoomList {
/* 0x00 */ u8 code;
/* 0x01 */ u8 length;
/* 0x04 */ RomFile* data;
} SCmdRoomList;
typedef struct SCmdWindSettings {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x02 */ char pad[2];
/* 0x04 */ u8 x;
/* 0x05 */ u8 y;
/* 0x06 */ u8 z;
/* 0x07 */ u8 unk_07;
} SCmdWindSettings;
typedef struct SCmdSpawnList {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x04 */ Spawn* data;
} SCmdSpawnList;
typedef struct SCmdSpecialFiles {
/* 0x00 */ u8 code;
/* 0x01 */ u8 naviQuestHintFileId;
/* 0x04 */ u32 keepObjectId;
} SCmdSpecialFiles;
typedef struct SCmdRoomBehavior {
/* 0x00 */ u8 code;
/* 0x01 */ u8 gpFlag1;
/* 0x04 */ u32 gpFlag2;
} SCmdRoomBehavior;
typedef struct SCmdMesh {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x04 */ struct RoomShapeBase* data;
} SCmdMesh;
typedef struct SCmdObjectList {
/* 0x00 */ u8 code;
/* 0x01 */ u8 length;
/* 0x04 */ s16* data;
} SCmdObjectList;
typedef struct SCmdLightList {
/* 0x00 */ u8 code;
/* 0x01 */ u8 length;
/* 0x04 */ LightInfo* data;
} SCmdLightList;
typedef struct SCmdPathList {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x04 */ Path* data;
} SCmdPathList;
typedef struct SCmdTransiActorList {
/* 0x00 */ u8 code;
/* 0x01 */ u8 length;
/* 0x04 */ TransitionActorEntry* data;
} SCmdTransiActorList;
typedef struct SCmdLightSettingList {
/* 0x00 */ u8 code;
/* 0x01 */ u8 length;
/* 0x04 */ EnvLightSettings* data;
} SCmdLightSettingList;
typedef struct SCmdTimeSettings {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x02 */ char pad[2];
/* 0x04 */ u8 hour;
/* 0x05 */ u8 min;
/* 0x06 */ u8 timeSpeed;
} SCmdTimeSettings;
typedef struct SCmdSkyboxSettings {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x02 */ char pad[2];
/* 0x04 */ u8 skyboxId;
/* 0x05 */ u8 skyboxConfig;
/* 0x06 */ u8 envLightMode;
} SCmdSkyboxSettings;
typedef struct SCmdSkyboxDisables {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x02 */ char pad[2];
/* 0x04 */ u8 skyboxDisabled;
/* 0x05 */ u8 sunMoonDisabled;
} SCmdSkyboxDisables;
typedef struct SCmdEndMarker {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x04 */ u32 data2;
} SCmdEndMarker;
typedef struct SCmdExitList {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x04 */ s16* data;
} SCmdExitList;
typedef struct SCmdSoundSettings {
/* 0x00 */ u8 code;
/* 0x01 */ u8 specId;
/* 0x02 */ char pad[4];
/* 0x06 */ u8 natureAmbienceId;
/* 0x07 */ u8 seqId;
} SCmdSoundSettings;
typedef struct SCmdEchoSettings {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x02 */ char pad[5];
/* 0x07 */ u8 echo;
} SCmdEchoSettings;
typedef struct SCmdCutsceneData {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x04 */ void* data;
} SCmdCutsceneData;
typedef struct SCmdAltHeaders {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x04 */ void* data;
} SCmdAltHeaders;
typedef struct SCmdMiscSettings {
/* 0x00 */ u8 code;
/* 0x01 */ u8 sceneCamType;
/* 0x04 */ u32 area;
} SCmdMiscSettings;
typedef union SceneCmd {
SCmdBase base;
SCmdPlayerEntryList playerEntryList;
SCmdActorEntryList actorEntryList;
SCmdUnused02 unused02;
SCmdRoomList roomList;
SCmdSpawnList spawnList;
SCmdObjectList objectList;
SCmdLightList lightList;
SCmdPathList pathList;
SCmdTransiActorList transiActorList;
SCmdLightSettingList lightSettingList;
SCmdExitList exitList;
SCmdColHeader colHeader;
SCmdMesh mesh;
SCmdSpecialFiles specialFiles;
SCmdCutsceneData cutsceneData;
SCmdRoomBehavior roomBehavior;
SCmdWindSettings windSettings;
SCmdTimeSettings timeSettings;
SCmdSkyboxSettings skyboxSettings;
SCmdSkyboxDisables skyboxDisables;
SCmdEndMarker endMarker;
SCmdSoundSettings soundSettings;
SCmdEchoSettings echoSettings;
SCmdMiscSettings miscSettings;
SCmdAltHeaders altHeaders;
} SceneCmd; // size = 0x8
typedef BAD_RETURN(s32) (*SceneCmdHandlerFunc)(struct PlayState*, SceneCmd*);
#define DEFINE_SCENE(_0, _1, enum, _3, _4, _5) enum,
typedef enum SceneID {
#include "tables/scene_table.h"
/* 0x6E */ SCENE_ID_MAX
} SceneID;
#undef DEFINE_SCENE
// Fake enum values for scenes that are still referenced in the entrance table
#if !DEBUG_ASSETS
// Debug-only scenes
#define SCENE_TEST01 0x65
#define SCENE_BESITU 0x66
#define SCENE_DEPTH_TEST 0x67
#define SCENE_SYOTES 0x68
#define SCENE_SYOTES2 0x69
#define SCENE_SUTARU 0x6A
#define SCENE_HAIRAL_NIWA2 0x6B
#define SCENE_SASATEST 0x6C
#define SCENE_TESTROOM 0x6D
#endif
// Deleted scene
#define SCENE_UNUSED_6E 0x6E
// Macros for `EntranceInfo.field`
#define ENTRANCE_INFO_CONTINUE_BGM_FLAG (1 << 15)
#define ENTRANCE_INFO_DISPLAY_TITLE_CARD_FLAG (1 << 14)
#define ENTRANCE_INFO_END_TRANS_TYPE_MASK 0x3F80
#define ENTRANCE_INFO_END_TRANS_TYPE_SHIFT 7
#define ENTRANCE_INFO_END_TRANS_TYPE(field) \
(((field) >> ENTRANCE_INFO_END_TRANS_TYPE_SHIFT) \
& (ENTRANCE_INFO_END_TRANS_TYPE_MASK >> ENTRANCE_INFO_END_TRANS_TYPE_SHIFT))
#define ENTRANCE_INFO_START_TRANS_TYPE_MASK 0x7F
#define ENTRANCE_INFO_START_TRANS_TYPE_SHIFT 0
#define ENTRANCE_INFO_START_TRANS_TYPE(field) \
(((field) >> ENTRANCE_INFO_START_TRANS_TYPE_SHIFT) \
& (ENTRANCE_INFO_START_TRANS_TYPE_MASK >> ENTRANCE_INFO_START_TRANS_TYPE_SHIFT))
typedef struct EntranceInfo {
/* 0x00 */ s8 sceneId;
/* 0x01 */ s8 spawn;
/* 0x02 */ u16 field;
} EntranceInfo; // size = 0x4
// Entrance Index Enum
#define DEFINE_ENTRANCE(enum, _1, _2, _3, _4, _5, _6) enum,
typedef enum EntranceIndex {
#include "tables/entrance_table.h"
/* 0x614 */ ENTR_MAX
} EntranceIndex;
#undef DEFINE_ENTRANCE
#define ENTR_LOAD_OPENING -1
typedef enum ReturnEntranceIndex {
/* 0x7FF9 */ ENTR_RETURN_GREAT_FAIRYS_FOUNTAIN_SPELLS = 0x7FF9,
/* 0x7FFA */ ENTR_RETURN_SHOOTING_GALLERY,
/* 0x7FFB */ ENTR_RETURN_2, // unused
/* 0x7FFC */ ENTR_RETURN_BAZAAR,
/* 0x7FFD */ ENTR_RETURN_4, // unused
/* 0x7FFE */ ENTR_RETURN_GREAT_FAIRYS_FOUNTAIN_MAGIC,
/* 0x7FFF */ ENTR_RETURN_GROTTO // Grottos and normal Fairy Fountain
} ReturnEntranceIndex;
typedef enum SceneDrawConfig {
/* 0 */ SDC_DEFAULT,
/* 1 */ SDC_HYRULE_FIELD,
/* 2 */ SDC_KAKARIKO_VILLAGE,
/* 3 */ SDC_ZORAS_RIVER,
/* 4 */ SDC_KOKIRI_FOREST,
/* 5 */ SDC_LAKE_HYLIA,
/* 6 */ SDC_ZORAS_DOMAIN,
/* 7 */ SDC_ZORAS_FOUNTAIN,
/* 8 */ SDC_GERUDO_VALLEY,
/* 9 */ SDC_LOST_WOODS,
/* 10 */ SDC_DESERT_COLOSSUS,
/* 11 */ SDC_GERUDOS_FORTRESS,
/* 12 */ SDC_HAUNTED_WASTELAND,
/* 13 */ SDC_HYRULE_CASTLE,
/* 14 */ SDC_DEATH_MOUNTAIN_TRAIL,
/* 15 */ SDC_DEATH_MOUNTAIN_CRATER,
/* 16 */ SDC_GORON_CITY,
/* 17 */ SDC_LON_LON_RANCH,
/* 18 */ SDC_FIRE_TEMPLE,
/* 19 */ SDC_DEKU_TREE,
/* 20 */ SDC_DODONGOS_CAVERN,
/* 21 */ SDC_JABU_JABU,
/* 22 */ SDC_FOREST_TEMPLE,
/* 23 */ SDC_WATER_TEMPLE,
/* 24 */ SDC_SHADOW_TEMPLE_AND_WELL,
/* 25 */ SDC_SPIRIT_TEMPLE,
/* 26 */ SDC_INSIDE_GANONS_CASTLE,
/* 27 */ SDC_GERUDO_TRAINING_GROUND,
/* 28 */ SDC_DEKU_TREE_BOSS,
/* 29 */ SDC_WATER_TEMPLE_BOSS,
/* 30 */ SDC_TEMPLE_OF_TIME,
/* 31 */ SDC_GROTTOS,
/* 32 */ SDC_CHAMBER_OF_THE_SAGES,
/* 33 */ SDC_GREAT_FAIRYS_FOUNTAIN,
/* 34 */ SDC_SHOOTING_GALLERY,
/* 35 */ SDC_CASTLE_COURTYARD_GUARDS,
/* 36 */ SDC_OUTSIDE_GANONS_CASTLE,
/* 37 */ SDC_ICE_CAVERN,
/* 38 */ SDC_GANONS_TOWER_COLLAPSE_EXTERIOR,
/* 39 */ SDC_FAIRYS_FOUNTAIN,
/* 40 */ SDC_THIEVES_HIDEOUT,
/* 41 */ SDC_BOMBCHU_BOWLING_ALLEY,
/* 42 */ SDC_ROYAL_FAMILYS_TOMB,
/* 43 */ SDC_LAKESIDE_LABORATORY,
/* 44 */ SDC_LON_LON_BUILDINGS,
/* 45 */ SDC_MARKET_GUARD_HOUSE,
/* 46 */ SDC_POTION_SHOP_GRANNY,
/* 47 */ SDC_CALM_WATER,
/* 48 */ SDC_GRAVE_EXIT_LIGHT_SHINING,
/* 49 */ SDC_BESITU,
/* 50 */ SDC_FISHING_POND,
/* 51 */ SDC_GANONS_TOWER_COLLAPSE_INTERIOR,
/* 52 */ SDC_INSIDE_GANONS_CASTLE_COLLAPSE,
/* 53 */ SDC_MAX
} SceneDrawConfig;
typedef void (*SceneDrawConfigFunc)(struct PlayState*);
// R_SCENE_CAM_TYPE values
#define SCENE_CAM_TYPE_DEFAULT 0
#define SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT 0x10 // Camera exhibits fixed behaviors and viewpoint changing is handled by shops
#define SCENE_CAM_TYPE_FIXED_TOGGLE_VIEWPOINT 0x20 // Camera exhibits fixed behaviors and viewpoint can be toggled with c-up
#define SCENE_CAM_TYPE_FIXED 0x30 // Camera exhibits fixed behaviors (see `Play_CamIsNotFixed` usages for examples)
#define SCENE_CAM_TYPE_FIXED_MARKET 0x40 // Camera exhibits fixed behaviors and delays textboxes by a small amount before they start to appear
#define SCENE_CAM_TYPE_SHOOTING_GALLERY 0x50 // Unreferenced in code, and used only by the main layer of the shooting gallery scene
// navi hints
typedef enum NaviQuestHintFileId {
NAVI_QUEST_HINTS_NONE,
NAVI_QUEST_HINTS_OVERWORLD,
NAVI_QUEST_HINTS_DUNGEON
} NaviQuestHintFileId;
// Scene commands
typedef enum SceneCommandTypeID {
/* 0x00 */ SCENE_CMD_ID_PLAYER_ENTRY_LIST,
/* 0x01 */ SCENE_CMD_ID_ACTOR_LIST,
/* 0x02 */ SCENE_CMD_ID_UNUSED_2,
/* 0x03 */ SCENE_CMD_ID_COLLISION_HEADER,
/* 0x04 */ SCENE_CMD_ID_ROOM_LIST,
/* 0x05 */ SCENE_CMD_ID_WIND_SETTINGS,
/* 0x06 */ SCENE_CMD_ID_SPAWN_LIST,
/* 0x07 */ SCENE_CMD_ID_SPECIAL_FILES,
/* 0x08 */ SCENE_CMD_ID_ROOM_BEHAVIOR,
/* 0x09 */ SCENE_CMD_ID_UNDEFINED_9,
/* 0x0A */ SCENE_CMD_ID_ROOM_SHAPE,
/* 0x0B */ SCENE_CMD_ID_OBJECT_LIST,
/* 0x0C */ SCENE_CMD_ID_LIGHT_LIST,
/* 0x0D */ SCENE_CMD_ID_PATH_LIST,
/* 0x0E */ SCENE_CMD_ID_TRANSITION_ACTOR_LIST,
/* 0x0F */ SCENE_CMD_ID_LIGHT_SETTINGS_LIST,
/* 0x10 */ SCENE_CMD_ID_TIME_SETTINGS,
/* 0x11 */ SCENE_CMD_ID_SKYBOX_SETTINGS,
/* 0x12 */ SCENE_CMD_ID_SKYBOX_DISABLES,
/* 0x13 */ SCENE_CMD_ID_EXIT_LIST,
/* 0x14 */ SCENE_CMD_ID_END,
/* 0x15 */ SCENE_CMD_ID_SOUND_SETTINGS,
/* 0x16 */ SCENE_CMD_ID_ECHO_SETTINGS,
/* 0x17 */ SCENE_CMD_ID_CUTSCENE_DATA,
/* 0x18 */ SCENE_CMD_ID_ALTERNATE_HEADER_LIST,
/* 0x19 */ SCENE_CMD_ID_MISC_SETTINGS,
/* 0x1A */ SCENE_CMD_ID_MAX
} SceneCommandTypeID;
#define SCENE_CMD_PLAYER_ENTRY_LIST(length, playerEntryList) \
{ SCENE_CMD_ID_PLAYER_ENTRY_LIST, length, CMD_PTR(playerEntryList) }
#define SCENE_CMD_ACTOR_LIST(numActors, actorList) \
{ SCENE_CMD_ID_ACTOR_LIST, numActors, CMD_PTR(actorList) }
#define SCENE_CMD_UNUSED_02(unk, data) \
{ SCENE_CMD_ID_UNUSED_2, unk, CMD_PTR(data) }
#define SCENE_CMD_COL_HEADER(colHeader) \
{ SCENE_CMD_ID_COLLISION_HEADER, 0, CMD_PTR(colHeader) }
#define SCENE_CMD_ROOM_LIST(numRooms, roomList) \
{ SCENE_CMD_ID_ROOM_LIST, numRooms, CMD_PTR(roomList) }
#define SCENE_CMD_WIND_SETTINGS(xDir, yDir, zDir, strength) \
{ SCENE_CMD_ID_WIND_SETTINGS, 0, CMD_BBBB(xDir, yDir, zDir, strength) }
#define SCENE_CMD_SPAWN_LIST(spawnList) \
{ SCENE_CMD_ID_SPAWN_LIST, 0, CMD_PTR(spawnList) }
#define SCENE_CMD_SPECIAL_FILES(naviQuestHintFileId, keepObjectId) \
{ SCENE_CMD_ID_SPECIAL_FILES, naviQuestHintFileId, CMD_W(keepObjectId) }
#define SCENE_CMD_ROOM_BEHAVIOR(type, environment, showInvisActors, disableWarpSongs) \
{ SCENE_CMD_ID_ROOM_BEHAVIOR, type, \
environment | _SHIFTL(showInvisActors, 8, 1) | _SHIFTL(disableWarpSongs, 10, 1) }
#define SCENE_CMD_UNK_09() \
{ SCENE_CMD_ID_UNDEFINED_9, 0, CMD_W(0) }
#define SCENE_CMD_ROOM_SHAPE(roomShape) \
{ SCENE_CMD_ID_ROOM_SHAPE, 0, CMD_PTR(roomShape) }
#define SCENE_CMD_OBJECT_LIST(numObjects, objectList) \
{ SCENE_CMD_ID_OBJECT_LIST, numObjects, CMD_PTR(objectList) }
#define SCENE_CMD_LIGHT_LIST(numLights, lightList) \
{ SCENE_CMD_ID_POS_LIGHT_LIST, numLights, CMD_PTR(lightList) }
#define SCENE_CMD_PATH_LIST(pathList) \
{ SCENE_CMD_ID_PATH_LIST, 0, CMD_PTR(pathList) }
#define SCENE_CMD_TRANSITION_ACTOR_LIST(numActors, list) \
{ SCENE_CMD_ID_TRANSITION_ACTOR_LIST, numActors, CMD_PTR(list) }
#define SCENE_CMD_ENV_LIGHT_SETTINGS(numLightSettings, lightSettingsList) \
{ SCENE_CMD_ID_LIGHT_SETTINGS_LIST, numLightSettings, CMD_PTR(lightSettingsList) }
#define SCENE_CMD_TIME_SETTINGS(hour, min, timeSpeed) \
{ SCENE_CMD_ID_TIME_SETTINGS, 0, CMD_BBBB(hour, min, timeSpeed, 0) }
#define SCENE_CMD_SKYBOX_SETTINGS(skyboxId, skyboxConfig, envLightMode) \
{ SCENE_CMD_ID_SKYBOX_SETTINGS, 0, CMD_BBBB(skyboxId, skyboxConfig, envLightMode, 0) }
#define SCENE_CMD_SKYBOX_DISABLES(disableSky, disableSunMoon) \
{ SCENE_CMD_ID_SKYBOX_DISABLES, 0, CMD_BBBB(disableSky, disableSunMoon, 0, 0) }
#define SCENE_CMD_EXIT_LIST(exitList) \
{ SCENE_CMD_ID_EXIT_LIST, 0, CMD_PTR(exitList) }
#define SCENE_CMD_END() \
{ SCENE_CMD_ID_END, 0, CMD_W(0) }
#define SCENE_CMD_SOUND_SETTINGS(specId, natureAmbienceId, seqId) \
{ SCENE_CMD_ID_SOUND_SETTINGS, specId, CMD_BBBB(0, 0, natureAmbienceId, seqId) }
#define SCENE_CMD_ECHO_SETTINGS(echo) \
{ SCENE_CMD_ID_ECHO_SETTINGS, 0, CMD_BBBB(0, 0, 0, echo) }
#define SCENE_CMD_CUTSCENE_DATA(cutsceneData) \
{ SCENE_CMD_ID_CUTSCENE_DATA, 0, CMD_PTR(cutsceneData) }
#define SCENE_CMD_ALTERNATE_HEADER_LIST(alternateHeaderList) \
{ SCENE_CMD_ID_ALTERNATE_HEADER_LIST, 0, CMD_PTR(alternateHeaderList) }
#define SCENE_CMD_MISC_SETTINGS(sceneCamType, worldMapLocation) \
{ SCENE_CMD_ID_MISC_SETTINGS, sceneCamType, CMD_W(worldMapLocation) }
s32 Scene_ExecuteCommands(struct PlayState* play, SceneCmd* sceneCmd);
void Scene_ResetTransitionActorList(struct GameState* state, TransitionActorList* transitionActors);
void Scene_SetTransitionForNextEntrance(struct PlayState* play);
void Scene_Draw(struct PlayState* play);
extern EntranceInfo gEntranceTable[ENTR_MAX];
extern SceneTableEntry gSceneTable[SCENE_ID_MAX];
#endif
|