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.
This commit is contained in:
Patric Stout
2021-01-08 12:02:38 +01:00
committed by GitHub
parent aac8c28d73
commit 7463c46a54
2 changed files with 22 additions and 2 deletions

View File

@@ -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));
}