Kelsidavis-WoWee/src/pipeline
Kelsi 4868f780cc feat(pipeline): add WFAC (Wowee Faction Catalog) format
Novel open replacement for Blizzard's Faction.dbc +
FactionTemplate.dbc + the AzerothCore-style
reputation_reward / reputation_spillover SQL tables. The
17th open format added to the editor.

Combines the "displayable Faction" (player-facing name +
reputation thresholds for friendly/honored/revered/exalted)
with the "FactionTemplate matrix" (which factions are
hostile to which) into one entry. The runtime walks the
catalog to answer two questions:
  • "Will faction A attack faction B on sight?" -> enemy list
  • "What rep tier is the player with X?"      -> thresholds

Cross-references with previously-added formats:
  WCRT.entry.factionId       -> WFAC.entry.factionId
  WFAC.entry.parentFactionId -> WFAC.entry.factionId
  WFAC.entry.enemies[]       -> WFAC.entry.factionId
  WFAC.entry.friends[]       -> WFAC.entry.factionId

The starter preset's factionId 35 (Friendly) and 14
(Hostile) deliberately match the WCRT preset defaults, so
the demo content stack is consistent: WCRT.makeBandit's
factionId=14 has a real entry in WFAC.makeStarter that
declares it hostile to friendly NPCs (35) and players (1).

Format:
  • magic "WFAC", version 1, little-endian
  • per faction: factionId / parentFactionId / name /
    description / reputationFlags / baseReputation /
    7 ascending tier thresholds (hostile..exalted) /
    enemies[] / friends[]

Enums:
  • ReputationFlags: VisibleOnTab / AtWarDefault / Hidden /
                      NoReputation / IsHeader (group label)
  • Tier (canonical): Hated / Hostile / Unfriendly /
                       Neutral / Friendly / Honored /
                       Revered / Exalted

API: WoweeFactionLoader::save / load / exists / findById +
WoweeFaction::isHostile(a, b); presets makeStarter (3-faction
demo matching WCRT defaults), makeAlliance (header +
Stormwind / Darnassus / Ironforge with reciprocal friend
lists + Defias enemy), makeWildlife (4 beast factions, each
hostile to player but ignoring other beasts).

CLI added (5 flags, 514 documented total now):
  --gen-factions / --gen-factions-alliance / --gen-factions-wildlife
  --info-wfac / --validate-wfac

Validator catches: factionId=0 + duplicates, empty name,
threshold ordering violations (hostile must be < unfriendly
< neutral < ... < exalted), self-listed as enemy or friend,
faction in both enemies and friends (incoherent).
2026-05-09 15:37:59 -07:00
..
adt_loader.cpp fix(adt): scrub NaN/inf in MDDF + MODF placement floats 2026-05-06 06:05:17 -07:00
asset_manager.cpp feat(runtime): pick up JSON DBC sidecars from --emit-json-dbc 2026-05-06 10:43:13 -07:00
asset_manifest.cpp Replace MPQ runtime with loose file asset system 2026-02-12 20:32:14 -08:00
blp_loader.cpp refactor: name ADT vertex constants, add BLP decompression comments 2026-03-30 14:28:22 -07:00
custom_zone_discovery.cpp fix(zones): clamp discovery mapId and tile coords on scan 2026-05-06 07:00:04 -07:00
dbc_layout.cpp fix: auto-detect CharSections.dbc layout and add Blood Elf/Draenei NPC voices 2026-03-23 11:00:49 -07:00
dbc_loader.cpp fix(dbc): skip non-array rows in loadJSON instead of failing 2026-05-06 10:07:49 -07:00
loose_file_reader.cpp Replace MPQ runtime with loose file asset system 2026-02-12 20:32:14 -08:00
m2_loader.cpp feat(rendering): implement spell visual effects with bone-tracked ribbons and particles 2026-04-07 11:27:59 +03:00
terrain_mesh.cpp fix(terrain): hide chunk grid by tiling textures 4× per chunk 2026-05-08 12:34:16 -07:00
wdt_loader.cpp fix(parsing): bail on suspicious maskBlockCount in CREATE_OBJECT blocks 2026-04-05 20:12:17 -07:00
wmo_loader.cpp fix: guard fsPath underflow, name WMO doodad mask, add why-comments 2026-03-30 14:33:08 -07:00
wowee_building.cpp fix(wob): reject load on out-of-range string lengths 2026-05-06 09:23:19 -07:00
wowee_collision.cpp fix(woc): cap triangle count and clamp tile coords on save 2026-05-06 09:08:07 -07:00
wowee_creatures.cpp feat(pipeline): add WCRT (Wowee Creature Template) format 2026-05-09 15:18:44 -07:00
wowee_factions.cpp feat(pipeline): add WFAC (Wowee Faction Catalog) format 2026-05-09 15:37:59 -07:00
wowee_items.cpp feat(pipeline): add WIT (Wowee Item Template) format 2026-05-09 15:04:48 -07:00
wowee_light.cpp feat(pipeline): add WOL preset variants for cave/dungeon/night 2026-05-09 14:01:26 -07:00
wowee_loot.cpp feat(pipeline): add WLOT (Wowee Loot Table) format 2026-05-09 15:11:08 -07:00
wowee_model.cpp feat(extract): emit WOM and WOB side-files (M2/WMO → open formats) 2026-05-06 10:32:17 -07:00
wowee_model_fromm2.cpp feat(extract): emit WOM and WOB side-files (M2/WMO → open formats) 2026-05-06 10:32:17 -07:00
wowee_objects.cpp feat(pipeline): add WGOT (Wowee Game Object Template) format 2026-05-09 15:31:49 -07:00
wowee_quests.cpp feat(pipeline): add WQT (Wowee Quest Template) format 2026-05-09 15:25:02 -07:00
wowee_sound.cpp feat(pipeline): add WSND (Wowee Sound Catalog) format 2026-05-09 14:47:16 -07:00
wowee_spawns.cpp feat(pipeline): add WSPN (Wowee Spawn Point catalog) format 2026-05-09 14:57:53 -07:00
wowee_terrain_loader.cpp fix(wot): cap doodadNames/wmoNames at 65536 + guard non-string entries 2026-05-06 10:06:20 -07:00
wowee_weather.cpp feat(pipeline): add Wowee Open Weather (.wow) zone schedule 2026-05-09 14:10:13 -07:00
wowee_world_map.cpp feat(pipeline): add WOMX (Wowee World Map index) format 2026-05-09 14:38:05 -07:00