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>
This commit is contained in:
Kenix3
2021-04-29 18:56:18 -04:00
committed by GitHub
parent e97f10a6fa
commit c40bb119e1
158 changed files with 9168 additions and 6817 deletions
+2 -2
View File
@@ -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*/
+19
View File
@@ -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
+41 -41
View File
@@ -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);
+15
View File
@@ -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)))
-3
View File
@@ -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
+1 -1
View File
@@ -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
+34 -34
View File
@@ -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)
+9 -83
View File
@@ -22,6 +22,7 @@
#include <z64actor.h>
#include <z64animation.h>
#include <z64bgcheck.h>
#include <z64collision_check.h>
#include <z64cutscene.h>
#include <z64dma.h>
@@ -548,29 +549,19 @@ typedef struct {
/* 0x14 */ Vec3f pos;
} 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
@@ -758,19 +749,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];
@@ -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;
+203
View File
@@ -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
+21
View File
@@ -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
+125 -2
View File
@@ -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;
@@ -170,6 +172,12 @@ typedef struct {
/* 0x04 */ void* segment;
} SCmdCutsceneData;
typedef struct {
/* 0x00 */ u8 code;
/* 0x01 */ u8 cameraMovement;
/* 0x04 */ u32 area;
} SCmdMiscSettings;
typedef struct {
/* 0x00 */ u8 code;
/* 0x01 */ u8 data1;
@@ -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;