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: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: |
| 8 | 16 bytes | Character name; NULL (i.e. 0x00) terminated |
| 24 | 1 byte |
Character status |
| 25 | 1 byte | Character's title; sir/dame, lord/lady, baron/baroness |
| 26-33 | 8 bytes | Unknown data |
| 34 | 1 byte |
Character class |
| 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) |