Site Tools


documentation:file_formats:games:deathkeep

The unofficial 3DO Deathkeep files format specifications by Versus (vas.1987), 2024 (version 1.0)

Note:
All data is BIG ENDIAN.
Directions for stairs and ramps means that named direction must have considered from lower to upper part of the structure. i.e. North direction for the ramp means that I’m sliding from the top towards South.
Directions for the monsters means that monster is faced towards the named direction.

I made an app, which reads all game data needed for 3D model export and for some level edit. You can edit every cube, but you can’t extend or shrink the palette. You can extract level to wavefront *.obj format. You can edit a gap between cubes before exporting (for some 3rd app needs). You can also test your suggestions by editing cube’s properties and test it later in the game. First select the target cube, edit its value and click this button “edit”. Then just save a new file or overwrite the an existing one.


Level editor with source : https://github.com/Versusvs/3DO-Deathkeep-level-editor

Contents

Overview

Introduction

Level voxel files (\data2\levels\*)

Level data files (\data2\levels\*data)

Global data files (\data2\DK Data*)

Savefile structure

OVERVIEW. This description covers almost all game data files, which contains level geometry, level textures, inventory items and monsters. Movies, sounds, music and separate cel files are excluded from documenting. I also tried to investigate savefile data structure.

INTRODUCTION.
3DO and PC port have identical levels, but level files have different format.
Both 3DO and PC levels consist of voxels. Every voxel is a 3D cube which may contain different combinations of level elements. It may contain ramp or stair only or teleport or level exit. Every level must fit in parallelogram with dimensions 64 by 32 by 8. Where 8 is height and as we could say the number of Floors. We have 16384 voxels in total! Pretty much, isn’t it?
3DO levels consist of two files. First one contains voxel table, Second contains textures, animation data, teleports and other logic, items and monsters.

A) LEVEL VOXEL FILES (\data2\levels\*)

Each level voxel file is 131 072 bytes. Each voxel in 3DO version is encoded by 8 bytes. So, there are 16 384 voxels. If voxel has 0xFF value, it’s blank for the game engine. Every variation from it means that voxel is used by the game. It can be just walls, ceiling and floor with textures, it can be ramp or stairs, item or monster can be placed in. Blank voxels may be located inside large halls, in the center of the room, if the room is big enough.
First voxel in file has position in 0,0,0 (X, Y, Z). Second voxel has position 0,0,1 (X, Y, Z). It means that second voxel is located directly above the first one. First 8 voxels are located one above another. Voxel number 9 is located near to first column in the width direction on the coordinates: 0,1,0 (X, Y, Z).

1.jpg

Voxel file structure

Offset (HEX)Length, bytesDescriptionChapter
08Voxel #0A
88Voxel #1
0x108Voxel #2
0x1FFF88Voxel #16383

Each voxel is encoded by 8 bytes and they are numbered from 0 to 7.

Voxel structure

Byte #Length, bitsDescriptionChapter
08Stairs, Steps, Ramps. (also linked with byte 7 when set to teleports, Elevators)A.1
14Doors, closed doorsA.2
4Brightness, Flickering
28First number for the cube's palette specsA.3
34Always zeroA.4
4Second number for the cube's palette specs
48Always zeroA.5
58Additional item’s specsA.6
68Always zeroA.7
78Item&Enemy (also bound with byte 0 when set to teleport, elevator)A.8

A.1)

Byte #0. It contains data about ramps, steps and stairs. Various values can encode all directions of the ramp or stair. Both ramps and stairs can be 2 types. The first type encodes a ramps or stair in lower half of the cube height. The second type encodes the ramp or stair in upper half of the cube height to the top of the cube. Values in range 0x80 – 0x9A are for game inner logic (teleports, elevators, monster and fireballs triggers, etc.).

stair_ramp.jpg

This byte also encodes a steps, if I may say so. This steps have a various elevation from the floor ground and have flat surface. Using different values, you may do a fine tuning for your level design.

steps.jpg

I found some values which affects a level in a weird way and not actually present in the game. May be there are more, I didn’t test others.

weird1.jpgweird2.jpgweird3.jpgweird4.jpg

All known values of Byte #0 are in the table below.

