diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 6e98cbf50d..58298c9c83 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -6229,7 +6229,9 @@ static void OptimiseVarAction2Adjust(VarAction2OptimiseState &state, const GrfSp } break; case DSGA_OP_SHR: - if ((prev_inference & VA2AIF_PREV_MASK_ADJUST) && adjust.variable == 0x1A && adjust.shift_num == 0 && group->adjusts.size() >= 2) { + case DSGA_OP_SAR: + if ((adjust.operation == DSGA_OP_SAR || (prev_inference & VA2AIF_SIGNED_NON_NEGATIVE)) && + ((prev_inference & VA2AIF_PREV_MASK_ADJUST) && adjust.variable == 0x1A && adjust.shift_num == 0 && group->adjusts.size() >= 2)) { /* Propagate shift right into immediately prior variable read */ DeterministicSpriteGroupAdjust &prev = group->adjusts[group->adjusts.size() - 2]; if (prev.shift_num + adjust.and_mask < 32) {