Classless-ish Randomized Spell Draft Mode for AzerothCore (3.3.5a)
mod-spelldraft is a custom game mode that transforms the standard World of Warcraft leveling experience into a randomized, classless ability draft.
Designed primarily for players who want a fun, rogue-like draft experience on their private server, this module removes traditional class boundaries while maintaining race and class identity:
- Race & Class Identity: You still pick a starting race and class, receiving their native starting stats, class quests, and base attributes.
- Universal Quests: All class-restricted quests are unlocked, allowing any class to complete any other class's quest chain (such as the Warrior's Whirlwind weapon quest or the Warlock's pet summon quests).
- Ability Drafting as You Level: Every level-up intercepts standard progression and prompts you with a choice of 3 randomized active spells.
- Tomes and Scrolls in the World: Defeating enemies gives you a chance to loot custom items to customize your build:
- Scrolls of Reroll/Ban: Prune or roll again on your active ability draft choices.
- Lost Grimoires: Trigger a bonus active spell draft at any time.
- Tomes of Talents: Draft custom passive talents (like Cruelty, Ignite, or Conviction) from any class. Access your drafted talents and spells by typing
/spelldraftin the game chat.
- Universal Gear & Weapon Proficiencies: Any character can equip any armor type (Cloth to Plate) and wield any weapon type, with weapon skills training automatically to the level cap on login.
- Automatic Spell Ranking: No need to visit class trainers. Drafted spells automatically upgrade to their highest available rank as you level up.
- Mystic Enchants (Random Loot Enchantments): Gear of Uncommon quality or better has a chance to roll unique bonuses when looted, crafted, or won. These enchants grant passive glyph-tier effects, combat proc recipes (such as cross-class spell triggers), or cosmetic shapeshift overrides, and can be rerolled, imbued, or transferred via Nibbs the Imp.
- Prestige System: Reach level 80 and reset back to level 1 (or level 55 for Death Knights) with a prestige title. While spells and talents are wiped on reset, you earn Prestige Tokens (10 per reset) and starting bonus rerolls for your next run.
- Prestige Rewards Shop: Access a custom, tabbed reward shop within your Grimoire interface (
/spelldraftmenu, click the Gold Purse icon next to the Prestige label) to purchase rare mounts, vanity companion pets, account-bound heirloom weapons and armor (+XP scaling), scrolls, and transformation toys using your Prestige Tokens.
If you are a player connecting to a server running SpellDraft, you do not need to install or build the server module. You only need the client files:
- Go to the Releases section of this repository and download the latest
wow-client.zip. - Extract the zip file, copy the
Interface/folder into your World of Warcraft game directory, and copyData/patch-P.mpqinto your client'sData/folder.- The shipped
patch-P.mpqis built for the native (unmodified) WotLK 3.3.5a client. - HD / custom repack clients: do not use the shipped archive — it would override your repack's databases with vanilla data (broken/green models, altered tooltips). A patch must be compiled against your specific repack; see Building Client Patches for HD Repacks (usually your server owner provides this build).
⚠️ Install exactly one SpellDraft patch archive. Mounting the same archive twice (e.g. as bothpatch-P.mpqand a locale patch) silently corrupts the 3.3.5 client's memory and crashes withERROR #132on every exit.
- The shipped
- Fully close and relaunch the game after copying — custom
.mpqpatches only load at client startup, not on/reload.
Before installing, ensure your server meets the following external dependencies:
- AzerothCore WotLK (3.3.5a): Compiles and runs against the AzerothCore master branch.
- mod-ale (Eluna Lua Engine) — REQUIRED: This module depends on the Eluna scripting engine to run gameplay logic. Standard/classic Eluna forks do not support the required event hooks—use the official AzerothCore
mod-alemodule. - mod-playerbots — Optional: Fully supported. Playerbots are automatically skipped by the drafting system and will function as normal classes without any conflict.
- mod-multiclass-summons — Optional: Fully supported. Integrates out of the box to allow any class to control and use summon spells (like ghouls, demons, and elementals) with working pet bars and controls, bypassing default class restrictions.
To support multi-class build paths (e.g. a Rogue who drafts Warrior abilities), characters are automatically granted:
- Armor: Cloth, Leather, Mail, and Plate Mail.
- Weapons: All weapon types (Swords, Axes, Maces, Polearms, Staves, Daggers, Fist Weapons, Bows, Crossbows, Guns, Thrown, Wands) and Shield Block.
Spells are filtered server-side to ensure players are never offered useless cards:
- Death Knight Rune Spells: Locked to the Death Knight class (Class 6) due to engine limitations on rune resources. Spells requiring only Runic Power remain draftable by anyone.
- Stance & Form Requirements: Stance/form-specific spells (like Shred, Intercept, Shield Slam) will not appear in the draft pool until the prerequisite form/stance is learned.
Drafting a stance or form auto-grants basic spells so you can immediately fight:
- Cat Form (768): Claw (1082), Prowl (5215)
- Bear Form (5487/9634): Maul (6807), Demoralizing Roar (99)
- Battle Stance (2457): Charge (100)
- Defensive Stance (71): Taunt (355)
- Berserker Stance (2458): Pummel (6552)
To facilitate draft customization and progression during leveling, enemies drop specialized scrolls and books that can be consumed out of combat:
- Scroll of Reroll: Consuming this scroll grants the player +1 Draft Reroll token.
- Scroll of Ban: Consuming this scroll grants the player +1 Draft Ban token.
- Lost Grimoire: Consuming this grimoire immediately opens a bonus active spell draft choice.
- Tome of Talents: Consuming this tome opens a draft selection screen allowing you to choose one passive talent from any class matching your level.
These items drop from normal enemies throughout the world, with dungeon and raid bosses having a significantly increased chance to drop them.
Weapons and armor of Uncommon quality or better that you loot, craft, or win have a chance to roll a Mystic Enchant — a bonus effect bound to that specific item, shown as an extra line on its tooltip:
- Glyph-tier enchants grant a passive glyph effect while the item is equipped.
- Proc enchants trigger cross-class effects in combat (e.g. Fireball casts hurling a free Fire Blast).
- Form enchants change your shapeshift appearance (e.g. Bear Form becoming the spirit bear Arcturis).
Visit Nibbs the Imp and choose Open Mystic Enchant services for the enchanting window:
- Reroll / Imbue — drag an item into the slot and pay gold to reroll its enchant, or to add one to an un-enchanted item.
- Reroll / Imbue (Epic+) — spend a Prestige Token for a guaranteed Epic-or-better enchant.
- Transfer — pay gold (scaling with the enchant's rarity) to move an enchant from one item to another. Overwriting the destination's enchant asks for confirmation; the source keeps a spent marker.
Rare world drops include glyphs that socket through the standard Glyphs panel (talent window, level 15+):
- Minor cosmetic glyphs change a shapeshift form's appearance: White Bear, Black Bear, Red Lynx, Forest Lynx, Black Wolf (Blizzard's scrapped beta glyphs, restored) and Glyph of the Orca (aquatic form).
- Major effect glyphs add new combat effects, such as Glyph of the Zealot (melee strikes can unleash an Exorcism).
Any creature can rarely drop one (bosses far more often), and three Forgotten Grimoire tomes hidden in remote corners of Azeroth and Northrend each hold a guaranteed random glyph for explorers who find them.
To give you more control over your character's build, mod-spelldraft features a custom Talent Point system alongside the active spell drafting:
- Earning Talent Points: You earn 1 Talent Point per level-up (from level 2 to 80). Death Knights are granted 54 Talent Points on character creation (at level 55) to catch up.
- Purchasing Passives: Open your Grimoire (type
/spelldraftor click the Grimoire button on your talent frame) and and there you will find the Talents section. You can click on any unlocked passive talent from any class to purchase it using your points. - Locked Talents (Draft-Only): Active abilities, shapeshift forms, and playstyle-defining passive talents (like Titan's Grip, Metamorphosis, or Tree of Life) are locked (marked with a lock icon in the UI). These cannot be purchased with points and must be rolled and drafted from a Tome of Talents (drops chance from enemies and Bosses).
- Respecs: If you wish to change your build, talk to Nibbs the Imp in starter zones or capital cities. He will reset all manually purchased talents and refund all spent points for free. Spells and talents you obtained through drafts are locked in and will not be touched by respecs.
Because Death Knights are a hero class and start at a higher level, the drafting system adapts to accommodate their progression:
- Starting State: Upon character creation, a Death Knight starts at level 55, is granted all the standard native Death Knight starting abilities (Death Coil, Death Grip, Icy Touch, Plague Strike, Blood Strike, Blood Presence, Frost Presence, Death Gate, Runeforging, and the Acherus Deathcharger mount), and is immediately granted 5 spell drafts to build their initial loadout.
- Drafts per Level: Instead of 1 draft per level, Death Knights gain 3 active spell drafts per level-up from level 56 to 80 to ensure they catch up with the spell counts of other classes.
Once you reach the maximum level (80), you can visit the prestige NPC (Chromie) to prestige. The rules vary depending on your class type:
- Level Reset: Resets character level back to level 1.
- Asset Mailbox Recovery: Removes all your equipped gear and bags and mails them back to you so your inventory isn't lost.
- Wipes Progress: Clears all learned spells, active talents, quest histories, and action bars.
- Scaling Rerolls & Bans: Increases your prestige rank, grants a custom in-game title, and increases your starting rerolls/bans pool and rerolls per level-up for your next run.
- Level Reset: Resets character level back to level 55.
- Capital Gates Spawn: Instead of starting back in the Ebon Hold starting zone, they spawn directly at the gates of their faction's capital city (Stormwind Gates for Alliance, Orgrimmar Gates for Horde).
- Walk of Shame Quest: Automatically accepts the final quest of the Death Knight starting chain ("Where Kings Walk" for Alliance, "Warchief's Blessing" for Horde) to integrate cleanly into the world.
- Starting Spells: Re-grants all the native starting Death Knight abilities (Death Coil, Death Grip, mount, Runeforging, etc.).
- Asset Mailbox Recovery: Removes all equipped gear and mails them back.
- Wipes Progress: Clears all drafted spells, active talents, quest histories, and action bars.
- Catch-Up Mechanics: Starts the next run with 5 drafts immediately, and gains 3 drafts per level-up from level 56 onwards.
We provide an automated script that performs all server-side staging, configuration, DBC deployment, and C++ Docker image rebuilding.
Docker users: run the script with your container engine reachable (Docker Desktop started /
dockerdrunning) and after the server has been brought up at least once (docker compose up -d) — the DBC deploy copies into the existing server containers, which works on Windows/macOS/Linux alike. If the script can't find them it prints the exact manual command to run.
- Clone or copy
mod-spelldraftinto your server's/modules/folder:git clone <repo_url> modules/mod-spelldraft
- Run the server installer script:
cd modules/mod-spelldraft ./install.sh - Install Client files: Copy
wow-client/Interface/AddOns/SpellDraftinto your client'sInterface/AddOns/, and copywow-client/Data/patch-P.mpqinto your client'sData/folder (native 3.3.5a clients; HD repack users must compile their own patch — see the HD section). Install exactly one SpellDraft archive per client — mounting the same archive twice corrupts the client heap and crashes withERROR #132on every exit. - Restart your server!
Option B: Manual Installation (Step-by-Step) - Click to expand
If you prefer to perform the steps yourself, follow this sequence:
-
Place the module: Clone or copy
mod-spelldraftinto your server's/modules/directory. -
Stage Lua scripts: Copy the config and script files into your server's Lua scripts directory:
mkdir -p ../../env/dist/etc/modules/lua_scripts/SpellDraft cp lua/spelldraft_config.lua ../../env/dist/etc/modules/lua_scripts/ cp -r lua/SpellDraft/* ../../env/dist/etc/modules/lua_scripts/SpellDraft/ -
Copy config: Copy
conf/mod_spelldraft.conf.distto../../env/dist/etc/modules/mod_spelldraft.conf. -
Deploy DBC files: Copy the module's server DBCs (
dbc/*.dbc, e.g.Spell.dbcandSpellShapeshiftForm.dbc) into your server's runtime DBC directory:- Docker/Podman (all platforms, incl. Windows Docker Desktop): copy through the engine into the client-data container — the DBC folder lives inside a named volume that is usually not visible on your host filesystem, and the worldserver mounts it read-only:
(Container names may vary — find yours with
docker cp dbc/. ac-client-data-init:/azerothcore/env/dist/data/dbc/
docker ps -a --format '{{.Names}}' | grep -E 'client-data|worldserver'. The server containers must have been created by a firstdocker compose up, and on fresh installs let the client-data download finish before copying, or it will overwrite your files.) - Local: Copy files into the
dbcfolder under theDataDirset inworldserver.conf(default/path/to/server/env/dist/data/dbc/).
- Docker/Podman (all platforms, incl. Windows Docker Desktop): copy through the engine into the client-data container — the DBC folder lives inside a named volume that is usually not visible on your host filesystem, and the worldserver mounts it read-only:
-
Apply C++ core patch (Required for Combo Points): Apply the C++ core patch to
Unit.cppto broadcast customSpellDraftCPaddon messages.Here is the Python script:
# patch_unit.py import sys u = "../../src/server/game/Entities/Unit/Unit.cpp" c = open(u, "r", encoding="utf-8").read() t = "playerMe->SendDirectMessage(&data);" r = t + """ // Send custom SpellDraft addon message for custom combo point rendering std::string prefix = "SpellDraftCP"; std::string message = std::to_string(m_comboPoints); std::string fullmsg = prefix + "\\t" + message; WorldPacket addonData(SMSG_MESSAGECHAT, 100); addonData << uint8(0); // CHAT_MSG_ADDON (Whisper/Normal channel context) addonData << int32(LANG_ADDON); addonData << playerMe->GetGUID(); addonData << uint32(0); addonData << playerMe->GetGUID(); addonData << uint32(fullmsg.length() + 1); addonData << fullmsg; addonData << uint8(0); playerMe->GetSession()->SendPacket(&addonData);""" if t in c and "SpellDraftCP" not in c: open(u, "w", encoding="utf-8").write(c.replace(t, r, 1))
You can execute this patch directly from the
modules/mod-spelldraft/directory in a single line:python3 -c 'import sys; u="../../src/server/game/Entities/Unit/Unit.cpp"; c=open(u,"r",encoding="utf-8").read(); t="playerMe->SendDirectMessage(&data);"; r=t+"\n\n // Send custom SpellDraft addon message for custom combo point rendering\n std::string prefix = \"SpellDraftCP\";\n std::string message = std::to_string(m_comboPoints);\n std::string fullmsg = prefix + \"\\t\" + message;\n\n WorldPacket addonData(SMSG_MESSAGECHAT, 100);\n addonData << uint8(0); // CHAT_MSG_ADDON (Whisper/Normal channel context)\n addonData << int32(LANG_ADDON);\n addonData << playerMe->GetGUID();\n addonData << uint32(0);\n addonData << playerMe->GetGUID();\n addonData << uint32(fullmsg.length() + 1);\n addonData << fullmsg;\n addonData << uint8(0);\n playerMe->GetSession()->SendPacket(&addonData);"; open(u,"w",encoding="utf-8").write(c.replace(t,r,1) if t in c and "SpellDraftCP" not in c else c)' -
Rebuild server: Compile the C++ module code:
- Docker: Rebuild the container:
docker compose build ac-worldserver(ordocker compose up -d --build). - Local: Run your local CMake and compilation toolchain.
- Docker: Rebuild the container:
-
Install Client files: Copy/merge the contents of the
wow-client/directory directly into your World of Warcraft client folder (which merges theData/(includingData/enUS/locale patches) andInterface/subdirectories).
If you are updating to the latest version of mod-spelldraft, follow these steps to apply updates safely without losing any database data or player character progress:
Navigate to your module directory and pull the latest updates from GitHub:
cd modules/mod-spelldraft
git pullRun the automated installation script to redeploy the updated Lua scripts, configuration files, and DBC/C++ compiler changes:
./install.shNote
The installation script will check if your active mod_spelldraft.conf configuration exists. If it does, it will skip overwriting it to preserve your custom settings.
To apply the changes, reload the Eluna scripting engine in-game or restart your server:
- Reload Eluna (No Downtime): Type
.eluna reloadin-game as a GM to immediately hot-reload the updated scripts. Affected players will just need to log out and back in to apply the updates. - Server Reboot: Restart your worldserver container or process (e.g.
podman restart ac-worldserverordocker compose restart ac-worldserver).
Since updates may contain client-side fixes, copy the updated Addon files to your local game client:
- Copy AddOn: Copy the contents of
wow-client/Interface/AddOns/SpellDraft/to your WoW client'sInterface/AddOns/SpellDraft/directory, overwriting the old files. - Reload UI: In-game, type
/reloadin the chat window to load the new AddOn layout.
You can customize the draft system parameters by editing lua_scripts/spelldraft_config.lua:
| Parameter | Default | Description |
|---|---|---|
MAX_LEVEL |
80 |
Level required to venture into Prestige Mode via gossip. |
NPC_ID |
2069426 |
Custom Chromie NPC gossip trigger. |
DRAFT_MODE_REROLLS |
2 |
Base reroll tokens given to characters starting a draft run (prestige 0). |
DRAFT_MODE_SPELLS |
1 |
Base number of spells a player gets when starting a draft. |
PRESTIGE1_REROLLS |
5 |
Starting rerolls granted at prestige 1. |
PRESTIGE1_REROLLS_PER_LEVEL |
1 |
Rerolls earned per level-up at prestige 1. |
PRESTIGE_REROLL_SCALING |
2 |
Reroll scaling increment added to both starting pool and per-level rerolls for each prestige rank beyond rank 1. |
DRAFT_BANS_START |
5 |
Initial bans given to characters to prune the spell pool. |
INCLUDE_RARITY_5 |
false |
Enable/disable broken/racial passives and infinitely spammable spells in the draft pool. |
REROLLS_PER_LEVELUP |
0 |
Rerolls earned per level-up at prestige 0 (none until first prestige). |
UNLIMITED_REROLLS_FIRST_DRAW |
false |
When enabled, rerolls are free and unlimited until the character picks the very first spell of a draft run (successful_drafts == 0), regardless of class or level. The Reroll button shows Reroll (∞) while active; normal reroll accounting resumes after the first pick. Applies again on each prestige run, since the pick counter resets. |
CROSS_FACTION_PORTALS |
false |
When enabled, all Portal/Teleport spells (both factions' capitals plus Theramore, Stonard, Shattrath, Dalaran, and Karazhan) are injected into the draft pool for both factions — Alliance characters can draft Horde city teleports and vice versa. Uses each spell's own rarity (teleports Common, portals Epic) and respects level requirements, bans, and already-known spells. |
POOL_AMOUNT |
45 |
The number of spells pooled from the full DB on every new draft. Every time a player reaches a level-up or consumes a Lost Grimoire, the system runs a database query to select 45 random, level-appropriate class abilities based on your configured rarity distribution. Rerolls select from this cached pool in memory instead of repeating heavy database queries, keeping server load minimal. |
RARITY_DISTRIBUTION |
[0]=0.50, [1]=0.27, ... |
Probability ratios for Common ([0]), Uncommon ([1]), Rare ([2]), Epic ([3]), Legendary ([4]). |
The C++ side of the module reads etc/modules/mod_spelldraft.conf (created from conf/mod_spelldraft.conf.dist by the installer):
| Setting | Default | Description |
|---|---|---|
SpellDraft.Enable |
1 |
Enables the C++ hooks (custom weapon/armor proficiencies, secondary power bars, druid form casting). Does not affect the Eluna Lua scripts. |
SpellDraft.AllowSpellsInDruidForms |
0 |
Controls casting while in Druid shapeshift forms (Cat, Bear, Dire Bear, Travel, Aquatic, Tree of Life, Moonkin). See modes below. |
SpellDraft.AllowSpellsInDruidForms modes:
0— Disabled: native WoW rules; casting a non-form spell fails or unshifts as usual.1— All: any spell can be cast in any Druid form. The server skips theSPELL_FAILED_ONLY_SHAPESHIFT/SPELL_FAILED_NOT_SHAPESHIFTchecks entirely for players.2— ME (Mystic Enchants): form casting is only unlocked by Mystic Enchants, each covering one class family on one form group. A full set ships indata/sql/db-world/26_druid_form_casting_enchant.sql:- Epic tier (40 enchants): one class on one form —
<Class-flavor> Bear / Prowler / Moonkin / Treant(e.g. Feltouched Bear = Warlock in Bear/Dire Bear, Arcanebound Prowler = Mage in Cat). - Legendary tier (4 enchants, rarest): all classes on one form — Heart of Ursoc (Bear), Grace of Ashamane (Cat), Gift of Elune (Moonkin), Blessing of Nordrassil (Tree of Life).
- Rules are data-driven: the C++ reads
custom_form_casting_rules(marker_aura,spell_family— 0 = any class,form_mask— bit = form id − 1) at startup, so new enchants need only SQL (marker aura inspell_dbc+custom_random_enchantmentsrow + rule row) and a server restart.
- Epic tier (40 enchants): one class on one form —
Client patch required for modes 1 and 2: this setting only lifts server-side validation. Without the SpellDraft client patch (
patch-P.mpq, or the compiled-zpatch on HD clients), the client itself still auto-unshifts or greys out spell buttons while in forms. The patch sets the stance flag on the Druid forms inSpellShapeshiftForm.dbcand clears Druid form exclusions fromStancesNotinSpell.dbc.
The Prestige Shop inventory, item details, and token costs are defined and can be modified in two files:
- Server-Side Costs: The server-side cost validation is mapped in spell_choice.lua under the
coststable in theHandleBuyShopItemfunction. - Client-Side UI: The shop item entries, categories, descriptions, and displayed token costs are configured in PrestigeShop.lua under the
shopItemstable.
Because loot tables are applied once to the database during server startup/migration, drop rates are configured directly within the SQL files rather than the Lua config.
To tune these drop rates, edit the Chance columns at the bottom of 05_prestige_draft_items.sql and the matching update statements in 08_consumable_id_swap.sql.
| Item | Default (Normal/Elite) | Default (Bosses) | Location in SQL |
|---|---|---|---|
Scroll of Reroll (4427) |
0.6% |
10.0% |
05_prestige_draft_items.sql / 08_consumable_id_swap.sql |
Scroll of Ban (1078) |
0.6% |
10.0% |
05_prestige_draft_items.sql / 08_consumable_id_swap.sql |
Lost Grimoire (13149) |
0.1% |
5.0% |
05_prestige_draft_items.sql |
Tome of Talents (25462) |
1.0% |
15.0% |
05_prestige_draft_items.sql |
For testing and verification in-game, you can use the following .additem commands to spawn the customized draft consumables:
- Tome of Talents:
.additem 25462 <count>(triggers passive talent drafting & progressive rank upgrading) - Lost Grimoire:
.additem 13149 <count>(triggers an immediate bonus active spell draft) - Scroll of Reroll:
.additem 4427 <count>(adds +1 Reroll charges) - Scroll of Ban:
.additem 1078 <count>(adds +1 Ban charges)
.rollre— force-rolls a Mystic Enchant on every eligible weapon/armor item you carry (equipped + bags) at 100% chance; re-running it rerolls them.- Enchant services UI: talk to Nibbs the Imp (NPC
99000) → Open Mystic Enchant services.
- Glyph of the Orca (minor, cosmetic):
.additem 100001 - Glyph of the Zealot (major, effect):
.additem 100002 - Beta cosmetic glyphs:
.additem 40484(White Bear),.additem 40948(Red Lynx),.additem 43336(Black Bear),.additem 43337(Forest Lynx),.additem 43384(Black Wolf) - Open the talent window → Glyphs tab, click the glyph item, then click a matching socket (level 15+). Minor glyphs morph the listed form; check effect glyphs with their combat proc.
- Forgotten Grimoire spawns:
.go xyz -10782 -1378 40 0(Duskwood),.go xyz -7580 199 12 1(Silithus),.go xyz 4110 -4740 101 571(Grizzly Hills).
The repository ships wow-client/Data/patch-P.mpq built for the native 3.3.5a client only. A client counts as "native" only if its Data/ folder contains nothing beyond Blizzard's archives (common, expansion, lichking, patch, patch-2, patch-3 + locale equivalents) — any extra lettered patch-*.mpq (HD model packs, repack content) means you need a custom compile, even if the install is labelled a clean client. HD / custom repack clients need their own compile, for two reasons:
- Repacks ship modified DBCs. They replace creature meshes/textures and often far more (one tested repack carries a 67 MB custom
Spell.dbcinpatch-enUS-s.mpq). Overriding those tables with native-based files breaks the repack: neon-green/invisible creature models, altered tooltips, and dangling database references that can destabilize the client. The patch must be compiled from the DBCs your repack actually uses — every repack is different, so no prebuilt HD archive is shipped. - Repacks ship high-letter patches. MPQ archives load in slot order (
patch-2..9, thenpatch-a..z, locale patches outranking base ones at the same letter). A repack's ownpatch-enUS-s.mpqoutrankspatch-P.mpq, silently disabling SpellDraft's data — so HD builds are emitted as a locale-zpatch, which outranks everything.
The two bundled tools handle this (no external MPQ software needed):
- Extract the client's effective DBCs — the extractor walks the repack's full archive chain in load order and pulls out the version of each table the client actually resolves:
python3 tools/extract_client_dbcs.py "/path/to/your hd client" /path/to/dbc_src - Compile with an HD locale override patch:
(Match
python3 tools/build_client_patch.py --dbc-src /path/to/dbc_src --hd-locale enUS
--hd-localeto the client's locale folder, e.g.enGB,deDE.) - Deploy the resulting
wow-client/Data/enUS/patch-enUS-z.mpqinto the client'sData/enUS/folder. Do not also deploypatch-P.mpq— exactly one SpellDraft archive per client, ever (see the ERROR #132 warning in the connection guide).
Since all custom spells, items, glyphs, and models are defined in the single source of truth (tools/client_patch_manifest.json), compiling with your client's own database files as a base fully preserves all repack customizations while seamlessly adding all module features.
This project is heavily inspired by and uses elements from the original Prestige and Draft Mode project by Youpeoples (Stephen Kania).
We would like to extend our sincere thanks to Youpeoples and all contributors to the original repository for their awesome work and foundational layouts that made this custom classless drafting and prestige system possible!
This project is completely open source. Anyone is free to copy, modify, distribute, or use any code, assets, or resources in this project for their own custom WoW server or any other purpose without restriction.