Daggerfall:SAVEGAME.DAT description

The UESPWiki – Your source for The Elder Scrolls since 1995

Jump to: navigation, search

Layout of Daggerfall savetree.dat Files

Contents

[edit] Acknowledgements

The Quest Hacking guides on Dave Humphrey's Unofficial Elder Scrolls Pages and DaggerWeb (the hacking guide is now on Michael Schneider's site) started me looking into the format of the QBN files. I reached a point where I decided that a better understanding of the save file and its relation to the QBN files was required. My effort has gone in that direction, and I hope that what I find here will help those working on the QBN files. Further, I'd like to thank the many people that figured out most of the information for the character records and for the item records. A lot of what is in here is taken directly from what they found.

[edit] Notes

All numbers given in this document are in hexadecimal. Numbers written as XX XX XX are in the same byte order as they would appear in the savetree.dat file. Numbers written as XXXX are short words, and the two bytes are reversed from their order in the file. Numbers written as XXXXXXXX are long words, and the four bytes are reversed from their order in the file.

[edit] Level One: Base Structure

Savetree.dat has a 13 byte (hex, remember) header record. This is followed by a variable number of variable sized records( there does not appear to be any counts of records, or any offsets, or any other information useful to extracting records). The variable records have a long word header, which is the size of the record excluding the four bytes of the record size. There are special records which are 0 size, used to break the save file into the following sections:

  • 13 byte header
  • Town record (zero length if not in town)
  • Monster, character, and item records
  • 0-sized record
  • Quest records
  • 0-sized record
  • Dungeon info (Note: this size must be multiplied by 27!)
  • 0-sized record
  • End-of-file

[edit] Level Two: Record Structure

With the exception of the Town record and the Dungeon info, each record has a 1-byte record type at the beginning. This record type is followed by a 46 byte common structure that contains all sorts of interesting data, most of it uninterpretable by myself. The parts that are fairly clear are:

06 0c bytes of location data
1e 04 byte object ID
25 01 byte quest ID
26 04 byte parent object ID
42 04 byte parent record type

I don't know much about the location data, but I have a suspicion that it is interpreted as 6 short words, where each pair of short words represent the X, Y, or Z position of the object in question. Some records don't have a location that makes sense, and some are contained within other records (e.g. objects carried by the character).

The object ID appears to be a unique long word for every item.Records that are carried by the character have a special ID of 0064XXXX. Some special records have an ID of 0001XXXX. Usually, though, the most significant two bytes are a common value thoughout a savetree file.

The parent object ID is the unique ID of the record this record belongs to.

The parent record type is (you guessed it!) the record type byte that the parent object ID references.

The Quest ID associates the record with a particular quest. Every quest that the character is involved in has a unique ID, which is at the beginning of each saved QBN record. These appear to start counting at 1.

[edit] Level Three: Record Contents

I have identified a number of record types and some of their contents, although the rest of the records remain a mystery to me.

[edit] Record Types

Hex Type Item Description
02 Item Records
03 Character Record - one per save file
04 Character Record parent - unknown purpose
05 Character Record parent - unknown purpose
06 Unknown
08 Unknown
09 Spells and Spell Effects
0a Guild Membership Records
0e QBN Records - slight differences between these records and the QBN files, but still recognizable.
10 Parent for QBN records
12 Parent for QBN records
16 Spellcasting creatures - spell list head
17 Control Setting Records - detail, volume
18 Location Names, possibly logbook entries
19 Unknown, 1 per save file
1f Potion mixing records
20 Unknown, Linked to TOWN record structure
21 Unknown, usually in dungeon saves
22 Creature record
24 Possibly items on store shelves
27 Mystery Record - referenced, but doesn't exist in file
28 Location names - possibly for quests
29 Location names - possibly for quests
2b Mystery Record - referenced, but doesn't exist in file
2c Creature record
2d NPC records
2e Generic NPC Records
33 Dungeon record? Huge, mostly zero filled
34 Container Records
40 Unknown Records, all are part of a 'container'
41 Unknown, Possibly quest information

[edit] Record Contents

There are a few special fields that need interpretation. Time stamps are recorded in minutes of game time since one year previous to your character's start in Privateer's Hold. Tamriel has 12 months per year, 30 days per month, 24 hours per day, and 60 minutes per hour.

[edit] Record type: spell (09)

