Each DGN file fully describes a level of the dungeon.
The entrance of the dungeon shown during the title sequence is stored in LEV00.DGN (not playable). The automap for this level (SMAP00.BIN) is in fact an unused duplicate of the automap for LEV02.
The other DGN files (LEV01.DGN to LEV15.DGN) are the actual dungeon levels. LEV1.DGN is the hall of champions where the game starts.
The files are structured in 800h = 2048 bytes blocks.
There is one block for the header followed by 3 structures of variable size.
In the header, the offsets and sizes of the 3 structures are not specified in bytes but in numbers of blocks.
At the end of each structure, 00h bytes are padded until the next 2048 bytes block boundary. A DGN file looks like:
Offset Description
0000 byte 01
0001 byte Level number (value is 1 for both levels 0 and 1)
0002 00 24 01 01 01 00 00 00 00 00
000C word Offset of Structure1 (in number of 800h blocks)
000E word Size of Structure1 (in number of 800h blocks)
0010 dword Size of Structure1 useful data in bytes (without the padding bytes)
0014 word Offset of Structure2 (in number of 800h blocks)
0016 word Size of Structure2 (in number of 800h blocks)
0018 dword Size of Structure2 useful data in bytes (without the padding bytes)
001C word Offset of Structure3 (in number of 800h blocks)
001E word Size of Structure3 (in number of 800h blocks)
0020 dword Size of Structure3 useful data in bytes (without the padding bytes)
0024 Padding until end of 2048 bytes block
Offset Description
0000 00 50 40 40 00 00 00 00 50h = 80 may be the size of each tile (collision data ranges from -40 to +39). 40 40 may be the size of map (64x64 cells), same value for all maps
0008 byte Unknown.
0009 byte Ceiling texture index 1. Each tile in the dungeon contains a 2-bit index to select one ceiling texture here (or 0 for no texture at all).
000A byte Ceiling texture index 2
000B byte Ceiling texture index 3
000C dword Number of entries in Structure1A
0010 dword Offset of Structure1A 00000038h
0014 dword Offset of Structure1B. Structure 1B is always 8000h bytes.
0018 dword Offset of Structure1C (= Offset of Structure1B + 8000h)
001C dword Offset of Structure1G May be 00000000h in which case there is no Structure1G
0020 dword 00000000h
0024 dword Offset of Structure1D
0028 dword 00000000h
002C dword 00000000h
0030 dword Offset of Structure1E
0034 dword Offset of Structure1F
0038 Structure1A Models
24 bytes entries. The number of entries is specified in the Structure1 header
0000 byte ? 00h, 01h or 02h (in LEV1.DGN, only model #34 has 01h here, and it is the talking head apparition at dungeon entrance)
0001 byte Index of 3D model in Structure3.
0002 byte Model rotation along Z-axis (value range 0 to 255). Add 64 to rotate 90°. 00: None 40: 1/4 turn 80: 1/2 turn C0: 3/4 turn
0003 byte 00h or 80h
0004 byte 00h or FFh
0005 byte 00h, 01h, FEh, FFh
0006 byte 00h, 40h, 60h, 80, A0h, C0h
0007 byte Always 00h
0008 byte Always 00h
0009 byte Always 00h, 01h, 02h, 03h
000A byte 00h, 08h, 28h, 80h, 90h, 98h, C0h, E0h
000B byte Always 00h
000C byte 00h or FFh
000D byte 00h, 01h, 02h, FEh, FFh
000E byte 00h, 20h, 40h, 60h, 80, A0h, C0h
000F byte Always 00h
0010 dword Always FFFFFFFFh
0014 dword Always 00000000h
xxxx Structure1B Grid
Size is always 8000h = 32768 bytes
This represents the level map as a grid of 64x64 cells with 8 bytes per cell.
Note: The current version of the script decodes this data as an image to visualize the data.
Resize the produced images from 512x64 pixels to 64x64 pixels with any image editor.
The result for LEV1.DGN clearly looks like the map of the hall of champions (remember there
are 2 hidden areas that do not appear on the automap).
word:
Bits15-14: Floor texture trigonometric rotation (00: No rotation, 01: 90°, 10: 180°, 11: 270°)
Bit13: Flip floor texture Y
Bit12: Flip floor texture X If bit4 = 1, then Bits3-0 = 0001
Bits11-7: 5 bits value = Index of floor texture in Structure2. The specified floor texture is always drawn, even if there is a 3D model on the tile. A fully transparent texture is used when the floor should not be visible.
Bit6: Always 0
Bit5-4: Tile slope. This applies to both the floor and ceiling textures which are always parallel and separated by a fixed height
00: Tile is flat, height in Byte3.
01: Tile is flat (Value never used)
10: Tile is a slope on X axis, source height is height of tile at X+1 destination height in Byte3. Only set on 2 tiles for stairs to level 2 on LEV1.DGN
11: Tile is a slope on Y axis, source height is height of tile at Y+1, destination height in Byte3. Only set for 3 tiles for small stairs between rooms on LEV1.DGN
Bit3: Always 0 in LEV0, 1 & 2. Set to 1 on some tiles in LEV3 (Room where floor height changes in game when 9 buttons are pressed, and a few other tiles) and other levels.
Bit2-1: Ceiling texture:
00: no texture for ceiling
01, 10, 11: index of the byte containing the ceiling texture index in the dungeon header. Texture is drawn with X and Y coordinates swapped.
Bit0: 0: There is no door on this tile
1: There is at least one door on this tile. (1 or more entries in Structure1E refer to this tile)
Byte2: ??
Value 00: Regular
Value 01: Floor and ceiling textures not shown, ignores 3D model reference as index in Structure1A
Value 02: Floor and ceiling textures not shown, ignores 3D model reference as index in Structure1A
Value 03: Floor and ceiling textures not shown, ignores 3D model reference as index in Structure1A
Value 08: Regular
Value 0B: Floor and ceiling textures not shown, ignores 3D model reference as index in Structure1A
Value 10: Regular
Value 18: Regular
Value 20: Regular
Value 28: Regular
Value 30: Regular
Value 38: Regular
Value 40: Regular
Value 48: Regular
Byte3: Floor height. Signed byte.
Height: 10h = 32768 units. 32768/65536 = 0.5
1 signed unit here = 2048 units in 3D coordinates = 1/32 = 0,03125
Byte4: Bit7-6: 00: Field XXY is not used
01: Field XXY contains a reference to another tile where a 3D model is present and overflows on this tile
10: ? Field XXY contains the index in Structure1A of a 3D model present on the tile
11: ? Field XXY contains the index in Structure1A of a 3D model present on the tile
Bit 5: ??
Bit 4: 0: 3D model is visible by default
1: 3D model is invisible by default (set only for Grey Lord in LEV1.DGN)
Bits3-0: Only values 0, 1, 2, 3
1: Only used on level 9, 10, 11 and 14
2: Only used for 79 tiles on level 15
3: floor texture is an animated texture. Only used for 41 tiles on level 8 using animation #0.
Bytes5-6-7: XX YY ZZ. Two 12 bit values
XXY: 3D model on tile
If Bit7-6 of Byte4 = 00 then XXY = 000h (unused)
If Bit7-6 of Byte4 = 01 then XXY = Index in Structure1B of a tile where a 3D model (y * 64 + x) overflows on this tile
If Bit7 of Byte4 = 1 then XXY = Index in Structure1A of a 3D model present on the tile
YZZ: Tile collision
000: You may move freely on the tile ('Corridor')
n: Ordinal of Tile collision descriptor entry in Structure1C which specifies margins, how much and where you can enter the tile
FFF: You cannot enter the tile ('Wall')
xxxx Structure1C Tile collision descriptors
Each tile is considered to contain 80x80 parts. Each collision descriptor defines which parts of the tile may / may not be entered by the player.
0000 byte Number of collision descriptors + 1. For example, 15h = 21 means there are 20 collision descriptors.
0001 00 00 00
0004 Collision descriptors, 4 bytes each. If Byte3=80h then the collision descriptor defines a circle else it defines a rectangle.
Each byte is signed and may have values ranging between -40 and +40 (except last byte which can also have special value 80h).
Square:
Byte0: X1 (offset from center of tile)
Byte1: Y1 (offset from center of tile)
Byte2: X2 (offset from center of tile)
Byte3: Y2 (offset from center of tile)
Circle:
Byte0: X of center of circle (offset from center of tile)
Byte1: Y of center of circle (offset from center of tile)
Byte2: Radius
Byte3: 80h
Example:
Hexadecimal byte values: ECh ECh 27h 27h
Decimal byte values: -20, -20, 39, 39
The large square represents the tile (80x80).
The small square represents the parts that the player may not enter.
The remaining areas (the bands on the top and left) represent the parts that the player may enter.
+-------------------+
| |
| (X1,Y1=-20,-20) |
| +---------------
| | |
| | + Center |
| | |
| | |
| | |
| | |
+----+--------------+ <- (X2,Y2 = 39,39)
xxxx Structure1D
0000 128 bytes with value 00h
xxxx Structure1E Doors
16 bytes entries
First byte of last entry is FFh
0000 byte Y Coordinate in 64x64 grid (Y is before X)
0001 byte X Coordinate in 64x64 grid
0002 byte ? Flags? 00h, 01h, 02h, 08h, 09h, 0Ah, 12h, 1Ah
Bit 0: Mirror door model (for double doors, one has 0, the other has 1)
Bit 1: ?
Bit 3: ?
Bit 4: ?
0003 byte Bit7: Orientation. 0: x axis, 1: y axis
Bits 0-6. Door index. Increasing values starting from 0.
0004 byte Index of 3D model in Structure3.
0005 byte ? Width of door ?
Always 28h = 40 for all double doors
50h = 80: vertical doors? (true for LEV1.DGN)
70h = 112: horizontal doors? (none in LEV1.DGN)
0006 byte FFh: door is not part of a double door or door is the second door of a double door
Other values: Door is part of a double door and is the first door. The value is the door index of the second door
0007 byte FFh: door is not part of a double door
Other value: Door index of first door for double door (on the same tile). For the first door, this the same door index as in byte3. For the second door, this is the door index of the other door.
0008 byte Initial door state: 00h (Closed) or 01h (Open)
0009 byte Always 00h
000A byte Always 00h
000B byte Always 00h
000C byte Always FFh
000D byte Door type. 04h: movable wall
000E byte Always FFh
000F byte Always FFh
xxxx Structure1F
0000 word Index of first texture to use for wall sensors (door buttons, wall texts, others?)
0002 word Unknown2. Index of first Structure3 to use for wall sensors/decorations?
0004 word Number of entries in Structure1Fa (Items on floor)
0006 word Number of entries in Structure1Fb (Floor decorations)
0008 word Number of entries in Structure1Fc (Floor sensors)
000A word Number of entries in Structure1Fd (Alcoves)
000C word Number of entries in Structure1Fe (Wall decorations)
000E word Number of entries in Structure1Ff (Wall sensors)
0010 Structure1Fa Items on floor (items in alcoves are listed with Alcoves). 8 bytes per entry
These entries define items present in the dungeon.
0000 byte Always 10h
0001 byte X Coordinate in 64x64 grid
0002 byte Y Coordinate in 64x64 grid
0003 byte Location on tile
0: North West
1: North East
2: South East
3: South West
4: Center
0004 byte Item number (see ITEM.IBS for item descriptors)
0005 byte Item attribute1. Set for some magic items.
0006 byte Always 00h
0007 byte Item attribute2. Charges.
In LEV1.DGN, Item 42h (Torch) has Byte7=0F (charges)
and item 9Eh (Waterskin) has Byte7 = 03 (full).
Example: Structure1Fa of LEV1.DGN - Hall of champions
10 20 10 04 8E 00 00 00 Apple
10 1E 0D 04 90 00 00 00 Bread
10 23 0C 03 42 00 00 0F Torch
10 1F 0B 02 9E 00 00 03 Waterskin
10 23 0D 03 8F 00 00 00 Corn
10 22 0F 04 90 00 00 00 Bread
10 22 11 04 91 00 00 00 Cheese
10 24 11 04 8E 00 00 00 Apple
| | | | | | | |
| | | | | | | +-- Item attribute2. Charges.
| | | | | | +----- Always 00h
| | | | | +-------- Item attribute1. Set for some magic items.
| | | | +----------- Item number (see ITEM.IBS)
| | | +-------------- Location on tile (0=North West, 1=North East, 2=South East, 3=South West, 4=Center)
| | +----------------- Y Coordinate in 64x64 grid
| +-------------------- X Coordinate in 64x64 grid
+----------------------- Always 10h
xxxx Structure1Fb Floor decorations. 12 bytes per entry
These entries define 3D objects to add in the dungeon.
0000 byte Always 11h
0001 byte X Coordinate in 64x64 grid
0002 byte Y Coordinate in 64x64 grid
0003 byte X position from center of cell (signed byte, values seen ranging from -30 to +30)
0004 byte Y position from center of cell (signed byte, values seen ranging from -30 to +30)
0005 byte Index of 3D model in Structure3.
0006 byte Rotation along Z-axis (value range 0 to 255). Add 64 to rotate 90°.
0007 byte Floor decoration type. 03h: model. 82h: texture (only used for two candlesticks on dining table on level 8).
0008 byte Texture width
0009 byte Texture height
000A byte ?
000B byte ?
In LEV1.DGN, coordinates point to all champion mirrors + 8 columns in
corners of the first two rooms at entrance. For the champions, this is
the "ice" in front of their portraits.
xxxx Structure1Fc Floor sensors. 16 bytes per entry
0000 byte Always 12h
0001 byte X Coordinate in 64x64 grid
0002 byte Y Coordinate in 64x64 grid
0003 byte Always 00h
0004 byte Always 00h
0005 byte Index of 3D model in Structure3 for 'disabled' state or FFh if no model. (27h used for pressure plate in LEV1)
0006 byte Index of 3D model in Structure3 for 'enabled' state or FFh if no model. (28h used for pressure plate in LEV1)
0007 byte ?
0008 byte Always 00h
0009 byte ?
000A byte Width of active area on tile (0..80)
000B byte Height of active area on tile (0..80)
000C byte Unknown. Sensor type ? Sensor effect ?
000D byte Destination X coordinate in 64x64 grid
000E byte Destination Y coordinate in 64x64 grid
000F byte Unknown. Destination orientation?
In LEV1.DGN, 4 floor sensors:
- Start animation of character face at level entrance. Uses texture #0 (texture is transparent but visible if modified).
- Start music ?. Uses texture #0
- Pressure plate on floor to open door to exit. Uses texture #0, visible under the pressure plate
- Stairs down to level 2. Uses texture #0
xxxx Structure1Fd Alcoves. 12 bytes per entry
0000 byte Always 20h
0001 byte Face number in model where item (if present) is drawn
0002 word Index of StructureA associated with alcove
0004 byte Rotation on Y axis (seems ignored as items are always drawn facing the player)
0005 byte Horizontal position on face. 00: decoration is on the leftmost side of the face FF: item is at the rightmost side of the face
0006 byte Vertical position on face. 00: decoration is at the topmost side of the face FF: item is at the very bottom of the face
0007 byte Index of item in alcove (FF means alcove is empty). Example: in level 2, scroll #CF in alcove near entrance, guarded by mummy
0008
0009
000A
000B byte Always 00
LEV01.DGN: Only 1 entry (Vi altar near level exit)
xxxx Structure1Fe Wall decorations. 12 bytes per entry
0000 byte Always 21h
0001 byte Face number in model where decoration is attached
0002 word Index of Structure1A associated with wall decoration
0004 byte Rotation on Y axis
0005 byte Horizontal position on face. 00: decoration is on the leftmost side of the face FF: decoration is at the rightmost side of the face
0006 byte Vertical position on face. 00: decoration is at the topmost side of the face FF: decoration is at the very bottom of the face
0007 byte Aspect. Depending on the decoration type, this may be a model index (in Structure3) or a texture delta index.
In LEV1.DGN this is used only with models for 40 projectors and 1 stairs handrail.
0008 byte Decoration type
0009 byte Texture width
000A byte Texture height
000B byte Always 00
xxxx Structure1Ff Wall sensors. 16 bytes per entry
0000 byte Always 22h
0001 byte Face number in model where sensor is attached
0002 word Index of Structure1A associated with wall sensor
0004 Rotation on Y axis
0005 Horizontal position on face. 00: decoration is on the leftmost side of the face FF: decoration is at the rightmost side of the face
0006 Vertical position on face. 00: decoration is at the topmost side of the face FF: decoration is at the very bottom of the face
0007 Aspect when sensor is disabled. Depending on the sensor type, this may be a model index (in Structure3) or a texture delta index (must be added to Structure1F header value 'Index of first texture to use for wall sensors' to get the actual texture index)
In LEV1.DGN, Byte7 contains Structure3 entry indices
for Champion portraits (2C to 3F) (entries 14 to 33)
Byte7=FF : Wall text. Text index is encoded in Byte13 (encoding unknown)
Byte13=01h => String #3 in RLOWFIX.BIN TEXT5
Byte13=22h => String #84 in RLOWFIX.BIN TEXT5
Byte13=23h => String #83 in RLOWFIX.BIN TEXT5
Byte13=24h => String #82 in RLOWFIX.BIN TEXT5
0008 Aspect when sensor is enabled. Depending on the sensor type, this may be a model index or a texture delta index.
0009 Sensor type
10, 13: Door button
Byte7/8: Delta index of texture for disabled/enabled sensor. FF means no texture
60, 63 (Champions and other):
Byte7/8: Index of Model for disabled/enabled sensor. FF means no model
8B: Wall inscription
Byte7 = FF. Byte8: Delta index of texture for wall inscription
000A Texture width
000B Texture height
000C Unknown. Probably an item number to trigger the sensor (for example: specifies item indices of keys for locks)
000D Unknown
000E Values 00h ,80h ,81h, 82h
000F Always 00h
0000 word
xxxx Structure1G: Animated textures
Note: some DGN files do not have any data in this section.
In that case, the offset of Structure1G is set to 0 in the Structure1 header.
Structure1G has the same format as the last part of ITEM.IBS. This is
animation data declaring sequences of textures.
LEV01.DGN
There is only one animation declared which is used for the flame
behind the face of the character talking at the entrance of the dungeon and
also behind champion portraits.
Texture indices start at 14Ch = 332 (There are 332 images in ITEM.IBS).
For example 156h = 342 corresponds to texture #10 (the 11th texture in the DGN file).
LEV01.DGN
There are animations for water fountains (textures 26 & 27, and 28 & 29), teleporters (23 to 25), others...
LEV15.DGN
00 09 Number of animated textures (including last entry starting with FFh). 9 entries of 8 bytes each.
00 4C Offset of animation data = Number of animated textures * 8 + 4 (this header) = 76
First part - Animated texture descriptors, 8 bytes each
byte0: Animated texture ID
byte1: ? Always 00.
word1: ? Always 00 01.
word2: Index of first image in animation sequence (also found in second part as first word of each entry data)
Image indices start at 0x14C = 332, right after all images found in ITEM.IBS (contains images #0 to #331)
word3: index of first dword of the record in the second part
00 00 00 01 01 56 00 00
01 00 00 01 01 53 00 04
02 00 00 01 01 58 00 08
08 00 00 01 01 5B 00 0C
09 00 00 01 01 5D 00 10
0A 00 00 01 01 62 00 14
0B 00 00 01 01 65 00 19
0C 00 00 01 01 66 00 1E
FF 00 00 00 00 00 00 00
Second part - Animation data: one list of 4 bytes entries for each animated texture. Ends with a FF FF xx xx
Each entry consists of two words: Instruction / parameters
Instruction may be:
Image index. Parameters define duration + flags ?
FF FE. Goto another animation step. Parameter is a signed integer pointing to the next step to run
FF FF. Mark end of animation sequence. Parameters are ignored?
01 56 80 06
01 57 80 06
FF FE FF FE Goto -2 = go back to beginning of animation sequence
FF FF 00 00
01 53 80 04
01 58 80 04
FF FE FF FE
FF FF 00 00
01 58 80 04
01 53 80 04
FF FE FF FE
FF FF 00 00
01 5B C0 06
01 5C C0 06
FF FE FF FE
FF FF 40 00
01 5D 80 06
01 5E 80 06
FF FE FF FE
FF FF 00 00
01 62 C0 08
01 61 C0 08
01 60 C0 08
FF FE FF FD
FF FF 40 00
01 65 C0 08
01 64 C0 08
01 63 C0 08
FF FE FF FD Goto -3 = go back to beginning of animation sequence
FF FF 40 00
01 66 C0 06
01 67 C0 06
01 68 C0 06
FF FE FF FD
FF FF 40 00
Structure2 contains a list of texture descriptors. 20 bytes per texture descriptor. These descriptors use the same format as the ones used in ITEM.IBS to declare item on floor images.
The last descriptor in the list starts with FFFFh and does not declare a texture itself.
After the texture descriptors is raw data containing color palettes and images. The offsets of each palette and image are defined in the descriptors. These offsets are relative to the start of Structure2.
A texture descriptor has the following format:
Offset Description
0000 word Image ID
0002 word Encoding.
0008h: 4 bits per pixel.
0028h: 2 bytes per pixel (1BBBBBGG GGGRRRRR). Color is encoded like in a color palette entry.
The last entry (Image ID = FFFFh) contain unknown 'random' values.
0004 word Palette ID. The meaning of this value depends on the value of the last dword in
the texture descriptor which is the Palette offset:
If Palette offset <> 0, associates this ID with the palette at speficied offset
If Palette offset = 0, refers to a previously associated Palette ID
0006 word Image width
0008 word Image height
000A word Unknown.
000C dword Image offset
0010 dword Palette offset
In the raw data following the descriptors, color palettes have 16 colors (32 bytes per palette).
Images are stored in 4 bits per pixel. The first pixel is stored in the 4 most significant bits. Pixels are stored from left to right and then top to bottom.
Each model is a 3D object that can be placed in the dungeon.
Offset Description
0000 dword Number of entries
0004 Offsets (based on offset of Structure3). One offset (a dword) for each entry
xxxx Entry data one after the other
Format of a Structure3 entry:
Each entry has a header of 40 bytes following by three structures
Offset Description
0000 dword Unknown. Flags ? Often 00000100h
0004 word Number of 12 bytes entries in Structure3a
0006 word Number of 12 bytes entries in Structure3b & Structure3c
0008 dword offset of structure 3a based on offset of Structure3
000C dword Always 0
0010 dword offset of structure 3b based on offset of Structure3
0014 dword offset of structure 3c based on offset of Structure3
0018 dword Often 0 but not always
001C dword Always 0
0020 dword Always 0
0024 dword Always 0
xxxx Structure3a Vertices. 12 bytes per vertex. A vertex:
0000 dword X coordinate (signed int32, must be divided by 65536)
0004 dword Y coordinate (signed int32, must be divided by 65536)
0008 dword Z coordinate (signed int32, must be divided by 65536)
xxxx Structure3b Faces. 12 bytes per face. A face:
0000 word Index of 1st Vertex (in associated Structure3a)
0002 word Index of 2nd Vertex
0004 word Index of 3rd Vertex
0006 word Index of 4th Vertex (If 3rd=4th face is a Triangle, otherwise face is a Quad)
0008 byte Flags
bit7: Always set to 0. Game may fail to load if set (tested with one-off colors)
bit6: 0: Fill face with one-off color. 1: Fill face with texture (normal or animated)
bit5: Unknown
bit4: Unknown
bit3-1: Always set to 0.
bit0: Draw texture with 'Mesh' transparency: 0: MeshOff. 1: MeshOn (grid of alternating pixels, 1 transparent, one opaque)
LEV1.DGN: Used only on model 34 (face of talking man), 41 (ice 1), 42 (ice 2)
0009 byte Flags
bit7: Unknown
bit6: Texture color 0 tranparency: 0: Transparent. 1: Opaque
bit5: if one-off color: Light level 0: Dark. 1:Light
bit4: if one-off color: face not rendered if set to 1
bit3: Unknown
bit2-0: Always set to 0.
000A word (=Byte10-11) Face fill
Byte10-11: Face fill: Texture index, Animated texture ID or Single Color
00xx: xx=Texture index Byte8-9 = 4088h
40C8h
40E8h
5088h
50C8h
50E8h
51C8h
6088h
60C8h
60E8h
6188h
61C8h
08xx: xx=Animated texture ID (values do not start at 0) Byte8-9 = 40B8h ??? Only animated flame behind champion portaits
(ID is first byte of entry in Structure1G) 40F8h
41F8h
50F8h
51F8h
60B8h
60F8h
61B8h
61F8h
8xxx: One-off color Byte8-9 = 00E8h
8000: 0, 0, 0 Black 01E8h
8C22: 2, 1, 3 2000h ??? Only used with texture 0!
A108: 8, 8, 8 Dark Grey 20E8h
FFFF: 31, 31, 31 White 21E8h
8821: 2, 1, 1 |||| Bits used Values found
|||+-- Bit 3 0 8
||+--- Bit 0, 1, 2, 3 0 8 B C E F
|+---- Bit 0 0 1
+----- Bit 0, 1, 2 0 2 4 5 6
(1BBBBBGG GGGRRRRR). Color is encoded like in a color palette entry.
xxxx Structure3c Normals. 12 bytes per face
0000 dword X coordinate (signed int32, must be divided by 65536)
0004 dword Y coordinate (signed int32, must be divided by 65536)
0008 dword Z coordinate (signed int32, must be divided by 65536)
One entry per face. the length of the normal vector is always 1:
Sqrt(X² + Y² + Z²) = 1
Structure3 in LEV01.DGN:
#00 Brick wall (both sides) + ceiling
#01 Incomplete white model (not textured)
#02 Brick archway + ceiling
#03 Four alcoves for champion portraits
#04 Dark wall (1 side only) + ceiling
#05 Dark inside corner + ceiling
#06 Dark pillar + ceiling
#07 Dungeon wall + ceiling very Dark
#08 Dungeon wall + ceiling Dark
#09 Entrance room
#10 Incomplete green model (not textured)
#11 Inside Brick corner + ceiling
#12 Outside Brick corner
#13 Outside Brick corner + ceiling
#14 Walls + cailing + archway brick
#15 Single archway brick
#16 Dungeon wall + ceiling, Side 1 only, brick
#17 Ceiling (circle)
#18 Ceiling
#19 Large stairs (end of level)
#20 Small walls around a door
#21 Simple Wall
#22 Two opposite walls
#23 Simple Wall with border
#24 Simple Wall 2 Side 1
#25 Simple Wall 2 Side 2
#26 Small stairs between rooms
#27 Large Walls around a door
#28 Ice in front of champion + Wall + Ceiling
#29 Double dark archway
#30 Two opposite alcoves for champion portraits
#31 Vi altar
#32 Dungeon wall + ceiling, Side 1 only, blue
#33 Dungeon wall + ceiling, Side 2 only, blue
#34 Head at dungeon entrance + animated flame
#35 Dungeon Entrance door Left
#36 Stairs handrail
#37 Projector (on the walls on each side of each champion)
#38 Wooden Door with window
#39 Pressure plate (not pressed)
#40 Pressure plate (pressed)
#41 Ice in front of champion portraits 1
#42 Ice in front of champion portraits 2
#43 Wooden door without window
#44 Champion portrait + animated flame. Texture 67h
#45 Champion portrait + animated flame. Texture 4Ch
#46 Champion portrait + animated flame. Texture 68h
#47 Champion portrait + animated flame. Texture 69h
#48 Champion portrait + animated flame. Texture 6Ah
#49 Champion portrait + animated flame. Texture 6Bh
#50 Champion portrait + animated flame. Texture 6Ch
#51 Champion portrait + animated flame. Texture 6Dh (24,20)?. Champion Texture is flipped horizontally
#52 Champion portrait + animated flame. Texture 6Eh
#53 Champion portrait + animated flame. Texture 6Fh
#54 Champion portrait + animated flame. Texture 70h (26,19). Champion Texture is flipped horizontally
#55 Champion portrait + animated flame. Texture 71h
#56 Champion portrait + animated flame. Texture 72h (26,23)
#57 Champion portrait + animated flame. Texture 73h (28,21). Champion Texture is flipped horizontally
#58 Champion portrait + animated flame. Texture 74h
#59 Champion portrait + animated flame. Texture 75h
#60 Champion portrait + animated flame. Texture 76h
#61 Champion portrait + animated flame. Texture 77h
#62 Champion portrait + animated flame. Texture 78h
#63 Champion portrait + animated flame. Texture 79h On tile (x,y)=(32,32)
#64 Column in first two rooms of the level