summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rail_cmd.c10
-rw-r--r--rail_map.h5
-rw-r--r--table/track_land.h2
3 files changed, 12 insertions, 5 deletions
diff --git a/rail_cmd.c b/rail_cmd.c
index 20db9c4f5..0f8c26406 100644
--- a/rail_cmd.c
+++ b/rail_cmd.c
@@ -1304,7 +1304,7 @@ static void DrawTile_Track(TileInfo *ti)
} else {
/* draw depots / waypoints */
const DrawTrackSeqStruct *drss;
- byte type = ti->map5 & 0x3F; // 0-3: depots, 4-5: waypoints
+ bool is_depot = GetRailTileSubtype(ti->tile) == RAIL_SUBTYPE_DEPOT;
if (ti->tileh != 0) DrawFoundation(ti, ti->tileh);
@@ -1316,7 +1316,7 @@ static void DrawTile_Track(TileInfo *ti)
if (stat != NULL) {
DrawTileSeqStruct const *seq;
// emulate station tile - open with building
- const DrawTileSprites *cust = &stat->renderdata[2 + (ti->map5 & 0x1)];
+ const DrawTileSprites *cust = &stat->renderdata[2 + GetWaypointAxis(ti->tile)];
uint32 relocation = GetCustomStationRelocation(stat, ComposeWaypointStation(ti->tile), 0);
/* We don't touch the 0x8000 bit. In all this
@@ -1346,7 +1346,7 @@ static void DrawTile_Track(TileInfo *ti)
}
}
- drss = _track_depot_layout_table[type];
+ drss = is_depot ? _track_depot_layout_table[GetRailDepotDirection(ti->tile)] : _track_waypoint_layout_table[GetWaypointAxis(ti->tile)];
image = drss++->image;
/* @note This is kind of an ugly hack, as the PALETTE_MODIFIER_COLOR indicates
@@ -1356,7 +1356,7 @@ static void DrawTile_Track(TileInfo *ti)
// adjust ground tile for desert
// (don't adjust for arctic depots, because snow in depots looks weird)
// type >= 4 means waypoints
- if (IsSnowRailGround(ti->tile) && (_opt.landscape == LT_DESERT || type >= 4)) {
+ if (IsSnowRailGround(ti->tile) && (_opt.landscape == LT_DESERT || !is_depot)) {
if (image != SPR_FLAT_GRASS_TILE) {
image += rti->snow_offset; // tile with tracks
} else {
@@ -1370,7 +1370,7 @@ static void DrawTile_Track(TileInfo *ti)
for (; drss->image != 0; drss++) {
DrawSpecialBuilding(
- drss->image, type < 4 ? rti->total_offset : 0, ti,
+ drss->image, is_depot ? rti->total_offset : 0, ti,
drss->subcoord_x, drss->subcoord_y, 0,
drss->width, drss->height, 0x17
);
diff --git a/rail_map.h b/rail_map.h
index 1fe1d71f4..08f6e5db3 100644
--- a/rail_map.h
+++ b/rail_map.h
@@ -144,6 +144,11 @@ static inline void ClearCustomWaypointSprite(TileIndex t)
CLRBIT(_m[t].m3, 4);
}
+static inline Axis GetWaypointAxis(TileIndex t)
+{
+ return HASBIT(_m[t].m5, 0) ? AXIS_Y : AXIS_X;
+}
+
typedef enum SignalType {
SIGTYPE_NORMAL = 0, // normal signal
diff --git a/table/track_land.h b/table/track_land.h
index 6d8d90d21..9d96a0497 100644
--- a/table/track_land.h
+++ b/table/track_land.h
@@ -58,7 +58,9 @@ static const DrawTrackSeqStruct* const _track_depot_layout_table[] = {
_track_depot_layout_table_1,
_track_depot_layout_table_2,
_track_depot_layout_table_3,
+};
+static const DrawTrackSeqStruct* const _track_waypoint_layout_table[] = {
_track_waypoint_table_0,
_track_waypoint_table_1,
};