This page hosts a formal specification of .wad file format of id Tech 1 using Kaitai Struct. This specification can be automatically translated into a variety of programming languages to get a parsing library.
digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__doom_wad {
label="DoomWad";
graph[style=dotted];
doom_wad__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="magic_pos">0</TD><TD PORT="magic_size">4</TD><TD>str(ASCII)</TD><TD PORT="magic_type">magic</TD></TR>
<TR><TD PORT="num_index_entries_pos">4</TD><TD PORT="num_index_entries_size">4</TD><TD>s4le</TD><TD PORT="num_index_entries_type">num_index_entries</TD></TR>
<TR><TD PORT="index_offset_pos">8</TD><TD PORT="index_offset_size">4</TD><TD>s4le</TD><TD PORT="index_offset_type">index_offset</TD></TR>
</TABLE>>];
doom_wad__inst__index [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="index_pos">index_offset</TD><TD PORT="index_size">16</TD><TD>IndexEntry</TD><TD PORT="index_type">index</TD></TR>
<TR><TD COLSPAN="4" PORT="index__repeat">repeat num_index_entries times</TD></TR>
</TABLE>>];
subgraph cluster__sectors {
label="DoomWad::Sectors";
graph[style=dotted];
sectors__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="entries_pos">0</TD><TD PORT="entries_size">26</TD><TD>Sector</TD><TD PORT="entries_type">entries</TD></TR>
<TR><TD COLSPAN="4" PORT="entries__repeat">repeat to end of stream</TD></TR>
</TABLE>>];
}
subgraph cluster__vertex {
label="DoomWad::Vertex";
graph[style=dotted];
vertex__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="x_pos">0</TD><TD PORT="x_size">2</TD><TD>s2le</TD><TD PORT="x_type">x</TD></TR>
<TR><TD PORT="y_pos">2</TD><TD PORT="y_size">2</TD><TD>s2le</TD><TD PORT="y_type">y</TD></TR>
</TABLE>>];
}
subgraph cluster__texture12 {
label="DoomWad::Texture12";
graph[style=dotted];
texture12__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="num_textures_pos">0</TD><TD PORT="num_textures_size">4</TD><TD>s4le</TD><TD PORT="num_textures_type">num_textures</TD></TR>
<TR><TD PORT="textures_pos">4</TD><TD PORT="textures_size">4</TD><TD>TextureIndex</TD><TD PORT="textures_type">textures</TD></TR>
<TR><TD COLSPAN="4" PORT="textures__repeat">repeat num_textures times</TD></TR>
</TABLE>>];
subgraph cluster__texture_index {
label="DoomWad::Texture12::TextureIndex";
graph[style=dotted];
texture_index__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="offset_pos">0</TD><TD PORT="offset_size">4</TD><TD>s4le</TD><TD PORT="offset_type">offset</TD></TR>
</TABLE>>];
texture_index__inst__body [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="body_pos">offset</TD><TD PORT="body_size">...</TD><TD>TextureBody</TD><TD PORT="body_type">body</TD></TR>
</TABLE>>];
}
subgraph cluster__texture_body {
label="DoomWad::Texture12::TextureBody";
graph[style=dotted];
texture_body__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="name_pos">0</TD><TD PORT="name_size">8</TD><TD>str(ASCII)</TD><TD PORT="name_type">name</TD></TR>
<TR><TD PORT="masked_pos">8</TD><TD PORT="masked_size">4</TD><TD>u4le</TD><TD PORT="masked_type">masked</TD></TR>
<TR><TD PORT="width_pos">12</TD><TD PORT="width_size">2</TD><TD>u2le</TD><TD PORT="width_type">width</TD></TR>
<TR><TD PORT="height_pos">14</TD><TD PORT="height_size">2</TD><TD>u2le</TD><TD PORT="height_type">height</TD></TR>
<TR><TD PORT="column_directory_pos">16</TD><TD PORT="column_directory_size">4</TD><TD>u4le</TD><TD PORT="column_directory_type">column_directory</TD></TR>
<TR><TD PORT="num_patches_pos">20</TD><TD PORT="num_patches_size">2</TD><TD>u2le</TD><TD PORT="num_patches_type">num_patches</TD></TR>
<TR><TD PORT="patches_pos">22</TD><TD PORT="patches_size">10</TD><TD>Patch</TD><TD PORT="patches_type">patches</TD></TR>
<TR><TD COLSPAN="4" PORT="patches__repeat">repeat num_patches times</TD></TR>
</TABLE>>];
}
subgraph cluster__patch {
label="DoomWad::Texture12::Patch";
graph[style=dotted];
patch__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="origin_x_pos">0</TD><TD PORT="origin_x_size">2</TD><TD>s2le</TD><TD PORT="origin_x_type">origin_x</TD></TR>
<TR><TD PORT="origin_y_pos">2</TD><TD PORT="origin_y_size">2</TD><TD>s2le</TD><TD PORT="origin_y_type">origin_y</TD></TR>
<TR><TD PORT="patch_id_pos">4</TD><TD PORT="patch_id_size">2</TD><TD>u2le</TD><TD PORT="patch_id_type">patch_id</TD></TR>
<TR><TD PORT="step_dir_pos">6</TD><TD PORT="step_dir_size">2</TD><TD>u2le</TD><TD PORT="step_dir_type">step_dir</TD></TR>
<TR><TD PORT="colormap_pos">8</TD><TD PORT="colormap_size">2</TD><TD>u2le</TD><TD PORT="colormap_type">colormap</TD></TR>
</TABLE>>];
}
}
subgraph cluster__linedef {
label="DoomWad::Linedef";
graph[style=dotted];
linedef__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="vertex_start_idx_pos">0</TD><TD PORT="vertex_start_idx_size">2</TD><TD>u2le</TD><TD PORT="vertex_start_idx_type">vertex_start_idx</TD></TR>
<TR><TD PORT="vertex_end_idx_pos">2</TD><TD PORT="vertex_end_idx_size">2</TD><TD>u2le</TD><TD PORT="vertex_end_idx_type">vertex_end_idx</TD></TR>
<TR><TD PORT="flags_pos">4</TD><TD PORT="flags_size">2</TD><TD>u2le</TD><TD PORT="flags_type">flags</TD></TR>
<TR><TD PORT="line_type_pos">6</TD><TD PORT="line_type_size">2</TD><TD>u2le</TD><TD PORT="line_type_type">line_type</TD></TR>
<TR><TD PORT="sector_tag_pos">8</TD><TD PORT="sector_tag_size">2</TD><TD>u2le</TD><TD PORT="sector_tag_type">sector_tag</TD></TR>
<TR><TD PORT="sidedef_right_idx_pos">10</TD><TD PORT="sidedef_right_idx_size">2</TD><TD>u2le</TD><TD PORT="sidedef_right_idx_type">sidedef_right_idx</TD></TR>
<TR><TD PORT="sidedef_left_idx_pos">12</TD><TD PORT="sidedef_left_idx_size">2</TD><TD>u2le</TD><TD PORT="sidedef_left_idx_type">sidedef_left_idx</TD></TR>
</TABLE>>];
}
subgraph cluster__pnames {
label="DoomWad::Pnames";
graph[style=dotted];
pnames__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="num_patches_pos">0</TD><TD PORT="num_patches_size">4</TD><TD>u4le</TD><TD PORT="num_patches_type">num_patches</TD></TR>
<TR><TD PORT="names_pos">4</TD><TD PORT="names_size">8</TD><TD>str(ASCII)</TD><TD PORT="names_type">names</TD></TR>
<TR><TD COLSPAN="4" PORT="names__repeat">repeat num_patches times</TD></TR>
</TABLE>>];
}
subgraph cluster__thing {
label="DoomWad::Thing";
graph[style=dotted];
thing__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="x_pos">0</TD><TD PORT="x_size">2</TD><TD>s2le</TD><TD PORT="x_type">x</TD></TR>
<TR><TD PORT="y_pos">2</TD><TD PORT="y_size">2</TD><TD>s2le</TD><TD PORT="y_type">y</TD></TR>
<TR><TD PORT="angle_pos">4</TD><TD PORT="angle_size">2</TD><TD>u2le</TD><TD PORT="angle_type">angle</TD></TR>
<TR><TD PORT="type_pos">6</TD><TD PORT="type_size">2</TD><TD>u2le</TD><TD PORT="type_type">type</TD></TR>
<TR><TD PORT="flags_pos">8</TD><TD PORT="flags_size">2</TD><TD>u2le</TD><TD PORT="flags_type">flags</TD></TR>
</TABLE>>];
}
subgraph cluster__sector {
label="DoomWad::Sector";
graph[style=dotted];
sector__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="floor_z_pos">0</TD><TD PORT="floor_z_size">2</TD><TD>s2le</TD><TD PORT="floor_z_type">floor_z</TD></TR>
<TR><TD PORT="ceil_z_pos">2</TD><TD PORT="ceil_z_size">2</TD><TD>s2le</TD><TD PORT="ceil_z_type">ceil_z</TD></TR>
<TR><TD PORT="floor_flat_pos">4</TD><TD PORT="floor_flat_size">8</TD><TD>str(ASCII)</TD><TD PORT="floor_flat_type">floor_flat</TD></TR>
<TR><TD PORT="ceil_flat_pos">12</TD><TD PORT="ceil_flat_size">8</TD><TD>str(ASCII)</TD><TD PORT="ceil_flat_type">ceil_flat</TD></TR>
<TR><TD PORT="light_pos">20</TD><TD PORT="light_size">2</TD><TD>s2le</TD><TD PORT="light_type">light</TD></TR>
<TR><TD PORT="special_type_pos">22</TD><TD PORT="special_type_size">2</TD><TD>u2le→SpecialSector</TD><TD PORT="special_type_type">special_type</TD></TR>
<TR><TD PORT="tag_pos">24</TD><TD PORT="tag_size">2</TD><TD>u2le</TD><TD PORT="tag_type">tag</TD></TR>
</TABLE>>];
}
subgraph cluster__vertexes {
label="DoomWad::Vertexes";
graph[style=dotted];
vertexes__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="entries_pos">0</TD><TD PORT="entries_size">4</TD><TD>Vertex</TD><TD PORT="entries_type">entries</TD></TR>
<TR><TD COLSPAN="4" PORT="entries__repeat">repeat to end of stream</TD></TR>
</TABLE>>];
}
subgraph cluster__sidedef {
label="DoomWad::Sidedef";
graph[style=dotted];
sidedef__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="offset_x_pos">0</TD><TD PORT="offset_x_size">2</TD><TD>s2le</TD><TD PORT="offset_x_type">offset_x</TD></TR>
<TR><TD PORT="offset_y_pos">2</TD><TD PORT="offset_y_size">2</TD><TD>s2le</TD><TD PORT="offset_y_type">offset_y</TD></TR>
<TR><TD PORT="upper_texture_name_pos">4</TD><TD PORT="upper_texture_name_size">8</TD><TD>str(ASCII)</TD><TD PORT="upper_texture_name_type">upper_texture_name</TD></TR>
<TR><TD PORT="lower_texture_name_pos">12</TD><TD PORT="lower_texture_name_size">8</TD><TD>str(ASCII)</TD><TD PORT="lower_texture_name_type">lower_texture_name</TD></TR>
<TR><TD PORT="normal_texture_name_pos">20</TD><TD PORT="normal_texture_name_size">8</TD><TD>str(ASCII)</TD><TD PORT="normal_texture_name_type">normal_texture_name</TD></TR>
<TR><TD PORT="sector_id_pos">28</TD><TD PORT="sector_id_size">2</TD><TD>s2le</TD><TD PORT="sector_id_type">sector_id</TD></TR>
</TABLE>>];
}
subgraph cluster__things {
label="DoomWad::Things";
graph[style=dotted];
things__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="entries_pos">0</TD><TD PORT="entries_size">10</TD><TD>Thing</TD><TD PORT="entries_type">entries</TD></TR>
<TR><TD COLSPAN="4" PORT="entries__repeat">repeat to end of stream</TD></TR>
</TABLE>>];
}
subgraph cluster__linedefs {
label="DoomWad::Linedefs";
graph[style=dotted];
linedefs__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="entries_pos">0</TD><TD PORT="entries_size">14</TD><TD>Linedef</TD><TD PORT="entries_type">entries</TD></TR>
<TR><TD COLSPAN="4" PORT="entries__repeat">repeat to end of stream</TD></TR>
</TABLE>>];
}
subgraph cluster__index_entry {
label="DoomWad::IndexEntry";
graph[style=dotted];
index_entry__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="offset_pos">0</TD><TD PORT="offset_size">4</TD><TD>s4le</TD><TD PORT="offset_type">offset</TD></TR>
<TR><TD PORT="size_pos">4</TD><TD PORT="size_size">4</TD><TD>s4le</TD><TD PORT="size_type">size</TD></TR>
<TR><TD PORT="name_pos">8</TD><TD PORT="name_size">8</TD><TD>str(ASCII)</TD><TD PORT="name_type">name</TD></TR>
</TABLE>>];
index_entry__inst__contents [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="contents_pos">offset</TD><TD PORT="contents_size">...</TD><TD>switch (name)</TD><TD PORT="contents_type">contents</TD></TR>
</TABLE>>];
index_entry__inst__contents_contents_switch [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#F0F2E4">case</TD><TD BGCOLOR="#F0F2E4">type</TD></TR>
<TR><TD>"SECTORS"</TD><TD PORT="case0">Sectors</TD></TR>
<TR><TD>"TEXTURE1"</TD><TD PORT="case1">Texture12</TD></TR>
<TR><TD>"VERTEXES"</TD><TD PORT="case2">Vertexes</TD></TR>
<TR><TD>"BLOCKMAP"</TD><TD PORT="case3">Blockmap</TD></TR>
<TR><TD>"PNAMES"</TD><TD PORT="case4">Pnames</TD></TR>
<TR><TD>"TEXTURE2"</TD><TD PORT="case5">Texture12</TD></TR>
<TR><TD>"THINGS"</TD><TD PORT="case6">Things</TD></TR>
<TR><TD>"LINEDEFS"</TD><TD PORT="case7">Linedefs</TD></TR>
<TR><TD>"SIDEDEFS"</TD><TD PORT="case8">Sidedefs</TD></TR>
</TABLE>>];
}
subgraph cluster__sidedefs {
label="DoomWad::Sidedefs";
graph[style=dotted];
sidedefs__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="entries_pos">0</TD><TD PORT="entries_size">30</TD><TD>Sidedef</TD><TD PORT="entries_type">entries</TD></TR>
<TR><TD COLSPAN="4" PORT="entries__repeat">repeat to end of stream</TD></TR>
</TABLE>>];
}
subgraph cluster__blockmap {
label="DoomWad::Blockmap";
graph[style=dotted];
blockmap__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="origin_x_pos">0</TD><TD PORT="origin_x_size">2</TD><TD>s2le</TD><TD PORT="origin_x_type">origin_x</TD></TR>
<TR><TD PORT="origin_y_pos">2</TD><TD PORT="origin_y_size">2</TD><TD>s2le</TD><TD PORT="origin_y_type">origin_y</TD></TR>
<TR><TD PORT="num_cols_pos">4</TD><TD PORT="num_cols_size">2</TD><TD>s2le</TD><TD PORT="num_cols_type">num_cols</TD></TR>
<TR><TD PORT="num_rows_pos">6</TD><TD PORT="num_rows_size">2</TD><TD>s2le</TD><TD PORT="num_rows_type">num_rows</TD></TR>
<TR><TD PORT="linedefs_in_block_pos">8</TD><TD PORT="linedefs_in_block_size">2</TD><TD>Blocklist</TD><TD PORT="linedefs_in_block_type">linedefs_in_block</TD></TR>
<TR><TD COLSPAN="4" PORT="linedefs_in_block__repeat">repeat (num_cols * num_rows) times</TD></TR>
</TABLE>>];
subgraph cluster__blocklist {
label="DoomWad::Blockmap::Blocklist";
graph[style=dotted];
blocklist__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="offset_pos">0</TD><TD PORT="offset_size">2</TD><TD>u2le</TD><TD PORT="offset_type">offset</TD></TR>
</TABLE>>];
blocklist__inst__linedefs [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
<TR><TD PORT="linedefs_pos">(offset * 2)</TD><TD PORT="linedefs_size">2</TD><TD>s2le</TD><TD PORT="linedefs_type">linedefs</TD></TR>
<TR><TD COLSPAN="4" PORT="linedefs__repeat">repeat until _ == -1</TD></TR>
</TABLE>>];
}
}
}
doom_wad__seq:index_offset_type -> doom_wad__inst__index:index_pos [color="#404040"];
doom_wad__inst__index:index_type -> index_entry__seq [style=bold];
doom_wad__seq:num_index_entries_type -> doom_wad__inst__index:index__repeat [color="#404040"];
sectors__seq:entries_type -> sector__seq [style=bold];
texture12__seq:textures_type -> texture_index__seq [style=bold];
texture12__seq:num_textures_type -> texture12__seq:textures__repeat [color="#404040"];
texture_index__seq:offset_type -> texture_index__inst__body:body_pos [color="#404040"];
texture_index__inst__body:body_type -> texture_body__seq [style=bold];
texture_body__seq:patches_type -> patch__seq [style=bold];
texture_body__seq:num_patches_type -> texture_body__seq:patches__repeat [color="#404040"];
pnames__seq:num_patches_type -> pnames__seq:names__repeat [color="#404040"];
vertexes__seq:entries_type -> vertex__seq [style=bold];
things__seq:entries_type -> thing__seq [style=bold];
linedefs__seq:entries_type -> linedef__seq [style=bold];
index_entry__seq:offset_type -> index_entry__inst__contents:contents_pos [color="#404040"];
index_entry__inst__contents:contents_type -> index_entry__inst__contents_contents_switch [style=bold];
index_entry__inst__contents_contents_switch:case0 -> sectors__seq [style=bold];
index_entry__inst__contents_contents_switch:case1 -> texture12__seq [style=bold];
index_entry__inst__contents_contents_switch:case2 -> vertexes__seq [style=bold];
index_entry__inst__contents_contents_switch:case3 -> blockmap__seq [style=bold];
index_entry__inst__contents_contents_switch:case4 -> pnames__seq [style=bold];
index_entry__inst__contents_contents_switch:case5 -> texture12__seq [style=bold];
index_entry__inst__contents_contents_switch:case6 -> things__seq [style=bold];
index_entry__inst__contents_contents_switch:case7 -> linedefs__seq [style=bold];
index_entry__inst__contents_contents_switch:case8 -> sidedefs__seq [style=bold];
index_entry__seq:name_type -> index_entry__inst__contents:contents_type [color="#404040"];
sidedefs__seq:entries_type -> sidedef__seq [style=bold];
blockmap__seq:linedefs_in_block_type -> blocklist__seq [style=bold];
blockmap__seq:num_cols_type -> blockmap__seq:linedefs_in_block__repeat [color="#404040"];
blockmap__seq:num_rows_type -> blockmap__seq:linedefs_in_block__repeat [color="#404040"];
blocklist__seq:offset_type -> blocklist__inst__linedefs:linedefs_pos [color="#404040"];
}