summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/newgrf_commons.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp
index e39b31b1b..940cdc0de 100644
--- a/src/newgrf_commons.cpp
+++ b/src/newgrf_commons.cpp
@@ -22,6 +22,7 @@
#include "station_map.h"
#include "tree_map.h"
#include "tunnelbridge_map.h"
+#include "genworld.h"
#include "core/mem_func.hpp"
/**
@@ -304,26 +305,36 @@ uint32 GetTerrainType(TileIndex tile, bool upper_halftile)
bool has_snow;
switch (GetTileType(tile)) {
case MP_CLEAR:
+ /* During map generation the snowstate may not be valid yet, as the tileloop may not have run yet. */
+ if (_generating_world) goto genworld;
has_snow = IsSnowTile(tile) && GetClearDensity(tile) >= 2;
break;
case MP_RAILWAY: {
+ /* During map generation the snowstate may not be valid yet, as the tileloop may not have run yet. */
+ if (_generating_world) goto genworld; // we do not care about foundations here
RailGroundType ground = GetRailGroundType(tile);
has_snow = (ground == RAIL_GROUND_ICE_DESERT || (upper_halftile && ground == RAIL_GROUND_HALF_SNOW));
break;
}
case MP_ROAD:
+ /* During map generation the snowstate may not be valid yet, as the tileloop may not have run yet. */
+ if (_generating_world) goto genworld; // we do not care about foundations here
has_snow = IsOnSnow(tile);
break;
case MP_TREES: {
+ /* During map generation the snowstate may not be valid yet, as the tileloop may not have run yet. */
+ if (_generating_world) goto genworld;
TreeGround ground = GetTreeGround(tile);
has_snow = (ground == TREE_GROUND_SNOW_DESERT || ground == TREE_GROUND_ROUGH_SNOW) && GetTreeDensity(tile) >= 2;
break;
}
case MP_TUNNELBRIDGE:
+ /* During map generation the snowstate may not be valid yet, as the tileloop may not have run yet. */
+ if (_generating_world) goto genworld; // we do not care about foundations here
has_snow = HasTunnelBridgeSnowOrDesert(tile);
break;
@@ -337,6 +348,7 @@ uint32 GetTerrainType(TileIndex tile, bool upper_halftile)
case MP_VOID:
case MP_WATER:
+ genworld:
has_snow = (GetTileZ(tile) > GetSnowLine());
break;