# landscape.h File Reference

Functions related to OTTD's landscape. More...

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

Go to the source code of this file.

## Data Structures
struct | SnowLine
| Structure describing the height of the snow line each day of the year. More...
## Enumerations
enum | { SNOW_LINE_MONTHS = 12, SNOW_LINE_DAYS = 32 }
## Functions
bool | IsSnowLineSet ()
| Has a snow line table already been loaded.
void | SetSnowLine (byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS])
| Set a variable snow line, as loaded from a newgrf file.
byte | GetSnowLine ()
| Get the current snow line, either variable or static.
byte | HighestSnowLine ()
| Get the highest possible snow line height, either variable or static.
byte | LowestSnowLine ()
| Get the lowest possible snow line height, either variable or static.
void | ClearSnowLine ()
| Clear the variable snow line table and free the memory.
uint | GetPartialZ (int x, int y, Slope corners)
| Determines height at given coordinate of a slope.
uint | GetSlopeZ (int x, int y)
void | GetSlopeZOnEdge (Slope tileh, DiagDirection edge, int *z1, int *z2)
| Determine the Z height of the corners of a specific tile edge.
int | GetSlopeZInCorner (Slope tileh, Corner corner)
| Determine the Z height of a corner relative to TileZ.
Slope | GetFoundationSlope (TileIndex tile, uint *z)
| Get slope of a tile on top of a (possible) foundation If a tile does not have a foundation, the function returns the same as GetTileSlope.
static Point | RemapCoords (int x, int y, int z)
| Map 3D world or tile coordinate to equivalent 2D coordinate as used in the viewports and smallmap.
static Point | RemapCoords2 (int x, int y)
| Map 3D world or tile coordinate to equivalent 2D coordinate as used in the viewports and smallmap.
static Point | InverseRemapCoords (int x, int y)
| Map 2D viewport or smallmap coordinate to 3D world or tile coordinate.
uint | ApplyFoundationToSlope (Foundation f, Slope *s)
| Applies a foundation to a slope.
void | DrawFoundation (TileInfo *ti, Foundation f)
| Draw foundation f at tile ti.
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)

## Detailed Description

Functions related to OTTD's landscape.

Definition in file landscape.h.

## Enumeration Type Documentation

anonymous enum

Enumerator:

  SNOW_LINE_MONTHS | Number of months in the snow line table.
  SNOW_LINE_DAYS | Number of days in each month in the snow line table.

Definition at line 18 of file landscape.h.

## Function Documentation

uint ApplyFoundationToSlope | ( | Foundation | f,
|  | Slope * | s |
| ) |  |  |

Applies a foundation to a slope.

Precondition:
  Foundation and slope must be valid combined.

Parameters:

  | f | The Foundation.
  | s | The Slope to modify.

Returns:
  Increment to the tile Z coordinate.

Definition at line 89 of file landscape.cpp.

References FOUNDATION_INCLINED_X, FOUNDATION_INCLINED_Y, FOUNDATION_STEEP_BOTH, FOUNDATION_STEEP_LOWER, GetHalftileFoundationCorner(), GetHighestSlopeCorner(), GetRailFoundationCorner(), HalftileSlope(), IsFoundation(), IsLeveledFoundation(), IsNonContinuousFoundation(), IsSpecialRailFoundation(), IsSteepSlope(), OppositeCorner(), SLOPE_FLAT, SLOPE_NE, SLOPE_NW, SLOPE_SE, SLOPE_SW, SlopeWithOneCornerRaised(), SlopeWithThreeCornersRaised(), and TILE_HEIGHT.

Referenced by CheckBridgeSlopeNorth(), CheckBridgeSlopeSouth(), DrawCatenaryRailway(), DrawFoundation(), FloodHalftile(), GetBridgeHeight(), GetFoundationSlope(), HasBridgeFlatRamp(), and TestAutoslopeOnRailTile().

void DrawFoundation | ( | TileInfo * | ti,
|  | Foundation | f |
| ) |  |  |

Draw foundation f at tile ti.

Updates ti.

