Character File Structure

Most people think that the character files/save game files are encrypted but they are not encrypted in any way. It just looks that way when viewed with a hex editor, especially if you're new to editing/hacking files.

There are a few things to know about the table:
  1. The byte positions are starting from 0 as given by my hex editor.
  2. Any values given are in hexadecimal and appear as they do in a hex editor (i.e. character by character) on Intel (and compatible) based PCs.
  3. The positions given below are based on a newly created character (i.e. no experience, no gold, no new stats, and no new skills).
  4. Unknown data are marked in this colour and should not be modified unless you know what the values are used for. If you know what the unknown values are used for, please send me an email stating this so that I may add that info to the table.

The following table is the file format for Diablo II v1.00 - 1.08. Here is a link to the file structure for Diablo II v1.09.

For the item file format, check out Trevin Beattie's item file format page.

Byte position Size Description
0 4 bytes File header; always 0x55, 0xAA, 0x55, 0xAA
4 4 bytes

File version:
0x47 = Diablo II v1.00 - v1.06
0x57 = Diablo II v1.07 - v1.08 (expansion set)
0x59 = Diablo II v1.08 (regular, though not confirmed)
0x5C = Diablo II v1.09 (confirmed by Trevin Beattie)

8 16 bytes Character name; NULL (i.e. 0x00) terminated
24 1 byte

Character status
- determines if character has been killed, resurrected, hardcore, or dead, and if the character is an expansion character (i.e. is the character playable with the Lord of Destruction expansion pack)
- the four most significant bits (MSB) determines whether the character is playable with the expansion pack
- the four least significant bits (LSB) determines the character's status as mentioned above

25 1 byte Character's title; sir/dame, lord/lady, baron/baroness
26-33 8 bytes Unknown data
34 1 byte

Character class
0x00 = amazon
0x01 = sorceress
0x02 = necromancer
0x03 = paladin
0x04 = barbarian
0x05 = druid (class is only available in the expansion pack)
0x06 = assassin (class is only available in the expansion pack)

36 1 byte Character level displayed during character selection screen
37-69 33 bytes Unknown data
70 16 bytes Function keys (F1-F8); each key is composed of 2 bytes each
86 1 byte Left mouse button action/spell
87 1 byte Right mouse button action/spell
88 1 byte Difficulty last played and act last saved at;
- 4 most significant bits (MSB) determine the difficulty last played
- 4 least significant bits (LSB) determine the act last saved at
89-139 51 bytes Unknown data
140-153,
236-249,
332-345
14 bytes Act 1 quests (normal, nightmare, hell)
- first 2 bytes determine if character intro has been viewed/listened to
- next 12 bytes are the quests, not in sequential order (2 bytes each)
154-169,
250-265,
346-361
16 bytes Act 2 quests (normal, nightmare, hell)
- first 2 bytes determine if Act 2 is accessible
- next 2 bytes determine if character intro has been viewed/listened to
- next 12 bytes are the quests in sequential order (2 bytes each)
170-185,
266-281,
362-377
16 bytes Act 3 quests (normal, nightmare, hell)
- first 2 bytes determine if Act 3 is accessible
- next 2 bytes determine if character intro has been viewed/listened to
- next 12 bytes are the quests, not in sequential order (2 bytes each)
186-203,
282-299,
378-395
16 bytes Act 4 quests (normal, nightmare, hell)
- first 2 bytes determine if Act 4 is accessible
- next 2 bytes determine if character intro has been viewed/listened to
- next 12 bytes are the quests, not in sequential order (2 bytes each)
204, 300, 396 2 bytes Determines whether the game has been completed for normal, nightmare, and hell difficulty level, respectively
398-437 40 bytes Unknown data
438 4 bytes Normal waypoints
- represented by 30 bits where each bit represents a waypoint
- the LSB (bit 0) represents the first waypoint for Act 1 and the MSB (bit 29) represents the last waypoint for Act 4
442-461 20 bytes Unknown data
462 4 bytes Nightmare waypoints; same representation as above
466-485 20 bytes Unknown data
486 4 bytes Hell waypoints; same representation as above
490-559 69 bytes Unknown data
560 2 bytes Stats start marker (at least, that's what I call them); always 0x67, 0x66
562 1 byte Determines if new stats and new skills exist; value here determines what values start at byte position 581
0xCF = No new stats or new skills (byte at position 581 is a NULL byte)
0xDF = New stats
0xEF = New skills
0xFF = New stats and new skills
563 1 byte Determines if there is any experience and gold; value here determines what values start at byte position 609
0x1F = No experience or gold
0x3F = Experience
0x5F = Gold in belt
0x7F = Experience and gold in belt
0x9F = Gold in stash
0xBF = Experience and gold in stash
0xDF = Gold in belt and stash
0xFF = Experience and gold in belt and stash
564 1 byte always NULL
565 4 bytes Strength
569 4 bytes Energy
573 4 bytes Dexterity
577 4 bytes Vitality
581 1, 5, or 9 bytes 1 byte if no new stats and no new skills; byte is always a NULL
5 bytes if either new stats or new skills exist; 4 bytes for the value and the 5th byte is a NULL
9 bytes if both new stats and new skills exist; 4 bytes for new stats, 4 bytes for new skills, last byte for NULL
Note: if there are new stats and/or new skills, all position values below are shifted down 4 or 8 bytes
582 2 bytes Current life; this value can be higher than maximum life
586 2 bytes Maximum life
590 2 bytes Current mana; this value can be higher than maximum mana
594 2 bytes Maximum mana
598 2 bytes Current stamina; this value can be higher than maximum stamina
602 2 bytes Maximum stamina
604 1 byte NULL byte
605 4 bytes Character level
609 2, 6, 10, or 14 bytes 2 bytes if no experience and no gold, always 0x69, 0x66
4 bytes if there is either experience or gold in belt or gold in stash, followed by 2 bytes (0x69, 0x66)
8 bytes if there is any two of the three stats, followed by 2 bytes (0x69, 0x66)
12 bytes if all exists, followed by 2 bytes (0x69, 0x66)
Note: experience and gold appear here only if the value specified at position 563 is not 0x1F, and the order the values appear in is always experience, then gold in belt, then gold in stash. For example, if there is no experience but there is gold then the gold values start at position 609.
611 30 bytes Character skills
- 1 byte for each skill
- maximum game limit for any skill is 20, though it can be higher in the game due to item modifiers but is not recorded in this area
641 2 bytes Item marker; always (0x4A, 0x4D)
643 2 bytes Number of items
- gems/skulls in socketed items are not accounted for in this value
645 Varies Items
- number of bytes varies depending on the actual number of items (i.e. not necessarily by the number of items value above) but all items are 27 bytes in length and are marked by the item marker above
- for version Diablo II v1.04+, the items are no longer 27 bytes in length but vary between 15 and 31 bytes
- see John Doe's item format page for more information on item record structure
??? Last 12 bytes Marks end of items and end of file; always (0x4A, 0x4D, 0x00, 0x00, 0x4A, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)