Offset Description Field Type Count
0000 effects BYTE 0x06
0006 category BYTE 0x02
0008 cost BYTE 0x06
000e Duration BYTE 0x09
0017 Probability BYTE 0x09
0020 Strength1 BYTE 0x05
0025 Strength2 BYTE 0x05
002a Strength3 BYTE 0x05
002f Name CHAR 0x14
0047  ?????? BYTE 0x03

NOTE: each spell can have 3 effects. Each effect is recorded as two bytes in the 'effects' field, an entry of FF FF indicates there is no effect. Each effect has its own 3-byte probability (base + chance/level) and a 3-byte duration (same). The strength for each effect is (low, high, low per level, high per level, and level) taken straight from the spell creation window.

[edit] Record type Guild (0a)

Offset Description Field Type Count
0000 level SHORT 0x01
0003 guildID SHORT 0x01
0005 Timestamp LONG 0x02
000D Other

[edit] Record type: Character (03, ...)

Offset Description Field Type Count
0000 name CHAR 0x20
0020 curstat SHORT 0x08
0030 basstat SHORT 0x08
0040 gender BYTE 0x01
0041 transportation SHORT 0x01
0043 race BYTE 0x01
0044 armor BYTE 0x07
0058 start sum LONG 0x01
0070 opponent LONG 0x01
007c health SHORT 0x02
0080 portrait BYTE 0x01
0082 level BYTE 0x01
0083 reflex BYTE 0x01
0085 gold LONG 0x01
008d mana SHORT 0x02
0091 reputation SHORT 0x05
009d Skills SHORT+LONG 0x23
016f Equipped LONG 0x1b
01fd Timestamp LONG 0x05
0230 resist BYTE 0x01
0231 immune BYTE 0x01
0232 low tolerance BYTE 0x01
0233 crit weakness BYTE 0x01
0234 flags SHORT 1
0236 rapid heal BYTE 1
0237 regen health BYTE 1
0238 unknown BYTE 1
0239 spell absorb BYTE 1
023a hit/phobia BYTE 1
023b forb material SHORT 1
023d crit weakness BYTE 1
023e forbidden armor SHORT 1
0240 Class Primary BYTE 3
0243 Class Major BYTE 3
0246 Class Minor BYTE 6
024c Class Name CHAR 18
0264 HP/Level SHORT 01
026a Start stats SHORT 08

[edit] Record type: Item (02)

Offset Description Field Type Count
0000 Name CHAR 20
0020 category SHORT 02
0024 Value LONG 02
002c Hits SHORT 03
0032 Picture SHORT 02
0036 Material BYTE 01
0037 Construction BYTE 01
0038 Colour BYTE 01
0039 Weight LONG 01
003d Enchant Pts SHORT 01
003f Message SHORT 01
0041 Magic SHORT 18

[edit] Record type: "Destination" (28. 29)

Offset Description Field Type Count
0000 Questor SHORT 1
0002 LINK LONG 1
0006 Destination CHAR 20

NOTE: This record can have multiple entries of Questor, LINK, and Destination. I don't know what provides the count or the terminating sentinel.

[edit] Record type: Unknown (6)

Offset Description Field Type Count
0000 Unknown SHORT 10
0020 Location SHORT 6

NOTE: This record type is referenced by what I think are the dungeon descriptions.

[edit] Record type: Item Group (34)

Offset Description Field Type Count
0000 Unknown unknown unknown

NOTE: All items owned by the character have a `parent link' back to a type 34 record. This appears to be the grouping of an item: whether it is on the character, in the cart, weapon list, etc. The type of group is determined by a value in the header for the record.

[edit] Other Goofy Things

The Town and Dungeon records don't have an identifying type byte. I don't know much about them, but Ive been using the following fields to dump these records, which are in themselves a list of records of some type.

TOWN (1a bytes) 
1*SHORT, 0x10*BYTE, 2*BYTE, 1*LONG, 2*BYTE
DUNGEON(27 bytes) 
2*SHORT, 1f*BYTE, 1*LONG

The long values look to be record ID's, much as found in the common headers of all the other record types.

The records for Potions aren't simply enchanted items. In fact, the potion is a linked record of "glass bottle", indicating that the bottle itself isn't the magic, the contents are! The potion contains both a list of the ingredients that went into the mixture, and a spell effect list.

The 'epoch' for the time stamps is 12AM, 1st of Morning Star, 3E 404.

[edit] SAVEVARS.DAT

My small contribution to the savevars.dat file is that the current game date is saved at offset 0x3c9.

Sponsored Links
Personal tools