Byte #0 (HEX) Description
0 N/A
01 Stairs South Low
02 Stairs North Low
03 Stairs West Low
04 Stairs East Low
05 Stairs South Upper
06 Stairs North Upper
07 Stairs West Upper
08 Stairs East Upper
09 Columns in cube's corners
0A 2 steps pyramid. Pedestal
0B Double square wall in the center
0C Big square column in the center
0D
0E
0F Step. Height 16. Default texture on the walls. Without top texture
10 Elevator path definer. Must be set in addition with other bytes (Byte #7, Block 4)
11 Step. Height 1
12 Step. Height 2
13 Step. Height 3
14 Step. Height 4
15 Step. Height 5
16 Step. Height 6
17 Step. Height 7
18 Step. Height 8
19 Step. Height 9
1A Step. Height 10
1B Step. Height 11
1C Step. Height 12
1D Step. Height 13
1E Step. Height 14
1F Step. Height 15
20
21 Step. Height 1. Without vert. textures
22 Step. Height 2. Without vert. textures
23 Step. Height 3. Without vert. textures
24 Step. Height 4. Without vert. textures
25 Step. Height 5. Without vert. textures
26 Step. Height 6. Without vert. textures
27 Step. Height 7. Without vert. textures
28 Step. Height 8. Without vert. textures
29 Step. Height 9. Without vert. textures
2A Step. Height 10. Without vert. textures
2B Step. Height 11. Without vert. textures
2C Step. Height 12. Without vert. textures
2D Step. Height 13. Without vert. textures
2E Step. Height 14. Without vert. textures
2F Step. Height 15. Without vert. textures
30 Step. Height 0. Jump up 1 floor
31 Step. Height 1. Without vert. textures. Jump up 1 floor
32 Step. Height 2. Without vert. textures. Jump up 1 floor
33 Step. Height 3. Without vert. textures. Jump up 1 floor
34 Step. Height 4. Without vert. textures. Jump up 1 floor
35 Step. Height 5. Without vert. textures. Jump up 1 floor
36 Step. Height 6. Without vert. textures. Jump up 1 floor
37 Step. Height 7. Without vert. textures. Jump up 1 floor
38 Step. Height 8. Without vert. textures. Jump up 1 floor
39 Step. Height 9. Without vert. textures. Jump up 1 floor
3A Step. Height 10. Without vert. textures. Jump up 1 floor
3B Step. Height 11. Without vert. textures. Jump up 1 floor
3C Step. Height 12. Without vert. textures. Jump up 1 floor
3D Step. Height 13. Without vert. textures. Jump up 1 floor
3E Step. Height 14. Without vert. textures. Jump up 1 floor
3F Step. Height 15. Without vert. textures. Jump up 1 floor
40 Step. Height 0. Jump up 2 floors
41 Step. Height 1. Without vert. textures. Jump up 2 floors
42 Step. Height 2. Without vert. textures. Jump up 2 floors
43 Step. Height 3. Without vert. textures. Jump up 2 floors
44 Step. Height 4. Without vert. textures. Jump up 2 floors
45 Step. Height 5. Without vert. textures. Jump up 2 floors
46 Step. Height 6. Without vert. textures. Jump up 2 floors
47 Step. Height 7. Without vert. textures. Jump up 2 floors
48 Step. Height 8. Without vert. textures. Jump up 2 floors
49 Step. Height 9. Without vert. textures. Jump up 2 floors
4A Step. Height 10. Without vert. textures. Jump up 2 floors
4B Step. Height 11. Without vert. textures. Jump up 2 floors
4C Step. Height 12. Without vert. textures. Jump up 2 floors
4D Step. Height 13. Without vert. textures. Jump up 2 floors
4E Step. Height 14. Without vert. textures. Jump up 2 floors
4F Step. Height 15. Without vert. textures. Jump up 2 floors
50 Step. Height 0. Jump up 3 floors
51 Step. Height 1. Without vert. textures. Jump up 3 floors
52 Step. Height 2. Without vert. textures. Jump up 3 floors
53 Step. Height 3. Without vert. textures. Jump up 3 floors
54 Step. Height 4. Without vert. textures. Jump up 3 floors
55 Step. Height 5. Without vert. textures. Jump up 3 floors
56 Step. Height 6. Without vert. textures. Jump up 3 floors
57 Step. Height 7. Without vert. textures. Jump up 3 floors
58 Step. Height 8. Without vert. textures. Jump up 3 floors
59 Step. Height 9. Without vert. textures. Jump up 3 floors
5A Step. Height 10. Without vert. textures. Jump up 3 floors
5B Step. Height 11. Without vert. textures. Jump up 3 floors
5C Step. Height 12. Without vert. textures. Jump up 3 floors
5D Step. Height 13. Without vert. textures. Jump up 3 floors
5E Step. Height 14. Without vert. textures. Jump up 3 floors
5F Step. Height 15. Without vert. textures. Jump up 3 floors
60 Step. Height 0. Jump up 4 floors
61 Step. Height 1. Without vert. textures. Jump up 4 floors
62 Step. Height 2. Without vert. textures. Jump up 4 floors
63 Step. Height 3. Without vert. textures. Jump up 4 floors
64 Step. Height 4. Without vert. textures. Jump up 4 floors
65 Step. Height 5. Without vert. textures. Jump up 4 floors
66 Step. Height 6. Without vert. textures. Jump up 4 floors
67 Step. Height 7. Without vert. textures. Jump up 4 floors
68 Step. Height 8. Without vert. textures. Jump up 4 floors
69 Step. Height 9. Without vert. textures. Jump up 4 floors
6A Step. Height 10. Without vert. textures. Jump up 4 floors
6B Step. Height 11. Without vert. textures. Jump up 4 floors
6C Step. Height 12. Without vert. textures. Jump up 4 floors
6D Step. Height 13. Without vert. textures. Jump up 4 floors
6E Step. Height 14. Without vert. textures. Jump up 4 floors
6F Step. Height 15. Without vert. textures. Jump up 4 floors
70 Step. Height 0. Jump up 5 floors
71 Step. Height 1. Without vert. textures. Jump up 5 floors
72 Step. Height 2. Without vert. textures. Jump up 5 floors
73 Step. Height 3. Without vert. textures. Jump up 5 floors
74 Step. Height 4. Without vert. textures. Jump up 5 floors
75 Step. Height 5. Without vert. textures. Jump up 5 floors
76 Step. Height 6. Without vert. textures. Jump up 5 floors
77 Step. Height 7. Without vert. textures. Jump up 5 floors
78 Step. Height 8. Without vert. textures. Jump up 5 floors
79 Step. Height 9. Without vert. textures. Jump up 5 floors
7A Step. Height 10. Without vert. textures. Jump up 5 floors
7B Step. Height 11. Without vert. textures. Jump up 5 floors
7C Step. Height 12. Without vert. textures. Jump up 5 floors
7D Step. Height 13. Without vert. textures. Jump up 5 floors
7E Step. Height 14. Without vert. textures. Jump up 5 floors
7F Step. Height 15. Without vert. textures. Jump up 5 floors
80 Teleport. Set Byte #7 to 0xE4 and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
81 Trigger for the door. Set Byte #7 to 0xE5 and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
82 Elevator related DOWN. Set Byte #7 to 0xE6, set Byte #0 along the path to 0x10 and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
83 This cube points on cubes around elevators. Set Byte #7 to 0xE7 and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
84 Wall fireball trigger. Set Byte #7 to 0xE8 and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
85 Floor flame trigger. Set Byte #7 to 0xE9 and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
86 Ceiling fireball trigger. Wait an attack from above. Set Byte #7 to 0xEA and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
87 Wall fireball trigger (blue fireball). Set Byte #7 to 0xEB and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
88 Switching off the light (reduces brightness). Set Byte #7 to 0xEC and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
89
8A
8B This cube points on some Monsters nearby. Triggers monsters to active state. Set Byte #7 to 0xEF and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
8C N/A. Not working. Present only in levels #3, 7, 13, 14 basically outside level cubes.
8D N/A
8E N/A
8F N/A
90 N/A
91 N/A
92 N/A
93 N/A
94 This cube points on cubes. Flickering light turns on in those cubes in case of triggering. Set Byte #7 to 0xF8 and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
95 Elevator DOWN. Set Byte #7 to 0xF9, set Byte #0 on the path to 0x10 and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
96 Elevator UP. Set Byte #7 to 0xFA, set Byte #0 on the path to 0x10 and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
97 Elevator DOWN. Set Byte #7 to 0xFB, set Byte #0 on the path to 0x10 and use blocks 4, 5 (See chapter B, LEVEL DATA FILES)
98
99
9A
9B
9C
9D
9E
9F
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
B0
B1
B2
B3
B4
B5
B6
B7
B8
B9
BA
BB
BC
BD
BE
BF
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
E0
E1
E2
E3
E4
E5
E6
E7
E8
E9
EA
EB
EC
ED
EE
EF
F0 Ramp West. Low
F1 Ramp West. High
F2 Ramp East. Low
F3 Ramp East. High
F4 Ramp North. Low
F5 Ramp North. High
F6 Ramp South. Low
F7 Ramp South. High
F8 N/A?
F9 N/A?
FA N/A?
FB N/A?
FC N/A?
FD N/A?
FE N/A?
FF

A.2)

