diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index 9bdc6a1abb..18765b1949 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -18,7 +18,7 @@ SpriteGroupPool _spritegroup_pool("SpriteGroup"); INSTANTIATE_POOL_METHODS(SpriteGroup) -TemporaryStorageArray _temp_store; +/* static */ TemporaryStorageArray ResolverObject::temp_store; /** @@ -39,11 +39,9 @@ TemporaryStorageArray _temp_store; auto profiler = std::ranges::find(_newgrf_profilers, grf, &NewGRFProfiler::grffile); if (profiler == _newgrf_profilers.end() || !profiler->active) { - if (top_level) _temp_store.ClearChanges(); return group->Resolve(object); } else if (top_level) { profiler->BeginResolve(object); - _temp_store.ClearChanges(); auto result = group->Resolve(object); profiler->EndResolve(result); return result; diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h index a327f098be..83f4fa737c 100644 --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -293,6 +293,10 @@ struct ScopeResolver { * to get the results of callbacks, rerandomisations or normal sprite lookups. */ struct ResolverObject { +private: + static TemporaryStorageArray temp_store; + +public: /** * Resolver constructor. * @param grffile NewGRF file associated with the object (or \c nullptr if none). @@ -323,8 +327,7 @@ struct ResolverObject { */ inline int32_t GetRegister(uint i) const { - extern TemporaryStorageArray _temp_store; - return _temp_store.GetValue(i); + return temp_store.GetValue(i); } /** @@ -335,8 +338,7 @@ struct ResolverObject { */ inline void SetRegister(uint i, int32_t value) { - extern TemporaryStorageArray _temp_store; - _temp_store.StoreValue(i, value); + temp_store.StoreValue(i, value); } CallbackID callback{}; ///< Callback being resolved. @@ -438,6 +440,7 @@ public: */ void ResetState() { + temp_store.ClearChanges(); this->last_value = 0; this->waiting_random_triggers = 0; this->used_random_triggers = 0;