(svn r4719) - Newstations: instead of drawing nothing, fall back to the default sprite layout if a station layout specifies so.
authorpeter1138
Wed, 03 May 2006 20:35:41 +0000
changeset 3737 1e4df4eb9298
parent 3736 a0cf9e858d1d
child 3738 4694e7a0e2e4
(svn r4719) - Newstations: instead of drawing nothing, fall back to the default sprite layout if a station layout specifies so.
newgrf.c
rail_cmd.c
station_cmd.c
--- a/newgrf.c	Wed May 03 19:31:00 2006 +0000
+++ b/newgrf.c	Wed May 03 20:35:41 2006 +0000
@@ -810,12 +810,9 @@
 					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 @@
 						dts->ground_sprite = ground_sprite;
 					}
 
-					dts->seq = NULL;
 					while (buf < *bufp + len) {
 						DrawTileSeqStruct *dtss;
 
@@ -861,15 +857,11 @@
 					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;
-					}
-
-					dts->seq = NULL;
-					while (1) {
+					if (dts->ground_sprite == 0) continue;
+
+					while (true) {
 						DrawTileSeqStruct *dtss;
 
 						// no relative bounding box support
--- a/rail_cmd.c	Wed May 03 19:31:00 2006 +0000
+++ b/rail_cmd.c	Wed May 03 20:35:41 2006 +0000
@@ -1335,21 +1335,24 @@
 				 * 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;
-
-				DrawGroundSprite(image);
-
-				if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti);
+				/* 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;
 
-				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
-					);
+					DrawGroundSprite(image);
+
+					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
+						);
+					}
+					return;
 				}
-				return;
 			}
 		}
 
@@ -1357,7 +1360,7 @@
 
 		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
--- a/station_cmd.c	Wed May 03 19:31:00 2006 +0000
+++ b/station_cmd.c	Wed May 03 20:35:41 2006 +0000
@@ -1996,7 +1996,7 @@
 		}
 	}
 
-	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;