Skip to content

Building and Running

codingncaffeine edited this page Oct 6, 2026 · 4 revisions

Building and Running

Prerequisites

  • The .NET 10 SDK. global.json pins the 10.0.1xx band and takes its latest patch.
  • Windows 10/11 or a 64-bit Linux with glibc 2.34 or newer (Ubuntu 22.04, Debian 12 and later, Arch), OpenGL 3.3, and OpenSSL 3 for multiplayer. GLFW and OpenAL Soft come with the build; on Linux a system OpenAL is used when one is installed. The whole solution builds on both systems; SiegeSmith is WPF and runs on Windows only.
  • A legitimate copy of Dungeon Siege. GOG, Steam, or original discs. SiegeFX reads the game's tank files directly and ships no copyrighted assets.

Build

dotnet build SiegeFX.sln -c Release

or ./build-release.sh on Linux, build-release.bat on Windows. The engine builds twice: net10.0 (every platform) and net10.0-windows10.0.22621.0 (Windows, with the in-game video recorder).

Point at game data

SiegeFX looks for the game in this order and takes the first folder holding Resources/Logic.dsres:

  1. the SIEGEFX_DS1 environment variable;
  2. a ds1path.txt beside the program, then one in your config folder (~/.config/siegefx/ds1path.txt on Linux, %APPDATA%\siegefx\ds1path.txt on Windows) — its first line that is not empty or a # comment names the install folder (or its Resources folder);
  3. where the stores and launchers put it: on Windows the registry (GOG, the retail key, Steam) and the usual folders; on Linux the Steam libraries (native, Flatpak, Snap), Heroic's GOG list, and the Wine prefixes of ~/.wine, Lutris and umu (~/Games) and Bottles.

The engine reads Resources/Logic.dsres, Objects.dsres, Sound.dsres, Terrain.dsres, Voices.dsres and Maps/World.dsmap, and notes in the session log when a file's size differs from the GOG edition's.

Running the game

  • Linux: src/SiegeFX.Runtime/bin/Release/net10.0/SiegeFX
  • Windows: src\SiegeFX.Runtime\bin\Release\net10.0-windows10.0.22621.0\SiegeFX.exe

With no arguments it boots like the original: splashes, logo, main menu. --noVideo skips straight to the menu, like the original's nointro=true.

Your files live in ~/.local/share/SiegeFX on Linux ($XDG_DATA_HOME/SiegeFX when that is set) and %LOCALAPPDATA%\SiegeFX on Windows: Saves, logs (a session log per run, the newest eight kept), Screenshots, bugreports and prefs.json. The second line of every session log names the build and the system, e.g. [log] SiegeFX 0.4.0+69ed842… on Ubuntu 24.04.1 LTS (linux-x64).

Controls

The defaults are the original's (input_bindings.gas), and Options → Input lists and rebinds every one. The ones you reach for first:

Key Action
Esc In-game menu (closes an open dialog first)
Space Pause
I / B / J / P Inventory / spell book / journal / character sheet
F Field commands
Tab Megamap
F9 / F11 Quick save / quick load
Ctrl+S / Ctrl+L Save / load game
F10 Options
F12 Adventurer's handbook
E or Ctrl+A Select the whole party
Q Quick weapon select
T, arrows, D Camera track/hold, rotate, free look
- / =, wheel Zoom
Ctrl+F11 Bug-report zip (session log, game state, newest save) into bugreports — a SiegeFX addition
Ctrl+F9 Start/stop the video recorder (Windows build) — a SiegeFX addition

Environment variables

  • SIEGEFX_DS1=PATH — the game install (above).
  • SIEGEFX_DEBUG_LOG_FILE=PATH — write the session log there instead.
  • SIEGEFX_DEBUG_SPELLS=NAME[,NAME…] — a test roster: the first name goes to the primary spell slot, the second to the secondary, the next ten to the placed spells and the rest into the inventory as scrolls (the spell_ prefix may be left off). Normal play starts with no spells, as the original does.

Release builds

./publish.sh vX.Y.Z builds everything a release ships, on Linux, into publish/: SiegeFX-vX.Y.Z-linux-x64.tar.gz (self-contained; a quick start, a desktop entry and icons inside), SiegeFX-vX.Y.Z-win-x64.zip (one SiegeFX.exe) and SiegeSmith-v<version>-win-x64.zip. publish-alpha.bat builds the two Windows zips on Windows. packaging/smoke-test.sh <tarball> [--ds1=PATH] launches the tarball as shipped in a throwaway environment; with a game install it also renders the main menu on a private Xvfb server and boots until OpenAL is up. The AUR package siegefx-bin is in packaging/aur/.

Test menu

test-all.bat (Windows) and ./test-all.sh (Linux) are the project's smoke-test menu: one numbered entry per shipped feature — headless audits for what a program can check, walkthrough scripts for what needs eyes. Reading the menu top to bottom is the fastest tour of what works.

Both take --ds1=PATH, --tool=PATH, --run=PATH and --refs=PATH. test-all.sh is generated from test-all.bat by tools/test-menu.sh: add or change entries in the .bat, run the generator, commit both. CI fails when they disagree.

Six early viewer entries (2–4 and 7–9) read sample files from _ds1refs/ (gitignored: the files are the game's). Extract them from your own install with siegefx tank extract <tank> <resource-path> <file>; siegefx tank list <tank> --ext=.asp (or .raw, .prs, .skrit) finds candidates. For example:

siegefx tank extract ".../Resources/Logic.dsres" /art/animations/skrits/basic_walk.skrit _ds1refs/skrit/basic_walk.skrit

The others are goblin.asp, goblin.raw and goblin_walk.prs (a goblin mesh, its texture and a walk clip), boot.asp (a boot mesh) and stitch_ds_r2.gas (a region stitch file).

Checks

  • CI, on every push and pull request: the solution on Linux and Windows with warnings as errors, the unit tests, the three release artifacts built and the Linux tarball launched.
  • tools/receipts.sh, before a push (it needs a game install): the build, the unit tests, the test-menu check, the engine's self-tests, the parity ledger against its committed baseline, and every spell's effect trace against goldens/sfx-timelines. See Receipts.

CLI tools

The siegefx CLI (SiegeFX.Tools) is the heavyweight: tank / raw / asp / sno / prs / gas / region / world / anim / skrit / templates / pcontent / loot / formulas / spells / sfx / balance / audio / mood / ui / parity subcommand families. See Diagnostic CLI Tools for the full surface.

The original, side by side

On Linux, tools/ds1/ installs and runs the GOG edition of the original under Proton (umu-launcher), to check SiegeFX against it: install-gog.sh (from the GOG offline installer), setup-prefix.sh, play.sh.

Development workflow

  • Add a test-menu entry with every shipped feature, in the same commit (and regenerate test-all.sh).
  • Run tools/receipts.sh before a push. After a deliberate change to the ledger or an effect trace: --update-baseline, and commit the new baseline with the change.
  • Log gotchas to Engine Quirks and Stumbles — before you close the issue, while it's fresh.

Clone this wiki locally