From ba7157d60c25c0785e4a8d714f23c5419b74bfe6 Mon Sep 17 00:00:00 2001 From: Ryan McNamara Date: Thu, 1 Oct 2026 16:01:28 -0400 Subject: [PATCH 1/2] Match menu fixed camera initialization --- src/sora/cm/cm_controller_menu_fixed.cpp | 28 ++++++++++++++---------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/sora/cm/cm_controller_menu_fixed.cpp b/src/sora/cm/cm_controller_menu_fixed.cpp index e2d3f9c93..851002646 100644 --- a/src/sora/cm/cm_controller_menu_fixed.cpp +++ b/src/sora/cm/cm_controller_menu_fixed.cpp @@ -34,19 +34,23 @@ void cmMenuFixedController::storeDefault() { unk8 = true; } -// NONMATCHING void cmMenuFixedController::init() { - m_cameraManager->m_cameras[0].unkCC = unkC; - m_cameraManager->m_cameras[0].unkFA.m_flag7 = true; - m_cameraManager->m_cameras[0].m_targetPos.m_x = unk10.m_x; - m_cameraManager->m_cameras[0].m_targetPos.m_y = unk10.m_y; - m_cameraManager->m_cameras[0].m_targetPos.m_z = unk10.m_z; - m_cameraManager->m_cameras[0].unkFA.m_flag1 = true; - m_cameraManager->m_cameras[0].unkD0 = unk1C; - m_cameraManager->m_cameras[0].m_rot.m_x = 0.0f; - m_cameraManager->m_cameras[0].m_rot.m_y = 0.0f; - m_cameraManager->m_cameras[0].m_rot.m_z = 0.0f; - m_cameraManager->m_cameras[0].unkFA.m_flag2 = true; + gfCamera* camera = &m_cameraManager->m_cameras[0]; + camera->unkCC = unkC; + u16 flags = camera->unkFA.m_mask; + u16 flagsWith7 = flags | 0x80; + u16 flagsWith7And1 = flags | 0x82; + camera->unkFA.m_mask = flagsWith7; + camera->m_targetPos.m_x = unk10.m_x; + camera->m_targetPos.m_y = unk10.m_y; + camera->m_targetPos.m_z = unk10.m_z; + camera->unkFA.m_mask = flagsWith7And1; + camera->unkD0 = unk1C; + Vec2f rot(0.0f, 0.0f); + camera->m_rot.m_x = rot.m_x; + camera->m_rot.m_y = rot.m_y; + camera->m_rot.m_z = 0.0f; + camera->unkFA.m_mask |= 0x40; } // TODO: cmMenuFixedController::update From b70b65e6df556bc42f2e24a8510d9af7b234a2f4 Mon Sep 17 00:00:00 2001 From: Ryan McNamara Date: Thu, 1 Oct 2026 16:05:44 -0400 Subject: [PATCH 2/2] Match fixed menu camera update --- config/RSBE01_02/symbols.txt | 2 +- src/sora/cm/cm_controller_menu_fixed.cpp | 33 +++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/config/RSBE01_02/symbols.txt b/config/RSBE01_02/symbols.txt index fedea1b01..062007555 100644 --- a/config/RSBE01_02/symbols.txt +++ b/config/RSBE01_02/symbols.txt @@ -4281,7 +4281,7 @@ fn_800A6668 = .text:0x800A6668; // type:function size:0x258 __ct__21cmMenuFixedControllerFv = .text:0x800A68C0; // type:function size:0x44 storeDefault__21cmMenuFixedControllerFv = .text:0x800A6904; // type:function size:0x3C init__21cmMenuFixedControllerFv = .text:0x800A6940; // type:function size:0x6C -fn_800A69AC = .text:0x800A69AC; // type:function size:0xCC +update__21cmMenuFixedControllerFf = .text:0x800A69AC; // type:function size:0xCC fn_800A6A78 = .text:0x800A6A78; // type:function size:0x1C fn_800A6A94 = .text:0x800A6A94; // type:function size:0x40 fn_800A6AD4 = .text:0x800A6AD4; // type:function size:0xA4 diff --git a/src/sora/cm/cm_controller_menu_fixed.cpp b/src/sora/cm/cm_controller_menu_fixed.cpp index 851002646..b15e8a518 100644 --- a/src/sora/cm/cm_controller_menu_fixed.cpp +++ b/src/sora/cm/cm_controller_menu_fixed.cpp @@ -53,4 +53,35 @@ void cmMenuFixedController::init() { camera->unkFA.m_mask |= 0x40; } -// TODO: cmMenuFixedController::update +extern "C" void fn_80018778(gfCamera*); + +void cmMenuFixedController::update(float) { + gfCamera* camera; + gfCamera* cachedCamera = &m_cameraManager->m_cameras[0]; + if (!unk8) { + unkC = cachedCamera->unkCC; + unk10.m_x = cachedCamera->m_targetPos.m_x; + unk10.m_y = cachedCamera->m_targetPos.m_y; + unk10.m_z = cachedCamera->m_targetPos.m_z; + unk1C = cachedCamera->unkD0; + unk8 = true; + } + camera = &m_cameraManager->m_cameras[0]; + camera->unkCC = unkC; + u16 flags = camera->unkFA.m_mask; + u16 flagsWith7 = flags | 0x80; + u16 flagsWith7And1 = flags | 0x82; + camera->unkFA.m_mask = flagsWith7; + camera->m_targetPos.m_x = unk10.m_x; + camera->m_targetPos.m_y = unk10.m_y; + camera->m_targetPos.m_z = unk10.m_z; + camera->unkFA.m_mask = flagsWith7And1; + camera->unkD0 = unk1C; + Vec2f rot(0.0f, 0.0f); + camera->m_rot.m_x = rot.m_x; + camera->m_rot.m_y = rot.m_y; + camera->m_rot.m_z = 0.0f; + camera->unkFA.m_mask |= 0x40; + cachedCamera->m_transformFlag.m_mask = 0xE1; + fn_80018778(cachedCamera); +}