Fix GetSpriteMainColour with non-default zoom sprites

This fixes viewport map mode with extra zoom ground tile sets
This commit is contained in:
Jonathan G Rennison
2020-12-27 03:03:05 +00:00
parent ad5a97b7a1
commit aefefb61c2

View File

@@ -878,7 +878,6 @@ uint32 GetSpriteMainColour(SpriteID sprite_id, PaletteID palette_id)
size_t file_pos = sc->file_pos; size_t file_pos = sc->file_pos;
SpriteLoader::Sprite sprites[ZOOM_LVL_COUNT]; SpriteLoader::Sprite sprites[ZOOM_LVL_COUNT];
SpriteLoader::Sprite *sprite = &sprites[ZOOM_LVL_SHIFT];
sprites[ZOOM_LVL_NORMAL].type = ST_NORMAL; sprites[ZOOM_LVL_NORMAL].type = ST_NORMAL;
SpriteLoaderGrf sprite_loader(sc->container_ver); SpriteLoaderGrf sprite_loader(sc->container_ver);
uint8 sprite_avail; uint8 sprite_avail;
@@ -887,7 +886,8 @@ uint32 GetSpriteMainColour(SpriteID sprite_id, PaletteID palette_id)
/* Try to read the 32bpp sprite first. */ /* Try to read the 32bpp sprite first. */
if (screen_depth == 32) { if (screen_depth == 32) {
sprite_avail = sprite_loader.LoadSprite(sprites, file_slot, file_pos, ST_NORMAL, true); sprite_avail = sprite_loader.LoadSprite(sprites, file_slot, file_pos, ST_NORMAL, true);
if (sprite_avail & ZOOM_LVL_BASE) { if (sprite_avail != 0) {
SpriteLoader::Sprite *sprite = &sprites[FindFirstBit(sprite_avail)];
/* Return the average colour. */ /* Return the average colour. */
uint32 r = 0, g = 0, b = 0, cnt = 0; uint32 r = 0, g = 0, b = 0, cnt = 0;
SpriteLoader::CommonPixel *pixel = sprite->data; SpriteLoader::CommonPixel *pixel = sprite->data;
@@ -916,7 +916,8 @@ uint32 GetSpriteMainColour(SpriteID sprite_id, PaletteID palette_id)
/* No 32bpp, try 8bpp. */ /* No 32bpp, try 8bpp. */
sprite_avail = sprite_loader.LoadSprite(sprites, file_slot, file_pos, ST_NORMAL, false); sprite_avail = sprite_loader.LoadSprite(sprites, file_slot, file_pos, ST_NORMAL, false);
if (sprite_avail & ZOOM_LVL_BASE) { if (sprite_avail != 0) {
SpriteLoader::Sprite *sprite = &sprites[FindFirstBit(sprite_avail)];
SpriteLoader::CommonPixel *pixel = sprite->data; SpriteLoader::CommonPixel *pixel = sprite->data;
if (screen_depth == 32) { if (screen_depth == 32) {
/* Return the average colour. */ /* Return the average colour. */