Ultima Stones | Ultima IV
Home | Development | File Details
CGA | CON | DNG | EGA | MAP | SAV | TLK | ULT
*.SAV
File Specifications
There are three
specifications in the SAV group. The major one is the PARTY.SAV
data type, 502 (0x1F6) bytes long. The second, for MONSTERS.SAV
and OUTMONST.SAV
is 256 (0x100) bytes. The last is DNGMAP.SAV
,
a type of 512 (0x200) bytes.
PARTY.SAV
- Everything about
the Party
This is the main data file for persistent information. In terms of cheats, most of the appropriate data for modification is here. The file is a fixed size. Most of the data is in discrete character, 16 bit integer and 32 bit integer types. Because of the member data being alike for all eight units, a complex type can be defined. Figure 1. below defines the file. Figure 2. is the complex type for the party member units (B1 - B8).
Figure 1: Party Data Schematic
Figure 2: (B) Party Member Schematic 39 (0x27) bytes
Format
The following is an explanation of the information in the above schematics.
[32 bit integer] count of all entered commands in normal play.
- Hit Points
[16 bit integer] - Maximum Hit Points
[16 bit integer] - Experience Points
[16 bit integer] - Strength
[16 bit integer] - Dexterity
[16 bit integer] - Intelligence
[16 bit integer] 99- Magic Points
[16 bit integer] 99 point max in game set by trade and intelligence.- Weapon Readied
[16 bit integer] index of current weapon readied to the hands, see weapon inventory for enumeration.- Armour Worn
[16 bit integer] index of armour item worn, see armour inventory for enumeration.- Name
[16 element 8 bit character array] name string of a maximum 15 total characters long terminated by the zero character 0x00.- Gender
[8 bit character] 0x0B () for male 0x0C () for female- Class
[8 bit character] 0x00 is a mage, followed by bard, fighter, druid, tinker, paladin, ranger, and lastly 0x07 is shepherd- Health
[8 bit character]
- 0x47 G good
- 0x50 P poisoned
- 0x53 S slept
- 0x44 D dead
The gray section in Fig. 2 is a 16 bit integer that does not affect any known attribute or setting. Its 0 except for Julia (1) and Katrina (6).
|
|
|
|
|
|
|
|
|
|
|
|
- 0x80 - key of truth,
- 0x40 - key of love,
- 0x20 - key of courage,
- 0x10 - bell of courage,
- 0x08 - book of truth,
- 0x04 - candle of love,
- 0x02 - skull cast into the Abyss,
- 0x01 - skull of Mondain.
- 0x10 - bell rung at the Abyss,
- 0x08 - book read at the Abyss,
- 0x04 - candle lit at the Abyss,
- 0x02 - wheel of the HMS Cape,
- 0x01 - silver horn.
- new moon
,- waxing crescent
,- first half
,- waxing gibbous
,- full moon
,- waning gibbous
,- last half
,- waning crescent
.
- Deceit,
- Despise,
- Destard,
- Wrong,
- Covetous,
- Shame,
- Hythloth,
- Abyss.
Unknowns
The first is a 32 bit integer, no equivalent data value is known. It is 0x00000000 in PARTY.NEW. The value is always increasing and seems to be a real time clock or some other counter.
The two 16 bit slots before and after the armour list are always observed to be 0x0000. Several of the end of file slots (delineated as 16 bit integers) are changing during use and are still being researched.
Knowns not saved
Several items of game information are not saved. They are always random or run out if the game is quit. These include the Silver Horn timer and Wind Direction.
MONSTERS.SAV
& OUTMONST.SAV
- Hostile and Surface Object Storage
These files hold
type and position information of objects on the map and in dungeons. All hostiles are
stacked in the lowest indexes first. The higher indexes hold things like frigates and gold
from defeated enemies and stack towards the lower indexes. Note that this means you can
have no more than 32 of these objects on the map. On an event like a move command input
the unit latest info is updated with the previous info moved to the last info list. When
inside dungeons, OUTMONST.SAV
holds the data from MONSTERS.SAV
so that MONSTERS
can hold the dungeon creature information.
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F | |
00 | Unit Latest Tile | |||||||||||||||||||||||||||||||
20 | Unit Latest X Coord | |||||||||||||||||||||||||||||||
40 | Unit Latest Y Coord | |||||||||||||||||||||||||||||||
60 | Unit Last Tile | |||||||||||||||||||||||||||||||
80 | Unit Last X Coord | |||||||||||||||||||||||||||||||
A0 | Unit Last Y Coord | |||||||||||||||||||||||||||||||
C0 | Unused Padding | |||||||||||||||||||||||||||||||
E0 | Unused Padding |
DNGMAP.SAV
- The Dungeon
Saved In
When saving in a dungeon, all eight levels are copied to this file. This records any gold, triggered traps and used orbs that are player modifiable and reset (lost) when the player leaves. The data is formatted the same as the floor information from the dungeon file without the rooms at the end.