Add PR #231: More river configuration options
This commit is contained in:

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 _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 _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 _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 _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};
|
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;
|
if (num < 4) return false;
|
||||||
|
|
||||||
/* Are we near the top of a hill? */
|
if (_settings_game.game_creation.rivers_top_of_hill) {
|
||||||
for (int dx = -16; dx <= 16; dx++) {
|
/* Are we near the top of a hill? */
|
||||||
for (int dy = -16; dy <= 16; dy++) {
|
for (int dx = -16; dx <= 16; dx++) {
|
||||||
TileIndex t = TileAddWrap(tile, dx, dy);
|
for (int dy = -16; dy <= 16; dy++) {
|
||||||
if (t != INVALID_TILE && GetTileMaxZ(t) > referenceHeight + 2) return false;
|
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());
|
MakeRiver(tile, Random());
|
||||||
/* Remove desert directly around the river tile. */
|
/* Remove desert directly around the river tile. */
|
||||||
TileIndex t = 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;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1160,7 +1162,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current)
|
|||||||
if (!IsWaterTile(tile)) {
|
if (!IsWaterTile(tile)) {
|
||||||
MakeRiver(tile, Random());
|
MakeRiver(tile, Random());
|
||||||
/* Remove desert directly around the river tile. */
|
/* 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. */
|
/* We don't want the lake at the entry of the valley. */
|
||||||
lakeCenter != begin &&
|
lakeCenter != begin &&
|
||||||
/* We don't want lakes in the desert. */
|
/* 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. */
|
/* We only want a lake if the river is long enough. */
|
||||||
DistanceManhattan(spring, lakeCenter) > _settings_game.game_creation.min_river_length) {
|
DistanceManhattan(spring, lakeCenter) > _settings_game.game_creation.min_river_length) {
|
||||||
end = lakeCenter;
|
end = lakeCenter;
|
||||||
MakeRiver(lakeCenter, Random());
|
MakeRiver(lakeCenter, Random());
|
||||||
/* Remove desert directly around the river tile. */
|
/* 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;
|
lakeCenter = end;
|
||||||
uint range = RandomRange(8) + 3;
|
uint range = RandomRange(_settings_game.game_creation.lake_size) + 3;
|
||||||
CircularTileSearch(&lakeCenter, range, MakeLake, &height);
|
CircularTileSearch(&lakeCenter, range, MakeLake, &height);
|
||||||
/* Call the search a second time so artefacts from going circular in one direction get (mostly) hidden. */
|
/* Call the search a second time so artefacts from going circular in one direction get (mostly) hidden. */
|
||||||
lakeCenter = end;
|
lakeCenter = end;
|
||||||
|
@@ -1109,6 +1109,8 @@ STR_RIVERS_NONE :None
|
|||||||
STR_RIVERS_FEW :Few
|
STR_RIVERS_FEW :Few
|
||||||
STR_RIVERS_MODERATE :Medium
|
STR_RIVERS_MODERATE :Medium
|
||||||
STR_RIVERS_LOT :Many
|
STR_RIVERS_LOT :Many
|
||||||
|
STR_RIVERS_VERY_MANY :{RED}Very many
|
||||||
|
STR_RIVERS_EXTREMELY_MANY :{RED}Extremely many
|
||||||
|
|
||||||
STR_DISASTER_NONE :None
|
STR_DISASTER_NONE :None
|
||||||
STR_DISASTER_REDUCED :Reduced
|
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_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Very Rough
|
||||||
STR_CONFIG_SETTING_VARIETY :Variety distribution: {STRING2}
|
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_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 :River amount: {STRING2}
|
||||||
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Choose how many rivers to generate
|
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Choose how many rivers to generate
|
||||||
STR_CONFIG_SETTING_ROCKS_AMOUNT :Size of rocky patches: {STRING}
|
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_LIMITATIONS :{ORANGE}Limitations
|
||||||
STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Disasters / Accidents
|
STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Disasters / Accidents
|
||||||
STR_CONFIG_SETTING_GENWORLD :{ORANGE}World generation
|
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 :{ORANGE}Environment
|
||||||
STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Authorities
|
STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Authorities
|
||||||
STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Towns
|
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.variety"));
|
||||||
genworld->Add(new SettingEntry("game_creation.snow_line_height"));
|
genworld->Add(new SettingEntry("game_creation.snow_line_height"));
|
||||||
genworld->Add(new SettingEntry("game_creation.rainforest_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.amount_of_rocks"));
|
||||||
genworld->Add(new SettingEntry("game_creation.height_affects_rocks"));
|
genworld->Add(new SettingEntry("game_creation.height_affects_rocks"));
|
||||||
genworld->Add(new SettingEntry("game_creation.tree_placer"));
|
genworld->Add(new SettingEntry("game_creation.tree_placer"));
|
||||||
|
@@ -375,6 +375,10 @@ struct GameCreationSettings {
|
|||||||
byte min_river_length; ///< the minimum river length
|
byte min_river_length; ///< the minimum river length
|
||||||
byte river_route_random; ///< the amount of randomicity for the route finding
|
byte river_route_random; ///< the amount of randomicity for the route finding
|
||||||
byte amount_of_rivers; ///< the amount of rivers
|
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 amount_of_rocks; ///< the amount of rocks
|
||||||
uint8 height_affects_rocks; ///< the affect that map height has on rocks
|
uint8 height_affects_rocks; ///< the affect that map height has on rocks
|
||||||
};
|
};
|
||||||
|
@@ -3803,21 +3803,78 @@ cat = SC_BASIC
|
|||||||
base = GameSettings
|
base = GameSettings
|
||||||
var = game_creation.min_river_length
|
var = game_creation.min_river_length
|
||||||
type = SLE_UINT8
|
type = SLE_UINT8
|
||||||
|
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
|
||||||
from = SLV_163
|
from = SLV_163
|
||||||
def = 16
|
def = 16
|
||||||
min = 2
|
min = 2
|
||||||
max = 255
|
max = 255
|
||||||
cat = SC_EXPERT
|
cat = SC_EXPERT
|
||||||
|
str = STR_CONFIG_SETTING_RIVER_MIN_LENGTH
|
||||||
|
strhelp = STR_CONFIG_SETTING_RIVER_MIN_LENGTH_HELPTEXT
|
||||||
|
strval = STR_JUST_COMMA
|
||||||
|
|
||||||
[SDT_VAR]
|
[SDT_VAR]
|
||||||
base = GameSettings
|
base = GameSettings
|
||||||
var = game_creation.river_route_random
|
var = game_creation.river_route_random
|
||||||
type = SLE_UINT8
|
type = SLE_UINT8
|
||||||
|
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
|
||||||
from = SLV_163
|
from = SLV_163
|
||||||
def = 5
|
def = 5
|
||||||
min = 1
|
min = 1
|
||||||
max = 255
|
max = 255
|
||||||
cat = SC_EXPERT
|
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]
|
[SDT_VAR]
|
||||||
base = GameSettings
|
base = GameSettings
|
||||||
@@ -3827,7 +3884,7 @@ from = SLV_163
|
|||||||
guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
|
guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
|
||||||
def = 2
|
def = 2
|
||||||
min = 0
|
min = 0
|
||||||
max = 3
|
max = 5
|
||||||
str = STR_CONFIG_SETTING_RIVER_AMOUNT
|
str = STR_CONFIG_SETTING_RIVER_AMOUNT
|
||||||
strhelp = STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT
|
||||||
strval = STR_RIVERS_NONE
|
strval = STR_RIVERS_NONE
|
||||||
|
@@ -504,7 +504,7 @@ CommandCost CmdBuildCanal(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
|||||||
MakeRiver(tile, Random());
|
MakeRiver(tile, Random());
|
||||||
if (_game_mode == GM_EDITOR) {
|
if (_game_mode == GM_EDITOR) {
|
||||||
TileIndex tile2 = tile;
|
TileIndex tile2 = tile;
|
||||||
CircularTileSearch(&tile2, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr);
|
CircularTileSearch(&tile2, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user