Daggerfall:SAVEGAME.DAT description
The UESPWiki – Your source for The Elder Scrolls since 1995
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.

![[Content is available under Attribution-ShareAlike]](http://www.uesp.net/w/images/Somerights.png)