Mercurial > hg > openttd
changeset 8118:854a73832899 draft
(svn r11679) -Add: [newgrf] support for station vars 67 and 68
author | glx <glx@openttd.org> |
---|---|
date | Fri, 21 Dec 2007 22:11:55 +0000 |
parents | 47e71a368020 |
children | b6ec923e9fa8 |
files | src/newgrf_commons.cpp src/newgrf_station.cpp |
diffstat | 2 files changed, 32 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -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 +++ b/src/newgrf_station.cpp @@ -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;