From ccc496ba2ce07be7bd8faf0a084e983dbed5e80b Mon Sep 17 00:00:00 2001 From: darkvater Date: Sun, 14 Nov 2004 14:10:03 +0000 Subject: [PATCH] (svn r591) -newgrf: Store whole struct StationSpec in SetCustomStation(), not just the rendering data. This will be needed for variational stationspecs (pasky). --- grfspecial.c | 11 +---------- rail_cmd.c | 4 ++-- station.h | 12 ++++++++++-- station_cmd.c | 22 +++++++++++----------- 4 files changed, 24 insertions(+), 25 deletions(-) diff --git a/grfspecial.c b/grfspecial.c index 334d707332..55b813bd57 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 df765bc058..12bca7fb4c 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 826e209610..73ac8f8f76 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 8e0b99ae62..05b2358331 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(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)