Repository navigation
Building and Running
-
The .NET 10 SDK.
global.jsonpins 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.
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).
SiegeFX looks for the game in this order and takes the first folder holding Resources/Logic.dsres:
- the
SIEGEFX_DS1environment variable; - a
ds1path.txtbeside the program, then one in your config folder (~/.config/siegefx/ds1path.txton Linux,%APPDATA%\siegefx\ds1path.txton Windows) — its first line that is not empty or a#comment names the install folder (or itsResourcesfolder); - 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.
- 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).
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 |
-
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 (thespell_prefix may be left off). Normal play starts with no spells, as the original does.
./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-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).
- 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 againstgoldens/sfx-timelines. See Receipts.
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.
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.
-
Add a test-menu entry with every shipped feature, in the same commit (and regenerate
test-all.sh). -
Run
tools/receipts.shbefore 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.