Skip to content

WDT chunks

The typed wire structs of the WDT files — the MPHD map header, the MAIN tile table and MAID FileDataID records of the main file, and the satellite files' occlusion indices, lights, fogs and particulate volumes — plus the flag enums their fields carry. A struct that changed across client versions documents once: one merged member walk under its generic ⟨version⟩ name, each member badged with the expansion range it belongs to. Wire integer fields show their on-disk width.

The shared placement records the WDT reuses (SMMapObjDef for the global WMO) are documented with the common structures.

Main file

MapHeaderFlags [WDTHeader]MPHD

Bases: IntFlag

Map header flag bits (SMMapHeader.flags).

Attributes:

Name Description
UsesGlobalMapObj

A WMO-only map: one global map object (MWMO/MODF), no terrain tiles.

AdtHasMccv

ADTs carry MCCV vertex colors (WotLK+); with this set every ADT of the map must have MCCV.

AdtHasBigAlpha

Terrain shader 2 (_env): 4096-byte uncompressed MCAL alpha maps instead of 2048.

AdtHasDoodadrefsSortedBySizeCat

ADT MCRF/MCRD doodad references are sorted by size category.

AdtHasMclv

ADTs carry the second MCLV color layer (Cata+; deprecated and forbidden in 8.x).

AdtHasUpsideDownGround

Flip the ground upside down to create a ceiling (Cata+).

unk_0x40

Unknown (MoP+); seen on Firelands2.wdt before Legion.

AdtHasHeightTexturing

Terrain shader 6: alpha maps are influenced by the _h textures and MTXP (MoP+); also 4096-byte uncompressed MCAL entries.

LoadLodAdt

Load _lod.adt (Legion+); implicitly sets 0x8000.

HasMaid

The WDT carries MAID: ADTs load by FileDataID instead of path (8.1.0.28294+).

unk_0x400

Unknown.

unk_0x800

Unknown.

unk_0x1000

Unknown.

unk_0x2000

Unknown.

unk_0x4000

Unknown.

unk_0x8000

Affects _lod.adt rendering; implicitly set for the continent maps (Legion+). Without it (or 0x100) distant map textures and LOD do not render.

UsesGlobalMapObj class-attribute instance-attribute

UsesGlobalMapObj = 1

AdtHasMccv class-attribute instance-attribute

AdtHasMccv = 2

AdtHasBigAlpha class-attribute instance-attribute

AdtHasBigAlpha = 4

AdtHasDoodadrefsSortedBySizeCat class-attribute instance-attribute

AdtHasDoodadrefsSortedBySizeCat = 8

AdtHasMclv class-attribute instance-attribute

AdtHasMclv = 16

AdtHasUpsideDownGround class-attribute instance-attribute

AdtHasUpsideDownGround = 32

unk_0x40 class-attribute instance-attribute

unk_0x40 = 64

AdtHasHeightTexturing class-attribute instance-attribute

AdtHasHeightTexturing = 128

LoadLodAdt class-attribute instance-attribute

LoadLodAdt = 256

HasMaid class-attribute instance-attribute

HasMaid = 512

unk_0x400 class-attribute instance-attribute

unk_0x400 = 1024

unk_0x800 class-attribute instance-attribute

unk_0x800 = 2048

unk_0x1000 class-attribute instance-attribute

unk_0x1000 = 4096

unk_0x2000 class-attribute instance-attribute

unk_0x2000 = 8192

unk_0x4000 class-attribute instance-attribute

unk_0x4000 = 16384

unk_0x8000 class-attribute instance-attribute

unk_0x8000 = 32768

WDTHeader⟨version⟩

An MPHD map header, abstract over the client version. Construct a concrete version with WDTHeader.for_version(expansion).

flags property writable

Map-wide flags; MapHeaderFlags bits.

something property writable VanillaLegion

something: Annotated[int, uint32]

A legacy value the WotLK-era client reads but does not use meaningfully; zero in shipped files.

unused property writable VanillaLegion

unused: list[Annotated[int, uint32]]

Unused padding.

lgt_fdid property writable BfA

lgt_fdid: int

FileDataID of the _lgt.wdt lights satellite, or 0.

occ_fdid property writable BfA

occ_fdid: int

FileDataID of the _occ.wdt occlusion satellite, or 0.

