Table of Contents

Namespace WoWLib.Formats.WMO.Root.Chunks

Classes

AmbientBoxVolume

One MBVD entry (8.3+): a box-shaped ambient volume bounded by six planes. Only read when MAVG or MAVD is present.

AmbientVolume

One ambient volume (MAVD, 8.3+) - a spherical region overriding the root ambient color - or a global ambient entry (MAVG), which shares the layout with position/start/end zeroed.

FogExtra

One MFED entry (9.0+): fog extra data; same count as MFOG.

GroupInfo2

One MGI2 entry (9.0+): group info v2. Same count as MOGI; when present it overrides the older LOD-selection logic.

LightExtension

One MOLV entry (9.1+): a directional-gradient extension to a MOLT light. Multiple entries may extend the same light.

LightExtension.Gradient

One directional gradient sample: a direction (usually axis-aligned) and its value.

NewLight

One MNLD entry (9.0+): a Shadowlands dynamic light - point or spot - used for everything from torch fires to window-light projection.

PortalExtra

One MOPE entry (11.1+): portal extra data; largely undeciphered.

SmoDoodadDef

One MODD doodad placement: an M2 instance inside the WMO, quaternion-oriented in model space.

SmoDoodadSet

One MODS doodad set: a named range of doodad placements. Set 0 ("Set_$DefaultGlobal") is additive and always shown; other sets are exclusive alternatives.

SmoFog

One MFOG entry: a fog volume with regular and under-water settings.

SmoFog.FogBand

One fog band: end distance, start scalar and color.

SmoGroupInfo

One MOGI entry: per-group flags, bounds and name, mirrored from the group file's own header.

SmoHeader

The MOHD root header: entity counts, ambient color, bounds and root-wide flags.

SmoLight

One MOLT light. Not rendered by classic-era clients, but baked into vertex colors by the exporter.

SmoMaterial

One MOMT material, 64 bytes. The layout is stable across v17; what changed in 8.1 is the meaning of the texture fields - MOTX byte offsets before (and in the fallback mode signalled by MOTX's presence), FileDataIDs after.

SmoPortal

One MOPT portal: a polygon plane separating two groups.

SmoPortalRef

One MOPR entry: a group's reference to a portal and the group on the other side.

SmoVisibleBlock

One MOVB visible block: a vertex range in MOVV.

UvAnimation

One MOUV entry (7.3+): texture-coordinate translation speeds for two of the material's texture layers. Same count as the materials; all-zero entries mean no animation.

Structs

AmbientVolume.Data

A blittable value twin of the NATIVE layout (size 48): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

FogExtra.Data

A blittable value twin of the NATIVE layout (size 16): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

GroupInfo2.Data

A blittable value twin of the NATIVE layout (size 8): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

LightExtension.Gradient.Data

A blittable value twin of the NATIVE layout (size 16): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

NewLight.Data

A blittable value twin of the NATIVE layout (size 184): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

PortalExtra.Data

A blittable value twin of the NATIVE layout (size 16): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

SmoDoodadDef.Data

A blittable value twin of the NATIVE layout (size 40): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

SmoDoodadSet.Data

A blittable value twin of the NATIVE layout (size 32): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

SmoFog.Data

A blittable value twin of the NATIVE layout (size 48): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

SmoFog.FogBand.Data

A blittable value twin of the NATIVE layout (size 12): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

SmoGroupInfo.Data

A blittable value twin of the NATIVE layout (size 32): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

SmoHeader.Data

A blittable value twin of the NATIVE layout (size 64): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

SmoLight.Data

A blittable value twin of the NATIVE layout (size 48): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

SmoMaterial.Data

A blittable value twin of the NATIVE layout (size 64): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

SmoPortal.Data

A blittable value twin of the NATIVE layout (size 20): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

SmoPortalRef.Data

A blittable value twin of the NATIVE layout (size 8): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

SmoVisibleBlock.Data

A blittable value twin of the NATIVE layout (size 4): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.

Enums

DoodadFlags

Doodad placement flag bits, packed into the high byte of SMODoodadDef.name_and_flags.

HeaderFlags

Root header flag bits (SMOHeader.flags).

LightType

The kind of a WMO light (SMOLight.type).

MaterialFlags

Material flag bits (SMOMaterial.flags).