summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2009-01-11 23:49:51 +0000
committersmatz <smatz@openttd.org>2009-01-11 23:49:51 +0000
commitf84b1e69706b02eb30363123bf9635e6b6328dad (patch)
tree25ac808a48203d76ca617640789d18ec9d370db0
parentb181bb9d25b09b0d0a8dd592b8ed0b66bf1541a8 (diff)
downloadopenttd-f84b1e69706b02eb30363123bf9635e6b6328dad.tar.xz
(svn r14998) -Codechange: warn once about misuse of each sprite, not once about misuse of any sprite
-rw-r--r--src/spritecache.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/spritecache.cpp b/src/spritecache.cpp
index 2e70e2e44..3e270ea3b 100644
--- a/src/spritecache.cpp
+++ b/src/spritecache.cpp
@@ -31,6 +31,7 @@ struct SpriteCache {
uint16 file_slot;
int16 lru;
SpriteType type; ///< In some cases a single sprite is misused by two NewGRFs. Once as real sprite and once as recolour sprite. If the recolour sprite gets into the cache it might be drawn as real sprite which causes enormous trouble.
+ bool warned; ///< True iff the user has been warned about incorrect use of this sprite
};
@@ -290,6 +291,7 @@ bool LoadNextSprite(int load_index, byte file_slot, uint file_sprite_id)
sc->lru = 0;
sc->id = file_sprite_id;
sc->type = type;
+ sc->warned = false;
return true;
}
@@ -305,6 +307,7 @@ void DupSprite(SpriteID old_spr, SpriteID new_spr)
scnew->ptr = NULL;
scnew->id = scold->id;
scnew->type = scold->type;
+ scnew->warned = false;
}
@@ -480,7 +483,7 @@ void *AllocSprite(size_t mem_req)
* @param available available sprite type
* @return fallback sprite
* @note this function will do usererror() in the case the fallback sprite isn't available */
-static const void *HandleInvalidSpriteRequest(SpriteID sprite, SpriteType requested, SpriteType available)
+static const void *HandleInvalidSpriteRequest(SpriteID sprite, SpriteType requested, SpriteCache *sc)
{
static const char *sprite_types[] = {
"normal", // ST_NORMAL
@@ -489,11 +492,12 @@ static const void *HandleInvalidSpriteRequest(SpriteID sprite, SpriteType reques
"recolour", // ST_RECOLOUR
};
+ SpriteType available = sc->type;
if (requested == ST_FONT && available == ST_NORMAL) return GetRawSprite(sprite, ST_NORMAL);
- static byte warning_level = 0;
+ byte warning_level = sc->warned ? 6 : 0;
+ sc->warned = true;
DEBUG(sprite, warning_level, "Tried to load %s sprite #%d as a %s sprite. Probable cause: NewGRF interference", sprite_types[available], sprite, sprite_types[requested]);
- warning_level = 6;
switch (requested) {
case ST_NORMAL:
@@ -526,7 +530,7 @@ const void *GetRawSprite(SpriteID sprite, SpriteType type)
SpriteCache *sc = GetSpriteCache(sprite);
- if (sc->type != type) return HandleInvalidSpriteRequest(sprite, type, sc->type);
+ if (sc->type != type) return HandleInvalidSpriteRequest(sprite, type, sc);
/* Update LRU */
sc->lru = ++_sprite_lru_counter;