(svn r591) -newgrf: Store whole struct StationSpec in SetCustomStation(), not just the rendering data. This will be needed for variational stationspecs (pasky).
--- 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)