Files @ r1859:5fa354f6e5d6
Branch filter:

Location: cpp/openttd-patchpack/source/tile.c

hackykid
(svn r2365) - Change: [refitting] Make refitting capacities for trains newgrf compatible. Train vehicles can now carry twice as much mail/goods as other cargo, and four times as much passengers.
- Fix: [refitting] The refit window now shows the correct refit options for the entire consist. Only if at least one of the vehicles in the train can be refitted to a certain cargo, it is shown in the list.
- Fix: [refitting] When refitting to a cargo which is already carried by some vehicles in the consist, the capacities of those vehicles are taken into account when calculating the new capacity of the train in the refit window.
#include "stdafx.h"
#include "tile.h"

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

uint GetMapExtraBits(TileIndex tile)
{
	assert(tile < MapSize());
	return GB(_map_extra_bits[tile >> 2], (tile & 3) * 2, 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 + 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;
}