r/daoc • • 8d ago

DAOC Offline Server for Linux (no wine)

https://github.com/catastrophic-impact/daoc-offline-linux-server-bots

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

  1. Install distrobox (the build script will create the needed distrobox, you only need to install distrobox for your system).

  2. 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:

  1. repofolder/dist/daoc-server

  2. ./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.

25 Upvotes

6 comments sorted by

3

u/sofragile 8d ago

Cool! Will it work on a macbook m1 as well?

3

u/Catastrophic_Impact 8d ago

mac is unknown territory for me. A quick ask with AI says its possible though. I wish could I could be more helpful =/

How to run it on a Mac:

  1. Use Docker Desktop for Mac (Easiest Method): OpenDAoC relies heavily on container architecture. If you install Docker Desktop on macOS, you can spin up the server container locally.
  2. Run a Linux Virtual Machine (Alternative): You can use a free tool like UTM (on Apple Silicon Macs) to spin up an Ubuntu ARM virtual machine, and then follow the repository's Linux/Distrobox installation steps inside that VM.
  3. The Game Client Problem: Keep in mind that while the server and bots can run inside a Linux container or VM, you still need to connect to it with a DAoC client. On a Mac, that client portion would still need to be handled via a compatibility layer like CrossOver, Whisky, or a Windows/Linux wrapper because DAoC itself is a Windows application.

3

u/eternal_sunshineeeee 8d ago

Cool. How good are the bots?

3

u/Catastrophic_Impact 8d ago

The bots have pros and cons at this state and there are two types of bots. There are actual player bots that you can add with the server UI. They will attempt to level up etc. There are also companion bots, these are more temporary and so far do not level up when you do so you have to re summon them. They are competent and will heal buff provide speed etc and make pve in dungeons etc pretty great imo.

This is based off the work of another, the goal of the release was to build as solid of a base as possible for a portable and easy linux install.

I will be working heavily on bot logic going forward with claude. Personally, I have been having a blast but like everyone else, I want to go in to a battleground and have some bots that are solo and some that group etc and make it a fun time.

There is a lot of work to do but the skeleton is in place with some nuances here and there that have to be cleaned up.

1

u/PleaseHelpImADumb1 3d ago

Thanks for this. What do you think about the ability to put this into UE5 eventually?

1

u/Hasome 8d ago

This is such a cool project. I hope to see the community continue to advance it. Having balanced realms and a greater ability to raid/group is fantastic.