Play multiplayer Doom on macOS

Doom and other games running on the Doom engine also run on macOS using one of the various source ports like gzdoom. Some of these ports also support multiplayer and are available on macOS. For online multiplayer you also need a server browser to find and join Doom sessions. This How-To shows how to install and set up such an environment using the source port Zandronum and the server browser Doomseeker. The latter comes packed with Wadseeker, a tool which automatically downloads missing resources required to join a particular session.

Installation

  1. Install Zandronum via Homebrew:

    $ brew install zandronum
    
  2. Create a new directory ~/Library/Application Support/zandronum and put in your doom.wad and doom2.wad file (from an existing Doom or Doom2 installation).

  3. Try launching Zandronum selecting either of the WAD files.

  4. Go to https://doomseeker.drdteam.org/download.php.

  5. Select the Operating System Other (Source Code) and select the download link under Doomseeker Source (not the Bitbucket Snapshot). Extract the archive at a suitable location (for example ~/Downloads/)

    Important

    A binary download for macOS is available, though that installation can’t finish due to a signature error. This occurs on any macOS version 10.14 (Mojave) or newer, preventing libraries to load due to failures in verifying the application’s signature. The current way of overcoming this issue is to build the binaries locally.

  6. Install the required dependencies to build Doomseeker (Qt5 and CMake):

    $ brew install cmake qt5
    
  7. Set the variable Qt5_DIR in order for CMake to find your Qt5 installation:

    $ export Qt5_DIR="/usr/local/opt/qt@5/"
    
  8. Enter the extracted doomseeker directory and run the build:

    $ mkdir build
    $ cd build
    $ cmake ..
    $ make
    $ sudo make install
    
  9. After the installation finished you may copy the build directory to a more suitable location (you may also want to rename it to doomseeker or something like that).

  10. Create a link to your doomseeker executable:

    $ ln -s /path/to/my/doomseeker/dir/doomseeker /usr/local/bin/doomseeker
    
  11. Launch Doomseeker via:

    $ doomseeker
    

Hint

Doomseeker automatically downloads resources (often in *.ipk3 format) to ~/Library/Preferences/doomseeker/ by default. You may change the target destination under Settings ‣ File paths.

Set up a multiplayer game

  1. In Doomseeker, select File ‣ Create Game.

  2. In the General tab

    • select Zandronum as game and set its executable

    • define a Server name (for example Test Game)

    • define a forwarded port number in Port (default: 10666)

    • set a Game mode and Difficulty

    • select the proper IWAD for example DOOM2.wad

    • Under Additional WADs and files add extra *wad or *.pk3 files for the game

  3. Set the rules in the other tabs.

  4. Select Host server when ready. Leave the appearing Server Console window open (closing it ends hosting), but you may close the host window.

    Important

    A lot of add-ons aren’t compatible with Zandronum. If the Server Console window closes without output, you used an incompatible file. In this case, try using GZDoom to host a multiplayer game.

  5. In the Doomseeker main window, refresh the server list, then search for the hosted game’s name.

  6. Join the game (right-click the game and Join Game).

GZDoom: Create and join a multiplayer game [1]

GZDoom also features multiplayer capabilities, though this limits to certain game modes, which is Deathmatch, Team Deathmatch and Cooperative. Nonetheless, there are some Doom mods, which are specifically built with the GZDoom engine (for example Blade of Agony). Those fail to load using a different Source Port such as Zandronum.

Important

The host machine must open a port for GZDoom, which is 5029 by default. Clients, connecting to a game, don’t have to open that port.

To create aka host a multiplayer game using GZDoom, you must launch it via the command line using specific options, which are

-host <min_players>

<min_players> the minimum amount of participants needed to join (including the host) before the game is started.

-useip <IP_ADDRESS>

This defines the IP address, which other players can connect to in order to join the game session. For LAN matches, use your local IP address (e.g. 192.168.178.50) and for Internet games, specify your global IP address (e.g. determine it on https://www.ipchicken.com/).

Important

For internet games, you may have to enable port forwarding for your machine in your router configuration. GZDoom uses port 5029 as default (you may define a different port via the -port option) for which it needs forwarding on UDP traffic. For security reasons, you should disable the forward again after the game session.

-port <num>

Specifies an alternate IP port for this machine to use during a network game. By default, port 5029 is used.

-netmode <num>

Defines the network mode: 0 for Peer-to-Peer, which is recommended when having a slower internet connection or when only two people are playing, and 1 which should only be used when having a faster internet connection (10 Gb/s or more) or when creating a game with three or more people (people other than the host may leave the session without aborting it). For more info check the network modes.

A basic host command might be:

$ gzdoom -host 2 -useip 192.168.178.50 -port 5029 -netmode 0

Extra options may be:

-deathmatch

Defines that this game session is of type Deathmatch. If this option is not passed, the game mode will be Cooperative.

-warp <m>

Directly launch a specific map. Depending on the launched game the style is ExMx (e.g. E1M1 for first map of episode 1) or simply xx (e.g. 24 for map 24). See more at https://zdoom.org/wiki/Command_line_parameters#Multiplayer_options. Alternatively, you may use the +map option.

Important

When using +map, always preceed the map name with MAP, for example +map MAP04. These two options are treated as equal:

+map MAP04
-warp 04

There is no constant map naming between one *.wad/, *.pk3 or *.ipk3 and another. Some examples:

  • DOOM.WAD (Ultimate Doom): E<A>M<B> where <A> is the episode number (1 to 4) and <B> is the map number (1 to 9), for example: E1M9, E3M3

  • DOOM2.WAD (Doom 2): MAP<AA> where AA is the map number (01 to 32)

  • PLUTONIA.WAD (Final Doom: Plutonia): 01 to 32

  • TNT.WAD (Final Doom: TNT/Evilution): 01 to 32

  • Brutal Wolfenstein 3D: 01 to 60 (ten for each episode). Bonus maps: 62, AntoLeve, Sleepy

  • Blade of Agony: C<A>M<B> where <A> is the campaign number (1 to 3) and <B> is the map number (1 to 6 for regular maps, 0 for bonus map), for example: C3M3. Some maps are divided in sections in which case the pattern C<A>M<B>_<C> where C is the section number (can range from A to C), for example C3M1_A. “Commander Keen” bonus maps are accessed via SM01, SM02 and SM03.

Check the mapinfo.txt in the respective *.wad/, *.pk3 or *.ipk3 file to get map names.

Documentation on all multiplayer command line options: https://zdoom.org/wiki/Command_line_parameters#Multiplayer_options

To join a running multiplayer game, launch GZDoom also over the command line, stating the IP address (and port, if it differs from the default). If you are in the same network as the host, use the local IP address, otherwise use the global IP address:

$ gzdoom -join <HOST_IP_ADDRESS>

Important

For both creating and joining a multiplayer game, also specify the used WAD and IPK3 files via the -file (for *.ipk3 files) and -iwad (for *.wad files) options.