diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 49bfecba6e..7b347dcf9b 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -6014,6 +6014,9 @@ static void NewSpriteGroup(ByteReader *buf) /* Continue reading var adjusts while bit 5 is set. */ } while (HasBit(varadjust, 5)); + /* shrink_to_fit will be called later */ + group->adjusts.reserve(current_adjusts.size()); + for (const DeterministicSpriteGroupAdjust &adjust : current_adjusts) { group->adjusts.push_back(adjust); OptimiseVarAction2Adjust(va2_opt_state, info, group, group->adjusts.back()); diff --git a/src/newgrf_optimiser.cpp b/src/newgrf_optimiser.cpp index d03177cbc3..e9cfb4c525 100644 --- a/src/newgrf_optimiser.cpp +++ b/src/newgrf_optimiser.cpp @@ -2745,6 +2745,8 @@ void OptimiseVarAction2DeterministicSpriteGroup(VarAction2OptimiseState &state, OptimiseVarAction2DeterministicSpriteGroupExpensiveVars(group, info.scope_feature); } } + + if (!dse_candidate) group->adjusts.shrink_to_fit(); } static std::bitset<256> HandleVarAction2DeadStoreElimination(DeterministicSpriteGroup *group, VarAction2GroupVariableTracking *var_tracking, bool no_changes) @@ -3141,6 +3143,8 @@ void HandleVarAction2OptimisationPasses() if (group->dsg_flags & DSGF_CHECK_INSERT_JUMP) { OptimiseVarAction2DeterministicSpriteResolveJumps(group); } + + group->adjusts.shrink_to_fit(); } }