summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/newgrf_station.cpp34
-rw-r--r--src/newgrf_station.h6
-rw-r--r--src/station_cmd.cpp7
3 files changed, 23 insertions, 24 deletions
diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp
index 7465d5283..e614c2dbb 100644
--- a/src/newgrf_station.cpp
+++ b/src/newgrf_station.cpp
@@ -576,28 +576,21 @@ static const SpriteGroup *ResolveStation(ResolverObject *object)
return SpriteGroup::Resolve(group, object);
}
-SpriteID GetCustomStationRelocation(const StationSpec *statspec, const BaseStation *st, TileIndex tile)
-{
- 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)
+/**
+ * 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);
- 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, RailType railtype, Axis axis, StationClassID
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
index c7fb556e6..7363c9e56 100644
--- a/src/newgrf_station.h
+++ b/src/newgrf_station.h
@@ -111,11 +111,7 @@ const StationSpec *GetStationSpec(TileIndex t);
/* 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
index 57abbb8ae..9f4048769 100644
--- 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;