summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cheat_gui.cpp3
-rw-r--r--src/settings.cpp21
-rw-r--r--src/table/settings.ini4
3 files changed, 26 insertions, 2 deletions
diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp
index 398bef00a..e252912c3 100644
--- a/src/cheat_gui.cpp
+++ b/src/cheat_gui.cpp
@@ -125,7 +125,8 @@ static int32 ClickChangeDateCheat(int32 p1, int32 p2)
* @return New value (or unchanged old value) of the maximum
* allowed heightlevel value.
*/
-static int32 ClickChangeMaxHlCheat(int32 p1, int32 p2) {
+static int32 ClickChangeMaxHlCheat(int32 p1, int32 p2)
+{
p1 = Clamp(p1, MIN_MAX_HEIGHTLEVEL, MAX_MAX_HEIGHTLEVEL);
/* Check if at least one mountain on the map is higher than the new value.
diff --git a/src/settings.cpp b/src/settings.cpp
index e2baed5ba..9dc08ecc1 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -1277,6 +1277,27 @@ static bool ChangeDynamicEngines(int32 p1)
return true;
}
+static bool ChangeMaxHeightLevel(int32 p1)
+{
+ if (_game_mode == GM_NORMAL) return false;
+ if (_game_mode != GM_EDITOR) return true;
+
+ /* Check if at least one mountain on the map is higher than the new value.
+ * If yes, disallow the change. */
+ for (TileIndex t = 0; t < MapSize(); t++) {
+ if ((int32)TileHeight(t) > p1) {
+ ShowErrorMessage(STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN, INVALID_STRING_ID, WL_ERROR);
+ /* Return old, unchanged value */
+ return false;
+ }
+ }
+
+ /* The smallmap uses an index from heightlevels to colours. Trigger rebuilding it. */
+ InvalidateWindowClassesData(WC_SMALLMAP, 2);
+
+ return true;
+}
+
static bool StationCatchmentChanged(int32 p1)
{
Station::RecomputeIndustriesNearForAll();
diff --git a/src/table/settings.ini b/src/table/settings.ini
index d7f24d625..f6134deca 100644
--- a/src/table/settings.ini
+++ b/src/table/settings.ini
@@ -28,6 +28,7 @@ static bool TownFoundingChanged(int32 p1);
static bool DifficultyNoiseChange(int32 i);
static bool MaxNoAIsChange(int32 i);
static bool CheckRoadSide(int p1);
+static bool ChangeMaxHeightLevel(int32 p1);
static bool CheckFreeformEdges(int32 p1);
static bool ChangeDynamicEngines(int32 p1);
static bool StationCatchmentChanged(int32 p1);
@@ -382,7 +383,7 @@ base = GameSettings
var = construction.max_heightlevel
type = SLE_UINT8
from = 194
-guiflags = SGF_NEWGAME_ONLY | SGF_NO_NETWORK
+guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
def = DEF_MAX_HEIGHTLEVEL
min = MIN_MAX_HEIGHTLEVEL
max = MAX_MAX_HEIGHTLEVEL
@@ -390,6 +391,7 @@ interval = 1
str = STR_CONFIG_SETTING_MAX_HEIGHTLEVEL
strhelp = STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT
strval = STR_JUST_INT
+proc = ChangeMaxHeightLevel
cat = SC_BASIC
[SDT_BOOL]