[CO-OP] Cataclysm: Dark Days Ahead — Multiplayer Co-op

A two-player co-op fork of CDDA.
Why die alone when you can die together?_
tracks CDDA experimental (0.I+)

art by Delicadeath

Download

> macOS (Silicon + Intel) 07-06-26 23:59 UTC · 30cdb72
> Windows 07-07-26 00:00 UTC · 30cdb72
> Linux 07-07-26 00:00 UTC · 30cdb72

Community

Launch

  1. Unzip anywhere
  2. macOS: Open Cddacoop.app — first launch needs right-click → Open to bypass Gatekeeper (unsigned app). If nothing happens, run xattr -cr Cddacoop.app in Terminal first.
  3. Windows: Run cataclysm-tiles.exe. SmartScreen may warn — click More info → Run anyway.
  4. Linux: Extract the tarball and run ./cddacoop.sh from inside the Cddacoop/ folder — the launcher loads the bundled libraries, so don't run cataclysm-tiles directly. Built on Ubuntu 22.04, so you need glibc 2.35+ (most current distros). If it won't start, make it executable first: chmod +x cddacoop.sh cataclysm-tiles.

The main menu is straight experimental CDDA, kept up to date, pretty much. The CO-OP menu item is new. Otherwise this plays as single-player CDDA.

Play

Every co-op game is the same two steps, the only thing that changes is which IP the host shares, and that depends on where you're playing (below).

Same computer (two windows or two monitors)

Both players on one machine? Nothing to set up, just launch the app twice. One window/monitor hosts; the other joins using 127.0.0.1 (the host computer itself).

Same Wi-Fi or LAN

On the same network you don't need a VPN, the host just shares its local IP (looks like 192.168.x.y).

# host on macOS, find your local ip (try en1 if en0 is empty)
ipconfig getifaddr en0

# host on Windows, find your local ip (use the IPv4 Address)
ipconfig

# client, in CO-OP > Join, paste the host's local ip
#   (looks like 192.168.x.y, port defaults to 8080)

Over the internet (different networks)

This is for different networks, anywhere in the world. You need a way to reach the host across the internet and get an open port. The smoothest is Tailscale, a free mesh VPN that gives both machines a stable private IP (100.x.y.z) and treats them like they're on the same network. No manual port forwarding setup no router config. Install on both machines and sign in (free for personal use).

To add your partner to your Tailscale account:

The host and client IPs should also show in the Tailscale app under Devices, or in the admin console under Machines at Tailscale Admin. With CLI you can do `tailscale ip -4` as the host and send that to the client for their Join IP.

Tailscale is the smoothest option, but it’s not the only one:

> ZeroTier (alternative mesh VPN)

Same idea as Tailscale, different vendor. Free, peer-to-peer by default, no port forwarding. Useful if a partner already uses ZeroTier for something else.

# both: install zerotier from zerotier.com
# one player: create a free network at my.zerotier.com,
#   grab its 16-character network id, approve both members
# both: join that network using the id

# host, find your zerotier ip (usually 10.x.x.x)
zerotier-cli listnetworks

# client, paste the host's zerotier ip into CO-OP > Join
> ngrok tunnel (no install on the client)

The host runs a one-line tunnel that gives the connection a public address. The client just needs the URL, no VPN install on their end. Free tier disconnects after a few hours, fine for a session.

# host: sign up at ngrok.com (free), install ngrok
# host: launch the app and arm Host from the in-game CO-OP menu

# host: in a terminal
ngrok tcp 8080

# ngrok prints something like
#   Forwarding  tcp://2.tcp.ngrok.io:14721 -> localhost:8080

# client, paste whatever ngrok printed into CO-OP > Join
> Router port forwarding (direct, no third party)

Most involved option, but nothing extra to install or sign up for. Won’t work behind carrier-grade NAT (most mobile hotspots, some rural ISPs, university dorms). If your public IP starts with 100.64. or 10., you’re on CGNAT and should use one of the options above instead.

# host: log into your router (usually 192.168.1.1)
# forward TCP port 8080 to your computer's local ip

# host: find your public ip and send it to your partner
curl ifconfig.me

# client, paste the host's public ip into CO-OP > Join

Optional: a free dynamic DNS service like duckdns.org gives you a hostname that keeps working when your ISP rotates your IP.

> full build & LAN guide