Byte #1. Contains data about cube’s inner brightness, light flickering, and partially doors logic. To ensure the Door is working properly it’s animation must be set in blocks 1-3 (see chapter B).
Bit #1 indicates that this cube has a door, Bit #3 indicates that door is closed or not (requires key). Bits must be set in both cubes (both door sides). Bit #1 == 1 means door presence in the cube. Bit #3 == 1 means that door requires a key. Setting these bits to make a door is necessary but not enough. Most common situation is when door may be opened from both sides. In this case two cubes which have the door, must have Bit #1 bit enabled. I can make a one-way path using a closed door bit (Bit #3) from one side only. So, this area may be accessed but there is no way back without a key.
Byte #1, bits #0-3:
Bit #1 = 1 means that a door is present
Bit #3 = 1 means that a door is locked
You can play with first 4 bits of Byte #1:
0x2 – door present
0xA – door present and locked
0 – door doesn’t exist

Bits #4-7 within Byte #1 describes cube’s inner brightness or light flickering.

Byte #1, bits #4-7 (HEX)Description
1Brightness 14 (brighter)
2 Brightness 7
3Brightness 13
4Brightness 6
5Brightness 12
6Brightness 5
7Brightness 11
8Brightness 4
9Brightness 10
ABrightness 3
BBrightness 9
CBrightness 2
DBrightness 8
EBrightness 1 (darker)
FFlickering light

A.3)

Byte #2. First palette byte. (See chapter B, LEVEL DATA FILES). This byte is used as a first palette ID part for the walls, ceiling, floors and the textures. This byte must be considered with Byte #3.

A.4)
Byte #3
. First 4 bits are always zero. The next 4 bits are used as a second palette ID part for the walls, ceiling, floors and the textures like Byte #2. Textures encodes inner surfaces of the scenery cube and cube’s collisions. This byte must be considered with Byte #3.
Bytes #2, #3 together represents palette ID in *data file. (See chapter B, LEVEL DATA FILES).
Example:
Byte #2 = 0xF4.
Byte #3 = 0xA.
Palette number = 0xF4A.

A.5)
Byte #4
. This byte isn’t used by the game and always equals zero.

A.6)
Byte #5
. This byte adds additional data for character’s items from Byte #7 (0x50-0xC3). Helms, Armor, Weapons can gain additional specs, i.e. Helm +2, Long sword +1, where +2 and +1 are additional specs. Possible values: 0 to 0x7F.

A.7)
Byte #6
. This byte isn’t used by the game and always equals zero.

A.8)
Byte #7
. This byte contains data about all items placed on the level. Health potions, weapons, food, amulets, decor and so on. It also encodes an enemy placement with chosen enemy direction. Item may be placed in the level, but some items are visible to Mage, but not visible for Dwarf or Half-Elf FighterMage.

