RCT-K

Host your own server

RCT-K's dedicated server runs on your own PC or a rented Linux server, like the dedicated servers older games came with. Your friends, or anyone, add it in the launcher by its address and play there.

What it offers

Co-op parks

Players build one park together, each in their own game.

Persistent parks

Co-op parks your server keeps running while nobody plays, with a headless copy of the game.

Park Race

Matches, tournaments, spectating. The Workshop too, if you switch it on.

Your game stays yours. Persistent parks need RollerCoaster Tycoon Deluxe (GOG or Steam). The server only reads the folder you point it at. Nothing of the game is in the package, and nothing is copied into it.

What you need

WindowsLinux
SystemWindows 10 or 11 (64-bit)Debian 12 or newer, Ubuntu 22.04 or newer (others by hand)
Node.jsNot needed: it is inside rctk-server.exe18 or newer from the distribution (setup.sh installs it); 22 recommended
The gameYour RollerCoaster Tycoon Deluxe folder (GOG or Steam)The same folder, copied to the server
ExtraNothingWine (32-bit), Xvfb, mono: setup.sh installs them
MemoryAbout 100 MB for the server, plus about 300 MB per running persistent park

The 1999 CD release can't run on a server: it needs its disc. Players can still use the CD release to play.

Windows

  1. Unpack RCT-K-Server-<version>.zip somewhere you can write to (not under Program Files), e.g. C:\RCT-K Server.
  2. Start rctk-server.exe. The first run asks four things (Enter keeps the value in brackets): the server's name, its port (8090), your game folder (it finds the usual GOG and Steam places), and List this server publicly? (y/N). It writes rctk-server.ini next to itself, with every setting explained and a new admin key, and prints the addresses players type in.
  3. Windows asks whether to let it through the firewall: allow it on private networks (and public ones too if players come from the internet).
  4. Type help in its console for the admin commands. Close it with stop (or Ctrl+C): every running park saves first.

rctk-server.exe --check tests everything and says what is missing. rctk-server.exe --setup asks the first run's questions again. To keep it running without a console window, start it from Task Scheduler with the argument --no-console.

Linux

From the unpacked package, as root:

cd RCT-K-Server-<version>/linux
sudo bash setup.sh --game "/path/to/RollerCoaster Tycoon Deluxe" --name "My server" --port 8090

Add --list to put it on the public list. setup.sh installs Wine, Xvfb, mono and Node.js from the distribution's own packages, makes the rctk user, puts the server in /opt/rctk-server and its settings in /etc/rctk-server/rctk-server.ini, makes RCT-K's copy of the game program from your RCT.EXE, and installs and starts the systemd service rctk-server.

systemctl status rctk-server          journalctl -u rctk-server -f
sudo rctk-server --check              sudo rctk-server admin help

The game folder must be readable by the rctk user: --copy-game copies it for that user. Steam's RCT.EXE is packed: play it once with RCT-K on a Windows PC, then copy rctk_deluxe_steam.exe from RCT-K's folder there to /opt/rctk-server/rctk/.

Settings

rctk-server.ini explains every setting itself. The ones most people change:

SettingDefault
[server] nameMy RCT-K serverShown in players' server lists
[server] port8090TCP; HTTP and the WebSocket share it
[server] addressworked outWhat players type in, e.g. https://rct.example.com; also what the public list shows
[server] tlsoffoff, on (with cert and key), or proxy (a reverse proxy in front)
[server] max_players32Connected at once
[server] motdWelcome!The message of the day; the admin changes it while it runs
[features]co-op, persistent parks, Park Race on; Workshop off
[parks] max4Persistent parks running at once
[list] announceoffPut this server on the public list
[list] urlhttps://rctk.5310s.comThe list server: the official one, or another

Ports and the firewall

  • Open TCP 8090 ([server] port): the only port players need. Keep 7800 and up closed: the headless games' control channels listen on 127.0.0.1 only.
  • At home: forward TCP 8090 on your router to the PC that runs the server. Players outside type in http://<your public IP>:8090; players at home use the LAN address the server printed.
  • A VPS: open 8090 in the provider's firewall too, if it has one.

https with a reverse proxy

Plain http works, but sign-in and the game's messages then cross the internet unencrypted. With a domain name, put a reverse proxy in front that gets a certificate by itself. Caddy:

rct.example.com {
    reverse_proxy /rctk/* 127.0.0.1:8090
}

and in rctk-server.ini: tls = proxy, address = https://rct.example.com. Players type in https://rct.example.com. nginx works the same with the WebSocket headers.

The public list

Like the old games, servers can announce themselves on a public list: the launcher's Servers... > Public list... and this site's server list show it. Listing is off unless you turn it on, because it publishes your server's name and address.

  • Turn it on: answer y to the first run's question, or --set list.announce=on, or setup.sh --list, or announce = on under [list].
  • Set [server] address to what players should type in. The list only takes addresses players can reach from the internet, and asks your server itself before listing it.
  • Your server announces itself when it starts and every 5 minutes; one that stops drops off within 15 minutes.

Admin

In the server's console, with rctk-server admin <command> in another console, or from the launcher's server list (Admin..., with the admin key):

Command
statusName, version, players, parks, what is on
playersWho is connected
kick, ban, ban-ip, unban, bansKeep the peace
motd [text]Show or set the message of the day
parksThe persistent parks: state, last save
park new <file.SV4> [name]A persistent park from a saved game
park start|stop|pause|resume|backup|delete <code>The owner's controls, on any park
backupA backup of every park

Updates and backups

  1. Stop the server (stop, or systemctl stop rctk-server).
  2. Windows: unpack the new package over the old folder (keep rctk-server.ini and data). Linux: unpack it and run sudo bash setup.sh again: it keeps the settings and the data.
  3. Start it. The persistent parks that were running start again from their last saves.

Players need the same RCT-K version as the server for co-op. backup copies each park's latest save to <data>/backups as ordinary saved games; for the whole server, stop it and copy the data folder and the settings file.

Troubleshooting

What you seeWhat to do
MISSING the game: ...[game] folder must be the folder with RCT.EXE of RollerCoaster Tycoon Deluxe (GOG or Steam)
port 8090 is in useAnother server or program has it: stop it, or set [server] port
Players can't connect from outsideOpen the port in the firewall and forward it on the router; test from outside (a phone off Wi-Fi): http://<public IP>:8090/rctk/api/info must show the server's name
A park stays "starting", or "failed"parks shows why; park start <code> tries again
"The server is full"[server] max_players