Files @ r15899:3bbe04d427d2
Branch filter:

Location: cpp/openttd-patchpack/source/src/landscape.h - annotation

rubidium
(svn r20593) -Fix: (rlongago, r20547): long ago the service interval was int16, after which is got converted to Date except in the order backup. Much later I copied the savegame snippets from a vehicle and applied that on the order backup. Presto, reading/writing 32 bits (of Date) into 16 bits of ancient style service interval. That would then "spoil" the name pointer and that eventually crashes OpenTTD as it's likely to be an invalid pointer.
r6343:4d2d12eee7b9
r6343:4d2d12eee7b9
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r9111:983de9c5a848
r6343:4d2d12eee7b9
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r8121:d05602c69734
r8138:f851b4cbdad1
r8119:8fdb3a371896
r15173:a59afd6301a6
r15173:a59afd6301a6
r6343:4d2d12eee7b9
r15610:623a23fb6560
r15610:623a23fb6560
r15613:193c12018337
r15613:193c12018337
r6343:4d2d12eee7b9
r10260:88d82a40120c
r10260:88d82a40120c
r11206:4cc3157af9d3
r6343:4d2d12eee7b9
r6343:4d2d12eee7b9
r11962:0e3a6981e508
r6343:4d2d12eee7b9
r11962:0e3a6981e508
r11962:0e3a6981e508
r11962:0e3a6981e508
r11962:0e3a6981e508
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r7728:ec77c9b03910
r7770:09918df1f6fd
r10647:62911ec68e89
r6453:b0b56773284a
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r14458:24b07b6f49f4
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r14461:1eaa78e19f25
r7335:93bf5f4b6ce4
r7335:93bf5f4b6ce4
r14150:e63335af522e
r14150:e63335af522e
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
r6453:b0b56773284a
/* $Id$ */

/*
 * This file is part of OpenTTD.
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 */

/** @file landscape.h Functions related to OTTD's landscape. */

#ifndef LANDSCAPE_H
#define LANDSCAPE_H

#include "core/geometry_type.hpp"
#include "tile_cmd.h"

static const uint SNOW_LINE_MONTHS = 12; ///< Number of months in the snow line table.
static const uint SNOW_LINE_DAYS   = 32; ///< Number of days in each month in the snow line table.

/**
 * Structure describing the height of the snow line each day of the year
 * @ingroup SnowLineGroup
 */
struct SnowLine {
	byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]; ///< Height of the snow line each day of the year
	byte highest_value; ///< Highest snow line of the year
	byte lowest_value;  ///< Lowest snow line of the year
};

bool IsSnowLineSet();
void SetSnowLine(byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]);
byte GetSnowLine();
byte HighestSnowLine();
byte LowestSnowLine();
void ClearSnowLine();

uint GetPartialZ(int x, int y, Slope corners);
uint GetSlopeZ(int x, int y);
void GetSlopeZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2);
int GetSlopeZInCorner(Slope tileh, Corner corner);
Slope GetFoundationSlope(TileIndex tile, uint *z);

/**
 * Map 3D world or tile coordinate to equivalent 2D coordinate as used in the viewports and smallmap.
 * @param x X world or tile coordinate (runs in SW direction in the 2D view).
 * @param y Y world or tile coordinate (runs in SE direction in the 2D view).
 * @param z Z world or tile coordinate (runs in N direction in the 2D view).
 * @return Equivalent coordinate in the 2D view.
 * @see RemapCoords2
 */
static inline Point RemapCoords(int x, int y, int z)
{
	Point pt;
	pt.x = (y - x) * 2;
	pt.y = y + x - z;
	return pt;
}

/**
 * Map 3D world or tile coordinate to equivalent 2D coordinate as used in the viewports and smallmap.
 * Same as #RemapCoords, except the Z coordinate is read from the map.
 * @param x X world or tile coordinate (runs in SW direction in the 2D view).
 * @param y Y world or tile coordinate (runs in SE direction in the 2D view).
 * @return Equivalent coordinate in the 2D view.
 * @see RemapCoords
 */
static inline Point RemapCoords2(int x, int y)
{
	return RemapCoords(x, y, GetSlopeZ(x, y));
}

/**
 * Map 2D viewport or smallmap coordinate to 3D world or tile coordinate.
 * Function assumes <tt>z == 0</tt>. For other values of \p z, add \p z to \a y before the call.
 * @param x X coordinate of the 2D coordinate.
 * @param y Y coordinate of the 2D coordinate.
 * @return X and Y components of equivalent world or tile coordinate.
 * @note Inverse of #RemapCoords function. Smaller values may get rounded.
 */
static inline Point InverseRemapCoords(int x, int y)
{
	Point pt = {(y * 2 - x) >> 2, (y * 2 + x) >> 2};
	return pt;
}

uint ApplyFoundationToSlope(Foundation f, Slope *s);
void DrawFoundation(TileInfo *ti, Foundation f);
bool HasFoundationNW(TileIndex tile, Slope slope_here, uint z_here);
bool HasFoundationNE(TileIndex tile, Slope slope_here, uint z_here);

void DoClearSquare(TileIndex tile);
void RunTileLoop();

void InitializeLandscape();
void GenerateLandscape(byte mode);

#endif /* LANDSCAPE_H */