summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2013-12-23 18:08:36 +0000
committerfrosch <frosch@openttd.org>2013-12-23 18:08:36 +0000
commita9e8d7a361470b7c97a858f6663144f02a929cfd (patch)
tree1a68f30dd504e10d100d4835ae2365751d8d23a1 /src
parent3eea1befa73099c6af00ea56c55087592b99039a (diff)
downloadopenttd-a9e8d7a361470b7c97a858f6663144f02a929cfd.tar.xz
(svn r26173) -Change: [NewGRF] Reset the temporary storage registers for every sprite resolving.
Diffstat (limited to 'src')
-rw-r--r--src/newgrf_spritegroup.cpp3
-rw-r--r--src/newgrf_storage.h12
2 files changed, 5 insertions, 10 deletions
diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp
index 451cd59be..b3a0a829f 100644
--- a/src/newgrf_spritegroup.cpp
+++ b/src/newgrf_spritegroup.cpp
@@ -33,6 +33,9 @@ TemporaryStorageArray<int32, 0x110> _temp_store;
/* static */ const SpriteGroup *SpriteGroup::Resolve(const SpriteGroup *group, ResolverObject &object, bool top_level)
{
if (group == NULL) return NULL;
+ if (top_level) {
+ _temp_store.ClearChanges();
+ }
return group->Resolve(object);
}
diff --git a/src/newgrf_storage.h b/src/newgrf_storage.h
index a353e2186..9e71c0a2b 100644
--- a/src/newgrf_storage.h
+++ b/src/newgrf_storage.h
@@ -29,13 +29,6 @@ struct BaseStorageArray {
* @param keep_changes do we save or revert the changes since the last #ClearChanges?
*/
virtual void ClearChanges(bool keep_changes) = 0;
-
- /**
- * Stores some value at a given position.
- * @param pos the position to write at
- * @param value the value to write
- */
- virtual void StoreValue(uint pos, int32 value) = 0;
};
/**
@@ -133,7 +126,7 @@ struct PersistentStorageArray : BaseStorageArray {
* @tparam SIZE the size of the array.
*/
template <typename TYPE, uint SIZE>
-struct TemporaryStorageArray : BaseStorageArray {
+struct TemporaryStorageArray {
TYPE storage[SIZE]; ///< Memory to for the storage array
uint16 init[SIZE]; ///< Storage has been assigned, if this equals 'init_key'.
uint16 init_key; ///< Magic key to 'init'.
@@ -158,7 +151,6 @@ struct TemporaryStorageArray : BaseStorageArray {
this->storage[pos] = value;
this->init[pos] = this->init_key;
- AddChangedStorage(this);
}
/**
@@ -179,7 +171,7 @@ struct TemporaryStorageArray : BaseStorageArray {
return this->storage[pos];
}
- void ClearChanges(bool keep_changes)
+ void ClearChanges()
{
/* Increment init_key to invalidate all storage */
this->init_key++;