An engine recreation of Ultima Underworld and Ultima Underworld 2 in the Godot Engine.
This project supercedes the Unity-based project and reboots the code base to act more like the Underworld games originally worked.
This project is largely based on the previous reverse engineering work undertaken by various groups and individuals over the years. Without their efforts this project would not be possible please see the appendix below for the credits I have been able to attribute. If I have failed to give proper credit please let me know and I will happily correct this document.
This is currently pre-alpha. No support is provided for it and usage is at your own risk. Please don't download this version and expect it to be usable in anyway. Think of it as a interactive map viewer.
Requires game files for either UW1 or UW2. GOG versions need to be extracted using a zip extracter from the game.gog file
- Map loading
- Animated doors and sprites
- Looping NPC animations
- Full Conversations
- Most game triggers and traps.
- Barter logic
- Lighting effects (Palette based except for correct transparencies)
- Inventory management including runebag (excluding drag and drop)
- Picking up and dropping of items (without checking pickup rules)
- Usable switches
- Reading signs
- Game strings
- Palette cycling and shading
- Save file loading
- Player stats display
- HP and Mana Displays
- Compass status message
- 3D Models
- Food consumption
- Spell casting (partial) and vanilla decoding of object enchantment values into actual spell effects. Some spells implemented.
- Usable wands, scrolls and potions.
- Small window cutscenes
- Game variables and quest variables (partial support, not all scenarios may work)
- Level transitions
- Partial options menu. In game loading of saves
- Fishing
- Combat attack charge buildup and combat accuracy calcuations for player
- In game advancement and player status changes over time (hunger, fatigue, mana regeneration)
- Skillpoints and character advancement logic
- Automap navigation and updating
- Read-only automap notes.
- Partial processing of SCD.ARK (Scheduled events in UW2)
- Partial cutscene support
- Sleeping and dream logic
- Player collision and regular movement
- Object physics
- NPC AI, movement and pathfinding
- Sound and music
- Transparencies
- Saving
- Character creation
- and much more!
No exe builds yet. This is just a glorified map viewer at this point that you will need to build in Godot yourself.
See https://godotengine.org/ for engine runtime downloads.
- Clone the repository
- Install the Godot engine (version 4.1.1) dev https://godotengine.org/ and run it.
- Save a file called
uwsettings.json
in the Godot Folder. See below for format of the file - Godot project will open at
LaunchScene.tscn
. IMPORTANT: Make sure you run BUILD on the project before continuing. - Run. It might work
This project is developed using VSCode using the C# Tools for Godot extensions. If you are configured to use Godot in VSCode then the project can alos just be compiled and ran from there.
Enter optional paths for each game. Select the folder with the .exe file.
If using the gog versions extract the file game.gog
using a tool like 7-zip and point to that folder.
To select maps to load.
- Choose the game mode by editing the gametoload param in the file
uwsettings.json
. This file should be located in the same path as Godot or a built exe.- UW1 or UW2 are the valid values.
- Enter the level number. Values start at 0.
- Other values
- Light level- Shading in a range 0-7. Value is ignored
- levarkfolder - Change from
DATA
toSAVE1
toSAVE4
to load savegames. - Shader - Default shader used. Value is ignored
{
"pathuw1": "C:\\Games\\UW1\\game\\UW",
"pathuw2": "C:\\Games\\UW2IDA\\UW2",
"gametoload": "UW2",
"level": 0,
"lightlevel" : 7,
"levarkfolder" : "DATA",
"shader" : "UWSHADER"
}
Camera is only in fly mode currently.
WSAD for movement. T to toggle mouse look QE to move up and down. Use shift and scroll to change speed. F1-F6 Change interaction modes F7 Toggle inventory panels F8 Cast Spell F9 Use Track Skill (no implemented yet) F10 Make camp and go to sleep. F11 Toggle Position label F12 Debug reprocess SCD.ARK
See [https://github.com/hankmorgan/UWReverseEngineering] for my dissassemblies and notes on UW1/UW2
The information in this document is gathered from a number of sources most notably the vernable uw-formats.txt. Sections of this document if not taken directly from UW-Formats.txt are heavily based on the work that has gone into that document by a number of contributors and groups over the years. Every effort is being made to list this contributions here. To avoid missing anyone I am quoting verbatim the credit section of each copy of uw-formats.txt I can referencing.
Unfortunately some information sources have been lost to me over time. If I have missed a reference or not given due credit for research or code examples then please let me know and I will happily correct the record.
Unknown authors Internal Formats on the Ultima Codex
Mitch Aigner FAQs for UW1 abd UW2
The following credits are taken verbatim from the files shared by named projects.
The "me" mentioned in the credits is not the author of this guide.
My thanks go out to Jim Cameron that started the original "uw-specs.txt" file and subsequently found out more unknown data structures and discussed about file formats with me. Many thanks, Jim!
Additional information came from
Alistair Brown (basic object format, via the Underworld II editor available at
http://bearcity.pwp.blueyonder.co.uk/)
Ulf Wohlers (Objects and 3D models).
Fabian Pache (about map details and 3d models, UW2
conversations
UW2
player save http://uw2rev.sourceforge.net).
Further infos about weapon animation and miscellaneous bits about uw were contributed by Telemachos from peroxide.dk.
I also like to thank Telemachos who pointed me to the TSSHP's file formats file at the start of all of this.
This file is probably: Copyright (c) 2008,2009 Julien Langer Copyright (c) 2002,2008,2009 Fabian Pache Copyright (c) 2000,2001,2002,2003 Jim Cameron Copyright (c) 2002,2003,2004 Michael Fink Copyright (c) 2004 Kasper Fauerby
My thanks go out to Jim Cameron that started the original "uw-specs.txt" file and subsequently found out more unknown data structures and discussed about file formats with me. Many thanks, Jim!
Additional information came from Alistair Brown (basic object format, via
the Underworld II editor available at
http://bearcity.pwp.blueyonder.co.uk/), Ulf Wohlers (Objects and 3D
models) and Fabian Pache (about map details and 3d models, UW2
related,
http://uw2rev.sourceforge.net).
Further infos about weapon animation and miscellaneous bits about uw were contributed by Telemachos from peroxide.dk.
I also like to thank Telemachos who pointed me to the TSSHP's file formats file at the start of all of this.
This file is probably: Copyright (c) 2000,2001,2002,2003 Jim Cameron Copyright (c) 2002,2003,2004 Michael Fink Copyright (c) 2004 Kasper Fauerby
KarlClinckspoor on cmb.dat
Information on cutscene animation commands from khedoros at https://github.com/khedoros/uw-engine/blob/master/csparse.cpp