Changeset - r24603:8ece92afa18e
[Not reviewed]
master
0 2 0
Patric Stout - 4 years ago 2021-01-08 11:02:38
truebrain@openttd.org
Fix: for arctic and tropic, make sure we have at least a few hills (#8513)

Without hills, not all industries can be generated, which means
that with a default configuration you get errors. This is far from
optimal, of course.

This now forces that there is at least some hills, even when you
are using very-flat. This is a stopgap solution, but a proper
solution requires a full rewrite of the terrain generator, which
is not a 2 minute (or even 2 week) job.

To make sure flat is still flat-ish, reduce the default
snow-line-height to 10, making it look a lot better on smaller maps.
This is a compromise between being able to have flat maps and
still having all industries on arctic.
2 files changed with 22 insertions and 2 deletions:
0 comments (0 inline, 0 general)
src/tgp.cpp
Show inline comments
 
@@ -234,7 +234,27 @@ static height_t TGPGetMaxHeight()
 
		{  12,  19,  25,  31,  67,  75,  87 }, ///< Alpinist
 
	};
 

	
 
	int max_height_from_table = max_height[_settings_game.difficulty.terrain_type][std::min(MapLogX(), MapLogY()) - MIN_MAP_SIZE_BITS];
 
	int map_size_bucket = std::min(MapLogX(), MapLogY()) - MIN_MAP_SIZE_BITS;
 
	int max_height_from_table = max_height[_settings_game.difficulty.terrain_type][map_size_bucket];
 

	
 
	/* Arctic needs snow to have all industries, so make sure we allow TGP to generate this high. */
 
	if (_settings_game.game_creation.landscape == LT_ARCTIC) {
 
		max_height_from_table += _settings_newgame.game_creation.snow_line_height;
 
		/* Make flat a bit more flat by removing "very flat" from it, to somewhat compensate for the increase we just did. */
 
		if (_settings_game.difficulty.terrain_type > 0) {
 
			max_height_from_table -= max_height[_settings_game.difficulty.terrain_type - 1][map_size_bucket];
 
		}
 
	}
 
	/* Tropic needs tropical forest to have all industries, so make sure we allow TGP to generate this high.
 
	 * Tropic forest always starts at 1/4th of the max height. */
 
	if (_settings_game.game_creation.landscape == LT_TROPIC) {
 
		max_height_from_table += CeilDiv(_settings_game.construction.max_heightlevel, 4);
 
		/* Make flat a bit more flat by removing "very flat" from it, to somewhat compensate for the increase we just did. */
 
		if (_settings_game.difficulty.terrain_type > 0) {
 
			max_height_from_table -= max_height[_settings_game.difficulty.terrain_type - 1][map_size_bucket];
 
		}
 
	}
 

	
 
	return I2H(std::min<uint>(max_height_from_table, _settings_game.construction.max_heightlevel));
 
}
 

	
src/tile_type.h
Show inline comments
 
@@ -26,7 +26,7 @@ static const uint DEF_MAX_HEIGHTLEVEL = 
 
static const uint MAX_MAX_HEIGHTLEVEL = MAX_TILE_HEIGHT;       ///< Upper bound of maximum allowed heightlevel (in the construction settings)
 

	
 
static const uint MIN_SNOWLINE_HEIGHT = 2;                     ///< Minimum snowline height
 
static const uint DEF_SNOWLINE_HEIGHT = 15;                    ///< Default snowline height
 
static const uint DEF_SNOWLINE_HEIGHT = 10;                    ///< Default snowline height
 
static const uint MAX_SNOWLINE_HEIGHT = (MAX_TILE_HEIGHT - 2); ///< Maximum allowed snowline height
 

	
 

	
0 comments (0 inline, 0 general)