SE2Revival/README.md
DS2Revival c06d0479e6
Some checks failed
build / build (push) Failing after 37s
CI: build on the project's own runner at git.dsii.uk
2026-10-27 22:06:33 -04:00

55 lines
4.4 KiB
Markdown

# 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](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](https://constexpr.org/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](https://git.dsii.uk/dsii/SE2Revival/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](https://github.com/Jake-Shadle/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>`.