(svn r2855) Make ReadSpriteHeaderSkipData() responsible for detecting the end of a grf file instead of its callers - this simplifies the code a bit

This commit is contained in:
tron 2005-08-11 13:09:12 +00:00
parent e16ae164af
commit d1c5128c42
1 changed files with 11 additions and 16 deletions

View File

@ -78,11 +78,14 @@ static const SpriteID * const _slopes_spriteindexes[] = {
static void CompactSpriteCache(void); static void CompactSpriteCache(void);
static void ReadSpriteHeaderSkipData(int num, int load_index) static bool ReadSpriteHeaderSkipData(int load_index)
{ {
uint16 num = FioReadWord();
byte type; byte type;
int deaf = 0; int deaf = 0;
if (num == 0) return false;
if (_skip_sprites) { if (_skip_sprites) {
if (_skip_sprites > 0) if (_skip_sprites > 0)
_skip_sprites--; _skip_sprites--;
@ -102,13 +105,12 @@ static void ReadSpriteHeaderSkipData(int num, int load_index)
} else { } else {
DecodeSpecialSprite(_cur_grffile, num, load_index, _loading_stage); DecodeSpecialSprite(_cur_grffile, num, load_index, _loading_stage);
} }
return; return true;
} }
FioSkipBytes(7); FioSkipBytes(7);
num -= 8; num -= 8;
if (num == 0) if (num == 0) return true;
return;
if (type & 2) { if (type & 2) {
FioSkipBytes(num); FioSkipBytes(num);
@ -125,6 +127,8 @@ static void ReadSpriteHeaderSkipData(int num, int load_index)
} }
} }
} }
return true;
} }
static void* AllocSprite(size_t); static void* AllocSprite(size_t);
@ -195,11 +199,8 @@ static void* ReadSprite(SpriteID id)
static bool LoadNextSprite(int load_index, byte file_index) static bool LoadNextSprite(int load_index, byte file_index)
{ {
uint32 file_pos = FioGetPos() | (file_index << 24); uint32 file_pos = FioGetPos() | (file_index << 24);
uint16 size = FioReadWord();
if (size == 0) return false; if (!ReadSpriteHeaderSkipData(load_index)) return false;
ReadSpriteHeaderSkipData(size, load_index);
if (_replace_sprites_count[0] > 0 && _cur_sprite.info != 0xFF) { if (_replace_sprites_count[0] > 0 && _cur_sprite.info != 0xFF) {
int count = _replace_sprites_count[0]; int count = _replace_sprites_count[0];
@ -245,14 +246,8 @@ static bool LoadNextSprite(int load_index, byte file_index)
static void SkipSprites(uint count) static void SkipSprites(uint count)
{ {
for (; count > 0; --count) for (; count > 0; --count) {
{ if (!ReadSpriteHeaderSkipData(MAX_SPRITES - 1)) return;
uint16 size = FioReadWord();
if (size == 0)
return;
ReadSpriteHeaderSkipData(size, MAX_SPRITES - 1);
} }
} }