summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorKenix3 <kenixwhisperwind@gmail.com>2021-04-29 18:56:18 -0400
committerGitHub <noreply@github.com>2021-04-29 18:56:18 -0400
commitc40bb119e1f64972e6a0879110826c455a28437b (patch)
treefb1a29a657a985bcd707004a31d43086310d9d95 /include
parente97f10a6fa573e8b817ed03a4674d52b1818dafa (diff)
Adds in scene support (#117)
* 1 scene done, Z2_SOUGEN OK * All scenes OK * Makefile improvements * Use WIP ZAPD branch as submodule * Add spawn rotation flag macro * Fix bad merge * Move scenes to be in their own subfolders * Rename and restructure extracted baserom files * Progress tracking for assets * Add asset progress to csv * Use master ZAPD * Use distclean like in OOT * Fix up a few things with the makefile * Fix scenes not being dumped from ELF Co-authored-by: Rozelette <Uberpanzermensch@gmail.com>
Diffstat (limited to 'include')
-rw-r--r--include/PR/pfs.h4
-rw-r--r--include/command_macros_base.h19
-rw-r--r--include/functions.h82
-rw-r--r--include/macros.h15
-rw-r--r--include/osint.h3
-rw-r--r--include/segment.h2
-rw-r--r--include/segment_symbols.h68
-rw-r--r--include/z64.h92
-rw-r--r--include/z64bgcheck.h203
-rw-r--r--include/z64cutscene_commands.h21
-rw-r--r--include/z64scene.h127
11 files changed, 470 insertions, 166 deletions
diff --git a/include/PR/pfs.h b/include/PR/pfs.h
index 71e2a20f6..ff7f72bc5 100644
--- a/include/PR/pfs.h
+++ b/include/PR/pfs.h
@@ -1,7 +1,7 @@
#ifndef _ULTRA64_PFS_H_
#define _ULTRA64_PFS_H_
-#include "global.h"
+#include "os.h"
/* File System size */
#define OS_PFS_VERSION 0x0200
@@ -38,7 +38,7 @@
#define PFS_ERR_NOPACK 1 /* no memory card is plugged or */
#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a different one */
#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker*/
-#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR
+#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR
#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist*/
#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad*/
#define PFS_DATA_FULL 7 /* no free pages on ram pack*/
diff --git a/include/command_macros_base.h b/include/command_macros_base.h
new file mode 100644
index 000000000..8d0a3917a
--- /dev/null
+++ b/include/command_macros_base.h
@@ -0,0 +1,19 @@
+#ifndef _COMMAND_MACROS_BASE_H_
+#define _COMMAND_MACROS_BASE_H_
+
+/**
+ * Command Base macros intended for use in designing of more specific command macros
+ * Each macro packs bytes (B), halfowrds (H) and words (W, for consistency) into a single word
+ */
+
+#define CMD_BBBB(a, b, c, d) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 16, 8) | _SHIFTL(c, 8, 8) | _SHIFTL(d, 0, 8))
+
+#define CMD_BBH(a, b, c) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 16, 8) | _SHIFTL(c, 0, 16))
+
+#define CMD_HBB(a, b, c) (_SHIFTL(a, 16, 16) | _SHIFTL(b, 8, 8) | _SHIFTL(c, 0, 8))
+
+#define CMD_HH(a, b) (_SHIFTL(a, 16, 16) | _SHIFTL(b, 0, 16))
+
+#define CMD_W(a) (a)
+
+#endif
diff --git a/include/functions.h b/include/functions.h
index 0ade16d9d..b8e665119 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -918,33 +918,33 @@ void ActorOverlayTable_FaultPrint(void* arg0, void* arg1); // ActorOverlayTable_
void* ActorOverlayTable_FaultAddrConv(void* arg0, void* arg1); // ActorOverlayTable_FaultAddrConv
void ActorOverlayTable_Init(void); // ActorOverlayTable_Init
void ActorOverlayTable_Cleanup(void); // ActorOverlayTable_Cleanup
-void BgCheck_PolygonLinkedListNodeInit(BgPolygonLinkedListNode* node, s16* polyIndex, u16 next);
+void BgCheck_PolygonLinkedListNodeInit(SSNode* node, s16* polyIndex, u16 next);
void BgCheck_PolygonLinkedListResetHead(u16* head);
-void BgCheck_ScenePolygonListsNodeInsert(BgScenePolygonLists* list, u16* head, s16* polyIndex);
-void BgCheck_PolygonLinkedListNodeInsert(BgPolygonLinkedList* list, u16* head, s16* polyIndex);
-void BgCheck_PolygonLinkedListInit(GlobalContext* ctxt, BgPolygonLinkedList* list);
-void BgCheck_PolygonLinkedListAlloc(GlobalContext* ctxt, BgPolygonLinkedList* list, u32 numNodes);
-void BgCheck_PolygonLinkedListReset(BgPolygonLinkedList* list);
-u16 BgCheck_AllocPolygonLinkedListNode(BgPolygonLinkedList* list);
-void BgCheck_CreateVec3fFromVertex(BgVertex* vertex, Vec3f* vector);
-void BgCheck_CreateVertexFromVec3f(BgVertex* vertex, Vec3f* vector);
+void BgCheck_ScenePolygonListsNodeInsert(SSNodeList* list, u16* head, s16* polyIndex);
+void BgCheck_PolygonLinkedListNodeInsert(DynaSSNodeList* list, u16* head, s16* polyIndex);
+void BgCheck_PolygonLinkedListInit(GlobalContext* ctxt, DynaSSNodeList* list);
+void BgCheck_PolygonLinkedListAlloc(GlobalContext* ctxt, DynaSSNodeList* list, u32 numNodes);
+void BgCheck_PolygonLinkedListReset(DynaSSNodeList* list);
+u16 BgCheck_AllocPolygonLinkedListNode(DynaSSNodeList* list);
+void BgCheck_CreateVec3fFromVertex(Vec3s* vertex, Vec3f* vector);
+void BgCheck_CreateVertexFromVec3f(Vec3s* vertex, Vec3f* vector);
float func_800BFD84(CollisionPoly* polygon, f32 param_2, f32 param_3);
s32 func_800BFDEC(CollisionPoly* param_1, CollisionPoly* param_2, u32* param_3, u32* param_4);
-s32 BgCheck_PolygonGetMinY(CollisionPoly* polygons, BgVertex* vertices);
+s32 BgCheck_PolygonGetMinY(CollisionPoly* polygons, Vec3s* vertices);
void BgCheck_PolygonGetNormal(CollisionPoly* polygon, f32* normalX, f32* normalY, f32* normalZ);
void func_800C0094(struct CollisionPoly* param_1, f32 xOffset, f32 yOffset, f32 zOffset, MtxF* matrix);
f32 func_800C01B8(CollisionPoly* param_1, Vec3f* param_2);
-void BgCheck_CreateColTriParamsFromPolygon(CollisionPoly* polygon, BgVertex* vertices, TriNorm* tri);
+void BgCheck_CreateColTriParamsFromPolygon(CollisionPoly* polygon, Vec3s* vertices, TriNorm* tri);
void func_800C02C0(CollisionPoly* poly, s32 index, CollisionContext* bgCtxt, TriNorm* tri);
-// void func_800C0340(CollisionPoly* param_1, BgVertex* param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
-// UNK_TYPE4 func_800C0474(CollisionPoly* param_1, BgVertex* param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
+// void func_800C0340(CollisionPoly* param_1, Vec3s* param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
+// UNK_TYPE4 func_800C0474(CollisionPoly* param_1, Vec3s* param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
// void func_800C0668(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_800C06A8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_800C074C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_800C07F0(void);
-void BgCheck_PolygonCollidesWithSphere(CollisionPoly* polygon, BgVertex* verticies, Vec3f* pos, f32 readius);
-void BgCheck_ScenePolygonListsInsertSorted(CollisionContext* bgCtxt, u16* head, CollisionPoly* polygons, BgVertex* vertices, s16 index);
-void BgCheck_ScenePolygonListsInsert(BgMeshSubdivision* subdivision, CollisionContext* bgCtxt, CollisionPoly* polygons, BgVertex* vertices, s16 index);
+void BgCheck_PolygonCollidesWithSphere(CollisionPoly* polygon, Vec3s* verticies, Vec3f* pos, f32 readius);
+void BgCheck_ScenePolygonListsInsertSorted(CollisionContext* bgCtxt, u16* head, CollisionPoly* polygons, Vec3s* vertices, s16 index);
+void BgCheck_ScenePolygonListsInsert(StaticLookup* subdivision, CollisionContext* bgCtxt, CollisionPoly* polygons, Vec3s* vertices, s16 index);
// void func_800C0E74(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10);
// void func_800C10FC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9);
// void func_800C1238(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE1 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11);
@@ -959,17 +959,17 @@ void BgCheck_ScenePolygonListsInsert(BgMeshSubdivision* subdivision, CollisionCo
// void func_800C25E0(void);
void BgCheck_GetPolyMinSubdivisions(CollisionContext* bgCtxt, Vec3f* min, s32* xSubdivision, s32* ySubdivision, s32* zSubdivision);
void BgCheck_GetPolyMaxSubdivisions(CollisionContext* bgCtxt, Vec3f* max, s32* xSubdivision, s32* ySubdivision, s32* zSubdivision);
-void BgCheck_GetPolyMinMaxSubdivisions(CollisionContext* bgCtxt, BgVertex* vertices, CollisionPoly* polygons, s32* minX, s32* minY, s32* minZ, s32* maxX, s32* maxY, s32* maxZ, s16 index);
-// UNK_TYPE4 func_800C2BE0(Vec3f* param_1, Vec3f* param_2, CollisionPoly* polygons, BgVertex* vertices, s16 index);
-u32 BgCheck_SplitScenePolygonsIntoSubdivisions(CollisionContext* bgCtxt, GlobalContext* ctxt, BgMeshSubdivision* subdivisions);
+void BgCheck_GetPolyMinMaxSubdivisions(CollisionContext* bgCtxt, Vec3s* vertices, CollisionPoly* polygons, s32* minX, s32* minY, s32* minZ, s32* maxX, s32* maxY, s32* maxZ, s16 index);
+// UNK_TYPE4 func_800C2BE0(Vec3f* param_1, Vec3f* param_2, CollisionPoly* polygons, Vec3s* vertices, s16 index);
+u32 BgCheck_SplitScenePolygonsIntoSubdivisions(CollisionContext* bgCtxt, GlobalContext* ctxt, StaticLookup* subdivisions);
s32 BgCheck_GetIsDefaultSpecialScene(GlobalContext* ctxt);
s32 BgCheck_GetSpecialSceneMaxMemory(s32 sceneId, u32* maxMemory);
void BgCheck_CalcSubdivisionSize(f32 min, s32 subdivisions, f32* max, f32* subdivisionSize, f32* inverseSubdivisionSize);
s32 BgCheck_GetSpecialSceneMaxObjects(GlobalContext* ctxt, u32* maxNodes, u32* maxPolygons, u32* maxVertices);
-void BgCheck_Init(CollisionContext* bgCtxt, GlobalContext* ctxt, BgMeshHeader* mesh);
+void BgCheck_Init(CollisionContext* bgCtxt, GlobalContext* ctxt, CollisionHeader* mesh);
void func_800C3C00(CollisionContext* bgCtxt, u32 param_2);
void func_800C3C14(CollisionContext* bgCtxt, u32 param_2);
-BgMeshHeader* BgCheck_GetActorMeshHeader(CollisionContext* bgCtxt, s32 index);
+CollisionHeader* BgCheck_GetActorMeshHeader(CollisionContext* bgCtxt, s32 index);
// void func_800C3C94(void);
f32 func_800C3D50(s32 arg0, CollisionContext* bgCtxt, s32 arg2, CollisionPoly* arg3, s32* arg4, Vec3f* pos, Actor* actor, s32 arg7, f32 arg8, s32 arg9);
// void func_800C3F40(void);
@@ -1009,31 +1009,31 @@ s32 func_800C576C(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, CollisionPoly**, u3
// void func_800C5954(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE2 param_8);
// void func_800C5A20(void);
// void func_800C5A64(void);
-void BgCheck_ScenePolygonListsInit(BgScenePolygonLists* param_1);
-void BgCheck_ScenePolygonListsAlloc(GlobalContext* ctxt, BgScenePolygonLists* lists, s32 numNodes, u32 numPolygons);
+void BgCheck_ScenePolygonListsInit(SSNodeList* param_1);
+void BgCheck_ScenePolygonListsAlloc(GlobalContext* ctxt, SSNodeList* lists, s32 numNodes, u32 numPolygons);
s32 func_800C5B80(u16* param_1);
-u16 BgCheck_ScenePolygonListsReserveNode(BgScenePolygonLists* lists);
-void BgCheck_ActorMeshParamsInit(ActorMeshParams* params);
-void BgCheck_SetActorMeshParams(ActorMeshParams* params, Vec3f* scale, Vec3s* rotation, Vec3f* position);
-s32 BgCheck_AreActorMeshParamsEqual(ActorMeshParams* param_1, ActorMeshParams* param_2);
-void BgCheck_ActorMeshPolyListsHeadsInit(ActorMeshPolyLists* lists);
-void BgCheck_ActorMeshPolyListsInit(ActorMeshPolyLists* lists);
+u16 BgCheck_ScenePolygonListsReserveNode(SSNodeList* lists);
+void BgCheck_ActorMeshParamsInit(ScaleRotPos* params);
+void BgCheck_SetActorMeshParams(ScaleRotPos* params, Vec3f* scale, Vec3s* rotation, Vec3f* position);
+s32 BgCheck_AreActorMeshParamsEqual(ScaleRotPos* param_1, ScaleRotPos* param_2);
+void BgCheck_ActorMeshPolyListsHeadsInit(DynaLookup* lists);
+void BgCheck_ActorMeshPolyListsInit(DynaLookup* lists);
void BgCheck_ActorMeshVerticesIndexInit(s16* index);
void BgCheck_ActorMeshWaterboxesIndexInit(s16* index);
-void BgCheck_ActorMeshInit(GlobalContext* ctxt, ActorMesh* mesh);
-void BgCheck_ActorMeshInitFromActor(ActorMesh* actorMesh, DynaPolyActor* actor, BgMeshHeader* header);
-s32 BgCheck_HasActorMeshChanged(ActorMesh* mesh);
+void BgCheck_ActorMeshInit(GlobalContext* ctxt, BgActor* mesh);
+void BgCheck_ActorMeshInitFromActor(BgActor* actorMesh, DynaPolyActor* actor, CollisionHeader* header);
+s32 BgCheck_HasActorMeshChanged(BgActor* mesh);
void BgCheck_PolygonsInit(CollisionPoly** polygons);
void BgCheck_PolygonsAlloc(GlobalContext* ctxt, CollisionPoly* polygons, u32 numPolygons);
-void BgCheck_VerticesInit(BgVertex** vertices);
-void BgCheck_VerticesListAlloc(GlobalContext* ctxt, BgVertex** vertices, u32 numVertices);
-void BgCheck_WaterboxListInit(BgWaterboxList* waterboxList);
-void BgCheck_WaterboxListAlloc(GlobalContext* ctxt, BgWaterboxList* waterboxList, u32 numWaterboxes);
-void BgCheck_ActorMeshUpdateParams(GlobalContext* ctxt, ActorMesh* mesh);
+void BgCheck_VerticesInit(Vec3s** vertices);
+void BgCheck_VerticesListAlloc(GlobalContext* ctxt, Vec3s** vertices, u32 numVertices);
+void BgCheck_WaterboxListInit(DynaSSWaterboxList* waterboxList);
+void BgCheck_WaterboxListAlloc(GlobalContext* ctxt, DynaSSWaterboxList* waterboxList, u32 numWaterboxes);
+void BgCheck_ActorMeshUpdateParams(GlobalContext* ctxt, BgActor* mesh);
s32 BgCheck_IsActorMeshIndexValid(s32 index);
void BgCheck_DynaInit(GlobalContext* ctxt, DynaCollisionContext* param_2);
void BgCheck_DynaAlloc(GlobalContext* ctxt, DynaCollisionContext* dyna);
-s32 BgCheck_AddActorMesh(GlobalContext* ctxt, DynaCollisionContext* dyna, DynaPolyActor* actor, BgMeshHeader* header);
+s32 BgCheck_AddActorMesh(GlobalContext* ctxt, DynaCollisionContext* dyna, DynaPolyActor* actor, CollisionHeader* header);
DynaPolyActor* BgCheck_GetActorOfMesh(CollisionContext* bgCtxt, s32 index);
void func_800C62BC(GlobalContext* ctxt, DynaCollisionContext* dyna, s32 index);
void func_800C6314(GlobalContext* ctxt, DynaCollisionContext* dyna, s32 index);
@@ -1061,8 +1061,8 @@ void BgCheck_UpdateAllActorMeshes(GlobalContext* ctxt, DynaCollisionContext* dyn
// void func_800C90AC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7);
// void func_800C921C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7, UNK_TYPE4 param_8);
// void func_800C9380(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE2 param_8);
-void BgCheck_RelocateMeshHeaderPointers(BgMeshHeader* header);
-void BgCheck_RelocateMeshHeader(BgMeshHeader* meshSegPtr, BgMeshHeader** param_2);
+void BgCheck_RelocateMeshHeaderPointers(CollisionHeader* header);
+void BgCheck_RelocateMeshHeader(CollisionHeader* meshSegPtr, CollisionHeader** param_2);
void BgCheck_RelocateAllMeshHeaders(CollisionContext* bgCtxt, GlobalContext* ctxt);
// void func_800C9640(void);
u32 BgCheck_GetPolygonAttributes(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index, s32 attributeIndex);
@@ -1116,7 +1116,7 @@ void BgCheck2_UpdateActorYRotation(CollisionContext* bgCtxt, s32 index, Actor* a
void BgCheck2_AttachToMesh(CollisionContext* bgCtxt, Actor* actor, s32 index);
u32 BgCheck2_UpdateActorAttachedToMesh(CollisionContext* bgCtxt, s32 index, Actor* actor);
void BcCheck3_BgActorInit(DynaPolyActor* actor, UNK_TYPE4 param_2);
-void BgCheck3_LoadMesh(GlobalContext* ctxt, DynaPolyActor* actor, BgMeshHeader* meshHeader);
+void BgCheck3_LoadMesh(GlobalContext* ctxt, DynaPolyActor* actor, CollisionHeader* meshHeader);
void BgCheck3_ResetFlags(DynaPolyActor* actor);
void func_800CAE88(DynaPolyActor* actor);
void func_800CAE9C(DynaPolyActor* actor);
diff --git a/include/macros.h b/include/macros.h
index 2896b50bd..15fc41422 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -56,6 +56,21 @@ extern GraphicsContext* __gfxCtx;
} \
(void)0
+/**
+ * `x` vertex x
+ * `y` vertex y
+ * `z` vertex z
+ * `s` texture s coordinate
+ * `t` texture t coordinate
+ * `crnx` red component of color vertex, or x component of normal vertex
+ * `cgny` green component of color vertex, or y component of normal vertex
+ * `cbnz` blue component of color vertex, or z component of normal vertex
+ * `a` alpha
+ */
+#define VTX(x,y,z,s,t,crnx,cgny,cbnz,a) { { { x, y, z }, 0, { s, t }, { crnx, cgny, cbnz, a } } }
+
+#define VTX_T(x,y,z,s,t,cr,cg,cb,a) { { x, y, z }, 0, { s, t }, { cr, cg, cb, a } }
+
#define GRAPH_ALLOC(gfxCtx, size) \
((gfxCtx)->polyOpa.d = (Gfx*)((u8*)(gfxCtx)->polyOpa.d - (size)))
diff --git a/include/osint.h b/include/osint.h
index 1b38c5f8e..c78d0c963 100644
--- a/include/osint.h
+++ b/include/osint.h
@@ -21,7 +21,4 @@ typedef struct {
/* 0x4 */ OSPri priority;
} __OSThreadTail;
-#include <global.h> // TODO this is just so libultra files can see function and variable declarations.
- // Once all data sections have been split up, it should be removed.
-
#endif
diff --git a/include/segment.h b/include/segment.h
index 80367214d..7075b0f5b 100644
--- a/include/segment.h
+++ b/include/segment.h
@@ -46,6 +46,6 @@ extern Gfx object_ikana_obj_001100[];
extern AnimatedTexture object_ikana_obj_001228[];
extern Gfx object_fu_kaiten_0005D0[];
-extern BgMeshHeader object_fu_kaiten_002D30;
+extern CollisionHeader object_fu_kaiten_002D30;
#endif
diff --git a/include/segment_symbols.h b/include/segment_symbols.h
index 8d3fd9e24..7b4132778 100644
--- a/include/segment_symbols.h
+++ b/include/segment_symbols.h
@@ -28,27 +28,27 @@ DECLARE_ROM_SEGMENT(dmadata)
DECLARE_ROM_SEGMENT(Audiobank)
DECLARE_ROM_SEGMENT(Audioseq)
DECLARE_ROM_SEGMENT(Audiotable)
-DECLARE_ROM_SEGMENT(jpn_font_static)
+DECLARE_ROM_SEGMENT(kanji)
DECLARE_ROM_SEGMENT(link_animetion)
DECLARE_ROM_SEGMENT(icon_item_field_static)
DECLARE_ROM_SEGMENT(icon_item_dungeon_static)
DECLARE_ROM_SEGMENT(icon_item_gameover_static)
-DECLARE_ROM_SEGMENT(_013_0x00963540)
-DECLARE_ROM_SEGMENT(_014_0x00967260)
+DECLARE_ROM_SEGMENT(icon_item_jpn_static)
+DECLARE_ROM_SEGMENT(icon_item_vtx_static)
DECLARE_ROM_SEGMENT(map_i_static)
DECLARE_ROM_SEGMENT(map_grand_static)
DECLARE_ROM_SEGMENT(item_name_static)
DECLARE_ROM_SEGMENT(map_name_static)
-DECLARE_ROM_SEGMENT(_019_0x00980f60)
-DECLARE_ROM_SEGMENT(_020_0x009c6230)
-DECLARE_ROM_SEGMENT(_022_0x009caaf0)
-DECLARE_ROM_SEGMENT(_023_0x009d1500)
-DECLARE_ROM_SEGMENT(_024_0x009d3760)
+DECLARE_ROM_SEGMENT(icon_item_static_test)
+DECLARE_ROM_SEGMENT(icon_item_24_static_test)
+DECLARE_ROM_SEGMENT(schedule_dma_static_test)
+DECLARE_ROM_SEGMENT(schedule_static)
+DECLARE_ROM_SEGMENT(story_static)
DECLARE_ROM_SEGMENT(do_action_static)
DECLARE_ROM_SEGMENT(message_static)
DECLARE_ROM_SEGMENT(message_texture_static)
DECLARE_ROM_SEGMENT(nes_font_static)
-DECLARE_ROM_SEGMENT(en_message_data_static)
+DECLARE_ROM_SEGMENT(message_data_static)
DECLARE_ROM_SEGMENT(staff_message_data_static)
DECLARE_SEGMENT(code)
@@ -409,11 +409,11 @@ DECLARE_OVERLAY_SEGMENT(En_Po_Fusen)
DECLARE_OVERLAY_SEGMENT(En_Door_Etc)
DECLARE_OVERLAY_SEGMENT(En_Bigokuta)
DECLARE_OVERLAY_SEGMENT(Bg_Icefloe)
-DECLARE_ROM_SEGMENT(_385_0x00cfc450)
-DECLARE_ROM_SEGMENT(_386_0x00cfc970)
-DECLARE_ROM_SEGMENT(_387_0x00cfd400)
-DECLARE_ROM_SEGMENT(_388_0x00cfdf10)
-DECLARE_ROM_SEGMENT(_389_0x00cfe150)
+DECLARE_OVERLAY_SEGMENT(fbdemo_triforce)
+DECLARE_OVERLAY_SEGMENT(fbdemo_wipe1)
+DECLARE_OVERLAY_SEGMENT(fbdemo_wipe3)
+DECLARE_OVERLAY_SEGMENT(fbdemo_wipe4)
+DECLARE_OVERLAY_SEGMENT(fbdemo_wipe5)
DECLARE_OVERLAY_SEGMENT(Effect_Ss_Sbn)
DECLARE_OVERLAY_SEGMENT(Obj_Ocarinalift)
DECLARE_OVERLAY_SEGMENT(En_Time_Tag)
@@ -1139,27 +1139,27 @@ DECLARE_ROM_SEGMENT(object_fusen)
DECLARE_ROM_SEGMENT(object_ending_obj)
DECLARE_ROM_SEGMENT(object_gi_mask13)
-DECLARE_ROM_SEGMENT(_1114_0x01607b40)
-DECLARE_ROM_SEGMENT(_1115_0x0160b1d0)
-DECLARE_ROM_SEGMENT(_1116_0x0160c540)
-DECLARE_ROM_SEGMENT(_1117_0x0160ed50)
-DECLARE_ROM_SEGMENT(_1118_0x01611e20)
-DECLARE_ROM_SEGMENT(_1119_0x01615e00)
-DECLARE_ROM_SEGMENT(_1120_0x01619170)
-DECLARE_ROM_SEGMENT(_1121_0x01619190)
+DECLARE_ROM_SEGMENT(scene_texture_01)
+DECLARE_ROM_SEGMENT(scene_texture_02)
+DECLARE_ROM_SEGMENT(scene_texture_03)
+DECLARE_ROM_SEGMENT(scene_texture_04)
+DECLARE_ROM_SEGMENT(scene_texture_05)
+DECLARE_ROM_SEGMENT(scene_texture_06)
+DECLARE_ROM_SEGMENT(scene_texture_07)
+DECLARE_ROM_SEGMENT(scene_texture_08)
DECLARE_ROM_SEGMENT(nintendo_rogo_static)
DECLARE_ROM_SEGMENT(title_static)
-DECLARE_ROM_SEGMENT(_1124_0x0163f490)
-DECLARE_ROM_SEGMENT(_1125_0x0163fc10)
-DECLARE_ROM_SEGMENT(_1126_0x0163ffc0)
-DECLARE_ROM_SEGMENT(_1127_0x01643d50)
-DECLARE_ROM_SEGMENT(_1128_0x01644c80)
-DECLARE_ROM_SEGMENT(_1129_0x01646b60)
-DECLARE_ROM_SEGMENT(_1130_0x01649020)
-DECLARE_ROM_SEGMENT(_1131_0x0164ad90)
-DECLARE_ROM_SEGMENT(vr_fine_static)
-DECLARE_ROM_SEGMENT(vr_cloud_static)
-DECLARE_ROM_SEGMENT(vr_pal_static)
+DECLARE_ROM_SEGMENT(memerrmsg)
+DECLARE_ROM_SEGMENT(locerrmsg)
+DECLARE_ROM_SEGMENT(parameter_static)
+DECLARE_ROM_SEGMENT(week_static)
+DECLARE_ROM_SEGMENT(daytelop_static)
+DECLARE_ROM_SEGMENT(ger_daytelop_static)
+DECLARE_ROM_SEGMENT(fra_daytelop_static)
+DECLARE_ROM_SEGMENT(spa_daytelop_static)
+DECLARE_ROM_SEGMENT(d2_fine_static)
+DECLARE_ROM_SEGMENT(d2_cloud_static)
+DECLARE_ROM_SEGMENT(d2_fine_pal_static)
DECLARE_ROM_SEGMENT(elf_message_field)
DECLARE_ROM_SEGMENT(elf_message_ydan)
@@ -1562,7 +1562,7 @@ DECLARE_ROM_SEGMENT(Z2_12HAKUGINMAE_room_00)
DECLARE_ROM_SEGMENT(Z2_17SETUGEN)
DECLARE_ROM_SEGMENT(Z2_17SETUGEN_room_00)
-DECLARE_ROM_SEGMENT(_1455_0x01d35b80)
+DECLARE_ROM_SEGMENT(Z2_17SETUGEN2)
DECLARE_ROM_SEGMENT(Z2_17SETUGEN2_room_00)
DECLARE_ROM_SEGMENT(Z2_SEA_BS)
diff --git a/include/z64.h b/include/z64.h
index 67c05b115..f4b4f8166 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -22,6 +22,7 @@
#include <z64actor.h>
#include <z64animation.h>
+#include <z64bgcheck.h>
#include <z64collision_check.h>
#include <z64cutscene.h>
#include <z64dma.h>
@@ -549,29 +550,19 @@ typedef struct {
} ActorMeshParams; // size = 0x20
typedef struct {
- /* 0x00 */ u16 type;
- union {
- u16 vtxData[3];
- struct {
- /* 0x02 */ u16 flags_vIA; // 0xE000 is poly exclusion flags (xpFlags), 0x1FFF is vtxId
- /* 0x04 */ u16 flags_vIB; // 0xE000 is flags, 0x1FFF is vtxId
- // 0x2000 = poly IsConveyor surface
- /* 0x06 */ u16 vIC;
- };
- };
- /* 0x08 */ Vec3s normal; // Unit normal vector
- // Value ranges from -0x7FFF to 0x7FFF, representing -1.0 to 1.0; 0x8000 is invalid
-
- /* 0x0E */ s16 dist; // Plane distance from origin along the normal
-} CollisionPoly; // size = 0x10
-
-typedef struct {
/* 0x0 */ BgPolygonLinkedListNode* nodes;
/* 0x4 */ u32 nextFreeNode;
/* 0x8 */ s32 maxNodes;
} BgPolygonLinkedList; // size = 0xC
typedef struct {
+ /* 0x00 */ f32 x[4];
+ /* 0x10 */ f32 y[4];
+ /* 0x20 */ f32 z[4];
+ /* 0x30 */ f32 w[4];
+} z_Matrix; // size = 0x40
+
+typedef struct {
/* 0x0 */ Vec3s pos;
} BgVertex; // size = 0x6
@@ -759,19 +750,6 @@ typedef struct {
typedef void(*fault_update_input_func)(Input* input);
typedef struct {
- /* 0x00 */ Vec3s min;
- /* 0x06 */ Vec3s max;
- /* 0x0C */ u16 numVertices;
- /* 0x10 */ BgVertex* vertices;
- /* 0x14 */ u16 numPolygons;
- /* 0x18 */ CollisionPoly* polygons;
- /* 0x1C */ BgPolygonAttributes* attributes;
- /* 0x20 */ UNK_PTR cameraData;
- /* 0x24 */ u16 numWaterBoxes;
- /* 0x28 */ BgWaterBox* waterboxes;
-} BgMeshHeader; // size = 0x2C
-
-typedef struct {
/* 0x000 */ View view;
/* 0x168 */ UNK_TYPE1 pad168[0x84];
/* 0x1EC */ u16 unk1EC;
@@ -1044,19 +1022,6 @@ typedef struct {
/* 0x3CA0 */ SaveContextExtra extra;
} SaveContext; // size = 0x48C8
-typedef struct {
- /* 0x00 */ BgMeshHeader* sceneMesh;
- /* 0x04 */ Vec3f sceneMin;
- /* 0x10 */ Vec3f sceneMax;
- /* 0x1C */ s32 xSubdivisions;
- /* 0x20 */ s32 ySubdivisions;
- /* 0x24 */ s32 zSubdivisions;
- /* 0x28 */ Vec3f subdivisionSize;
- /* 0x34 */ Vec3f inverseSubdivisionSize;
- /* 0x40 */ BgMeshSubdivision* subdivisions;
- /* 0x44 */ BgScenePolygonLists scenePolyLists;
-} StaticCollisionContext; // size = 0x50
-
typedef struct ActorBgMbarChair ActorBgMbarChair;
typedef struct ActorEnBji01 ActorEnBji01;
@@ -1065,10 +1030,6 @@ typedef struct ActorEnTest ActorEnTest;
typedef struct ActorListEntry ActorListEntry;
-typedef struct DynaCollisionContext DynaCollisionContext;
-
-typedef struct CollisionContext CollisionContext;
-
typedef struct ArenaNode_t {
/* 0x0 */ s16 magic; // Should always be 0x7373
/* 0x2 */ s16 isFree;
@@ -1094,41 +1055,6 @@ typedef struct ActorObjBell ActorObjBell;
typedef struct DaytelopContext DaytelopContext;
-typedef struct {
- /* 0x00 */ DynaPolyActor* actor;
- /* 0x04 */ BgMeshHeader* header;
- /* 0x08 */ ActorMeshPolyLists polyLists;
- /* 0x10 */ s16 verticesStartIndex;
- /* 0x12 */ s16 waterboxesStartIndex;
- /* 0x14 */ ActorMeshParams prevParams;
- /* 0x34 */ ActorMeshParams currParams;
- /* 0x54 */ Vec3s averagePos;
- /* 0x5A */ s16 radiusFromAveragePos;
- /* 0x5C */ f32 minY;
- /* 0x60 */ f32 maxY;
-} ActorMesh; // size = 0x64
-
-struct DynaCollisionContext {
- /* 0x0000 */ u8 unk0;
- /* 0x0001 */ UNK_TYPE1 pad1[0x3];
- /* 0x0004 */ ActorMesh actorMeshArr[50];
- /* 0x138C */ u16 flags[50]; // bit 0 - Is mesh active
- /* 0x13F0 */ CollisionPoly* polygons;
- /* 0x13F4 */ BgVertex* vertices;
- /* 0x13F8 */ BgWaterboxList waterboxes;
- /* 0x1400 */ BgPolygonLinkedList polygonList;
- /* 0x140C */ u32 maxNodes;
- /* 0x1410 */ u32 maxPolygons;
- /* 0x1414 */ u32 maxVertices;
- /* 0x1418 */ u32 maxMemory;
- /* 0x141C */ u32 unk141C;
-}; // size = 0x1420
-
-struct CollisionContext {
- /* 0x0000 */ StaticCollisionContext stat;
- /* 0x0050 */ DynaCollisionContext dyna;
-}; // size = 0x1470
-
typedef struct ActorBgIknvObj ActorBgIknvObj;
typedef struct FaultAddrConvClient FaultAddrConvClient;
@@ -1701,7 +1627,7 @@ struct GlobalContext {
/* 0x18848 */ u8 numRooms;
/* 0x18849 */ UNK_TYPE1 pad18849;
/* 0x1884A */ s16 unk1884A;
- /* 0x1884C */ RoomFileLocation* roomList;
+ /* 0x1884C */ RomFile* roomList;
/* 0x18850 */ ActorEntry* linkActorEntry;
/* 0x18854 */ ActorEntry* setupActorList;
/* 0x18858 */ UNK_PTR unk18858;
diff --git a/include/z64bgcheck.h b/include/z64bgcheck.h
new file mode 100644
index 000000000..06c0ecd7c
--- /dev/null
+++ b/include/z64bgcheck.h
@@ -0,0 +1,203 @@
+#ifndef _Z_BGCHECK_
+#define _Z_BGCHECK_
+
+struct GlobalContext;
+struct Actor;
+struct DynaPolyActor;
+
+#define COLPOLY_NORMAL_FRAC (1.0f / SHT_MAX)
+#define COLPOLY_SNORMAL(x) ((s16)((x) * SHT_MAX))
+#define COLPOLY_GET_NORMAL(n) ((n)*COLPOLY_NORMAL_FRAC)
+#define COLPOLY_VIA_FLAG_TEST(vIA, flags) ((vIA) & (((flags)&7) << 13))
+#define COLPOLY_VTX_INDEX(vI) ((vI)&0x1FFF)
+
+#define DYNAPOLY_INVALIDATE_LOOKUP (1 << 0)
+
+#define BGACTOR_NEG_ONE -1
+#define BG_ACTOR_MAX 50
+#define BGCHECK_SCENE BG_ACTOR_MAX
+#define BGCHECK_Y_MIN -32000.0f
+#define BGCHECK_XYZ_ABSMAX 32760.0f
+#define BGCHECK_SUBDIV_OVERLAP 50
+#define BGCHECK_SUBDIV_MIN 150.0f
+
+#define FUNC_80041EA4_RESPAWN 5
+#define FUNC_80041EA4_MOUNT_WALL 6
+#define FUNC_80041EA4_STOP 8
+#define FUNC_80041EA4_VOID_OUT 12
+
+#define WATERBOX_ROOM(p) ((p >> 13) & 0x3F)
+
+typedef struct {
+ Vec3f scale;
+ Vec3s rot;
+ Vec3f pos;
+} ScaleRotPos;
+
+typedef struct {
+ /* 0x00 */ u16 type;
+ union {
+ u16 vtxData[3];
+ struct {
+ /* 0x02 */ u16 flags_vIA; // 0xE000 is poly exclusion flags (xpFlags), 0x1FFF is vtxId
+ /* 0x04 */ u16 flags_vIB; // 0xE000 is flags, 0x1FFF is vtxId
+ // 0x2000 = poly IsConveyor surface
+ /* 0x06 */ u16 vIC;
+ };
+ };
+ /* 0x08 */ Vec3s normal; // Unit normal vector
+ // Value ranges from -0x7FFF to 0x7FFF, representing -1.0 to 1.0; 0x8000 is invalid
+
+ /* 0x0E */ s16 dist; // Plane distance from origin along the normal
+} CollisionPoly; // size = 0x10
+
+typedef struct {
+ /* 0x00 */ u16 cameraSType;
+ /* 0x02 */ s16 numCameras;
+ /* 0x04 */ Vec3s* camPosData;
+} CamData;
+
+typedef struct {
+ /* 0x00 */ s16 xMin;
+ /* 0x02 */ s16 ySurface;
+ /* 0x04 */ s16 zMin;
+ /* 0x06 */ s16 xLength;
+ /* 0x08 */ s16 zLength;
+ /* 0x0C */ u32 properties;
+
+ // 0x0008_0000 = ?
+ // 0x0007_E000 = Room Index, 0x3F = all rooms
+ // 0x0000_1F00 = Lighting Settings Index
+ // 0x0000_00FF = CamData index
+} WaterBox; // size = 0x10
+
+typedef struct {
+ u32 data[2];
+
+ // Type 1
+ // 0x0800_0000 = wall damage
+} SurfaceType;
+
+typedef struct {
+ /* 0x00 */ Vec3s minBounds; // minimum coordinates of poly bounding box
+ /* 0x06 */ Vec3s maxBounds; // maximum coordinates of poly bounding box
+ /* 0x0C */ u16 nbVertices;
+ /* 0x10 */ Vec3s* vtxList;
+ /* 0x14 */ u16 nbPolygons;
+ /* 0x18 */ CollisionPoly* polyList;
+ /* 0x1C */ SurfaceType* surfaceTypeList;
+ /* 0x20 */ CamData* cameraDataList;
+ /* 0x24 */ u16 nbWaterBoxes;
+ /* 0x28 */ WaterBox* waterBoxes;
+} CollisionHeader; // original name: BGDataInfo
+
+typedef struct {
+ s16 polyId;
+ u16 next; // next SSNode index
+} SSNode;
+
+typedef struct {
+ u16 head; // first SSNode index
+} SSList;
+
+typedef struct {
+ /* 0x00 */ u16 max; // original name: short_slist_node_size
+ /* 0x02 */ u16 count; // original name: short_slist_node_last_index
+ /* 0x04 */ SSNode* tbl; // original name: short_slist_node_tbl
+ /* 0x08 */ u8* polyCheckTbl; // points to an array of bytes, one per static poly. Zero initialized when starting a
+ // bg check, and set to 1 if that poly has already been tested.
+} SSNodeList;
+
+typedef struct {
+ SSNode* tbl;
+ s32 count;
+ s32 max;
+} DynaSSNodeList;
+
+typedef struct {
+ SSList floor;
+ SSList wall;
+ SSList ceiling;
+} StaticLookup;
+
+typedef struct {
+ u16 polyStartIndex;
+ SSList ceiling;
+ SSList wall;
+ SSList floor;
+} DynaLookup;
+
+typedef struct {
+ /* 0x00 */ struct Actor* actor;
+ /* 0x04 */ CollisionHeader* colHeader;
+ /* 0x08 */ DynaLookup dynaLookup;
+ /* 0x10 */ u16 vtxStartIndex;
+ /* 0x14 */ ScaleRotPos prevTransform;
+ /* 0x34 */ ScaleRotPos curTransform;
+ /* 0x54 */ Sphere16 boundingSphere;
+ /* 0x5C */ f32 minY;
+ /* 0x60 */ f32 maxY;
+} BgActor; // size = 0x64
+
+typedef struct {
+ /* 0x0 */ UNK_TYPE1 pad0[0x4];
+ /* 0x4 */ WaterBox* boxes;
+} DynaSSWaterboxList; // size = 0x8
+
+typedef struct {
+ /* 0x0000 */ u8 bitFlag;
+ /* 0x0004 */ BgActor bgActors[BG_ACTOR_MAX];
+ /* 0x138C */ u16 bgActorFlags[BG_ACTOR_MAX]; // & 0x0008 = no dyna ceiling
+ /* 0x13F0 */ CollisionPoly* polyList;
+ /* 0x13F4 */ Vec3s* vtxList;
+ /* 0x13F8 */ DynaSSWaterboxList waterboxes;
+ /* 0x1400 */ DynaSSNodeList polyNodes;
+ /* 0x140C */ s32 polyNodesMax;
+ /* 0x1410 */ s32 polyListMax;
+ /* 0x1414 */ s32 vtxListMax;
+} DynaCollisionContext; // size = 0x1418
+
+typedef struct CollisionContext {
+ /* 0x00 */ CollisionHeader* colHeader; // scene's static collision
+ /* 0x04 */ Vec3f minBounds; // minimum coordinates of collision bounding box
+ /* 0x10 */ Vec3f maxBounds; // maximum coordinates of collision bounding box
+ /* 0x1C */ Vec3i subdivAmount; // x, y, z subdivisions of the scene's static collision
+ /* 0x28 */ Vec3f subdivLength; // x, y, z subdivision worldspace lengths
+ /* 0x34 */ Vec3f subdivLengthInv; // inverse of subdivision length
+ /* 0x40 */ StaticLookup* lookupTbl; // 3d array of length subdivAmount
+ /* 0x44 */ SSNodeList polyNodes;
+ /* 0x50 */ DynaCollisionContext dyna;
+ /* 0x1460 */ u32 memSize; // Size of all allocated memory plus CollisionContext
+ /* 0x146C */ u32 unk146C;
+} CollisionContext; // size = 0x1470
+
+typedef struct {
+ /* 0x00 */ struct GlobalContext* globalCtx;
+ /* 0x04 */ struct CollisionContext* colCtx;
+ /* 0x08 */ u16 xpFlags;
+ /* 0x0C */ CollisionPoly** resultPoly;
+ /* 0x10 */ f32 yIntersect;
+ /* 0x14 */ Vec3f* pos;
+ /* 0x18 */ s32* bgId;
+ /* 0x1C */ struct Actor* actor;
+ /* 0x20 */ u32 unk_20;
+ /* 0x24 */ f32 chkDist;
+ /* 0x28 */ DynaCollisionContext* dyna;
+ /* 0x2C */ SSList* ssList;
+} DynaRaycast;
+
+typedef struct {
+ /* 0x00 */ struct CollisionContext* colCtx;
+ /* 0x04 */ u16 xpFlags;
+ /* 0x08 */ DynaCollisionContext* dyna;
+ /* 0x0C */ SSList* ssList;
+ /* 0x10 */ Vec3f* posA;
+ /* 0x14 */ Vec3f* posB;
+ /* 0x18 */ Vec3f* posResult;
+ /* 0x1C */ CollisionPoly** resultPoly;
+ /* 0x20 */ s32 chkOneFace; // bccFlags & 0x8
+ /* 0x24 */ f32* distSq; // distance from posA to poly squared
+ /* 0x28 */ f32 chkDist; // distance from poly
+} DynaLineTest;
+
+#endif
diff --git a/include/z64cutscene_commands.h b/include/z64cutscene_commands.h
new file mode 100644
index 000000000..99000eec2
--- /dev/null
+++ b/include/z64cutscene_commands.h
@@ -0,0 +1,21 @@
+#ifndef _Z64CUTSCENE_COMMANDS_H_
+#define _Z64CUTSCENE_COMMANDS_H_
+
+#include "command_macros_base.h"
+#include "z64cutscene.h"
+
+/**
+ * ARGS
+ * s32 totalEntries (e), s32 endFrame (n)
+ * FORMAT
+ * eeeeeeee nnnnnnnn
+ * size = 0x8
+ */
+#define CS_BEGIN_CUTSCENE(totalEntries, endFrame) CMD_W(totalEntries), CMD_W(endFrame)
+
+/**
+ * Marks the end of a cutscene
+ */
+#define CS_END() 0xFFFFFFFF
+
+#endif
diff --git a/include/z64scene.h b/include/z64scene.h
index b73125987..854a1926e 100644
--- a/include/z64scene.h
+++ b/include/z64scene.h
@@ -5,10 +5,12 @@
#include <z64dma.h>
#include <unk.h>
+#define SPAWN_ROT_FLAGS(rotation, flags) (((rotation) << 7) | (flags))
+
typedef struct {
/* 0x0 */ u32 vromStart;
/* 0x4 */ u32 vromEnd;
-} RoomFileLocation; // size = 0x8
+} RomFile; // size = 0x8
typedef struct {
/* 0x00 */ u8 code;
@@ -172,6 +174,12 @@ typedef struct {
typedef struct {
/* 0x00 */ u8 code;
+ /* 0x01 */ u8 cameraMovement;
+ /* 0x04 */ u32 area;
+} SCmdMiscSettings;
+
+typedef struct {
+ /* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
/* 0x04 */ void* segment;
} SCmdAltHeaders;
@@ -351,6 +359,121 @@ typedef struct {
/* 0x00C */ ObjectStatus objects[35]; // TODO: OBJECT_EXCHANGE_BANK_MAX array size
} SceneContext; // size = 0x958
+typedef struct {
+ u8 headerType;
+} MeshHeaderBase;
+
+typedef struct {
+ MeshHeaderBase base;
+
+ u8 numEntries;
+ u32 dListStart;
+ u32 dListEnd;
+} MeshHeader0;
+
+typedef struct {
+ u32 opaqueDList;
+ u32 translucentDList;
+} MeshEntry0;
+
+typedef struct {
+ MeshHeaderBase base;
+ u8 format;
+ u32 entryRecord;
+} MeshHeader1Base;
+
+typedef struct {
+ MeshHeader1Base base;
+ u32 imagePtr; // 0x08
+ u32 unknown; // 0x0C
+ u32 unknown2; // 0x10
+ u16 bgWidth; // 0x14
+ u16 bgHeight; // 0x16
+ u8 imageFormat; // 0x18
+ u8 imageSize; // 0x19
+ u16 imagePal; // 0x1A
+ u16 imageFlip; // 0x1C
+} MeshHeader1Single;
+
+typedef struct {
+ MeshHeader1Base base;
+ u8 bgCnt;
+ u32 bgRecordPtr;
+} MeshHeader1Multi;
+
+typedef struct {
+ u16 unknown; // 0x00
+ s8 bgID; // 0x02
+ u32 imagePtr; // 0x04
+ u32 unknown2; // 0x08
+ u32 unknown3; // 0x0C
+ u16 bgWidth; // 0x10
+ u16 bgHeight; // 0x12
+ u8 imageFmt; // 0x14
+ u8 imageSize; // 0x15
+ u16 imagePal; // 0x16
+ u16 imageFlip; // 0x18
+} BackgroundRecord;
+
+typedef struct {
+ s16 playerXMax, playerZMax;
+ s16 playerXMin, playerZMin;
+ u32 opaqueDList;
+ u32 translucentDList;
+} MeshEntry2;
+
+typedef struct {
+ MeshHeaderBase base;
+ u8 numEntries;
+ u32 dListStart;
+ u32 dListEnd;
+} MeshHeader2;
+
+typedef struct {
+ u8 ambientClrR, ambientClrG, ambientClrB;
+ u8 diffuseClrA_R, diffuseClrA_G, diffuseClrA_B;
+ u8 diffuseDirA_X, diffuseDirA_Y, diffuseDirA_Z;
+ u8 diffuseClrB_R, diffuseClrB_G, diffuseClrB_B;
+ u8 diffuseDirB_X, diffuseDirB_Y, diffuseDirB_Z;
+ u8 fogClrR, fogClrG, fogClrB;
+ u16 unk;
+ u16 drawDistance;
+} LightSettings;
+
+typedef struct {
+ /* 0x00 */ u8 count; // number of points in the path
+ /* 0x01 */ s8 unk1;
+ /* 0x02 */ s16 unk2;
+ /* 0x04 */ Vec3s* points; // Segment Address to the array of points
+} Path; // size = 0x8
+
+typedef struct {
+ /* 0x00 */ UNK_TYPE2 unk0;
+ /* 0x02 */ UNK_TYPE2 unk2;
+ /* 0x04 */ UNK_TYPE2 unk4;
+ /* 0x06 */ UNK_TYPE2 unk6;
+ /* 0x08 */ UNK_TYPE2 unk8;
+} MinimapEntry; // size = 0xA
+
+typedef struct {
+ /* 0x00 */ MinimapEntry* entry;
+ /* 0x04 */ UNK_TYPE unk4;
+} MinimapList; // size = 0x8
+
+typedef struct {
+ /* 0x00 */ UNK_TYPE2 unk0;
+ /* 0x02 */ UNK_TYPE2 unk2;
+ /* 0x04 */ UNK_TYPE2 unk4;
+ /* 0x06 */ UNK_TYPE2 unk6;
+ /* 0x08 */ UNK_TYPE2 unk8;
+} MinimapChest; // size = 0xA
+
+typedef struct {
+ /* 0x00 */ s16 type;
+ /* 0x00 */ s16 numPoints;
+ /* 0x00 */ Vec3s* points;
+} CsCameraEntry;
+
typedef union {
/* Command: N/A */ SCmdBase base;
/* Command: 0x00 */ SCmdSpawnList spawnList;
@@ -376,7 +499,7 @@ typedef union {
/* Command: 0x14 */ SCmdEndMarker endMarker;
/* Command: 0x15 */ SCmdSoundSettings soundSettings;
/* Command: 0x16 */ SCmdEchoSettings echoSettings;
- /* Command: 0x17 */ SCmdCutsceneData cutsceneData;
+ /* Command: 0x17 */ SCmdMiscSettings miscSettings;
/* Command: 0x18 */ SCmdAltHeaders altHeaders;
/* Command: 0x19 */ SCmdWorldMapVisited worldMapVisited;
/* Command: 0x1A */ SCmdTextureAnimations textureAnimations;