Table of Contents

Namespace WoWLib.Formats.WMO.Group.Chunks

Classes

CAaBspNode

One MOBN BSP node for collision: a split plane or a leaf referencing faces through MOBR.

LightSet

One light-set range (8.1+): a (first, count) window into the group's spot lights (MLSS -> MOLS), point lights (MLSP -> MOLP) or point-light animations (MLSK -> MOP2).

MliqData

Structured MLIQ liquid data: a vertex grid and a tile-flag grid with a base position and material id. The on-disk header is 30 bytes (the uint16 material id sits directly after a 12-byte vector, so the header is read field-by-field, not memcpy'd) followed by verts_dim.xverts_dim.y vertices and tiles_dim.xtiles_dim.y tile bytes.

PointLight

One MOLP point light (Legion+).

PointLightAnim

One MOP2 entry (8.1+): an animated point light with flicker and light-cookie texture data.

Poly2

Per-triangle material info v2 (MPY2, 10.0+): the MOPY replacement with 16-bit fields for multiple-material support.

RenderBatchOverride

One MORB entry (Cata+): a triangle-strip override of the matching MOBA batch's start and count. Same count as MOBA; ignored unless the client renders strips.

ShadowBatch

One MOBS shadow batch (Cata+): the shadow-pass counterpart of a MOBA render batch.

SmoPoly

Per-triangle material info (MOPY).

SmolTile

One MLIQ tile flag byte: bits 0-5 the legacy liquid type, bit 6 fishable, bit 7 shared with an adjacent group.

SmolVert

One MLIQ liquid vertex (8 bytes). The byte layout is fixed but its interpretation depends on the group's liquid type: water/ocean read the named flow fields; magma/slime reinterpret the first four bytes as two int16 texture coordinates (s, t) — use as_magma()/set_magma() for that reading. Both are 8 bytes, so round-trip is layout-agnostic — pick the reading from the group's liquid type.

SmomVert

The magma/slime reading of an MLIQ vertex (8 bytes): two int16 texture coordinates sharing the layout with the water reading (SMOLVert). Obtain one with SMOLVert.as_magma(); which reading is correct is set by the group's liquid type, not stored per vertex.

WMOBatch

A MOBA render batch, abstract over the client version. Construct a concrete version with WMOBatch.for_version(expansion).

WMOBatch.Era

The typed era factories: one method per expansion, each returning the concrete range class covering it — the compile-time twin of ForVersion.

WMOBatchLegionPlus

One MOBA render batch: an index range sharing one material (Legion+ layout with the 16-bit material id).

WMOBatchVanillaToWod

One MOBA render batch: an index range sharing one material, with its low-resolution culling box.

WMOGroupHeader

A MOGP group header, abstract over the client version. Construct a concrete version with WMOGroupHeader.for_version(expansion).

WMOGroupHeader.Era

The typed era factories: one method per expansion, each returning the concrete range class covering it — the compile-time twin of ForVersion.

WMOGroupHeaderShadowlandsPlus

The MOGP group header: names, flags, bounds, portal and batch ranges, fog, liquid and split-group links (9.2+).

WMOGroupHeaderVanillaToBfa

The MOGP group header: names, flags, bounds, portal and batch ranges, fog and liquid.

Structs

CAaBspNode.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.

LightSet.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.

PointLight.Data

A blittable value twin of the NATIVE layout (size 44): 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.

PointLightAnim.Data

A blittable value twin of the NATIVE layout (size 96): 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.

Poly2.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.

RenderBatchOverride.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.

ShadowBatch.Data

A blittable value twin of the NATIVE layout (size 24): 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.

SmoPoly.Data

A blittable value twin of the NATIVE layout (size 2): 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.

SmolTile.Data

A blittable value twin of the NATIVE layout (size 1): 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.

SmolVert.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.

SmomVert.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.

WMOBatchLegionPlus.Data

A blittable value twin of the NATIVE layout (size 24): 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.

WMOBatchVanillaToWod.Data

A blittable value twin of the NATIVE layout (size 24): 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.

WMOGroupHeaderShadowlandsPlus.Data

A blittable value twin of the NATIVE layout (size 68): 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.

WMOGroupHeaderVanillaToBfa.Data

A blittable value twin of the NATIVE layout (size 68): 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

GroupFlags

Group flag bits (MOGP and MOGI flags).

GroupFlags2

Extended group flag bits (MOGP.flags2 and MGI2).

PolyFlags

Per-triangle flag bits (MOPY and MPY2).