Changeset - r3505:7910967480fd
[Not reviewed]
master
0 3 0
peter1138 - 18 years ago 2006-04-11 13:00:06
peter1138@openttd.org
(svn r4356) - NewGRF: Load more newstation properties.
3 files changed with 73 insertions and 71 deletions:
0 comments (0 inline, 0 general)
newgrf.c
Show inline comments
 
@@ -758,9 +758,10 @@ static bool AircraftVehicleChangeInfo(ui
 

	
 
static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int len)
 
{
 
	StationSpec *stat;
 
	byte *buf = *bufp;
 
	int i;
 
	int ret = 0;
 
	bool ret = false;
 

	
 
	/* Allocate station specs if necessary */
 
	if (_cur_grffile->num_stations < stid + numinfo) {
 
@@ -773,25 +774,24 @@ static bool StationChangeInfo(uint stid,
 
		}
 
	}
 

	
 
	stat = &_cur_grffile->stations[stid];
 

	
 
	switch (prop) {
 
		case 0x08:
 
		{	/* Class ID */
 
		case 0x08: /* Class ID */
 
			FOR_EACH_OBJECT {
 
				StationSpec *stat = &_cur_grffile->stations[stid + i];
 
				uint32 classid;
 

	
 
				/* classid, for a change, is always little-endian */
 
				/* classid, for a change, is big-endian */
 
				classid = *(buf++) << 24;
 
				classid |= *(buf++) << 16;
 
				classid |= *(buf++) << 8;
 
				classid |= *(buf++);
 

	
 
				stat->sclass = AllocateStationClass(classid);
 
				stat[i].sclass = AllocateStationClass(classid);
 
			}
 
			break;
 
		}
 
		case 0x09:
 
		{	/* Define sprite layout */
 

	
 
		case 0x09: /* Define sprite layout */
 
			FOR_EACH_OBJECT {
 
				StationSpec *stat = &_cur_grffile->stations[stid + i];
 
				int t;
 
@@ -838,9 +838,8 @@ static bool StationChangeInfo(uint stid,
 
				}
 
			}
 
			break;
 
		}
 
		case 0x0a:
 
		{	/* Copy sprite layout */
 

	
 
		case 0x0A: /* Copy sprite layout */
 
			FOR_EACH_OBJECT {
 
				StationSpec *stat = &_cur_grffile->stations[stid + i];
 
				byte srcid = grf_load_byte(&buf);
 
@@ -876,36 +875,20 @@ static bool StationChangeInfo(uint stid,
 
				}
 
			}
 
			break;
 
		}
 
		case 0x0b:
 
		{	/* Callback */
 
			/* TODO */
 
			FOR_EACH_OBJECT {
 
				grf_load_byte(&buf);
 
			}
 
			ret = 1;
 

	
 
		case 0x0B: /* Callback mask */
 
			FOR_EACH_OBJECT stat[i].callbackmask = grf_load_byte(&buf);
 
			break;
 
		}
 
		case 0x0C:
 
		{	/* Platforms number */
 
			FOR_EACH_OBJECT {
 
				StationSpec *stat = &_cur_grffile->stations[stid + i];
 

	
 
				stat->allowed_platforms = ~grf_load_byte(&buf);
 
			}
 

	
 
		case 0x0C: /* Disallowed number of platforms */
 
			FOR_EACH_OBJECT stat[i].disallowed_platforms = grf_load_byte(&buf);
 
			break;
 
		}
 
		case 0x0D:
 
		{	/* Platforms length */
 
			FOR_EACH_OBJECT {
 
				StationSpec *stat = &_cur_grffile->stations[stid + i];
 

	
 
				stat->allowed_lengths = ~grf_load_byte(&buf);
 
			}
 

	
 
		case 0x0D: /* Disallowed platform lengths */
 
			FOR_EACH_OBJECT stat[i].disallowed_lengths = grf_load_byte(&buf);
 
			break;
 
		}
 
		case 0x0e:
 
		{	/* Define custom layout */
 

	
 
		case 0x0E: /* Define custom layout */
 
			FOR_EACH_OBJECT {
 
				StationSpec *stat = &_cur_grffile->stations[stid + i];
 

	
 
@@ -957,45 +940,41 @@ static bool StationChangeInfo(uint stid,
 
				}
 
			}
 
			break;
 
		}
 
		case 0x0f:
 
		{	/* Copy custom layout */
 

	
 
		case 0x0F: /* Copy custom layout */
 
			/* TODO */
 
			FOR_EACH_OBJECT {
 
				grf_load_byte(&buf);
 
			}
 
			ret = 1;
 
			ret = true;
 
			break;
 

	
 
		case 0x10: /* Little/lots cargo threshold */
 
			FOR_EACH_OBJECT stat[i].cargo_threshold = grf_load_word(&buf);
 
			break;
 
		}
 
		case 0x10:
 
		{	/* Little/lots cargo threshold */
 
			/* TODO */
 
			FOR_EACH_OBJECT {
 
				grf_load_word(&buf);
 
			}
 
			ret = 1;
 

	
 
		case 0x11: /* Pylon placement */
 
			FOR_EACH_OBJECT stat[i].pylons = grf_load_byte(&buf);
 
			break;
 

	
 
		case 0x12: /* Cargo types for random triggers */
 
			FOR_EACH_OBJECT stat[i].cargo_triggers = grf_load_dword(&buf);
 
			break;
 
		}
 
		case 0x11:
 
		{	/* Pylon placement */
 
			/* TODO; makes sense only for electrified tracks */
 
			FOR_EACH_OBJECT {
 
				grf_load_word(&buf);
 
			}
 
			ret = 1;
 

	
 
		case 0x13: /* General flags */
 
			FOR_EACH_OBJECT stat[i].flags = grf_load_byte(&buf);
 
			break;
 

	
 
		case 0x14: /* Overhead wire placement */
 
			FOR_EACH_OBJECT stat[i].wires = grf_load_byte(&buf);
 
			break;
 
		}
 
		case 0x12:
 
		{	/* Cargo types for random triggers */
 
			/* TODO */
 
			FOR_EACH_OBJECT {
 
				grf_load_dword(&buf);
 
			}
 
			ret = 1;
 

	
 
		case 0x15: /* Blocked tiles */
 
			FOR_EACH_OBJECT stat[i].blocked = grf_load_byte(&buf);
 
			break;
 
		}
 

	
 
		default:
 
			ret = 1;
 
			ret = true;
 
			break;
 
	}
 

	
newgrf_callbacks.h
Show inline comments
 
@@ -42,6 +42,14 @@ enum VehicleCallbackMask {
 
};
 

	
 
/**
 
 * Callback masks for stations.
 
 */
 
enum StationCallbackMask {
 
	CBM_STATION_AVAIL = 0, ///< Availability of station in construction window
 
	CBM_CUSTOM_LAYOUT = 1, ///< Use callback to select a tile layout to use
 
};
 

	
 
/**
 
 * Result of a failed callback.
 
 */
 
enum {
newgrf_station.h
Show inline comments
 
@@ -27,12 +27,12 @@ typedef struct stationspec {
 
	 * Bitmask of number of platforms available for the station.
 
	 * 0..6 correpsond to 1..7, while bit 7 corresponds to >7 platforms.
 
	 */
 
	byte allowed_platforms;
 
	byte disallowed_platforms;
 
	/**
 
	 * Bitmask of platform lengths available for the station.
 
	 * 0..6 correpsond to 1..7, while bit 7 corresponds to >7 tiles long.
 
	 */
 
	byte allowed_lengths;
 
	byte disallowed_lengths;
 

	
 
	/** Number of tile layouts.
 
	 * A minimum of 8 is required is required for stations.
 
@@ -44,6 +44,21 @@ typedef struct stationspec {
 
	int tiles;
 
	DrawTileSprites *renderdata; ///< Array of tile layouts.
 

	
 
	/** Cargo threshold for choosing between little and lots of cargo
 
	 * @note little/lots are equivalent to the moving/loading states for vehicles
 
	 */
 
	uint16 cargo_threshold;
 

	
 
	uint32 cargo_triggers; ///< Bitmask of cargo types which cause trigger re-randomizing
 

	
 
	byte callbackmask; ///< Bitmask of callbacks to use, @see newgrf_callbacks.h
 

	
 
	byte flags; ///< Bitmask of flags, bit 0: use different sprite set; bit 1: divide cargo about by station size
 

	
 
	byte pylons;  ///< Bitmask of base tiles (0 - 7) which should contain elrail pylons
 
	byte wires;   ///< Bitmask of base tiles (0 - 7) which should contain elrail wires
 
	byte blocked; ///< Bitmask of base tiles (0 - 7) which are blocked to trains
 

	
 
	byte lengths;
 
	byte *platforms;
 
	StationLayout **layouts;
0 comments (0 inline, 0 general)