summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--grfspecial.c11
-rw-r--r--rail_cmd.c4
-rw-r--r--station.h12
-rw-r--r--station_cmd.c14
4 files changed, 20 insertions, 21 deletions
diff --git a/grfspecial.c b/grfspecial.c
index 334d70733..55b813bd5 100644
--- a/grfspecial.c
+++ b/grfspecial.c
@@ -21,12 +21,6 @@ extern int _skip_sprites;
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 @@ static void NewVehicle_SpriteGroupMapping(byte *buf, int len)
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;
diff --git a/rail_cmd.c b/rail_cmd.c
index df765bc05..12bca7fb4 100644
--- a/rail_cmd.c
+++ b/rail_cmd.c
@@ -1544,7 +1544,7 @@ static void DrawTile_Track(TileInfo *ti)
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 DrawTrainDepotSprite(int x, int y, int image, int railtype)
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;
diff --git a/station.h b/station.h
index 826e20961..73ac8f8f7 100644
--- a/station.h
+++ b/station.h
@@ -108,8 +108,16 @@ typedef struct DrawTileSprites {
#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 */
diff --git a/station_cmd.c b/station_cmd.c
index 8e0b99ae6..05b235833 100644
--- a/station_cmd.c
+++ b/station_cmd.c
@@ -964,22 +964,22 @@ uint GetStationPlatforms(Station *st, uint tile)
* file used non-contignuous station ids. --pasky */
static int _waypoint_highest_id = -1;
-static DrawTileSprites _waypoint_data[256][8];
+static struct StationSpec _waypoint_data[256];
-void SetCustomStation(uint32 classid, byte stid, DrawTileSprites *data, byte tiles)
+void SetCustomStation(byte stid, struct StationSpec *spec)
{
- assert(classid == 'WAYP');
+ assert(spec->classid == 'WAYP');
if (stid > _waypoint_highest_id)
_waypoint_highest_id = stid;
- memcpy(_waypoint_data[stid], data, sizeof(DrawTileSprites) * tiles);
+ memcpy(&_waypoint_data[stid], spec, sizeof(*spec));
}
-DrawTileSprites *GetCustomStation(uint32 classid, byte stid)
+DrawTileSprites *GetCustomStationRenderdata(uint32 classid, byte stid)
{
assert(classid == 'WAYP');
- if (stid > _waypoint_highest_id || !_waypoint_data || !_waypoint_data[stid])
+ if (stid > _waypoint_highest_id)
return NULL;
- return _waypoint_data[stid];
+ return _waypoint_data[stid].renderdata;
}
int GetCustomStationsCount(uint32 classid)