diff --git a/src/newgrf_optimiser.cpp b/src/newgrf_optimiser.cpp index eec236eb3a..16f5ca116c 100644 --- a/src/newgrf_optimiser.cpp +++ b/src/newgrf_optimiser.cpp @@ -2233,6 +2233,15 @@ void OptimiseVarAction2DeterministicSpriteGroup(VarAction2OptimiseState &state, group->error_group = target; group->ranges.clear(); } + if (!HasGrfOptimiserFlag(NGOF_NO_OPT_VARACT2_GROUP_PRUNE) && (state.inference & VA2AIF_ONE_OR_ZERO) && !group->calculated_result && group->ranges.size() == 1) { + /* See if sprite group uses ranges as a cast to bool, when the result is already bool */ + const DeterministicSpriteGroupRange &r0 = group->ranges[0]; + if (r0.low == 0 && r0.high == 0 && r0.group != nullptr && r0.group->type == SGT_CALLBACK && static_cast(r0.group)->result == 0 && + group->default_group != nullptr && group->default_group->type == SGT_CALLBACK && static_cast(group->default_group)->result == 1) { + group->calculated_result = true; + group->ranges.clear(); + } + } std::bitset<256> bits; std::bitset<256> pending_bits;