tile.c
author Darkvater
Thu, 10 Mar 2005 21:44:17 +0000
changeset 1482 46a8146adecf
parent 1335 a635854c23b6
child 1854 8e246ac3d172
permissions -rw-r--r--
(svn r1986) - Fix: free _config_file when shutting down openttd. Strange that Valgrind didn't catch this, kudos to TrueLight
- Feature (small): new command-line option -c <config_file>. You can have OpenTTD load alternative config files with this setup, handy for servers, or for saves from other players if you don't want to rename your own config. This will have to do until all game-related settings are saved ingame. Couldn't find the SF patch, so credits to the guy that wrote it.
#include "stdafx.h"
#include "tile.h"

void SetMapExtraBits(TileIndex tile, byte bits)
{
	assert(tile < MapSize());
	_map_extra_bits[tile >> 2] &= ~(3 << ((tile & 3) * 2));
	_map_extra_bits[tile >> 2] |= (bits&3) << ((tile & 3) * 2);
}

uint GetMapExtraBits(TileIndex tile)
{
	assert(tile < MapSize());
	return (_map_extra_bits[tile >> 2] >> (tile & 3) * 2) & 3;
}


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 + TILE_XY(1,0));
	if (min >= b) min = b;
	c = TileHeight(tile + TILE_XY(0,1));
	if (min >= c) min = c;
	d = TileHeight(tile + TILE_XY(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;
}