diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index c5be0ba16a..7864023d1e 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1476,11 +1476,12 @@ DEF_CONSOLE_CMD(ConAlias) DEF_CONSOLE_CMD(ConScreenShot) { if (argc == 0) { - IConsoleHelp("Create a screenshot of the game. Usage: 'screenshot [viewport | normal | big | giant | heightmap | minimap] [no_con] [size ] []'"); + IConsoleHelp("Create a screenshot of the game. Usage: 'screenshot [viewport | normal | big | giant | world | heightmap | minimap] [no_con] [size ] []'"); IConsoleHelp("'viewport' (default) makes a screenshot of the current viewport (including menus, windows, ..), " "'normal' makes a screenshot of the visible area, " "'big' makes a zoomed-in screenshot of the visible area, " - "'giant' makes a screenshot of the whole map, " + "'giant' makes a screenshot of the whole map using the default zoom level, " + "'world' makes a screenshot of the whole map using the current zoom level, " "'heightmap' makes a heightmap screenshot of the map that can be loaded in as heightmap, " "'minimap' makes a top-viewed minimap screenshot of the whole world which represents one tile by one pixel. " "'no_con' hides the console to create the screenshot (only useful in combination with 'viewport'). " @@ -1509,6 +1510,9 @@ DEF_CONSOLE_CMD(ConScreenShot) } else if (strcmp(argv[arg_index], "giant") == 0) { type = SC_WORLD; arg_index += 1; + } else if (strcmp(argv[arg_index], "world") == 0) { + type = SC_WORLD_ZOOM; + arg_index += 1; } else if (strcmp(argv[arg_index], "heightmap") == 0) { type = SC_HEIGHTMAP; arg_index += 1; diff --git a/src/lang/english.txt b/src/lang/english.txt index 879ea8ccef..874eec5d97 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -5273,7 +5273,8 @@ STR_SCREENSHOT_CAPTION :{WHITE}Take a s STR_SCREENSHOT_SCREENSHOT :{BLACK}Normal screenshot STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Fully zoomed in screenshot STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Default zoom screenshot -STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Whole map screenshot +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Whole map default zoom screenshot +STR_SCREENSHOT_WORLD_SCREENSHOT_CURRENT_ZOOM :{BLACK}Whole map current zoom screenshot STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Heightmap screenshot STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap screenshot diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 6a86fb6d56..9f1c2dcbf7 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -755,11 +755,18 @@ void SetupScreenshotViewport(ScreenshotType t, Viewport *vp, uint32 width, uint3 vp->overlay = w->viewport->overlay; break; } - case SC_WORLD: { + case SC_WORLD: + case SC_WORLD_ZOOM: { assert(width == 0 && height == 0); /* Determine world coordinates of screenshot */ - vp->zoom = ZOOM_LVL_WORLD_SCREENSHOT; + if (t == SC_WORLD_ZOOM) { + Window *w = FindWindowById(WC_MAIN_WINDOW, 0); + vp->zoom = w->viewport->zoom; + vp->map_type = w->viewport->map_type; + } else { + vp->zoom = ZOOM_LVL_WORLD_SCREENSHOT; + } TileIndex north_tile = _settings_game.construction.freeform_edges ? TileXY(1, 1) : TileXY(0, 0); TileIndex south_tile = MapSize() - 1; @@ -965,6 +972,7 @@ bool MakeScreenshot(ScreenshotType t, const char *name, uint32 width, uint32 hei break; case SC_WORLD: + case SC_WORLD_ZOOM: ret = MakeLargeWorldScreenshot(t); break; diff --git a/src/screenshot.h b/src/screenshot.h index 022f104afc..2b3d52b2d1 100644 --- a/src/screenshot.h +++ b/src/screenshot.h @@ -21,6 +21,7 @@ enum ScreenshotType { SC_ZOOMEDIN, ///< Fully zoomed in screenshot of the visible area. SC_DEFAULTZOOM, ///< Zoomed to default zoom level screenshot of the visible area. SC_WORLD, ///< World screenshot. + SC_WORLD_ZOOM, ///< World screenshot using current zoom level. SC_HEIGHTMAP, ///< Heightmap of the world. SC_MINIMAP, ///< Minimap screenshot. }; diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index ee0cf588e4..d3f9a78732 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -36,6 +36,7 @@ struct ScreenshotWindow : Window { case WID_SC_TAKE_ZOOMIN: st = SC_ZOOMEDIN; break; case WID_SC_TAKE_DEFAULTZOOM: st = SC_DEFAULTZOOM; break; case WID_SC_TAKE_WORLD: st = SC_WORLD; break; + case WID_SC_TAKE_WORLD_ZOOM: st = SC_WORLD_ZOOM; break; case WID_SC_TAKE_HEIGHTMAP: st = SC_HEIGHTMAP; break; case WID_SC_TAKE_MINIMAP: st = SC_MINIMAP; break; } @@ -55,6 +56,7 @@ static const NWidgetPart _nested_screenshot[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_ZOOMIN), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_ZOOMIN_SCREENSHOT, 0), SetMinimalTextLines(2, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_DEFAULTZOOM), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT, 0), SetMinimalTextLines(2, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_WORLD), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_WORLD_SCREENSHOT, 0), SetMinimalTextLines(2, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_WORLD_ZOOM), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_WORLD_SCREENSHOT_CURRENT_ZOOM, 0), SetMinimalTextLines(2, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_HEIGHTMAP), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT, 0), SetMinimalTextLines(2, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_MINIMAP), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_MINIMAP_SCREENSHOT, 0), SetMinimalTextLines(2, 0), EndContainer(), diff --git a/src/widgets/screenshot_widget.h b/src/widgets/screenshot_widget.h index 6f42b784d6..ede8e66db1 100644 --- a/src/widgets/screenshot_widget.h +++ b/src/widgets/screenshot_widget.h @@ -17,6 +17,7 @@ enum ScreenshotWindowWidgets { WID_SC_TAKE_ZOOMIN, ///< Button for taking a zoomed in screenshot WID_SC_TAKE_DEFAULTZOOM, ///< Button for taking a screenshot at normal zoom WID_SC_TAKE_WORLD, ///< Button for taking a screenshot of the whole world + WID_SC_TAKE_WORLD_ZOOM, ///< Button for taking a screenshot of the whole world at the current zoom level WID_SC_TAKE_HEIGHTMAP, ///< Button for taking a heightmap "screenshot" WID_SC_TAKE_MINIMAP, ///< Button for taking a minimap screenshot };