Skip to content

WDT satellites

The per-map satellite files later expansions added beside the main .wdt, each a chunked entity of its own on the WDT assembly: the _occ occlusion heightmaps and _lgt placed lights (WoD+), the _fogs volumetric fogs (Legion 7.2.5+) and the _mpv particulate volumes (BfA+). Fields carry the same FourCC and expansion badges as the main file's page; a missing satellite file simply leaves its entity default-empty.

Occlusion (_occ.wdt)

Per-tile low-resolution heightmaps (the same 17×17 + 16×16 int16 grid as the WDL tiles) that occlude distant geometry: the MAOI index locates each tile's grid inside the packed MAOH block.

WDTOcclusion

WDTOcclusion()

A _occ.wdt occlusion satellite (WoD+), abstract over the client version: per-tile low-resolution heightmaps the renderer occludes against. Construct a concrete version with WDTOcclusion.for_version(expansion). See https://wowdev.wiki/WDT.

for_version staticmethod

for_version(expansion: Expansion) -> WDTOcclusion⟨version⟩

Construct the concrete WDTOcclusion for a client version — the abstract WDTOcclusion is never instantiated directly. The return type narrows per expansion (a typed overload per Expansion member), so for_version(Expansion.Wod) returns a WDTOcclusionWod; a runtime Expansion value yields the AnyWDTOcclusion union.

validate

validate() -> ValidationReport

Check the logical integrity contracts this file must satisfy to LOAD in the client, which write() deliberately never enforces. Call it before writing when you want to know the result will load. A file read from a client and left unmodified reports no errors; warnings mark states real client files ship.

Returns:

Type Description
ValidationReport

every violated contract, each with its member path

ensure_valid

ensure_valid() -> None

Validate and raise on the first error instead of returning a report — the assert-style face of validate().

Returns:

Type Description
None

nothing; raises when validate() finds any error

Occlusion

Per-tile low-resolution heightmaps the renderer occludes distant geometry against.

mver property writable MVER

mver: Annotated[int, uint32]

The file format version; 18 like the main WDT.

indices property MAOI

indices: list[OcclusionIndex]

The tile index (MAOI): one record per tile with occlusion data, locating its heightmap inside heights. Empty for WMO-only maps.

heights property MAOH

heights: list[Annotated[int, int16]]

The packed heightmap block (MAOH): the tiles' interleaved 17x17 + 16x16 int16 grids back to back, addressed by the index records' offsets (same layout as the WDL MARE payload). Empty for WMO-only maps.

Lights (_lgt.wdt)

Freely placed map lights — point lights under lamp posts and the like, plus Legion's spot lights, light-cookie textures and animations. The point-light record was replaced twice: MPLT (WoD) → MPL2 (Legion) → MPL3 (Shadowlands).

WDTLights

WDTLights()

A _lgt.wdt lights satellite (WoD+), abstract over the client version: the map's freely placed point and spot lights. Construct a concrete version with WDTLights.for_version(expansion). See https://wowdev.wiki/WDT.

for_version staticmethod

for_version(expansion: Expansion) -> WDTLights⟨version⟩

Construct the concrete WDTLights for a client version — the abstract WDTLights is never instantiated directly. The return type narrows per expansion (a typed overload per Expansion member), so for_version(Expansion.Wod) returns a WDTLightsWod; a runtime Expansion value yields the AnyWDTLights union.

validate

validate() -> ValidationReport

Check the logical integrity contracts this file must satisfy to LOAD in the client, which write() deliberately never enforces. Call it before writing when you want to know the result will load. A file read from a client and left unmodified reports no errors; warnings mark states real client files ship.

Returns:

Type Description
ValidationReport

every violated contract, each with its member path

ensure_valid

ensure_valid() -> None

Validate and raise on the first error instead of returning a report — the assert-style face of validate().

Returns:

Type Description
None

nothing; raises when validate() finds any error

Lights

The map's freely placed point and spot lights, their textures and animations.

mver property writable MVER

mver: Annotated[int, uint32]

The file format version: 18 up to Legion 7.0.1.20740, 20 since 7.0.1.20914.

Volumetric fogs (_fogs.wdt)

Placed fog volumes. The file appears (empty) in Legion 7.2.5; the first VFOG content ships with BfA 8.0.1, and format version 2 (The War Within) adds the VFEX extension records.

WDTFogs

WDTFogs()

A _fogs.wdt volumetric-fog satellite (Legion 7.2.5+), abstract over the client version. Construct a concrete version with WDTFogs.for_version(expansion). See https://wowdev.wiki/WDT.

for_version staticmethod

for_version(expansion: Expansion) -> WDTFogs⟨version⟩

Construct the concrete WDTFogs for a client version — the abstract WDTFogs is never instantiated directly. The return type narrows per expansion (a typed overload per Expansion member), so for_version(Expansion.Legion) returns a WDTFogsLegion; a runtime Expansion value yields the AnyWDTFogs union.

validate

validate() -> ValidationReport

Check the logical integrity contracts this file must satisfy to LOAD in the client, which write() deliberately never enforces. Call it before writing when you want to know the result will load. A file read from a client and left unmodified reports no errors; warnings mark states real client files ship.

Returns:

Type Description
ValidationReport

every violated contract, each with its member path

ensure_valid

ensure_valid() -> None

Validate and raise on the first error instead of returning a report — the assert-style face of validate().

Returns:

Type Description
None

nothing; raises when validate() finds any error

Fogs

Placed volumetric fog volumes.

fogs property VFOGBfA 8.0

fogs: list[VolumetricFog]

The volumetric fogs (VFOG, 8.0+).

mver property writable MVER

mver: Annotated[int, uint32]

The file format version: 1 since Legion 7.2.5, 2 since 11.0.0.54935 (adds VFEX).

Particulate volumes (_mpv.wdt)

Weather particulate volumes in repeated PVMI/PVPD/PVBD groups — the i-th elements of the three lists belong together, and the on-disk group interleave round-trips through the journal. The PVMI record layout is keyed on the file's own version payload, so it is kept opaque.

WDTParticulates

WDTParticulates()

A _mpv.wdt particulate-volume satellite (BfA 8.0.1+), abstract over the client version: weather particulate volumes in repeated PVMI/PVPD/PVBD groups. Construct a concrete version with WDTParticulates.for_version(expansion). See https://wowdev.wiki/WDT.

for_version staticmethod

for_version(expansion: Expansion) -> WDTParticulates⟨version⟩

Construct the concrete WDTParticulates for a client version — the abstract WDTParticulates is never instantiated directly. The return type narrows per expansion (a typed overload per Expansion member), so for_version(Expansion.Bfa) returns a WDTParticulatesBfa; a runtime Expansion value yields the AnyWDTParticulates union.

validate

validate() -> ValidationReport

Check the logical integrity contracts this file must satisfy to LOAD in the client, which write() deliberately never enforces. Call it before writing when you want to know the result will load. A file read from a client and left unmodified reports no errors; warnings mark states real client files ship.

Returns:

Type Description
ValidationReport

every violated contract, each with its member path

ensure_valid

ensure_valid() -> None

Validate and raise on the first error instead of returning a report — the assert-style face of validate().

Returns:

Type Description
None

nothing; raises when validate() finds any error

Particulate volumes

Weather particulate volumes in repeated PVMI/PVPD/PVBD groups.

mver property writable MVER

mver: Annotated[int, uint32]

The _mpv format version, 1 to 4; the PVMI record size is keyed on it (0xF5C / 0xFE8 / 0x10D8).