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

This commit is contained in:
darkvater 2004-11-14 14:10:03 +00:00
parent 5663926aaf
commit ccc496ba2c
4 changed files with 24 additions and 25 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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 */

View File

@ -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)