Parameters:

  | ti | Tile to draw foundation on
  | f | Foundation to draw

Definition at line 380 of file landscape.cpp.

References AddSortableSpriteToDraw(), ApplyFoundationToSlope(), FOUNDATION_INCLINED_X, FOUNDATION_INCLINED_Y, FOUNDATION_STEEP_BOTH, FOUNDATION_STEEP_LOWER, GetFoundationSlope(), GetHalftileFoundationCorner(), GetHighestSlopeCorner(), GetRailFoundationCorner(), IsFoundation(), IsInclinedFoundation(), IsLeveledFoundation(), IsNonContinuousFoundation(), IsSpecialRailFoundation(), IsSteepSlope(), OffsetGroundSprite(), SLOPE_EW, SLOPE_NE, SLOPE_NS, SLOPE_STEEP, SLOPE_SW, SlopeWithOneCornerRaised(), SlopeWithThreeCornersRaised(), TileInfo::tile, TILE_HEIGHT, TileInfo::tileh, TileInfo::x, TileInfo::y, and TileInfo::z.

Referenced by DrawRoadBits(), DrawTile_Road(), DrawTile_Town(), DrawTile_TunnelBridge(), and DrawTrackBits().

void GenerateLandscape | ( | byte | mode | ) |

Number of steps of landscape generation

< Loading a heightmap

< Terragenesis generator

< Original generator

< Extra steps needed for tropic landscape

< Extra steps for other landscapes

Definition at line 862 of file landscape.cpp.

References _settings_game, GameSettings::construction, GameSettings::difficulty, FixSlopes(), ConstructionSettings::freeform_edges, GameSettings::game_creation, GB(), GenerateTerrainPerlin(), GWM_HEIGHTMAP, GWP_LANDSCAPE, IncreaseGeneratingWorldProgress(), GameCreationSettings::land_generator, GameCreationSettings::landscape, LG_TERRAGENESIS, LoadHeightmap(), MakeVoid(), MapSizeX(), MapSizeY(), SmallFiosItem::name, DifficultySettings::quantity_sea_lakes, ScaleByMapSize(), SetGeneratingWorldProgress(), DifficultySettings::terrain_type, and TileXY().

Referenced by _GenerateWorld().

Slope GetFoundationSlope | ( | TileIndex | tile,
|  | uint * | z |
| ) |  |  |

Get slope of a tile on top of a (possible) foundation If a tile does not have a foundation, the function returns the same as GetTileSlope.

Parameters:

  | tile | The tile of interest.
  | z | returns the z of the foundation slope. (Can be NULL, if not needed)

Returns:
  The slope on top of the foundation.

Definition at line 332 of file landscape.cpp.

References ApplyFoundationToSlope(), GetTileSlope(), and GetTileType().

Referenced by DrawFoundation(), IsPossibleCrossing(), IsRoadAllowedHere(), and TileLoop_Water().

uint GetPartialZ | ( | int | x,
|  | int | y,
|  | Slope | corners |
| ) |  |  |

Determines height at given coordinate of a slope.

Parameters:

  | x | x coordinate
  | y | y coordinate
  | corners | slope to examine

Returns:
  height of given point of given slope

Definition at line 142 of file landscape.cpp.

References GetHalftileSlopeCorner(), GetSlopeMaxZ(), IsHalftileSlope(), RemoveHalftileSlope(), SLOPE_E, SLOPE_ELEVATED, SLOPE_ENW, SLOPE_EW, SLOPE_N, SLOPE_NE, SLOPE_NS, SLOPE_NW, SLOPE_NWS, SLOPE_S, SLOPE_SE, SLOPE_SEN, SLOPE_STEEP_E, SLOPE_STEEP_N, SLOPE_STEEP_S, SLOPE_STEEP_W, SLOPE_SW, SLOPE_W, and SLOPE_WSE.

Referenced by DrawRoadBits().

int GetSlopeZInCorner | ( | Slope | tileh,
|  | Corner | corner |
| ) |  |  |

Determine the Z height of a corner relative to TileZ.

Precondition:
  The slope must not be a halftile slope.