fogs_fdid property writable BfA

fogs_fdid: int

FileDataID of the _fogs.wdt volumetric-fog satellite, or 0.

mpv_fdid property writable BfA

mpv_fdid: int

FileDataID of the _mpv.wdt particulate-volume satellite, or 0.

tex_fdid property writable BfA

tex_fdid: int

FileDataID of the _tex.wdt texture-list satellite, or 0.

wdl_fdid property writable BfA

wdl_fdid: int

FileDataID of the map's .wdl low-resolution heightmap, or 0.

pd4_fdid property writable BfA

pd4_fdid: int

FileDataID of the map's .pd4 file, or 0.

AreaInfoFlags [SMAreaInfo]MAIN

Bases: IntFlag

Tile table flag bits (SMAreaInfo.flags).

Attributes:

Name Description
HasAdt

The tile has an ADT.

AllWater

The whole tile is "fake water" (Cataclysm+; pre-Cata clients read this bit as their loaded flag).

Loaded

Runtime-only loaded marker; zero in files.

HasAdt class-attribute instance-attribute

HasAdt = 1

AllWater class-attribute instance-attribute

AllWater = 2

Loaded class-attribute instance-attribute

Loaded = 4

SMAreaInfo [tiles]MAIN

SMAreaInfo()
SMAreaInfo(flags: AreaInfoFlags | None = ..., async_id: int = 0)

One MAIN tile table entry (SMAreaInfo). The table holds 64 x 64 of them in row-major order (y outer, x inner).

flags property writable

Tile flags; AreaInfoFlags bits.

async_id property writable

async_id: int

Runtime-only async load id; zero in files.

MapFileDataIDs [mapFdids]MAID

MapFileDataIDs()
MapFileDataIDs(root_adt: int = 0, obj0_adt: int = 0, obj1_adt: int = 0, tex0_adt: int = 0, lod_adt: int = 0, map_texture: int = 0, map_texture_n: int = 0, minimap_texture: int = 0)

One MAID per-tile FileDataID record (8.1.0.28294+): every file belonging to one map tile. The table holds 64 x 64 of them in row-major order (y outer, x inner); absent files are 0.

root_adt property writable

root_adt: int

FileDataID of mapname_xx_yy.adt (the root ADT).

obj0_adt property writable

obj0_adt: int

FileDataID of mapname_xx_yy_obj0.adt.

obj1_adt property writable

obj1_adt: int

FileDataID of mapname_xx_yy_obj1.adt.

tex0_adt property writable

tex0_adt: int

FileDataID of mapname_xx_yy_tex0.adt.

lod_adt property writable

lod_adt: int

FileDataID of mapname_xx_yy_lod.adt.

map_texture property writable

map_texture: int

FileDataID of the mapname_xx_yy.blp map texture.

map_texture_n property writable

map_texture_n: int

FileDataID of the mapname_xx_yy_n.blp normal map texture.

minimap_texture property writable

minimap_texture: int

FileDataID of the mapxx_yy.blp minimap texture.

Occlusion (_occ.wdt)

OcclusionIndex [indices]MAOI

OcclusionIndex()
OcclusionIndex(tile_x: int = 0, tile_y: int = 0, offset: int = 0, size: int = 0)

One MAOI record: which tile the next occlusion heightmap belongs to and where its 545 int16 values sit inside the MAOH payload.

tile_x property writable

tile_x: int

The tile x coordinate.

tile_y property writable

tile_y: int

The tile y coordinate.

offset property writable

offset: Annotated[int, uint32]

Byte offset of this tile's heightmap inside the MAOH payload. Stored as-is: MAOH round-trips verbatim, so offsets stay valid; keep them consistent when editing.

size property writable

size: Annotated[int, uint32]

Byte size of the heightmap; always (1717 + 1616) * 2 = 1090.

Lights (_lgt.wdt)

MapPointLightLegacy [legacyPointLights]MPLT

MapPointLightLegacy()
MapPointLightLegacy(id: int = 0, tile_x: int = 0, tile_y: int = 0, color: CArgb | None = ..., position: C3Vector | None = ..., unknown: list[float] | None = ...)

One WoD point light (MPLT); Legion clients stop reading these in favor of MPL2.

id property writable

id: Annotated[int, uint32]

Unique light id within the WDT.

