(svn r11679) -Add: [newgrf] support for station vars 67 and 68
authorglx
Fri, 21 Dec 2007 22:11:55 +0000
changeset 8614 21126f54f5c8
parent 8613 e4df81162916
child 8615 6b91ca653bad
(svn r11679) -Add: [newgrf] support for station vars 67 and 68
src/newgrf_commons.cpp
src/newgrf_station.cpp
--- a/src/newgrf_commons.cpp	Fri Dec 21 22:08:59 2007 +0000
+++ b/src/newgrf_commons.cpp	Fri Dec 21 22:11:55 2007 +0000
@@ -13,6 +13,7 @@
 #include "newgrf.h"
 #include "newgrf_commons.h"
 #include "tile_map.h"
+#include "station_map.h"
 
 /** Constructor of generic class
  * @param offset end of original data for this entity. i.e: houses = 110
@@ -277,6 +278,9 @@
 	if (x >= 8) x -= 16;
 	if (y >= 8) y -= 16;
 
+	/* Swap width and height depending on axis for railway stations */
+	if (IsRailwayStationTile(tile) && GetRailStationAxis(tile) == AXIS_X) Swap(x, y);
+
 	/* Make sure we never roam outside of the map */
 	return TILE_MASK(tile + TileDiffXY(x, y));
 }
--- a/src/newgrf_station.cpp	Fri Dec 21 22:08:59 2007 +0000
+++ b/src/newgrf_station.cpp	Fri Dec 21 22:11:55 2007 +0000
@@ -439,6 +439,34 @@
 
 		/* 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;