From 3836d83e8d1f20d4c017635a2230b8cd517a93b5 Mon Sep 17 00:00:00 2001 From: frosch Date: Thu, 9 Oct 2014 19:57:40 +0000 Subject: (svn r26984) -Fix (r26905) [FS#6134]: Heightlevels must be scaled by number of intervals, not by the value of the highest interval. Otherwise the highest interval becomes non-proportionally small. --- src/heightmap.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/heightmap.cpp') diff --git a/src/heightmap.cpp b/src/heightmap.cpp index acbb202e2..97e525725 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -364,16 +364,16 @@ static void GrayscaleToMapHeights(uint img_width, uint img_height, byte *map) assert(img_row < img_height); assert(img_col < img_width); - /* The height in 1/255ths. */ + /* The height in 1/256ths. */ uint heightmap_height = map[img_row * img_width + img_col]; - /* The height in 1/255ths of the maximum height. */ - heightmap_height *= _settings_game.construction.max_heightlevel; + /* The height in 1/256ths of the maximum height. */ + heightmap_height *= (1 + _settings_game.construction.max_heightlevel); /* Scaling should not alter the coastline, thus values in the interval ]0..1] result in a heightlevel of 1 */ - if (IsInsideMM(heightmap_height, 1, UINT8_MAX)) heightmap_height = UINT8_MAX; + if (IsInsideMM(heightmap_height, 1, 256)) heightmap_height = 256; - SetTileHeight(tile, heightmap_height / UINT8_MAX); + SetTileHeight(tile, heightmap_height / 256); } /* Only clear the tiles within the map area. */ if (IsInnerTile(tile)) { -- cgit v1.2.3-54-g00ecf