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
+20 -20
View File
@@ -15,28 +15,28 @@ void BgCheck2_UpdateActorPosition(CollisionContext* bgCtxt, s32 index, Actor* ac
if (BgCheck_IsActorMeshIndexValid(index) == 0) return;
SkinMatrix_SetScaleRotateYRPTranslate(&prevMatrix,
bgCtxt->dyna.actorMeshArr[index].prevParams.scale.x,
bgCtxt->dyna.actorMeshArr[index].prevParams.scale.y,
bgCtxt->dyna.actorMeshArr[index].prevParams.scale.z,
bgCtxt->dyna.actorMeshArr[index].prevParams.rotation.x,
bgCtxt->dyna.actorMeshArr[index].prevParams.rotation.y,
bgCtxt->dyna.actorMeshArr[index].prevParams.rotation.z,
bgCtxt->dyna.actorMeshArr[index].prevParams.pos.x,
bgCtxt->dyna.actorMeshArr[index].prevParams.pos.y,
bgCtxt->dyna.actorMeshArr[index].prevParams.pos.z);
bgCtxt->dyna.bgActors[index].prevTransform.scale.x,
bgCtxt->dyna.bgActors[index].prevTransform.scale.y,
bgCtxt->dyna.bgActors[index].prevTransform.scale.z,
bgCtxt->dyna.bgActors[index].prevTransform.rot.x,
bgCtxt->dyna.bgActors[index].prevTransform.rot.y,
bgCtxt->dyna.bgActors[index].prevTransform.rot.z,
bgCtxt->dyna.bgActors[index].prevTransform.pos.x,
bgCtxt->dyna.bgActors[index].prevTransform.pos.y,
bgCtxt->dyna.bgActors[index].prevTransform.pos.z);
if (SkinMatrix_Invert(&prevMatrix, &prevMatrixInv) == 2) return;
SkinMatrix_SetScaleRotateYRPTranslate(&currMatrix,
bgCtxt->dyna.actorMeshArr[index].currParams.scale.x,
bgCtxt->dyna.actorMeshArr[index].currParams.scale.y,
bgCtxt->dyna.actorMeshArr[index].currParams.scale.z,
bgCtxt->dyna.actorMeshArr[index].currParams.rotation.x,
bgCtxt->dyna.actorMeshArr[index].currParams.rotation.y,
bgCtxt->dyna.actorMeshArr[index].currParams.rotation.z,
bgCtxt->dyna.actorMeshArr[index].currParams.pos.x,
bgCtxt->dyna.actorMeshArr[index].currParams.pos.y,
bgCtxt->dyna.actorMeshArr[index].currParams.pos.z);
bgCtxt->dyna.bgActors[index].curTransform.scale.x,
bgCtxt->dyna.bgActors[index].curTransform.scale.y,
bgCtxt->dyna.bgActors[index].curTransform.scale.z,
bgCtxt->dyna.bgActors[index].curTransform.rot.x,
bgCtxt->dyna.bgActors[index].curTransform.rot.y,
bgCtxt->dyna.bgActors[index].curTransform.rot.z,
bgCtxt->dyna.bgActors[index].curTransform.pos.x,
bgCtxt->dyna.bgActors[index].curTransform.pos.y,
bgCtxt->dyna.bgActors[index].curTransform.pos.z);
SkinMatrix_Vec3fMtxFMultXYZ(&prevMatrixInv, &actor->world.pos, &posWithInv);
SkinMatrix_Vec3fMtxFMultXYZ(&currMatrix, &posWithInv, &newPos);
@@ -49,7 +49,7 @@ void BgCheck2_UpdateActorYRotation(CollisionContext* bgCtxt, s32 index, Actor* a
if (BgCheck_IsActorMeshIndexValid(index) == 0) return;
angleChange = bgCtxt->dyna.actorMeshArr[index].currParams.rotation.y - bgCtxt->dyna.actorMeshArr[index].prevParams.rotation.y;
angleChange = bgCtxt->dyna.bgActors[index].curTransform.rot.y - bgCtxt->dyna.bgActors[index].prevTransform.rot.y;
if (actor->id == 0) {
((ActorPlayer*)actor)->unkAD4 += angleChange;
@@ -83,7 +83,7 @@ u32 BgCheck2_UpdateActorAttachedToMesh(CollisionContext* bgCtxt, s32 index, Acto
if (BgCheck_IsActorMeshIndexValid(index) == 0) return 0;
if (((bgCtxt->dyna.flags[index] & 2) != 0) || ((bgCtxt->dyna.flags[index] & 1) == 0)) return 0;
if (((bgCtxt->dyna.bgActorFlags[index] & 2) != 0) || ((bgCtxt->dyna.bgActorFlags[index] & 1) == 0)) return 0;
meshActor = BgCheck_GetActorOfMesh(bgCtxt,index);
+2 -2
View File
@@ -9,8 +9,8 @@ void BcCheck3_BgActorInit(DynaPolyActor* actor, UNK_TYPE4 param_2) {
actor->unk_158 = 0;
}
void BgCheck3_LoadMesh(GlobalContext* ctxt, DynaPolyActor* actor, BgMeshHeader* meshHeader) {
BgMeshHeader* header;
void BgCheck3_LoadMesh(GlobalContext* ctxt, DynaPolyActor* actor, CollisionHeader* meshHeader) {
CollisionHeader* header;
header = NULL;
BgCheck_RelocateMeshHeader(meshHeader, &header);
+26 -26
View File
@@ -1,8 +1,8 @@
#include <ultra64.h>
#include <global.h>
void BgCheck_PolygonLinkedListNodeInit(BgPolygonLinkedListNode* node, s16* polyIndex, u16 next) {
node->polyIndex = *polyIndex;
void BgCheck_PolygonLinkedListNodeInit(SSNode* node, s16* polyIndex, u16 next) {
node->polyId = *polyIndex;
node->next = next;
}
@@ -10,58 +10,58 @@ void BgCheck_PolygonLinkedListResetHead(u16* head) {
*head = 0xFFFF;
}
void BgCheck_ScenePolygonListsNodeInsert(BgScenePolygonLists* list, u16* head, s16* polyIndex) {
void BgCheck_ScenePolygonListsNodeInsert(SSNodeList* list, u16* head, s16* polyIndex) {
u16 index;
index = BgCheck_ScenePolygonListsReserveNode(list);
BgCheck_PolygonLinkedListNodeInit(&list->nodes[index], polyIndex, *head);
BgCheck_PolygonLinkedListNodeInit(&list->tbl[index], polyIndex, *head);
*head = index;
}
void BgCheck_PolygonLinkedListNodeInsert(BgPolygonLinkedList* list, u16* head, s16* polyIndex) {
void BgCheck_PolygonLinkedListNodeInsert(DynaSSNodeList* list, u16* head, s16* polyIndex) {
u16 index;
index = BgCheck_AllocPolygonLinkedListNode(list);
BgCheck_PolygonLinkedListNodeInit(&list->nodes[index], polyIndex, *head);
BgCheck_PolygonLinkedListNodeInit(&list->tbl[index], polyIndex, *head);
*head = index;
}
void BgCheck_PolygonLinkedListInit(GlobalContext* ctxt, BgPolygonLinkedList* list) {
list->nodes = NULL;
list->nextFreeNode = 0;
void BgCheck_PolygonLinkedListInit(GlobalContext* ctxt, DynaSSNodeList* list) {
list->tbl = NULL;
list->count = 0;
}
void BgCheck_PolygonLinkedListAlloc(GlobalContext* ctxt, BgPolygonLinkedList* list, u32 numNodes) {
list->nodes = (BgPolygonLinkedListNode*)THA_AllocEndAlign(&ctxt->state.heap, numNodes << 2, 0xfffffffe);
list->maxNodes = numNodes;
list->nextFreeNode = 0;
void BgCheck_PolygonLinkedListAlloc(GlobalContext* ctxt, DynaSSNodeList* list, u32 numNodes) {
list->tbl = (SSNode*)THA_AllocEndAlign(&ctxt->state.heap, numNodes << 2, 0xfffffffe);
list->max = numNodes;
list->count = 0;
}
void BgCheck_PolygonLinkedListReset(BgPolygonLinkedList* list) {
list->nextFreeNode = 0;
void BgCheck_PolygonLinkedListReset(DynaSSNodeList* list) {
list->count = 0;
}
u16 BgCheck_AllocPolygonLinkedListNode(BgPolygonLinkedList* list) {
u16 BgCheck_AllocPolygonLinkedListNode(DynaSSNodeList* list) {
u16 index;
index = list->nextFreeNode++;
if (list->maxNodes <= index) {
index = list->count++;
if (list->max <= index) {
return 0xffff;
}
return index;
}
void BgCheck_CreateVec3fFromVertex(BgVertex* vertex, Vec3f* vector) {
vector->x = vertex->pos.x;
vector->y = vertex->pos.y;
vector->z = vertex->pos.z;
void BgCheck_CreateVec3fFromVertex(Vec3s* vertex, Vec3f* vector) {
vector->x = vertex->x;
vector->y = vertex->y;
vector->z = vertex->z;
}
void BgCheck_CreateVertexFromVec3f(BgVertex* vertex, Vec3f* vector) {
vertex->pos.x = vector->x;
vertex->pos.y = vector->y;
vertex->pos.z = vector->z;
void BgCheck_CreateVertexFromVec3f(Vec3s* vertex, Vec3f* vector) {
vertex->x = vector->x;
vertex->y = vector->y;
vertex->z = vector->z;
}
#pragma GLOBAL_ASM("./asm/non_matchings/code/z_bgcheck/func_800BFD84.asm")
+12 -12
View File
@@ -192,21 +192,21 @@ void Scene_HeaderCommand02(GlobalContext* ctxt, SceneCmd* entry) {
// Scene Command 0x03: Collision Header
void Scene_HeaderCommand03(GlobalContext* ctxt, SceneCmd* entry) {
BgMeshHeader* temp_ret;
BgMeshHeader* temp_s0;
CollisionHeader* temp_ret;
CollisionHeader* temp_s0;
temp_ret = (BgMeshHeader*)Lib_SegmentedToVirtual(entry->colHeader.segment);
temp_ret = (CollisionHeader*)Lib_SegmentedToVirtual(entry->colHeader.segment);
temp_s0 = temp_ret;
temp_s0->vertices = (BgVertex*)Lib_SegmentedToVirtual(temp_ret->vertices);
temp_s0->polygons = (CollisionPoly*)Lib_SegmentedToVirtual(temp_s0->polygons);
if (temp_s0->attributes != 0) {
temp_s0->attributes = (BgPolygonAttributes*)Lib_SegmentedToVirtual(temp_s0->attributes);
temp_s0->vtxList = (Vec3s*)Lib_SegmentedToVirtual(temp_ret->vtxList);
temp_s0->polyList = (CollisionPoly*)Lib_SegmentedToVirtual(temp_s0->polyList);
if (temp_s0->surfaceTypeList != 0) {
temp_s0->surfaceTypeList = (SurfaceType*)Lib_SegmentedToVirtual(temp_s0->surfaceTypeList);
}
if (temp_s0->cameraData != 0) {
temp_s0->cameraData = (void*)Lib_SegmentedToVirtual(temp_s0->cameraData);
if (temp_s0->cameraDataList != 0) {
temp_s0->cameraDataList = (void*)Lib_SegmentedToVirtual(temp_s0->cameraDataList);
}
if (temp_s0->waterboxes != 0) {
temp_s0->waterboxes = (BgWaterBox*)Lib_SegmentedToVirtual(temp_s0->waterboxes);
if (temp_s0->waterBoxes != 0) {
temp_s0->waterBoxes = (WaterBox*)Lib_SegmentedToVirtual(temp_s0->waterBoxes);
}
BgCheck_Init(&ctxt->colCtx, ctxt, temp_s0);
@@ -215,7 +215,7 @@ void Scene_HeaderCommand03(GlobalContext* ctxt, SceneCmd* entry) {
// Scene Command 0x04: Room List
void Scene_HeaderCommand04(GlobalContext* ctxt, SceneCmd* entry) {
ctxt->numRooms = entry->roomList.num;
ctxt->roomList = (RoomFileLocation*)Lib_SegmentedToVirtual(entry->roomList.segment);
ctxt->roomList = (RomFile*)Lib_SegmentedToVirtual(entry->roomList.segment);
}
// Scene Command 0x06: Entrance List
+10 -10
View File
@@ -97,16 +97,16 @@ void func_80143324(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skyTy
if (globalCtx->kankyoContext.unk10 == 0) {
// Send a DMA request for the clear sky texture
size = (u32)_vr_fine_staticSegmentRomEnd - (u32)_vr_fine_staticSegmentRomStart;
size = (u32)_d2_fine_staticSegmentRomEnd - (u32)_d2_fine_staticSegmentRomStart;
DmaMgr_SendRequestImpl(&skyboxCtx->unk188, skyboxCtx->skyboxStaticSegment[0],
(u32)_vr_fine_staticSegmentRomStart, size, 0, &skyboxCtx->loadQueue, NULL);
(u32)_d2_fine_staticSegmentRomStart, size, 0, &skyboxCtx->loadQueue, NULL);
} else {
// Send a DMA request for the cloudy sky texture
size = (u32)_vr_cloud_staticSegmentRomEnd - (u32)_vr_cloud_staticSegmentRomStart;
size = (u32)_d2_cloud_staticSegmentRomEnd - (u32)_d2_cloud_staticSegmentRomStart;
DmaMgr_SendRequestImpl(&skyboxCtx->unk188, skyboxCtx->skyboxStaticSegment[0],
(u32)_vr_cloud_staticSegmentRomStart, size, 0, &skyboxCtx->loadQueue, NULL);
(u32)_d2_cloud_staticSegmentRomStart, size, 0, &skyboxCtx->loadQueue, NULL);
}
osRecvMesg(&skyboxCtx->loadQueue, NULL, 1);
@@ -114,26 +114,26 @@ void func_80143324(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skyTy
if (globalCtx->kankyoContext.unk11 == 0) {
// Send a DMA request for the clear sky texture
size = (u32)_vr_fine_staticSegmentRomEnd - (u32)_vr_fine_staticSegmentRomStart;
size = (u32)_d2_fine_staticSegmentRomEnd - (u32)_d2_fine_staticSegmentRomStart;
DmaMgr_SendRequestImpl(&skyboxCtx->unk1A8, skyboxCtx->skyboxStaticSegment[1],
(u32)_vr_fine_staticSegmentRomStart, size, 0, &skyboxCtx->loadQueue, NULL);
(u32)_d2_fine_staticSegmentRomStart, size, 0, &skyboxCtx->loadQueue, NULL);
} else {
// Send a DMA request for the cloudy sky texture
size = (u32)_vr_cloud_staticSegmentRomEnd - (u32)_vr_cloud_staticSegmentRomStart;
size = (u32)_d2_cloud_staticSegmentRomEnd - (u32)_d2_cloud_staticSegmentRomStart;
DmaMgr_SendRequestImpl(&skyboxCtx->unk1A8, skyboxCtx->skyboxStaticSegment[1],
(u32)_vr_cloud_staticSegmentRomStart, size, 0, &skyboxCtx->loadQueue, NULL);
(u32)_d2_cloud_staticSegmentRomStart, size, 0, &skyboxCtx->loadQueue, NULL);
}
osRecvMesg(&skyboxCtx->loadQueue, NULL, 1);
osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1);
size = (u32)_vr_pal_staticSegmentRomEnd - (u32)_vr_pal_staticSegmentRomStart;
size = (u32)_d2_fine_pal_staticSegmentRomEnd - (u32)_d2_fine_pal_staticSegmentRomStart;
// Send a DMA request for the skybox palette
DmaMgr_SendRequestImpl(&skyboxCtx->unk1C8, skyboxCtx->skyboxPaletteStaticSegment,
(u32)_vr_pal_staticSegmentRomStart, size, 0, &skyboxCtx->loadQueue, NULL);
(u32)_d2_fine_pal_staticSegmentRomStart, size, 0, &skyboxCtx->loadQueue, NULL);
osRecvMesg(&skyboxCtx->loadQueue, NULL, 1);
}