summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--newgrf.c18
-rw-r--r--rail_cmd.c27
-rw-r--r--station_cmd.c2
3 files changed, 21 insertions, 26 deletions
diff --git a/newgrf.c b/newgrf.c
index 0bb3e94e7..62b0e6464 100644
--- a/newgrf.c
+++ b/newgrf.c
@@ -810,12 +810,9 @@ static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int
uint seq_count = 0;
PalSpriteID ground_sprite;
+ dts->seq = NULL;
ground_sprite = grf_load_dword(&buf);
- if (ground_sprite == 0) {
- static const DrawTileSeqStruct empty = {0x80, 0, 0, 0, 0, 0, 0};
- dts->seq = ∅
- continue;
- }
+ if (ground_sprite == 0) continue;
if (HASBIT(ground_sprite, 31)) {
// Bit 31 indicates that we should use a custom sprite.
@@ -825,7 +822,6 @@ static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int
dts->ground_sprite = ground_sprite;
}
- dts->seq = NULL;
while (buf < *bufp + len) {
DrawTileSeqStruct *dtss;
@@ -861,15 +857,11 @@ static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int
DrawTileSeqStruct const *sdtss = sdts->seq;
int seq_count = 0;
+ dts->seq = NULL;
dts->ground_sprite = sdts->ground_sprite;
- if (dts->ground_sprite == 0) {
- static const DrawTileSeqStruct empty = {0x80, 0, 0, 0, 0, 0, 0};
- dts->seq = &empty;
- continue;
- }
+ if (dts->ground_sprite == 0) continue;
- dts->seq = NULL;
- while (1) {
+ while (true) {
DrawTileSeqStruct *dtss;
// no relative bounding box support
diff --git a/rail_cmd.c b/rail_cmd.c
index 3435b4a49..16cad05ab 100644
--- a/rail_cmd.c
+++ b/rail_cmd.c
@@ -1335,21 +1335,24 @@ static void DrawTile_Track(TileInfo *ti)
* should be drawn in company colors, and it's
* up to the GRF file to decide that. */
- image = cust->ground_sprite;
- image += (image < _custom_sprites_base) ? rti->total_offset : rti->custom_ground_offset;
+ /* If there is no sprite layout, we fall back to the default waypoint graphics. */
+ if (cust != NULL && cust->seq != NULL) {
+ image = cust->ground_sprite;
+ image += (image < _custom_sprites_base) ? rti->total_offset : rti->custom_ground_offset;
- DrawGroundSprite(image);
+ DrawGroundSprite(image);
- if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti);
+ if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti);
- foreach_draw_tile_seq(seq, cust->seq) {
- DrawSpecialBuilding(
- seq->image + relocation, 0, ti,
- seq->delta_x, seq->delta_y, seq->delta_z,
- seq->width, seq->height, seq->unk
- );
+ foreach_draw_tile_seq(seq, cust->seq) {
+ DrawSpecialBuilding(
+ seq->image + relocation, 0, ti,
+ seq->delta_x, seq->delta_y, seq->delta_z,
+ seq->width, seq->height, seq->unk
+ );
+ }
+ return;
}
- return;
}
}
@@ -1357,7 +1360,7 @@ static void DrawTile_Track(TileInfo *ti)
image = drss++->image;
/* @note This is kind of an ugly hack, as the PALETTE_MODIFIER_COLOR indicates
- * whether the sprite is railtype dependent. Rewrite this asap */
+ * whether the sprite is railtype dependent. Rewrite this asap */
if (image & PALETTE_MODIFIER_COLOR) image = (image & SPRITE_MASK) + rti->total_offset;
// adjust ground tile for desert
diff --git a/station_cmd.c b/station_cmd.c
index 491454573..2d205cddc 100644
--- a/station_cmd.c
+++ b/station_cmd.c
@@ -1996,7 +1996,7 @@ static void DrawTile_Station(TileInfo *ti)
}
}
- if (t == NULL) t = &_station_display_datas[GetStationGfx(ti->tile)];
+ if (t == NULL || t->seq == NULL) t = &_station_display_datas[GetStationGfx(ti->tile)];
image = t->ground_sprite;
if (image & PALETTE_MODIFIER_COLOR) image |= image_or_modificator;