diff options
author | planetmaker <planetmaker@openttd.org> | 2013-05-06 20:48:18 +0000 |
---|---|---|
committer | planetmaker <planetmaker@openttd.org> | 2013-05-06 20:48:18 +0000 |
commit | a8ba74843439e1ad1157db7621cbd1a5ae10e428 (patch) | |
tree | 5d3f98a9d2544cb8d344f3c45f9126a64586e4f3 | |
parent | 26dd535c6b33c54b4d4218f1c90ddb527239bca4 (diff) | |
download | openttd-a8ba74843439e1ad1157db7621cbd1a5ae10e428.tar.xz |
(svn r25229) -Feature: [NewGRF] Variable 0x82 for canals and rivers (dike map)
-rw-r--r-- | src/newgrf_canal.cpp | 24 | ||||
-rw-r--r-- | src/water.h | 2 | ||||
-rw-r--r-- | src/water_cmd.cpp | 2 |
3 files changed, 27 insertions, 1 deletions
diff --git a/src/newgrf_canal.cpp b/src/newgrf_canal.cpp index 13b7e15d6..ef678a0cc 100644 --- a/src/newgrf_canal.cpp +++ b/src/newgrf_canal.cpp @@ -13,6 +13,7 @@ #include "debug.h" #include "newgrf_spritegroup.h" #include "newgrf_canal.h" +#include "water.h" #include "water_map.h" /** Table of canal 'feature' sprite groups */ @@ -66,6 +67,29 @@ struct CanalResolverObject : public ResolverObject { /* Terrain type */ case 0x81: return GetTerrainType(this->tile); + /* Dike map: Connectivity info for river and canal tiles + * + * Assignment of bits to directions defined in agreement with + * http://projects.tt-forums.net/projects/ttdpatch/repository/revisions/2367/entry/trunk/patches/water.asm#L879 + * 7 + * 3 0 + * 6 * 4 + * 2 1 + * 5 + */ + case 0x82: { + uint32 connectivity = + (!IsWateredTile(TILE_ADDXY(tile, -1, 0), DIR_SW) << 0) // NE + + (!IsWateredTile(TILE_ADDXY(tile, 0, 1), DIR_NW) << 1) // SE + + (!IsWateredTile(TILE_ADDXY(tile, 1, 0), DIR_NE) << 2) // SW + + (!IsWateredTile(TILE_ADDXY(tile, 0, -1), DIR_SE) << 3) // NW + + (!IsWateredTile(TILE_ADDXY(tile, -1, 1), DIR_W) << 4) // E + + (!IsWateredTile(TILE_ADDXY(tile, 1, 1), DIR_N) << 5) // S + + (!IsWateredTile(TILE_ADDXY(tile, 1, -1), DIR_E) << 6) // W + + (!IsWateredTile(TILE_ADDXY(tile, -1, -1), DIR_S) << 7); // N + return connectivity; + } + /* Random data for river or canal tiles, otherwise zero */ case 0x83: return IsTileType(this->tile, MP_WATER) ? GetWaterTileRandomBits(this->tile) : 0; } diff --git a/src/water.h b/src/water.h index 1e8152f73..cb7237fc7 100644 --- a/src/water.h +++ b/src/water.h @@ -41,6 +41,8 @@ void MakeWaterKeepingClass(TileIndex tile, Owner o); bool RiverModifyDesertZone(TileIndex tile, void *data); +bool IsWateredTile(TileIndex tile, Direction from); + /** * Calculates the maintenance cost of a number of canal tiles. * @param num Number of canal tiles. diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index ccda7fb06..b99741cfe 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -548,7 +548,7 @@ static CommandCost ClearTile_Water(TileIndex tile, DoCommandFlag flags) * @return true iff the tile is water in the view of 'from'. * */ -static bool IsWateredTile(TileIndex tile, Direction from) +bool IsWateredTile(TileIndex tile, Direction from) { switch (GetTileType(tile)) { case MP_WATER: |