Parameters:

  | tileh | The slope.
  | corner | The corner.

Returns:
  Z position of corner relative to TileZ.

Definition at line 285 of file landscape.cpp.

References IsHalftileSlope(), SlopeWithOneCornerRaised(), SteepSlope(), and TILE_HEIGHT.

Referenced by DrawTrackFence_NS_1(), DrawTrackFence_NS_2(), DrawTrackFence_WE_1(), DrawTrackFence_WE_2(), AITile::GetCornerHeight(), and TestAutoslopeOnRailTile().

void GetSlopeZOnEdge | ( | Slope | tileh,
|  | DiagDirection | edge,
|  | int * | z1,
|  | int * | z2 |
| ) |  |  |

Determine the Z height of the corners of a specific tile edge.

Note:
  If a tile has a non-continuous halftile foundation, a corner can have different heights wrt. it's edges.

Precondition:
  z1 and z2 must be initialized (typ. with TileZ). The corner heights just get added.

Parameters:

  | tileh | The slope of the tile.
  | edge | The edge of interest.
  | z1 | Gets incremented by the height of the first corner of the edge. (near corner wrt. the camera)
  | z2 | Gets incremented by the height of the second corner of the edge. (far corner wrt. the camera)

Definition at line 303 of file landscape.cpp.

References GetHalftileSlopeCorner(), IsHalftileSlope(), RemoveHalftileSlope(), SLOPE_E, SLOPE_N, SLOPE_S, SLOPE_STEEP_E, SLOPE_STEEP_N, SLOPE_STEEP_S, SLOPE_STEEP_W, SLOPE_W, SlopeWithOneCornerRaised(), and TILE_HEIGHT.

Referenced by DrawBridgePillars().

static Point InverseRemapCoords | ( | int | x,
|  | int | y |
| ) |  |  | `[inline, static]`

Map 2D viewport or smallmap coordinate to 3D world or tile coordinate.

Function assumes `z == 0`. For other values of `z`, add `z` to y before the call.

Parameters:

  | x | X coordinate of the 2D coordinate.
  | y | Y coordinate of the 2D coordinate.

Returns:
  X and Y components of equivalent world or tile coordinate.

Note:
  Inverse of RemapCoords function. Smaller values may get rounded.

Definition at line 81 of file landscape.h.

Referenced by SmallMapWindow::DrawMapIndicators(), and SmallMapWindow::SetNewScroll().

static Point RemapCoords | ( | int | x,
|  | int | y,
|  | int | z |
| ) |  |  | `[inline, static]`

Map 3D world or tile coordinate to equivalent 2D coordinate as used in the viewports and smallmap.

Parameters:

  | x | X world or tile coordinate (runs in SW direction in the 2D view).
  | y | Y world or tile coordinate (runs in SE direction in the 2D view).
  | z | Z world or tile coordinate (runs in N direction in the 2D view).

Returns:
  Equivalent coordinate in the 2D view.

See also:
  RemapCoords2

Definition at line 52 of file landscape.h.

Referenced by AddCombinedSprite(), AddSortableSpriteToDraw(), AddTileSpriteToDraw(), DrawCommonTileSeqInGUI(), DrawGroundSpriteAt(), MarkTileDirtyByTile(), SmallMapWindow::OnClick(), RemapCoords2(), SmallMapWindow::RemapTile(), Sign::UpdateVirtCoord(), VehicleMove(), and ViewportDrawBoundingBoxes().

static Point RemapCoords2 | ( | int | x,
|  | int | y |
| ) |  |  | `[inline, static]`

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.

Parameters:

  | x | X world or tile coordinate (runs in SW direction in the 2D view).
  | y | Y world or tile coordinate (runs in SE direction in the 2D view).

Returns:
  Equivalent coordinate in the 2D view.

See also:
  RemapCoords

Definition at line 68 of file landscape.h.

References RemapCoords().

Referenced by ErrmsgWindow::OnInitialPosition(), SetSelectionTilesDirty(), Waypoint::UpdateVirtCoord(), Town::UpdateVirtCoord(), and Station::UpdateVirtCoord().