summaryrefslogtreecommitdiff
path: root/src/newgrf_station.cpp
diff options
context:
space:
mode:
authorglx <glx@openttd.org>2007-12-21 22:11:55 +0000
committerglx <glx@openttd.org>2007-12-21 22:11:55 +0000
commit4fc66235cb17456f8b7f09f8ba50bff6017c25d5 (patch)
tree7feb58eb84790d15316c0e21f6240bf81baeabb7 /src/newgrf_station.cpp
parentc32c07e238d8f3ca428d89df1182ec1c8bab1d44 (diff)
downloadopenttd-4fc66235cb17456f8b7f09f8ba50bff6017c25d5.tar.xz
(svn r11679) -Add: [newgrf] support for station vars 67 and 68
Diffstat (limited to 'src/newgrf_station.cpp')
-rw-r--r--src/newgrf_station.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp
index 07502a139..876a28139 100644
--- a/src/newgrf_station.cpp
+++ b/src/newgrf_station.cpp
@@ -439,6 +439,34 @@ static uint32 StationGetVariable(const ResolverObject *object, byte variable, by
/* Variables which use the parameter */
/* Variables 0x60 to 0x65 are handled separately below */
+ case 0x67: { // Land info of nearby tiles
+ Axis axis = GetRailStationAxis(tile);
+
+ if (parameter != 0) tile = GetNearbyTile(parameter, tile); // only perform if it is required
+ byte tile_type = GetTerrainType(tile) << 2 | (IsTileType(tile, MP_WATER) ? 1 : 0) << 1;
+
+ uint z;
+ Slope tileh = GetTileSlope(tile, &z);
+ bool swap = (axis == AXIS_Y && HasBit(tileh, 0) != HasBit(tileh, 2));
+ return GetTileType(tile) << 24 | z << 16 | tile_type << 8 | (tileh ^ (swap ? 5 : 0));
+ }
+
+ case 0x68: { // Station info of nearby tiles
+ TileIndex nearby_tile = GetNearbyTile(parameter, tile);
+
+ if (!IsRailwayStationTile(nearby_tile)) return 0xFFFFFFFF;
+
+ uint32 grfid = st->speclist[GetCustomStationSpecIndex(tile)].grfid;
+ bool perpendicular = GetRailStationAxis(tile) != GetRailStationAxis(nearby_tile);
+ bool same_station = st->TileBelongsToRailStation(nearby_tile);
+ uint32 res = GB(GetStationGfx(nearby_tile), 1, 2) << 12 | !!perpendicular << 11 | !!same_station << 10;
+
+ if (IsCustomStationSpecIndex(nearby_tile)) {
+ const StationSpecList ssl = GetStationByTile(nearby_tile)->speclist[GetCustomStationSpecIndex(nearby_tile)];
+ res |= 1 << (ssl.grfid != grfid ? 9 : 8) | ssl.localidx;
+ }
+ return res;
+ }
/* General station properties */
case 0x82: return 50;