UltimaVRedux

module
v0.1.0-preview.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 12, 2026 License: MIT

README

Ultima V Redux

A modern Go recreation of Ultima V: Warriors of Destiny, with enhanced presentation, quality-of-life improvements, and a developer Debug Workbench. Playing requires files from your own copy of the original game.

Public development preview: the source is available and the game can be installed from main. The application is unfinished and has known limitations. No version tag or packaged release has been published.

This is a free, non-commercial fan project. Project-authored source code remains MIT-licensed; bundled media has separate terms described in Asset credits.

Installation

Install the latest patch of Go 1.27 or newer. See the short Windows, macOS, and Linux Go setup instructions. Then install the preview:

go install github.com/bradhannah/UltimaVRedux/cmd/ultimav@main

Launch the executable from the directory printed by go env GOBIN; if empty, use bin under the first directory printed by go env GOPATH. With Go's default paths, run "$HOME/go/bin/ultimav" on macOS/Linux or & "$HOME\go\bin\ultimav.exe" in Windows PowerShell. An older ultimav on PATH can otherwise launch a different program after a successful install. See starting the game for copyable commands.

Repeat the installation command to update. The installation guide also covers local builds, original-game setup, and configuration recovery.

The preview targets macOS arm64 (Apple Silicon), Linux arm64, Linux amd64, and Windows amd64. All four targets compile. Anonymous installation and bounded startup were verified on Apple Silicon macOS. The maintainer also tested the game on macOS and reported that it looks good. Native Linux and Windows testing is deferred and their runtime behavior remains unverified; see installation acceptance. Players need Go, their original game files, and a desktop graphics/audio runtime. Installation does not require a source checkout, Node, Make, or a C compiler.

Original game files

First-run setup offers three practical routes:

  1. Confirm a verified existing installation found through supported GOG/Heroic discovery or known local locations.
  2. Copy your original game files into the UltimaV folder directly under your home directory, as shown by setup, then choose Check Again.
  3. Choose Open Settings File, edit the game-data location in your text editor, save it, and choose Check Saved Settings.

Fresh configuration leaves the data location unset; setup asks for confirmation even when it finds just one valid installation. An already valid configured path is retained. The screen shows the resolved home folder and settings filename; custom locations are entered in the external settings editor. There are no in-game path fields. The game does not download original assets for you.

To import a playthrough, the title menu reads SAVED.GAM and SAVED.OOL only from the active game-data directory. For a save pair elsewhere, use the command-line save converter.

Reports and suggestions

The Game Facts cover 39 topics with stable behavioral IDs, algorithms, compatibility formats, and explicit Redux comparisons. See the documentation catalog for system contracts and the development guide for contributor setup.

Please open an issue for bugs, installation difficulties, behavioral corrections, or suggestions. Include the game version, operating system, and steps to reproduce the problem.

The maintainer currently owns implementation. Please read CONTRIBUTING.md and open an issue before preparing a code PR.

License

Project-authored source is provided under the MIT License. Bundled fonts, media, and fixtures retain their accompanying notices and applicable rights; their inclusion does not make all media MIT-licensed. The complete original Ultima V installation needed to play is externally supplied by the player. Original game material retains its existing rights.

See Asset credits and media terms for the music sources, font notices and individual sound-effect attribution, including non-commercial media licences and remaining provenance limitations.

Directories

