From 144035bf5cb747fd5ffd2c41ae713f66ca79fe62 Mon Sep 17 00:00:00 2001 From: truelight Date: Thu, 14 Jun 2007 14:31:48 +0000 Subject: (svn r10157) -Fix: use as indentified for PNGs, the place of the image as it was in the grf, not the internal SpriteID --- src/gfxinit.cpp | 11 ++++++++--- src/newgrf.cpp | 8 ++++---- src/spritecache.cpp | 4 ++-- src/spritecache.h | 2 +- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 2fe58ca0b..6212badfd 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -53,13 +53,15 @@ static const SpriteID * const _slopes_spriteindexes[] = { static uint LoadGrfFile(const char* filename, uint load_index, int file_index) { uint load_index_org = load_index; + uint sprite_id = 0; FioOpenFile(file_index, filename); DEBUG(sprite, 2, "Reading grf-file '%s'", filename); - while (LoadNextSprite(load_index, file_index)) { + while (LoadNextSprite(load_index, file_index, sprite_id)) { load_index++; + sprite_id++; if (load_index >= MAX_SPRITES) { error("Too many sprites. Recompile with higher MAX_SPRITES value or remove some custom GRF files."); } @@ -73,6 +75,7 @@ static uint LoadGrfFile(const char* filename, uint load_index, int file_index) static void LoadGrfIndexed(const char* filename, const SpriteID* index_tbl, int file_index) { uint start; + uint sprite_id = 0; FioOpenFile(file_index, filename); @@ -83,14 +86,16 @@ static void LoadGrfIndexed(const char* filename, const SpriteID* index_tbl, int if (start == SKIP) { // skip sprites (amount in second var) SkipSprites(end); + sprite_id += end; } else { // load sprites and use indexes from start to end do { #ifdef NDEBUG - LoadNextSprite(start, file_index); + LoadNextSprite(start, file_index, sprite_id); #else - bool b = LoadNextSprite(start, file_index); + bool b = LoadNextSprite(start, file_index, sprite_id); assert(b); #endif + sprite_id++; } while (++start <= end); } } diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 28ba4c4c0..6d9beca75 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2045,7 +2045,7 @@ static void NewSpriteSet(byte *buf, int len) ); for (uint16 i = 0; i < num_sets * num_ents; i++) { - LoadNextSprite(_cur_spriteid++, _file_index); + LoadNextSprite(_cur_spriteid++, _file_index, _nfo_line); _nfo_line++; } } @@ -2960,7 +2960,7 @@ static void GraphicsNew(byte *buf, int len) } for (; num > 0; num--) { - LoadNextSprite(replace == 0 ? _cur_spriteid++ : replace++, _file_index); + LoadNextSprite(replace == 0 ? _cur_spriteid++ : replace++, _file_index, _nfo_line); _nfo_line++; } } @@ -3358,7 +3358,7 @@ static void SpriteReplace(byte *buf, int len) ); for (uint j = 0; j < num_sprites; j++) { - LoadNextSprite(first_sprite + j, _file_index); // XXX + LoadNextSprite(first_sprite + j, _file_index, _nfo_line); // XXX _nfo_line++; } } @@ -4081,7 +4081,7 @@ static void LoadFontGlyph(byte *buf, int len) for (uint c = 0; c < num_char; c++) { SetUnicodeGlyph(size, base_char + c, _cur_spriteid); - LoadNextSprite(_cur_spriteid++, _file_index); + LoadNextSprite(_cur_spriteid++, _file_index, _nfo_line); _nfo_line++; } } diff --git a/src/spritecache.cpp b/src/spritecache.cpp index e9c4e15dd..135c7d834 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -241,7 +241,7 @@ static void* ReadSprite(SpriteCache *sc, SpriteID id, bool real_sprite) } -bool LoadNextSprite(int load_index, byte file_index) +bool LoadNextSprite(int load_index, byte file_index, uint file_sprite_id) { SpriteCache *sc; uint32 file_pos = FioGetPos() | (file_index << 24); @@ -256,7 +256,7 @@ bool LoadNextSprite(int load_index, byte file_index) sc->file_pos = file_pos; sc->ptr = NULL; sc->lru = 0; - sc->id = load_index; + sc->id = file_sprite_id; const char *fio_grf_name = FioGetFilename(); const char *t = strrchr(fio_grf_name, PATHSEPCHAR); diff --git a/src/spritecache.h b/src/spritecache.h index 1b351bb0a..d264ae210 100644 --- a/src/spritecache.h +++ b/src/spritecache.h @@ -31,7 +31,7 @@ static inline const byte *GetNonSprite(SpriteID sprite) void GfxInitSpriteMem(); void IncreaseSpriteLRU(); -bool LoadNextSprite(int load_index, byte file_index); +bool LoadNextSprite(int load_index, byte file_index, uint file_sprite_id); void DupSprite(SpriteID old_spr, SpriteID new_spr); void SkipSprites(uint count); -- cgit v1.2.3-54-g00ecf