# HG changeset patch # User darkvater # Date 1100441403 0 # Node ID ad3dcbfd2d4855ae9065a0fe50e43cef82cc78a8 # Parent 20f8a2faf80961201421d68e809e5f12cb9174b3 (svn r591) -newgrf: Store whole struct StationSpec in SetCustomStation(), not just the rendering data. This will be needed for variational stationspecs (pasky). diff -r 20f8a2faf809 -r ad3dcbfd2d48 grfspecial.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; diff -r 20f8a2faf809 -r ad3dcbfd2d48 rail_cmd.c --- 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; diff -r 20f8a2faf809 -r ad3dcbfd2d48 station.h --- 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 */ diff -r 20f8a2faf809 -r ad3dcbfd2d48 station_cmd.c --- 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)