Byte #7 (HEX) Description
0 Monster. 1st type. N
01 Monster. 1st type. NE
02 Monster. 1st type. E
03 Monster. 1st type. SE
04 Monster. 1st type. S
05 Monster. 1st type. SW
06 Monster. 1st type. W
07 Monster. 1st type. NW
08 Monster. 1st type. N. Moving by default
09 Monster. 1st type. NE. Moving by default
0A Not used by the game?
0B
0C Monster. 1st type. S Moving by default
0D Monster. 1st type. SW Moving by default
0E Monster. 1st type. W Moving by default
0F Monster. 1st type. NW Moving by default
10 Monster. 2nd type. N
11 Monster. 2nd type. NE
12 Monster. 2nd type. E
13 Monster. 2nd type. SE
14 Monster. 2nd type. S
15 Monster. 2nd type. SW
16 Monster. 2nd type. W
17 Monster. 2nd type. NW
18 Monster. 2nd type. N. Moving by default
19 Monster. 2nd type. NE. Moving by default
1A Monster. 2nd type. E. Moving by default
1B Monster. 2nd type. SE. Moving by default
1C Monster. 2nd type. S. Moving by default
1D Monster. 2nd type. SW. Moving by default
1E Monster. 2nd type. W. Moving by default
1F Monster. 2nd type. NW. Moving by default
20 Monster. 3rd type. N
21 Monster. 3rd type. NE
22 Monster. 3rd type. E
23 Monster. 3rd type. SE
24 Monster. 3rd type. S
25 Monster. 3rd type. SW
26 Monster. 3rd type. W
27 Monster. 3rd type. NW
28 Monster. 3rd type. N. Moving by default
29 Monster. 3rd type. NE. Moving by default
2A Monster. 3rd type. E. Moving by default
2B Monster. 3rd type. SE. Moving by default
2C Monster. 3rd type. S. Moving by default
2D Monster. 3rd type. SW. Moving by default
2E Monster. 3rd type. W. Moving by default
2F Monster. 3rd type. NW. Moving by default
30 Decor1, N
31 Decor1, NE
32 Decor1, E
33 Decor1, SE
34 Decor1, S
35 Decor1, SW
36 Decor1, W
37 Decor1, NW
38 Decor2, N
39 Decor2, NE
3A Decor2, E
3B Decor2, SE
3C Decor2, S
3D Decor2, SW
3E Decor2, W
3F Decor2, NW
40 Decor 3, N
41 Decor 3, NE
42 Decor 3, E
43 Decor 3, SE
44 Decor 3, S
45 Decor 3, SW
46 Decor 3, W
47 Decor 3, NW
48 Decor 4, N
49 Decor 4, NE
4A Decor 4, E
4B Decor 4, SE
4C Decor 4, S
4D Decor 4, SW
4E Decor 4, W
4F Decor 4, NW
50 Feast (Food)
51 Not used by the game
52 Dwarven Key, Tower Key, Fortress Key
53 Ancestral artifact RED
54 Ancestral artifact GREEN
55 Ancestral artifact BLUE
56 Rations
57 Healing potion
58 Potion of speed
59 Scroll of Acid protection
5A Rock
5B Dart
5C Scrying Glass
5D Orb of Lighting
5E Wand of Fear
5F Winged Boots
60 Helm
61 Bracers
62 Ring of Flying
63 Ring of Protection
64 Amulet of magic resistance (round)
65 Amulet of imminent return (knife type)
66 Dagger
67 Long Sword
68 Longbow
69 Spellbook
6A Cloak
6B Chain Mail
6C Scroll Spell
6D Defender Sword
6E Vorpal Sword
6F Battle Axe
70 Hammer
71 Staff
72 Sling
73 Arrow
74 Gauntlets
75 Shield
76 Flame Tongue
77 Crossbow
78 Not used by the game
79 Not used by the game
7A Amulet of Power
7B Book of Spell Doubling
7C Extra Healing potion
7D Poison
7E Potion of Cure Poison
7F Water
80 Potion of Invulnerability
81 Scroll of Hurling
82 Potion of Flying
83 Potion of Heroism
84 Potion of Super-Heroism
85 Potion of Invisibility
86 Potion of Hill Giant Strength
87 Potion of Storm Giant Strength
88 Lightning Staff
89 Staff of Striking
8A Ring of Invisibility
8B Ring of Regeneration
8C Ring of Sustenance
8D Ring of Weakness
8E Ring of Wisardry
8F Not used by the game
90 Plate Mail
91 Ring Mail
92 Scale Mail
93 Two-Handed Sword
94 Axe of Hurling
95 Dwarven Lord's Deathstriker
96 Storm Hammer
97 Dwarven Thrower II
98 Dagger of return
99 Chill Blade
9A Vampire Fang
9B Luck Blade
9C Crossbow of Accuracy
9D Crossbow of Doubling
9E Bow of Neverending Arrows
9F Firebow
A0 Dart of Homing
A1 Bracers of Archery
A2 Bracers of Defense
A3 Sling of Seeking
A4 Fire Slinger
A5 Fire Sling of Doubling
A6 Gauntlets of Dexterity
A7 Gauntlets of Ogre Power
A8 Scroll of Electricity protection
A9 Scroll of Cold protection
AA Scroll of Fire protection
AB Scroll of Gas protection
AC Scroll of Magic protection
AD Scroll of Poison protection
AE Boots of Ice Walking
AF Boots of Ooze Walking
B0 Boots of Lava Walking
B1 Boots of Goop Walking
B2 Boots of Acid Walking
B3 Boots of Ether Walking
B4 Boots of Artery Walking
B5 Boots of Vein Walking
B6 Boots of Dirt Walking
B7 Not used by the game
B8 Boots of Leaping
B9 Boots of Door Bashing
BA Not used by the game
BB Wand of Fire
BC Wand of Frost
BD Wand of Lightning
BE Wand of Magic Missiles
BF Wand of Paralysis
C0 Orb of Fire Storms
C1 Orb of True Seeing
C2 Orb of Magic Missiles
C3 Orb of Flame Strikes
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
E0
E1
E2
E3
E4 Standart Teleport. Works with Byte #0 set to 0x80 and blocks 4, 5. (See chapter B, LEVEL DATA FILES).
E5 Trigger for the door. Works with Byte #0 set to 0x81 and blocks 4, 5. (See chapter B, LEVEL DATA FILES). When character enters this cube, another cube opens it’s door.
E6 Elevator DOWN. Works with Byte #0 set to 0x82, blocks 4, 5 and 0xE7(0x83). (See chapter B, LEVEL DATA FILES).
E7 Cube points on cubes around elevators. Use blocks 4, 5. Works with Byte #0 set to 0x83. May be one cube per level, may be some of them. (See chapter B, LEVEL DATA FILES).
E8 Wall fireball trigger. Works with Byte #0 set to 0x84. Use blocks 4, 5. (See chapter B, LEVEL DATA FILES).
E9 Floor flame trigger. Works with Byte #0 set to 0x85. Use blocks 4, 5. (See chapter B, LEVEL DATA FILES).
EA Ceiling fireball trigger. Wait an attack from above. Works with Byte #0 set to 0x86. Use blocks 4, 5. (See chapter B, LEVEL DATA FILES).
EB Wall fireball trigger (blue). Works with Byte #0 set to 0x87. Use blocks 4, 5. (See chapter B, LEVEL DATA FILES).
EC Switch off the light (reduces brightness). Works with Byte #0 set to 0x88. Use blocks 4, 5. (See chapter B, LEVEL DATA FILES).
ED
EE
EF This cube points on some Monsters to set to active mode. Works with Byte #0 set to 0x8B and blocks 4, 5. (See chapter B, LEVEL DATA FILES).
F0 Not working. These cubes located basically behind the playable area. (Levels 3, 7, 13, 14) Byte #0 = 0x8C
F1 N/A. Doesn’t have a link with the Byte #0
F2 N/A. Doesn’t have a link with the Byte #0
F3 N/A. Doesn’t have a link with the Byte #0
F4 N/A. Doesn’t have a link with the Byte #0
F5 N/A. Doesn’t have a link with the Byte #0
F6 N/A. Doesn’t have a link with the Byte #0
F7 N/A. Doesn’t have a link with the Byte #0
F8 Turns on Flickering light in linked cubes. Works with Byte #0 set to 0x94 and blocks 4, 5 (See chapter B, LEVEL DATA FILES).
F9 Elevator related DOWN. Works with Byte #0 set to 0x95, blocks 4, 5 and with 0xE7 (0x83). (See chapter B, LEVEL DATA FILES). Set Byte #0 on the path to 0x10 and use blocks 4, 5. Platform returns up?
FA Elevator UP. Works with Byte #0 set to 0x96, blocks 4, 5 and with 0xE7(0x83). (See chapter B, LEVEL DATA FILES). Set Byte #0 on the path to 0x10 and use blocks 4, 5. Platform returns down.
FB Elevator DOWN. Works with Byte #0 set to 0x97, blocks 4, 5 and 0xE7(0x83). (See chapter B, LEVEL DATA FILES). Set Byte #0 on the path to 0x10 and use blocks 4, 5.
FC
FD
FE
FF Blank (N/A)