Path Synopsis
cmd
audio-catalog command
Command audio-catalog exports the production inventory and draft recording briefs.
Command audio-catalog exports the production inventory and draft recording briefs.
audio-editor command
Command audio-editor edits the production audio manifest with live terminal auditioning.
Command audio-editor edits the production audio manifest with live terminal auditioning.
conversation-tool command
Package main provides the semantic conversation extraction CLI.
Package main provides the semantic conversation extraction CLI.
doom-data-extract command
Command doom-data-extract emits semantic Doom and finale evidence as JSON.
Command doom-data-extract emits semantic Doom and finale evidence as JSON.
font-export command
Package main exports Ultima V bitmap fonts (RUNES.CH and IBM.CH) to PNG sprite sheets.
Package main exports Ultima V bitmap fonts (RUNES.CH and IBM.CH) to PNG sprite sheets.
graphics-export command
Command graphics-export decodes original Ultima V graphics into local PNG review files.
Command graphics-export decodes original Ultima V graphics into local PNG review files.
ref_dump command
save-convert command
Command save-convert imports an original save into a canonical native save without starting the game or loading a user's configuration.
Command save-convert imports an original save into a canonical native save without starting the game or loading a user's configuration.
ultimav command
Overlay System - Generalized debug overlay rendering for game visualization
Overlay System - Generalized debug overlay rendering for game visualization
data
conversation-patches
Package conversationpatchdata exposes tracked conversation patches to the runtime.
Package conversationpatchdata exposes tracked conversation patches to the runtime.
internal
ai
Package ai provides NPC artificial intelligence and pathfinding systems for Ultima 5 Redux.
Package ai provides NPC artificial intelligence and pathfinding systems for Ultima 5 Redux.
astar
Package astar implements the A* pathfinding algorithm for NPC movement in Ultima 5 Redux.
Package astar implements the A* pathfinding algorithm for NPC movement in Ultima 5 Redux.
atlasterrain
Package atlasterrain composes a terrain-only chart from immutable loaded inputs.
Package atlasterrain composes a terrain-only chart from immutable loaded inputs.
audio/editorui
Package editorui implements the standalone Bubble Tea audio-library editor.
Package editorui implements the standalone Bubble Tea audio-library editor.
character_creation
Package character_creation implements renderer-independent new-character rules.
Package character_creation implements renderer-independent new-character rules.
config
Package config loads and persists player preferences and original-data locations.
Package config loads and persists player preferences and original-data locations.
conversation/catalog
Package catalog loads immutable semantic conversation programs.
Package catalog loads immutable semantic conversation programs.
conversation/extractor
Package extractor converts original Ultima V TLK data into semantic YAML.
Package extractor converts original Ultima V TLK data into semantic YAML.
conversation/patch
Package patch generates and strictly applies conversation unified diffs.
Package patch generates and strictly applies conversation unified diffs.
conversation/semantic
Package semantic defines the versioned, data-oriented conversation format.
Package semantic defines the versioned, data-oriented conversation format.
conversation/workspace
Package workspace manages private original-conversation editing trees.
Package workspace manages private original-conversation editing trees.
datetime
Package datetime owns the Britannian calendar and calendar-derived presentation phases.
Package datetime owns the Britannian calendar and calendar-derived presentation phases.
debugging
Package debugging defines transport-neutral contracts for the external debug workbench.
Package debugging defines transport-neutral contracts for the external debug workbench.
debugging/scenarios
Package scenarios defines and persists scripted debug scenarios without depending on game or presentation state.
Package scenarios defines and persists scripted debug scenarios without depending on game or presentation state.
debugging/webui
Package webui provides the embedded production assets for the debug workbench.
Package webui provides the embedded production assets for the debug workbench.
debugging/workbench
Package workbench serves the local browser debug workbench.
Package workbench serves the local browser debug workbench.
deterministic_random
Package deterministic_random owns the implementation details of the centralized reproducible gameplay random stream.
Package deterministic_random owns the implementation details of the centralized reproducible gameplay random stream.
doom_recovery
Package doom_recovery persists the single pre-Doom recovery checkpoint.
Package doom_recovery persists the single pre-Doom recovery checkpoint.
game_state
Package game_state provides the central game state management for Ultima 5 Redux.
Package game_state provides the central game state management for Ultima 5 Redux.
graphics/exporter
Package exporter writes decoded Ultima V graphics to local review files.
Package exporter writes decoded Ultima V graphics to local review files.
graphics/legacy
Package legacy decodes graphics files shipped with the DOS version of Ultima V.
Package legacy decodes graphics files shipped with the DOS version of Ultima V.
journal
Package journal holds bounded, renderer-independent journal presentation data.
Package journal holds bounded, renderer-independent journal presentation data.
legacy_save
Package legacy_save decodes original Ultima V SAVED.GAM and SAVED.OOL bundles without depending on Ebitengine or live Redux state.
Package legacy_save decodes original Ultima V SAVED.GAM and SAVED.OOL bundles without depending on Ebitengine or live Redux state.
map_state
Package map_state provides light source tinting for visual atmosphere.
Package map_state provides light source tinting for visual atmosphere.
new_game
Package new_game prepares detached native state for new-game workflows.
Package new_game prepares detached native state for new-game workflows.
originaldata
Package originaldata discovers and validates locally installed original Ultima V data.
Package originaldata discovers and validates locally installed original Ultima V data.
originaldata/doom
Package doom extracts deterministic semantic evidence for Doom and the finale from original Ultima V data files.
Package doom extracts deterministic semantic evidence for Doom and the finale from original Ultima V data files.
originaldata/dungeonarchive
Package dungeonarchive validates original first-person dungeon graphics without allocating Ebitengine resources.
Package dungeonarchive validates original first-person dungeon graphics without allocating Ebitengine resources.
originaldata/graphicsarchive
Package graphicsarchive performs bounded, cancellable CPU-only loading of original graphics archives.
Package graphicsarchive performs bounded, cancellable CPU-only loading of original graphics archives.
originaldata/introarchive
Package introarchive validates original title archives without allocating Ebitengine resources.
Package introarchive validates original title archives without allocating Ebitengine resources.
platform/texteditor
Package texteditor requests the host text editor without invoking a shell.
Package texteditor requests the host text editor without invoking a shell.
player_save
Package player_save persists the fixed set of player-facing native save slots.
Package player_save persists the fixed set of player-facing native save slots.
profiling
Package profiling supplies opt-in presentation diagnostics.
Package profiling supplies opt-in presentation diagnostics.
references
Package references provides game data constants, structures, and loading for Ultima 5 Redux.
Package references provides game data constants, structures, and loading for Ultima 5 Redux.
repositoryfs
Package repositoryfs provides shared persistence safety primitives for filesystem-backed repositories.
Package repositoryfs provides shared persistence safety primitives for filesystem-backed repositories.
save_snapshot
Package save_snapshot defines the renderer-independent native save snapshot format and its filesystem persistence primitives.
Package save_snapshot defines the renderer-independent native save snapshot format and its filesystem persistence primitives.
sprites
Package sprites provides the LRU cache for dynamic visual effects.
Package sprites provides the LRU cache for dynamic visual effects.
sprites/indexes
Package indexes defines pure sprite identities and shared atlas membership.
Package indexes defines pure sprite identities and shared atlas membership.
text
Package text provides text rendering utilities including bitmap fonts for sign display.
Package text provides text rendering utilities including bitmap fonts for sign display.
ui/mainscreen
Package mainscreen provides UI components for the main game screen display.
Package mainscreen provides UI components for the main game screen display.
ui/widgets
Package widgets provides reusable UI components for the game interface.
Package widgets provides reusable UI components for the game interface.
pkg
semantic_input
Package semantic_input defines framework-independent input values used by core contracts.
Package semantic_input defines framework-independent input values used by core contracts.
scripts
check-core-dependencies command
Command check-core-dependencies checks the actual production and test import closures of the gameplay roots.
Command check-core-dependencies checks the actual production and test import closures of the gameplay roots.
check-documentation command
Command check-documentation validates retained Markdown links, ownership, and authority rules.
Command check-documentation validates retained Markdown links, ownership, and authority rules.
check-lint-config command
Command check-lint-config verifies the repository config and exercises errcheck.
Command check-lint-config verifies the repository config and exercises errcheck.
check-player-pointer-input command
Command check-player-pointer-input rejects Ebitengine pointer APIs in player-game source.
Command check-player-pointer-input rejects Ebitengine pointer APIs in player-game source.
test-gate command
Command test-gate inventories every repository package and runs the selected required logic/render scope uncached.
Command test-gate inventories every repository package and runs the selected required logic/render scope uncached.
vm-settings-proof command
Command vm-settings-proof drives the opt-in application fixture through real Ebitengine keyboard input.
Command vm-settings-proof drives the opt-in application fixture through real Ebitengine keyboard input.
test
originaldata
Package originaldata locates optional copyrighted game data for integration tests.
Package originaldata locates optional copyrighted game data for integration tests.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL