1
0
mirror of https://github.com/OpenTTD/OpenTTD synced 2026-01-19 02:12:37 +01:00

Feature: Draw infinite water when all borders are water (#13289)

This commit is contained in:
Tyler Trahan
2025-09-26 10:37:27 -04:00
committed by GitHub
parent 5822c8cc65
commit 0b99a0b66a
11 changed files with 105 additions and 24 deletions

View File

@@ -115,7 +115,7 @@ static constexpr NWidgetPart _nested_generate_landscape_widgets[] = {
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_VARIETY_PULLDOWN), SetToolTip(STR_CONFIG_SETTING_VARIETY_HELPTEXT), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_VARIETY_PULLDOWN), SetToolTip(STR_CONFIG_SETTING_VARIETY_HELPTEXT), SetFill(1, 1),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_SMOOTHNESS_PULLDOWN), SetToolTip(STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_SMOOTHNESS_PULLDOWN), SetToolTip(STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT), SetFill(1, 1),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetToolTip(STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetToolTip(STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT), SetFill(1, 1),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_BORDERS_RANDOM), SetToolTip(STR_MAPGEN_BORDER_TYPE_TOOLTIP), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_BORDERS_PULLDOWN), SetToolTip(STR_MAPGEN_BORDER_TYPE_TOOLTIP), SetFill(1, 1),
EndContainer(), EndContainer(),
EndContainer(), EndContainer(),
@@ -379,6 +379,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, STR_TERRAIN_TYPE_CUSTOM}; 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, STR_TERRAIN_TYPE_CUSTOM};
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}; 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};
static const StringID _rivers[] = {STR_RIVERS_NONE, STR_RIVERS_FEW, STR_RIVERS_MODERATE, STR_RIVERS_LOT}; static const StringID _rivers[] = {STR_RIVERS_NONE, STR_RIVERS_FEW, STR_RIVERS_MODERATE, STR_RIVERS_LOT};
static const StringID _borders[] = {STR_MAPGEN_BORDER_RANDOMIZE, STR_MAPGEN_BORDER_MANUAL, STR_MAPGEN_BORDER_INFINITE_WATER};
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}; 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};
static const StringID _rotation[] = {STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE}; static const StringID _rotation[] = {STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE};
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_towns[] = {STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM};
@@ -471,7 +472,7 @@ struct GenerateLandscapeWindow : public Window {
case WID_GL_RIVER_PULLDOWN: return GetString(_rivers[_settings_newgame.game_creation.amount_of_rivers]); case WID_GL_RIVER_PULLDOWN: return GetString(_rivers[_settings_newgame.game_creation.amount_of_rivers]);
case WID_GL_SMOOTHNESS_PULLDOWN: return GetString(_smoothness[_settings_newgame.game_creation.tgen_smoothness]); case WID_GL_SMOOTHNESS_PULLDOWN: return GetString(_smoothness[_settings_newgame.game_creation.tgen_smoothness]);
case WID_GL_VARIETY_PULLDOWN: return GetString(_variety[_settings_newgame.game_creation.variety]); case WID_GL_VARIETY_PULLDOWN: return GetString(_variety[_settings_newgame.game_creation.variety]);
case WID_GL_BORDERS_RANDOM: return GetString((_settings_newgame.game_creation.water_borders == BorderFlag::Random) ? STR_MAPGEN_BORDER_RANDOMIZE : STR_MAPGEN_BORDER_MANUAL); case WID_GL_BORDERS_PULLDOWN: return GetString(_borders[_settings_newgame.game_creation.water_border_presets]);
case WID_GL_WATER_NE: return GetString((_settings_newgame.game_creation.water_borders == BorderFlag::Random) ? STR_MAPGEN_BORDER_RANDOM : _settings_newgame.game_creation.water_borders.Test(BorderFlag::NorthEast) ? STR_MAPGEN_BORDER_WATER : STR_MAPGEN_BORDER_FREEFORM); case WID_GL_WATER_NE: return GetString((_settings_newgame.game_creation.water_borders == BorderFlag::Random) ? STR_MAPGEN_BORDER_RANDOM : _settings_newgame.game_creation.water_borders.Test(BorderFlag::NorthEast) ? STR_MAPGEN_BORDER_WATER : STR_MAPGEN_BORDER_FREEFORM);
case WID_GL_WATER_NW: return GetString((_settings_newgame.game_creation.water_borders == BorderFlag::Random) ? STR_MAPGEN_BORDER_RANDOM : _settings_newgame.game_creation.water_borders.Test(BorderFlag::NorthWest) ? STR_MAPGEN_BORDER_WATER : STR_MAPGEN_BORDER_FREEFORM); case WID_GL_WATER_NW: return GetString((_settings_newgame.game_creation.water_borders == BorderFlag::Random) ? STR_MAPGEN_BORDER_RANDOM : _settings_newgame.game_creation.water_borders.Test(BorderFlag::NorthWest) ? STR_MAPGEN_BORDER_WATER : STR_MAPGEN_BORDER_FREEFORM);
case WID_GL_WATER_SE: return GetString((_settings_newgame.game_creation.water_borders == BorderFlag::Random) ? STR_MAPGEN_BORDER_RANDOM : _settings_newgame.game_creation.water_borders.Test(BorderFlag::SouthEast) ? STR_MAPGEN_BORDER_WATER : STR_MAPGEN_BORDER_FREEFORM); case WID_GL_WATER_SE: return GetString((_settings_newgame.game_creation.water_borders == BorderFlag::Random) ? STR_MAPGEN_BORDER_RANDOM : _settings_newgame.game_creation.water_borders.Test(BorderFlag::SouthEast) ? STR_MAPGEN_BORDER_WATER : STR_MAPGEN_BORDER_FREEFORM);
@@ -507,12 +508,10 @@ struct GenerateLandscapeWindow : public Window {
if (mode == GLWM_GENERATE) { if (mode == GLWM_GENERATE) {
this->SetWidgetDisabledState(WID_GL_SMOOTHNESS_PULLDOWN, _settings_newgame.game_creation.land_generator == LG_ORIGINAL); this->SetWidgetDisabledState(WID_GL_SMOOTHNESS_PULLDOWN, _settings_newgame.game_creation.land_generator == LG_ORIGINAL);
this->SetWidgetDisabledState(WID_GL_VARIETY_PULLDOWN, _settings_newgame.game_creation.land_generator == LG_ORIGINAL); this->SetWidgetDisabledState(WID_GL_VARIETY_PULLDOWN, _settings_newgame.game_creation.land_generator == LG_ORIGINAL);
this->SetWidgetDisabledState(WID_GL_BORDERS_RANDOM, _settings_newgame.game_creation.land_generator == LG_ORIGINAL || !_settings_newgame.construction.freeform_edges); this->SetWidgetDisabledState(WID_GL_BORDERS_PULLDOWN, _settings_newgame.game_creation.land_generator == LG_ORIGINAL);
this->SetWidgetsDisabledState(_settings_newgame.game_creation.land_generator == LG_ORIGINAL || !_settings_newgame.construction.freeform_edges || _settings_newgame.game_creation.water_borders == BorderFlag::Random, this->SetWidgetsDisabledState(_settings_newgame.game_creation.land_generator == LG_ORIGINAL || !_settings_newgame.construction.freeform_edges || _settings_newgame.game_creation.water_borders == BorderFlag::Random,
WID_GL_WATER_NW, WID_GL_WATER_NE, WID_GL_WATER_SE, WID_GL_WATER_SW); WID_GL_WATER_NW, WID_GL_WATER_NE, WID_GL_WATER_SE, WID_GL_WATER_SW);
this->SetWidgetLoweredState(WID_GL_BORDERS_RANDOM, _settings_newgame.game_creation.water_borders == BorderFlag::Random);
this->SetWidgetLoweredState(WID_GL_WATER_NW, _settings_newgame.game_creation.water_borders.Test(BorderFlag::NorthWest)); this->SetWidgetLoweredState(WID_GL_WATER_NW, _settings_newgame.game_creation.water_borders.Test(BorderFlag::NorthWest));
this->SetWidgetLoweredState(WID_GL_WATER_NE, _settings_newgame.game_creation.water_borders.Test(BorderFlag::NorthEast)); this->SetWidgetLoweredState(WID_GL_WATER_NE, _settings_newgame.game_creation.water_borders.Test(BorderFlag::NorthEast));
this->SetWidgetLoweredState(WID_GL_WATER_SE, _settings_newgame.game_creation.water_borders.Test(BorderFlag::SouthEast)); this->SetWidgetLoweredState(WID_GL_WATER_SE, _settings_newgame.game_creation.water_borders.Test(BorderFlag::SouthEast));
@@ -622,10 +621,7 @@ struct GenerateLandscapeWindow : public Window {
case WID_GL_SMOOTHNESS_PULLDOWN: strs = _smoothness; break; case WID_GL_SMOOTHNESS_PULLDOWN: strs = _smoothness; break;
case WID_GL_VARIETY_PULLDOWN: strs = _variety; break; case WID_GL_VARIETY_PULLDOWN: strs = _variety; break;
case WID_GL_HEIGHTMAP_ROTATION_PULLDOWN: strs = _rotation; break; case WID_GL_HEIGHTMAP_ROTATION_PULLDOWN: strs = _rotation; break;
case WID_GL_BORDERS_RANDOM: case WID_GL_BORDERS_PULLDOWN: strs = _borders; break;
d = maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_RANDOMIZE), GetStringBoundingBox(STR_MAPGEN_BORDER_MANUAL));
break;
case WID_GL_WATER_NE: case WID_GL_WATER_NE:
case WID_GL_WATER_NW: case WID_GL_WATER_NW:
case WID_GL_WATER_SE: case WID_GL_WATER_SE:
@@ -807,7 +803,11 @@ struct GenerateLandscapeWindow : public Window {
ShowDropDownMenu(this, _variety, _settings_newgame.game_creation.variety, WID_GL_VARIETY_PULLDOWN, 0, 0); ShowDropDownMenu(this, _variety, _settings_newgame.game_creation.variety, WID_GL_VARIETY_PULLDOWN, 0, 0);
break; break;
/* Freetype map borders */ /* Map borders */
case WID_GL_BORDERS_PULLDOWN:
ShowDropDownMenu(this, _borders, _settings_newgame.game_creation.water_border_presets, WID_GL_BORDERS_PULLDOWN, 0, 0);
break;
case WID_GL_WATER_NW: case WID_GL_WATER_NW:
_settings_newgame.game_creation.water_borders.Flip(BorderFlag::NorthWest); _settings_newgame.game_creation.water_borders.Flip(BorderFlag::NorthWest);
SndClickBeep(); SndClickBeep();
@@ -832,16 +832,6 @@ struct GenerateLandscapeWindow : public Window {
this->InvalidateData(); this->InvalidateData();
break; break;
case WID_GL_BORDERS_RANDOM:
if (_settings_newgame.game_creation.water_borders == BorderFlag::Random) {
_settings_newgame.game_creation.water_borders.Reset();
} else {
_settings_newgame.game_creation.water_borders = BorderFlag::Random;
}
SndClickBeep();
this->InvalidateData();
break;
case WID_GL_AI_BUTTON: ///< AI Settings case WID_GL_AI_BUTTON: ///< AI Settings
ShowAIConfigWindow(); ShowAIConfigWindow();
break; break;
@@ -908,6 +898,25 @@ struct GenerateLandscapeWindow : public Window {
break; break;
} }
case WID_GL_BORDERS_PULLDOWN: {
switch (index) {
case BFP_RANDOM:
_settings_newgame.game_creation.water_borders = BorderFlag::Random;
_settings_newgame.construction.freeform_edges = true;
break;
case BFP_MANUAL:
_settings_newgame.game_creation.water_borders = {};
_settings_newgame.construction.freeform_edges = true;
break;
case BFP_INFINITE_WATER:
_settings_newgame.game_creation.water_borders = BORDERFLAGS_ALL;
_settings_newgame.construction.freeform_edges = false;
break;
}
_settings_newgame.game_creation.water_border_presets = static_cast<BorderFlagPresets>(index);
break;
}
case WID_GL_WATER_PULLDOWN: { case WID_GL_WATER_PULLDOWN: {
if ((uint)index == CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY) { if ((uint)index == CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY) {
this->widget_id = widget; this->widget_id = widget;

View File

@@ -9,6 +9,7 @@
#include "stdafx.h" #include "stdafx.h"
#include "heightmap.h" #include "heightmap.h"
#include "landscape.h"
#include "clear_map.h" #include "clear_map.h"
#include "strings_func.h" #include "strings_func.h"
#include "void_map.h" #include "void_map.h"
@@ -523,6 +524,10 @@ bool LoadHeightmap(DetailedFileType dft, std::string_view filename)
GreyscaleToMapHeights(x, y, map); GreyscaleToMapHeights(x, y, map);
FixSlopes(); FixSlopes();
/* If all map borders are water, we will draw infinite water. */
_settings_game.construction.freeform_edges = !IsMapSurroundedByWater();
MarkWholeScreenDirty(); MarkWholeScreenDirty();
return true; return true;

View File

@@ -637,6 +637,36 @@ void ClearSnowLine()
_snow_line = nullptr; _snow_line = nullptr;
} }
/**
* Check if all tiles on the map edge should be considered water borders.
* @return true If the edge of the map is flat and height 0, allowing for infinite water borders.
*/
bool IsMapSurroundedByWater()
{
auto check_tile = [](uint x, uint y) -> bool {
auto [slope, h] = GetTilePixelSlopeOutsideMap(x, y);
return ((slope == SLOPE_FLAT) && (h == 0));
};
/* Check the map corners. */
if (!check_tile(0, 0)) return false;
if (!check_tile(0, Map::SizeY())) return false;
if (!check_tile(Map::SizeX(), 0)) return false;
if (!check_tile(Map::SizeX(), Map::SizeY())) return false;
/* Check the map edges.*/
for (uint x = 0; x <= Map::SizeX(); x++) {
if (!check_tile(x, 0)) return false;
if (!check_tile(x, Map::SizeY())) return false;
}
for (uint y = 1; y < Map::SizeY(); y++) {
if (!check_tile(0, y)) return false;
if (!check_tile(Map::SizeX(), y)) return false;
}
return true;
}
/** /**
* Clear a piece of landscape * Clear a piece of landscape
* @param flags of operation to conduct * @param flags of operation to conduct

View File

@@ -33,6 +33,8 @@ uint8_t HighestSnowLine();
uint8_t LowestSnowLine(); uint8_t LowestSnowLine();
void ClearSnowLine(); void ClearSnowLine();
bool IsMapSurroundedByWater();
int GetSlopeZInCorner(Slope tileh, Corner corner); int GetSlopeZInCorner(Slope tileh, Corner corner);
std::tuple<Slope, int> GetFoundationSlope(TileIndex tile); std::tuple<Slope, int> GetFoundationSlope(TileIndex tile);

View File

@@ -3428,8 +3428,11 @@ STR_MAPGEN_SOUTHWEST :{BLACK}Southwes
STR_MAPGEN_BORDER_FREEFORM :{BLACK}Freeform STR_MAPGEN_BORDER_FREEFORM :{BLACK}Freeform
STR_MAPGEN_BORDER_WATER :{BLACK}Water STR_MAPGEN_BORDER_WATER :{BLACK}Water
STR_MAPGEN_BORDER_RANDOM :{BLACK}Random STR_MAPGEN_BORDER_RANDOM :{BLACK}Random
STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Random
STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual ###length 3
STR_MAPGEN_BORDER_RANDOMIZE :Random
STR_MAPGEN_BORDER_MANUAL :Manual
STR_MAPGEN_BORDER_INFINITE_WATER :Infinite Water
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Heightmap rotation: STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Heightmap rotation:
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Heightmap name: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Heightmap name:

View File

@@ -253,6 +253,11 @@ CommandCost CmdBuildObject(DoCommandFlags flags, TileIndex tile, ObjectType type
Owner o = GetTileOwner(t); Owner o = GetTileOwner(t);
if (o != OWNER_NONE && o != OWNER_WATER) cost.AddCost(CheckOwnership(o, t)); if (o != OWNER_NONE && o != OWNER_WATER) cost.AddCost(CheckOwnership(o, t));
/* If freeform edges are disabled, don't allow building on edge tiles. */
if (!_settings_game.construction.freeform_edges && (!IsInsideMM(TileX(t), 1, Map::MaxX() - 1) || !IsInsideMM(TileY(t), 1, Map::MaxY() - 1))) {
return CommandCost(STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP);
}
/* However, the tile has to be clear of vehicles. */ /* However, the tile has to be clear of vehicles. */
cost.AddCost(EnsureNoVehicleOnGround(t)); cost.AddCost(EnsureNoVehicleOnGround(t));
} }

View File

@@ -64,6 +64,13 @@ enum IndustryDensity : uint8_t {
ID_END, ///< Number of industry density settings. ID_END, ///< Number of industry density settings.
}; };
/** Possible options for the Borders pulldown in the Genworld GUI. */
enum BorderFlagPresets : uint8_t {
BFP_RANDOM = 0,
BFP_MANUAL,
BFP_INFINITE_WATER,
};
/** Possible values for the "timekeeping_units" setting. */ /** Possible values for the "timekeeping_units" setting. */
enum TimekeepingUnits : uint8_t { enum TimekeepingUnits : uint8_t {
TKU_CALENDAR = 0, TKU_CALENDAR = 0,
@@ -375,6 +382,7 @@ struct GameCreationSettings {
uint8_t town_name; ///< the town name generator used for town names uint8_t town_name; ///< the town name generator used for town names
LandscapeType landscape; ///< the landscape we're currently in LandscapeType landscape; ///< the landscape we're currently in
BorderFlags water_borders; ///< bitset of the borders that are water BorderFlags water_borders; ///< bitset of the borders that are water
BorderFlagPresets water_border_presets; ///< presets for map border options
uint16_t custom_town_number; ///< manually entered number of towns uint16_t custom_town_number; ///< manually entered number of towns
uint16_t custom_industry_number; ///< manually entered number of industries uint16_t custom_industry_number; ///< manually entered number of industries
uint8_t variety; ///< variety level applied to TGP uint8_t variety; ///< variety level applied to TGP

View File

@@ -268,6 +268,13 @@ def = 15
min = 0 min = 0
max = 16 max = 16
[SDT_VAR]
var = game_creation.water_border_presets
type = SLE_UINT8
def = BFP_RANDOM
min = BFP_RANDOM
max = BFP_INFINITE_WATER
[SDT_VAR] [SDT_VAR]
var = game_creation.custom_town_number var = game_creation.custom_town_number
type = SLE_UINT16 type = SLE_UINT16

View File

@@ -21,7 +21,12 @@
static void DrawTile_Void(TileInfo *ti) static void DrawTile_Void(TileInfo *ti)
{ {
DrawGroundSprite(SPR_FLAT_BARE_LAND + SlopeToSpriteOffset(ti->tileh), PALETTE_ALL_BLACK); /* If freeform edges are off, draw infinite water off the edges of the map. */
if (!_settings_game.construction.freeform_edges) {
DrawGroundSprite(SPR_FLAT_WATER_TILE + SlopeToSpriteOffset(ti->tileh), PAL_NONE);
} else {
DrawGroundSprite(SPR_FLAT_BARE_LAND + SlopeToSpriteOffset(ti->tileh), PALETTE_ALL_BLACK);
}
} }

View File

@@ -454,6 +454,13 @@ CommandCost CmdBuildLock(DoCommandFlags flags, TileIndex tile)
DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile)); DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile));
if (dir == INVALID_DIAGDIR) return CommandCost(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION); if (dir == INVALID_DIAGDIR) return CommandCost(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
TileIndex lower_tile = TileAddByDiagDir(tile, ReverseDiagDir(dir));
/* If freeform edges are disabled, don't allow building on edge tiles. */
if (!_settings_game.construction.freeform_edges && (!IsInsideMM(TileX(lower_tile), 1, Map::MaxX() - 1) || !IsInsideMM(TileY(lower_tile), 1, Map::MaxY() - 1))) {
return CommandCost(STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP);
}
return DoBuildLock(tile, dir, flags); return DoBuildLock(tile, dir, flags);
} }

View File

@@ -54,7 +54,7 @@ enum GenerateLandscapeWidgets : WidgetID {
WID_GL_SMOOTHNESS_PULLDOWN, ///< Dropdown 'Smoothness'. WID_GL_SMOOTHNESS_PULLDOWN, ///< Dropdown 'Smoothness'.
WID_GL_VARIETY_PULLDOWN, ///< Dropdown 'Variety distribution'. WID_GL_VARIETY_PULLDOWN, ///< Dropdown 'Variety distribution'.
WID_GL_BORDERS_RANDOM, ///< 'Random'/'Manual' borders. WID_GL_BORDERS_PULLDOWN, ///< Dropdown 'Map edges'.
WID_GL_WATER_NW, ///< NW 'Water'/'Freeform'. WID_GL_WATER_NW, ///< NW 'Water'/'Freeform'.
WID_GL_WATER_NE, ///< NE 'Water'/'Freeform'. WID_GL_WATER_NE, ///< NE 'Water'/'Freeform'.
WID_GL_WATER_SE, ///< SE 'Water'/'Freeform'. WID_GL_WATER_SE, ///< SE 'Water'/'Freeform'.