tile_x property writable

tile_x: int

The ADT tile x coordinate.

tile_y property writable

tile_y: int

The ADT tile y coordinate.

color property writable

color: CArgb

Light color.

position property writable

position: C3Vector

Light position.

unknown property writable

unknown: list[float]

Intensity and related parameters; exact meaning undocumented.

MapPointLight [pointLights]MPL2

MapPointLight()
MapPointLight(id: int = 0, color: CImVector | None = ..., position: C3Vector | None = ..., attenuation_start: float = 0.0, attenuation_end: float = 0.0, intensity: float = 0.0, rotation: C3Vector | None = ..., tile_x: int = 0, tile_y: int = 0, mlta_index: int = -1, texture_index: int = -1)

One Legion point light (MPL2).

id property writable

id: Annotated[int, uint32]

Unique light id within the WDT; increment for each new light.

color property writable

color: CImVector

Light color (b, g, r, a); alpha 0 means fully opaque.

position property writable

position: C3Vector

Light position.

attenuation_start property writable

attenuation_start: float

Where the light's spread starts; usually 0.

attenuation_end property writable

attenuation_end: float

How far the light spreads.

intensity property writable

intensity: float

Light intensity.

rotation property writable

rotation: C3Vector

Rotation; usually zero for point lights.

tile_x property writable

tile_x: int

The ADT tile x coordinate.

tile_y property writable

tile_y: int

The ADT tile y coordinate.

mlta_index property writable

mlta_index: int

Index into MLTA, or -1 when unanimated.

texture_index property writable

texture_index: int

Index into MTEX, or -1.

MapPointLight3 [pointLightsV3]MPL3

MapPointLight3()
MapPointLight3(id: int = 0, color: CImVector | None = ..., position: C3Vector | None = ..., attenuation_start: float = 0.0, attenuation_end: float = 0.0, intensity: float = 0.0, rotation: C3Vector | None = ..., tile_x: int = 0, tile_y: int = 0, mlta_index: int = -1, texture_index: int = -1, flags: int = 0, scale_half: int = 14336)

One Shadowlands point light (MPL3; replaces MPL2 in 9.0+ files).

id property writable

id: Annotated[int, uint32]

Unique light id within the WDT.

color property writable

color: CImVector

Light color (b, g, r, a); alpha 0 means fully opaque.

position property writable

position: C3Vector

Light position.

attenuation_start property writable

attenuation_start: float

Where the light's spread starts.

attenuation_end property writable

attenuation_end: float

How far the light spreads.

intensity property writable

intensity: float

Light intensity.

rotation property writable

rotation: C3Vector

Rotation; only used to orient light-cookie projection.

tile_x property writable

tile_x: int

The ADT tile x coordinate.

tile_y property writable

tile_y: int

The ADT tile y coordinate.

mlta_index property writable

mlta_index: int

Index into MLTA, or -1 when unanimated.

texture_index property writable

texture_index: int

Index into MTEX for the light-cookie texture, or -1.

flags property writable

flags: Annotated[int, uint16]

Flags; 0x1 casts raytraced shadows (D3D12, shadow RT level 2+).

scale_half property writable

scale_half: int

Scale as a raw IEEE half-float (0.5 is the default; 10.0 hides player shadows).

MapSpotLight [spotLights]MSLT

MapSpotLight()
MapSpotLight(id: int = 0, color: CImVector | None = ..., position: C3Vector | None = ..., attenuation_start: float = 0.0, attenuation_end: float = 0.0, intensity: float = 0.0, rotation: C3Vector | None = ..., spotlight_radius: float = 0.0, inner_angle: float = 0.0, outer_angle: float = 0.0, tile_x: int = 0, tile_y: int = 0, mlta_index: int = -1, texture_index: int = -1)

One Legion spot light (MSLT).

id property writable

id: Annotated[int, uint32]

Unique light id within the WDT.

color property writable

color: CImVector

Light color (b, g, r, a); alpha 0 means fully opaque.

position property writable

position: C3Vector

Light position.

attenuation_start property writable

attenuation_start: float

Where the light's spread starts; must be <= attenuation_end.

attenuation_end property writable

attenuation_end: float

How far the light spreads.

intensity property writable

intensity: float

Light intensity.

rotation property writable

rotation: C3Vector

Rotation, radians.

