Description
MacroAnvil is a macro library, a macro builder and a macro linter for Burning Crusade Classic.
It ships 412 macros, sorted by class, talent tree and skill type, that you can put on your action bar in one click. That part is a convenience. The part that matters is that MacroAnvil understands TBC's macro language: it will write a correct macro for any spell in your book, and it will read any macro you or anyone else wrote and tell you what the client is actually going to do with it.
The library
412 macros — Warrior 39, Paladin 43, Hunter 40, Rogue 41, Priest 40, Shaman 39, Mage 40, Warlock 40, Druid 40, and 50 that work whatever you play.
Filter by class, by talent tree, and by type: Attack, Heal, Buff, Defensive, Pet, Utility, Movement, Consumable, PvP, Profession. Tick Only what I can use and the list narrows to what your character can actually cast, read from your spellbook rather than from a table — so level, talent, race and profession requirements are all handled by one mechanism that cannot disagree with the game.
Every spell id was resolved against the client's own spell tables. Stance, form, weapon, aura-exclusivity and totem-slot requirements were each read from a primary source; anything that could not be verified was left out rather than guessed, and the handful of macros whose behaviour could not be settled carry a visible note saying so.
The builder
/ma new. Pick a spell, say where it should be cast — your target, whatever
your cursor is over, your focus, yourself, or the smart order of all of them —
and add modifier branches: Shift casts this instead, Ctrl casts that. Tick
the extras you want: stop what you are casting first, start auto-attack, leave
your form, dismount, show the tooltip.
The body is assembled in the right order as you go, with a live preview and live linting underneath. Clause order is the part people get wrong — the first matching clause wins, so a bare clause anywhere but last makes everything after it dead. The builder cannot produce that.
The linter
/ma lint. Your macro, a friend's macro, a macro off a forum from 2007.
Thirty-three checks, including:
- One press, one GCD — two spells that both spend the global cooldown mean only the first ever fires. Whether a spell uses the GCD is asked of the client, not assumed.
- Dead clauses —
/cast Frostbolt; [harm] Fireballcan never reach the second half. - Unguarded
@mouseover— withoutexists/help/harm, the macro silently does nothing whenever your cursor is over open ground. - Friendly casts with no
nodead, which will happily aim at a corpse. - Conditions that do not exist in TBC —
[@cursor],[spec:],[talent:],[known:],[bonusbar:]— and which expansion each came from. - State conflicts — a macro that swaps to Battle Stance and then casts something that needs Defensive, or a Cat ability sitting next to a Bear one.
- Two totems in the same slot, two mutually exclusive auras, a rank you
have not trained, a
castsequencewith noreset=, unbalanced brackets, 255 characters, a name over 16.
Command names are read from your client's own command tables, so /spell,
/tar, /eq and localised names like the German /wirken are all recognised
instead of flagged.
The linter has one rule: when it is not sure, it says nothing. If the client cannot answer a question, the check stays silent. Findings come at three levels — STOP, CHECK, and a quiet note.
/ma health runs the same checks over every macro you own.
Sets, key bindings, sharing
A set is a group of macros plus where they sit on your bars and which keys press them.
| Command | What it does |
|---|---|
/ma set save pve |
save what you have now |
/ma set load pvp |
put it back after a respec |
/ma set undo |
undo the last load, macros and key bindings both |
/ma set export pve |
a string you can send to someone |
/ma set import |
paste one in |
/ma bind |
bar map: what is where, under which key |
Loading a set never overwrites a macro you wrote and never takes a key that is bound to something else. Library macros travel by id and your own macros travel by content, so a friend on a different client language still gets macros that resolve on theirs.
It speaks your game's language
MacroAnvil follows the client. There is nothing to configure.
- Everything the client owns comes from the client. Spell names, item
names, rank subtexts, class names, talent tree names, key names and the slash
commands themselves. On a German client a macro is built as
/cast Heiliges Licht, because that is what your client calls spell 635. - Macro descriptions name spells by id and fill the name in from your client as the row is drawn, so the description names the same spell, spelled the same way, as the macro it describes.
- The addon's own text is translated into the nine languages WoW itself ships in: German, Spanish (Spain and Latin America), French, Korean, Brazilian Portuguese, Russian, Simplified and Traditional Chinese. Terminology follows your client's own strings, so a German player reads Makro, Aktionsleiste and Rang — the words the rest of their UI uses.
Prefer your addons in English on a localised client? /ma lang en.
It will not touch your macros
- A macro counts as MacroAnvil's only if the name, the library id and the
exact body still match. Edit one and it is yours;
/ma cleanleaves it alone. - It never writes into an action bar slot that is already occupied.
- It never clears your cursor for you, because dropping an ability off the cursor deletes it.
- It does nothing at all in combat. WoW blocks macro editing there; the addon says so rather than pretending otherwise.
Commands
| Command | What it does |
|---|---|
/ma |
open the library |
/ma <text> |
open it filtered |
/ma new |
the builder |
/ma lint |
check a macro |
/ma health |
check every macro you own |
/ma bars |
which bars it can see and how many slots are free |
/ma set ... |
sets |
/ma bind ... |
key bindings |
/ma verify |
check every spell id against your client |
/ma clean |
list, then delete, the macros it made |
/ma lang auto\|en |
follow the game's language, or force English |
/ma config |
options |
/macroanvil and /anvil work too.
Known limits
Written down on purpose, so you know before you install:
- One GCD per keypress. WoW does not allow two GCD spells from one macro, and no addon can change that. Macros whose notes say "two presses" mean it.
- TBC has no
[@cursor], so ground-targeted AoE cannot be placed from a macro. You still click the circle for Blizzard, Rain of Fire, Flamestrike and Hurricane. - Warrior, Rogue and Druid swap the main bar's first twelve slots with stance and form. MacroAnvil prefers a side bar you have switched on and warns you when it has to use the main one.
- The builder does not produce
castsequencemacros. The library ships several and the linter reads them; you write new ones by hand. - Talent tree names for classes other than your own may show in English — the client only names the trees of the class you are playing.
Install
- Put the
MacroAnvilfolder intoWorld of Warcraft\_classic_\Interface\AddOns\so thatMacroAnvil.tocsits directly inside it. - Restart the game completely —
/reloadis not enough for a new addon. - Log in and type
/ma.
If something looks wrong, /ma verify checks every spell id against your
client and /ma health checks every macro you own. Those two outputs are the
most useful thing you can attach to a bug report.





