darkvater@1213: #include "stdafx.h" tron@1211: #include "tile.h" tron@1211: tron@1211: void SetMapExtraBits(TileIndex tile, byte bits) tron@1211: { tron@1211: assert(tile < MapSize()); tron@1211: _map_extra_bits[tile >> 2] &= ~(3 << ((tile & 3) * 2)); tron@1211: _map_extra_bits[tile >> 2] |= (bits&3) << ((tile & 3) * 2); tron@1211: } tron@1211: tron@1211: uint GetMapExtraBits(TileIndex tile) tron@1211: { tron@1211: assert(tile < MapSize()); tron@1211: return (_map_extra_bits[tile >> 2] >> (tile & 3) * 2) & 3; tron@1211: } tron@1335: tron@1335: tron@1335: uint GetTileSlope(TileIndex tile, uint *h) tron@1335: { tron@1335: uint a; tron@1335: uint b; tron@1335: uint c; tron@1335: uint d; tron@1335: uint min; tron@1335: uint r; tron@1335: tron@1335: assert(tile < MapSize()); tron@1335: tron@1335: if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) { tron@1335: if (h != NULL) *h = 0; tron@1335: return 0; tron@1335: } tron@1335: tron@1335: min = a = TileHeight(tile); tron@1335: b = TileHeight(tile + TILE_XY(1,0)); tron@1335: if (min >= b) min = b; tron@1335: c = TileHeight(tile + TILE_XY(0,1)); tron@1335: if (min >= c) min = c; tron@1335: d = TileHeight(tile + TILE_XY(1,1)); tron@1335: if (min >= d) min = d; tron@1335: tron@1335: r = 0; tron@1335: if ((a -= min) != 0) { r += (--a << 4) + 8; } tron@1335: if ((c -= min) != 0) { r += (--c << 4) + 4; } tron@1335: if ((d -= min) != 0) { r += (--d << 4) + 2; } tron@1335: if ((b -= min) != 0) { r += (--b << 4) + 1; } tron@1335: tron@1335: if (h != NULL) tron@1335: *h = min * 8; tron@1335: tron@1335: return r; tron@1335: } tron@1335: tron@1335: uint GetTileZ(TileIndex tile) tron@1335: { tron@1335: uint h; tron@1335: GetTileSlope(tile, &h); tron@1335: return h; tron@1335: }