About this repository. OpenU5-Enhanced is the development history behind Ultima V Native, which is where releases, downloads and current source live (latest release).
mainhere is the OpenU5 browser-port line as of August 2026 (described below). The other branches (enhanced-mode,esp32-tdeck-port,tdeck/native-view-phase1–3,windows/original-dos-shops,preserve/a4-parity1-wip) and the 42alpha2-*,alpha3-*andalpha4-*tags preserve work-in-progress lines and milestone snapshots that aren't inultima-v-native. GPL-3.0 (LICENSE, NOTICE). No original game files are included; you need your own copy of Ultima V.
A byte-exact browser port of Ultima V: Warriors of Destiny (Origin Systems, 1988). TypeScript + PixiJS. Requires your own copy of the original game (~€5 on GOG, the Ultima 4+5+6 pack).
(hero GIF: walking through Britannia, tactical combat, 3D dungeon)
Every other recreation of Ultima V reinterprets the game. This project ports the original engine's rules, re-derived from the binary itself:
- The
ULTIMA.EXEkernel and its 24 code overlays were disassembled and every gameplay rule was re-derived from the machine code, with the assembly cited next to the code that implements it (file + offset, e.g.COMBAT:0x194A). - Coverage ledger: 202,800 / 202,800 bytes of executable + data justified one by one (code / data / inert, each with a note).
- 276 automated parity tests run identical scenarios in the re-derived model and compare outputs — including a full gypsy-to-endgame critical path threaded through a single RNG seed.
- Runtime verification against the real binary: a custom harness boots the original game in headless DOSBox-X, seeds RAM, sets code breakpoints and compares state byte-for-byte with the port (movement, combat rolls, RNG orbit, wind, moon phases, character creation).
- The original RNG is not a textbook LCG — it's an add/rotate/xor routine
(
((seed+0x9248) ror 3) ^ 0x9248 + 0x11), reimplemented bit-exactly.
What is deliberately not identical is documented too: see
deliberate-divergences.md. Honesty over vibes.
You need the original game files (not included — they belong to EA):
- Buy Ultima 4+5+6 on GOG (~€5).
- Extract the Ultima V files (
innoextractworks on the offline installer). - Drop them into
original/u5/ultima5/inside the repo (the extractor's default location —original/is gitignored), or point--srcanywhere:npm install npm run extract # reads original/u5/ultima5/ # …or: npm run extract -- --src /path/to/your/ultima5 npm run dev # → "Journey Onward"
Keys: arrows to move · Talk Open Look Get Klimb Search · Mix Cast Ready Use · z stats · Tab map · F5 save. Full list in [docs/controls.md].
Or skip the local setup: the browser "bring your own files" demo at openu5.org asks for your game folder and extracts it client-side — nothing is uploaded.
| Area | State |
|---|---|
| Full game completable start-to-finish | ✅ |
| Binary-exact rule migration (ledger 100%) | ✅ |
Unit + parity + E2E suites (verify:all) |
✅ |
| Live game on the unified original RNG stream | ✅ |
| "Grand Tour" — a purist E2E playthrough of ALL content (112/112 dungeon rooms sealed, main line closed end-to-end, re-run byte-identically) | ✅ |
| 1988-faithful skin + optional shader skin + mobile touch deck (gameplay untouched, suite-locked) | ✅ |
The reverse-engineering method (coverage ledger, DOSBox-X oracle, parity harness, independent re-derivation review) is documented in [docs/methodology.md]. The golden rule of the project: no gameplay change is accepted without an assembly citation or a parity scenario. If the port contradicts the derived rule, the port is wrong — never the other way around.
See [CONTRIBUTING.md]. Short version: bug reports with an exported save + seed are gold; gameplay PRs need asm citations; UI PRs must keep the entire E2E suite green without touching a single assert.
This project contains no game data, art, music, text or maps from Ultima V. It is a clean engine that reads the data files from your legally-owned copy. Ultima is a registered trademark of Electronic Arts. This project is not affiliated with or endorsed by EA. If you are a rights holder and have concerns, please open an issue — we will respond cooperatively.
Code licensed under GPL-3.0. Tile metadata derived from Ultima5Redux (MIT) — see NOTICE.