Changeset - r20229:c02a750a3deb
[Not reviewed]
master
0 3 0
planetmaker - 11 years ago 2013-05-06 20:48:18
planetmaker@openttd.org
(svn r25229) -Feature: [NewGRF] Variable 0x82 for canals and rivers (dike map)
3 files changed with 27 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/newgrf_canal.cpp
Show inline comments
 
@@ -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 Reso
 
		/* 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;
 
	}
src/water.h
Show inline comments
 
@@ -41,6 +41,8 @@ void MakeWaterKeepingClass(TileIndex til
 

	
 
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.
src/water_cmd.cpp
Show inline comments
 
@@ -548,7 +548,7 @@ static CommandCost ClearTile_Water(TileI
 
 * @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:
0 comments (0 inline, 0 general)