Add PR #231: More river configuration options

pull/233/head
reldred 3 years ago committed by Jonathan G Rennison
parent 7e728fe9d6
commit 213b6fe6ef

@ -374,7 +374,7 @@ static DropDownList BuildTownNameDropDown()
static const StringID _elevations[] = {STR_TERRAIN_TYPE_VERY_FLAT, STR_TERRAIN_TYPE_FLAT, STR_TERRAIN_TYPE_HILLY, STR_TERRAIN_TYPE_MOUNTAINOUS, STR_TERRAIN_TYPE_ALPINIST, INVALID_STRING_ID};
static const StringID _sea_lakes[] = {STR_SEA_LEVEL_VERY_LOW, STR_SEA_LEVEL_LOW, STR_SEA_LEVEL_MEDIUM, STR_SEA_LEVEL_HIGH, STR_SEA_LEVEL_CUSTOM, INVALID_STRING_ID};
static const StringID _rivers[] = {STR_RIVERS_NONE, STR_RIVERS_FEW, STR_RIVERS_MODERATE, STR_RIVERS_LOT, INVALID_STRING_ID};
static const StringID _rivers[] = {STR_RIVERS_NONE, STR_RIVERS_FEW, STR_RIVERS_MODERATE, STR_RIVERS_LOT, STR_RIVERS_VERY_MANY, STR_RIVERS_EXTREMELY_MANY, INVALID_STRING_ID};
static const StringID _smoothness[] = {STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH, INVALID_STRING_ID};
static const StringID _rotation[] = {STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE, INVALID_STRING_ID};
static const StringID _landscape[] = {STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL, STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS, INVALID_STRING_ID};

