# HG changeset patch # User peter1138 # Date 2006-04-11 10:45:06 # Node ID f2c857b0cccc56326f9d57ca20033d00d11645c4 # Parent dc5ba773c3f7fc247fa24cce8d8e7aa12ee1e97b (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. diff --git a/rail.h b/rail.h --- 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 --- 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 --- 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 --- a/station_cmd.c +++ b/station_cmd.c @@ -1935,7 +1935,7 @@ static void DrawTile_Station(TileInfo *t 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 --- a/waypoint.c +++ b/waypoint.c @@ -412,7 +412,7 @@ void DrawWaypointSprite(int x, int y, in 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);