SE2 Revival: Siege Editor 2 (the Dungeon Siege II world editor) on the Steam version. https://dsii.uk
  • Python 56.9%
  • C++ 43.1%
Find a file
DS2Revival fd57cdfd1e
All checks were successful
build / build (push) Successful in 22s
CI: run on the project's runner at git.dsii.uk (label dsii)
2026-10-27 23:02:55 -04:00
.forgejo CI: run on the project's runner at git.dsii.uk (label dsii) 2026-10-27 23:02:55 -04:00
mods Release builds by CI; install guide (INSTALL.md) 2026-10-24 19:05:55 -04:00
tools Release builds by CI; install guide (INSTALL.md) 2026-10-24 19:05:55 -04:00
.gitignore Source update (90f30c5) 2026-10-23 20:47:44 -04:00
INSTALL.md README, INSTALL: releases live on git.dsii.uk 2026-10-27 22:43:24 -04:00
README.md README, INSTALL: releases live on git.dsii.uk 2026-10-27 22:43:24 -04:00

SE2 Revival

GPG's Siege Editor 2 (Dungeon Siege II Tool Kit 1.1, 2005) on the Steam release of Dungeon Siege II - and, for the first time, with Broken World. Nothing is installed into the registry, the game or the tool kit: an ASI plugin answers the editor's lookups in memory, and an extension DLL lets it read Broken World's scripts.

Install

Full guide, settings and troubleshooting: INSTALL.md (also in the release zip as README.txt).

  1. You need Dungeon Siege II from Steam and GPG's free tool kit, DS2TK-1.1.zip, from siegetheday.org (not part of this project). Broken World is optional: put its files in a Broken World folder inside the game folder.
  2. Unpack the tool kit's installer without running it (it refuses the Steam game): innoextract DS2TK-1.1.exe (innoextract), and copy the app folder's contents to a folder you can write to, e.g. C:\Games\DS2Toolkit.
  3. Download SE2-Revival.zip from Releases and extract it into the same folder: version.dll next to SiegeEditor2.exe, plus the scripts and bw folders.
  4. Start SiegeEditor2.exe. With Broken World installed it asks which game to edit (hold Shift at start-up to be asked again). First time per game: File > Convert .ds2map to files, Maps\World.ds2map for Dungeon Siege II, Broken World\Maps\xDS2XWorld.ds2map for Broken World.

Settings: scripts\DS2Toolkit.ini (game and Broken World folders, which game, QuietErrors, SkipArchives, and [Settings] for any Siege Editor 2 setting). Uninstall: delete version.dll, scripts and bw.

What is here

Path What it is
mods/toolkit/ DS2Toolkit.asi: loaded by Ultimate ASI Loader (version.dll) next to SiegeEditor2.exe. Serves, when missing, HKLM\Software\Microsoft\Microsoft Games\DungeonSiege2 (InstallationDirectory: the game, found through Steam), HKLM\Software\Gas Powered Games\DS2TK (the tool kit folder) and the editor's settings key HKLM\Software\Gas Powered Games\SiegeEditor2. Broken World mode serves res_paths / map_paths with both games' folders, ds2dll_path, skrit_retry=false, and teaches the editor Broken World's new enum names (bwenums.h). A start-up question picks the game. Also keeps the clothmap_rollover lines the editor drops when it saves start_positions.gas, and hides archives listed in SkipArchives.
mods/bwcompat/ BWCompat.ds2dll, generated by tools/bwcompat_gen.py: the editor's FuBi imports *.ds2dll exports as script functions; this DLL exports, as stubs with the right calling convention and stack cleanup, the 772 functions Broken World's exe added (GoMind::GetHomeLeashDistance, ...). Functions differing from the editor's only in return type are left out (the editor would reject the whole DLL).
tools/pe_rename_exports.py writes the decorated C++ export names after linking (the linker cuts aliased export names at the first @).
tools/package_toolkit.py builds dist/SE2-Revival.zip (README.txt is INSTALL.md as plain text).
tools/siegelet.py, tools/tank.py pack an edited region (the editor's Bits folder) into a playable .ds2map.
tools/ci_build.py, tools/ci_release.py, .forgejo/ the release build (below).

Build

Windows, Visual Studio 2022 or newer (Desktop C++), Python 3.10+:

  1. python mods/build.py --only DS2Toolkit,BWCompat
  2. Ultimate ASI Loader x86 dinput8.dll at build/asiloader/dinput8.dll
  3. python tools/package_toolkit.py writes dist/SE2-Revival.zip

Linux (what CI runs), Python 3, clang and lld 19 or newer: python3 tools/ci_build.py --project se2. It fetches the MSVC CRT and Windows SDK with xwin (pinned versions; running it accepts Microsoft's license for those build tools) and Ultimate ASI Loader (pinned, SHA-256 checked), cross-compiles both plugins with clang-cl + lld-link with the same flags as the MSVC build, checks them (x86 DLLs, static CRT) and writes dist/SE2-Revival.zip and its .sha256.

Releases are built by CI (.forgejo/workflows/build.yml): every push to main builds the zip as a workflow artifact; a v* tag (e.g. v1.0.0; v1.1.0-rc1 makes a prerelease) also publishes it as a release with the notes in .forgejo/release-notes.md.

To regenerate the Broken World stubs: python tools/bwcompat_gen.py <Broken World DungeonSiege2.exe> <SiegeEditor2.exe>.