From bcb917d8c2475379b8188c7d4f6f163513a34475 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 24 Nov 2022 02:04:52 +0000 Subject: [PATCH] VarAction2: Avoid CB quick exit dropping CBID_RANDOM_TRIGGER callbacks --- src/newgrf_optimiser.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/newgrf_optimiser.cpp b/src/newgrf_optimiser.cpp index 9424640b02..d4b0194219 100644 --- a/src/newgrf_optimiser.cpp +++ b/src/newgrf_optimiser.cpp @@ -2545,9 +2545,11 @@ void OptimiseVarAction2DeterministicSpriteGroup(VarAction2OptimiseState &state, if (!default_group_state.have_cb_handler && is_cb_switch) { bool found_zero_value = false; bool found_non_zero_value = false; + bool found_random_cb_value = false; for (const auto &range : group->ranges) { if (range.low == 0) found_zero_value = true; if (range.high > 0) found_non_zero_value = true; + if (range.low <= 1 && range.high >= 1) found_random_cb_value = true; } if (!found_non_zero_value) { /* Group looks at var C but has no branches for non-zero cases, so don't consider it a callback handler. @@ -2555,8 +2557,8 @@ void OptimiseVarAction2DeterministicSpriteGroup(VarAction2OptimiseState &state, */ possible_callback_handler = false; } - if (!found_zero_value) { - group->ranges.insert(group->ranges.begin(), { group->default_group, 0, 0 }); + if (!found_zero_value && !found_random_cb_value) { + group->ranges.insert(group->ranges.begin(), { group->default_group, 0, 1 }); extern const CallbackResultSpriteGroup *NewCallbackResultSpriteGroupNoTransform(uint16 result); group->default_group = NewCallbackResultSpriteGroupNoTransform(CALLBACK_FAILED); }