Changeset - r25084:9bee9b199dd7
[Not reviewed]
master
0 2 0
Patric Stout - 3 years ago 2021-03-25 22:51:37
truebrain@openttd.org
Change: scale heightmaps we export to highest peak and inform the user of this value

Before this commit, it scaled to map-height-limit. Recently this
could also be set to "auto", meaning players don't really know
or care about this value.

This also means that if a player exported a heightmap and wanted
to import it again, looking like the exact same map, he did not
know what value for "highest peak" to use.
2 files changed with 18 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/lang/english.txt
Show inline comments
 
@@ -4358,6 +4358,7 @@ STR_WARNING_FALLBACK_SOUNDSET           
 
STR_WARNING_SCREENSHOT_SIZE_CAPTION                             :{WHITE}Huge screenshot
 
STR_WARNING_SCREENSHOT_SIZE_MESSAGE                             :{YELLOW}The screenshot will have a resolution of {COMMA} x {COMMA} pixels. Taking the screenshot may take a while. Do you want to continue?
 

	
 
STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY                              :{WHITE}Heightmap successfully saved as '{RAW_STRING}'. Highest peak is {NUM}
 
STR_MESSAGE_SCREENSHOT_SUCCESSFULLY                             :{WHITE}Screenshot successfully saved as '{RAW_STRING}'
 
STR_ERROR_SCREENSHOT_FAILED                                     :{WHITE}Screenshot failed!
 

	
src/screenshot.cpp
Show inline comments
 
@@ -39,6 +39,7 @@ uint _num_screenshot_formats;         //
 
uint _cur_screenshot_format;          ///< Index of the currently selected screenshot format in #_screenshot_formats.
 
static char _screenshot_name[128];    ///< Filename of the screenshot file.
 
char _full_screenshot_name[MAX_PATH]; ///< Pathname of the screenshot file.
 
uint _heightmap_highest_peak;         ///< When saving a heightmap, this contains the highest peak on the map.
 

	
 
/**
 
 * Callback function signature for generating lines of pixel data to be written to the screenshot file.
 
@@ -820,7 +821,7 @@ static void HeightmapCallback(void *user
 
	while (n > 0) {
 
		TileIndex ti = TileXY(MapMaxX(), y);
 
		for (uint x = MapMaxX(); true; x--) {
 
			*buf = 256 * TileHeight(ti) / (1 + _settings_game.construction.map_height_limit);
 
			*buf = 256 * TileHeight(ti) / (1 + _heightmap_highest_peak);
 
			buf++;
 
			if (x == 0) break;
 
			ti = TILE_ADDXY(ti, -1, 0);
 
@@ -843,6 +844,13 @@ bool MakeHeightmapScreenshot(const char 
 
		palette[i].g = i;
 
		palette[i].b = i;
 
	}
 

	
 
	_heightmap_highest_peak = 0;
 
	for (TileIndex tile = 0; tile < MapSize(); tile++) {
 
		uint h = TileHeight(tile);
 
		_heightmap_highest_peak = std::max(h, _heightmap_highest_peak);
 
	}
 

	
 
	const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format;
 
	return sf->proc(filename, HeightmapCallback, nullptr, MapSizeX(), MapSizeY(), 8, palette);
 
}
 
@@ -946,8 +954,14 @@ bool MakeScreenshot(ScreenshotType t, co
 
	}
 

	
 
	if (ret) {
 
		SetDParamStr(0, _screenshot_name);
 
		ShowErrorMessage(STR_MESSAGE_SCREENSHOT_SUCCESSFULLY, INVALID_STRING_ID, WL_WARNING);
 
		if (t == SC_HEIGHTMAP) {
 
			SetDParamStr(0, _screenshot_name);
 
			SetDParam(1, _heightmap_highest_peak);
 
			ShowErrorMessage(STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY, INVALID_STRING_ID, WL_CRITICAL);
 
		} else {
 
			SetDParamStr(0, _screenshot_name);
 
			ShowErrorMessage(STR_MESSAGE_SCREENSHOT_SUCCESSFULLY, INVALID_STRING_ID, WL_WARNING);
 
		}
 
	} else {
 
		ShowErrorMessage(STR_ERROR_SCREENSHOT_FAILED, INVALID_STRING_ID, WL_ERROR);
 
	}
0 comments (0 inline, 0 general)