diff --git a/src/newgrf_internal.h b/src/newgrf_internal.h index d9322bc9e7..1dca36dad3 100644 --- a/src/newgrf_internal.h +++ b/src/newgrf_internal.h @@ -29,6 +29,7 @@ struct VarAction2GroupVariableTracking { std::bitset<256> in; std::bitset<256> out; std::bitset<256> proc_call_out; + std::bitset<256> proc_call_in; }; struct VarAction2ProcedureAnnotation { diff --git a/src/newgrf_optimiser.cpp b/src/newgrf_optimiser.cpp index 4d8d01ad24..23a5b325f9 100644 --- a/src/newgrf_optimiser.cpp +++ b/src/newgrf_optimiser.cpp @@ -1689,9 +1689,10 @@ struct CheckDeterministicSpriteGroupOutputVarBitsProcedureHandler { std::bitset<256> new_total = var_tracking->out | new_proc_call_out; var_tracking->proc_call_out = new_proc_call_out; if (old_total != new_total) { - CheckDeterministicSpriteGroupOutputVarBits(sub, new_total, input_bits, false); + CheckDeterministicSpriteGroupOutputVarBits(sub, new_total, &(var_tracking->proc_call_in), false); } } + if (input_bits != nullptr) (*input_bits) |= var_tracking->proc_call_in; if (top_level) this->bits |= var_tracking->in; return false; } else { @@ -1737,7 +1738,7 @@ static bool CheckDeterministicSpriteGroupOutputVarBits(const DeterministicSprite proc_handler.ProcessGroup(adjust.subroutine, nullptr, true); } } - if (store_input_bits != nullptr) *store_input_bits |= bits; + if (store_input_bits != nullptr) *store_input_bits = bits; return dse; }