B) LEVEL DATA FILES (\data2\levels\*data)

Data file structure:

Offset (HEX) Length (HEX) Description Chapter
0 4 Number of textures
4 various CCB textures B.1
0x100 Block 1. Offsets for animated object’s backgrounds in block 2 B.2
0x100 Block 1. Offsets for animation palette in block 2
0x100 Block 1. Offsets for repeated animation in block 2
various Block 2. Animation sequences for doors, torches, floors B.3
various Block 3. Palette (floor, ceiling, walls texture indexes, collisions) 16-byte entries B.4
4 Level entry coordinates (X, Y, Z, rotation) B.5
4 Level exit coordinates (X, Y, Z, 0)
0x6C Block 4. Offsets for game logic in block 5 B.6
various Block 5. Game logic. Teleports, Elevators, Monsters and fireballs triggers, Door triggers, Light triggers B.7
various Animation without collision, level decorations (ANIMBACK) C
various Monsters (ANIMENEMIES) D
various Animation with collision, level decorations (ANIMOBJ) E
various Unique objects for the level (OBJECTS) F
various End of the file G

B.1) CCB textures
All wall floor and ceiling textures are here. Every texture entry has the following structure:

Offset (HEX)Length (HEX)Description
020
210 or Texture prefix
31Texture ID
44Texture size without texture ID, prefix and custom collision data (optional)
8Custom collision (optional)
4‘CCB’ header
Texture data

Texture prefix.
Texture prefix 0x10 indicates default texture for using by game engine. So, for each inner side of the cube only one texture may be assigned by palette (see chapter B.4). If cube geometry is more complex than a simple cube, (cube with ramp, stairs, steps, etc.) this default texture ID will be used for “secondary” surfaces. If voxel data (Byte #0) indicates that cube has a stair, step, etc., this default texture will be assigned to vertical stair polygons. It also applicable for complex cube’s geometry (Byte # 0 is set to: 0x1-0x7F).
Texture prefix may be set to 1 or 2. When I swapped this prefixes, these floor and ceiling textures swapped to in the game. Texture prefix also may be set to 0x20, but I didn’t investigate it yet.
Texture prefix 0x20 marks textures, which are used for hidden doors in the walls.

Texture ID.
Unique texture IDs are assigned to each texture in the CCB textures section. Voxel’s textures are coded in the palette (see chapter B.4).
Texture ID is coded by first 5 bits. Next bits are used for texture rotation of texture mirroring.
For wall textures: Bit #7 = 1 – texture is flipped relative to vertical axis.
For ceiling and floor textures: Bits #6 and #7 codes texture rotation. There are 4 possible cases:

Bit #7Bit #6RotationValue
000
101
112
013

Custom collision.
Base cube’s collision is set by palette (see chapter B.4). But in some cases like stairs, ramps, doors or windows must have a more complex collision. It means that only selected cube’s wall zones must be transparent for any kind of object or the actors. Custom wall collision is encoded by 8 bytes. Each bit in 8×8 grid encodes the collision in the cell. Note that all frame in opening door animation has a corresponding custom collision. There is one exclusion in this bit cell rule, when bit pattern doesn’t work as shown in the game. It’s just an opening in the wall (level 1), but bit mask looks weird… (see pattern 8). Some patterns are shown below.

Pattern 1. Ramp, low ( 0xFF 0x3F 0x0F 0x3 0 0 0 0).

Pattern 2. Ramp, high ( 0xFF 0xFF 0xFF 0xFF 0x3F 0x0F 0x3 0).

Pattern 3. Round hole in the center ( 0xFF 0xFF 0xFF 0xE7 0xE7 0xFF 0xFF 0xFF ).

Pattern 4. Opening door, frame 1 ( 0xE7 0xE7 0xE7 0xE7 0xE7 0xE7 0xFF 0xFF ).

Pattern 5. Opening door, frame 2 ( 0xC3 0xC3 0xC3 0xC3 0xC3 0xE7 0xFF 0xFF ).

Pattern 6. Opening door, frame 3 ( 0x81 0x81 0x81 0x81 0x81 0xC3 0xFF 0xFF ).

Pattern 7. Corner ( 0x80 0xC0 0xE0 0xF0 0xF8 0xFC 0xFE 0xFF ).

Pattern 8. Opening frame (0 0 0x78 0 0xF0 0xE8 0 0xB4 ).

All patterns used in the game see table below.

Bytes (HEX)Description
FFFFFFFFFFFFFFFFClosed door
C3C3C3C3C3C3C3FFOpening type 1
81818181818181FFOpening type 2
FF3F0F030000Ramp low
FFFFFFFFFF3F0F03Ramp high
FFFF8181C3E7FFFFTriangle window
818181818181C3FFOpening with thick sides
FFFFFFFFC3C3C3FFWindow in the upper part
FFFF8181819999FFDouble window type 1
C3C3C3C3C3C3FFFFOpening type 3
C0C0C0C0E0F0FFFFHalf of the arch
F8F8F8F8F8F8FFFFOpening single-door
C0C0C0C0C0C0FFFFOpening single-door
C3C3C3C3C3C3C3FFNarrow opening
FFFFFFC3C3C3C3FFDouble window type 2
C3C3C3C3C3E7FFFFOpening
FFFF99999999FFFFDouble narrow window
FFFFC3C3C3E7FFFFArch window
FFFF818181FFFFFF
F0F0F0F0FFFFFFFFHalf of the arch
FFC3C3C3C3C3C3FF
FFFFA5A5A5A5FFFFTriple window
F0F0F0F0F0F0F0F0Window with side column
FFFFFFE7E7FFFFFFHole in the center
000000C3FFArch on the top. Without side collisions
E7E7E7E7E7E7E7FFOpening double door
C3C3C3C3C3C3C3FFOpening double door
818181818181C3FFOpening double door
FFC381818181C3FFBig hole

B.2) Block 1
Block 1 has constant size of 0x300 and consist of 3 equal parts. Part 1 (size = 0x100) is for backgrounds, Part 2 is for wall animation offsets, Part 3 is for repeated animation? (torches, reflections on the walls). Wall texture ID is linked to the Part 1(2, 3) offsets. If offset = 0, wall texture has no texture ID override or animation.
Block 1 has the following structure:

