diff options
-rw-r--r-- | src/newgrf_commons.cpp | 16 | ||||
-rw-r--r-- | src/newgrf_commons.h | 1 | ||||
-rw-r--r-- | src/newgrf_house.cpp | 8 | ||||
-rw-r--r-- | src/newgrf_industrytiles.cpp | 10 | ||||
-rw-r--r-- | src/newgrf_station.cpp | 9 |
5 files changed, 24 insertions, 20 deletions
diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp index 944161a0a..d10b45138 100644 --- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -285,3 +285,19 @@ TileIndex GetNearbyTile(byte parameter, TileIndex tile) /* Make sure we never roam outside of the map */ return TILE_MASK(tile + TileDiffXY(x, y)); } + +/** + * Common part of station var 0x67 , house var 0x62, indtile var 0x60, industry var 0x62. + * + * @param tile the tile of interest. + * @return 0czzbbss: c = TileType; zz = TileZ; bb: 7-3 zero, 4-2 TerrainType, 1 water/shore, 0 zero; ss = TileSlope + */ +uint32 GetNearbyTileInformation(TileIndex tile) +{ + TileType tile_type = GetTileType(tile); + + uint z; + Slope tileh = GetTileSlope(tile, &z); + byte terrain_type = GetTerrainType(tile) << 2 | (tile_type == MP_WATER ? 1 : 0) << 1; + return tile_type << 24 | z << 16 | terrain_type << 8 | tileh; +} diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h index c4526a89c..5b9dea9e7 100644 --- a/src/newgrf_commons.h +++ b/src/newgrf_commons.h @@ -93,5 +93,6 @@ extern IndustryTileOverrideManager _industile_mngr; uint32 GetTerrainType(TileIndex tile); TileIndex GetNearbyTile(byte parameter, TileIndex tile); +uint32 GetNearbyTileInformation(TileIndex tile); #endif /* NEWGRF_COMMONS_H */ diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index 31aa4e972..44b615f2b 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -170,14 +170,8 @@ static uint32 GetGRFParameter(HouseID house_id, byte parameter) uint32 GetNearbyTileInformation(byte parameter, TileIndex tile) { - uint32 tile_type; - tile = GetNearbyTile(parameter, tile); - tile_type = GetTerrainType(tile) << 2 | (IsTileType(tile, MP_WATER) ? 1 : 0) << 1; - - uint z; - Slope tileh = GetTileSlope(tile, &z); - return GetTileType(tile) << 24 | z << 16 | tile_type << 8 | tileh; + return GetNearbyTileInformation(tile); } /** diff --git a/src/newgrf_industrytiles.cpp b/src/newgrf_industrytiles.cpp index fcf4105bc..0a964d115 100644 --- a/src/newgrf_industrytiles.cpp +++ b/src/newgrf_industrytiles.cpp @@ -45,16 +45,10 @@ static uint32 GetGRFParameter(IndustryGfx indtile_id, byte parameter) */ uint32 GetNearbyIndustryTileInformation(byte parameter, TileIndex tile, IndustryID index) { - byte tile_type; - bool is_same_industry; - if (parameter != 0) tile = GetNearbyTile(parameter, tile); // only perform if it is required - is_same_industry = (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == index); - tile_type = GetTerrainType(tile) << 2 | (IsTileType(tile, MP_WATER) ? 1 : 0) << 1 | (is_same_industry ? 1 : 0); + bool is_same_industry = (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == index); - uint z; - Slope tileh = GetTileSlope(tile, &z); - return GetTileType(tile) << 24 | z << 16 | tile_type << 8 | tileh; + return GetNearbyTileInformation(tile) | (is_same_industry ? 1 : 0) << 8; } /** This is the position of the tile relative to the northernmost tile of the industry. diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index 7eaf6164b..626e50821 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -426,12 +426,11 @@ static uint32 StationGetVariable(const ResolverObject *object, byte variable, by 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)); + Slope tileh = GetTileSlope(tile, NULL); + bool swap = (axis == AXIS_Y && HasBit(tileh, SLOPE_W) != HasBit(tileh, SLOPE_E)); + + return GetNearbyTileInformation(tile) ^ (swap ? SLOPE_EW : 0); } case 0x68: { // Station info of nearby tiles |