(svn r591) -newgrf: Store whole struct StationSpec in SetCustomStation(), not just the rendering data. This will be needed for variational stationspecs (pasky).
authordarkvater
Sun, 14 Nov 2004 14:10:03 +0000
changeset 399 b156fa8bcd63
parent 398 160e40c179fd
child 400 ad545734c8de
(svn r591) -newgrf: Store whole struct StationSpec in SetCustomStation(), not just the rendering data. This will be needed for variational stationspecs (pasky).
grfspecial.c
rail_cmd.c
station.h
station_cmd.c
--- a/grfspecial.c	Sun Nov 14 13:59:11 2004 +0000
+++ b/grfspecial.c	Sun Nov 14 14:10:03 2004 +0000
@@ -21,12 +21,6 @@
 extern int _replace_sprites_count[16];
 extern int _replace_sprites_offset[16];
 
-struct StationSpec {
-	uint32 classid;
-	byte tiles;
-	DrawTileSprites renderdata[8];
-};
-
 struct GRFFile {
 	char *filename;
 	uint32 grfid;
@@ -1225,10 +1219,7 @@
 					seq->image += _cur_grffile->spritegroups[groupid].loading[0];
 				}
 			}
-			/* FIXME: This means several GRF files defining new stations
-			 * will override each other, but the stid should be GRF-specific
-			 * instead! --pasky */
-			SetCustomStation(stat->classid, stid, stat->renderdata, stat->tiles);
+			SetCustomStation(stid, stat);
 			stat->classid = 0;
 		}
 		return;
--- a/rail_cmd.c	Sun Nov 14 13:59:11 2004 +0000
+++ b/rail_cmd.c	Sun Nov 14 14:10:03 2004 +0000
@@ -1544,7 +1544,7 @@
 
 		if (!IS_RAIL_DEPOT(m5) && IS_RAIL_WAYPOINT(m5) && _map3_lo[ti->tile]&16) {
 			// look for customization
-			DrawTileSprites *cust = GetCustomStation('WAYP', _map3_hi[ti->tile]);
+			DrawTileSprites *cust = GetCustomStationRenderdata('WAYP', _map3_hi[ti->tile]);
 
 			if (cust) {
 				DrawTileSeqStruct const *seq;
@@ -1623,7 +1623,7 @@
 void DrawWaypointSprite(int x, int y, int stat_id)
 {
 	// TODO: We should use supersets with cargo-id FF, if available. --pasky
-	DrawTileSprites *cust = GetCustomStation('WAYP', stat_id);
+	DrawTileSprites *cust = GetCustomStationRenderdata('WAYP', stat_id);
 	DrawTileSeqStruct const *seq;
 	uint32 ormod, img;
 
--- a/station.h	Sun Nov 14 13:59:11 2004 +0000
+++ b/station.h	Sun Nov 14 14:10:03 2004 +0000
@@ -108,8 +108,16 @@
 
 #define foreach_draw_tile_seq(idx, list) for (idx = list; ((byte) idx->delta_x) != 0x80; idx++)
 
-void SetCustomStation(uint32 classid, byte stid, DrawTileSprites *data, byte tiles);
-DrawTileSprites *GetCustomStation(uint32 classid, byte stid);
+
+struct StationSpec {
+	int globalidx;
+	uint32 classid;
+	byte tiles;
+	DrawTileSprites renderdata[8];
+};
+
+void SetCustomStation(byte stid, struct StationSpec *spec);
+DrawTileSprites *GetCustomStationRenderdata(uint32 classid, byte stid);
 int GetCustomStationsCount(uint32 classid);
 
 #endif /* STATION_H */
--- a/station_cmd.c	Sun Nov 14 13:59:11 2004 +0000
+++ b/station_cmd.c	Sun Nov 14 14:10:03 2004 +0000
@@ -964,22 +964,22 @@
  * file used non-contignuous station ids. --pasky */
 
 static int _waypoint_highest_id = -1;
-static DrawTileSprites _waypoint_data[256][8];
-
-void SetCustomStation(uint32 classid, byte stid, DrawTileSprites *data, byte tiles)
+static struct StationSpec _waypoint_data[256];
+
+void SetCustomStation(byte stid, struct StationSpec *spec)
+{
+	assert(spec->classid == 'WAYP');
+	if (stid > _waypoint_highest_id)
+		_waypoint_highest_id = stid;
+	memcpy(&_waypoint_data[stid], spec, sizeof(*spec));
+}
+
+DrawTileSprites *GetCustomStationRenderdata(uint32 classid, byte stid)
 {
 	assert(classid == 'WAYP');
 	if (stid > _waypoint_highest_id)
-		_waypoint_highest_id = stid;
-	memcpy(_waypoint_data[stid], data, sizeof(DrawTileSprites) * tiles);
-}
-
-DrawTileSprites *GetCustomStation(uint32 classid, byte stid)
-{
-	assert(classid == 'WAYP');
-	if (stid > _waypoint_highest_id || !_waypoint_data || !_waypoint_data[stid])
 		return NULL;
-	return _waypoint_data[stid];
+	return _waypoint_data[stid].renderdata;
 }
 
 int GetCustomStationsCount(uint32 classid)