Offset (HEX)Length (HEX)Description
00x100Part 1
0x1000x100Part 2
0x2000x100Part 3

1) Game engine looks to Part 1 offset = Texture ID. Value at this offset = texture ID override. It means that this new texture will draw instead of previous one.

2) Game engine looks to Part 2 offset = Texture ID. Value at this offset = Block 2 offset. Part 2 is for single use animation (like doors).

3) Game engine looks to Part 3 offset = Texture ID. Value at this offset = Block 2 offset. Part 3 is for repeated animations (like torches reflections).

B.3) Block 2
Block 2 describes animation sequences texture IDs. Offsets values from Part 2 and 3 from Block 1 points to animation sequence beginning in this block. Block structure is the follows:

Offset (HEX)LengthDescription
01Block 2 size (with this byte)
11Base (background) texture?
1Key? (for doors)
10? (for doors), First frame? (for animated objects)
1Animation speed
1Frames quantity
variousTexture IDs (animation sequences)
1Base (background) texture?
1Key? (for doors)
10? (for doors), First frame? (for animated objects)
1Animation speed
1Frames quantity
variousTexture IDs (animation sequences)

If there are no animations on the level, Block 2 structure is the follows:

Offset (HEX)Length (HEX)Description
01Block 2 size in bytes (with this byte)
130

B.4) Block 3
Block 3 is the Palette. Palette consist of 16-byte entries and each stores all texture IDs for each side of the cube, base collisions, additional collisions, floor damage flags, resting zone flags, low friction flags and textures for vertical stair’s polygons. Numeration begins from 0. Two Bytes #2, #3 (see chapter A.3, A.4) combined gives the palette #.
Block 3 structure is the follows:

Offset (HEX)Length (HEX)Description
04Block 3 size in 16-byte entries (without this bytes)
40xF16-byte entry n
4+0xF*10xF16-byte entry n+1
4+0xF*20xF16-byte entry n+2
4+0xF*(Block 3 size)/0xF0xF16-byte entry n*(Block 3 size)

16-bytes entries have the following structure:

Byte #Description
1Texture ID West
2Texture ID South
3Texture ID East
4Texture ID North
5Texture ID NW-SE (non-transparent from North)
6Texture ID NE-SW (non- transparent from South)
7Texture ID NW-SE (non- transparent from South)
8Texture ID NE-SW (non- transparent from North)
9Floor texture ID
10Ceiling texture ID
11?
12Textures ID for vertical stair’s polygons, Low friction, Resting, Damage
13?
14?
15Additional Collision. Non-visible obstacles, some thin columns inside the cube, etc.
16Collision

Byte #12 structure

Texture for stairs (vertical)
Low frictionDamage (not applicable on Bonus level)Resting (except stairs and ramps. Applies only on a flat surfaces)
Bit #7Bit #6Bit #5Bit #4Bit #3Bit #2Bit #1Bit #0

Byte #16 collisions structure

North wallSouth wallEast wallWest wallDiag. NE-SWDiag. NW-SECeilingFloor
Bit #7Bit #6Bit #5Bit #4Bit #3Bit #2Bit #1Bit #0

B.5) Level entry and exit coordinates
8 bytes encoding level start and exit positions. Structure is the follows:

Byte #Description
1Start level X coordinate
2Start level Y coordinate
3Start level Z coordinate
4Start level rotation
5Exit level X coordinate
6Exit level Y coordinate
7Exit level Z coordinate
8Always = 0?

Level exit coordinates may be 0 when Monster is triggering exit? Rotation values range:
0 = West dir, 0x40 = South dir, 0x80 = East dir, 0xC0 = North dir. Interpolation may be applied.

B.6) Block 4
Block 4 stores offsets for teleports, elevators, collapsing floors and other such data type. These offsets are linked with Block 5 (see chapter B.7). Note that Byte #0 and Byte #7 (see chapter A) must be set to their corresponding values together. Block 4 starts with it’s size (4 bytes) and always equal 0x6C without this 4 bytes. All offsets in the table below starts after the block’s size. I.e. if Byte #7 and Byte #0 (see chapter A) are set, and value on offset in Block 4 is not 0, all data is located in Block 5 (see chapter B.7). Note that offset value for standart teleport in Block 4 is always 0, but teleport data may be in Block 5 (see chapter B.7).

