diff options
| author | Kenix3 <kenixwhisperwind@gmail.com> | 2021-04-29 18:56:18 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-29 18:56:18 -0400 |
| commit | c40bb119e1f64972e6a0879110826c455a28437b (patch) | |
| tree | fb1a29a657a985bcd707004a31d43086310d9d95 /include | |
| parent | e97f10a6fa573e8b817ed03a4674d52b1818dafa (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.h | 4 | ||||
| -rw-r--r-- | include/command_macros_base.h | 19 | ||||
| -rw-r--r-- | include/functions.h | 82 | ||||
| -rw-r--r-- | include/macros.h | 15 | ||||
| -rw-r--r-- | include/osint.h | 3 | ||||
| -rw-r--r-- | include/segment.h | 2 | ||||
| -rw-r--r-- | include/segment_symbols.h | 68 | ||||
| -rw-r--r-- | include/z64.h | 92 | ||||
| -rw-r--r-- | include/z64bgcheck.h | 203 | ||||
| -rw-r--r-- | include/z64cutscene_commands.h | 21 | ||||
| -rw-r--r-- | include/z64scene.h | 127 |
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; |