spotlight_radius property writable

spotlight_radius: float

Spotlight cone radius.

inner_angle property writable

inner_angle: float

Inner cone angle, radians.

outer_angle property writable

outer_angle: float

Outer cone angle, radians.

tile_x property writable

tile_x: int

The ADT tile x coordinate.

tile_y property writable

tile_y: int

The ADT tile y coordinate.

mlta_index property writable

mlta_index: int

Index into MLTA, or -1 when unanimated.

texture_index property writable

texture_index: int

Index into MTEX, or -1.

LightAnimation [lightAnimations]MLTA

LightAnimation()
LightAnimation(amplitude: float = 0.0, frequency: float = 0.0, function: int = 0)

One light texture animation (MLTA), referenced by mlta_index.

amplitude property writable

amplitude: float

Animation amplitude.

frequency property writable

frequency: float

Animation frequency.

function property writable

function: Annotated[int, int32]

Curve function: 0 off, 1 sine, 2 noise, 3 noise step.

Volumetric fogs (_fogs.wdt)

VolumetricFog [fogs]VFOG

VolumetricFog()
VolumetricFog(color: C3Vector | None = ..., intensity: list[float] | None = ..., unk18: float = 0.0, position: C3Vector | None = ..., unk28: float = 0.0, rotation: C4Vector | None = ..., radius: list[float] | None = ..., animation_periods: list[int] | None = ..., flags: int = 0, model_fdid: int = 0, fog_level: int = 0, id: int = 0)

One volumetric fog (VFOG, 8.0+).

color property writable

color: C3Vector

Fog color as r, g, b floats; 1.0 equals 255.

intensity property writable

intensity: list[float]

Radius-related intensities.

unk18 property writable

unk18: float

Unknown; 0 to 5000 in shipped files.

position property writable

position: C3Vector

Position, in server coordinates.

unk28 property writable

unk28: float

Unknown; 0 in files, set to 1.0 on loading.

rotation property writable

rotation: C4Vector

Rotation quaternion.

radius property writable

radius: list[float]

Fog start radii.

animation_periods property writable

animation_periods: list[int]

Animation periods, used to derive the animation coefficients.

flags property writable

flags: Annotated[int, uint32]

Flags.

model_fdid property writable

model_fdid: int

FileDataID of the volume model (one M2Batch only); 0 falls back to spells/errorcube.m2.

fog_level property writable

fog_level: int

Fog level, 0 to 2 (inclusive against the client's volumeFogLevel setting).

id property writable

id: Annotated[int, uint32]

Globally unique fog id.

VolumetricFogExtra [fogExtras]VFEX

VolumetricFogExtra()
VolumetricFogExtra(unk0: int = 1, unk1: list[float] | None = ..., fog_id: int = 0, unk3: list[int] | None = ...)

One VFEX extension record (11.0+, format version 2): optional extra data for a VFOG entry, matched by fog id.

unk0 property writable

unk0: Annotated[int, uint32]

Unknown; defaults to 1.

unk1 property writable

unk1: list[float]

Unknown floats; the first three carry values, the rest are 1.

fog_id property writable

fog_id: int

The VFOG entry this record extends (its id field).

unk3 property writable

unk3: list[Annotated[int, uint32]]

Unknown; defaults to 0.

Particulate volumes (_mpv.wdt)

ParticulatePoint

ParticulatePoint()
ParticulatePoint(unk0: C2Vector | None = ..., unk8: float = 0.0, unk_c: float = 0.0)

One PVPD particulate-volume point.

unk0 property writable

unk0: C2Vector

Unknown 2D vector; components in [-1, 1].

unk8 property writable

unk8: float

Unknown; only -0.0 observed.

unk_c property writable

unk_c: float

Unknown.

ParticulateBounds

ParticulateBounds()
ParticulateBounds(point_count: int = 0, bounds: CAaBox | None = ..., point_indices: list[int] | None = ..., complete: int = 1)

One PVBD particulate-volume bounds record.

point_count property writable

point_count: int

Number of engaged point indices.

bounds property writable

bounds: CAaBox

The volume's bounds.

point_indices property writable

point_indices: list[int]

Indices into the group's PVPD points.

complete property writable

complete: Annotated[int, uint32]

Whether this entry is complete; if 0 it joins the next entry (same bounds).