What works

  • Movement, melee combat, smashing terrain and furniture
  • Vehicle driving by client and host (including being a passenger)
  • Item pickup, drop, wear, wield, use (single-tile and adjacent)
  • Eating, drinking, short consumption activities (both players simultaneously)
  • Host and client appear as NPC proxies in each other's world with correct clothing and skin tone
  • Monster sync with damage messages
  • Client ranged / thrown / spell damage forwarded and applied server-side
  • Field sync (blood, fire, acid)
  • Tile sync (terrain, furniture, items, graffiti)
  • Trap sync — client triggers traps server-side
  • Vehicle state sync — part HP, fuel, name messages
  • Vehicle construction — install and remove parts
  • Drop-into-vehicle (drop items into the storage of a vehicle you're standing on)
  • In-game text chat: bind Co-op chat to a key to message your partner... yelling still works too
  • Trading: full trade menu between players (in addition to the new "Pass item" action, below)
  • Different z-levels — ground and overmap stay in sync when players are on different levels; ramps and bridges work now as expected
  • Separate vehicles — both players can drive their own vehicles
  • Fast-forward — turns skip ahead when both players are in long waits or long activities
  • Co-op HUD — bottom-left panel showing partner name, movement mode, mood, worst-body-part HP bar, current activity + progress, and ping in ms
  • Partner menu co-op special actions — bump into your partner to open i: "*Tap on shoulder*" interrupts their wait, "*Help with task*" works like single-player NPC help, "*Pass item*" quickly tosses them one thing and "*High five*" gives a small morale bonus (just like real life)

Known limitations

  • Same reality bubble (for now), centered on the host. There's only one simulated area (not one per player), so you have to stay near each other, within about 60 tiles. You'll get escalating warnings as you drift apart, and past about 68 tiles you leave the host's simulated zone and things break (vehicle physics especially). The world does not auto-pause... so try and close the gap when the warning shows.
  • The host has to stay running. It's a listen server, not a dedicated one: if the host quits or loses connection, the session ends for both players.
  • Sleep should work, but isn't fully developed yet. Coordinate sleep times with your partner or expect the occasional issue.
  • Does CO-OP change hardware requirements?
    • > It's about the same as single-player CDDA. The simulation is CPU-bound and single-threaded, RAM is modest (~0.5 to 2 GB), and the tiles renderer barely touches the GPU.
    • > Co-op does not double the CPU cost. There is one shared simulation area centered on the host, not one per player, so the host runs roughly single-player plus a little overhead, not 2x.
    • > Obviously the new requirement is the network; the host streams world updates to the client every turn, so a faster connection and hardware helps here.
  • So the better computer/connection should be the host?
    • > Yes. The host runs the full world simulation, serializes the changed state every turn, and uploads it to the client, so it does the heavy lifting.
    • > The client mostly renders what the host sends and waits its turn, so it is lighter on CPU; and memory use is similar to single-player.
  • How does it work under the hood?
    • > One machine is the host: it runs the real game. The client sends actions over a TCP connection and gets back the world state to draw, tiles, monsters, the other player.
    • > The second player is wired in as a special NPC on the host (like a proxy), so existing systems like combat, driving and melee already treat them as a real character. The client's input is intercepted at the same point the game already routes keypresses, then run on the host.
    • > There is one shared simulation bubble centered on the host, and a per-turn grant/wait handshake keeps both players in lockstep so the world does not desync.
  • How does saving work?
    • > The host's save holds the shared world (map, your partner's inventory, kill count, everything simulated), and each player's own local save holds their character (stats, skills, appearance + mutations). That's what "Load existing character" restores when you join.
    • > Quicksave: the most reliable option, both players get an on-screen confirmation once the host's copy is up to date, so you know it worked. Save & quit: also saves everything on both sides, just without the round-trip confirmation. If you're the one joining save & quit periodically so your character carries over. Ideally you quicksave together right before you stop for the day, so both saves are fresh and in sync.
  • Is it free?
    • > Free and open source. It's a fork of the experimental branch of CDDA.
  • What version of CDDA is this based on?
    • > It's a fork of CDDA experimental, kept current with the upstream code. This means everything in the 0.I release plus current experimental (June 2026 and any future updates).
Two survivors in a rainy standoff

Survivors before us

Forked from CleverRaven/Cataclysm-DDA experimental.

Contributors to Cataclysm-DDA