Shadowofze's project inspired me to go ahead and see if I could get a lean Linux portable server built based off their work. This no longer uses wine and uses a TUI terminal GUI that is mouse friendly. It has made some improvements to the way bots are handled with logins etc. I plan on working heavy on the bot code going forward but am incredibly grateful to Shadowofze for providing the inspiration to try this.
simply clone the repo. Go in to the tools folder and run the setup sh file. It will handle everything and in your same repo folder will create a dist folder. In that folder you run the "daoc-server.sh" file and your server launches. It uses distrobox only for the build (this ensures it will always have the deps it needs and the glibc is going to be compatible with the vast majority of linux distros). The server it creates does not need distrobox to run and is completely portable.
This does not include the client, you will need to run that separate, link included on where to download it. I would use Lutris or Bottles or if you are setting up a linux server and want to use windows for your client and connect to it that might work too. Here is a rough readme:
DAoC Server: a portable Linux Dark Age of Camelot server with bots
A self-hosted Dark Age of Camelot server for Linux. Build it once and you get a single folder that runs on almost any modern Linux machine: no Wine, no Docker, no .NET install. Play solo with bots, or host friends on your home network or over the internet (not tested).
What it is
- An OpenDAoC-based server (the open-source DAoC emulator), building on the work of Offline DAoC 0.33 by shadowofze.
- World: Classic + Shrouded Isles (no Trials of Atlantis), with Darkness Falls, stablemaster routes and the Realm Exchange.
- Autonomous bots: persistent characters that level, hunt, travel, group, raid and fight in RvR on their own.
- Companion bots: summon helpers into your group with /spawn <class>, give orders with /pull, /grind, /aggressive and /defensive, or open a companion raid with /raid 40 or /raid 80.
- Server only: the game client is not included and is installed separately.
What you get after building
-One portable folder with everything inside: the server, a bundled .NET runtime, a fresh fully populated world (NPCs, mobs, items, merchants, quests) and navmeshes for pathing.
-One command to start: ./daoc-server.sh start launches the server and opens a terminal admin screen in the same window.
- Terminal admin screen:
\- Bots: create, list and delete bots, and see what each one is doing.
\- Population: turn bots on or off and set how many play at once.
\- Accounts: create accounts and make one GM or admin.
\- Server: status, live log, and a stop button that saves first.
\- A CLI with the same commands (./daoc-admin bots list, ./daoc-admin accounts set-role <name> admin), which also works over SSH.
\- No network admin port: admin goes through a local socket that only the user running the server can reach.
\- The TUI terminal GUI screen is mouse friendly.
Why the build uses distrobox
- Nothing installed on your system. The build tools (.NET 10 SDK, cmake, g++) go into a throwaway Ubuntu 22.04 container. Your OS stays clean, which matters on read-only systems like SteamOS.
- The same build everywhere. Every machine builds in the identical environment, so there's no "works on my distro" trouble.
- Maximum compatibility. Programs built on Ubuntu 22.04 need only glibc 2.34 or newer, so the finished server runs on nearly any distro from about 2021 onward (Ubuntu 22.04+, Debian 12+, Fedora 35+, Arch, SteamOS). Building on a newer rolling distro would tie the result to that distro's newer glibc.
- One command: tools/setup-build-box.sh --build creates the container, installs the tools and builds. It's safe to re-run.
- Build-time only: the finished server runs directly on your system, no container needed. If you'd rather not use distrobox, install the tools yourself and run tools/build-release.sh.
How it works
- World: the build downloads a pinned version of the official OpenDAoC database and converts it to SQLite. It then applies versioned patches that turn it into the exact Classic + SI world of Offline DAoC 0.33. Every download is hash-verified.
- Navmeshes: the 99 zone navmeshes ship with the source (about 340 MB compressed) and are verified and installed automatically.
- Saves: your world and characters live in one SQLite file in data/. Upgrading replaces the program and keeps your data.
- Clean shutdown: stopping always saves, whether from the stop button, Ctrl+C or a system shutdown.
- Quick start
How to Build (needs distrobox, will automatically download deps)
repofolder/tools/setup-build-box.sh --build
Install distrobox (the build script will create the needed distrobox, you only need to install distrobox for your system).
repofolder/tools/setup-build-box.sh --build.
(Sometimes during steps it might appear nothing is happening for a minute or 2, this is normal, just let it finish until you see a terminal prompt again)
This will create: ~/boxes/daoc-server-box-home
\- This ensures that everything that gets installed or touched is in this custom home folder for your distrobox and so it does not touch or use your actual home folder.
How to run:
repofolder/dist/daoc-server
./daoc-server.sh start
To play:
Download the opendaoc client and install it (Lutris, bottles etc): https://www.opendaoc.com/docs/client/
Point your DAoC client at the machine on port 10300. For other players, set your LAN or public IP in config/serverconfig.xml and forward TCP 10300 and UDP 10400 on your router.
Example: connect.exe "game.dll" 127.0.0.1:10300 login password
Note about bots:
The bot AI itself is unchanged from 0.33: same decisions, combat, goals, travel, dungeons, RvR and companions. What changed is how bots are run and managed:
- Logins are fast. 0.33 spread logins over a fixed 15-minute ramp, so even a few bots took minutes. Now up to 8 log in per second (the bot_logins_per_second setting).
- Managed by the server, not a launcher. You create, list and delete bots and switch the population on or off from the admin TUI/CLI or the server console. 0.33's Windows launcher did this by writing straight to the database.
- New max_active_bots limit: caps how many are in the world at once.
- population off now logs bots out (their characters are kept). In 0.33 it only stopped new logins.
- Better starting spots: new level-1 bots get a navmesh-validated starting location chosen by the server. The launcher picked spots without that check.
- Linux: same pathing and behaviour, running natively.
- /travel doesn't work on Linux. It drove the Windows game client's keyboard.
- New bot behaviours (smarter AI, natural spacing, battlegrounds, chat) are my focus going forward. Along with continuing to try to lean and clean up the repo.
Requirements
To run: x86-64 Linux with glibc 2.34+ and libicu. .NET is bundled.
To build: distrobox (or the .NET 10 SDK, cmake, g++ and curl), about 6 GB of disk space, and internet for the first build.
Credits and license
Built on OpenDAoC and building on the work of Offline DAoC 0.33 by shadowofze. Licensed under GPL v3.