@ -1059,11 +1059,13 @@ static bool FindSpring(TileIndex tile, void *user_data)
if (num < 4) return false;
/* Are we near the top of a hill? */
for (int dx = -16; dx <= 16; dx++) {
for (int dy = -16; dy <= 16; dy++) {
TileIndex t = TileAddWrap(tile, dx, dy);
if (t != INVALID_TILE && GetTileMaxZ(t) > referenceHeight + 2) return false;
if (_settings_game.game_creation.rivers_top_of_hill) {
/* Are we near the top of a hill? */
for (int dx = -16; dx <= 16; dx++) {
for (int dy = -16; dy <= 16; dy++) {
TileIndex t = TileAddWrap(tile, dx, dy);
if (t != INVALID_TILE && GetTileMaxZ(t) > referenceHeight + 2) return false;
}
}
}
@ -1088,7 +1090,7 @@ static bool MakeLake(TileIndex tile, void *user_data)
MakeRiver(tile, Random());
/* Remove desert directly around the river tile. */
TileIndex t = tile;
CircularTileSearch(&t, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr);
CircularTileSearch(&t, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr);
return false;
}
}
@ -1160,7 +1162,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current)
if (!IsWaterTile(tile)) {
MakeRiver(tile, Random());
/* Remove desert directly around the river tile. */
CircularTileSearch(&tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr);
CircularTileSearch(&tile, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr);
}
}
}
@ -1266,15 +1268,15 @@ static bool FlowRiver(TileIndex spring, TileIndex begin)
/* We don't want the lake at the entry of the valley. */
lakeCenter != begin &&
/* We don't want lakes in the desert. */
(_settings_game.game_creation.landscape != LT_TROPIC || GetTropicZone(lakeCenter) != TROPICZONE_DESERT) &&
(_settings_game.game_creation.landscape != LT_TROPIC || _settings_game.game_creation.lakes_allowed_in_deserts || GetTropicZone(lakeCenter) != TROPICZONE_DESERT) &&
/* We only want a lake if the river is long enough. */
DistanceManhattan(spring, lakeCenter) > _settings_game.game_creation.min_river_length) {
end = lakeCenter;
MakeRiver(lakeCenter, Random());
/* Remove desert directly around the river tile. */
CircularTileSearch(&lakeCenter, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr);
CircularTileSearch(&lakeCenter, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr);
lakeCenter = end;
uint range = RandomRange(8) + 3;
uint range = RandomRange(_settings_game.game_creation.lake_size) + 3;
CircularTileSearch(&lakeCenter, range, MakeLake, &height);
/* Call the search a second time so artefacts from going circular in one direction get (mostly) hidden. */
lakeCenter = end;

@ -1109,6 +1109,8 @@ STR_RIVERS_NONE :None
STR_RIVERS_FEW :Few
STR_RIVERS_MODERATE :Medium
STR_RIVERS_LOT :Many
STR_RIVERS_VERY_MANY :{RED}Very many
STR_RIVERS_EXTREMELY_MANY :{RED}Extremely many
STR_DISASTER_NONE :None
STR_DISASTER_REDUCED :Reduced
@ -1457,6 +1459,18 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Rough
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Very Rough
STR_CONFIG_SETTING_VARIETY :Variety distribution: {STRING2}
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis only) Control whether the map contains both mountainous and flat areas. Since this only makes the map flatter, other settings should be set to mountainous
STR_CONFIG_SETTING_RIVER_MIN_LENGTH :River min length: {STRING}
STR_CONFIG_SETTING_RIVER_MIN_LENGTH_HELPTEXT :Minimum length of rivers. This also controls the creation of lakes.
STR_CONFIG_SETTING_RIVER_ROUTE_RANDOM :River route randomness: {STRING}
STR_CONFIG_SETTING_RIVER_ROUTE_RANDOM_HELPTEXT :Choose how random a rivers path may be.
STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL :Rivers require their springs to generate at the top of hills: {STRING}
STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL_HELPTEXT :Choose whether rivers require their springs to generate towards the top of hills.
STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH :Tropics width around rivers: {STRING}
STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH_HELPTEXT :Controls the width of the tropic zone that surrounds rivers in sub-tropic landscape.
STR_CONFIG_SETTING_LAKE_SIZE :Size of lakes: {STRING}
STR_CONFIG_SETTING_LAKE_SIZE_HELPTEXT :Controls the size of lakes that are generated along rivers.
STR_CONFIG_SETTING_LAKES_ALLOWED_IN_DESERTS :Lakes can be generated in sub-tropic climate deserts: {STRING}
STR_CONFIG_SETTING_LAKES_ALLOWED_IN_DESERTS_HELPTEXT :Choose whether the lakes that spawn along rivers are allowed in deserts.
STR_CONFIG_SETTING_RIVER_AMOUNT :River amount: {STRING2}
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Choose how many rivers to generate
STR_CONFIG_SETTING_ROCKS_AMOUNT :Size of rocky patches: {STRING}
@ -2014,6 +2028,7 @@ STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Routing
STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Limitations
STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Disasters / Accidents
STR_CONFIG_SETTING_GENWORLD :{ORANGE}World generation
STR_CONFIG_SETTING_GENWORLD_RIVERS_LAKES :{ORANGE}Rivers & Lakes
STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Environment
STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Authorities
STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Towns

@ -1815,7 +1815,16 @@ static SettingsContainer &GetSettingsTree()
genworld->Add(new SettingEntry("game_creation.variety"));
genworld->Add(new SettingEntry("game_creation.snow_line_height"));
genworld->Add(new SettingEntry("game_creation.rainforest_line_height"));
genworld->Add(new SettingEntry("game_creation.amount_of_rivers"));
SettingsPage *rivers = genworld->Add(new SettingsPage(STR_CONFIG_SETTING_GENWORLD_RIVERS_LAKES));
{
rivers->Add(new SettingEntry("game_creation.amount_of_rivers"));
rivers->Add(new SettingEntry("game_creation.min_river_length"));
rivers->Add(new SettingEntry("game_creation.river_route_random"));
rivers->Add(new SettingEntry("game_creation.rivers_top_of_hill"));
rivers->Add(new SettingEntry("game_creation.river_tropics_width"));
rivers->Add(new SettingEntry("game_creation.lake_size"));
rivers->Add(new SettingEntry("game_creation.lakes_allowed_in_deserts"));
}
genworld->Add(new SettingEntry("game_creation.amount_of_rocks"));
genworld->Add(new SettingEntry("game_creation.height_affects_rocks"));
genworld->Add(new SettingEntry("game_creation.tree_placer"));

