Files
Fractured/contrib/fractured-dev-extras/CLIENT-PATCHES.md
T
Docker Build fae3ff5028 Paragon: ship server-side DBC overlay as SQL so fresh installs can roll class 12
Stock Docker installs fill data/dbc/ from the vanilla 3.3.5a extract
in `ac-wotlk-client-data`, which has no class 12 in ChrClasses.dbc and
no class-12 bit on SkillRaceClassInfo.dbc. CharacterHandler.cpp's
sChrClassesStore.LookupEntry(12) returns null and the create fails
with CHAR_CREATE_FAILED ("Class (12) not found in DBC ...") before the
contributor ever sees the panel. Fixing it required hand-copying the
patched DBCs onto the named volume — undocumented, fragile, and not
portable to native installs.

DBCStores.cpp::LoadDBC merges every <table>_dbc world-DB row on top of
the on-disk DBC store (storage.LoadFromDB after storage.Load). We use
that merge layer to ship Paragon's class-12 deltas as SQL:

- chrclasses_dbc: 1 row defining class 12 (Paragon, power=Mana,
  family=Warrior, expansion=2). Resolves CHAR_CREATE_FAILED.
- skillraceclassinfo_dbc: 235 rows REPLACEing stock entries with the
  patched ClassMask (class-12 bit OR'd in) so baseline skills (defense,
  weapon skills, etc.) are available to Paragon characters.

The new `modules/mod-paragon/data/sql/db-world/updates/2026_05_09_00.sql`
is applied automatically by AC's DBUpdater on every fresh `ac-db-import`
run (Docker) or first worldserver boot (native). End-to-end verified
locally: truncate -> docker compose up ac-db-import -> rows reappear
with hash 33B1A05 recorded in updates table.

The migration is auto-generated by
fractured-tooling/from-workspace-root/_gen_paragon_dbc_overlay_sql.py
(outside this repo per the repo-tidy policy). Re-run it whenever the
DBC bake changes.

CLIENT-PATCHES.md is rewritten so contributors no longer need the
manual DBC sync section as their primary install path. Manual overlay
is preserved as a labelled fallback for tools that read data/dbc/
directly.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 12:19:59 -04:00

8.0 KiB

Fractured Client Patches

Binary client artifacts that pair with this server. They live on the Releases page, not in the tree, so the repo stays lean and binaries can be re-downloaded without bloating git clone.

This file is the table of contents and install guide.


What ships in a release

Artifact Size Purpose
patch-enUS-4.MPQ ~5 MB DBC + GlueXML bake. Adds CLASS_PARAGON (id 12), the character-create slot, glue strings, talent-tab DBC entries, and the Paragon resource bar definitions. Required for character creation as Paragon to even show up.
patch-enUS-5.MPQ ~40 KB FrameXML overrides. Replaces stock PlayerFrame.lua / RuneFrame.lua / ComboFrame.lua / UnitFrame.lua with Paragon-aware versions: rune simulator, combo-point simulator, server-authoritative resource sync over the PARAA addon channel, action-button usability + click guards.
patch-enUS-6.MPQ ~160 KB The ParagonAdvancement addon. Replaces the talent pane (N key) for Paragon characters with the Character Advancement panel: per-class spell tabs, talent grid, Overview/Search tabs, AE/TE currency, commit / reset / preview, login-time toast suppression.
Wow.exe ~7.5 MB 3.3.5a (build 12340) client byte-patched to skip the MPQ signature check so custom patch-enUS-N.MPQ files load. Diff against stock is a few bytes; everything else is unchanged.

Server and client work as a pair: the addon talks to mod-paragon on the worldserver via WHISPER addon-channel messages with the PARAA prefix (currency push, spell/talent snapshot, commit, combo points, rune cooldowns, learn-toast silence window). Mismatched versions usually manifest as the panel rendering blank or AE/TE reading 0/0.


Install

You need a 3.3.5a (build 12340) WoW client. ChromieCraft's free 3.3.5a download is the canonical clean source if you don't already have one.

  1. Download every artifact from the latest release matching this server build: https://github.com/Dawnforger/Fractured/releases/latest
  2. Replace Wow.exe at the root of your client install with the patched one from the release. Keep a backup of the original if you want.
  3. Drop patch-enUS-4.MPQ, patch-enUS-5.MPQ, patch-enUS-6.MPQ into Data/enUS/. (For other locales, rename the suffix accordingly — contents are locale-independent, only the filename ordering matters to the loader.)
  4. Edit Data/enUS/realmlist.wtf to point at your server, e.g. set realmlist your.host.tld.
  5. Launch Wow.exe. The login screen should reach the realm list. Make a Paragon character (the new class entry on the create screen) and press N in-world to open the Character Advancement panel.

If the panel opens empty / AE+TE read 0/0 / N opens the stock talent pane: your client is loading an older patch-enUS-6.MPQ, or the worldserver image is older than commit 4d2a80d (the character_paragon_panel_spell_revoked migration). Pull both ends to the same release tag and rebuild the worldserver image.

