Ultima I Save Game Format
Format type | Saved game |
---|---|
Save locations | On world map only |
Elements saved | Stats, inventory, location of vehicles and enemies |
Games |
In Ultima I, players must create a player which is stored into a save game file called player*.u1. A maximum of four characters can be created. The player can save their game at any time on the over world. The save game file stores all of the player's stats, inventory, the location of their vehicles, and the location of nearby enemies.
When the game needs to jump from one EXE to another, like when you use the space shuttle (which moves from out.exe to space.exe), the currently running EXE save the player in a file called inuse.u1, and the next EXE loads the data from the file and deletes it.
File format
Each save game file stores the following data:
Offset | Data type | Name | Description |
---|---|---|---|
0x00 | ASCIIZ[15] | Name | Player's name. Max of 14 characters, 15 is null. |
0x0F | BYTE | Null | Null value. |
0x10 | INT16LE | Race | 0 - Human, 1 - Elf, 2 - Dwarf, 3 - Bobbit |
0x12 | INT16LE | Class | 0 - Fighter, 1 - Cleric, 2 - Wizard, 3 - Thief |
0x14 | INT16LE | Sex | 0 - Male, 1 - Female |
0x16 | INT16LE | Hits | 0-9999. |
0x18 | INT16LE | Strength | Strength. |
0x1A | INT16LE | Agility | Agility. |
0x1C | INT16LE | Stamina | Stamina. |
0x1E | INT16LE | Charisma | Charisma. |
0x20 | INT16LE | Wisdom | Wisdom. |
0x22 | INT16LE | Intelligence | Intelligence. |
0x24 | INT16LE | Coin | 0-9999. |
0x26 | INT16LE | Experience | 0-9999. |
0x28 | INT16LE | Food | 0-9999. |
0x2A | INT16LE | Ready Weapon | 1 - Dagger, 2 - Mace, 3 - Axe, 4 - Rope and Spikes, 5 - Sword, 6 - Great Sword, 7 - Bow and Arrows, 8 - Amulet, 9 - Wand, A - Staff, B - Triangle, C - Pistol, D - Light Sword, E - Phazor, F - Blaster. |
0x2C | INT16LE | Ready Spell | 1 - Open, 2 - Unlock, 3 - Magic Missile, 4 - Steal, 5 - Ladder Down, 6 - Ladder Up, 7 - Blink, 8 - Create, 9 - Destroy, A - Kill. |
0x2E | INT16LE | Ready Armour | 1 - Leather, 2 - Chain mail, 3 - Plate mail, 4 - Vacuum suit, 5 - Reflect suit. |
0x30 | INT16LE | Boarded Transport | 0 - Walking, 1 - Horse, 2 - Cart, 3 - Raft, 4 - Frigate, 5 - Aircar. Note: If you set this value without other changes, your icon won't change. |
0x32 | INT16LE | Unknown | ! Unknown. |
0x34 | INT16LE | Player X Location | |
0x36 | INT16LE | Player Y Location | |
0x38 | INT16LE | Unknown | ! Unknown. |
0x3A-0x4B | INT16LE | Unknown | ! Unknown. |
0x4C | INT16LE | Gem, Red Qty | |
0x4E | INT16LE | Gem, Green Qty | |
0x50 | INT16LE | Gem, Blue Qty | |
0x52 | INT16LE | Gem, White Qty | |
0x54 | INT16LE | Unknown | Always 0xFFFF. End of gem list marker? |
0x56 | INT16LE | Armor, Leather Qty | |
0x58 | INT16LE | Armor, Chain Mail Qty | |
0x5A | INT16LE | Armor, Plate Mail Qty | |
0x5C | INT16LE | Armor, Vacuum Suit Qty | |
0x5E | INT16LE | Armor, Reflect Suit Qty | |
0x60 | INT16LE | Unknown | Always 0xFFFF. End of armour list marker? |
0x62 | INT16LE | Weapon, Dagger Qty | |
0x64 | INT16LE | Weapon, Mace Qty | |
0x66 | INT16LE | Weapon, Axe Qty | |
0x68 | INT16LE | Weapon, Rope and Spikes Qty | |
0x6A | INT16LE | Weapon, Sword Qty | |
0x6C | INT16LE | Weapon, Great Sword Qty | |
0x6E | INT16LE | Weapon, Bow and Arrows Qty | |
0x70 | INT16LE | Weapon, Amulet Qty | |
0x72 | INT16LE | Weapon, Wand Qty | |
0x74 | INT16LE | Weapon, Staff Qty | |
0x76 | INT16LE | Weapon, Triangle Qty | |
0x78 | INT16LE | Weapon, Pistol Qty | |
0x7A | INT16LE | Weapon, Light Sword Qty | |
0x7C | INT16LE | Weapon, Phazor Qty | |
0x7E | INT16LE | Weapon, Blaster Qty | |
0x80 | INT16LE | Unknown | Always 0xFFFF. End of weapon list marker? |
0x82 | INT16LE | Spell, Open Qty | |
0x84 | INT16LE | Spell, Unlock Qty | |
0x86 | INT16LE | Spell, Magic Missile Qty | |
0x88 | INT16LE | Spell, Steal Qty | |
0x8A | INT16LE | Spell, Ladder Down Qty | |
0x8C | INT16LE | Spell, Ladder Up Qty | |
0x8E | INT16LE | Spell, Blink Qty | |
0x90 | INT16LE | Spell, Create Qty | |
0x92 | INT16LE | Spell, Destroy Qty | |
0x94 | INT16LE | Spell, Kill Qty | |
0x96 | INT16LE | Unknown | Always 0xFFFF. End of spell list marker? |
0x98 | INT16LE | Transport, Horse Qty | |
0x9A | INT16LE | Transport, Cart Qty | |
0x9C | INT16LE | Transport, Raft Qty | |
0x9E | INT16LE | Transport, Frigate Qty | |
0xA0 | INT16LE | Transport, Aircar Qty | |
0xA2 | INT16LE | Transport, Shuttle Qty | |
0xA4 | INT16LE | Transport, Time Machine Qty | |
0xA6 | INT16LE | Unknown | ! Unknown. |
0xA8 | INT16LE | Last Signpost | The index of the last signpost you visited. Default: 0xFFFF. |
0xAA | INT16LE | Unknown | ! Unknown. |
0xAC | INT16LE | Steps | Number of steps the player has moved. |
0xAE | INT16LE | Unknown | ! Unknown. |
0xB0 | INT16LE | Unknown | ! Unknown. |
0xB2 | INT16LE | Unknown | ! Unknown. |
0xB4-0x333 | BYTE[16] | Map Objects | Array of 40 objects on map, see below. |
Map Objects
The last part of the save game file is an array of the objects on the map. Each object is made up of 16 bytes (eight 16-bit integers), and there are a total of 40 objects saved. Map objects include monsters and the player's vehicles.
Offset | Data type | Name | Description |
---|---|---|---|
0x00 | INT16LE | Object Type | You can discern the number from the map tiles in Ultima I Tile Graphic Format. |
0x02 | INT16LE | Unknown | Matches object type for vehicles, usually 1 or 2 for monsters. |
0x04 | INT16LE | X position | Object's X position on the map. |
0x06 | INT16LE | Y position | Object's Y position on the map. |
0x08 | INT16LE | Hits | Object's hit points. 0 for vehicles. |
0x0A | INT16LE | Unknown | ! Unknown. Seems to always be 0. |
0x0C | INT16LE | Unknown | ! Unknown. Seems to always be 0. |
0x0E | INT16LE | Unknown | ! Unknown. Seems to always be 0. |
Credits
This save game format was reverse engineered by TheAlmightyGuru and Daniel D'Agostino. If you find this information helpful in a project you're working on, please give credit where credit is due. (A link back to this wiki would be nice too!)