If you have any trouble with DoomLegacy, you might find a solution here.
If you find a solution to a problem that was not listed here, please tell us so that we can update the FAQ and help other people!
If you have a console, start DoomLegacy with the -h switch to see the help output.
If you do not want the Launcher to start, then have at least one switch on the command line. It does not have to be a real switch, -nolaunch, or even -xx will do it.
If you do not have a command line console, or do not want to use it, you can start DoomLegacy without any switches, which will bring up the DoomLegacy built-in Launcher. From the Launcher you can specify almost all switches. The switches -mb (Zalloc memory size), -h (help) are handled before the built-in Launcher runs, and thus the Launcher will ignore them.
You must select the game in the command line switches.
I also recommend using native video, but as that can now be selected by the saved config, it is not necessary to specify it on the command line.
From the Launcher this would be:
There are two home directories to consider. The user home, and the legacy home directory. The legacy home directory, where DoomLegacy saves config and savegames, is created within the user home directory.
The directory names vary by OS (Operating System, like Linux, Windows, DOS), due to filesystem differences. The directory names are specified in the doomdef.h for each OS. These may be changed to compile a DoomLegacy for special circumstances.
The DEFHOME directory name is specified in the doomdef.h file for each OS. It is usually "legacyhome", but is "DL_HOME" on DOS. This is used where an OS (such as DOS) does not have a home directory for each user.
The legacy home directory name also is specified for each OS in the doomdef.h file. There is also an alternative name, such as if your legacy home was created by an older DoomLegacy version. It is usually ".doomlegacy" or ".legacy", or may be a "doomlegacy", "dmlegacy", or "legacy" depending on the OS.
If you are inconsistent about specifying the home directory, you can easily have more than one set of config files. The above does not apply on a Mac, where a legacy home directory is provided by the OS.
Write protected directories, or system protected directories, will prevent DoomLegacy from creating directories. Then you will not be able to save config, nor savegames.
Older versions of DoomLegacy would use the MSYS home, but since DoomLegacy 1.46 it ignores a HOME environment variable that has the string MSYS in it.
If you had your home directory in MSYS, then it would be best to move to a more reasonable home location. You may have to specify it with the -home switch if it is an odd location.
Since DoomLegacy 1.46 also recognizes the environment variable "UserProfile" as home, which appears on WinXP (and probably later versions of Windows too). This will make the parent of "My Documents" your home directory automatically.
The config settings are saved by DoomLegacy during program shutdown. If it is being killed some other way, the settings will not be saved.
If you are inconsisent about specifying your home directory, then DoomLegacy will create a new config file in each new location. If you find you have to setup your keyboard again, then you may have mistyped your -home directory name. Setup a profile or a batch file to start DoomLegacy from saved settings to ensure getting a consistent home directory.
Previous versions of DoomLegacy had a separate config file for OpenGL hardware rendering. This config file is no longer used. There is a new drawmode config file for OpenGL, with a different file name, and different content.
You will have to setup the drawmode config files if you want separate video settings for OpenGL hardware rendering. Each drawmode has an separate optional drawmode config file that pushes down and hides settings from the main config file.
The drawmode config files are optional. You do not have to create them or use them. You could only create one, such as for OpenGL.
Only put into each drawmode config file the video settings that are unique for that drawmode. This is usually video mode, fullscreen, and gamma settings.
One exception is drawmode, do not put that in your drawmode config file.
You can go to other menus and insert entries into your drawmode config file. Some menus, like keyboard setup, do not have any menu support for INSERT to a drawmode config file.
Give your friend (George) their own config file.
Start DoomLegacy with "-config george.cfg".
George will now have his own config settings, such as keyboard settings, and option settings. As long as you do not delete the file, George's settings will still be there next time he comes to visit. However, any video settings (such as gamma) in drawmode config files will still be shared. Make him a savegame subdirectory, otherwise his savegames will be mixed in with your savegames.
Give your friend their own home directory.
Your friend will have an independent config.cfg, a set of
drawmode config files, and a place for savegames.
Make a directory named "george_home".
Start DoomLegacy with "-home george_home".
DoomLegacy will make a doomlegacy directory in the george_home directory, where it will put config.cfg and savegames. On Linux this is a hidden directory, so the george_home directory will appear empty, but it is not empty.
Starting DoomLegacy with the verbose switch (-v or -v2) will enable generating more messages, and will provide more detail about what DoomLegacy is doing. The -v2 switch dumps much more detail than you usually want to see, especially about video hardware.
Pre-release versions of DoomLegacy usually have debugging print statements (EMSG_debug) enabled full-time. Compiling with DEBUG_MESSAGES_ON enabled in doomdef.h, allows debug messages to be seen on the console and HUD at all times.
With a release version of DoomLegacy, use verbose (-v or -v2) to enable the same debug message displays. The message option control also can enable seeing debug messages during game play.
The development switch ( -devparm ) provides details meant for developing the game and game wads.
On Windows, the error messages go to a file "stderr.txt" that is left in the program directory.
> doomlegacy -game doom2 -dehthing prboom -file valiant.zip
> doomlegacy -game doom2 -dehthing boom -file motm.zip
As of Doom Legacy 1.48.10, there is automatic translation of dehacked thing numbers in the range 138 to 150. This detects the comment to translate the dehacked thing number to a thing in Doom Legacy that is similar.
To force the dehacked thing translation, use the dehthing command line switch. This forces the dehacked thing translation for the range 138 to 150. The switch selects: legacy, boom, prboom, or ee (Eternity Engine). Without the switch, it is automatic.
> doomlegacy -game doom2 -dehthing prboom -file prboom_specific.wadIf you have a wad with legacy dehacked things in the range 138 to 150, and one with prboom dehacked things in the range 138 to 150, on the same command line, you will have to leave it at automatic.
This is an improvised solution, and will likely see changes. For new wads, please use BEX.
A supplementary dogs wad for Doom Legacy has been created, called dogs.wad. It has a basic German Shepherd, with dog sounds.
Specify the dogs.wad first, in case the wad does supply its own dog sprites or sounds. The dogs sprites and sounds, from the wad that is specified last, will be the ones that are used. This does not always work, due to some wads changing the names using dehacked.
> doomlegacy -game doom2 -file dogs.wad dogs_specific.wad
The wad can be renamed to dogs_dl.wad, if necessary.
DoomLegacy loses sync with most of the Doom demos. It was decided some years back, that demo compatibility would be sacrificed in favor of new features and improvements.
The demos only record the player actions and movements. Every monster and object reaction is the result of applying random numbers and player input.
To playback a demo, the engine must generate the exact same sequence of random numbers, and apply them to get the exact same situation that developed during the recording. The monsters must react and walk the exact same paths as when the demo was recorded. Almost every calculation of the DoomLegacy engine must come out identical to the recording Doom engine. The slightest difference in using a random number, or in calculating a monster, player, or projectile position, has cumulative effects in the playback. With the slightest position error, it rapidly gets to the point where the playback of player movements is completely irrelevant to the current situation.
Some attempts have been made fix this with compatibility enables in the code, to revert the engine to generate compatible output This puts the bugs back in the code. The current demo compatibility code mostly covers Doom demo and Boom demo formats, but not others. It has improved old demo playback, somewhat.
DoomLegacy has its own variation on the demo format. Like Boom, it needs to record a whole bunch of optional settings, all which affect demo playback.
DoomLegacy 1.46, will playback demos recorded with DoomLegacy, and remain in sync. I will not make any guarantees on this for long demos, or every situation, as it has not been tested much.
Doomlegacy 1.47, has included some old code that is run for some old demos. This makes some of the old Doom demos stay in sync for much longer now.
However, if you're looking for the 100% authentic 1990s Doom experience, you could try Chocolate Doom.
This was fixed in DoomLegacy 1.46, which has separate Doom and Heretic internal switch tables.
Historical Info: Doom and Heretic would only load the switches for that version and lower, as identified by an episode number in the switch tables. The code has Shareware Doom episode = 1, Ultimate Doom episode = 2, Doom II episode = 3. Heretic has a similar scheme with Shareware episode = 1, and Heretic episode = 2, but it only contained two switches both with episode = 1.
The Boom SWITCHES lump was loaded for both Doom and Heretic game modes. The usage problem with Heretic was that in previous DoomLegacy the Heretic switch names were distinguished by having an episode = 4 in the entry, which required the SWITCHES lump to also have episode = 4. Such a SWITCHES lump would not have worked with other ports.
Since DoomLegacy 1.46, we no longer use that scheme. For compatibility, a Heretic SWITCHES lump should have episode = 1, or even episode = 2, but DoomLegacy will still accept switches lump entries with episode = 4 for Heretic.
This happens for both Linux and Windows. The system uses both mice for moving the same screen pointer.
Windows: Go to the Devices control, find the mouse devices, and DISABLE the "Serial Mouse" driver. The serial mouse port itself will remain available through the COM devices.
Linux: Trying to get the X11 windowing system to not attach a serial mouse, is a work in progress. Let us know if you achieve a workable solution, that does not actually require mangling the X11 system.
Then in DoomLegacy you can use the "mouse2" setting of mouse2port.
A mouse port that is showing up as "/dev/input/gpm2data" (a completely fictious example).
As root user: > ln -s /dev/input/gpm2data /dev/mouse2
If the serial mouse is connected when Windows is started, then Windows will install a "Serial Mouse" driver. This will send serial mouse input to control the system pointer. Both mice will move the same screen pointer.
If the serial mouse is plugged in after the computer is started, then there is a risk of damaging the serial port. However, this is often done anyway (do at your own risk). Try to minimize static differences by touching the connector shell to the computer frame first. In this case, Windows does not install the "Serial Mouse" driver.
Go to the "Devices control" screen, find the serial devices. Find the "Serial Mouse" driver and disable it. This will prevent it from connecting in the future.
First, check that the mouse/joystick is activated. On the console type either 'use_mouse', or 'use_joystick'. If it is '0' or off then that mouse/joystick is disabled. To set the variable to 1, type 'use_mouse 1'. There are also mouse menus with these control items.
Once the mouse or joystick is activated, you have to bind the buttons to controls in the setup controls menu.
Support for XBOX controller is in DoomLegacy 1.48, but only for the SDL port. It is a compile option, so if you have a custom compilation, check that XBOX_CONTROLLER is defined.
If you are using the XBOX controller, without a keyboard, then several button controls need to be defined to access the menus and start the game. There are default assignments for these in the config, using buttons 0 through 8 of the first joystick/controller. Plug in a keyboard to do the setup, if you can. If you have 6 or more buttons, you should be able to play simple Doom and Heretic wads without a keyboard.
There is support for 4 joysticks, with each having 16 buttons, 2 triggers, and 2 hats.
When you change the video mode using the menus, it is only for the current session. To save it to the config file, it has to be made the 'default' video mode. The next time DoomLegacy is started it will use the 'default' video mode from the config file.
To set the current video mode as the default, press the 'd' key when in the Video mode menu.
To test an unknown video mode, press the 't' key. This provides an escape, and a timeout, in case the video mode displays badly.
If you select some video mode that will not display properly and you have to abort, or even reboot, you can kill DoomLegacy without letting it save config. The next time DoomLegacy is started it will revert to the known good video mode saved in the config file.
Do not set a video mode to default until you know it is good. If you have saved a bad video mode in the config and cannot see the video controls in the DoomLegacy menu, you will have to edit the config file by hand, or delete your config file to clear the bad video mode. The config file is re-written when DoomLegacy exits, so do not leave the config file open in your editor while running DoomLegacy.
There is a new "viewfit" control, which can be found in the Video menu. It has selections to fit the screen to the height or the width of the screen. With these selections the aspect ratio will be adjusted to draw on square pixels. The stretch selection will try to fit the screen, and will have an unusual aspect ratio for wide screens.
The original Doom graphics were designed for a 320x200 VGA display with a screen 4:3 physical aspect ratio. Consequently the pixels on these displays had a 5:6 physical aspect ratio, unlike most modern displays which have square pixels. This makes rendering the graphics on modern displays somewhat complicated.
The menus and intermission screens are scaled at integer ratios to fit the screen. This will often leave bars at the edges. Because these are wad images using color palette graphics, attempts at finer interpolation would require looking up blended palette colors, which would lead to a muddy look. To avoid this problem, the menus will be scaled larger or smaller in only integer ratios, with background fill bars.
The game rendering is fully scaled to display the same view at all video display modes.
In software render mode, DoomLegacy will proportion the display to keep the original display appearance. It will display with filler bars if necessary to do this. The pixels will not be identical to those from the original Doom.
In OpenGL mode using fullscreen, the introduction and intermission pictures are stretched to fill the screen. This does not keep the original aspect ratio and uses pixel RGB color blending.
There is an OpenGL FOV control, but it zooms and does not change the aspect ratio. The viewfit control, for fit_width and fit_height selections, scales the other direction to keep a proper aspect ratio.
When you have a 16:9 display, use the viewfit control to choose how the scaling is affected during gameplay. The stretch selection, stretches the normal 4:3 game screen to fit the actual video size. This was the behavior in previous DoomLegacy versions. The monitor may stretch it again to fill the actual monitor shape, or the monitor may use black bars instead. This will alter the appearance of rooms and sprites.
The fit_width selection, will scale to fit the width, with the height being scaled to the aspect ratio, and clipped to the screen size. If the height is extended, this may leave the player hand and gun floating in mid-air. The only thing that can be done about that is to select fit_height instead.
The fit_height selection, will size the scaling to fit the height, with the width being scaled to the aspect ratio, and clipped to the screen size.
If you are confused, put it into Auto mode. That chooses the least likely to annoy selection, based on the actual video mode.
Most monitors can be set to display a 4:3 aspect with black borders. Another alternative is to turn off fullscreen, and choose a window size that fills most of the screen.
There are limits to the monitor width because some structures are dependent upon the maxiumum video width. To expand the line width limit for a few, we would have to do it for every user regardless of their hardware.
Eventually, this will have to be changed to allow using larger monitors in fullscreen. That will require a rewrite of most of the texture segment code to some other, slower, texture segment state storage scheme.
DoomLegacy 1.48 has removed the maxiumum video width structures from the drawsegs, making them allocated. But, there is still work to be done before the maxiumum video width can be increased.
Display at a high resolution monitor may look nice, but drawing such a large screen slows the frame rate. Drawing at a resolution above 1600x1200 has limited appeal because the game response would be slow.
There are some problems caused by wider monitor modes that are yet to be solved.
Is that cheating for one player to have a wider view? It is more fair in deathmatch for all players to have the same field of view? There may need to be network controls to limit the field of view in deathmatch.
This will also have to be changed soon (been saying that for years), as wide screen monitors are now commonplace.
If you start FluidSynth yourself, do not forget to specify a soundfont with music devices. You can use FluidR3_GM.sv2, which also can be used with TiMidity. You might also try the GeneralUser_GS sound font.
The FluidR3_GS.sv2 soundfont, is just weird sounds and special effects, and does not work for music.
The last I heard, there was still a DoomLegacy server up, but it was running an older DoomLegacy.
The Game server locations respond to requests. The interested parties should submit a request to the Game Server to host a DoomLegacy 1.48 Server.
A static IP address only has to be setup once in the DoomLegacy Server menu of each player.
If it is a dynamic IP address, then each player must setup the server IP address every time the server connects to the Internet, because that IP address will likely be different each time.
Your success at this may depend upon filtering done by your IP service providers. It will not work if they are blocking packets using the DoomLegacy port address (port 5029).
Your firewall also has to let through the DoomLegacy port address (port 5029).
You could use a different port number, and even have several servers on the same machine using different port numbers. See the network port explanation in the docs.
Your local network will be limited to an address range, a subnet. If your netmask is the usual 255.255.255.0, then your subnet is limited to only vary the last number, and all the computers on that subnet must have the same first three numbers.
Pick an IP address for your server, such as 192.168.3.2. All your player computers then need to have unique IP addresses on the subnet 192.168.3.xx, where xx is 2..254.
For this example, lets consider the network 192.168.3.0, which has a computer 192.168.3.2, and two visitors at 192.1.3.72, and 192.1.3.246.
If you have a router with DHCP, such as your wifi-router, then it will automatically assign an IP address in your subnet when the visitor computer connects to the wifi. Without DHCP, you have static IP addresses, and the visitors will have to modify their IP address to work on your network.
If your DoomLegacy server is connected using DHCP, then the server IP address may be different then last time you played. You will then have to config every client computer to use the new server IP address, which is bothersome. Most modern routers will connect a recognized computer to the same IP address it used last time it was connected. You can set up your router to do this. Make sure the server connects to the network first, so some client does not steal the preferred IP address it uses.
Even better is to set the router to assign a static IP address to the server. That IP address will then be reserved to be only used by the server.
Without DHCP, modern internet communications should allow you to add the server IP address to your recognized addresses (static or manual routing) for a particular hardware device (like your wifi-router, or Ethernet router, assuming you have the firewall enabled). Just login to your router and add the needed addresses, you should not have to replace any existing internet address.
Your firewall has to let through the DoomLegacy server port address (by default, port 5029). You can setup DoomLegacy to use a different port number.
It does not matter what IP address the clients get, as long as it is an address on your subnet. The server will discover the client IP address from their first connect message.
If any of your clients are using an unusual port address, then your firewall will also need to let through messages to that port.
The user reserved ports start at 5000. I recommend only going up from 5029, such as 5100 .. 5199, to avoid other programs.
All your players (clients) must specify the same port number on their command line, and fix their firewalls to allow through packets that use that port.
Minor versions of DoomLegacy (1.48) are usually not network compatible with other minor versions of DoomLegacy (1.46). It will likely have a different network version number. They would also quickly lose sync, and someone would get kicked, due to differences in random number usage.
DoomLegacy 1.47 uses Network Version 24
DoomLegacy 1.48 uses Network Verson 26.
Some of the network messages have been changed.
Since DoomLegacy 1.46, the network code has been hardened against malicious packets overrunning buffers and to block others from using file download to explore your file system.
Older versions of DoomLegacy should be eliminated from network usage for security reasons. With so many important bug fixes, there is no reason to be using older DoomLegacy for network play.
Each client should ideally run the same version of DoomLegacy as the server. Otherwise, some slight play difference may get them kicked due to consistency failure.
Otherwise, it depends upon the DoomLegacy version. Bot creation, and bot game play, got improved in DoomLegacy 1.48 early versions. You can try adding the bots last. Sometimes a new player got the same player slot that a bot had taken. The startup communications got reworked in later versions to fix these problems.
DoomLegacy before 1.48, bots would not work with network games. They would trigger players getting kicked in the clients.
Some integration with other DoomLegacy features, such as network play, splitplayer, and saving games, has not been entirely done yet.