From 9302677ad202bbc66e44855c11a38a4a48cf940d Mon Sep 17 00:00:00 2001 From: morfidon <57798071+morfidon@users.noreply.github.com> Date: Mon, 16 Mar 2026 08:59:34 +0100 Subject: [PATCH] Fix light radius runtime desync Add runtime desync detection to CalcPlrLightRadius function. Now checks if player's vision and light system states are out of sync with the expected radius and updates them accordingly. Prevents visual inconsistencies when player light radius changes during gameplay. Improve variable names for readability Change visionOutOfSync to visionRadiusOutOfSync and lightOutOfSync to lightRadiusOutOfSync for better code clarity and self-documentation. --- Source/items.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/items.cpp b/Source/items.cpp index 2f6ce462c..536379777 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -2540,7 +2540,13 @@ void CalcPlrLightRadius(Player &player, int lrad) { lrad = std::clamp(lrad, 2, 15); - if (player._pLightRad != lrad) { + const bool playerOnActiveLevel = player.isOnActiveLevel(); + const bool visionRadiusOutOfSync = playerOnActiveLevel && VisionList[player.getId()].radius != lrad; + const bool lightRadiusOutOfSync = playerOnActiveLevel + && player.lightId != NO_LIGHT + && Lights[player.lightId].radius != lrad; + + if (player._pLightRad != lrad || visionRadiusOutOfSync || lightRadiusOutOfSync) { ChangeLightRadius(player.lightId, lrad); ChangeVisionRadius(player.getId(), lrad); player._pLightRad = lrad;