Save Files - Diablo 2 Lod Character
Following the header is a variable-length block containing base stats and current stats (life, mana, stamina, etc.). The format uses a series of (StatID, Value) pairs terminated by 0x00 0x00.
Common StatIDs:
Example fragment (hex):
01 00 64 00 → Strength (ID 0x01) = 100 (0x64)
A .d2s file is a binary file. Key offsets (1.10+ LoD): diablo 2 lod character save files
| Offset | Size | Description |
|--------|------|-------------|
| 0 | 4 | File identifier (0xAA 0xAA 0xAA 0xAA for LoD 1.10+) |
| 4 | 4 | Version (e.g., 0x60 0x00 0x00 0x00 for 1.10+) |
| 8 | 32 | Character name (null-terminated) |
| 40 | 4 | Status (0=normal, 1=expansion, 2=dead HC, etc.) |
| 44 | 4 | Character class (0=Amazon, 1=Sorceress, 2=Necro, etc.) |
| 48 | 4 | Level |
| 52 | 4 | Strength |
| 56 | 4 | Energy |
| 60 | 4 | Dexterity |
| 64 | 4 | Vitality |
| 68 | 4 | Unused stat points |
| 72 | 4 | Unused skill points |
| ... | ... | Then follow: current stats (HP, mana, stamina), waypoints, quests, NPC dialogues, skills, inventory, stash, mercenary data, corpse, and iron golem info. |
📘 Inventory items are stored as raw item codes with attribute lists (a complex nested structure).
If you try to load a 1.09 character into a 1.14 installation: Following the header is a variable-length block containing
This is the most common error. It means the game engine loaded the .d2s file but encountered a mathematical impossibility.
The D2:LOD .d2s file is a remarkably compact binary format for its era, balancing storage efficiency (bit-packed skills, variable-length integers for item attributes) with extensibility (stat ID list, item code strings). Its reverse engineering has enabled a thriving modding and offline community for over two decades. However, the format’s age is evident in its lack of forward compatibility and reliance on a trivial checksum, making it vulnerable to corruption and easy editing—features that ultimately became part of the game’s enduring charm.
References
Appendix available upon request: Complete stat ID table, all item code mappings, and checksum test vectors.
The header contains the identity of the character.
The file contains a snapshot of your character’s entire state, including: Example fragment (hex): 01 00 64 00 →
The file is saved automatically whenever you exit the game or when the game auto-saves at certain checkpoints.
Two distinct blocks:
No comments:
Post a Comment