changeset 15751:a6dee2dc918f draft

(svn r20418) -Fix [FS#4017](r20125): During world generation the snow-mapbits are not yet available, so test the snowline variable directly (as before).
author frosch <frosch@openttd.org>
date Sun, 08 Aug 2010 21:34:19 +0000
parents ecfa9b70abed
children e8add3288198
files src/newgrf_commons.cpp
diffstat 1 files changed, 12 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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 @@
 			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 @@
 
 				case MP_VOID:
 				case MP_WATER:
+				genworld:
 					has_snow = (GetTileZ(tile) > GetSnowLine());
 					break;