From 5f24141cb8ca3fbf7fcce9a30378f938e9206e03 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Tue, 11 Apr 2006 10:45:06 +0000 Subject: [PATCH] (svn r4354) [Elrail][NewGRF] Codechange: Drawing of custom waypoints with custom ground sprites used the index of the rail type as an offset. With the introduction of elrails this offset is incorrect, so instead there is now a lookup table within the RailTypeInfo struct to explicitly list the offset. --- rail.h | 5 +++++ rail_cmd.c | 2 +- railtypes.h | 14 +++++++++++++- station_cmd.c | 2 +- waypoint.c | 2 +- 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/rail.h b/rail.h index fa95fdd271..9ea050f04f 100644 --- a/rail.h +++ b/rail.h @@ -129,6 +129,11 @@ typedef struct RailtypeInfo { * Bridge offset */ SpriteID bridge_offset; + + /** + * Offset to add to ground sprite when drawing custom waypoints / stations + */ + byte custom_ground_offset; } RailtypeInfo; extern const RailtypeInfo _railtypes[RAILTYPE_END]; diff --git a/rail_cmd.c b/rail_cmd.c index 9559d4015a..c3e964c23a 100644 --- a/rail_cmd.c +++ b/rail_cmd.c @@ -1382,7 +1382,7 @@ static void DrawTile_Track(TileInfo *ti) * up to the GRF file to decide that. */ image = cust->ground_sprite; - image += (image < _custom_sprites_base) ? rti->total_offset : GetRailType(ti->tile); + image += (image < _custom_sprites_base) ? rti->total_offset : GetRailTypeInfo(GetRailType(ti->tile))->custom_ground_offset; DrawGroundSprite(image); diff --git a/railtypes.h b/railtypes.h index 1b9b665c49..48f13286a8 100644 --- a/railtypes.h +++ b/railtypes.h @@ -51,6 +51,9 @@ const RailtypeInfo _railtypes[] = { /* bridge offset */ 0, + + /* custom ground offset */ + 0, }, /** Electrified railway */ @@ -100,7 +103,10 @@ const RailtypeInfo _railtypes[] = { 0, /* bridge offset */ - 0 + 0, + + /* custom ground offset */ + 0, }, /** Monorail */ @@ -147,6 +153,9 @@ const RailtypeInfo _railtypes[] = { /* bridge offset */ 16, + + /* custom ground offset */ + 1, }, /** Maglev */ @@ -193,5 +202,8 @@ const RailtypeInfo _railtypes[] = { /* bridge offset */ 24, + + /* custom ground offset */ + 2, }, }; diff --git a/station_cmd.c b/station_cmd.c index c9c2aefe8a..b0a71769be 100644 --- a/station_cmd.c +++ b/station_cmd.c @@ -1935,7 +1935,7 @@ static void DrawTile_Station(TileInfo *ti) if (image & PALETTE_MODIFIER_COLOR) image |= image_or_modificator; // For custom sprites, there's no railtype-based pitching. - offset = (image & SPRITE_MASK) < _custom_sprites_base ? rti->total_offset : railtype; + offset = (image & SPRITE_MASK) < _custom_sprites_base ? rti->total_offset : GetRailTypeInfo(railtype)->custom_ground_offset; image += offset; // station_land array has been increased from 82 elements to 114 diff --git a/waypoint.c b/waypoint.c index 715c530b3d..00cc4f9414 100644 --- a/waypoint.c +++ b/waypoint.c @@ -412,7 +412,7 @@ void DrawWaypointSprite(int x, int y, int stat_id, RailType railtype) cust = &stat->renderdata[2]; img = cust->ground_sprite; - img += (img < _custom_sprites_base) ? rti->total_offset : railtype; + img += (img < _custom_sprites_base) ? rti->total_offset : GetRailTypeInfo(railtype)->custom_ground_offset; if (img & PALETTE_MODIFIER_COLOR) img = (img & SPRITE_MASK); DrawSprite(img, x, y);