- C++ 80.2%
- Python 9.3%
- HLSL 5.6%
- C 4.7%
- PowerShell 0.2%
|
|
||
|---|---|---|
| .forgejo | ||
| mods | ||
| tools | ||
| .gitignore | ||
| README.md | ||
DS2 Revival
Plugins that bring Dungeon Siege II (Steam v2.3) and its expansion Broken World back to life on modern Windows: online and LAN multiplayer through a GameSpy-replacement server, borderless widescreen, and fixes. Player download and install guide: https://dsii.uk. Source code and releases: https://git.dsii.uk/dsii/DS2Revival.
| Folder | Plugin | What it does |
|---|---|---|
mods/multiplayer/ |
DS2Multiplayer.asi | online/LAN play through the replacement server, relay for hosts behind routers, 8-player modes |
mods/widescreen/ |
DS2Widescreen.asi | borderless window at native resolution, menus at the correct aspect ratio, frame cap at the refresh rate, Hor+ field of view and camera options (zoom, pitch), the mouse pointer in the game's own exclusive fullscreen (ExclusiveCursor) |
mods/fixes/ |
DS2Fixes.asi | system-wide keyboard lag, cursor stutter, camera drag at high frame rates |
mods/brokenworld/ |
DS2BrokenWorld.asi | runs Broken World from a subfolder, imports Steam heroes, CPUID frame-rate fix |
mods/modloader/ |
DS2ModLoader.asi | drop-in mods: Mods\<name>\ tanks (.ds2res/.ds2map) and loose files, with a load order; glTF models (.glb/.gltf) used directly (converted in process into Mods\.cache; stb_image for PNG/JPEG) |
mods/common/ |
shared helpers: signature search, import hooks, logging, ini |
The plugins are plain C++ DLLs (renamed .asi) loaded by
Ultimate ASI Loader (version.dll, MIT licence). They
patch the running game in memory only: no game file is modified and nothing runs outside the game process.
Build
Requirements: Windows, Visual Studio 2022 or Build Tools with "Desktop development with C++", Python 3.10+.
python mods/build.pybuildsbuild/mods/*.asi(x86,/O2 /MT, static CRT, Windows system libraries only).- Put Ultimate ASI Loader's x86
dinput8.dllatbuild/asiloader/dinput8.dll. python tools/package.pywritesdist/DS2Revival/anddist/DS2Revival.zip.
On Linux (x86_64), python3 tools/ci_build.py does all three with clang-cl and lld-link (clang/lld 19 or
newer; Ubuntu 24.04: apt install clang-20 lld-20): it downloads the x86 MSVC CRT and Windows SDK with
xwin (pinned versions; this accepts Microsoft's license for them) and
the pinned Ultimate ASI Loader release (SHA-256 checked), builds the five plugins with the same flags
(mods/build.py --release --clang), checks them (x86 DLL, no CRT DLL imports) and writes
dist/DS2Revival.zip and dist/DS2Revival.zip.sha256.
CI and releases
.forgejo/workflows/build.yml runs tools/ci_build.py on the project's own CI runner: every push to main
uploads the zip as a workflow artifact, and every v* tag publishes a release with DS2Revival.zip and
DS2Revival.zip.sha256 attached (tools/ci_release.py).
Release contents
| File | Source |
|---|---|
version.dll |
Ultimate ASI Loader x86, unmodified upstream release (renamed dinput8.dll) |
scripts/*.asi |
mods/, built by mods/build.py |
Broken World/version.dll, Broken World/scripts/*.asi |
the loader and DS2Revival.asi (mods/revival_loader/), which loads the main scripts folder's plugins into the Broken World process (one set of plugins for both games; harmless without the expansion) |
| (no ini) | DS2Revival.ini (next to DungeonSiege2.exe) is not in the zip: the plugins create it on the first start from the default text compiled into them (mods/common/DS2Revival.ini, turned into a header by mods/build.py), so a drag-and-drop update never overwrites the settings |
firewall-setup.ps1, Firewall setup.cmd |
tools/firewall-setup.ps1 and a one-line launcher (optional: Windows Firewall rules for the game) |
DS2Revival README.txt, THIRD-PARTY-NOTICES.txt |
written by tools/package.py; tools/third_party/ |
Tools
tools/tank.py: read, extract and write the game's Tank archives (.ds2res,.ds2map,.ds2party).tools/siegelet.py: build a small playable map (siegelet) from regions of an existing map.tools/bw_cpuid_sites.py: regeneratesmods/brokenworld/cpuid_sites.hfrom a Broken World exe (needscapstone).
Network
DS2Multiplayer resolves the game's old GameSpy host names to the server in [Network] Server (default
use1.dsii.uk) and connects only there; everything else is the game's own DirectPlay traffic.