Ultima5Tools is a C#/.NET 10 toolkit for reverse-engineering and reconstructing data from Ultima V.
This repository is the toolkit / archaeology phase.
- In scope: parsing, dumping, diffing, and scaffolded rendering support for original game files.
- Out of scope: a modern runtime game engine.
- The parsing/model layer is designed so a future engine can reuse it.
src/U5.Core- format models, parsers, disassemblers, diffing, and formatting utilities.src/U5.Cli- command-line interface entry point and command routing.src/U5.Tests- deterministic bootstrap tests using synthetic fixtures.docs/file-formats- format notes for TLK/NPC/GAM/DAT/OVL.docs/subsystem-notes- architecture and subsystem notes.samples- optional local inputs for experimentation.output- optional generated dump/diff output.
dotnet build Ultima5Tools.slndotnet test Ultima5Tools.slndotnet run --project src/U5.Cli -- tlk dump <path>
dotnet run --project src/U5.Cli -- npc dump <path>
dotnet run --project src/U5.Cli -- ovl info <path>
dotnet run --project src/U5.Cli -- ool dump <path>
dotnet run --project src/U5.Cli -- gam diff <leftPath> <rightPath>
dotnet run --project src/U5.Cli -- dat info <path>
dotnet run --project src/U5.Cli -- map render <path> [outputDir]Place copies of original data files under samples/ (for example samples/original/) for local experimentation.
- Do not modify original game data files.
- Tests do not require original files.
Optional examples (if files are available locally):
dotnet run --project src/U5.Cli -- tlk dump samples/original/TOWNE.TLK
dotnet run --project src/U5.Cli -- npc dump samples/original/TOWNE.NPC
dotnet run --project src/U5.Cli -- ovl info samples/original/DATA.OVL- TLK parsing now includes structured script-node disassembly, grouped OR-routes, and opcode-aware action rendering.
- NPC parsing now understands the 8-map / 32-slot schedule layout and renders per-map schedule data.
- DATA.OVL inspection now exposes the compressed-word table and key map-start tables used by TLK/NPC workflows.
- GAM parsing is raw-byte focused with conservative changed-range diffing.
- DAT support now includes first-pass parsing for settlement/world map families and LOOK2 descriptions.
- OOL support now exposes raw 8-byte world-object records for BRIT/UNDER/SAVED style files.
- Map rendering now emits SVG previews for TOWNE/DWELLING/CASTLE/KEEP plus BRIT/UNDER, including OOL world-object overlays for world maps when sibling files are present.