Skip to content

Character Record (Save File)

Each character in a Darklands save file occupies exactly 554 bytes (0x22a). Fields are not sequential — there are gap bytes throughout. All offsets are relative to the start of the character record.

Extension
Embedded struct — not a standalone file
Location
Inside dksave*.sav, repeated num_characters times starting at 0x189
Byte order
Little-endian (16-bit)
Size
554 B fixed (0x22A)
Compression
None
Magic
N/A
Status
Partial
Source
Wendigo — dksaveXX.sav.xml
Partial. The first 17 bytes (+0x00–+0x11) are undocumented. Equipment type and quality fields are non-adjacent and interleaved with unknown bytes. The character struct is navigable via known anchors (names at +0x25/+0x3E, attributes at +0x5D, skills at +0x6B) but has scattered gaps throughout.

Source: dksaveXX.sav.xml (Wendigo’s Darklands repo)

Note: Darklands has no class system. Characters are defined by backgrounds, occupations, and 19 individual skills. Equipment type and quality for each slot are not adjacent in the struct — see the table below.

Field Layout

OffsetSizeFieldDescription
+0x0017(unknown)
+0x122ageCharacter age
+0x151heraldic_shieldCoat-of-arms letter ('A''O'); references pics\shield?.pic
+0x221equip_missile_typeItem type of equipped missile weapon
+0x2525full_nameFull character name
+0x3e11short_nameNickname (10 chars + null)
+0x4b1equip_vital_typeItem type of equipped vital (torso) armor
+0x4c1equip_leg_typeItem type of equipped leg armor
+0x4f1equip_vital_qQuality of equipped vital armor
+0x501equip_leg_qQuality of equipped leg armor
+0x511equip_weapon_typeItem type of equipped weapon
+0x581equip_weapon_qQuality of equipped weapon
+0x5a1equip_missile_qQuality of equipped missile weapon
+0x5b1equip_shield_qQuality of equipped shield
+0x5c1equip_shield_typeItem type of equipped shield
+0x5d7curr_attrsCurrent attribute values (attribute_set)
+0x647max_attrsMaximum attribute values (attribute_set)
+0x6b19skillsSkill values (skill_set)
+0x7e2num_itemsNumber of items carried
+0x8020saints_known160-bit bitmask — one bit per saint
+0x9422formulae_knownBitmask — 3 bits per byte (quality levels q45/q35/q25)
+0xaa384itemsUp to 64 item structs (6 bytes each)

attribute_set (7 bytes)

OffsetAttribute
+0x00Endurance
+0x01Strength
+0x02Agility
+0x03Perception
+0x04Intelligence
+0x05Charisma
+0x06Divine Favor

skill_set (19 bytes)

OffsetSkillCode
+0x00Edged WeaponwEdg
+0x01Impact WeaponwImp
+0x02Flail WeaponwFll
+0x03PolearmwPol
+0x04Thrown WeaponwThr
+0x05BowwBow
+0x06Missile WeaponwMsl
+0x07Alchemyalch
+0x08Religionrelg
+0x09Virtuevirt
+0x0aSpeak CommonspkC
+0x0bSpeak LatinspkL
+0x0cRead/Writer_w
+0x0dHealingheal
+0x0eArtificeartf
+0x0fStealthstlh
+0x10Streetwisestrw
+0x11Ridingride
+0x12Woodwisewdws

item (6 bytes)

OffsetField
+0x00Item code (word — index into darkland.lst item definitions)
+0x02Type
+0x03Quality
+0x04Quantity
+0x05Weight