Offset (HEX)Byte #7 (Chapter A)Byte #0 (Chapter A)Description
00xE40x80Standart Teleport. Works with zero byte set to 0x80 and blocks 4, 5
0x40xE50x81
0x80xE60x82Elevator down. Works with zero byte set to 0x82, blocks 4, 5 and 0xE7(0x83).
0xC0xE70x83This cube points on cubes around elevators. Use blocks 4, 5. Works with zero byte set to 0x83. May be one cube per level, may be some of them.
0x100xE80x84Wall fireball trigger. Works with zero byte set to 0x84.
0x140xE90x85Floor flame trigger. Works with zero byte set to 0x85.
0x180xEA0x86Ceiling fireball trigger. Wait an attack from above. Works with zero byte set to 0x86.
0x1C0xEB0x87Wall fireball trigger (blue). Works with zero byte set to 0x87.
0x200xEC0x88Switch off the light (reduces brightness). Works with zero byte set to 0x88.
0x240xED0x89
0x280xEE0x8A
0x2C0xEF0x8BThis cube points on some Monsters to set to active mode. Works with zero byte set to 0x8B and blocks 4, 5
0x300xF00x8C
0x340xF10x8D
0x380xF20x8E
0x3C0xF30x8F
0x400xF40x90
0x440xF50x91
0x480xF60x92
0x4C0xF70x93
0x500xF80x94
0x540xF90x95Elevator related DOWN. Works with zero byte set to 0x95, blocks 4, 5 and 0xE7 (0x83). Byte #0 (see chapter A) in all cubes along the elevator’s way must be set to 0x10. Platform returns up?
0x580xFA0x96Elevator UP. Works with zero byte set to 0x96, blocks 4, 5 and 0xE7(0x83). Поднимается снизу наверх. Byte #0 (see chapter A) in all cubes along the elevator’s way must be set to 0x10. Platform returns down.
0x5C0xFB0x97Elevator DOWN. Works with zero byte set to 0x97, blocks 4, 5 and 0xE7(0x83). Byte #0 (see chapter A) in all cubes along the elevator’s way must be set to 0x10.
0x600xFC0x98
0x640xFD0x99
0x680xFE0x9A

B.7) Block 5
Block 5 contains all special events logic (teleports, elevators, wall and ceiling triggers, etc.). All data in this block is linked with Block 4 offsets (see chapter B.6). If there are no data for block 5 (block is missing), Block 5 is 4 bytes length and = 4. In order to be working, Byte #0 and Byte #7 must be set (see chapter A).

Offset (HEX)Length, bytes (HEX)Description
-4Block 5 size (without these bytes)
01Teleports or elevators quantity (or other types quantity)
13Teleport or elevator or other entrance (trigger) (X, Y, Z)
41Delimiter (always = 1 for teleports type). In other cases = number of dependent cubes.
53 x nTeleport exit (X, Y, Z) or dependent cubes (3xn) for other types. n = number of dependent cubes. n=1 for teleports, because teleport has only one dependent cube (exit).
5+ 3 x n3Next teleport or elevator or other entrance (trigger) (X, Y, Z)
1Next delimiter (always = 1 for teleports type). In other cases = number of dependent cubes.

If dependent cube is an another trigger, this new trigger will be activated instead of the first triggering cube (non-teleport related).

C) ANIMBACK
These objects appear in the cube then value on corresponding offsets in Block 1 (see chapter B.2) is not zero. ANIMBACK are usually animated objects which have no collision and may resides always near walls (torches, flames, huge challises etc…) and in the cube’s center (sparkles, hanging objects, candelabras, etc…). May be only two different ANIMBACK object types per level. Some these objects may be observed in 3D in game. These objects may be attached to the top or to the bottom of the cube.
I didn’t dive deeply into the investigation for this type of objects, because it wasn’t necessary for building a 3D model, which was my primary objective. Object’s structure is fairly investigated, but the base is clear.

Offset (HEX)Length, bytes (HEX)Description
041
44Header size in bytes
81Bytes left before “ANIM” header?
91Frames quantity
0xA1?
0xB1?
0xC1Animation speed? Frames selection?
4“ANIM” section size in bytes
4‘ANIM’ identifier string
various“ANIM” data

D) ANIMENEMIES
This objects placed in level are monsters. Enemy placement encoded in Byte #7 (see chapter A.8). May be three of monster types per level maximum. I also didn’t investigate this objects deeply. Object’s structure is shown below.

Offset (HEX)Length (HEX)Description
04Monster types quantity
44Header size in bytes
81Offset to monster’s name
910?
0xA1?
0xB1?
0xC1Animation speed
0xD1Z coordinate. Loading at this altitude in the level cube
0xE Transparency or translucency
0xF Z coordinate. While walking
0x10 ?
0x11 ?
0x12 ?
0x13 Z coordinate. Walking coordinate? Attacking coordinate?
0x14 ?
0x15 ?
0x16 ?
0x17 ?
0x18 ?
0x19 ?
0x1A ?
0x1B ?
0x1C ?
0x1D Health? Armor?
0x1E ?
0x1F ?
0x20 ?
0x21 ?
0x22 ?
0x23 Health
0x24 Speed
0x25 ?
0x26 First frame ID?
0x27 ?
0x28 First attacking frame ID?
0x29 Frame ID?
0x2A Frame ID?
0x2B Frame ID?
0x2C Frame ID?
0x2D Frame ID?
0x2E Frame ID?
….
4“ANIM” section size in bytes
4‘ANIM’ identifier string
various“ANIM” data

E) ANIMOBJ
This objects are for level decoration (stalactites, stalagmites, standalone columns, tables, fountains, graves, hanging skeletons, gargoyles, debris, etc…). Object placement encoded in Byte #7 (see chapter A.8). May be four of these object types per level maximum. Object may be observed as 3D in the game. No deep investigation also, sorry.

Offset (HEX)Length (HEX)Description
0 Object types quantity available
4 Header size in bytes
8 ?
9 Frames quantity
0xA ?
0xB ?
0xC Animation speed
0xD Z coordinate
0xE Transparency. 0-No transparency, > 0 - more transparency …… To black non-transparency
0xF 0?
0x10 0
0x11 Collision (=4 only?)
4“ANIM” section size in bytes
4‘ANIM’ identifier string
various“ANIM” data

F) OBJECTS
These objects are unique items which could be found on a level (Keys, Ancestral Artefacts, Feast, etc…). Object placement encoded in Byte #7 (see chapter A.8). May be three or four of these object types per level maximum. In some levels 4th object exist in level file, but kind of ‘blank’. Object may be observed as plain texture in the game. No deep investigation also, sorry.

