From 154f44b6da6e0b9be69886ec8d8a5a8ea2f4791e Mon Sep 17 00:00:00 2001 From: Dragorn421 Date: Sat, 21 May 2022 14:54:51 +0200 Subject: [PATCH] Documentation pass on scene/room commands (#1226) * Rename handler functions * Rename cmd_id enum names for consistency * `char` -> `s8` for explicit padding in cmd structs * `Room.unk03/03` -> `behaviorType2/1` * `UNK_PTR` -> `void*` * `showInvisActors` -> `lensActorsMode` + enum * Add `ROOM_BEHAVIOR_TYPE1/2_` enums * "mesh" -> "mesh header" * `Polygon polygon` -> `PolygonBase base` (for now...) * Misc cleanup * "lens actors mode" -> "lens actor mode" * Revert "`char` -> `s8` for explicit padding in cmd structs" This reverts commit 59b9295828d0fa341b0f05fbe9d660adb04476aa. * `LENS_ACTOR_MODE_` -> `LENS_MODE_HIDE/SHOW_ACTORS` --- include/z64.h | 49 +++++--- include/z64scene.h | 24 ++-- src/code/z_actor.c | 10 +- src/code/z_camera.c | 15 +-- src/code/z_kankyo.c | 2 +- src/code/z_parameter.c | 5 +- src/code/z_play.c | 2 +- src/code/z_player_lib.c | 4 +- src/code/z_rcp.c | 2 +- src/code/z_room.c | 14 +-- src/code/z_scene.c | 116 +++++++++--------- .../ovl_Bg_Haka_Megane/z_bg_haka_megane.c | 2 +- .../actors/ovl_Magic_Dark/z_magic_dark.c | 2 +- .../actors/ovl_player_actor/z_player.c | 21 ++-- 14 files changed, 144 insertions(+), 124 deletions(-) diff --git a/include/z64.h b/include/z64.h index 5cfefc5fdc..5647d4588a 100644 --- a/include/z64.h +++ b/include/z64.h @@ -796,13 +796,10 @@ typedef struct { typedef struct { /* 0x00 */ u8 type; - /* 0x01 */ u8 num; // number of dlist entries - /* 0x04 */ void* start; - /* 0x08 */ void* end; -} Polygon; // size = 0xC +} PolygonBase; typedef struct { - /* 0x00 */ u8 type; + /* 0x00 */ PolygonBase base; /* 0x01 */ u8 num; // number of dlist entries /* 0x04 */ void* start; /* 0x08 */ void* end; @@ -823,7 +820,7 @@ typedef struct { } BgImage; // size = 0x1C typedef struct { - /* 0x00 */ u8 type; + /* 0x00 */ PolygonBase base; /* 0x01 */ u8 format; // 1 = single, 2 = multi /* 0x04 */ Gfx* dlist; union { @@ -853,27 +850,51 @@ typedef struct { } PolygonDlist2; // size = 0x8 typedef struct { - /* 0x00 */ u8 type; + /* 0x00 */ PolygonBase base; /* 0x01 */ u8 num; // number of dlist entries /* 0x04 */ void* start; /* 0x08 */ void* end; } PolygonType2; // size = 0xC typedef union { - Polygon polygon; + PolygonBase base; PolygonType0 polygon0; PolygonType1 polygon1; PolygonType2 polygon2; -} Mesh; // "Ground Shape" +} MeshHeader; // "Ground Shape" + +typedef enum { + /* 0 */ LENS_MODE_HIDE_ACTORS, // lens actors are visible by default, and hidden by using lens (for example, fake walls) + /* 1 */ LENS_MODE_SHOW_ACTORS // lens actors are invisible by default, and shown by using lens (for example, invisible enemies) +} LensMode; + +typedef enum { + /* 0 */ ROOM_BEHAVIOR_TYPE1_0, + /* 1 */ ROOM_BEHAVIOR_TYPE1_1, + /* 2 */ ROOM_BEHAVIOR_TYPE1_2, + /* 3 */ ROOM_BEHAVIOR_TYPE1_3, // unused + /* 4 */ ROOM_BEHAVIOR_TYPE1_4, // unused + /* 5 */ ROOM_BEHAVIOR_TYPE1_5 +} RoomBehaviorType1; + +typedef enum { + /* 0 */ ROOM_BEHAVIOR_TYPE2_0, + /* 1 */ ROOM_BEHAVIOR_TYPE2_1, + /* 2 */ ROOM_BEHAVIOR_TYPE2_2, + /* 3 */ ROOM_BEHAVIOR_TYPE2_3, + /* 4 */ ROOM_BEHAVIOR_TYPE2_4, + /* 5 */ ROOM_BEHAVIOR_TYPE2_5, + /* 6 */ ROOM_BEHAVIOR_TYPE2_6 +} RoomBehaviorType2; typedef struct { /* 0x00 */ s8 num; /* 0x01 */ u8 unk_01; - /* 0x02 */ u8 unk_02; - /* 0x03 */ u8 unk_03; + /* 0x02 */ u8 behaviorType2; + /* 0x03 */ u8 behaviorType1; /* 0x04 */ s8 echo; - /* 0x05 */ u8 showInvisActors; - /* 0x08 */ Mesh* mesh; // original name: "ground_shape" + /* 0x05 */ u8 lensMode; + /* 0x08 */ MeshHeader* meshHeader; // original name: "ground_shape" /* 0x0C */ void* segment; /* 0x10 */ char unk_10[0x4]; } Room; // size = 0x14 @@ -1208,7 +1229,7 @@ typedef struct GlobalContext { /* 0x11DF0 */ RomFile* roomList; /* 0x11DF4 */ ActorEntry* linkActorEntry; /* 0x11DF8 */ ActorEntry* setupActorList; - /* 0x11DFC */ UNK_PTR unk_11DFC; + /* 0x11DFC */ void* unk_11DFC; /* 0x11E00 */ EntranceEntry* setupEntranceList; /* 0x11E04 */ s16* setupExitList; /* 0x11E08 */ Path* setupPathList; diff --git a/include/z64scene.h b/include/z64scene.h index 4ae2c6fd9c..f2248b01ad 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -343,20 +343,20 @@ typedef enum { typedef enum { /* 0x00 */ SCENE_CMD_ID_SPAWN_LIST, /* 0x01 */ SCENE_CMD_ID_ACTOR_LIST, - /* 0x02 */ SCENE_CMD_ID_UNUSED_02, - /* 0x03 */ SCENE_CMD_ID_COL_HEADER, + /* 0x02 */ SCENE_CMD_ID_UNUSED_2, + /* 0x03 */ SCENE_CMD_ID_COLLISION_HEADER, /* 0x04 */ SCENE_CMD_ID_ROOM_LIST, /* 0x05 */ SCENE_CMD_ID_WIND_SETTINGS, /* 0x06 */ SCENE_CMD_ID_ENTRANCE_LIST, /* 0x07 */ SCENE_CMD_ID_SPECIAL_FILES, /* 0x08 */ SCENE_CMD_ID_ROOM_BEHAVIOR, - /* 0x09 */ SCENE_CMD_ID_UNK_09, - /* 0x0A */ SCENE_CMD_ID_MESH, + /* 0x09 */ SCENE_CMD_ID_UNDEFINED_9, + /* 0x0A */ SCENE_CMD_ID_MESH_HEADER, /* 0x0B */ SCENE_CMD_ID_OBJECT_LIST, /* 0x0C */ SCENE_CMD_ID_LIGHT_LIST, /* 0x0D */ SCENE_CMD_ID_PATH_LIST, - /* 0x0E */ SCENE_CMD_ID_TRANSI_ACTOR_LIST, - /* 0x0F */ SCENE_CMD_ID_ENV_LIGHT_SETTINGS, + /* 0x0E */ SCENE_CMD_ID_TRANSITION_ACTOR_LIST, + /* 0x0F */ SCENE_CMD_ID_LIGHT_SETTINGS_LIST, /* 0x10 */ SCENE_CMD_ID_TIME_SETTINGS, /* 0x11 */ SCENE_CMD_ID_SKYBOX_SETTINGS, /* 0x12 */ SCENE_CMD_ID_SKYBOX_DISABLES, @@ -377,10 +377,10 @@ typedef enum { { SCENE_CMD_ID_ACTOR_LIST, numActors, CMD_PTR(actorList) } #define SCENE_CMD_UNUSED_02(unk, data) \ - { SCENE_CMD_ID_UNUSED_02, unk, CMD_PTR(data) } + { SCENE_CMD_ID_UNUSED_2, unk, CMD_PTR(data) } #define SCENE_CMD_COL_HEADER(colHeader) \ - { SCENE_CMD_ID_COL_HEADER, 0, CMD_PTR(colHeader) } + { SCENE_CMD_ID_COLLISION_HEADER, 0, CMD_PTR(colHeader) } #define SCENE_CMD_ROOM_LIST(numRooms, roomList) \ { SCENE_CMD_ID_ROOM_LIST, numRooms, CMD_PTR(roomList) } @@ -399,10 +399,10 @@ typedef enum { curRoomUnk2 | _SHIFTL(showInvisActors, 8, 1) | _SHIFTL(disableWarpSongs, 10, 1) } #define SCENE_CMD_UNK_09() \ - { SCENE_CMD_ID_UNK_09, 0, CMD_W(0) } + { SCENE_CMD_ID_UNDEFINED_9, 0, CMD_W(0) } #define SCENE_CMD_MESH(meshHeader) \ - { SCENE_CMD_ID_MESH, 0, CMD_PTR(meshHeader) } + { SCENE_CMD_ID_MESH_HEADER, 0, CMD_PTR(meshHeader) } #define SCENE_CMD_OBJECT_LIST(numObjects, objectList) \ { SCENE_CMD_ID_OBJECT_LIST, numObjects, CMD_PTR(objectList) } @@ -414,10 +414,10 @@ typedef enum { { SCENE_CMD_ID_PATH_LIST, 0, CMD_PTR(pathList) } #define SCENE_CMD_TRANSITION_ACTOR_LIST(numActors, list) \ - { SCENE_CMD_ID_TRANSI_ACTOR_LIST, numActors, CMD_PTR(list) } + { SCENE_CMD_ID_TRANSITION_ACTOR_LIST, numActors, CMD_PTR(list) } #define SCENE_CMD_ENV_LIGHT_SETTINGS(numLightSettings, lightSettingsList) \ - { SCENE_CMD_ID_ENV_LIGHT_SETTINGS, numLightSettings, CMD_PTR(lightSettingsList) } + { SCENE_CMD_ID_LIGHT_SETTINGS_LIST, numLightSettings, CMD_PTR(lightSettingsList) } #define SCENE_CMD_TIME_SETTINGS(hour, min, speed) \ { SCENE_CMD_ID_TIME_SETTINGS, 0, CMD_BBBB(hour, min, speed, 0) } diff --git a/src/code/z_actor.c b/src/code/z_actor.c index b54d445428..6a5560d6b0 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1009,7 +1009,7 @@ void func_8002DE04(GlobalContext* globalCtx, Actor* actorA, Actor* actorB) { } void func_8002DE74(GlobalContext* globalCtx, Player* player) { - if ((globalCtx->roomCtx.curRoom.unk_03 != 4) && func_800C0CB8(globalCtx)) { + if ((globalCtx->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_4) && func_800C0CB8(globalCtx)) { Camera_ChangeSetting(Play_GetCamera(globalCtx, CAM_ID_MAIN), CAM_SET_HORSE); } } @@ -2289,7 +2289,7 @@ void Actor_DrawLensActors(GlobalContext* globalCtx, s32 numInvisibleActors, Acto gDPPipeSync(POLY_XLU_DISP++); - if (globalCtx->roomCtx.curRoom.showInvisActors == 0) { + if (globalCtx->roomCtx.curRoom.lensMode == LENS_MODE_HIDE_ACTORS) { // Update both the color frame buffer and the z-buffer gDPSetOtherMode(POLY_XLU_DISP++, G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | @@ -2338,7 +2338,7 @@ void Actor_DrawLensActors(GlobalContext* globalCtx, s32 numInvisibleActors, Acto // "Magic lens invisible Actor display END" gDPNoOpString(POLY_OPA_DISP++, "魔法のメガネ 見えないActor表示 END", numInvisibleActors); - if (globalCtx->roomCtx.curRoom.showInvisActors != 0) { + if (globalCtx->roomCtx.curRoom.lensMode != LENS_MODE_HIDE_ACTORS) { // Draw the lens overlay to the color frame buffer gDPNoOpString(POLY_OPA_DISP++, "青い眼鏡(外側)", 0); // "Blue spectacles (exterior)" @@ -2431,8 +2431,8 @@ void func_800315AC(GlobalContext* globalCtx, ActorContext* actorCtx) { if ((HREG(64) != 1) || ((HREG(65) != -1) && (HREG(65) != HREG(66))) || (HREG(71) == 0)) { if ((actor->init == NULL) && (actor->draw != NULL) && (actor->flags & (ACTOR_FLAG_5 | ACTOR_FLAG_6))) { if ((actor->flags & ACTOR_FLAG_7) && - ((globalCtx->roomCtx.curRoom.showInvisActors == 0) || globalCtx->actorCtx.lensActive || - (actor->room != globalCtx->roomCtx.curRoom.num))) { + ((globalCtx->roomCtx.curRoom.lensMode == LENS_MODE_HIDE_ACTORS) || + globalCtx->actorCtx.lensActive || (actor->room != globalCtx->roomCtx.curRoom.num))) { ASSERT(invisibleActorCounter < INVISIBLE_ACTOR_MAX, "invisible_actor_counter < INVISIBLE_ACTOR_MAX", "../z_actor.c", 6464); invisibleActors[invisibleActorCounter] = actor; diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 81e6a1c653..f7b675c35b 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -6929,19 +6929,20 @@ void func_80057FC4(Camera* camera) { if (camera != &camera->globalCtx->mainCamera) { camera->prevSetting = camera->setting = CAM_SET_FREE0; camera->unk_14C &= ~0x4; - } else if (camera->globalCtx->roomCtx.curRoom.mesh->polygon.type != 1) { - switch (camera->globalCtx->roomCtx.curRoom.unk_03) { - case 1: + } else if (camera->globalCtx->roomCtx.curRoom.meshHeader->base.type != 1) { + switch (camera->globalCtx->roomCtx.curRoom.behaviorType1) { + case ROOM_BEHAVIOR_TYPE1_1: Camera_ChangeDoorCam(camera, NULL, -99, 0, 0, 18, 10); camera->prevSetting = camera->setting = CAM_SET_DUNGEON0; break; - case 0: + case ROOM_BEHAVIOR_TYPE1_0: osSyncPrintf("camera: room type: default set field\n"); Camera_ChangeDoorCam(camera, NULL, -99, 0, 0, 18, 10); camera->prevSetting = camera->setting = CAM_SET_NORMAL0; break; default: - osSyncPrintf("camera: room type: default set etc (%d)\n", camera->globalCtx->roomCtx.curRoom.unk_03); + osSyncPrintf("camera: room type: default set etc (%d)\n", + camera->globalCtx->roomCtx.curRoom.behaviorType1); Camera_ChangeDoorCam(camera, NULL, -99, 0, 0, 18, 10); camera->prevSetting = camera->setting = CAM_SET_NORMAL0; camera->unk_14C |= 4; @@ -7250,7 +7251,7 @@ s32 Camera_UpdateWater(Camera* camera) { s32 Camera_UpdateHotRoom(Camera* camera) { camera->distortionFlags &= ~DISTORTION_HOT_ROOM; - if (camera->globalCtx->roomCtx.curRoom.unk_02 == 3) { + if (camera->globalCtx->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3) { camera->distortionFlags |= DISTORTION_HOT_ROOM; } @@ -7776,7 +7777,7 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 flags) { func_80078884(0); break; case 2: - if (camera->globalCtx->roomCtx.curRoom.unk_03 == 1) { + if (camera->globalCtx->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_1) { func_80078884(NA_SE_SY_ATTENTION_URGENCY); } else { func_80078884(NA_SE_SY_ATTENTION_ON); diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index 596ff34430..3a4d426b1d 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -2502,7 +2502,7 @@ void Environment_AdjustLights(GlobalContext* globalCtx, f32 arg1, f32 arg2, f32 f32 temp; s32 i; - if (globalCtx->roomCtx.curRoom.unk_03 != 5 && func_800C0CB8(globalCtx)) { + if (globalCtx->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_5 && func_800C0CB8(globalCtx)) { arg1 = CLAMP_MIN(arg1, 0.0f); arg1 = CLAMP_MAX(arg1, 1.0f); diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 62c8314f88..46866eea88 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -612,7 +612,7 @@ void func_80082850(GlobalContext* globalCtx, s16 maxAlpha) { break; } - if ((globalCtx->roomCtx.curRoom.unk_03 == 1) && (interfaceCtx->minimapAlpha >= 255)) { + if ((globalCtx->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_1) && (interfaceCtx->minimapAlpha >= 255)) { interfaceCtx->minimapAlpha = 255; } } @@ -4173,7 +4173,8 @@ void Interface_Update(GlobalContext* globalCtx) { gTimeSpeed = sPrevTimeSpeed; globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04; } - } else if ((globalCtx->roomCtx.curRoom.unk_03 != 1) && (interfaceCtx->restrictions.sunsSong != 3)) { + } else if ((globalCtx->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_1) && + (interfaceCtx->restrictions.sunsSong != 3)) { if ((gSaveContext.dayTime >= CLOCK_TIME(6, 30)) && (gSaveContext.dayTime < CLOCK_TIME(18, 0) + 1)) { gSaveContext.nextDayTime = NEXT_TIME_NIGHT; globalCtx->transitionType = TRANS_TYPE_FADE_BLACK_FAST; diff --git a/src/code/z_play.c b/src/code/z_play.c index 8888819dd4..f841cd4c1c 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1808,7 +1808,7 @@ void Play_TriggerRespawn(GlobalContext* this) { } s32 func_800C0CB8(GlobalContext* this) { - return (this->roomCtx.curRoom.mesh->polygon.type != 1) && (YREG(15) != 0x20) && (YREG(15) != 0x30) && + return (this->roomCtx.curRoom.meshHeader->base.type != 1) && (YREG(15) != 0x20) && (YREG(15) != 0x30) && (YREG(15) != 0x40) && (this->sceneNum != SCENE_HAIRAL_NIWA); } diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 1b1323f7e0..6f15c1c073 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -474,7 +474,7 @@ void Player_SetBootData(GlobalContext* globalCtx, Player* this) { IREG(69) = bootRegs[15]; MREG(95) = bootRegs[16]; - if (globalCtx->roomCtx.curRoom.unk_03 == 2) { + if (globalCtx->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_2) { REG(45) = 500; } } @@ -775,7 +775,7 @@ s32 func_8008F2F8(GlobalContext* globalCtx) { TextTriggerEntry* triggerEntry; s32 var; - if (globalCtx->roomCtx.curRoom.unk_02 == 3) { // Room is hot + if (globalCtx->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3) { // Room is hot var = 0; } else if ((this->unk_840 > 80) && ((this->currentBoots == PLAYER_BOOTS_IRON) || (this->unk_840 >= 300))) { // Deep underwater diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index cd368aeac2..395f5434ba 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -1012,7 +1012,7 @@ void func_80093C80(GlobalContext* globalCtx) { func_80093D18(gfxCtx); - if (globalCtx->roomCtx.curRoom.unk_03 == 3) { + if (globalCtx->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_3) { OPEN_DISPS(gfxCtx, "../z_rcp.c", 1460); gDPSetColorDither(POLY_OPA_DISP++, G_CD_DISABLE); diff --git a/src/code/z_room.c b/src/code/z_room.c index 77f718c73d..e2f9292e77 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -53,7 +53,7 @@ void func_80095AB4(GlobalContext* globalCtx, Room* room, u32 flags) { gSPMatrix(POLY_XLU_DISP++, &gMtxClear, G_MTX_MODELVIEW | G_MTX_LOAD); } - polygon0 = &room->mesh->polygon0; + polygon0 = &room->meshHeader->polygon0; polygonDlist = SEGMENTED_TO_VIRTUAL(polygon0->start); for (i = 0; i < polygon0->num; i++) { if ((flags & 1) && (polygonDlist->opa != NULL)) { @@ -114,7 +114,7 @@ void func_80095D04(GlobalContext* globalCtx, Room* room, u32 flags) { gSPMatrix(POLY_XLU_DISP++, &gMtxClear, G_MTX_MODELVIEW | G_MTX_LOAD); } - polygon2 = &room->mesh->polygon2; + polygon2 = &room->meshHeader->polygon2; polygonDlist = SEGMENTED_TO_VIRTUAL(polygon2->start); spA4 = spB8; @@ -320,7 +320,7 @@ void func_80096680(GlobalContext* globalCtx, Room* room, u32 flags) { activeCam = GET_ACTIVE_CAM(globalCtx); isFixedCamera = (activeCam->setting == CAM_SET_PREREND_FIXED); - polygon1 = &room->mesh->polygon1; + polygon1 = &room->meshHeader->polygon1; polygonDlist = SEGMENTED_TO_VIRTUAL(polygon1->dlist); drawBg = (flags & 1) && isFixedCamera && polygon1->single.source && !(SREG(25) & 1); drawOpa = (flags & 1) && (polygonDlist->opa != NULL) && !(SREG(25) & 2); @@ -412,7 +412,7 @@ void func_80096B6C(GlobalContext* globalCtx, Room* room, u32 flags) { activeCam = GET_ACTIVE_CAM(globalCtx); isFixedCamera = (activeCam->setting == CAM_SET_PREREND_FIXED); - polygon1 = &room->mesh->polygon1; + polygon1 = &room->meshHeader->polygon1; polygonDlist = SEGMENTED_TO_VIRTUAL(polygon1->dlist); bgImage = func_80096A74(polygon1, globalCtx); drawBg = (flags & 1) && isFixedCamera && bgImage->source && !(SREG(25) & 1); @@ -459,7 +459,7 @@ void func_80096B6C(GlobalContext* globalCtx, Room* room, u32 flags) { // Room Draw Polygon Type 1 void func_80096F6C(GlobalContext* globalCtx, Room* room, u32 flags) { - PolygonType1* polygon1 = &room->mesh->polygon1; + PolygonType1* polygon1 = &room->meshHeader->polygon1; if (polygon1->format == 1) { func_80096680(globalCtx, room, flags); @@ -585,9 +585,9 @@ s32 func_800973FC(GlobalContext* globalCtx, RoomContext* roomCtx) { void Room_Draw(GlobalContext* globalCtx, Room* room, u32 flags) { if (room->segment != NULL) { gSegments[3] = VIRTUAL_TO_PHYSICAL(room->segment); - ASSERT(room->mesh->polygon.type < ARRAY_COUNTU(sRoomDrawHandlers), + ASSERT(room->meshHeader->base.type < ARRAY_COUNTU(sRoomDrawHandlers), "this->ground_shape->polygon.type < number(Room_Draw_Proc)", "../z_room.c", 1125); - sRoomDrawHandlers[room->mesh->polygon.type](globalCtx, room, flags); + sRoomDrawHandlers[room->meshHeader->base.type](globalCtx, room, flags); } } diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 67701c5bf3..b558b6f152 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -182,8 +182,7 @@ s32 Scene_ExecuteCommands(GlobalContext* globalCtx, SceneCmd* sceneCmd) { return 0; } -// Scene Command 0x00: Spawn List -void func_80098508(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandSpawnList(GlobalContext* globalCtx, SceneCmd* cmd) { ActorEntry* linkEntry = globalCtx->linkActorEntry = (ActorEntry*)SEGMENTED_TO_VIRTUAL(cmd->spawnList.segment) + globalCtx->setupEntranceList[globalCtx->curSpawn].spawn; s16 linkObjectId; @@ -196,19 +195,16 @@ void func_80098508(GlobalContext* globalCtx, SceneCmd* cmd) { Object_Spawn(&globalCtx->objectCtx, linkObjectId); } -// Scene Command 0x01: Actor List -void func_800985DC(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandActorList(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->numSetupActors = cmd->actorList.num; globalCtx->setupActorList = SEGMENTED_TO_VIRTUAL(cmd->actorList.segment); } -// Scene Command 0x02: Unused 02 -void func_80098630(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandUnused2(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->unk_11DFC = SEGMENTED_TO_VIRTUAL(cmd->unused02.segment); } -// Scene Command 0x03: Collision Header -void func_80098674(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandCollisionHeader(GlobalContext* globalCtx, SceneCmd* cmd) { CollisionHeader* colHeader = SEGMENTED_TO_VIRTUAL(cmd->colHeader.segment); colHeader->vtxList = SEGMENTED_TO_VIRTUAL(colHeader->vtxList); @@ -220,19 +216,16 @@ void func_80098674(GlobalContext* globalCtx, SceneCmd* cmd) { BgCheck_Allocate(&globalCtx->colCtx, globalCtx, colHeader); } -// Scene Command 0x04: Room List -void func_800987A4(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandRoomList(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->numRooms = cmd->roomList.num; globalCtx->roomList = SEGMENTED_TO_VIRTUAL(cmd->roomList.segment); } -// Scene Command 0x06: Entrance List -void func_800987F8(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandEntranceList(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->setupEntranceList = SEGMENTED_TO_VIRTUAL(cmd->entranceList.segment); } -// Scene Command 0x07: Special Files -void func_8009883C(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandSpecialFiles(GlobalContext* globalCtx, SceneCmd* cmd) { if (cmd->specialFiles.keepObjectId != OBJECT_INVALID) { globalCtx->objectCtx.subKeepIndex = Object_Spawn(&globalCtx->objectCtx, cmd->specialFiles.keepObjectId); gSegments[5] = VIRTUAL_TO_PHYSICAL(globalCtx->objectCtx.status[globalCtx->objectCtx.subKeepIndex].segment); @@ -243,21 +236,18 @@ void func_8009883C(GlobalContext* globalCtx, SceneCmd* cmd) { } } -// Scene Command 0x08: Room Behavior -void func_80098904(GlobalContext* globalCtx, SceneCmd* cmd) { - globalCtx->roomCtx.curRoom.unk_03 = cmd->roomBehavior.gpFlag1; - globalCtx->roomCtx.curRoom.unk_02 = cmd->roomBehavior.gpFlag2 & 0xFF; - globalCtx->roomCtx.curRoom.showInvisActors = (cmd->roomBehavior.gpFlag2 >> 8) & 1; +void Scene_CommandRoomBehavior(GlobalContext* globalCtx, SceneCmd* cmd) { + globalCtx->roomCtx.curRoom.behaviorType1 = cmd->roomBehavior.gpFlag1; + globalCtx->roomCtx.curRoom.behaviorType2 = cmd->roomBehavior.gpFlag2 & 0xFF; + globalCtx->roomCtx.curRoom.lensMode = (cmd->roomBehavior.gpFlag2 >> 8) & 1; globalCtx->msgCtx.disableWarpSongs = (cmd->roomBehavior.gpFlag2 >> 0xA) & 1; } -// Scene Command 0x0A: Mesh Header -void func_80098958(GlobalContext* globalCtx, SceneCmd* cmd) { - globalCtx->roomCtx.curRoom.mesh = SEGMENTED_TO_VIRTUAL(cmd->mesh.segment); +void Scene_CommandMeshHeader(GlobalContext* globalCtx, SceneCmd* cmd) { + globalCtx->roomCtx.curRoom.meshHeader = SEGMENTED_TO_VIRTUAL(cmd->mesh.segment); } -// Scene Command 0x0B: Object List -void func_8009899C(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandObjectList(GlobalContext* globalCtx, SceneCmd* cmd) { s32 i; s32 j; s32 k; @@ -294,8 +284,6 @@ void func_8009899C(GlobalContext* globalCtx, SceneCmd* cmd) { ASSERT(cmd->objectList.num <= OBJECT_EXCHANGE_BANK_MAX, "scene_info->object_bank.num <= OBJECT_EXCHANGE_BANK_MAX", "../z_scene.c", 705); - if (1) {} - while (k < cmd->objectList.num) { nextPtr = func_800982FC(&globalCtx->objectCtx, i, *objectEntry); if (i < OBJECT_EXCHANGE_BANK_MAX - 1) { @@ -309,8 +297,7 @@ void func_8009899C(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->objectCtx.num = i; } -// Scene Command 0x0C: Light List -void func_80098B74(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandLightList(GlobalContext* globalCtx, SceneCmd* cmd) { s32 i; LightInfo* lightInfo = SEGMENTED_TO_VIRTUAL(cmd->lightList.segment); @@ -320,13 +307,11 @@ void func_80098B74(GlobalContext* globalCtx, SceneCmd* cmd) { } } -// Scene Command 0x0D: Path List -void func_80098C24(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandPathList(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->setupPathList = SEGMENTED_TO_VIRTUAL(cmd->pathList.segment); } -// Scene Command 0x0E: Transition Actor List -void func_80098C68(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandTransitionActorList(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->transiActorCtx.numActors = cmd->transiActorList.num; globalCtx->transiActorCtx.list = SEGMENTED_TO_VIRTUAL(cmd->transiActorList.segment); } @@ -335,27 +320,23 @@ void TransitionActor_InitContext(GameState* state, TransitionActorContext* trans transiActorCtx->numActors = 0; } -// Scene Command 0x0F: Light Setting List -void func_80098CC8(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandLightSettingsList(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->envCtx.numLightSettings = cmd->lightSettingList.num; globalCtx->envCtx.lightSettingsList = SEGMENTED_TO_VIRTUAL(cmd->lightSettingList.segment); } -// Scene Command 0x11: Skybox Settings -void func_80098D1C(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandSkyboxSettings(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->skyboxId = cmd->skyboxSettings.skyboxId; globalCtx->envCtx.skyboxConfig = globalCtx->envCtx.changeSkyboxNextConfig = cmd->skyboxSettings.unk_05; globalCtx->envCtx.lightMode = cmd->skyboxSettings.unk_06; } -// Scene Command 0x12: Skybox Disables -void func_80098D5C(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandSkyboxDisables(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->envCtx.skyboxDisabled = cmd->skyboxDisables.unk_04; globalCtx->envCtx.sunMoonDisabled = cmd->skyboxDisables.unk_05; } -// Scene Command 0x10: Time Settings -void func_80098D80(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandTimeSettings(GlobalContext* globalCtx, SceneCmd* cmd) { if ((cmd->timeSettings.hour != 0xFF) && (cmd->timeSettings.min != 0xFF)) { gSaveContext.skyboxTime = gSaveContext.dayTime = ((cmd->timeSettings.hour + (cmd->timeSettings.min / 60.0f)) * 60.0f) / ((f32)(24 * 60) / 0x10000); @@ -391,8 +372,7 @@ void func_80098D80(GlobalContext* globalCtx, SceneCmd* cmd) { } } -// Scene Command 0x05: Wind Settings -void func_80099090(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandWindSettings(GlobalContext* globalCtx, SceneCmd* cmd) { s8 x = cmd->windSettings.x; s8 y = cmd->windSettings.y; s8 z = cmd->windSettings.z; @@ -404,17 +384,14 @@ void func_80099090(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->envCtx.windSpeed = cmd->windSettings.unk_07; } -// Scene Command 0x13: Exit List -void func_800990F0(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandExitList(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->setupExitList = SEGMENTED_TO_VIRTUAL(cmd->exitList.segment); } -// Scene Command 0x09: Undefined -void func_80099134(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandUndefined9(GlobalContext* globalCtx, SceneCmd* cmd) { } -// Scene Command 0x15: Sound Settings -void func_80099140(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandSoundSettings(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->sequenceCtx.seqId = cmd->soundSettings.seqId; globalCtx->sequenceCtx.natureAmbienceId = cmd->soundSettings.natureAmbienceId; @@ -423,13 +400,11 @@ void func_80099140(GlobalContext* globalCtx, SceneCmd* cmd) { } } -// Scene Command 0x16: Echo Setting -void func_8009918C(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandEchoSettings(GlobalContext* globalCtx, SceneCmd* cmd) { globalCtx->roomCtx.curRoom.echo = cmd->echoSettings.echo; } -// Scene Command 0x18: Alternate Headers -void func_800991A0(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandAlternateHeaderList(GlobalContext* globalCtx, SceneCmd* cmd) { s32 pad; SceneCmd* altHeader; @@ -465,14 +440,13 @@ void func_800991A0(GlobalContext* globalCtx, SceneCmd* cmd) { } } -// Scene Command 0x17: Cutscene Data -void func_8009934C(GlobalContext* globalCtx, SceneCmd* cmd) { +void Scene_CommandCutsceneData(GlobalContext* globalCtx, SceneCmd* cmd) { osSyncPrintf("\ngame_play->demo_play.data=[%x]", globalCtx->csCtx.segment); globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(cmd->cutsceneData.segment); } -// Scene Command 0x19: Misc. Settings (Camera & World Map Area) -void func_800993C0(GlobalContext* globalCtx, SceneCmd* cmd) { +// Camera & World Map Area +void Scene_CommandMiscSettings(GlobalContext* globalCtx, SceneCmd* cmd) { YREG(15) = cmd->miscSettings.cameraMovement; gSaveContext.worldMapArea = cmd->miscSettings.area; @@ -493,10 +467,32 @@ void func_800993C0(GlobalContext* globalCtx, SceneCmd* cmd) { } void (*gSceneCmdHandlers[SCENE_CMD_ID_MAX])(GlobalContext*, SceneCmd*) = { - func_80098508, func_800985DC, func_80098630, func_80098674, func_800987A4, func_80099090, func_800987F8, - func_8009883C, func_80098904, func_80099134, func_80098958, func_8009899C, func_80098B74, func_80098C24, - func_80098C68, func_80098CC8, func_80098D80, func_80098D1C, func_80098D5C, func_800990F0, NULL, - func_80099140, func_8009918C, func_8009934C, func_800991A0, func_800993C0, + Scene_CommandSpawnList, // SCENE_CMD_ID_SPAWN_LIST + Scene_CommandActorList, // SCENE_CMD_ID_ACTOR_LIST + Scene_CommandUnused2, // SCENE_CMD_ID_UNUSED_2 + Scene_CommandCollisionHeader, // SCENE_CMD_ID_COLLISION_HEADER + Scene_CommandRoomList, // SCENE_CMD_ID_ROOM_LIST + Scene_CommandWindSettings, // SCENE_CMD_ID_WIND_SETTINGS + Scene_CommandEntranceList, // SCENE_CMD_ID_ENTRANCE_LIST + Scene_CommandSpecialFiles, // SCENE_CMD_ID_SPECIAL_FILES + Scene_CommandRoomBehavior, // SCENE_CMD_ID_ROOM_BEHAVIOR + Scene_CommandUndefined9, // SCENE_CMD_ID_UNDEFINED_9 + Scene_CommandMeshHeader, // SCENE_CMD_ID_MESH_HEADER + Scene_CommandObjectList, // SCENE_CMD_ID_OBJECT_LIST + Scene_CommandLightList, // SCENE_CMD_ID_LIGHT_LIST + Scene_CommandPathList, // SCENE_CMD_ID_PATH_LIST + Scene_CommandTransitionActorList, // SCENE_CMD_ID_TRANSITION_ACTOR_LIST + Scene_CommandLightSettingsList, // SCENE_CMD_ID_LIGHT_SETTINGS_LIST + Scene_CommandTimeSettings, // SCENE_CMD_ID_TIME_SETTINGS + Scene_CommandSkyboxSettings, // SCENE_CMD_ID_SKYBOX_SETTINGS + Scene_CommandSkyboxDisables, // SCENE_CMD_ID_SKYBOX_DISABLES + Scene_CommandExitList, // SCENE_CMD_ID_EXIT_LIST + NULL, // SCENE_CMD_ID_END + Scene_CommandSoundSettings, // SCENE_CMD_ID_SOUND_SETTINGS + Scene_CommandEchoSettings, // SCENE_CMD_ID_ECHO_SETTINGS + Scene_CommandCutsceneData, // SCENE_CMD_ID_CUTSCENE_DATA + Scene_CommandAlternateHeaderList, // SCENE_CMD_ID_ALTERNATE_HEADER_LIST + Scene_CommandMiscSettings, // SCENE_CMD_ID_MISC_SETTINGS }; RomFile sNaviMsgFiles[] = { diff --git a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c index bb3b62429b..e097b5b59e 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c +++ b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c @@ -92,7 +92,7 @@ void func_8087DB24(BgHakaMegane* this, GlobalContext* globalCtx) { this->dyna.actor.objBankIndex = this->objBankIndex; this->dyna.actor.draw = BgHakaMegane_Draw; Actor_SetObjectDependency(globalCtx, &this->dyna.actor); - if (globalCtx->roomCtx.curRoom.showInvisActors) { + if (globalCtx->roomCtx.curRoom.lensMode != LENS_MODE_HIDE_ACTORS) { this->actionFunc = func_8087DBF0; collision = sCollisionHeaders[this->dyna.actor.params]; if (collision != NULL) { diff --git a/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c b/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c index 3d102885a0..30a624c692 100644 --- a/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c +++ b/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c @@ -138,7 +138,7 @@ void MagicDark_DimLighting(GlobalContext* globalCtx, f32 intensity) { f32 colorScale; f32 fogScale; - if (globalCtx->roomCtx.curRoom.unk_03 != 5) { + if (globalCtx->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_5) { intensity = CLAMP_MIN(intensity, 0.0f); intensity = CLAMP_MAX(intensity, 1.0f); fogScale = intensity - 0.2f; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index c70fae7e00..2e8ce570f1 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -5228,8 +5228,8 @@ void func_8083BCD0(Player* this, GlobalContext* globalCtx, s32 arg2) { s32 func_8083BDBC(Player* this, GlobalContext* globalCtx) { s32 sp2C; - if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A) && (globalCtx->roomCtx.curRoom.unk_03 != 2) && - (D_808535E4 != 7) && + if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A) && + (globalCtx->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && (D_808535E4 != 7) && (SurfaceType_GetSlope(&globalCtx->colCtx, this->actor.floorPoly, this->actor.floorBgId) != 1)) { sp2C = this->unk_84B[this->unk_846]; @@ -5417,8 +5417,8 @@ s32 func_8083C544(Player* this, GlobalContext* globalCtx) { } s32 func_8083C61C(GlobalContext* globalCtx, Player* this) { - if ((globalCtx->roomCtx.curRoom.unk_03 != 2) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && - (AMMO(ITEM_NUT) != 0)) { + if ((globalCtx->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (AMMO(ITEM_NUT) != 0)) { func_80835C58(globalCtx, this, func_8084E604, 0); func_80832264(globalCtx, this, &gPlayerAnim_003048); this->unk_6AD = 0; @@ -6943,7 +6943,7 @@ void func_808409CC(GlobalContext* globalCtx, Player* this) { if (this->stateFlags1 & PLAYER_STATE1_11) { anim = func_80833338(this); } else { - sp38 = globalCtx->roomCtx.curRoom.unk_02; + sp38 = globalCtx->roomCtx.curRoom.behaviorType2; if (heathIsCritical) { if (this->unk_6AC >= 0) { sp38 = 7; @@ -8102,7 +8102,7 @@ static struct_80832924 D_808545F0[] = { void func_80843CEC(Player* this, GlobalContext* globalCtx) { if (this->currentTunic != PLAYER_TUNIC_GORON) { - if ((globalCtx->roomCtx.curRoom.unk_02 == 3) || (D_808535E4 == 9) || + if ((globalCtx->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3) || (D_808535E4 == 9) || ((func_80838144(D_808535E4) >= 0) && !SurfaceType_IsWallDamage(&globalCtx->colCtx, this->actor.floorPoly, this->actor.floorBgId))) { func_8083821C(this); @@ -9553,11 +9553,12 @@ void func_808473D4(GlobalContext* globalCtx, Player* this) { !Player_IsChildWithHylianShield(this))) { if ((!(this->stateFlags1 & PLAYER_STATE1_14) && (sp20 <= 0) && (func_8008E9C4(this) || - ((D_808535E4 != 7) && - (func_80833B2C(this) || ((globalCtx->roomCtx.curRoom.unk_03 != 2) && - !(this->stateFlags1 & PLAYER_STATE1_22) && (sp20 == 0))))))) { + ((D_808535E4 != 7) && (func_80833B2C(this) || + ((globalCtx->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && + !(this->stateFlags1 & PLAYER_STATE1_22) && (sp20 == 0))))))) { doAction = DO_ACTION_ATTACK; - } else if ((globalCtx->roomCtx.curRoom.unk_03 != 2) && func_80833BCC(this) && (sp20 > 0)) { + } else if ((globalCtx->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && + func_80833BCC(this) && (sp20 > 0)) { doAction = DO_ACTION_JUMP; } else if ((this->heldItemActionParam >= PLAYER_AP_SWORD_MASTER) || ((this->stateFlags2 & PLAYER_STATE2_20) &&