From 609a41f7d5e00a398ad41dab8e55dca2a905e6b5 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 4 Jan 2016 19:14:54 +0100 Subject: [PATCH] Fix crash in mesa / i965_dri.so caused by globally overriding delete - Add a manpage and support for freedoom (from Debian) - Add appdata --- doom-shareware.desktop | 3 +- doom-shareware.sh | 6 + freedoom-support.patch | 421 +++++++++++++++++++++++++ freedoom-vlaunch.patch | 51 +++ heretic-shareware.desktop | 3 +- hexen-demo.desktop | 3 +- strife-demo.desktop | 3 +- vavoom-1.33-dont-override-delete.patch | 151 +++++++++ vavoom.6 | 133 ++++++++ vavoom.appdata.xml | 33 ++ vavoom.desktop | 9 + vavoom.png | Bin 0 -> 9300 bytes vavoom.spec | 77 +++-- 13 files changed, 859 insertions(+), 34 deletions(-) create mode 100644 freedoom-support.patch create mode 100644 freedoom-vlaunch.patch create mode 100644 vavoom-1.33-dont-override-delete.patch create mode 100644 vavoom.6 create mode 100644 vavoom.appdata.xml create mode 100644 vavoom.desktop create mode 100644 vavoom.png diff --git a/doom-shareware.desktop b/doom-shareware.desktop index 6e994ea..fb6300b 100644 --- a/doom-shareware.desktop +++ b/doom-shareware.desktop @@ -1,9 +1,8 @@ [Desktop Entry] -Encoding=UTF-8 Name=Doom Comment=Doom Shareware launcher, will automatically download the needed data-files Exec=doom-shareware -Icon=doom-logo.png +Icon=doom-logo Terminal=false Type=Application Categories=Game;ActionGame; diff --git a/doom-shareware.sh b/doom-shareware.sh index b7c11ab..6a7649e 100644 --- a/doom-shareware.sh +++ b/doom-shareware.sh @@ -2,6 +2,12 @@ set -e +# First check if the rpmfusion system-wide DOOM1.WAD is installed and +# if it is use that instead of downloading +if [ -f /usr/share/doom-shareware/DOOM1.WAD ]; then + exec /usr/bin/vavoom -iwaddir /usr/share/doom-shareware -iwad DOOM1.WAD -doom "$@" +fi + if [ ! -f ~/.vavoom/doom-shareware/doom1.wad ]; then set +e /usr/share/autodl/AutoDL.py /usr/share/vavoom/doom.autodlrc diff --git a/freedoom-support.patch b/freedoom-support.patch new file mode 100644 index 0000000..4a148ec --- /dev/null +++ b/freedoom-support.patch @@ -0,0 +1,421 @@ +Description: FreeDoom enablement for Vavoom. + this patch allows to run freedoom on vavoom with a single parameter + it also allows to save games on a dedicated directory instead of sharing with doom 2. +Author: gustavo panizzo +Bug-Debian: http://bugs.debian.org/661233 +Last-Update: 2012-02-28 + +--- vavoom-1.33.orig/basev/CMakeLists.txt ++++ vavoom-1.33/basev/CMakeLists.txt +@@ -10,5 +10,6 @@ add_subdirectory(hexen) + add_subdirectory(plutonia) + add_subdirectory(strife) + add_subdirectory(tnt) ++add_subdirectory(freedoom) + + install(FILES games.txt DESTINATION ${DATADIR}/basev) +--- vavoom-1.33.orig/basev/games.txt ++++ vavoom-1.33/basev/games.txt +@@ -78,3 +78,9 @@ iwad strife1.wad + addfile voices.wad + param -strife + end ++ ++// FreeDoom ++game basev/freedoom ++iwad freedoom.wad ++param -freedoom ++end +--- /dev/null ++++ vavoom-1.33/basev/freedoom/mapinfo.txt +@@ -0,0 +1,364 @@ ++//------------------------------------------------------ ++// Episode definition ++clearepisodes ++ ++episode map01 ++name "FreeDoom" ++ ++//------------------------------------------------------ ++map map01 lookup hustr_1 ++titlepatch cwilv00 ++cluster 5 ++next map02 ++secretnext map02 ++sky1 sky1 0 ++music d_runnin ++par 30 ++sucktime 1 ++ ++map map02 lookup hustr_2 ++titlepatch cwilv01 ++cluster 5 ++next map03 ++secretnext map03 ++sky1 sky1 0 ++music d_stalks ++par 90 ++sucktime 1 ++ ++map map03 lookup hustr_3 ++titlepatch cwilv02 ++cluster 5 ++next map04 ++secretnext map04 ++sky1 sky1 0 ++music d_countd ++par 120 ++sucktime 1 ++ ++map map04 lookup hustr_4 ++titlepatch cwilv03 ++cluster 5 ++next map05 ++secretnext map05 ++sky1 sky1 0 ++music d_betwee ++par 120 ++sucktime 1 ++ ++map map05 lookup hustr_5 ++titlepatch cwilv04 ++cluster 5 ++next map06 ++secretnext map06 ++sky1 sky1 0 ++music d_doom ++par 90 ++sucktime 1 ++ ++map map06 lookup hustr_6 ++titlepatch cwilv05 ++cluster 5 ++next map07 ++secretnext map07 ++sky1 sky1 0 ++music d_the_da ++par 150 ++sucktime 1 ++ ++;------------------------------------------------------ ++map map07 lookup hustr_7 ++titlepatch cwilv06 ++cluster 6 ++next map08 ++secretnext map08 ++sky1 sky1 0 ++music d_shawn ++par 120 ++sucktime 1 ++map07special ++ ++map map08 lookup hustr_8 ++titlepatch cwilv07 ++cluster 6 ++next map09 ++secretnext map09 ++sky1 sky1 0 ++music d_ddtblu ++par 120 ++sucktime 1 ++ ++map map09 lookup hustr_9 ++titlepatch cwilv08 ++cluster 6 ++next map10 ++secretnext map10 ++sky1 sky1 0 ++music d_in_cit ++par 270 ++sucktime 1 ++ ++map map10 lookup hustr_10 ++titlepatch cwilv09 ++cluster 6 ++next map11 ++secretnext map11 ++sky1 sky1 0 ++music d_dead ++par 90 ++sucktime 1 ++ ++map map11 lookup hustr_11 ++titlepatch cwilv10 ++cluster 6 ++next map12 ++secretnext map12 ++sky1 sky1 0 ++music d_stlks2 ++par 210 ++sucktime 1 ++ ++;------------------------------------------------------ ++map map12 lookup hustr_12 ++titlepatch cwilv11 ++cluster 7 ++next map13 ++secretnext map13 ++sky1 sky2 0 ++music d_theda2 ++par 150 ++sucktime 1 ++ ++map map13 lookup hustr_13 ++titlepatch cwilv12 ++cluster 7 ++next map14 ++secretnext map14 ++sky1 sky2 0 ++music d_doom2 ++par 150 ++sucktime 1 ++ ++map map14 lookup hustr_14 ++titlepatch cwilv13 ++cluster 7 ++next map15 ++secretnext map15 ++sky1 sky2 0 ++music d_ddtbl2 ++par 150 ++sucktime 1 ++ ++map map15 lookup hustr_15 ++titlepatch cwilv14 ++cluster 7 ++next map16 ++secretnext map31 ++sky1 sky2 0 ++music d_runni2 ++par 210 ++sucktime 1 ++ ++map map16 lookup hustr_16 ++titlepatch cwilv15 ++cluster 7 ++next map17 ++secretnext map17 ++sky1 sky2 0 ++music d_dead2 ++par 150 ++sucktime 1 ++ ++map map17 lookup hustr_17 ++titlepatch cwilv16 ++cluster 7 ++next map18 ++secretnext map18 ++sky1 sky2 0 ++music d_stlks3 ++par 420 ++sucktime 1 ++ ++map map18 lookup hustr_18 ++titlepatch cwilv17 ++cluster 7 ++next map19 ++secretnext map19 ++sky1 sky2 0 ++music d_romero ++par 150 ++sucktime 1 ++ ++map map19 lookup hustr_19 ++titlepatch cwilv18 ++cluster 7 ++next map20 ++secretnext map20 ++sky1 sky2 0 ++music d_shawn2 ++par 210 ++sucktime 1 ++ ++map map20 lookup hustr_20 ++titlepatch cwilv19 ++cluster 7 ++next map21 ++secretnext map21 ++sky1 sky2 0 ++music d_messag ++par 150 ++sucktime 1 ++ ++;------------------------------------------------------- ++map map21 lookup hustr_21 ++titlepatch cwilv20 ++cluster 8 ++next map22 ++secretnext map22 ++sky1 sky3 0 ++music d_count2 ++par 240 ++sucktime 1 ++ ++map map22 lookup hustr_22 ++titlepatch cwilv21 ++cluster 8 ++next map23 ++secretnext map23 ++sky1 sky3 0 ++music d_ddtbl3 ++par 150 ++sucktime 1 ++ ++map map23 lookup hustr_23 ++titlepatch cwilv22 ++cluster 8 ++next map24 ++secretnext map24 ++sky1 sky3 0 ++music d_ampie ++par 180 ++sucktime 1 ++ ++map map24 lookup hustr_24 ++titlepatch cwilv23 ++cluster 8 ++next map25 ++secretnext map25 ++sky1 sky3 0 ++music d_theda3 ++par 150 ++sucktime 1 ++ ++map map25 lookup hustr_25 ++titlepatch cwilv24 ++cluster 8 ++next map26 ++secretnext map26 ++sky1 sky3 0 ++music d_adrian ++par 150 ++sucktime 1 ++ ++map map26 lookup hustr_26 ++titlepatch cwilv25 ++cluster 8 ++next map27 ++secretnext map27 ++sky1 sky3 0 ++music d_messg2 ++par 300 ++sucktime 1 ++ ++map map27 lookup hustr_27 ++titlepatch cwilv26 ++cluster 8 ++next map28 ++secretnext map28 ++sky1 sky3 0 ++music d_romer2 ++par 330 ++sucktime 1 ++ ++map map28 lookup hustr_28 ++titlepatch cwilv27 ++cluster 8 ++next map29 ++secretnext map29 ++sky1 sky3 0 ++music d_tense ++par 420 ++sucktime 1 ++ ++map map29 lookup hustr_29 ++titlepatch cwilv28 ++cluster 8 ++next map30 ++secretnext map30 ++sky1 sky3 0 ++music d_shawn3 ++par 300 ++sucktime 1 ++ ++map map30 lookup hustr_30 ++titlepatch cwilv29 ++cluster 8 ++next EndGameC ++secretnext EndGameC ++sky1 sky3 0 ++music d_openin ++par 180 ++sucktime 1 ++allowmonstertelefrags ++ ++;------------------------------------------------------ ++map map31 lookup hustr_31 ++titlepatch cwilv30 ++cluster 9 ++next map16 ++secretnext map32 ++sky1 sky3 0 ++music d_evil ++par 120 ++sucktime 1 ++ ++map map32 lookup hustr_32 ++titlepatch cwilv31 ++cluster 10 ++next map16 ++secretnext map16 ++sky1 sky3 0 ++music d_ultima ++par 30 ++sucktime 1 ++ ++;------------------------------------------------------ ++clusterdef 5 ++exittext lookup c1text ++flat slime16 ++music d_read_m ++ ++clusterdef 6 ++exittext lookup c2text ++flat rrock14 ++music d_read_m ++ ++clusterdef 7 ++exittext lookup c3text ++flat rrock07 ++music d_read_m ++ ++clusterdef 8 ++exittext lookup c4text ++flat rrock17 ++music d_read_m ++ ++clusterdef 9 ++entertext lookup c5text ++flat rrock13 ++music d_read_m ++ ++clusterdef 10 ++entertext lookup c6text ++flat rrock19 ++music d_read_m +--- /dev/null ++++ vavoom-1.33/basev/freedoom/CMakeLists.txt +@@ -0,0 +1,12 @@ ++configure_file(basepak.ls.in ${CMAKE_CURRENT_BINARY_DIR}/basepak.ls) ++ ++add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/basepak.pk3 ++ COMMAND ${VLUMPY} ARGS basepak.ls ++ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/basepak.ls vlumpy ++ basepak.ls.in ++ mapinfo.txt ++ ) ++add_custom_target(freedoom_basepak ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/basepak.pk3) ++ ++install(FILES ${CMAKE_CURRENT_BINARY_DIR}/basepak.pk3 base.txt ++ DESTINATION ${DATADIR}/basev/freedoom) +--- /dev/null ++++ vavoom-1.33/basev/freedoom/basepak.ls.in +@@ -0,0 +1,3 @@ ++$dest basepak.pk3 ++ ++mapinfo.txt @CMAKE_CURRENT_SOURCE_DIR@/mapinfo.txt +--- /dev/null ++++ vavoom-1.33/basev/freedoom/base.txt +@@ -0,0 +1,2 @@ ++game basev/doom2 ++end diff --git a/freedoom-vlaunch.patch b/freedoom-vlaunch.patch new file mode 100644 index 0000000..85659cf --- /dev/null +++ b/freedoom-vlaunch.patch @@ -0,0 +1,51 @@ +Description: Add FreeDoom to vlaunch menu + this patch adds freedoom to vlaunch's menu. +Author: gustavo panizzo +Bug-Debian: http://bugs.debian.org/661233 +Last-Update: 2012-02-28 + +--- vavoom-1.33.orig/utils/vlaunch/vlaunch.cpp ++++ vavoom-1.33/utils/vlaunch/vlaunch.cpp +@@ -153,16 +153,17 @@ VMain::VMain() + gsizer->Add(new wxStaticText(page, -1, wxT(" ")), 0, wxALL, 4); + + gsizer->Add(new wxStaticText(page, -1, wxT("Game:")), 0, wxALL, 4); +- wxString GameChoices[8]; ++ wxString GameChoices[9]; + GameChoices[0] = wxT("(Autodetect)"); + GameChoices[1] = wxT("Doom"); + GameChoices[2] = wxT("Doom 2: Hell On Earth"); + GameChoices[3] = wxT("Doom 2: TNT Evilution"); + GameChoices[4] = wxT("Doom 2: The Plutonia Experiment"); +- GameChoices[5] = wxT("Heretic"); +- GameChoices[6] = wxT("Hexen"); +- GameChoices[7] = wxT("Strife"); +- Game = new wxComboBox(page, -1, GameChoices[0], wxDefaultPosition, wxDefaultSize, 8, GameChoices, wxCB_READONLY); ++ GameChoices[5] = wxT("FreeDoom"); ++ GameChoices[6] = wxT("Heretic"); ++ GameChoices[7] = wxT("Hexen"); ++ GameChoices[8] = wxT("Strife"); ++ Game = new wxComboBox(page, -1, GameChoices[0], wxDefaultPosition, wxDefaultSize, 9, GameChoices, wxCB_READONLY); + gsizer->Add(Game, 0, wxALL, 4); + + gsizer->Add(new wxStaticText(page, -1, wxT("Custom game:")), 0, wxALL, 4); +@@ -443,13 +444,16 @@ void VMain::OnRun(wxCommandEvent&) + case 4: + CmdLine += wxT(" -plutonia"); + break; +- case 5: ++ case 5: ++ CmdLine += wxT(" -freedoom"); ++ break; ++ case 6: + CmdLine += wxT(" -heretic"); + break; +- case 6: ++ case 7: + CmdLine += wxT(" -hexen"); + break; +- case 7: ++ case 8: + CmdLine += wxT(" -strife"); + break; + } diff --git a/heretic-shareware.desktop b/heretic-shareware.desktop index cfaf645..75774a2 100644 --- a/heretic-shareware.desktop +++ b/heretic-shareware.desktop @@ -1,9 +1,8 @@ [Desktop Entry] -Encoding=UTF-8 Name=Heretic Comment=Heretic Shareware launcher, will automatically download the needed data-files Exec=heretic-shareware -Icon=tux-b2f.png +Icon=tux-b2f Terminal=false Type=Application Categories=Game;ActionGame; diff --git a/hexen-demo.desktop b/hexen-demo.desktop index b4f44b2..ea2ebd9 100644 --- a/hexen-demo.desktop +++ b/hexen-demo.desktop @@ -1,9 +1,8 @@ [Desktop Entry] -Encoding=UTF-8 Name=Hexen Comment=Hexen Demo launcher, will automatically download the needed data-files Exec=hexen-demo -Icon=tux-b2f.png +Icon=tux-b2f Terminal=false Type=Application Categories=Game;ActionGame; diff --git a/strife-demo.desktop b/strife-demo.desktop index c23af96..6621c57 100644 --- a/strife-demo.desktop +++ b/strife-demo.desktop @@ -1,9 +1,8 @@ [Desktop Entry] -Encoding=UTF-8 Name=Strife Comment=Strife Demo launcher, will automatically download the needed data-files Exec=strife-demo -Icon=tux-b2f.png +Icon=tux-b2f Terminal=false Type=Application Categories=Game;ActionGame; diff --git a/vavoom-1.33-dont-override-delete.patch b/vavoom-1.33-dont-override-delete.patch new file mode 100644 index 0000000..aaf499e --- /dev/null +++ b/vavoom-1.33-dont-override-delete.patch @@ -0,0 +1,151 @@ +Subject: Don't override the global new and delete operators +Author: Hans de Goede + +vavoom used to override the global new and delete operators, this is a +bad idea and leads to e.g. crashes inside mesa. + +Some code paths in vavoom rely on Z_Malloc / new resp. Z_Free / delete +to be interchangable, e.g. source/vc_type.cpp VScriptArray::Clear +sometimes calls delete[] on memory allocated with Z_Malloc. + +So we cannot simply just remove the custom new / delete operator +implementations, in stead this patch removes these operator overrides, +and re-implements Z_Malloc / Z_Free as wrappers around new / delete, +keeping the interchangability, while dropping the troublesome override +of the global new / delete operators. + +Signed-off-by: Hans de Goede +--- vavoom-1.33/libs/core/zone.cpp 2010-04-21 15:15:40.000000000 +0200 ++++ vavoom-1.33.new/libs/core/zone.cpp 2016-01-03 20:38:07.029914648 +0100 +@@ -33,6 +33,8 @@ + + #include "core.h" + ++#if 0 ++ + // MACROS ------------------------------------------------------------------ + + #define SMALLID 0x22 +@@ -516,3 +518,4 @@ + } + + #endif ++#endif +--- vavoom-1.33/libs/core/zone.h 2010-12-23 20:47:55.000000000 +0100 ++++ vavoom-1.33.new/libs/core/zone.h 2016-01-03 20:39:57.420007907 +0100 +@@ -27,88 +27,20 @@ + //** + //************************************************************************** + +-//#define ZONE_DEBUG 1 +- + void Z_Shutdown(); + +-#ifdef ZONE_DEBUG +- +-void* Z_Malloc(int size, const char* FileName, int LineNumber); +-void* Z_Calloc(int size, const char* FileName, int LineNumber); +-void Z_Free(void* ptr, const char* FileName, int LineNumber); +- +-inline void* operator new(size_t Size, const char* FileName, int LineNumber) +-{ +- return Z_Malloc(Size, FileName, LineNumber); +-} +- +-inline void operator delete(void* Ptr, const char* FileName, int LineNumber) +-{ +- Z_Free(Ptr, FileName, LineNumber); +-} +- +-inline void* operator new[](size_t Size, const char* FileName, int LineNumber) +-{ +- return Z_Malloc(Size, FileName, LineNumber); +-} +- +-inline void operator delete[](void* Ptr, const char* FileName, int LineNumber) +-{ +- Z_Free(Ptr, FileName, LineNumber); +-} +- +-inline void* operator new(size_t Size) +-{ +- return Z_Malloc(Size, "", 0); +-} +- +-inline void operator delete(void* Ptr) ++static inline void* Z_Malloc(int size) + { +- Z_Free(Ptr, "", 0); ++ return static_cast(operator new(size)); + } + +-inline void* operator new[](size_t Size) ++static inline void* Z_Calloc(int size) + { +- return Z_Malloc(Size, "", 0); ++ return memset(Z_Malloc(size), 0, size); + } + +-inline void operator delete[](void* Ptr) ++static inline void Z_Free(void* ptr) + { +- Z_Free(Ptr, "", 0); ++ char *p = (char *)ptr; ++ delete p; + } +- +-#define Z_Malloc(size) Z_Malloc(size, __FILE__, __LINE__) +-#define Z_Calloc(size) Z_Calloc(size, __FILE__, __LINE__) +-#define Z_Free(ptr) Z_Free(ptr, __FILE__, __LINE__) +- +-#define ZONE_DEBUG_NEW new(__FILE__, __LINE__) +-#undef new +-#define new ZONE_DEBUG_NEW +- +-#else +- +-void* Z_Malloc(int size); +-void* Z_Calloc(int size); +-void Z_Free(void* ptr); +- +-inline void* operator new(size_t Size) +-{ +- return Z_Malloc(int(Size)); +-} +- +-inline void operator delete(void* Ptr) +-{ +- Z_Free(Ptr); +-} +- +-inline void* operator new[](size_t Size) +-{ +- return Z_Malloc(int(Size)); +-} +- +-inline void operator delete[](void* Ptr) +-{ +- Z_Free(Ptr); +-} +- +-#endif +--- vavoom-1.33/source/host.cpp 2010-06-04 23:20:22.000000000 +0200 ++++ vavoom-1.33.new/source/host.cpp 2016-01-03 20:42:04.898651198 +0100 +@@ -706,5 +706,5 @@ + + SAFE_SHUTDOWN(VObject::StaticExit, ()) + SAFE_SHUTDOWN(VName::StaticExit, ()) +- SAFE_SHUTDOWN(Z_Shutdown, ()) ++// SAFE_SHUTDOWN(Z_Shutdown, ()) + } +--- vavoom-1.33/source/sys_sdl.cpp~ 2010-09-07 22:05:19.000000000 +0200 ++++ vavoom-1.33/source/sys_sdl.cpp 2016-01-03 20:52:32.566259819 +0100 +@@ -530,7 +530,7 @@ int main(int argc,char** argv) + catch (VavoomError &e) + { + Host_Shutdown(); +- stack_trace(); ++// stack_trace(); + + printf("\n%s\n", e.message); + dprintf("\n\nERROR: %s\n", e.message); diff --git a/vavoom.6 b/vavoom.6 new file mode 100644 index 0000000..106b0d6 --- /dev/null +++ b/vavoom.6 @@ -0,0 +1,133 @@ +.TH vavoom 6 games +.SS NAME +vavoom \- The most advanced Doom/Heretic/Hexen/Strife source port around! +.SH SYNOPSIS +.B vavoom +[ \-opengl ] [ \-d3d ] [ \-particles \fIn\fR ] [ \-surfcachesize \fIn\fR ] [ \-nosound ] [ \-no3dsound ] [ \-nomusic ] [ \-cddev \fIfile\fR ] [ \-openal ] [ \-nomouse ] [ \-nojoy ] [ \-nolan ] [ \-noudp ] [ \-ip \fIip_addr\fR ] [ \-noipx ] [ \-mpath ] [ \-port \fIn\fR ] { [ \-freedoom] | [ \-doom ] | [ \-doom2 ] | [ \-tnt ] | [ \-plutonia ] | [ \-heretic ] | [ \-hexen ] | [ \-strife ] } [ \-game \fIdirectory\fR ] [ \-devgame \fIdirectory\fR ] [ \-devsnd \fIsndinfo_script\fR ] [ \-progs \fIdirectory\fP ] + +.SH DESCRIPTION + +.B Vavoom +is a source port based on sources of Doom, Heretic, Hexen and +a little bit from Quake. Supported platforms are Windows and Linux. +Vavoom has a graphical launcher (vlaunch). + +.SH Graphic Options +.TP +.BI \-opengl +selects OpenGL driver +.TP +.BI \-d3d +selects Direct3D driver +.TP +.BI \-particles\ +specifies number of particles to use, default is 2048, but you can't have less than 512 (i.e. you can't disable them) +.TP +.BI \-surfcachesize\ +specifies size of surface cache memory, in kilobytes +.SH Sound Options +.TP +.BI \-nosound +disables all sound, music and CD-Audio +.TP +.BI \-nosfx +disables sound +.TP +.BI \-no3dsound +disables 3D sound, use original mode, Windows version only +.TP +.BI \-nomusic +disables music +.TP +.BI \-nocdaudio +disables CD music +.TP +.BI \-cddev\ +specifies CD device \fIfile\fP, default /dev/cdrom, LINUX version only +.TP +.BI \-openal +enabled OpenAL driver. +.SH Input Options +.BI \-nomouse +disables mouse +.TP +.BI \-nojoy +disables joystick +.SH Network Options +.BI \-nolan +disables all LAN drivers +.TP +.BI \-noudp +disables TCP/IP driver +.TP +.BI \-ip\
+specifies IP address, Windows version only +.TP +.BI \-noipx +disables IPX driver +.TP +.BI \-mpath +enables MPATH TCP/IP driver, DOS version only +.TP +.BI \-port\ +sets default LAN port +.SH Game selection +.BI \-freedoom +look only for FreeDoom IWAD files +.TP +.BI \-doom +look only for Doom IWAD files +.TP +.BI \-doom2 +look only for Doom 2: Hell On Earth IWAD files +.TP +.BI \-tnt +look only for Doom TNT: Evilution IWAD files +.TP +.BI \-plutonia +look only for Doom: The Plutionia Experiment IWAD files +.TP +.BI \-heretic +look only for Heretic IWAD files +.TP +.BI \-hexen +look only for Hexen IWAD files +.TP +.BI \-strife +look only for Strife IWAD files +.SH Custom games and development +.BI \-game\ +specifies custom game. +.TP +.BI \-devgame\ +like \fI-game\fR, but also sets Vavoom in development mode. +.TP +.BI \-devsound\ +sets sound development mode, uses given SNDINFO script, sounds and music are loaded form archive \fIdirectory\fP, which is specified in script. +.TP +.BI \-progs\ +specifies \fIdirectory\fP where to look for progs. Server progs are loaded from \fIfile\fP svprogs.dat, client progs - clprogs.dat. Path must include ending slash. + Example: \-progs progs/myprogs/ +.TP +.BI \-file\ [ \.\.\.] +specifies additional files. +.TP +.BI \-iwaddir\ [ \.\.\.] +specifies additional directories where to look for IWAD files. +.SH Debugging Options +.BI \-debug +creates a debug \fIfile\fP basev/debug.txt with all console messages. +.TP +.BI \-starttime\