@ -375,6 +375,10 @@ struct GameCreationSettings {
byte min_river_length; ///< the minimum river length
byte river_route_random; ///< the amount of randomicity for the route finding
byte amount_of_rivers; ///< the amount of rivers
bool rivers_top_of_hill; ///< do rivers require starting near the tops of hills?
uint8 river_tropics_width; ///< the configured width of tropics around rivers
uint8 lake_size; ///< how large can lakes get?
bool lakes_allowed_in_deserts; ///< are lakes allowed in deserts?
uint8 amount_of_rocks; ///< the amount of rocks
uint8 height_affects_rocks; ///< the affect that map height has on rocks
};

@ -3803,21 +3803,78 @@ cat = SC_BASIC
base = GameSettings
var = game_creation.min_river_length
type = SLE_UINT8
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
from = SLV_163
def = 16
min = 2
max = 255
cat = SC_EXPERT
str = STR_CONFIG_SETTING_RIVER_MIN_LENGTH
strhelp = STR_CONFIG_SETTING_RIVER_MIN_LENGTH_HELPTEXT
strval = STR_JUST_COMMA
[SDT_VAR]
base = GameSettings
var = game_creation.river_route_random
type = SLE_UINT8
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
from = SLV_163
def = 5
min = 1
max = 255
cat = SC_EXPERT
str = STR_CONFIG_SETTING_RIVER_ROUTE_RANDOM
strhelp = STR_CONFIG_SETTING_RIVER_ROUTE_RANDOM_HELPTEXT
strval = STR_JUST_COMMA
[SDT_BOOL]
base = GameSettings
var = game_creation.rivers_top_of_hill
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
def = true
cat = SC_EXPERT
str = STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL
strhelp = STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL_HELPTEXT
patxname = ""rivers.game_creation.rivers_top_of_hill""
[SDT_VAR]
base = GameSettings
var = game_creation.river_tropics_width
type = SLE_UINT8
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
def = 5
min = 1
max = 12
interval = 1
str = STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH
strhelp = STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH_HELPTEXT
strval = STR_JUST_COMMA
cat = SC_BASIC
patxname = ""rivers.game_creation.river_tropics_width""
[SDT_VAR]
base = GameSettings
var = game_creation.lake_size
type = SLE_UINT8
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
def = 8
min = 1
max = 100
cat = SC_EXPERT
str = STR_CONFIG_SETTING_LAKE_SIZE
strhelp = STR_CONFIG_SETTING_LAKE_SIZE_HELPTEXT
strval = STR_JUST_COMMA
patxname = ""rivers.game_creation.lake_size""
[SDT_BOOL]
base = GameSettings
var = game_creation.lakes_allowed_in_deserts
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
def = false
cat = SC_EXPERT
str = STR_CONFIG_SETTING_LAKES_ALLOWED_IN_DESERTS
strhelp = STR_CONFIG_SETTING_LAKES_ALLOWED_IN_DESERTS_HELPTEXT
patxname = ""rivers.game_creation.lakes_allowed_in_deserts""
[SDT_VAR]
base = GameSettings
@ -3827,7 +3884,7 @@ from = SLV_163
guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
def = 2
min = 0
max = 3
max = 5
str = STR_CONFIG_SETTING_RIVER_AMOUNT
strhelp = STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT
strval = STR_RIVERS_NONE

@ -504,7 +504,7 @@ CommandCost CmdBuildCanal(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
MakeRiver(tile, Random());
if (_game_mode == GM_EDITOR) {
TileIndex tile2 = tile;
CircularTileSearch(&tile2, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr);
CircularTileSearch(&tile2, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr);
}
break;

Loading…
Cancel
Save