VMap Pipeline

Client data & collision extractors

Status tracking: live progress for Tools 1–4 and runtime collision is on the Core Roadmap. Update that page when milestones close; this doc keeps technical detail.

Strategy: Full in-tree C++ implementation — zero wrapped binaries for the collision pipeline.

Primary goal: Client-compatible server collision artifacts (.map, vmaps/, mmaps/) so VMapManager2 / mmap runtime replaces MapCollisionQueriesStub.

Client target: WoW 4.3.4 / build 15595.

Scope overview

AreaTargetPurposeStatus
MPQ + patch orderFirelandsExtractCommonMpqPatchChain, WowDataMpqListDone
DBC / DB2 extractfirelands-dbc-extractorDBFilesClient → output treeDone
Raw client mapsfirelands-map-extractorWDT/ADT/WDL from MPQsDone
TUI launcherfirelands-extractorsFTXUI: DBC + raw mapsPartial
Shared vmap mathFirelandsVmapCommonBIH, DBC reader, ModelSpawnDone
Server .map + tilelistfirelands-map-extractor-vmapTool 1 — ADT/WDT → maps/*.mapImplemented
VMap4 extractfirelands-vmap4-extractorTool 2 — Buildings/Ported
VMap4 assemblefirelands-vmap4-assemblerTool 3 — vmaps/Implemented
MMAP generatefirelands-mmap-generatorTool 4 — mmaps/ (Recast/Detour)Not started
Runtime collisionworldIMapCollisionQueriesStub only

Two “map extractors”

BinaryLocationOutput
firelands-map-extractortools/extractors/Raw client files under World/maps/…
firelands-map-extractor-vmaptools/vmap/map_extractor/Server maps/<id><yy><xx>.map + <id>.tilelist

Collision pipeline (end-to-end)

WoW 4.3.4 Data/  (MPQ chain via StormLib)


  Tool 1: firelands-map-extractor-vmap  →  maps/*.map + *.tilelist


  Tool 2: firelands-vmap4-extractor     →  Buildings/


  Tool 3: firelands-vmap4-assembler     →  vmaps/


  Tool 4: firelands-mmap-generator      →  mmaps/  (Recast/Detour)


  worldserver: VMap + Detour loaders → real IMapCollisionQueries

Run order: Tool 1 → 2 → 3 → 4 for a full collision dataset. Tool 4 requires Tool 1 and Tool 3 outputs.

Magic constants (format must match client tooling)

ConstantValueUsed in
MAP_MAGIC"MAPS"Server .map tiles
VMAP_MAGIC"VMAP"VMap tree/tile headers
MMAP_MAGIC"MMAP"Navmesh tiles

Defined in VMapDefinitions.h under tools/vmap/; all extractors must use identical values.

Runtime integration

Today worldserver.yaml sets Collision.DataRoot but MapCollisionQueriesStub returns safe defaults. Closing criteria:

  1. Generate collision dataset with Tools 1–4 against a 4.3.4 client
  2. Wire VMapManager2 + Detour mmap loader in world
  3. Wire IMapCollisionQueries implementation; remove stub
  4. Integration tests: line-of-sight, height queries, pathfinding spot-checks

Configuration

In worldserver.yaml:

Collision:
  DataRoot: "/path/to/collision-output"

Expected layout under DataRoot: maps/, vmaps/, mmaps/ (standard Cataclysm server data layout).