summaryrefslogtreecommitdiff
path: root/spritecache.c
diff options
context:
space:
mode:
authorcelestar <celestar@openttd.org>2005-07-24 15:56:31 +0000
committercelestar <celestar@openttd.org>2005-07-24 15:56:31 +0000
commit238e47cd42c009f2ab1359428788a65a26fafebb (patch)
treee02fce527cef08bc25354c995fecc8ddb0ab5318 /spritecache.c
parenta227065ab75d6cb9f449f2282315adc933450b49 (diff)
downloadopenttd-238e47cd42c009f2ab1359428788a65a26fafebb.tar.xz
(svn r2702) -Codechange: Cleaned up the sprite code and replaced many magic numbers
by enums. There remains work in gfx.c to move the "transparency" and "recolor" bits around to make space for more sprites. However, 2800 additional sprites can now be loaded. There also remains cleanup and Doxygen work on many of the header files.
Diffstat (limited to 'spritecache.c')
-rw-r--r--spritecache.c54
1 files changed, 28 insertions, 26 deletions
diff --git a/spritecache.c b/spritecache.c
index 8d3d5100a..26a7391e8 100644
--- a/spritecache.c
+++ b/spritecache.c
@@ -35,27 +35,27 @@ uint16 _custom_sprites_base;
static Sprite _cur_sprite;
-static void* _sprite_ptr[NUM_SPRITES];
-static uint16 _sprite_size[NUM_SPRITES];
-static uint32 _sprite_file_pos[NUM_SPRITES];
+static void* _sprite_ptr[MAX_SPRITES];
+static uint16 _sprite_size[MAX_SPRITES];
+static uint32 _sprite_file_pos[MAX_SPRITES];
// This one is probably not needed.
#if defined(WANT_LOCKED)
-static bool _sprite_locked[NUM_SPRITES];
+static bool _sprite_locked[MAX_SPRITES];
#endif
#if defined(WANT_NEW_LRU)
-static int16 _sprite_lru_new[NUM_SPRITES];
+static int16 _sprite_lru_new[MAX_SPRITES];
#else
-static uint16 _sprite_lru[NUM_SPRITES];
-static uint16 _sprite_lru_cur[NUM_SPRITES];
+static uint16 _sprite_lru[MAX_SPRITES];
+static uint16 _sprite_lru_cur[MAX_SPRITES];
#endif
#ifdef WANT_SPRITESIZES
-static int8 _sprite_xoffs[NUM_SPRITES];
-static int8 _sprite_yoffs[NUM_SPRITES];
-static uint16 _sprite_xsize[NUM_SPRITES];
-static uint8 _sprite_ysize[NUM_SPRITES];
+static int8 _sprite_xoffs[MAX_SPRITES];
+static int8 _sprite_yoffs[MAX_SPRITES];
+static uint16 _sprite_xsize[MAX_SPRITES];
+static uint8 _sprite_ysize[MAX_SPRITES];
#endif
bool _cache_sprites;
@@ -83,13 +83,13 @@ typedef struct FileList {
#include "table/files.h"
#include "table/landscape_sprite.h"
-static const uint16 * const _landscape_spriteindexes[] = {
+static const SpriteID * const _landscape_spriteindexes[] = {
_landscape_spriteindexes_1,
_landscape_spriteindexes_2,
_landscape_spriteindexes_3,
};
-static const uint16 * const _slopes_spriteindexes[] = {
+static const SpriteID * const _slopes_spriteindexes[] = {
_slopes_spriteindexes_0,
_slopes_spriteindexes_1,
_slopes_spriteindexes_2,
@@ -238,7 +238,7 @@ static bool LoadNextSprite(int load_index, byte file_index)
_replace_sprites_offset[0]++;
_replace_sprites_count[0]--;
- if ((offset + count) <= NUM_SPRITES) {
+ if ((offset + count) <= MAX_SPRITES) {
load_index = offset;
} else {
DEBUG(spritecache, 1) ("Sprites to be replaced are out of range: %x+%x",
@@ -294,7 +294,7 @@ static void SkipSprites(uint count)
if (size == 0)
return;
- ReadSpriteHeaderSkipData(size, NUM_SPRITES - 1);
+ ReadSpriteHeaderSkipData(size, MAX_SPRITES - 1);
}
}
@@ -313,10 +313,11 @@ static int LoadGrfFile(const char *filename, int load_index, int file_index)
while (LoadNextSprite(load_index, file_index)) {
load_index++;
- if (load_index >= NUM_SPRITES) {
- error("Too many sprites. Recompile with higher NUM_SPRITES value or remove some custom GRF files.");
+ if (load_index >= MAX_SPRITES) {
+ error("Too many sprites. Recompile with higher MAX_SPRITES value or remove some custom GRF files.");
}
}
+ DEBUG(spritecache, 2) ("Currently %i sprites are loaded", load_index);
return load_index - load_index_org;
}
@@ -351,8 +352,8 @@ static int LoadNewGrfFile(const char *filename, int load_index, int file_index)
}
for (i = 0; LoadNextSprite(load_index + i, file_index); i++) {
- if (load_index + i >= NUM_SPRITES)
- error("Too many sprites (0x%X). Recompile with higher NUM_SPRITES value or remove some custom GRF files.",
+ if (load_index + i >= MAX_SPRITES)
+ error("Too many sprites (0x%X). Recompile with higher MAX_SPRITES value or remove some custom GRF files.",
load_index + i);
}
@@ -364,7 +365,7 @@ static int LoadNewGrfFile(const char *filename, int load_index, int file_index)
return i;
}
-static void LoadGrfIndexed(const char *filename, const uint16 *index_tbl, int file_index)
+static void LoadGrfIndexed(const char *filename, const SpriteID *index_tbl, int file_index)
{
int start;
@@ -472,7 +473,7 @@ void IncreaseSpriteLRU(void)
if (_sprite_lru_counter > 16384) {
DEBUG(spritecache, 2) ("fixing lru %d, inuse=%d", _sprite_lru_counter, GetSpriteCacheUsage());
- for (i = 0; i != NUM_SPRITES; i++)
+ for (i = 0; i != MAX_SPRITES; i++)
if (_sprite_ptr[i] != NULL) {
if (_sprite_lru_new[i] >= 0) {
_sprite_lru_new[i] = -1;
@@ -483,7 +484,7 @@ void IncreaseSpriteLRU(void)
_sprite_lru_counter = 0;
}
#else
- for (i = 0; i != NUM_SPRITES; i++)
+ for (i = 0; i != MAX_SPRITES; i++)
if (_sprite_ptr[i] != NULL && _sprite_lru[i] != 65535)
_sprite_lru[i]++;
// Reset the lru counter.
@@ -560,7 +561,7 @@ static void DeleteEntryFromSpriteCache(void)
#if defined(WANT_NEW_LRU)
cur_lru = 0xffff;
- for (i = 0; i != NUM_SPRITES; i++) {
+ for (i = 0; i != MAX_SPRITES; i++) {
if (_sprite_ptr[i] != 0 &&
_sprite_lru_new[i] < cur_lru
#if defined(WANT_LOCKED)
@@ -574,7 +575,7 @@ static void DeleteEntryFromSpriteCache(void)
#else
{
uint16 cur_lru = 0, cur_lru_cur = 0xffff;
- for (i = 0; i != NUM_SPRITES; i++) {
+ for (i = 0; i != MAX_SPRITES; i++) {
if (_sprite_ptr[i] == 0 ||
#if defined(WANT_LOCKED)
_sprite_locked[i] ||
@@ -702,7 +703,7 @@ const void *GetRawSprite(SpriteID sprite)
{
void* p;
- assert(sprite < NUM_SPRITES);
+ assert(sprite < MAX_SPRITES);
#if defined(NEW_ROTATION)
sprite = RotateSprite(sprite);
@@ -732,7 +733,7 @@ static const char * const _cached_filenames[4] = {
};
#define OPENTTD_SPRITES_COUNT 98
-static const uint16 _openttd_grf_indexes[] = {
+static const SpriteID _openttd_grf_indexes[] = {
SPR_OPENTTD_BASE + 0, SPR_OPENTTD_BASE + 7, // icons etc
134, 134, // euro symbol medium size
582, 582, // euro symbol large size
@@ -910,6 +911,7 @@ static void LoadSpriteTables(void)
if (_loading_stage == 0)
InitNewGRFFile(_newgrf_files[j], load_index);
load_index += LoadNewGrfFile(_newgrf_files[j], load_index, i++);
+ DEBUG(spritecache, 2) ("Currently %i sprites are loaded", load_index);
}
}