From 67e8e373a7ad3ac1c9c4d40de1054c91ecef21ad Mon Sep 17 00:00:00 2001 From: Megamouse Date: Thu, 19 Dec 2024 23:50:11 +0100 Subject: [PATCH] cellGem: set sphere RGB when a hue is set and vice versa --- rpcs3/Emu/Cell/Modules/cellGem.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/Cell/Modules/cellGem.cpp b/rpcs3/Emu/Cell/Modules/cellGem.cpp index b7982a4677..06095c67a0 100644 --- a/rpcs3/Emu/Cell/Modules/cellGem.cpp +++ b/rpcs3/Emu/Cell/Modules/cellGem.cpp @@ -1819,6 +1819,11 @@ error_code cellGemForceRGB(u32 gem_num, f32 r, f32 g, f32 b) gem.controllers[gem_num].sphere_rgb = gem_config::gem_color(r, g, b); gem.controllers[gem_num].enabled_tracking = false; + const auto [h, s, v] = ps_move_tracker::rgb_to_hsv(r, g, b); + gem.controllers[gem_num].hue = h; + + // TODO: set hue of tracker + return CELL_OK; } @@ -2804,7 +2809,7 @@ error_code cellGemSetYaw(u32 gem_num, vm::ptr z_direction) error_code cellGemTrackHues(vm::cptr req_hues, vm::ptr res_hues) { - cellGem.todo("cellGemTrackHues(req_hues=*0x%x, res_hues=*0x%x)", req_hues, res_hues); + cellGem.todo("cellGemTrackHues(req_hues=%s, res_hues=*0x%x)", req_hues ? fmt::format("*0x%x [%d, %d, %d, %d]", req_hues, req_hues[0], req_hues[1], req_hues[2], req_hues[3]) : "*0x0", res_hues); auto& gem = g_fxo->get(); @@ -2847,6 +2852,9 @@ error_code cellGemTrackHues(vm::cptr req_hues, vm::ptr res_hues) break; } + const auto [r, g, b] = ps_move_tracker::hsv_to_rgb(gem.controllers[i].hue, 1.0f, 1.0f); + gem.controllers[i].sphere_rgb = gem_config::gem_color(r / 255.0f, g / 255.0f, b / 255.0f); + if (res_hues) { res_hues[i] = gem.controllers[i].hue; @@ -2875,6 +2883,9 @@ error_code cellGemTrackHues(vm::cptr req_hues, vm::ptr res_hues) gem.controllers[i].hue_set = true; gem.controllers[i].hue = req_hues[i]; + const auto [r, g, b] = ps_move_tracker::hsv_to_rgb(gem.controllers[i].hue, 1.0f, 1.0f); + gem.controllers[i].sphere_rgb = gem_config::gem_color(r / 255.0f, g / 255.0f, b / 255.0f); + // TODO: set hue of tracker if (res_hues)