mirror of https://github.com/OpenTTD/OpenTTD
(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.
parent
7979f9a475
commit
3836d83e8d
|
@ -364,16 +364,16 @@ static void GrayscaleToMapHeights(uint img_width, uint img_height, byte *map)
|
||||||
assert(img_row < img_height);
|
assert(img_row < img_height);
|
||||||
assert(img_col < img_width);
|
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];
|
uint heightmap_height = map[img_row * img_width + img_col];
|
||||||
|
|
||||||
/* The height in 1/255ths of the maximum height. */
|
/* The height in 1/256ths of the maximum height. */
|
||||||
heightmap_height *= _settings_game.construction.max_heightlevel;
|
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 */
|
/* 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. */
|
/* Only clear the tiles within the map area. */
|
||||||
if (IsInnerTile(tile)) {
|
if (IsInnerTile(tile)) {
|
||||||
|
|
Loading…
Reference in New Issue