diff options
-rw-r--r-- | grfspecial.c | 11 | ||||
-rw-r--r-- | rail_cmd.c | 4 | ||||
-rw-r--r-- | station.h | 12 | ||||
-rw-r--r-- | station_cmd.c | 14 |
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; @@ -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) |