|
wowlib 0.0.0
Read & write World of Warcraft client files — a C++26 core
|
| docs | |
| src | |
| wowlib | |
| audit | |
| detail.hpp | Internals of the round-trip audit (namespace wowlib::audit::detail): the per-format driver class — one static member per format, each defined in its own translation unit so the version matrices compile in parallel — plus the small shared primitives (outcome construction, byte-divergence description, unknown-chunk tallying, and the runtime-to-compile-time version dispatch) |
| roundtrip.cpp | |
| roundtrip.hpp | The round-trip audit surface (namespace wowlib::audit): one welded entry point that read->write->compares a single client file with the matching format entity and reports the outcome as a value instead of raising — built for exhaustive sweeps over FileSystem::enumeratePaths() driven from the scripting side, one file per call |
| roundtrip_adt.cpp | The ADT round-trip driver: the write -> parse -> write-again stability compare of one terrain tile (ADT is not byte-perfect — alpha maps are re-encoded and the MHDR/MCIN/MCNK offset tables re-derived), modeled on tests/integration/test_adt_roundtrip.cpp with the reflection diff replaced by the write-stability byte compare and returned outcomes in place of Catch2 assertions |
| roundtrip_blp.cpp | The BLP round-trip driver: byte-perfect rewrite of one texture, modeled on tests/integration/test_blp_roundtrip.cpp with returned outcomes in place of Catch2 assertions |
| roundtrip_m2.cpp | The M2 round-trip driver: the assembly read (satellites baked in) followed by write -> parse -> write-again stability compares of the body, the skel blocks and every skin — offset formats carry no byte-perfect promise, so stability replaces the round-trip tests' reflection diff |
| roundtrip_wdt_wdl.cpp | The WDT and WDL round-trip drivers: byte-perfect rewrite of one main .wdt or .wdl file, modeled on tests/integration/test_wdt_wdl_roundtrip.cpp with returned outcomes in place of Catch2 assertions (the WDT satellite files are separate formats, filtered to skipped:aux-wdt by the classifier) |
| roundtrip_wmo.cpp | The WMO round-trip driver: byte-perfect rewrite of one root and all its group files, modeled on tests/integration/test_wmo_roundtrip.cpp with returned outcomes in place of Catch2 assertions |
| core | |
| buffer.hpp | The owning byte buffer file contents are read into |
| client_builds.hpp | Named ClientVersion constants for the exact client builds format features appeared (or vanished) at — the vocabulary the =since()/=until() chunk annotations and the canonicalization pivot lists spell their versions with, instead of repeating raw ClientVersion{...} literals |
| client_version.cpp | |
| client_version.hpp | Client version identity, the flavor axis that separates a client's CONTENT version from the engine generation its files are laid out for, the storage-kind split both imply, locales, and the versions namespace of release constants |
| error.hpp | The error-handling vocabulary: ErrorCode, Error and the Result<T> alias every fallible wowlib operation returns |
| expansion.hpp | The Expansion enum — the coarse, enumerable version axis the scripting bindings key on — and its mapping onto the ClientVersion constants wowlib targets (versions::) |
| file_key.hpp | File identity types: the strong FileDataID and the FileKey a read request travels as |
| lang.hpp | Binding-language identities welder's core does not name |
| path.cpp | |
| path.hpp | Client-internal path canonicalization |
| reflect.hpp | Internal C++26 reflection utilities (<meta> based) |
| shared_mutex.cpp | |
| shared_mutex.hpp | Reader/writer mutex used across the library |
| db | |
| wdc | |
| binary.hpp | The on-disk binary structures of the WDC family of .db2 formats (wowdev.wiki/DB2): WDC1 (Legion 7.3.5), WDC3 (BfA 8.1 |
| bit_stream.hpp | Little-endian bit streams over record buffers — the primitive the WDC family's bitpacked column storage is built on |
| image.cpp | WdcImage::parse for all four supported flavors, plus the per-field value decoding (declarations and the normalization story in image.hpp) |
| image.hpp | WdcImage — the structural parser of the WDC family (WDC1/WDC3/WDC4/WDC5) and the per-field value decoder |
| read.cpp | The WDC-family decoder (entry point declared in wdc.hpp): drives a parsed WdcImage through the runtime schema into a RecordSink |
| wdc.hpp | The WDC-family codec: the non-templated entry points Table<Record> dispatches to for every column-compressed .db2 flavor — WDC1 (Legion 7.3.5), WDC3 (BfA 8.1 |
| write.cpp | The WDC-family canonical encoder (entry point declared in wdc.hpp) |
| annotations.hpp | The column annotation vocabulary generated client-database record structs declare their schema roles with |
| codec.hpp | The type-erased boundary between the templated Table<Record> facade (table.hpp) and the per-format codecs (wdbc |
| codec_common.cpp | Shared fixed-stride codec internals (codec_detail.hpp): the byte-perfect string pool and the schema-driven inline field decode/encode used by the WDBC and WDB2 codecs |
| codec_detail.hpp | Shared codec internals for the fixed-stride formats (WDBC, WDB2): the string pool that reproduces byte-perfect offsets, and the per-record inline field decode/encode driven by the runtime schema |
| dbd_loader.cpp | SchemaCatalog::fromDbdDir — the runtime WoWDBDefs loader: parse a checkout's definitions directory of .dbd files, resolve every targeted era's member list with EXACTLY dbdgen's rules, assemble a WDBS blob in memory and hand it to fromBlob |
| dyn_table.cpp | DynTable + ColumnRows bodies |
| dyn_table.hpp | DynTable — the generic, runtime-schema client-database table: the ONE table class every binding welds, replacing the ~8.5k generated per-era classes on the binding surface entirely |
| locstring.hpp | LocString — the decoded form of a pre-Cataclysm localized string column (wowdev.wiki "langstringref"): one string per client language slot plus the locale flags field |
| record_bridge.cpp | The erased record bridge's field-access core: every kind-dispatching move between a codec value and a record member, compiled ONCE for all record types (see record_bridge.hpp for why) |
| record_bridge.hpp | The record bridge: ErasedRecordSink / ErasedRecordSource implement the non-templated RecordSink / RecordSource (codec.hpp) over a std::vector<Record> — with the field-access machinery compiled ONCE (record_bridge.cpp), not once per record type |
| schema.hpp | Schema reflection over generated client-database record structs: the column list, record stride and field counts the table engine and the per-magic codecs derive from a record type |
| schema_blob.hpp | The WDBS schema-blob format: a constexpr-parseable view over the compact binary dbdgen emits (--schema-blob-out), carrying every table's per-range column lists for every targeted era |
| schema_catalog.cpp | |
| schema_catalog.hpp | The runtime schema source of the generic ClientDB engine: table name + client version in, a wowlib::db::Column span out — no generated record types involved |
| table.hpp | Table<Record> — the typed client-database facade over the non-templated TableCore engine (table_core.hpp) |
| table_core.cpp | TableCore's method bodies — the whole table engine, compiled once for all generated tables (see table_core.hpp for why) |
| table_core.hpp | TableCore + TableBase — the non-templated heart of every client-database table, and the ONE welded supertype whose methods every generated table class inherits |
| typed.hpp | Typed C++ access to the generic client-database engine: DECLARE YOUR OWN row struct, validated at COMPILE TIME against the same WoWDBDefs data the runtime engine uses |
| wdb2.cpp | The WDB2 codec (declarations in wdb2.hpp) |
| wdb2.hpp | WDB2 — the .db2 format of the Cataclysm..WoD MPQ/early-CASC era (4.0.1.12911 |
| wdbc.cpp | The WDBC codec (declarations in wdbc.hpp) |
| wdbc.hpp | WDBC — the client-database format of every pre-Cataclysm .dbc (and the .dbc leftovers of Cataclysm..Legion clients): a 20-byte header, recordCount fixed-stride records, then the string block |
| formats | |
| adt | |
| chunks | |
| header.hpp | ADT header binary structs (namespace wowlib::formats::adt::chunks): the per-cell MCNK header (SMChunk, 128 bytes) and the flying bounding box (MFBO) |
| liquid.hpp | ADT liquid binary pieces (namespace wowlib::formats::adt::chunks): the small trivially-copyable records the structured liquid entities (adt/liquid.hpp) build on — the MH2O vertex-format enum and UV entry, and the legacy MCLQ vertex union / tile / flow records |
| object.hpp | ADT object/misc binary structs (namespace wowlib::formats::adt::chunks): the per-cell sound emitter (MCSE) and the Shadowlands doodad-set range (MWDR) |
| texture.hpp | ADT texture binary structs (namespace wowlib::formats::adt::chunks): the per-cell texture layer (SMLayer / MCLY), the MTEX texture flags (MTXF) and parameters (MTXP), the terrain-material map (MCMT), color grading (MTCG) and the alpha-map downscale factor (MAMP) |
| adt.hpp | The ADT terrain-tile entity (namespace wowlib::formats::adt): ADT<V>, one map tile, unified across the split ADT files it is stored in |
| boundaries.hpp | ADT version grids, layout pivots and the alpha-format context |
| codec.hpp | The MCAL alpha-map and MCSH shadow-map codecs (namespace wowlib::formats::adt::detail): AlphaMapCodec and ShadowMapCodec |
| convert.hpp | ADT version conversion (namespace wowlib::formats): the ADT's contribution to the generic convert<to>() ladder (formats/convert.hpp) — its SupportedVersions list and, as they are written, the adjacent-version convert_step overloads |
| liquid.hpp | Structured ADT liquid entities (namespace wowlib::formats::adt): the modern MH2O (WotLK+) and the legacy MCLQ (up to and including WotLK), decoded to an editable form |
| map_chunk.hpp | The per-chunk terrain entity (namespace wowlib::formats::adt): MapChunk<V>, one of the 256 MCNK terrain chunks of a tile, fully decoded |
| blp | |
| blp.cpp | Definitions for the BLP entity and its pixel codecs |
| blp.hpp | The BLP entity (namespace wowlib::formats::blp): Blizzard's texture format |
| codec.hpp | The BLP pixel codecs (namespace wowlib::formats::blp::detail): DxtCodec, PaletteCodec, RawCodec and MipmapScaler |
| common | |
| annotations.hpp | The chunk annotation vocabulary format entities declare their binary mapping with |
| chunked_file.hpp | The chunk framework, vocabulary and engine in one header |
| entity_reflect.hpp | The reflection helpers every format engine shares: reading a member's annotations, gating it by the entity's client version, and enumerating an entity's members with its public bases flattened in (how conditionally inherited version-trait bases stay invisible to the engines) |
| file_entity.hpp | |
| flags.hpp | Flag-testing convenience for the binary formats' bit-mask enums |
| fourcc.hpp | FourCC chunk identifiers: compile-time conversion of the four-letter codes to the host integers chunk scanning compares against, and back for diagnostics |
| map_placements.hpp | The map-placement binary records SHARED across the world file formats (namespace wowlib::formats::common, like the math primitives): SMMapObjDef places a WMO on a map (WDT MODF, WDL MODF, ADT MODF) and SMDoodadDef places an M2 (ADT MDDF, WDL MLDD), under their canonical client names |
| string_block.hpp | StringBlock — the decoded representation of a chunk of zero-terminated strings (MOTX, MOGN, MODN, ...), keyed by the byte offsets other chunks reference entries with |
| types.hpp | The binary-level math and color primitives shared across WoW file formats (wowdev.wiki Common_Types), under their established client names |
| validation.hpp | The validation vocabulary: the severity scale, the single finding and the report validate() fills |
| version_range.hpp | Version-range canonicalization: the machinery behind collapsing a versioned family's instantiations to its REAL layout permutations |
| version_slot.hpp | The conditional-base mechanism that gives a versioned chunked entity exactly the fields its client version defines |
| m2 | |
| bone | |
| bone.hpp | The .bone entity (namespace wowlib::formats::m2::bone), WoD+: a tiny chunked file (with a raw u32 prelude) carrying facial-pose bone offset matrices — one file per variant of the FacePose (808) sequence, referenced by BFID |
| chunked | |
| chunked.hpp | The Legion+ chunked .m2 shell (namespace wowlib::formats::m2::chunked): M2ChunkedFile — the on-disk chunk stream that wraps the MD20 image (MD21) beside the satellite chunks (FileDataID references, extended particle data, parent-model overrides, inline physics) |
| records.hpp | Legion+ companion-chunk records (namespace wowlib::formats::m2::chunked::record): the payload types of the chunked .m2 shell's satellite chunks (AFID entries, extended-particle blocks, parent-model overrides) |
| root | |
| record | |
| bone.hpp | M2 skeleton records (namespace wowlib::formats::m2::root::record): M2CompBone across its eras |
| effects.hpp | M2 effect-emitter records (namespace wowlib::formats::m2::root::record): ribbon emitters and the particle emitters — the format's most layout-turbulent record, in four eras (vanilla statics, late-TBC packed header, WotLK FBlock ramps + four spin fields, Cata+ multi-texturing) |
| material.hpp | M2 geometry, texture and material records (namespace wowlib::formats::m2::root::record): the global vertex, the texture definitions and their animated color/weight/transform companions |
| scene.hpp | M2 scene records (namespace wowlib::formats::m2::root::record): attachments, events, lights and cameras — the non-geometry model furniture |
| sequence.hpp | M2 animation-sequence records (namespace wowlib::formats::m2::root::record): M2Sequence across its three layout eras, the sequence flags, and the pre-WotLK playable-animation fallback entry |
| track.hpp | The M2 animation vocabulary (namespace wowlib::formats::m2::root::record): the small fixed-size primitives (M2Range, M2Bounds, M2Loop, M2CompQuat, M2Box, M2SplineKey) and the track types every animated record embeds |
| root.hpp | The MD20 body entity (namespace wowlib::formats::m2::root): M2Root — the client's own name for the offset-addressed model payload |
| skin | |
| records.hpp | M2 skin-profile records (namespace wowlib::formats::m2::skin): the LOD view onto the model — local vertex/index/bone lookups, submeshes and render batches |
| skin.hpp | The external .skin file entity (namespace wowlib::formats::m2::skin), WotLK+: the 'SKIN' magic followed by one M2SkinProfile — held as an inline member, so the on-disk layout is byte-identical to the embedded pre-WotLK profiles while the entity keeps a single welded facade base |
| boundaries.hpp | The M2 version vocabulary: the layout pivots record/entity partial specializations key on, and the MD20 formatVersion written for each targeted client |
| convert.hpp | M2 version conversion (namespace wowlib::formats): the M2's contribution to the generic convert<to>() ladder (formats/convert.hpp) — its SupportedVersions list and, as they are written, the adjacent-version convert_step overloads translating one era's layout to the next |
| m2.hpp | The M2 entity (namespace wowlib::formats::m2): a whole model with its satellite files baked in, versioned on the client it is laid out for |
| offset_block.hpp | The offset-format storage vocabulary and serializer engine for the M2 family, in one header |
| satellites.hpp | The M2 family's satellite-file vocabulary (namespace wowlib::formats::m2), shared by the fs-level read/write definitions in m2.hpp and skeleton.hpp: |
| skeleton.hpp | The .skel skeleton entity (namespace wowlib::formats::m2), 7.3+: a FIRST-CLASS entity with its own filesystem read/write — skeletons are SHARED between models (SKPD parent links), so an M2 references its skeleton rather than owning it exclusively |
| wdl | |
| chunks | |
| objects.hpp | WDL object-placement chunk binary structs (namespace wowlib::formats::wdl::chunks) |
| skyscene.hpp | WDL sky-scene chunk binary structs (namespace wowlib::formats::wdl::chunks), Shadowlands+: distant scripted scenery — sky scenes tied to SkySceneXPlayerCondition, their conditions and placed objects, plus the War Within scene-living schedule records |
| tiles.hpp | WDL per-tile chunk binary structs (namespace wowlib::formats::wdl::chunks): the MARE low-resolution heightmap, the MAHO hole mask and the MAOE ocean mask |
| boundaries.hpp | WDL version grid and canonicalization pivots |
| convert.hpp | WDL version conversion (namespace wowlib::formats): the WDL's contribution to the generic convert<to>() ladder (formats/convert.hpp) — its SupportedVersions list and, as they are written, the adjacent-version convert_step overloads |
| wdl.hpp | The WDL entity (namespace wowlib::formats::wdl): a map's low-resolution heightmap — the background mountain silhouettes and the minimap fallback |
| wdt | |
| fogs | |
| chunks | |
| records.hpp | _fogs.wdt chunk binary structs (namespace wowlib::formats::wdt::fogs::chunks) |
| fogs.hpp | The _fogs.wdt volumetric-fog satellite entity (namespace wowlib::formats::wdt::fogs), Legion 7.2.5+: placed fog volumes for terrain maps |
| lights | |
| chunks | |
| records.hpp | _lgt.wdt chunk binary structs (namespace wowlib::formats::wdt::lights::chunks): the WoD point lights (MPLT), their Legion replacement (MPL2), the Shadowlands revision (MPL3), spot lights (MSLT) and the light texture animations (MLTA) |
| lights.hpp | The _lgt.wdt lights satellite entity (namespace wowlib::formats::wdt::lights), WoD+: freely placed map lights — point lights under lamp posts and the like, plus Legion's spot lights and light texture animations |
| mpv | |
| chunks | |
| records.hpp | _mpv.wdt chunk binary structs (namespace wowlib::formats::wdt::mpv::chunks) |
| mpv.hpp | The _mpv.wdt particulate-volume satellite entity (namespace wowlib::formats::wdt::mpv), BfA 8.0.1+: weather particulate volumes |
| occlusion | |
| chunks | |
| records.hpp | _occ.wdt chunk binary structs (namespace wowlib::formats::wdt::occlusion::chunks) |
| occlusion.hpp | The _occ.wdt occlusion satellite entity (namespace wowlib::formats::wdt::occlusion), WoD+: low-resolution heightmaps that occlude everything behind them, one per ADT tile |
| root | |
| chunks | |
| header.hpp | WDT main-file chunk binary structs (namespace wowlib::formats::wdt::root::chunks): the MPHD map header (both the pre-8.1 layout and the 8.1+ FileDataID layout), the MAIN tile table entry and the MAID per-tile FileDataID record, with their flag enums |
| root.hpp | The WDT main-file entity (namespace wowlib::formats::wdt::root): the map header, the 64x64 tile table, the per-tile FileDataID table (8.1+) and the global-WMO reference of WMO-only maps |
| boundaries.hpp | WDT version grids and per-family canonicalization pivots |
| convert.hpp | WDT version conversion (namespace wowlib::formats): the WDT's contribution to the generic convert<to>() ladder (formats/convert.hpp) — its SupportedVersions list and, as they are written, the adjacent-version convert_step overloads |
| wdt.hpp | The WDT entity (namespace wowlib::formats::wdt): a map description — the main .wdt file plus its era's satellite files (_occ/_lgt since WoD, _fogs since Legion 7.2.5, _mpv since BfA) unified, versioned on the client it is laid out for |
| wmo | |
| group | |
| chunks | |
| geometry.hpp | WMO group geometry: polys, batches, BSP (MOPY, MOBA, MOBN) (namespace wowlib::formats::wmo::group::chunks) |
| header.hpp | The MOGP group header and group flag bits (namespace wowlib::formats::wmo::group::chunks) |
| light.hpp | WMO group lights and light sets (MOLP, MLSS/MLSP/MLSK, MOP2) (namespace wowlib::formats::wmo::group::chunks) |
| liquid.hpp | WMO group liquid (MLIQ) (namespace wowlib::formats::wmo::group::chunks) |
| group.hpp | The WMO group-file entities (namespace wowlib::formats::wmo::group): the MOGP container body (geometry, batches, collision, liquid and the later-expansion light/volume references) and the group file wrapping it |
| root | |
| chunks | |
| doodad.hpp | WMO doodad sets and placements (MODS, MODD) (namespace wowlib::formats::wmo::root::chunks) |
| environment.hpp | WMO fog and ambient volumes (MFOG, MAVD/MAVG/MBVD) (namespace wowlib::formats::wmo::root::chunks) |
| header.hpp | WMO root header (MOHD) and its flag bits (namespace wowlib::formats::wmo::root::chunks) |
| light.hpp | WMO lights and their extensions (MOLT, MOLV, MNLD) (namespace wowlib::formats::wmo::root::chunks) |
| material.hpp | WMO materials and UV animation (MOMT, MOUV) (namespace wowlib::formats::wmo::root::chunks) |
| structure.hpp | WMO group info, portals and visible blocks (namespace wowlib::formats::wmo::root::chunks) |
| root.hpp | The WMO root-file entity (namespace wowlib::formats::wmo::root): header, materials, group metadata, portals, lights, doodads, fog and the later-expansion volume/light extensions |
| boundaries.hpp | WMO version pivots that change a binary-struct layout (not just chunk presence) |
| convert.hpp | WMO version conversion (namespace wowlib::formats): the WMO's contribution to the generic convert<to>() ladder (formats/convert.hpp) — its SupportedVersions list and, as they are written, the adjacent-version convert_step overloads that translate one era's chunk-set changes to the next |
| wmo.hpp | The WMO entity (namespace wowlib::formats::wmo): a v17 world map object with its root file (wmo::root) and all group files (wmo::group) unified, versioned on the client it is laid out for |
| convert.hpp | Version conversion scaffolding: convert<to>() composes hand-written adjacent-version steps along a format's supported-version ladder |
| fs | |
| casc | |
| casc_storage.cpp | |
| casc_storage.hpp | The CascLib-backed storage for CASC-era clients |
| mpq | |
| mpq_chain.cpp | |
| mpq_chain.hpp | Per-version MPQ archive chain tables and their expansion against a real or fake Data/ directory |
| mpq_storage.cpp | |
| mpq_storage.hpp | The StormLib-backed storage for MPQ-era clients |
| client_filesystem.hpp | The static composition of one client's file access |
| client_install.cpp | |
| client_install.hpp | Reading a client installation's own identity off disk: which product it is, which build, and therefore which flavor and format lineage |
| csv_listfile.cpp | |
| csv_listfile.hpp | The CSV-backed listfile provider: one working file ('fileDataId;filepath' per line) that is both read from and written to |
| fdid_allocator.hpp | The monotonic allocator behind custom (non-Blizzard) FileDataIDs |
| filesystem.cpp | |
| filesystem.hpp | The runtime facade over the static compositions — the primary welder binding surface of the fs layer |
| listfile.hpp | The pluggable listfile-provider contract and the no-database provider for clients that need none |
| project_directory.cpp | |
| project_directory.hpp | The project-directory overlay: a local directory acting as the ultimate patch over any client storage |
| storage_backend.hpp | The storage-backend concept ClientFileSystem composes over |
| wowlib.hpp | Umbrella header: the whole public wowlib API |