1
0
Fork 0

Compare commits

...

4 Commits

Author SHA1 Message Date
HyperJeanJean f512797bba
Merge cd5d13a692 into b8e56cd05d 2025-07-19 04:45:24 +00:00
translators b8e56cd05d Update: Translations from eints
chinese (traditional): 3 changes by KogentaSan
chinese (simplified): 1 change by ahyangyi
2025-07-19 04:43:14 +00:00
Peter Nelson df5237e721
Fix: Vehicle liveries did not update when switching company. (#14456)
Vehicle liveries must be refreshed if "Show vehicle-type specific liveries" is set to "Own company".
2025-07-18 23:43:07 +00:00
HyperJeanJean cd5d13a692 Change: Select snow line height by level instead of coverage
The snow coverage was too random, it could produce maps with snow
heights too low or too high with the exact same settings.

Now the snow line height is determined by choosing an aproxiamte level,
similar to the water level. A custom value can also be entered.
2025-07-14 14:41:28 +02:00
15 changed files with 107 additions and 67 deletions

View File

@ -141,6 +141,8 @@ void SetLocalCompany(CompanyID new_company)
MarkWholeScreenDirty();
InvalidateWindowClassesData(WC_SIGN_LIST, -1);
InvalidateWindowClassesData(WC_GOALS_LIST);
InvalidateWindowClassesData(WC_COMPANY_COLOUR, -1);
ResetVehicleColourMap();
}
/**

View File

@ -49,6 +49,8 @@ static const uint CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY = 4; ///< Value for custom
static const uint CUSTOM_SEA_LEVEL_MIN_PERCENTAGE = 1; ///< Minimum percentage a user can specify for custom sea level.
static const uint CUSTOM_SEA_LEVEL_MAX_PERCENTAGE = 90; ///< Maximum percentage a user can specify for custom sea level.
static const uint CUSTOM_SNOW_LEVEL_NUMBER = 5; ///< Value for custom snow level in game creation settings
static constexpr uint MAP_HEIGHT_LIMIT_ORIGINAL = 15; ///< Original map height limit.
static const uint MAP_HEIGHT_LIMIT_AUTO_MINIMUM = 30; ///< When map height limit is auto, make this the lowest possible map height limit.

View File

@ -124,7 +124,7 @@ static constexpr NWidgetPart _nested_generate_landscape_widgets[] = {
/* Labels on the left side (global column 3). */
NWidget(NWID_VERTICAL, NWidContainerFlag::EqualSize), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_LABEL),
NWidget(WWT_TEXT, INVALID_COLOUR), SetStringTip(STR_MAPGEN_SNOW_COVERAGE, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1),
NWidget(WWT_TEXT, INVALID_COLOUR), SetStringTip(STR_MAPGEN_SNOW_LINE_LEVEL, STR_CONFIG_SETTING_SNOW_LINE_LEVEL_HELPTEXT), SetFill(1, 1),
NWidget(WWT_TEXT, INVALID_COLOUR), SetStringTip(STR_MAPGEN_DESERT_COVERAGE, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1),
NWidget(NWID_SPACER), SetFill(1, 1),
EndContainer(),
@ -139,11 +139,9 @@ static constexpr NWidgetPart _nested_generate_landscape_widgets[] = {
NWidget(NWID_VERTICAL, NWidContainerFlag::EqualSize), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0),
/* Climate selector. */
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR),
/* Snow coverage. */
/* Snow line level. */
NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetSpriteTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN_TOOLTIP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetToolTip(STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetSpriteTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP_TOOLTIP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_SNOW_LINE_LEVEL_PULLDOWN), SetToolTip(STR_CONFIG_SETTING_SNOW_LINE_LEVEL_HELPTEXT), SetFill(1, 1),
EndContainer(),
/* Desert coverage. */
NWidget(NWID_HORIZONTAL),
@ -259,7 +257,7 @@ static constexpr NWidgetPart _nested_heightmap_load_widgets[] = {
/* Right half labels (global column 3) */
NWidget(NWID_VERTICAL, NWidContainerFlag::EqualSize), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_LABEL),
NWidget(WWT_TEXT, INVALID_COLOUR), SetStringTip(STR_MAPGEN_SNOW_COVERAGE, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1),
NWidget(WWT_TEXT, INVALID_COLOUR), SetStringTip(STR_MAPGEN_SNOW_LINE_LEVEL, STR_CONFIG_SETTING_SNOW_LINE_LEVEL_HELPTEXT), SetFill(1, 1),
NWidget(WWT_TEXT, INVALID_COLOUR), SetStringTip(STR_MAPGEN_DESERT_COVERAGE, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1),
NWidget(NWID_SPACER), SetFill(1, 1),
EndContainer(),
@ -273,11 +271,9 @@ static constexpr NWidgetPart _nested_heightmap_load_widgets[] = {
NWidget(NWID_VERTICAL, NWidContainerFlag::EqualSize), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0),
/* Climate selector. */
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR),
/* Snow coverage. */
/* Snow line level. */
NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetSpriteTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN_TOOLTIP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetToolTip(STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetSpriteTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP_TOOLTIP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_SNOW_LINE_LEVEL_PULLDOWN), SetToolTip(STR_CONFIG_SETTING_SNOW_LINE_LEVEL_HELPTEXT), SetFill(1, 1),
EndContainer(),
/* Desert coverage. */
NWidget(NWID_HORIZONTAL),
@ -384,6 +380,7 @@ static const StringID _rotation[] = {STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CO
static const StringID _num_towns[] = {STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM};
static const StringID _num_inds[] = {STR_FUNDING_ONLY, STR_MINIMAL, STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM};
static const StringID _variety[] = {STR_VARIETY_NONE, STR_VARIETY_VERY_LOW, STR_VARIETY_LOW, STR_VARIETY_MEDIUM, STR_VARIETY_HIGH, STR_VARIETY_VERY_HIGH};
static const StringID _snow_levels[] = {STR_SNOW_LINE_LEVEL_VERY_LOW, STR_SNOW_LINE_LEVEL_LOW, STR_SNOW_LINE_LEVEL_MEDIUM, STR_SNOW_LINE_LEVEL_HIGH, STR_SNOW_LINE_LEVEL_VERY_HIGH, STR_SNOW_LINE_LEVEL_CUSTOM};
static_assert(std::size(_num_inds) == ID_END);
@ -426,7 +423,12 @@ struct GenerateLandscapeWindow : public Window {
case WID_GL_MAPSIZE_X_PULLDOWN: return GetString(STR_JUST_INT, 1LL << _settings_newgame.game_creation.map_x);
case WID_GL_MAPSIZE_Y_PULLDOWN: return GetString(STR_JUST_INT, 1LL << _settings_newgame.game_creation.map_y);
case WID_GL_HEIGHTMAP_HEIGHT_TEXT: return GetString(STR_JUST_INT, _settings_newgame.game_creation.heightmap_height);
case WID_GL_SNOW_COVERAGE_TEXT: return GetString(STR_MAPGEN_SNOW_COVERAGE_TEXT, _settings_newgame.game_creation.snow_coverage);
case WID_GL_SNOW_LINE_LEVEL_PULLDOWN:
if (_settings_newgame.game_creation.snow_line_level == CUSTOM_SNOW_LEVEL_NUMBER) {
return GetString(STR_SNOW_LINE_LEVEL_CUSTOM_NUMBER, _settings_newgame.game_creation.snow_line_height);
}
return GetString(_snow_levels[_settings_newgame.game_creation.snow_line_level]);
case WID_GL_DESERT_COVERAGE_TEXT: return GetString(STR_MAPGEN_DESERT_COVERAGE_TEXT, _settings_newgame.game_creation.desert_coverage);
case WID_GL_TOWN_PULLDOWN:
@ -523,7 +525,7 @@ struct GenerateLandscapeWindow : public Window {
}
/* Disable snowline if not arctic */
this->SetWidgetDisabledState(WID_GL_SNOW_COVERAGE_TEXT, _settings_newgame.game_creation.landscape != LandscapeType::Arctic);
this->SetWidgetDisabledState(WID_GL_SNOW_LINE_LEVEL_PULLDOWN, _settings_newgame.game_creation.landscape != LandscapeType::Arctic);
/* Disable desert if not tropic */
this->SetWidgetDisabledState(WID_GL_DESERT_COVERAGE_TEXT, _settings_newgame.game_creation.landscape != LandscapeType::Tropic);
@ -545,8 +547,6 @@ struct GenerateLandscapeWindow : public Window {
}
this->SetWidgetDisabledState(WID_GL_START_DATE_DOWN, _settings_newgame.game_creation.starting_year <= CalendarTime::MIN_YEAR);
this->SetWidgetDisabledState(WID_GL_START_DATE_UP, _settings_newgame.game_creation.starting_year >= CalendarTime::MAX_YEAR);
this->SetWidgetDisabledState(WID_GL_SNOW_COVERAGE_DOWN, _settings_newgame.game_creation.snow_coverage <= 0 || _settings_newgame.game_creation.landscape != LandscapeType::Arctic);
this->SetWidgetDisabledState(WID_GL_SNOW_COVERAGE_UP, _settings_newgame.game_creation.snow_coverage >= 100 || _settings_newgame.game_creation.landscape != LandscapeType::Arctic);
this->SetWidgetDisabledState(WID_GL_DESERT_COVERAGE_DOWN, _settings_newgame.game_creation.desert_coverage <= 0 || _settings_newgame.game_creation.landscape != LandscapeType::Tropic);
this->SetWidgetDisabledState(WID_GL_DESERT_COVERAGE_UP, _settings_newgame.game_creation.desert_coverage >= 100 || _settings_newgame.game_creation.landscape != LandscapeType::Tropic);
@ -586,8 +586,8 @@ struct GenerateLandscapeWindow : public Window {
d = GetStringBoundingBox(GetString(STR_JUST_INT, GetParamMaxValue(MAX_MAP_SIZE)));
break;
case WID_GL_SNOW_COVERAGE_TEXT:
d = GetStringBoundingBox(GetString(STR_MAPGEN_SNOW_COVERAGE_TEXT, GetParamMaxValue(MAX_TILE_HEIGHT)));
case WID_GL_SNOW_LINE_LEVEL_PULLDOWN:
d = GetStringBoundingBox(GetString(STR_JUST_INT, GetParamMaxValue(MAX_SNOWLINE_HEIGHT)));
break;
case WID_GL_DESERT_COVERAGE_TEXT:
@ -738,21 +738,8 @@ struct GenerateLandscapeWindow : public Window {
ShowQueryString(GetString(STR_JUST_INT, _settings_newgame.game_creation.starting_year), STR_MAPGEN_START_DATE_QUERY_CAPT, 8, this, CS_NUMERAL, QueryStringFlag::EnableDefault);
break;
case WID_GL_SNOW_COVERAGE_DOWN:
case WID_GL_SNOW_COVERAGE_UP: // Snow coverage buttons
/* Don't allow too fast scrolling */
if (!this->flags.Test(WindowFlag::Timeout) || this->timeout_timer <= 1) {
this->HandleButtonClick(widget);
_settings_newgame.game_creation.snow_coverage = Clamp(_settings_newgame.game_creation.snow_coverage + (widget - WID_GL_SNOW_COVERAGE_TEXT) * 10, 0, 100);
this->InvalidateData();
}
_left_button_clicked = false;
break;
case WID_GL_SNOW_COVERAGE_TEXT: // Snow coverage text
this->widget_id = WID_GL_SNOW_COVERAGE_TEXT;
ShowQueryString(GetString(STR_JUST_INT, _settings_newgame.game_creation.snow_coverage), STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT, 4, this, CS_NUMERAL, QueryStringFlag::EnableDefault);
case WID_GL_SNOW_LINE_LEVEL_PULLDOWN: // Snow line level
ShowDropDownMenu(this, _snow_levels, _settings_newgame.game_creation.snow_line_level, WID_GL_SNOW_LINE_LEVEL_PULLDOWN, 0, 0);
break;
case WID_GL_DESERT_COVERAGE_DOWN:
@ -846,9 +833,9 @@ struct GenerateLandscapeWindow : public Window {
void OnTimeout() override
{
if (mode == GLWM_HEIGHTMAP) {
this->RaiseWidgetsWhenLowered(WID_GL_HEIGHTMAP_HEIGHT_DOWN, WID_GL_HEIGHTMAP_HEIGHT_UP, WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP, WID_GL_SNOW_COVERAGE_UP, WID_GL_SNOW_COVERAGE_DOWN, WID_GL_DESERT_COVERAGE_UP, WID_GL_DESERT_COVERAGE_DOWN);
this->RaiseWidgetsWhenLowered(WID_GL_HEIGHTMAP_HEIGHT_DOWN, WID_GL_HEIGHTMAP_HEIGHT_UP, WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP, WID_GL_DESERT_COVERAGE_UP, WID_GL_DESERT_COVERAGE_DOWN);
} else {
this->RaiseWidgetsWhenLowered(WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP, WID_GL_SNOW_COVERAGE_UP, WID_GL_SNOW_COVERAGE_DOWN, WID_GL_DESERT_COVERAGE_UP, WID_GL_DESERT_COVERAGE_DOWN);
this->RaiseWidgetsWhenLowered(WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP, WID_GL_DESERT_COVERAGE_UP, WID_GL_DESERT_COVERAGE_DOWN);
}
}
@ -863,6 +850,14 @@ struct GenerateLandscapeWindow : public Window {
case WID_GL_HEIGHTMAP_ROTATION_PULLDOWN: _settings_newgame.game_creation.heightmap_rotation = index; break;
case WID_GL_SNOW_LINE_LEVEL_PULLDOWN: // Snow line level
if ((uint)index == CUSTOM_SNOW_LEVEL_NUMBER) {
this->widget_id = widget;
ShowQueryString(GetString(STR_JUST_INT, _settings_newgame.game_creation.snow_line_height), STR_MAPGEN_SNOW_LINE_LEVEL_QUERY_CAPT, 4, this, CS_NUMERAL, {});
}
_settings_newgame.game_creation.snow_line_level = index;
break;
case WID_GL_TOWN_PULLDOWN:
if ((uint)index == CUSTOM_TOWN_NUMBER_DIFFICULTY) {
this->widget_id = widget;
@ -922,7 +917,7 @@ struct GenerateLandscapeWindow : public Window {
switch (this->widget_id) {
case WID_GL_HEIGHTMAP_HEIGHT_TEXT: value = MAP_HEIGHT_LIMIT_AUTO_MINIMUM; break;
case WID_GL_START_DATE_TEXT: value = CalendarTime::DEF_START_YEAR.base(); break;
case WID_GL_SNOW_COVERAGE_TEXT: value = DEF_SNOW_COVERAGE; break;
case WID_GL_SNOW_LINE_LEVEL_PULLDOWN: value = DEF_SNOWLINE_HEIGHT; break;
case WID_GL_DESERT_COVERAGE_TEXT: value = DEF_DESERT_COVERAGE; break;
case WID_GL_TOWN_PULLDOWN: value = 1; break;
case WID_GL_INDUSTRY_PULLDOWN: value = 1; break;
@ -943,9 +938,8 @@ struct GenerateLandscapeWindow : public Window {
_settings_newgame.game_creation.starting_year = Clamp(TimerGameCalendar::Year(value), CalendarTime::MIN_YEAR, CalendarTime::MAX_YEAR);
break;
case WID_GL_SNOW_COVERAGE_TEXT:
this->SetWidgetDirty(WID_GL_SNOW_COVERAGE_TEXT);
_settings_newgame.game_creation.snow_coverage = Clamp(value, 0, 100);
case WID_GL_SNOW_LINE_LEVEL_PULLDOWN:
_settings_newgame.game_creation.snow_line_height = Clamp(value, MIN_SNOWLINE_HEIGHT, MAX_SNOWLINE_HEIGHT);
break;
case WID_GL_DESERT_COVERAGE_TEXT:

View File

@ -1510,13 +1510,45 @@ static uint CalculateCoverageLine(uint coverage, uint edge_multiplier)
return best_h;
}
/**
* Get current maximum height of the map.
* @return The maximum height of the map.
*/
static uint GetMapMaxHeight()
{
uint max_height = 0;
for (const auto tile : Map::Iterate()) {
uint h = TileHeight(tile);
if (h > max_height) {
max_height = h;
}
}
return max_height;
}
/**
* Calculate the line from which snow begins.
*/
static void CalculateSnowLine()
{
/* We do not have snow sprites on coastal tiles, so never allow "1" as height. */
_settings_game.game_creation.snow_line_height = std::max(CalculateCoverageLine(_settings_game.game_creation.snow_coverage, 0), 2u);
/* If snow_line_level is custom, then snow_line_height is already set
* otherwise we have to calculate it
*/
if (_settings_game.game_creation.snow_line_level != CUSTOM_SNOW_LEVEL_NUMBER) {
uint min_snow_line_height = 4; // Not too low to make room for farms
uint max_snow_line_height = GetMapMaxHeight() - 2; // Not too high to make room for forests
uint max_height_diff = min_snow_line_height < max_snow_line_height
? max_snow_line_height - min_snow_line_height
: 0;
/* snow_line_level goes up to 4 so we divide by 5 to get a maximum ratio of 80% */
uint height_diff = RoundDivSU(max_height_diff * _settings_game.game_creation.snow_line_level, 5);
_settings_game.game_creation.snow_line_height = min_snow_line_height + height_diff;
}
}
/**

View File

@ -1217,6 +1217,15 @@ STR_TERRAIN_TYPE_ALPINIST :Alpinist
STR_TERRAIN_TYPE_CUSTOM :Custom height
STR_TERRAIN_TYPE_CUSTOM_VALUE :Custom height ({NUM})
###length 7
STR_SNOW_LINE_LEVEL_VERY_LOW :Very Low
STR_SNOW_LINE_LEVEL_LOW :Low
STR_SNOW_LINE_LEVEL_MEDIUM :Medium
STR_SNOW_LINE_LEVEL_HIGH :High
STR_SNOW_LINE_LEVEL_VERY_HIGH :Very high
STR_SNOW_LINE_LEVEL_CUSTOM :Custom
STR_SNOW_LINE_LEVEL_CUSTOM_NUMBER :Custom ({NUM})
###length 4
STR_CITY_APPROVAL_LENIENT :Lenient
STR_CITY_APPROVAL_TOLERANT :Tolerant
@ -1593,9 +1602,8 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit for how f
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snow line height: {STRING2}
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Choose at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage"
STR_CONFIG_SETTING_SNOW_COVERAGE :Snow coverage: {STRING2}
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Choose the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Sea level and coast tiles never have snow
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
STR_CONFIG_SETTING_SNOW_LINE_LEVEL :Snow line level: {STRING2}
STR_CONFIG_SETTING_SNOW_LINE_LEVEL_HELPTEXT :Choose the approximate height above which all tiles will be covered by snow in sub-arctic landscape. Snow also affects industry generation and town growth requirements.
STR_CONFIG_SETTING_DESERT_COVERAGE :Desert coverage: {STRING2}
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Choose the approximate amount of desert on the tropical landscape. Desert also affects industry generation and town growth requirements. Only used during map generation
@ -3352,10 +3360,7 @@ STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Highest
STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Choose the highest peak that the game will attempt to create, measured in elevation above sea level
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP_TOOLTIP :{BLACK}Increase the maximum height of highest peak on the map by one
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN_TOOLTIP :{BLACK}Decrease the maximum height of highest peak on the map by one
STR_MAPGEN_SNOW_COVERAGE :{BLACK}Snow coverage:
STR_MAPGEN_SNOW_COVERAGE_UP_TOOLTIP :{BLACK}Increase snow coverage by ten percent
STR_MAPGEN_SNOW_COVERAGE_DOWN_TOOLTIP :{BLACK}Decrease snow coverage by ten percent
STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}%
STR_MAPGEN_SNOW_LINE_LEVEL :{BLACK}Snow line level:
STR_MAPGEN_DESERT_COVERAGE :{BLACK}Desert coverage:
STR_MAPGEN_DESERT_COVERAGE_UP_TOOLTIP :{BLACK}Increase desert coverage by ten percent
STR_MAPGEN_DESERT_COVERAGE_DOWN_TOOLTIP :{BLACK}Decrease desert coverage by ten percent
@ -3420,7 +3425,7 @@ STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Target peak height
STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Highest peak
STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Snow coverage (in %)
STR_MAPGEN_SNOW_LINE_LEVEL_QUERY_CAPT :{WHITE}Snow line height
STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Desert coverage (in %)
STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Change starting year

View File

@ -5001,6 +5001,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}需要
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}土地倾斜的方向不对
STR_ERROR_CAN_T_DO_THIS :{WHITE}不能这样做……
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}必须先摧毁建筑
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}……建筑物被保护
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}无法清除这个区域……
STR_ERROR_SITE_UNSUITABLE :{WHITE}……地点不合适
STR_ERROR_ALREADY_BUILT :{WHITE}……已经建成

View File

@ -1356,8 +1356,8 @@ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :可以在建築
STR_CONFIG_SETTING_CATCHMENT :容許更真實的服務範圍設定:{STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :使車站和機場的服務範圍根據其種類和大小而改變。
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :公司車站可以為自帶車站的工業設施提供服務{STRING}
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :啟用後,公司車站可以為附近自帶車站的工業設施(如油井)提供服務。禁用後,這些工業設施只能由其自帶的車站提供服務,並且這些車站不會提供除了該工業設施以外的產品
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :公司車站可以服務附設車站的工業設施{STRING}
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :啟用後,公司車站可以為附近附設車站的工業(如鑽油平台)提供服務。停用後,這些工業只能由其附設的車站提供服務,並且附設車站不會提供除了該工業設施以外的任何服務
STR_CONFIG_SETTING_EXTRADYNAMITE :允許移除更多市鎮擁有的道路、橋樑及隧道:{STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :使玩家更容易地移除市鎮擁有的基礎建設和建築物。
@ -5001,7 +5001,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}需要
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}地面斜坡方向不對
STR_ERROR_CAN_T_DO_THIS :{WHITE}不能執行以下動作...
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}必須先摧毀建築物
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}……建築物受到保護
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}……建築物保護
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}不能清除這個地段...
STR_ERROR_SITE_UNSUITABLE :{WHITE}... 地點不適合
STR_ERROR_ALREADY_BUILT :{WHITE}……經已建成

View File

@ -66,6 +66,7 @@
#include "../timer/timer_game_economy.h"
#include "../timer/timer_game_tick.h"
#include "../picker_func.h"
#include "../genworld.h"
#include "saveload_internal.h"
@ -3397,6 +3398,11 @@ bool AfterLoadGame()
}
}
if (IsSavegameVersionBefore(SLV_SNOW_LINE_LEVEL)) {
/* The snow line level replaces the snow coverage but the two do not map very well. */
_settings_game.game_creation.snow_line_level = CUSTOM_SNOW_LEVEL_NUMBER;
}
AfterLoadLabelMaps();
AfterLoadCompanyStats();
AfterLoadStoryBook();

View File

@ -143,7 +143,7 @@ const SaveLoadCompat _settings_sl_compat[] = {
SLC_VAR("economy.fund_roads"),
SLC_VAR("economy.give_money"),
SLC_VAR("game_creation.snow_line_height"),
SLC_VAR("game_creation.snow_coverage"),
SLC_NULL(1, SLV_MAPGEN_SETTINGS_REVAMP, SLV_TABLE_CHUNKS),
SLC_VAR("game_creation.desert_coverage"),
SLC_NULL(4, SL_MIN_VERSION, SLV_144),
SLC_VAR("game_creation.starting_year"),

View File

@ -405,6 +405,7 @@ enum SaveLoadVersion : uint16_t {
SLV_FACE_STYLES, ///< 355 PR#14319 Addition of face styles, replacing gender and ethnicity.
SLV_INDUSTRY_NUM_VALID_HISTORY, ///< 356 PR#14416 Store number of valid history records for industries.
SLV_SNOW_LINE_LEVEL, ///< 357 PR#14428 Replacement of snow coverage setting with snow line level setting
SL_MAX_VERSION, ///< Highest possible saveload version
};

View File

@ -842,7 +842,7 @@ SettingsContainer &GetSettingsTree()
genworld->Add(new SettingEntry("difficulty.terrain_type"));
genworld->Add(new SettingEntry("game_creation.tgen_smoothness"));
genworld->Add(new SettingEntry("game_creation.variety"));
genworld->Add(new SettingEntry("game_creation.snow_coverage"));
genworld->Add(new SettingEntry("game_creation.snow_line_level"));
genworld->Add(new SettingEntry("game_creation.snow_line_height"));
genworld->Add(new SettingEntry("game_creation.desert_coverage"));
genworld->Add(new SettingEntry("game_creation.amount_of_rivers"));

View File

@ -363,8 +363,8 @@ struct GameCreationSettings {
uint8_t map_y; ///< Y size of map
uint8_t land_generator; ///< the landscape generator
uint8_t oil_refinery_limit; ///< distance oil refineries allowed from map edge
uint8_t snow_line_height; ///< the configured snow line height (deduced from "snow_coverage")
uint8_t snow_coverage; ///< the amount of snow coverage on the map
uint8_t snow_line_height; ///< the configured snow line height (deduced from "snow_line_level" unless it is set on "custom")
uint8_t snow_line_level; ///< the approximate snow line level on the map
uint8_t desert_coverage; ///< the amount of desert coverage on the map
uint8_t heightmap_height; ///< highest mountain for heightmap (towards what it scales)
uint8_t tgen_smoothness; ///< how rough is the terrain from 0-3

View File

@ -97,17 +97,17 @@ strval = STR_JUST_COMMA
cat = SC_BASIC
[SDT_VAR]
var = game_creation.snow_coverage
var = game_creation.snow_line_level
type = SLE_UINT8
from = SLV_MAPGEN_SETTINGS_REVAMP
flags = SettingFlag::NewgameOnly
def = DEF_SNOW_COVERAGE
from = SLV_SNOW_LINE_LEVEL
flags = SettingFlag::GuiDropdown, SettingFlag::NewgameOnly
def = 1
min = 0
max = 100
interval = 10
str = STR_CONFIG_SETTING_SNOW_COVERAGE
strhelp = STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT
strval = STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE
max = 5
interval = 1
str = STR_CONFIG_SETTING_SNOW_LINE_LEVEL
strhelp = STR_CONFIG_SETTING_SNOW_LINE_LEVEL_HELPTEXT
strval = STR_SNOW_LINE_LEVEL_VERY_LOW
cat = SC_BASIC
[SDT_VAR]

View File

@ -33,7 +33,6 @@ static const uint MIN_SNOWLINE_HEIGHT = 2; ///< Minimum snow
static const uint DEF_SNOWLINE_HEIGHT = 10; ///< Default snowline height
static const uint MAX_SNOWLINE_HEIGHT = (MAX_TILE_HEIGHT - 2); ///< Maximum allowed snowline height
static const uint DEF_SNOW_COVERAGE = 40; ///< Default snow coverage.
static const uint DEF_DESERT_COVERAGE = 50; ///< Default desert coverage.

View File

@ -34,9 +34,7 @@ enum GenerateLandscapeWidgets : WidgetID {
WID_GL_START_DATE_TEXT, ///< Start year.
WID_GL_START_DATE_UP, ///< Increase start year.
WID_GL_SNOW_COVERAGE_DOWN, ///< Decrease snow coverage.
WID_GL_SNOW_COVERAGE_TEXT, ///< Snow coverage.
WID_GL_SNOW_COVERAGE_UP, ///< Increase snow coverage.
WID_GL_SNOW_LINE_LEVEL_PULLDOWN, ///< Snow line level.
WID_GL_DESERT_COVERAGE_DOWN, ///< Decrease desert coverage.
WID_GL_DESERT_COVERAGE_TEXT, ///< Desert coverage.