Offset (HEX)Length (HEX)Descripton
04Object types quantity available
41Item ID (see Byte #7 in chapter A.8)
510
610
71Header size in bytes
81Offset to object’s name
91Frames quantity
0xA1?
0xB1?
0xC1Animation speed
0xD1Z coordinate
0xE1Transparency. 0-No transparency, > 0 - more transparency …… To black non-transparency
0xF10?
0x1010
0x1110?
0x121?
0x131?
0x141?
0x151?
0x161?
0x171?
0x181?
0x191?
0x1A1?
0x1B1Item ID again (see Byte #7 in chapter A.8)
0x1C1?
0x1D1?
0x1E1?
0x1F1?
0x201?
0x21variousObject’s name
4“ANIM” section size in bytes
4‘ANIM’ identifier string
various“ANIM” data

G) END OF FILE
End of the file mark (-1) is located after objects block (see chapter F). After this mark level name follows.

Offset (HEX)LengthDescription
040xFFFFFF
4variousLevel name
10x20 (dot)

H) GLOBAL DATA FILES (\data2\DK Data*)
This three files contains all item textures (also small item textures in inventory), explosions animations, weapons animations, inventory backgrounds and huge amount of unknown data.
File structure is the follows.

Offset (HEX)Length, bytes (HEX)Descripttion
00xD0Character name and default skills
0xD04Block 1 size in bytes including this 4 bytes
variousBlock 1
4‘APPL’ identifier string
4Block 2 size in bytes including this 4 bytes
variousBlock 2
4‘APPL’ identifier string
4Block 3 size in bytes including this 4 bytes
variousBlock 3
4‘APPL’ identifier string
4Block 4 size in bytes including this 4 bytes
variousBlock 4
4‘APPL’ identifier string
4Block 5 size in bytes including this 4 bytes
variousBlock 5
4‘APPL’ identifier string
4Block 6 size in bytes including this 4 bytes
variousBlock 6
4‘APPL’ identifier string
4Block 7 size in bytes including this 4 bytes
variousBlock 7
4‘APPL’ identifier string
40x63 for DK Data 1 file, 0x64 for DK Data 2 file, 0x69 for DK Data 3 file
4Item ID or index # (zero-length header)
4“ANIM” size in bytes
4‘ANIM’ identifier string
various“ANIM” data
1Item ID or index # (zero-length header)
4“ANIM” size in bytes
4‘ANIM’ identifier string
various“ANIM” data
4“ANIM” or “CCB” header size in bytes
1If equal to zero, item’s texture is below. If not, take texture from this item’s ID
10
1Item ID
4“ANIM” or “CCB” size in bytes
4‘ANIM’ or ‘CCB’ identifier string
various“ANIM” or ‘CCB’ data

I) SAVEFILE STRUCTURE
Savefile size is 356 bytes. I tried a lot of tests and now I know some bytes are used for. Some bytes have secondary meaning, may be character dependent. I made a table with all investigated data. Each cell is a byte. Number of columns and rows are equal to HEX-editor in GameGuru.

Savegame slot # minus 1
Difficulty 0 - 2 Level#
Character Name xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx Character specs. Str, Int, Wis, Dex, Con xxx xxx
xxx xxx xxx Health current
Health Max Fighter at level #. Text description on the loading screen Arrows quantity Food. 0xFF max
Character level Experience. 0x7F FF FF FF max xxx xxx xxx
Experience (spells?). 0x7F FF FF FF max (?) xxx xxx xxx
Level completition (time). 0 = infinite. Max - 0xFF (10 seconds)
Hands and wearable. Non-predictable??? xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx
xxx Backpack ???? (low priority with non-predictable items in) xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx
Armor, Burning hands, Magic missile Melf's Acid arrow, Improved identify, Ray of enfeeblement Fireball, Fly, Lightning bolt Fear, Ice storm, Stoneskin
Cone of cold, Feeblemind, Hold monster Death fog, Disintegrate, True Seeing Acid storm Abi-Dolzin's Horrid Wilting Meteor Swarm
(All red in these bytes nearby are Ability Powerups also) Armor Storm Giant Strength Hill Giant Strength Fly True Seeing Speed Invulnerability
0-0xFF Invisibility Protection from Acid Protection from Cold Protection from Electricity Protection from Fire Protection from Gas Protection from Magic Protection from Poison
Heroism Super Heroism Artefacts
Left hand (4 cells up) Left hand (3 cells up) Left hand (2 cells up) Left hand (1 cell up) Left hand (active)
Right hand (4 cells up) Right hand (3 cells up) Right hand (2 cells up) Right hand (1 cell up) Right hand (active) Body Hands Ring #1
Ring #2 Boots Amulet Head Backpack items IDs (high priority) Upper left corner xxx xxx xxx
Lowest left corner Second column. Upper xxx xxx xxx xxx 3rd column upper xxx
xxx xxx xxx 4th column upper xxx xxx xxx xxx
Left hand item charges quantity *2 (4 up) Left hand item charges quantity *2 (3 up) Left hand item charges quantity *2 (2 up) Left hand item charges quantity *2 (1 up) Left hand item charges quantity *2 (Lighting orb) (Bottom, active) Right hand item charges quantity *2 (4 up) Right hand item charges quantity *2 (3 up) Right hand item charges quantity *2 (2 up)
Right hand item charges quantity *2 (1 up) Right hand item charges quantity *2 (Lighting orb) (Bottom, active) If ==1, character is wearing it. Armor Gauntlets Ring low Ring upper Boots on the Character (==1) Amulet
Helm Backpack items charges xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx Wearable. Additional specs, weight, etc… xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx Backpack. Additional specs for items. 40 == normal item. 43 == item with specs +3 xxx
xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx Zero Zero Not a byte Not a byte Not a byte Not a byte

Bytes for pells for Fighter/Mage occupies these bytes: Armor, Burning hands, Magic missile Melf's Acid arrow, Improved identify, Ray of enfeeblement Fireball, Fly, Lightning bolt Fear, Ice storm, Stoneskin
Cone of cold, Feeblemind, Hold monster Death fog, Disintegrate, True Seeing Acid storm Abi-Dolzin's Horrid Wilting Meteor Swarm

Artefacts byte and its possible values with marked artefacts colors avalable in inventory:

Artefacts colorsValue (HEX)
Red availableGreen availableBlue available0xF, 0xE
Green availableBlue available0xD, 0xC
Red available Blue available0xB, 0xA
Blue available0x9, 0x8
Red availableGreen available 0x7, 0x6
Green available 0x5, 0x4
Red available 0x3, 0x2
documentation/file_formats/games/deathkeep.txt · Last modified: 2024/04/15 13:56 by vas.1987