10#include <welder/vocabulary.hpp>
24 =welder::doc(
"Group flag bits (MOGP and MOGI flags).")
26 HasBsp [[=welder::doc(
"Has a collision BSP tree (MOBN/MOBR).")]] = 0x1,
28 welder::doc(
"Has a light map (v14 legacy; unused since vanilla).")]] =
31 Exterior [[=welder::doc(
"Outdoor group (SMOGroup::EXTERIOR).")]] = 0x8,
32 ExteriorLit [[=welder::doc(
"Use exterior lighting; no local diffuse.")]] = 0x40,
33 Unreachable [[=welder::doc(
"Unreachable (SMOGroup::UNREACHABLE).")]] = 0x80,
35 welder::doc(
"Show the exterior sky inside this interior group.")]] =
37 HasLights [[=welder::doc(
"Has light references (MOLR).")]] = 0x200,
40 "Legion+: an LOD group. Pre-Cata: marked the unused MPB* chunks.")]] =
42 HasDoodads [[=welder::doc(
"Has doodad references (MODR).")]] = 0x800,
44 welder::doc(
"Has liquid (MLIQ), or an implicitly full volume.")]] =
46 Interior [[=welder::doc(
"Indoor group (SMOGroup::INTERIOR).")]] = 0x2000,
48 welder::doc(
"Pre-WotLK: whether mount queries are allowed.")]] = 0x8000,
50 welder::doc(
"Always draw (clears exterior after group creation).")]] =
54 welder::doc(
"Show the skybox; unset automatically when MOSB is absent.")]]
57 welder::doc(
"The liquid is ocean, not water (LiquidType handling).")]] =
59 MountAllowed [[=welder::doc(
"Mounting is allowed in this group.")]] = 0x200000,
61 welder::doc(
"Has a second MOCV layer; only its alpha is used.")]] =
64 welder::doc(
"Has two MOTV texcoord sets (SMOGroup::TVERTS2).")]] =
67 welder::doc(
"An antiportal occluder group (SMOGroup::ANTIPORTAL).")]] =
70 welder::doc(
"Exterior culling (SMOGroup::EXTERIOR_CULL, Legion+).")]] =
73 "Has three MOTV texcoord sets, e.g. for shader 18.")]] = 0x40000000
79 =welder::doc(
"Extended group flag bits (MOGP.flags2 and MGI2).")
82 welder::doc(
"Has terrain-cutting portal planes (MOPL, WoD+).")]] = 0x1,
85 AttachmentMesh [[=welder::doc(
"An attachment mesh (9.2 - 11.0).")]] = 0x100
99 =welder::weld_as(
"WMOGroupHeader"),
101 =welder::doc(
"A MOGP group header, abstract over the client version. "
102 "Construct a concrete version with "
103 "WMOGroupHeader.for_version(expansion).")
111 template <ClientVersion V>
118 "The MOGP group header: names, flags, bounds, portal and batch "
119 "ranges, fog and liquid.")
121 [[=welder::doc(
"Byte offset of the group name in MOGN.")]]
124 [[=welder::doc(
"Byte offset of the descriptive name in MOGN.")]]
127 [[=welder::doc(
"Group flags; GroupFlags bits.")]]
130 [[=welder::doc(
"Group bounding box.")]]
133 [[=welder::doc(
"First portal reference in MOPR.")]]
136 [[=welder::doc(
"Portal reference count.")]]
139 [[=welder::doc(
"Transition batch count (MOBA prefix).")]]
142 [[=welder::doc(
"Interior batch count.")]]
145 [[=welder::doc(
"Exterior batch count.")]]
148 [[=welder::doc(
"The fourth batch-count slot; unused by clients.")]]
151 [[=welder::doc(
"Fog indices into MFOG.")]]
152 std::array<std::uint8_t, 4>
fogIds{};
154 [[=welder::doc(
"Group liquid type; interpretation depends on the root "
155 "use_liquid_type_dbc_id flag.")]]
156 std::uint32_t groupLiquid = 0;
158 [[=welder::doc(
"Foreign key into WMOAreaTable (m_WMOGroupID).")]]
159 std::uint32_t uniqueId = 0;
161 [[=welder::doc(
"Extended flags (Cataclysm+); GroupFlags2 bits.")]]
165 "Unused up to 9.1.5 (becomes the split-group indices in 9.2+).")]]
166 std::uint32_t unused = 0;
176 "The MOGP group header: names, flags, bounds, portal and batch "
177 "ranges, fog, liquid and split-group links (9.2+).")
179 [[=welder::doc(
"Byte offset of the group name in MOGN.")]]
180 std::uint32_t groupName = 0;
182 [[=welder::doc(
"Byte offset of the descriptive name in MOGN.")]]
183 std::uint32_t descriptiveGroupName = 0;
185 [[=welder::doc(
"Group flags; GroupFlags bits.")]]
188 [[=welder::doc(
"Group bounding box.")]]
191 [[=welder::doc(
"First portal reference in MOPR.")]]
194 [[=welder::doc(
"Portal reference count.")]]
197 [[=welder::doc(
"Transition batch count (MOBA prefix).")]]
200 [[=welder::doc(
"Interior batch count.")]]
201 std::uint16_t intBatchCount = 0;
203 [[=welder::doc(
"Exterior batch count.")]]
204 std::uint16_t extBatchCount = 0;
206 [[=welder::doc(
"The fourth batch-count slot; unused by clients.")]]
207 std::uint16_t batchTypeD = 0;
209 [[=welder::doc(
"Fog indices into MFOG.")]]
210 std::array<std::uint8_t, 4> fogIds{};
212 [[=welder::doc(
"Group liquid type; interpretation depends on the root "
213 "use_liquid_type_dbc_id flag.")]]
214 std::uint32_t groupLiquid = 0;
216 [[=welder::doc(
"Foreign key into WMOAreaTable (m_WMOGroupID).")]]
217 std::uint32_t uniqueId = 0;
219 [[=welder::doc(
"Extended flags (Cataclysm+); GroupFlags2 bits.")]]
223 "Parent split group, or the first child (9.2+ split groups).")]]
224 std::int16_t parentOrFirstChildSplitGroupIndex = -1;
226 [[=welder::doc(
"Next sibling in the split-group chain.")]]
227 std::int16_t nextSplitChildGroupIndex = -1;
237 template <ClientVersion V>
Client version identity, the flavor axis that separates a client's CONTENT version from the engine ge...
Flag-testing convenience for the binary formats' bit-mask enums.
Binding-language identities welder's core does not name.
#define WOWLIB_CS_FAMILY_SURFACE
The C# rod's family-surface opt-in, spellable in every build.
The binary-level math and color primitives shared across WoW file formats (wowdev....
#define WOWLIB_EMPTY_BASES
Empty-base optimization for a binary struct that carries a (welded, empty) facade base: gcc/clang alw...
WMO version pivots that change a binary-struct layout (not just chunk presence).