1
0
Fork 0

Change: [NewGRF] If Action123 does not resolve in a valid SpriteSet, prefer drawing the default sprite instead of an invalid sprite.

pull/14151/head
frosch 2025-04-28 16:10:56 +02:00 committed by frosch
parent 7b08170ac8
commit b281c5616e
5 changed files with 9 additions and 8 deletions

View File

@ -259,7 +259,7 @@ SpriteID GetCustomAirportSprite(const AirportSpec *as, uint8_t layout)
{ {
AirportResolverObject object(INVALID_TILE, nullptr, as, layout); AirportResolverObject object(INVALID_TILE, nullptr, as, layout);
const SpriteGroup *group = object.Resolve(); const SpriteGroup *group = object.Resolve();
if (group == nullptr) return as->preview_sprite; if (group == nullptr || group->GetNumResults() == 0) return as->preview_sprite;
return group->GetResult(); return group->GetResult();
} }

View File

@ -276,7 +276,7 @@ PalSpriteID GetBadgeSprite(const Badge &badge, GrfSpecFeature feature, std::opti
{ {
BadgeResolverObject object(badge, feature, introduction_date); BadgeResolverObject object(badge, feature, introduction_date);
const SpriteGroup *group = object.Resolve(); const SpriteGroup *group = object.Resolve();
if (group == nullptr) return {0, PAL_NONE}; if (group == nullptr || group->GetNumResults() == 0) return {0, PAL_NONE};
PaletteID pal = badge.flags.Test(BadgeFlag::UseCompanyColour) ? remap : PAL_NONE; PaletteID pal = badge.flags.Test(BadgeFlag::UseCompanyColour) ? remap : PAL_NONE;

View File

@ -141,7 +141,7 @@ SpriteID GetCanalSprite(CanalFeature feature, TileIndex tile)
{ {
CanalResolverObject object(feature, tile); CanalResolverObject object(feature, tile);
const SpriteGroup *group = object.Resolve(); const SpriteGroup *group = object.Resolve();
if (group == nullptr) return 0; if (group == nullptr || group->GetNumResults() == 0) return 0;
return group->GetResult(); return group->GetResult();
} }

View File

@ -56,7 +56,7 @@ SpriteID GetCustomCargoSprite(const CargoSpec *cs)
{ {
CargoResolverObject object(cs); CargoResolverObject object(cs);
const SpriteGroup *group = object.Resolve(); const SpriteGroup *group = object.Resolve();
if (group == nullptr) return 0; if (group == nullptr || group->GetNumResults() == 0) return 0;
return group->GetResult(); return group->GetResult();
} }

View File

@ -641,7 +641,7 @@ SpriteID GetCustomStationRelocation(const StationSpec *statspec, BaseStation *st
{ {
StationResolverObject object(statspec, st, tile, CBID_NO_CALLBACK, var10); StationResolverObject object(statspec, st, tile, CBID_NO_CALLBACK, var10);
const SpriteGroup *group = object.Resolve(); const SpriteGroup *group = object.Resolve();
if (group == nullptr || group->type != SGT_RESULT) return 0; if (group == nullptr || group->GetNumResults() == 0) return 0;
return group->GetResult() - SPR_RAIL_PLATFORM_Y_FRONT; return group->GetResult() - SPR_RAIL_PLATFORM_Y_FRONT;
} }
@ -660,10 +660,11 @@ SpriteID GetCustomStationFoundationRelocation(const StationSpec *statspec, BaseS
StationResolverObject object(statspec, st, tile, CBID_NO_CALLBACK, 2, layout | (edge_info << 16)); StationResolverObject object(statspec, st, tile, CBID_NO_CALLBACK, 2, layout | (edge_info << 16));
const SpriteGroup *group = object.Resolve(); const SpriteGroup *group = object.Resolve();
if (group == nullptr || group->type != SGT_RESULT) return 0;
/* Note: SpriteGroup::Resolve zeroes all registers, so register 0x100 is initialised to 0. (compatibility) */ /* Note: SpriteGroup::Resolve zeroes all registers, so register 0x100 is initialised to 0. (compatibility) */
return group->GetResult() + GetRegister(0x100); auto offset = GetRegister(0x100);
if (group == nullptr || group->GetNumResults() <= offset) return 0;
return group->GetResult() + offset;
} }