Codechange: rename and make RoadSpriteType a scoped enum

RoadTypeSpriteGroup is now renamed to RoadSpriteType
This commit is contained in:
Peter Nelson
2026-04-13 21:54:10 +01:00
committed by Peter Nelson
parent d15f105974
commit 5cef1ca68a
10 changed files with 58 additions and 57 deletions
+1 -1
View File
@@ -2809,7 +2809,7 @@ static void ConDumpRoadTypes()
const RoadTypeInfo *rti = GetRoadTypeInfo(rt);
if (rti->label == 0) continue;
uint32_t grfid = 0;
const GRFFile *grf = rti->grffile[ROTSG_GROUND];
const GRFFile *grf = rti->grffile[RoadSpriteType::Ground];
if (grf != nullptr) {
grfid = grf->grfid;
grfs.emplace(grfid, grf);
+4 -3
View File
@@ -304,7 +304,8 @@ template <RoadTramType TRoadTramType>
struct RoadTypeMapSpriteGroupHandler : MapSpriteGroupHandler {
void MapSpecific(uint16_t local_id, uint8_t cid, const SpriteGroup *group) override
{
if (cid >= ROTSG_END) return;
RoadSpriteType rst{cid};
if (rst >= RoadSpriteType::End) return;
const auto &type_map = (TRoadTramType == RoadTramType::Tram) ? _cur_gps.grffile->tramtype_map : _cur_gps.grffile->roadtype_map;
RoadType roadtype = local_id < std::size(type_map) ? type_map[local_id] : INVALID_ROADTYPE;
@@ -312,8 +313,8 @@ struct RoadTypeMapSpriteGroupHandler : MapSpriteGroupHandler {
extern RoadTypeInfo _roadtypes[ROADTYPE_END];
RoadTypeInfo &rti = _roadtypes[roadtype];
rti.grffile[cid] = _cur_gps.grffile;
rti.group[cid] = group;
rti.grffile[rst] = _cur_gps.grffile;
rti.group[rst] = group;
}
void MapDefault(uint16_t, const SpriteGroup *) override {}
+3 -3
View File
@@ -326,10 +326,10 @@ void DrawRoadStopTile(int x, int y, RoadType roadtype, const RoadStopSpec *spec,
/* Road underlay takes precedence over tram */
if (type == StationType::RoadWaypoint || draw_mode.Test(RoadStopDrawMode::Overlay)) {
if (rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_GROUND);
SpriteID ground = GetCustomRoadSprite(rti, INVALID_TILE, RoadSpriteType::Ground);
DrawSprite(ground + sprite_offset, PAL_NONE, x, y);
SpriteID overlay = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_OVERLAY);
SpriteID overlay = GetCustomRoadSprite(rti, INVALID_TILE, RoadSpriteType::Overlay);
if (overlay) DrawSprite(overlay + sprite_offset, PAL_NONE, x, y);
} else if (RoadTypeIsTram(roadtype)) {
DrawSprite(SPR_TRAMWAY_TRAM + sprite_offset, PAL_NONE, x, y);
@@ -338,7 +338,7 @@ void DrawRoadStopTile(int x, int y, RoadType roadtype, const RoadStopSpec *spec,
} else {
/* Bay stop */
if (draw_mode.Test(RoadStopDrawMode::Road) && rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_ROADSTOP);
SpriteID ground = GetCustomRoadSprite(rti, INVALID_TILE, RoadSpriteType::Roadstop);
DrawSprite(ground + view, PAL_NONE, x, y);
}
}
+3 -3
View File
@@ -134,7 +134,7 @@ uint32_t RoadTypeResolverObject::GetDebugID() const
* @param param1 Extra parameter (first parameter of the callback, except roadtypes do not have callbacks).
* @param param2 Extra parameter (second parameter of the callback, except roadtypes do not have callbacks).
*/
RoadTypeResolverObject::RoadTypeResolverObject(const RoadTypeInfo *rti, TileIndex tile, TileContext context, RoadTypeSpriteGroup rtsg, uint32_t param1, uint32_t param2)
RoadTypeResolverObject::RoadTypeResolverObject(const RoadTypeInfo *rti, TileIndex tile, TileContext context, RoadSpriteType rtsg, uint32_t param1, uint32_t param2)
: ResolverObject(rti != nullptr ? rti->grffile[rtsg] : nullptr, CBID_NO_CALLBACK, param1, param2), roadtype_scope(*this, rti, tile, context)
{
this->root_spritegroup = rti != nullptr ? rti->group[rtsg] : nullptr;
@@ -149,9 +149,9 @@ RoadTypeResolverObject::RoadTypeResolverObject(const RoadTypeInfo *rti, TileInde
* @param [out] num_results If not nullptr, return the number of sprites in the spriteset.
* @return The sprite to draw.
*/
SpriteID GetCustomRoadSprite(const RoadTypeInfo *rti, TileIndex tile, RoadTypeSpriteGroup rtsg, TileContext context, uint *num_results)
SpriteID GetCustomRoadSprite(const RoadTypeInfo *rti, TileIndex tile, RoadSpriteType rtsg, TileContext context, uint *num_results)
{
assert(rtsg < ROTSG_END);
assert(rtsg < RoadSpriteType::End);
if (rti->group[rtsg] == nullptr) return 0;
+2 -2
View File
@@ -40,7 +40,7 @@ struct RoadTypeScopeResolver : public ScopeResolver {
struct RoadTypeResolverObject : public ResolverObject {
RoadTypeScopeResolver roadtype_scope; ///< Resolver for the roadtype scope.
RoadTypeResolverObject(const RoadTypeInfo *rti, TileIndex tile, TileContext context, RoadTypeSpriteGroup rtsg, uint32_t param1 = 0, uint32_t param2 = 0);
RoadTypeResolverObject(const RoadTypeInfo *rti, TileIndex tile, TileContext context, RoadSpriteType rtsg, uint32_t param1 = 0, uint32_t param2 = 0);
ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override
{
@@ -54,7 +54,7 @@ struct RoadTypeResolverObject : public ResolverObject {
uint32_t GetDebugID() const override;
};
SpriteID GetCustomRoadSprite(const RoadTypeInfo *rti, TileIndex tile, RoadTypeSpriteGroup rtsg, TileContext context = TCX_NORMAL, uint *num_results = nullptr);
SpriteID GetCustomRoadSprite(const RoadTypeInfo *rti, TileIndex tile, RoadSpriteType rtsg, TileContext context = TCX_NORMAL, uint *num_results = nullptr);
RoadType GetRoadTypeTranslation(RoadTramType rtt, uint8_t tracktype, const GRFFile *grffile);
uint8_t GetReverseRoadTypeTranslation(RoadType roadtype, const GRFFile *grffile);
+18 -18
View File
@@ -32,21 +32,21 @@ using RoadTypeFlags = EnumBitSet<RoadTypeFlag, uint8_t>;
struct SpriteGroup;
/** Sprite groups for a roadtype. */
enum RoadTypeSpriteGroup : uint8_t {
ROTSG_CURSORS, ///< Optional: Cursor and toolbar icon images
ROTSG_OVERLAY, ///< Optional: Images for overlaying track
ROTSG_GROUND, ///< Required: Main group of ground images
ROTSG_TUNNEL, ///< Optional: Ground images for tunnels
ROTSG_CATENARY_FRONT, ///< Optional: Catenary front
ROTSG_CATENARY_BACK, ///< Optional: Catenary back
ROTSG_BRIDGE, ///< Required: Bridge surface images
ROTSG_reserved2, ///< Placeholder, if we need specific level crossing sprites.
ROTSG_DEPOT, ///< Optional: Depot images
ROTSG_reserved3, ///< Placeholder, if we add road fences (for highways).
ROTSG_ROADSTOP, ///< Required: Bay stop surface
ROTSG_ONEWAY, ///< Optional: One-way indicator images
ROTSG_END,
/** Sprite types for a roadtype. */
enum class RoadSpriteType : uint8_t {
UI, ///< Optional: Cursor and toolbar icon images
Overlay, ///< Optional: Images for overlaying track
Ground, ///< Required: Main group of ground images
Tunnel, ///< Optional: Ground images for tunnels
CatenaryFront, ///< Optional: Catenary front
CatenaryRear, ///< Optional: Catenary back
Bridge, ///< Required: Bridge surface images
ReservedCrossing, ///< Placeholder, if we need specific level crossing sprites.
Depot, ///< Optional: Depot images
ReservedFence, ///< Placeholder, if we add road fences (for highways).
Roadstop, ///< Required: Bay stop surface
Oneway, ///< Optional: One-way indicator images
End, ///< End marker.
};
class RoadTypeInfo {
@@ -158,18 +158,18 @@ public:
/**
* NewGRF providing the Action3 for the roadtype. nullptr if not available.
*/
const GRFFile *grffile[ROTSG_END];
EnumClassIndexContainer<std::array<const GRFFile *, to_underlying(RoadSpriteType::End)>, RoadSpriteType> grffile{};
/**
* Sprite groups for resolving sprites
*/
const SpriteGroup *group[ROTSG_END];
EnumClassIndexContainer<std::array<const SpriteGroup *, to_underlying(RoadSpriteType::End)>, RoadSpriteType> group{};
std::vector<BadgeID> badges;
inline bool UsesOverlay() const
{
return this->group[ROTSG_GROUND] != nullptr;
return this->group[RoadSpriteType::Ground] != nullptr;
}
RoadType Index() const;
+12 -12
View File
@@ -74,7 +74,7 @@ void ResetRoadTypes()
void ResolveRoadTypeGUISprites(RoadTypeInfo *rti)
{
SpriteID cursors_base = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_CURSORS);
SpriteID cursors_base = GetCustomRoadSprite(rti, INVALID_TILE, RoadSpriteType::UI);
if (cursors_base != 0) {
rti->gui_sprites.build_y_road = cursors_base + 0;
rti->gui_sprites.build_x_road = cursors_base + 1;
@@ -1395,8 +1395,8 @@ void DrawRoadTypeCatenary(const TileInfo *ti, RoadType rt, RoadBits rb)
}
const RoadTypeInfo *rti = GetRoadTypeInfo(rt);
SpriteID front = GetCustomRoadSprite(rti, ti->tile, ROTSG_CATENARY_FRONT);
SpriteID back = GetCustomRoadSprite(rti, ti->tile, ROTSG_CATENARY_BACK);
SpriteID front = GetCustomRoadSprite(rti, ti->tile, RoadSpriteType::CatenaryFront);
SpriteID back = GetCustomRoadSprite(rti, ti->tile, RoadSpriteType::CatenaryRear);
if (front != 0 || back != 0) {
if (front != 0) front += GetRoadSpriteOffset(ti->tileh, rb);
@@ -1510,12 +1510,12 @@ void DrawRoadOverlays(const TileInfo *ti, PaletteID pal, const RoadTypeInfo *roa
/* Road underlay takes precedence over tram */
if (road_rti != nullptr) {
if (road_rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(road_rti, ti->tile, ROTSG_GROUND);
SpriteID ground = GetCustomRoadSprite(road_rti, ti->tile, RoadSpriteType::Ground);
DrawGroundSprite(ground + road_offset, pal);
}
} else {
if (tram_rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(tram_rti, ti->tile, ROTSG_GROUND);
SpriteID ground = GetCustomRoadSprite(tram_rti, ti->tile, RoadSpriteType::Ground);
DrawGroundSprite(ground + tram_offset, pal);
} else {
DrawGroundSprite(SPR_TRAMWAY_TRAM + tram_offset, pal);
@@ -1526,7 +1526,7 @@ void DrawRoadOverlays(const TileInfo *ti, PaletteID pal, const RoadTypeInfo *roa
/* Draw road overlay */
if (road_rti != nullptr) {
if (road_rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(road_rti, ti->tile, ROTSG_OVERLAY);
SpriteID ground = GetCustomRoadSprite(road_rti, ti->tile, RoadSpriteType::Overlay);
if (ground != 0) DrawGroundSprite(ground + road_offset, pal);
}
}
@@ -1534,7 +1534,7 @@ void DrawRoadOverlays(const TileInfo *ti, PaletteID pal, const RoadTypeInfo *roa
/* Draw tram overlay */
if (tram_rti != nullptr) {
if (tram_rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(tram_rti, ti->tile, ROTSG_OVERLAY);
SpriteID ground = GetCustomRoadSprite(tram_rti, ti->tile, RoadSpriteType::Overlay);
if (ground != 0) DrawGroundSprite(ground + tram_offset, pal);
} else if (road_rti != nullptr) {
DrawGroundSprite(SPR_TRAMWAY_OVERLAY + tram_offset, pal);
@@ -1646,7 +1646,7 @@ static void DrawRoadBits(TileInfo *ti)
if (road_rti != nullptr) {
DisallowedRoadDirections drd = GetDisallowedRoadDirections(ti->tile);
if (drd.Any()) {
SpriteID oneway = GetCustomRoadSprite(road_rti, ti->tile, ROTSG_ONEWAY);
SpriteID oneway = GetCustomRoadSprite(road_rti, ti->tile, RoadSpriteType::Oneway);
if (oneway == 0) oneway = SPR_ONEWAY_BASE;
@@ -1855,7 +1855,7 @@ static void DrawTile_Road(TileInfo *ti)
RoadType tram_rt = GetRoadTypeTram(ti->tile);
const RoadTypeInfo *rti = GetRoadTypeInfo(road_rt == INVALID_ROADTYPE ? tram_rt : road_rt);
int relocation = GetCustomRoadSprite(rti, ti->tile, ROTSG_DEPOT);
int relocation = GetCustomRoadSprite(rti, ti->tile, RoadSpriteType::Depot);
bool default_gfx = relocation == 0;
if (default_gfx) {
if (rti->flags.Test(RoadTypeFlag::Catenary)) {
@@ -1879,7 +1879,7 @@ static void DrawTile_Road(TileInfo *ti)
if (default_gfx) {
uint offset = GetRoadSpriteOffset(SLOPE_FLAT, DiagDirToRoadBits(dir));
if (rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(rti, ti->tile, ROTSG_OVERLAY);
SpriteID ground = GetCustomRoadSprite(rti, ti->tile, RoadSpriteType::Overlay);
if (ground != 0) DrawGroundSprite(ground + offset, PAL_NONE);
} else if (road_rt == INVALID_ROADTYPE) {
DrawGroundSprite(SPR_TRAMWAY_OVERLAY + offset, PAL_NONE);
@@ -1906,7 +1906,7 @@ void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt)
PaletteID palette = GetCompanyPalette(_local_company);
const RoadTypeInfo *rti = GetRoadTypeInfo(rt);
int relocation = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_DEPOT);
int relocation = GetCustomRoadSprite(rti, INVALID_TILE, RoadSpriteType::Depot);
bool default_gfx = relocation == 0;
if (default_gfx) {
if (rti->flags.Test(RoadTypeFlag::Catenary)) {
@@ -1929,7 +1929,7 @@ void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt)
if (default_gfx) {
uint offset = GetRoadSpriteOffset(SLOPE_FLAT, DiagDirToRoadBits(dir));
if (rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_OVERLAY);
SpriteID ground = GetCustomRoadSprite(rti, INVALID_TILE, RoadSpriteType::Overlay);
if (ground != 0) DrawSprite(ground + offset, PAL_NONE, x, y);
} else if (RoadTypeIsTram(rt)) {
DrawSprite(SPR_TRAMWAY_OVERLAY + offset, PAL_NONE, x, y);
+4 -4
View File
@@ -3517,7 +3517,7 @@ static void DrawTile_Station(TileInfo *ti)
assert(road_rt != INVALID_ROADTYPE && tram_rt == INVALID_ROADTYPE);
if ((stopspec == nullptr || stop_draw_mode.Test(RoadStopDrawMode::Road)) && road_rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(road_rti, ti->tile, ROTSG_ROADSTOP);
SpriteID ground = GetCustomRoadSprite(road_rti, ti->tile, RoadSpriteType::Roadstop);
DrawGroundSprite(ground + view, PAL_NONE);
}
}
@@ -3568,10 +3568,10 @@ void StationPickerDrawSprite(int x, int y, StationType st, RailType railtype, Ro
/* Road underlay takes precedence over tram */
if (roadtype_info->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(roadtype_info, INVALID_TILE, ROTSG_GROUND);
SpriteID ground = GetCustomRoadSprite(roadtype_info, INVALID_TILE, RoadSpriteType::Ground);
DrawSprite(ground + sprite_offset, PAL_NONE, x, y);
SpriteID overlay = GetCustomRoadSprite(roadtype_info, INVALID_TILE, ROTSG_OVERLAY);
SpriteID overlay = GetCustomRoadSprite(roadtype_info, INVALID_TILE, RoadSpriteType::Overlay);
if (overlay) DrawSprite(overlay + sprite_offset, PAL_NONE, x, y);
} else if (RoadTypeIsTram(roadtype)) {
DrawSprite(SPR_TRAMWAY_TRAM + sprite_offset, PAL_NONE, x, y);
@@ -3579,7 +3579,7 @@ void StationPickerDrawSprite(int x, int y, StationType st, RailType railtype, Ro
} else {
/* Bay stop */
if (RoadTypeIsRoad(roadtype) && roadtype_info->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(roadtype_info, INVALID_TILE, ROTSG_ROADSTOP);
SpriteID ground = GetCustomRoadSprite(roadtype_info, INVALID_TILE, RoadSpriteType::Roadstop);
DrawSprite(ground + image, PAL_NONE, x, y);
}
}
+1 -1
View File
@@ -643,7 +643,7 @@ class NIHRoadType : public NIHelper {
{
/* There is no unique GRFFile for the tile. Multiple GRFs can define different parts of the railtype.
* However, currently the NewGRF Debug GUI does not display variables depending on the GRF (like 0x7F) anyway. */
RoadTypeResolverObject ro(nullptr, TileIndex{index}, TCX_NORMAL, ROTSG_END);
RoadTypeResolverObject ro(nullptr, TileIndex{index}, TCX_NORMAL, RoadSpriteType::End);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
+10 -10
View File
@@ -1145,8 +1145,8 @@ static void GetBridgeRoadCatenary(const RoadTypeInfo *rti, TileIndex head_tile,
static const SpriteID front_offsets[6] = { 97, 98, 103, 106, 104, 105 };
/* Simplified from DrawRoadTypeCatenary() to remove all the special cases required for regular ground road */
spr_back = GetCustomRoadSprite(rti, head_tile, ROTSG_CATENARY_BACK, head ? TCX_NORMAL : TCX_ON_BRIDGE);
spr_front = GetCustomRoadSprite(rti, head_tile, ROTSG_CATENARY_FRONT, head ? TCX_NORMAL : TCX_ON_BRIDGE);
spr_back = GetCustomRoadSprite(rti, head_tile, RoadSpriteType::CatenaryRear, head ? TCX_NORMAL : TCX_ON_BRIDGE);
spr_front = GetCustomRoadSprite(rti, head_tile, RoadSpriteType::CatenaryFront, head ? TCX_NORMAL : TCX_ON_BRIDGE);
if (spr_back == 0 && spr_front == 0) {
spr_back = SPR_TRAMWAY_BASE + back_offsets[offset];
spr_front = SPR_TRAMWAY_BASE + front_offsets[offset];
@@ -1184,14 +1184,14 @@ static void DrawBridgeRoadBits(TileIndex head_tile, int x, int y, int z, int off
trans_back[0] = !head && IsTransparencySet(TO_BRIDGES);
if (road_rti != nullptr) {
if (road_rti->UsesOverlay()) {
seq_back[0] = GetCustomRoadSprite(road_rti, head_tile, ROTSG_BRIDGE, head ? TCX_NORMAL : TCX_ON_BRIDGE) + offset;
seq_back[0] = GetCustomRoadSprite(road_rti, head_tile, RoadSpriteType::Bridge, head ? TCX_NORMAL : TCX_ON_BRIDGE) + offset;
} else if (is_custom_layout) {
/* For custom layouts draw a custom bridge deck. */
seq_back[0] = SPR_BRIDGE_DECKS_ROAD + offset;
}
} else if (tram_rti != nullptr) {
if (tram_rti->UsesOverlay()) {
seq_back[0] = GetCustomRoadSprite(tram_rti, head_tile, ROTSG_BRIDGE, head ? TCX_NORMAL : TCX_ON_BRIDGE) + offset;
seq_back[0] = GetCustomRoadSprite(tram_rti, head_tile, RoadSpriteType::Bridge, head ? TCX_NORMAL : TCX_ON_BRIDGE) + offset;
} else {
seq_back[0] = SPR_TRAMWAY_BRIDGE + offset;
}
@@ -1201,7 +1201,7 @@ static void DrawBridgeRoadBits(TileIndex head_tile, int x, int y, int z, int off
trans_back[1] = !head && IsTransparencySet(TO_BRIDGES);
if (road_rti != nullptr) {
if (road_rti->UsesOverlay()) {
seq_back[1] = GetCustomRoadSprite(road_rti, head_tile, ROTSG_OVERLAY, head ? TCX_NORMAL : TCX_ON_BRIDGE);
seq_back[1] = GetCustomRoadSprite(road_rti, head_tile, RoadSpriteType::Overlay, head ? TCX_NORMAL : TCX_ON_BRIDGE);
if (seq_back[1] != 0) seq_back[1] += overlay_offsets[offset];
}
}
@@ -1210,7 +1210,7 @@ static void DrawBridgeRoadBits(TileIndex head_tile, int x, int y, int z, int off
trans_back[2] = !head && IsTransparencySet(TO_BRIDGES);
if (tram_rti != nullptr) {
if (tram_rti->UsesOverlay()) {
seq_back[2] = GetCustomRoadSprite(tram_rti, head_tile, ROTSG_OVERLAY, head ? TCX_NORMAL : TCX_ON_BRIDGE);
seq_back[2] = GetCustomRoadSprite(tram_rti, head_tile, RoadSpriteType::Overlay, head ? TCX_NORMAL : TCX_ON_BRIDGE);
if (seq_back[2] != 0) seq_back[2] += overlay_offsets[offset];
} else if (road_rti != nullptr) {
seq_back[2] = SPR_TRAMWAY_OVERLAY + overlay_offsets[offset];
@@ -1355,7 +1355,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
/* Road underlay takes precedence over tram */
if (road_rti != nullptr) {
if (road_rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(road_rti, ti->tile, ROTSG_TUNNEL);
SpriteID ground = GetCustomRoadSprite(road_rti, ti->tile, RoadSpriteType::Tunnel);
if (ground != 0) {
DrawGroundSprite(ground + tunnelbridge_direction, PAL_NONE);
draw_underlay = false;
@@ -1363,7 +1363,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
}
} else {
if (tram_rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(tram_rti, ti->tile, ROTSG_TUNNEL);
SpriteID ground = GetCustomRoadSprite(tram_rti, ti->tile, RoadSpriteType::Tunnel);
if (ground != 0) {
DrawGroundSprite(ground + tunnelbridge_direction, PAL_NONE);
draw_underlay = false;
@@ -1376,14 +1376,14 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
/* Road catenary takes precedence over tram */
SpriteID catenary_sprite_base = 0;
if (road_rti != nullptr && HasRoadCatenaryDrawn(road_rt)) {
catenary_sprite_base = GetCustomRoadSprite(road_rti, ti->tile, ROTSG_CATENARY_FRONT);
catenary_sprite_base = GetCustomRoadSprite(road_rti, ti->tile, RoadSpriteType::CatenaryFront);
if (catenary_sprite_base == 0) {
catenary_sprite_base = SPR_TRAMWAY_TUNNEL_WIRES;
} else {
catenary_sprite_base += 19;
}
} else if (tram_rti != nullptr && HasRoadCatenaryDrawn(tram_rt)) {
catenary_sprite_base = GetCustomRoadSprite(tram_rti, ti->tile, ROTSG_CATENARY_FRONT);
catenary_sprite_base = GetCustomRoadSprite(tram_rti, ti->tile, RoadSpriteType::CatenaryFront);
if (catenary_sprite_base == 0) {
catenary_sprite_base = SPR_TRAMWAY_TUNNEL_WIRES;
} else {