diff --git a/CMakeLists.txt b/CMakeLists.txt index 552a4d9e4..abae8e617 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_minimum_required(VERSION 3.16) project(Gothic2Notr LANGUAGES C CXX) +include(GNUInstallDirs) set(CMAKE_CXX_STANDARD 20) set(BUILD_SHARED_LIBS OFF) @@ -186,4 +187,5 @@ if(${CMAKE_BUILD_TYPE} MATCHES "Debug") endif() # installation -install(TARGETS ${PROJECT_NAME} DESTINATION bin) +install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(FILES doc/Gothic2Notr.6 DESTINATION ${CMAKE_INSTALL_MANDIR}/man6) diff --git a/README.md b/README.md index 8f616b1a3..41d5e75c1 100644 --- a/README.md +++ b/README.md @@ -158,22 +158,24 @@ The game menu in Gothic 2 is done by scripting. While the original graphics sett Rendering distance is not customizable. ## Command line arguments -| Argument(s) | Description | -| ---------------------- | ------- | -| `-g` | specify path containing Gothic game data | -| `-game:` | specify game modification manifest (GothicStarter compatibility) | -| `-nomenu` | skip main menu | -| `-devmode` | enable marvin-mode at start of the game | -| `-w ` | startup world; newworld.zen is default | -| `-save q` | load the quick save on start | -| `-save ` | load a specified save-game slot on start | -| `-v -validation` | enable validation layers for graphics api | -| `-dx12` | force DirectX 12 renderer instead of Vulkan (Windows only) | -| `-g1` | assume a Gothic 1 installation | -| `-g2c` | assume a Gothic 2 classic installation | -| `-g2` | assume a Gothic 2 night of the raven installation | -| `-rt ` | explicitly enable or disable ray-query | -| `-gi ` | explicitly enable or disable ray-traced global illumination | -| `-ms ` | explicitly enable or disable meshlets | -| `-aa ` | enable anti-aliasing (number = 1-2, 2 = most expensive AA) | -| `-window` | windowed debugging mode (not to be used for playing) | +| Argument(s) | Description | +| ---------------------- | ------- | +| `-g` | specify path containing Gothic game data | +| `-game:` | specify game modification manifest (GothicStarter compatibility) | +| `-nomenu` | skip main menu | +| `-devmode` | enable marvin-mode at start of the game | +| `-w ` | startup world; newworld.zen is default | +| `-save q` | load the quick save on start | +| `-save ` | load a specified save-game slot on start | +| `-v -validation` | enable validation layers for graphics api | +| `-dx12` | force DirectX 12 renderer instead of Vulkan (Windows only) | +| `-g1` | assume a Gothic 1 installation | +| `-g2c` | assume a Gothic 2 classic installation | +| `-g2` | assume a Gothic 2 night of the raven installation | +| `-rt ` | explicitly enable or disable ray-query | +| `-gi ` | explicitly enable or disable ray-traced global illumination | +| `-ms ` | explicitly enable or disable meshlets | +| `-aa ` | enable anti-aliasing (number = 1-2, 2 = most expensive AA) | +| `-window` | windowed debugging mode (not to be used for playing) | +| `-benchmark [ci]` | run automated benchmark, reports avg/1% low FPS to stdout and log.txt; `ci` exits after completion | +| `-h` `--help` | show help message | diff --git a/debian/rules b/debian/rules index 7e23e0da6..c299e4f03 100755 --- a/debian/rules +++ b/debian/rules @@ -11,10 +11,7 @@ override_dh_update_autotools_config: override_dh_auto_configure: dh_auto_configure -- \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_BINDIR=games \ -DZK_ENABLE_INSTALL=OFF \ -DINSTALL_LIBS=OFF \ -DINSTALL_CMAKE_FILES=OFF - -# Custom install: only install the binary -override_dh_auto_install: - install -D -m 755 obj-*/opengothic/Gothic2Notr debian/opengothic/usr/games/Gothic2Notr diff --git a/doc/Gothic2Notr.6 b/doc/Gothic2Notr.6 new file mode 100644 index 000000000..c01d1e14c --- /dev/null +++ b/doc/Gothic2Notr.6 @@ -0,0 +1,145 @@ +.\" Man page for Gothic2Notr (OpenGothic) +.TH GOTHIC2NOTR 6 "January 2026" "OpenGothic" "Games" +.SH NAME +Gothic2Notr \- open source re-implementation of Gothic 2: Night of the Raven +.SH SYNOPSIS +.B Gothic2Notr +.RB [ \-g +.IR path ] +.RB [ \-game:\fImodfile.ini\fR ] +.RB [ options ] +.SH DESCRIPTION +.B OpenGothic +is a feature-complete Gothic game client, compatible with the original +game data and mods. It makes the original Gothic 1 and Gothic 2 work on +modern systems using Vulkan graphics (or Metal on macOS, DirectX 12 on Windows). +.PP +Gothic 2: Night of the Raven is required as OpenGothic does not provide +any built-in game assets or scripts. +.SH OPTIONS +.TP +.BI \-g " path" +Specify the path containing Gothic game data. If not provided, OpenGothic +attempts to auto-detect common installation paths. +.TP +.BI \-game: modfile.ini +Specify a game modification manifest file (GothicStarter compatibility). +.TP +.B \-nomenu +Skip the main menu and start the game directly. +.TP +.B \-devmode +Enable marvin-mode (developer/debug mode) at the start of the game. +.TP +.BI \-w " worldname.zen" +Specify the startup world. Default is newworld.zen. +.TP +.B \-save q +Load the quick save on start. +.TP +.BI \-save " number" +Load a specified save-game slot on start. +.TP +.BR \-v ", " \-validation +Enable validation layers for the graphics API (useful for debugging). +.TP +.B \-dx12 +Force DirectX 12 renderer instead of Vulkan (Windows only). +.TP +.B \-g1 +Assume a Gothic 1 installation. +.TP +.B \-g2c +Assume a Gothic 2 classic installation (without Night of the Raven). +.TP +.B \-g2 +Assume a Gothic 2: Night of the Raven installation. +.TP +.BI \-rt " boolean" +Explicitly enable or disable ray-query. Affects only capable hardware. +Off by default for integrated GPUs. +.TP +.BI \-gi " boolean" +Explicitly enable or disable ray-traced global illumination. +.TP +.BI \-ms " boolean" +Explicitly enable or disable meshlets (mesh shaders). +.TP +.BI \-aa " number" +Enable anti-aliasing. Number can be 0-2, where 2 is the most expensive AA. +.TP +.B \-window +Windowed debugging mode (not recommended for normal play). +.TP +.BI \-benchmark " [ci]" +Run an automated benchmark without user input. Reports average FPS and +1% low FPS to the console, log.txt, and standard output. Typically used +with +.B \-devmode \-nomenu +for automated testing. If +.B ci +is specified, the program exits automatically after completion (useful +for regression testing). The benchmark can be restarted in-game with +.B ztoggle timedemo +or cancelled by loading a save game. +.TP +.BR \-h ", " \-\-help +Print a brief help message and exit. +.SH GRAPHICS OPTIONS +The in-game menu provides additional graphics settings: +.TP +.B Cloud Shadows +Mapped to SSAO (Screen Space Ambient Occlusion). +.TP +.B Radial Fog +Mapped to volumetric fog. +.TP +.B Reflections +Screen space reflections. +.TP +.B Video settings +Internal 3D rendering resolution can be altered here. UI and text +are always rendered at full resolution. +.SH MODIFICATIONS +Mods can be installed as usual. Provide the modfile.ini to OpenGothic via +the +.B \-game: +parameter to play. +.PP +.B Supported: +Content mods (retexture/reworld/animations) that only rely on regular +scripting and do not use memory hacking. +.PP +.B Not supported: +Ikarus/LeGo (partial support in progress), Union, DX11 Renderer, +AST SDK, Ninja. +.SH FILES +.TP +.I save_slot_0.sav +Quick save file, stored in the current working directory. +.TP +.I save_slot_1.sav " ... " save_slot_15.sav +Regular save files, stored in the current working directory. +.TP +.I log.txt +Log file created in the current working directory. +.PP +On macOS, if Gothic data is located in +.IR ~/Library/Application\ Support/OpenGothic/ , +the working directory is changed there automatically, so saves and logs +are stored alongside the game data. +.SH EXIT STATUS +.TP +.B 0 +Successful program execution. +.TP +.B non-zero +An error occurred, check log.txt for details. +.SH BUGS +Report bugs at https://github.com/Try/OpenGothic/issues +.SH SEE ALSO +Project homepage: https://github.com/Try/OpenGothic +.PP +Discord community: https://discord.gg/G9XvcFQnn6 +.SH AUTHORS +OpenGothic is developed by Try and contributors. diff --git a/game/commandline.cpp b/game/commandline.cpp index eda2039ba..58dc0510e 100644 --- a/game/commandline.cpp +++ b/game/commandline.cpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include #if defined(__APPLE__) @@ -48,7 +50,33 @@ CommandLine::CommandLine(int argc, const char** argv) { std::string_view mod; for(int i=1;i Path to Gothic game data\n" + " -game: Load game modification\n" + " -nomenu Skip main menu\n" + " -devmode Enable marvin-mode\n" + " -w Startup world (default: newworld.zen)\n" + " -save q| Load quick save or save slot\n" + " -v, -validation Enable graphics validation layers\n" + " -dx12 Force DirectX 12 (Windows only)\n" + " -g1, -g2c, -g2 Assume Gothic 1/2 Classic/2 NotR\n" + " -rt <0|1> Enable/disable ray-query\n" + " -gi <0|1> Enable/disable ray-traced GI\n" + " -ms <0|1> Enable/disable meshlets\n" + " -aa <0-2> Anti-aliasing level\n" + " -window Windowed mode\n" + " -benchmark [ci] Run benchmark (ci: exit after)\n" + " -h, --help Show this help\n" + "\n" + "See Gothic2Notr(6) man page for details.\n" + ); + std::exit(0); + } + else if(arg.find("-game:")==0) { if(!mod.empty()) Log::e("-game specified twice"); mod = arg.substr(6);