From b281c5616e90997d6ad1226dc6aa91d603f46590 Mon Sep 17 00:00:00 2001 From: frosch Date: Mon, 28 Apr 2025 16:10:56 +0200 Subject: [PATCH] Change: [NewGRF] If Action123 does not resolve in a valid SpriteSet, prefer drawing the default sprite instead of an invalid sprite. --- src/newgrf_airport.cpp | 2 +- src/newgrf_badge.cpp | 2 +- src/newgrf_canal.cpp | 2 +- src/newgrf_cargo.cpp | 2 +- src/newgrf_station.cpp | 9 +++++---- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index a22e87bb9d..01b0e06662 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -259,7 +259,7 @@ SpriteID GetCustomAirportSprite(const AirportSpec *as, uint8_t layout) { AirportResolverObject object(INVALID_TILE, nullptr, as, layout); 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(); } diff --git a/src/newgrf_badge.cpp b/src/newgrf_badge.cpp index 4be627cb30..36bb994d35 100644 --- a/src/newgrf_badge.cpp +++ b/src/newgrf_badge.cpp @@ -276,7 +276,7 @@ PalSpriteID GetBadgeSprite(const Badge &badge, GrfSpecFeature feature, std::opti { BadgeResolverObject object(badge, feature, introduction_date); 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; diff --git a/src/newgrf_canal.cpp b/src/newgrf_canal.cpp index 48315fc4bf..d228ee210d 100644 --- a/src/newgrf_canal.cpp +++ b/src/newgrf_canal.cpp @@ -141,7 +141,7 @@ SpriteID GetCanalSprite(CanalFeature feature, TileIndex tile) { CanalResolverObject object(feature, tile); const SpriteGroup *group = object.Resolve(); - if (group == nullptr) return 0; + if (group == nullptr || group->GetNumResults() == 0) return 0; return group->GetResult(); } diff --git a/src/newgrf_cargo.cpp b/src/newgrf_cargo.cpp index c0dc43b49a..2c581c26e9 100644 --- a/src/newgrf_cargo.cpp +++ b/src/newgrf_cargo.cpp @@ -56,7 +56,7 @@ SpriteID GetCustomCargoSprite(const CargoSpec *cs) { CargoResolverObject object(cs); const SpriteGroup *group = object.Resolve(); - if (group == nullptr) return 0; + if (group == nullptr || group->GetNumResults() == 0) return 0; return group->GetResult(); } diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index b36a837308..0edd6ef9b8 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -641,7 +641,7 @@ SpriteID GetCustomStationRelocation(const StationSpec *statspec, BaseStation *st { StationResolverObject object(statspec, st, tile, CBID_NO_CALLBACK, var10); 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; } @@ -660,10 +660,11 @@ SpriteID GetCustomStationFoundationRelocation(const StationSpec *statspec, BaseS StationResolverObject object(statspec, st, tile, CBID_NO_CALLBACK, 2, layout | (edge_info << 16)); 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) */ - return group->GetResult() + GetRegister(0x100); + auto offset = GetRegister(0x100); + if (group == nullptr || group->GetNumResults() <= offset) return 0; + + return group->GetResult() + offset; }