tile.c
author bjarni
Mon, 31 Oct 2005 12:59:47 +0000
changeset 2574 70a4e3cb85bf
parent 2549 5587f9a38563
child 3017 a75caf4efa2d
permissions -rw-r--r--
(svn r3111) -Fix: [autoreplace] [ 1341783 ] Assertion failure in vehicle.c line 378
running MaybeReplaceVehicle() is now delayed until after the loop in CallVehicleTicks()
This avoids selling the vehicle the loop currently works with (and continues to work with afterwards)
/* $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;
}