diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -576,28 +576,21 @@ static const SpriteGroup *ResolveStation return SpriteGroup::Resolve(group, object); } -SpriteID GetCustomStationRelocation(const StationSpec *statspec, const BaseStation *st, TileIndex tile) +/** + * Resolve sprites for drawing a station tile. + * @param statspec Station spec + * @param st Station (NULL in GUI) + * @param tile Station tile being drawn (INVALID_TILE in GUI) + * @param var10 Value to put in variable 10; normally 0; 1 when resolving the groundsprite and SSF_SEPARATE_GROUND is set. + * @return First sprite of the Action 1 spriteset ot use, minus an offset of 0x42D to accommodate for weird NewGRF specs. + */ +SpriteID GetCustomStationRelocation(const StationSpec *statspec, const BaseStation *st, TileIndex tile, uint32 var10) { const SpriteGroup *group; ResolverObject object; NewStationResolver(&object, statspec, st, tile); - - group = ResolveStation(&object); - if (group == NULL || group->type != SGT_RESULT) return 0; - return group->GetResult() - 0x42D; -} - - -SpriteID GetCustomStationGroundRelocation(const StationSpec *statspec, const BaseStation *st, TileIndex tile) -{ - const SpriteGroup *group; - ResolverObject object; - - NewStationResolver(&object, statspec, st, tile); - if (HasBit(statspec->flags, SSF_SEPARATE_GROUND)) { - object.callback_param1 = 1; // Indicate we are resolving the ground sprite - } + object.callback_param1 = var10; group = ResolveStation(&object); if (group == NULL || group->type != SGT_RESULT) return 0; @@ -777,7 +770,12 @@ bool DrawStationTile(int x, int y, RailT SpriteID image = sprites->ground.sprite; PaletteID pal = sprites->ground.pal; if (HasBit(image, SPRITE_MODIFIER_CUSTOM_SPRITE)) { - image += GetCustomStationGroundRelocation(statspec, NULL, INVALID_TILE); + if (HasBit(statspec->flags, SSF_SEPARATE_GROUND)) { + /* Use separate action 1-2-3 chain for ground sprite */ + image += GetCustomStationRelocation(statspec, NULL, INVALID_TILE, 1); + } else { + image += relocation; + } image += rti->fallback_railtype; } else { image += rti->GetRailtypeSpriteOffset(); diff --git a/src/newgrf_station.h b/src/newgrf_station.h --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -111,11 +111,7 @@ const StationSpec *GetStationSpec(TileIn /* Evaluate a tile's position within a station, and return the result a bitstuffed format. */ uint32 GetPlatformInfo(Axis axis, byte tile, int platforms, int length, int x, int y, bool centred); -/* Get sprite offset for a given custom station and station structure (may be - * NULL - that means we are in a build dialog). The station structure is used - * for variational sprite groups. */ -SpriteID GetCustomStationRelocation(const StationSpec *statspec, const BaseStation *st, TileIndex tile); -SpriteID GetCustomStationGroundRelocation(const StationSpec *statspec, const BaseStation *st, TileIndex tile); +SpriteID GetCustomStationRelocation(const StationSpec *statspec, const BaseStation *st, TileIndex tile, uint32 var10 = 0); SpriteID GetCustomStationFoundationRelocation(const StationSpec *statspec, const BaseStation *st, TileIndex tile, uint layout, uint edge_info); uint16 GetStationCallback(CallbackID callback, uint32 param1, uint32 param2, const StationSpec *statspec, const BaseStation *st, TileIndex tile); diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2678,7 +2678,12 @@ draw_default_foundation: } } else { if (HasBit(image, SPRITE_MODIFIER_CUSTOM_SPRITE)) { - image += GetCustomStationGroundRelocation(statspec, st, ti->tile); + if (HasBit(statspec->flags, SSF_SEPARATE_GROUND)) { + /* Use separate action 1-2-3 chain for ground sprite */ + image += GetCustomStationRelocation(statspec, st, ti->tile, 1); + } else { + image += relocation; + } image += custom_ground_offset; } else { image += total_offset;