25 using namespace wowlib::formats::wdt::root::chunks;
38 =welder::weld_as(
"WDTRoot"),
41 A WDT main file, abstract over the client version. The main file says
42 which map tiles exist (and, since 8.1, which FileDataIDs serve them),
43 or references the one global WMO of an object-only map. Construct a
44 concrete version with WDTRoot.for_version(expansion); the per-version
45 WDTRoot* classes are subclasses. See https://wowdev.wiki/WDT.)")
59 =welder::mark::no_reassign,
61 R
"(Per-tile FileDataIDs (MAID, 8.1.0.28294+): 64 x 64 records in
62 row-major order (y outer, x inner), one per map tile —
63 engaged by the has_maid header flag. WMO-only maps omit
65 std::vector<MapFileDataIDs> mapFdids;
75 R
"(Map anima paths (MANM, 9.0+): the Shadowlands anima stream
76 cables and their node chains. A versioned variable-length
77 layout, kept opaque.)")]]
94 template <ClientVersion V>
98 A WDT main file for one client version: the map header, the 64x64
99 tile table (row-major, y outer), the per-tile FileDataIDs (8.1+) and
100 the global WMO of object-only maps. An instance read from a client
101 file rewrites byte-for-byte until modified. See
102 https://wowdev.wiki/WDT.)")
113 =welder::doc(
"The WDT format version; 18 for every supported client.")]]
119 "The map header (MPHD): flags and, since 8.1, the satellite "
125 =welder::mark::no_reassign,
127 R
"(The tile table (MAIN): 64 x 64 records in row-major order
128 (y outer, x inner), flagging which tiles have an ADT.)")
130 std::vector<SMAreaInfo> tiles;
136 R
"(The global-WMO filename (MWMO) of a WMO-only map, as a string
137 block holding the one zero-terminated path (at most 0x100
138 bytes). Terrain maps of pre-8.1 clients still carry the chunk
139 empty; FileDataID-era terrain maps drop it.)")]]
145 =welder::mark::no_reassign,
147 R
"(The global-WMO placement (MODF) of a WMO-only map; at most one
148 record. Its name_id is unused — the client always loads the
149 MWMO content (or, in FileDataID-era files without MWMO, treats
150 name_id as the WMO FileDataID).)")]]
151 std::vector<SMMapObjDef> globalWmo;
158 static constexpr std::array ChunkOrder = {
173 [[=welder::mark::exclude]]
178 "tiles", std::format(
"the MAIN table holds {} records, not 64*64", tiles.size()));
181 if constexpr (
requires { this->mapFdids; })
182 if (!this->mapFdids.empty() && this->mapFdids.size() !=
WdtTileSlots)
184 std::format(
"the MAID table holds {} records, not 64*64", this->mapFdids.size()));
187 if (globalWmo.size() > 1)
189 std::format(
"{} global WMO placements; a map has at most one", globalWmo.size()));
199 template <ClientVersion V>
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...
FourCC chunk identifiers: compile-time conversion of the four-letter codes to the host integers chunk...
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 map-placement binary records SHARED across the world file formats (namespace wowlib::formats::com...
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_28294
BfA, Tides of Vengeance, 8.1.0 build 28294 (WDT MAID and the MPHD FileDataID layout — the namehash re...
StringBlock — the decoded representation of a chunk of zero-terminated strings (MOTX,...
The conditional-base mechanism that gives a versioned chunked entity exactly the fields its client ve...
WDT version grids and per-family canonicalization pivots.