Skip to content

WDL chunks

The typed wire structs of a WDL file — the per-tile heightmaps, hole and ocean masks, the Legion+ low-resolution placements and the Shadowlands+ sky scenes. Wire integer fields show their on-disk width.

The shared placement records the WDL reuses (SMMapObjDef for MODF entries, SMDoodadDef for MLDD) are documented with the common structures.

LodMapObjDef [lodMapObjects]MLMD

LodMapObjDef()
LodMapObjDef(name_id: int = 0, unique_id: int = 0, position: C3Vector | None = ..., rotation: C3Vector | None = ..., flags: MapObjDefFlags | None = ..., doodad_set: int = 0, name_set: int = 0, scale: int = 0)

A low-resolution WMO placement (an MLMD record, Legion+): an SMMapObjDef without the extents — those live in the parallel MLMX record. name_id is always a FileDataID here (the WDL has no name table).

name_id property writable

name_id: int

The WMO FileDataID.

unique_id property writable

unique_id: int

Unique instance id across the whole map; matches the full-resolution ADT placement.

position property writable

position: C3Vector

Position, in the map's placement coordinate system.

rotation property writable

rotation: C3Vector

Rotation as Euler angles, degrees.

flags property writable

Flags; MapObjDefFlags bits.

doodad_set property writable

doodad_set: int

The WMO doodad set shown by this instance.

name_set property writable

name_set: int

The WMO name set.

scale property writable

scale: Annotated[int, uint16]

Scale, 1024 = 1.0.

LodExtent [lodDoodadExtents]MLDX[lodMapObjectExtents]MLMX

LodExtent()
LodExtent(bounds: CAaBox | None = ..., radius: float = 0.0)

Visibility extents for one low-resolution placement (an MLDX/MLMX record, Legion+): the transformed model's bounding box and a radius, in server coordinates. Same count and order as the placement list it accompanies.

bounds property writable

bounds: CAaBox

The transformed model's bounding box.

radius property writable

radius: float

The visibility radius.

LodDoodadFade [lodDoodadFades]MLDF

LodDoodadFade()
LodDoodadFade(fade_start: float = 0.0, fade_end: float = 0.0)

A fade-distance range for one low-resolution M2 placement (an MLDF record, BfA): undocumented on wowdev; layout established by surveying every 8.3.7 WDL carrying the chunk (33 files) — always exactly one 8-byte record per MLDD entry, holding a pair of ascending distances drawn from clean round values ((500, 3500), (3500, 4000), (5000, 5050), (10000, 10050)).

fade_start property writable

fade_start: float

The distance the fade starts at.

fade_end property writable

fade_end: float

The distance the fade ends at.

SkyScene [skyScenes]MSSN

SkyScene()
SkyScene(sky_scene_id: int = 0, unk1: int = 0, condition_index: int = 0, condition_count: int = 0, object_index: int = 0, object_count: int = 0, unk4: int = 0, unk5: int = 0, unk6: int = 0, unk7: int = 0)

One sky scene (an MSSN record, Shadowlands+), tying a SkySceneID to its condition and object ranges.

sky_scene_id property writable

sky_scene_id: int

Foreign key into SkySceneXPlayerCondition (SkySceneID).

unk1 property writable

unk1: Annotated[int, uint32]

Unknown; possibly the SkySceneXPlayerCondition record count.

condition_index property writable

condition_index: int

First condition record in MSSC.

condition_count property writable

condition_count: int

Condition record count.

object_index property writable

object_index: int

First object record in MSSO.

object_count property writable

object_count: int

Object record count.

unk4 property writable

unk4: Annotated[int, uint32]

Unknown.

unk5 property writable

unk5: Annotated[int, uint32]

Unknown.

unk6 property writable

unk6: Annotated[int, uint32]

Unknown.

unk7 property writable

unk7: Annotated[int, uint32]

Unknown.

SkySceneCondition [skySceneConditions]MSSC

SkySceneCondition()
SkySceneCondition(unk0: int = 0, unk1: int = 0, condition_type: int = 0, unk3: int = 0, unk4: int = 0, unk5: int = 0, condition_value: int = 0)

One sky-scene condition (an MSSC record, Shadowlands+).

unk0 property writable

unk0: Annotated[int, uint32]

Unknown.

unk1 property writable

unk1: Annotated[int, uint32]

Unknown.