If the client shows the Paragon class on the create screen but the server replies Character Creation Failed when you pick it on a very old server checkout (predating commit landing modules/mod-paragon/data/sql/db-world/updates/2026_05_09_00.sql): pull main and run docker compose up -d ac-db-import. Recent Fractured server builds ship the Paragon DBC overlay as a SQL migration (see Server-side Paragon DBC overlay below); fresh checkouts do not need the patched DBCs copied into data/dbc/.


Server-side Paragon DBC overlay (automatic)

The Fractured client learns about Paragon from patch-enUS-4.MPQ (DBC + GlueXML). The worldserver never reads your MPQs — it reads plain .dbc files under its DataDir (.../data/dbc/ by default).

Stock Docker installs populate data/dbc/ from a vanilla 3.3.5a extract (ac-client-data-init in docker-compose.yml). That tree has no ChrClasses row for id 12 and no class-12 bit on SkillRaceClassInfo rows, which would normally trigger:

Class (12) not found in DBC while creating new char ... wrong DBC files or cheater?

…and reject the create with CHAR_CREATE_FAILED.

To remove that gap, the repo ships modules/mod-paragon/data/sql/db-world/updates/2026_05_09_00.sql, which INSERTs the Paragon class-12 deltas into:

  • chrclasses_dbc — 1 row defining class 12 ("Paragon", power=Mana, family=Warrior, expansion=2).
  • skillraceclassinfo_dbc — 235 rows replacing stock entries with the patched ClassMask (class-12 bit OR'd in) so every baseline skill is available to Paragon characters.

AzerothCore's DBC loader (DBCStores.cpp::LoadDBC -> LoadFromDB) merges these rows on top of whatever data/dbc/ contains at every worldserver boot. The DBUpdater in ac-db-import (Docker) or the worldserver itself (native) applies the migration automatically — so the only steps a fresh contributor needs are git clone and docker compose up -d.

Regenerating the migration

The SQL is auto-generated from the patched DBCs that already live inside patch-enUS-4.MPQ. The bake script lives outside this repo (per the repo-tidy policy) at:

fractured-tooling/from-workspace-root/_gen_paragon_dbc_overlay_sql.py

Re-run it whenever you change the Paragon DBC bake — for example, adding a new race to the Paragon class mask. It diffs the patched DBCs against a stock 3.3.5a DBC extract and emits a fresh 2026_05_09_00.sql (or successor migration with a new timestamp if deltas change). Workflow:

# Extract the patched DBCs once:
.\tools\mpq\mpqcli.exe extract `
    "ChromieCraft_3.3.5a\Data\enUS\patch-enUS-4.MPQ" `
    -o "$env:TEMP\paragon-dbc-extract"

# Regenerate the SQL migration:
python fractured-tooling\from-workspace-root\_gen_paragon_dbc_overlay_sql.py

If the regenerated SQL has new content, commit it as a new dated migration filename (e.g. 2026_06_01_00.sql) — never edit a file that has already been applied to live databases, AC's DBUpdater will detect the hash change and re-run the SQL, which can be fine but is best reserved for emergencies.

Manual DBC overlay (rare, fallback)

If you ever need the patched DBCs on disk — e.g. for a tool that reads data/dbc/ directly outside the worldserver, or to verify a client-vs-server DBC mismatch — extract patch-enUS-4.MPQ and copy its DBFilesClient/*.dbc into data/dbc/:

Docker:

docker run --rm `
  -v ac-client-data:/data `
  -v ${PWD}\paragon-dbc-extract:/patch:ro `
  alpine sh -c "cp -f /patch/*.dbc /data/dbc/"
docker compose restart ac-worldserver

Native: copy into <CMAKE_INSTALL_PREFIX>/data/dbc/ and restart.

This is not required for normal operation — the SQL migration covers everything mod-paragon needs at runtime. Use the manual overlay only when you're consciously bypassing the SQL merge layer.


Building the patches yourself

The MPQs are reproducible from the dev tree (not in this repo — Classless Dev/Paragon Patch UI/ and Classless Dev/Paragon Advancement/ on the maintainer's workstation) via two PowerShell scripts in tools/:

tools\build_paragon_ui_patch.ps1 -Deploy            # -> patch-enUS-5.MPQ
tools\build_paragon_advancement_patch.ps1 -Deploy   # -> patch-enUS-6.MPQ

patch-enUS-4.MPQ is the DBC + GlueXML bake; the bake scripts live with the rest of the dev tooling and are not part of this repo by design (see the repo-tidy policy in README.txt next to this file).

The patched Wow.exe is a one-time hex-edit of the stock 3.3.5a client. The diff is publicly documented in the WoW emulation community under names like "MPQ signature patch" / "no-CD-signature patch".


Versioning

Releases are tagged to match the state of main they were built from. The release notes call out which server commit shipped alongside each artifact set, so a contributor running git checkout <tag> on this repo can pull the matching client bundle and have a guaranteed-aligned end-to-end build.