tile.c
author Darkvater
Sun, 29 Jan 2006 19:50:01 +0000
changeset 2919 5a867896b255
parent 2549 f1d3b383d557
child 3017 915fae59d5e0
child 9942 56446313309e
permissions -rw-r--r--
(svn r3475) - Fix: you couldn't remove an item from a list-type of config ingame from the configuration file. Whatever you did, upon restart of OpenTTD those items were still there. To fix this we initialize the first item to NULL in SaveList as it is rebuilt anyways fully.
/* $Id$ */

#include "stdafx.h"
#include "tile.h"

void SetMapExtraBits(TileIndex tile, byte bits)
{
	assert(tile < MapSize());
	SB(_m[tile].extra, 0, 2, bits & 3);
}

uint GetMapExtraBits(TileIndex tile)
{
	assert(tile < MapSize());
	return GB(_m[tile].extra, 0, 2);
}


uint GetTileSlope(TileIndex tile, uint *h)
{
	uint a;
	uint b;
	uint c;
	uint d;
	uint min;
	uint r;

	assert(tile < MapSize());

	if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) {
		if (h != NULL) *h = 0;
		return 0;
	}

	min = a = TileHeight(tile);
	b = TileHeight(tile + TileDiffXY(1, 0));
	if (min >= b) min = b;
	c = TileHeight(tile + TileDiffXY(0, 1));
	if (min >= c) min = c;
	d = TileHeight(tile + TileDiffXY(1, 1));
	if (min >= d) min = d;

	r = 0;
	if ((a -= min) != 0) r += (--a << 4) + 8;
	if ((c -= min) != 0) r += (--c << 4) + 4;
	if ((d -= min) != 0) r += (--d << 4) + 2;
	if ((b -= min) != 0) r += (--b << 4) + 1;

	if (h != NULL)
		*h = min * 8;

	return r;
}

uint GetTileZ(TileIndex tile)
{
	uint h;
	GetTileSlope(tile, &h);
	return h;
}