20#include <welder/vocabulary.hpp>
41 =welder::weld_as(
"M2ChunkedFile"),
44 A chunked .m2 shell (Legion+), abstract over the client version.
45 Construct a concrete version with M2ChunkedFile.for_version(expansion); the
46 per-version M2ChunkedFile* classes are subclasses. See
47 https://wowdev.wiki/M2#Chunks.)")
65 The chunked .m2 shell for one Legion+ client version: the MD21 image
66 blob plus the satellite chunks. An untouched shell rewrites
67 byte-for-byte. See https://wowdev.wiki/M2#Chunks.)")
74 =welder::mark::exclude,
75 =welder::doc(
"The MD20 image TRANSPORT blob; offsets inside are "
76 "relative to this payload. Hidden from the bindings: a "
77 "chunk-level read keeps it verbatim, but the M2 assembly "
78 "decodes it into M2.root and drops the bytes — the "
79 "decoded body is the source of truth, and the assembly "
80 "write re-encodes it here.")]]
87 =welder::mark::no_reassign,
88 =welder::doc(
".phys FileDataID (PFID); 0 or 1 entries.")]]
95 =welder::mark::no_reassign,
96 =welder::doc(
".skin FileDataIDs (SFID): num_skin_profiles view entries, "
97 "then the LOD-band skins.")]]
104 =welder::mark::no_reassign,
105 =welder::doc(
".anim FileDataIDs (AFID), one per external (animation, "
106 "variation) pair.")]]
113 =welder::mark::no_reassign,
114 =welder::doc(
".bone FileDataIDs (BFID), one per FacePose variant.")]]
121 =welder::mark::no_reassign,
122 =welder::doc(
"Texture transform flags (TXAC), one 2-byte record per "
123 "material then per particle emitter.")]]
130 =welder::mark::no_reassign,
131 =welder::doc(
"Extended particle parameters (EXPT), one per emitter; "
132 "superseded by EXP2 when both exist.")]]
139 =welder::doc(
"Extended particle parameters with alpha-cutoff ramps "
140 "(EXP2), one per emitter.")]]
147 =welder::doc(
"Parent-model sequence blacklist (PABC).")]]
154 =welder::doc(
"Parent texture weights (PADC); offset-based track "
155 "payload kept verbatim.")]]
162 =welder::doc(
"Parent sequence bounds (PSBC).")]]
169 =welder::doc(
"Parent event data (PEDC); offset-based track payload "
177 =welder::mark::no_reassign,
178 =welder::doc(
".skel FileDataID (SKID); 0 or 1 entries.")]]
185 =welder::mark::no_reassign,
186 =welder::doc(
"Texture FileDataIDs (TXID), replacing the in-image "
187 "texture filenames, one per texture.")]]
194 =welder::doc(
"LOD data (LDV1); layout partially known, kept verbatim.")]]
201 =welder::mark::no_reassign,
202 =welder::doc(
"Recursive (child-emitter) particle model FileDataIDs "
203 "(RPID), one per emitter.")]]
204 std::vector<std::uint32_t> recursiveParticleModelFdids;
210 =welder::mark::no_reassign,
211 =welder::doc(
"Geometry particle model FileDataIDs (GPID), one per "
213 std::vector<std::uint32_t> geometryParticleModelFdids;
219 =welder::doc(
"Waterfall render path v1 (WFV1); undocumented, kept "
227 =welder::doc(
"Waterfall render path v2 (WFV2); undocumented, kept "
235 =welder::doc(
"Particle geoset data (PGD1), one geoset per emitter "
236 "(wowdev dates it to the 1.13.2.30172 classic build — "
237 "the 8.2.0 retail era).")]]
244 =welder::doc(
"Waterfall render path v3 (WFV3); shader parameter block, "
252 =welder::doc(
"Inline physics (PFDC): a whole .phys image plus "
253 "alignment padding, kept verbatim (structured PHYS is a "
254 "follow-up milestone). wowdev dates it to the 9.0.1 alpha, "
255 "but 8.3.7 shipped mid-alpha with the backport — 31 item "
256 "M2s in the fleet client carry it.")]]
263 =welder::doc(
"Edge fade data (EDGF), applied to batches with flags2 "
264 "0x8; kept verbatim.")]]
271 =welder::doc(
"Distance-based model alpha attenuation coefficients "
272 "(NERF); kept verbatim.")]]
279 =welder::doc(
"Per-light detail overrides (DETL), kept verbatim: real "
280 "9.x files carry 16-byte records where wowdev documents "
281 "12 (see M2LightDetail for the known half).")]]
288 =welder::doc(
"DBOC; undocumented (16 or 32 bytes seen), kept "
296 =welder::doc(
"AFRA (Dragonflight+); not yet observed, kept verbatim.")]]
303 =welder::doc(
"Player-housing collision mesh (PCOL); offset-based "
304 "layout, kept verbatim.")]]
311 =welder::doc(
"DPIV; undocumented, kept verbatim.")]]
The chunk framework, vocabulary and engine in one header.
Named ClientVersion constants for the exact client builds format features appeared (or vanished) at —...
Client version identity, the flavor axis that separates a client's CONTENT version from the engine ge...
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 M2 version vocabulary: the layout pivots record/entity partial specializations key on,...
Legion+ companion-chunk records (namespace wowlib::formats::m2::chunked::record): the payload types o...
constexpr ClientVersion Legion_ShadowsOfArgus_24500
legion, Shadows of Argus PTR, 7.3.0 build 24500 (the .m2 parent-model and .skel satellite chunks).
constexpr ClientVersion BfA_RiseOfAzshara
BfA, Rise of Azshara, 8.2.0 build 30080 (WFV1/WFV2/PGD1).
constexpr ClientVersion DF
dragonflight (any 10.x client).
constexpr ClientVersion TWW_LegacyOfArathor
TWW, Legacy of Arathor, 11.1.7 build 60520 (PCOL/DPIV).
constexpr ClientVersion SL_Alpha_34365
shadowlands alpha, 9.0.1 build 34365 (DETL).
constexpr ClientVersion BfA_VisionsOfNzoth_35662
BfA, Visions of N'Zoth, 8.3.7 build 35662 (M2 PFDC inline physics — wowdev dates the chunk to the 9....
constexpr ClientVersion Legion_Alpha
legion alpha, 7.0.1 build 20740 — the first chunked-format build (the .m2 MD21 container,...
constexpr ClientVersion Legion
legion (any 7.x client).
constexpr ClientVersion SL_Alpha_33978
shadowlands alpha, 9.0.1 build 33978 (WFV3/EDGF/NERF/DBOC; PFDC is dated here by wowdev but reached l...
constexpr ClientVersion BfA_TidesOfVengeance
BfA, Tides of Vengeance PTR, 8.1.0 build 27826 (RPID/GPID, WMO MOSI/MODI).
constexpr ClientVersion BfA_Beta
Battle for Azeroth beta, 8.0.1 build 26629 (TXID/LDV1).