condition_type property writable

condition_type: int

What condition_value keys into: 1 AreaTable (a parent of the player's area), 2 LightParams, 3 LightSkybox (the current skybox), 5 ZoneLight.

unk3 property writable

unk3: Annotated[int, uint32]

Unknown.

unk4 property writable

unk4: Annotated[int, uint32]

Unknown.

unk5 property writable

unk5: Annotated[int, uint32]

Unknown.

condition_value property writable

condition_value: int

The db2 key condition_type selects.

SkySceneObject [skySceneObjects]MSSO

SkySceneObject()
SkySceneObject(unk0: int = 0, flags: int = 0, fdid: int = 0, translation: C3Vector | None = ..., rotation: C3Vector | None = ..., scale: float = 1.0, params_index: int = 0, unk11: int = 0)

One sky-scene object (an MSSO record, Shadowlands+): a placed distant M2.

unk0 property writable

unk0: Annotated[int, uint32]

Unknown.

flags property writable

flags: Annotated[int, uint32]

Flags; 0x1 means the object has an MSSF params record.

fdid property writable

fdid: Annotated[int, uint32]

The model FileDataID.

translation property writable

translation: C3Vector

Translation.

rotation property writable

rotation: C3Vector

Rotation as Euler angles, radians.

scale property writable

scale: float

Uniform scale.

params_index property writable

params_index: int

Index into MSSF when flags has 0x1.

unk11 property writable

unk11: Annotated[int, uint32]

Unknown.

SkySceneObjectParams [skySceneObjectParams]MSSF

SkySceneObjectParams()
SkySceneObjectParams(unk0: float = 0.0, unk1: float = 0.0)

One sky-scene object params record (an MSSF record; documented as Dragonflight+ but observed in 9.2.7 files).

unk0 property writable

unk0: float

Unknown.

unk1 property writable

unk1: float

Unknown.

SceneLivingDef [sceneLivingDefs]MSLD

SceneLivingDef()
SceneLivingDef(unk0: int = 0, unk1: int = 0, unk2: int = 0, unk3: int = 0, time_start0: int = 0, time_start1: int = 0, time_end0: int = 0, time_end1: int = 0)

One scene-living (world) definition (an MSLD record, The War Within+): a time-windowed scene schedule.

unk0 property writable

unk0: Annotated[int, uint32]

Unknown.

unk1 property writable

unk1: Annotated[int, uint32]

Unknown.

unk2 property writable

unk2: Annotated[int, uint32]

Unknown.

unk3 property writable

unk3: Annotated[int, uint32]

Unknown.

time_start0 property writable

time_start0: int

Window start (first pair value).

time_start1 property writable

time_start1: int

Window start (second pair value).

time_end0 property writable

time_end0: int

Window end (first pair value).

time_end1 property writable

time_end1: int

Window end (second pair value).

TileHeights [heightmaps]MARE

TileHeights()
TileHeights(outer: list[int] | None = ..., inner: list[int] | None = ...)

One tile's low-resolution heightmap (a MARE payload): a 17x17 grid of int16 heights with a 16x16 grid of midpoints, on the same scale as the full-resolution ADT heights. The background mountain silhouettes are drawn from these.

outer property writable

outer: list[Annotated[int, int16]]

The 17 x 17 outer grid heights, row-major.

inner property writable

inner: list[Annotated[int, int16]]

The 16 x 16 inner (midpoint) heights, row-major.

TileHoles [holes]MAHO

TileHoles()
TileHoles(rows: list[int] | None = ...)

One tile's hole mask (a MAHO payload, TBC+): 16 row bitmasks, one per chunk row (y), one bit per chunk column (x) — a set bit is a hole. Blizzard sets a bit when all 16 holes of the ADT chunk are set; an all-zero mask is always written anyway.

rows property writable

rows: list[Annotated[int, uint16]]

The 16 row bitmasks (y rows, x bits); a set bit is a hole.

TileOcean [oceanMasks]MAOE

TileOcean()
TileOcean(mask: list[int] | None = ...)

One tile's ocean mask (a MAOE payload, Legion+): a 32-byte mask selecting the ocean alpha texture — 0xFF bytes mean water everywhere, 0x00 none. Emitted before the tile's hole mask.

mask property writable

mask: list[Annotated[int, uint8]]

The mask bytes; 0xFF is water everywhere, 0x00 none.