If you are new to macros, you may find my introduction to macros helpful before reading this post.
Within this blog, I’ve tried to balance class-specific examples with general principles. Yes, I pretty much speak only Warlock (and to a lesser extent Death Knight), but I try to make sure the basic underlying points are the same no matter what class you play.
This post is not like that.
See, when you start getting into specific class mechanics you find how each class, each spec even, has nuances and specifics that just don’t apply universally. And a discussion about scripting those nuances should be taken like code samples from a textbook; they might show how to do a task a specific way, but you’ll have to adapt them to suit your needs.
Enough with the self-justification. I love playing a Warlock and am proud of it. Here’s how I use macros to help me do it.
BUFFS AND STONES
Warlocks have a variety of buffs that range from simple to apply (Fel Armor, Demon Armor) to complex (Spellstones and Firestones). Let’s start with the Armors.
For simplicity, I map the same logical concept to a key across characters, so Z is offensive buffs while X is defensive. On a DK this translates to Blood and Frost presences, but on a lock it’s Fel Armor and Demon Armor. These are the lead spells in front of macros that I can spam while rezzing from a graveyard to get back into the fight.
/castsequence reset=target/player,4 Fel Armor, Soul Link, Unending Breath, Detect Invisibility, Create Healthstone, Shadow Ward
/castsequence reset=target/player,4 Demon Armor, Soul Link, Create Healthstone, Shadow Ward
As soon as I rez I start running and spam Z. This applies buffs in order of importance, with Fel Armor and Soul Link being the only essential ones. The other instant cast spells are there for dispel protection, not for real utility. Create Healthstone is last so that if I need to replace a used one I can stop moving at the end of the sequence and create it; otherwise I stop to mount. These macros make use of a reset parameter to allow me to use them in combat to Stance Dance, swapping my armor out as the situation demands. The spellpower buff from Fel Armor is SO good that it’s hard to remember that Demon Armor is often a better option when melée closes the gap. It is equivalent to wearing mail, which is nothing to sneeze at. Resetting allows me to flip between the two as needed.
Next up is Shadow Ward.
/cast [mod:alt] Unending Breath; [mod:ctrl] Unending Breath; [mod:shift] Detect Invisibility; Shadow Ward
Shadow Ward is an easily overlooked spell that should be keybound for all warlocks, and not just PvPers. There is no excuse for not popping it as soon as you see a shadowform priest, affliction warlock, or unholy DK. Since it’s on my bar anyway, it makes a convenient place to store those other buffs for individual application with modifier keys.
Soulstones are a non-combat cast, so I don’t have this one keybound. It creates a Soulstone if you don’t have one already, and applies it to the target if one exists.
#showtooltip Create Soulstone
/cast Create Soulstone
/use [nocombat,help,nomodifier:alt] Demonic Soulstone; [nocombat,target=player] Demonic Soulstone
Related to the Soulstone macro are the Spellstone/Firestone macros. The Spellstone is an essential buff that is a real hassle to use; you have to apply it directly to your main hand weapon via the character pane and each stone has charges. These macros automate that. They will create the stone if it doesn’t exist and apply it to your weapon if it does, so you may need to fire it twice to get the buff.
#showtooltip Create Spellstone
/cast Create Spellstone
/use Grand Spellstone
And for the Firestone:
#showtooltip Create Firestone
/cast Create Firestone
/use Grand Firestone
I keep two copies because the Spellstone is superior for nearly every single Warlock build EXCEPT for deep Destruction, which is what I play right now. Since there is always a right choice as to which stone to use, I don’t try to save space by combining them — just use the appropriate one for your spec.
I don’t macro creating Healthstones or Ritual of Souls, though I do include using Healthstones in my healing macros.
Finally, before I started using an Abyssal Bag to hold my Soul Shards, I kept them in my normal bags and used a macro to clean them out when I needed more space.
#showtooltip Soul Shard
/run i="Soul Shard"d=GetItemCount(i)-10 for x=0,4 do for y=1,GetContainerNumSlots(x) do if (d>0) then l=GetContainerItemLink(x,y) if l and GetItemInfo(l)==i then PickupContainerItem(x,y) DeleteCursorItem() d=d-1 end end end end
Let’s start with the basic grinding macro most Warlocks should level with.
/castsequence reset=target/combat,4 Curse of Agony, Corruption, Immolate, Life Tap, Drain Life
This should be your primary weapon, stacking DoTs in order of least aggro and damage (and longest duration) first. Because the instant-cast spells are first, you can cast it while moving, tabbing your way through mobs with the first two spells until you settle on one to drain tank.
That’s actually a key point to go over – just because a combo is mapped in a macro doesn’t mean you should finish it. Sometimes the first few spells, or the first spell, is the only one you need. This macro can just be used to apply your two major Affliction DoTs, or it can be used to focus fire on a single one. Many of the macros I use are chosen so I can flip between a sequence, like setting up Affliction DoTs, and priority refreshes, where you rotate through CDs. For example:
/castsequence reset=target/combat,5 Shadow Bolt, Haunt, Corruption, Unstable Affliction, Curse of Agony
I use this to set up a mob with all the DoTs required for deep Affliction. But once that setup is done, it serves one purpose – Shadow Bolt filler. The rest of the time I’m using two buttons, one for instants and the other for spells I have to stop to use:
/castsequence reset=target/combat,4 Curse of Agony, Corruption, Death Coil
/castsequence reset=target/combat Haunt, Unstable Affliction
These two macros allow me a lot of flexibility in how I dot up a target, without requiring 4 buttons. On the run? 1,1. Have more time for setup? 2,1,1,2. Or 2,2,1,1. Refreshing dots on a boss? Haunt and UA cycle nicely (notice no timed reset there) while CoA is always ready to go after reset (Haunt refreshes Corruption).
I group the spells into instants and stationary casts for two reasons — how much moving I do on the battlefield, and how I map my keys. Keymapping is a whole post to itself, but suffice to say that there are only 7 keys I consider to be in the primary zone, and only 4 of them are for single-target damage spells. So I want to be able to go through my primary and secondary attack sequences with those 4 keys. For affliction, there are 6 spells you must use: Shadow Bolt, Haunt, Unstable Affliction, Corruption, Curse of Agony, and Drain Soul. These macros let me fit all those spells into 4 buttons.
Destruction spells are organized with the same goal in mind, though I don’t draw a distinction between instants and casting time spells; Destro pretty much requires to to stand and cast. There is a slight difference in playstyle worth noting. They both are priority-based systems when determining what to cast next, but unlike Affliction, which is about DoT refreshing, Destro is a cooldown-based spec. It’s a subtle difference, but worth noting as it affects macro decisions.
There are 4 spells that make up your primary rotation, with 2 optional curses, Elements and Doom, which I’ll talk about later. The rotation varies based on situation and cooldowns.
My first rotation starts with Immolate to get that DoT ticking immediately. There is then a brief pause while Chaos Bolt is cast and travels to the target, but then Conflag, CB, and the second Immo tick hit all at the same time for massive burst. Then Backdraft-enhanced Incinerates go to work.
/castsequence reset=target/combat,3 Immolate, Chaos Bolt, Conflagrate, Incinerate, Incinerate, Incinerate, Incinerate, Incinerate
/petattack [target=Fire Resistance Totem]
I like this for several reasons: it does a huge amount of burst on players while maximizing DoT uptime, it puts Immo right where I want it for later casts, and it’s mostly spammable, with the CDs refreshing at about the right point in the sequence. The CDs don’t line up exactly, but it’s good enough for trash mobs.
The second rotation is used when I have a lot of range on my target and need to drop them quickly, but they don’t have that much health. Sometimes called the CICD rotation (Chaos Bolt – Immolate – Conflag – Dead), it doubles as my default Chaos Bolt button.
/castsequence reset=target/combat,4 Chaos Bolt, Immolate, Conflagrate, Incinerate, Incinerate, Incinerate
This sacrifices DoT uptime for one massive burst of damage. Follow it up with Shadowburn or Shadowfury for extra punch!
The third rotation doesn’t use a new macro at all; it uses the reset features of the previous ones. For boss fights where I want to pump out damage I cast manually, based on cooldown priority. After the first sequence I’m spamming Incinerate while waiting for Conflag and CB to come off CD and keeping my eye on Immolate. Paying attention can yield very good DPS gains on longer fights, so the macros are used only for initial setup.
Now, Curses in Destro. Long fights where you’re the only spellcaster? Curse of Doom. In a raid and someone else has Curse of the Elements duty? Curse of Doom. All other times? Curse of the Elements.
Because of CoE’s wonderful 5-minute duration, you generally can cast it once and be done with it. I use the following to apply it and then optionally put Corruption on the target. I don’t reset it while on the same target so I can keep spamming Corruption if necessary.
/castsequence reset=target/combat Curse of the Elements, Corruption, Corruption, Corruption, Corruption, Corruption, Corruption, Corruption, Corruption
If I have to reapply CoE on the target I’ll just click off of them and retarget to reset the sequence.
This macro is actually very useful for Destro locks in movement-heavy fights or on Wintergrasp siege engines. You may not be able to cast your normal spells through the WG lag, but at least you can help other people take them down.
Playing a Warlock means you play with a demon out. Some builds specialize in specific pets, while others can use a variety of pets. It’s easy enough to leave them on autoattack, but you really miss out on a lot of their special abilities. I use a macro to access their primary ability from a single button:
/cast [pet: felhunter, target=player] Devour Magic; [pet:felhunter,mod] Spell Lock; [pet: Succubus, target=focus] Seduction; [pet: Voidwalker] Sacrifice; [pet: Voidwalker,mod] Consume Shadows; Drain Mana
You can also combine your different summoning spells into a single button.
/cast [mod:shift] Summon Imp; [mod:ctrl] Summon Felhunter; [mod:alt] Summon Voidwalker; Summon Succubus
This is useful when you don’t have a particular pet buffed. If you have the Fel Domination talent, though, you may want to get a particular pet out in a hurry. The following makes use of the /stopcasting command to let you cast two spells in sequence:
#showtooltip Summon Succubus
/cast Fel Domination
/cast Summon Succubus
This “whistle” summons my Succubus nearly instantly — I do have to stop moving to cast the Summon spell.
If you find yourself specializing in a single pet, you may find some focus macros to be very useful. This is a macro I use to do focused Seduction:
/focus [target=focus,noexists]; [target=focus,dead]
/cast [pet:succubus,target=focus,exists,harm] Seduction; Seduction
Setting focus via macros is a whole separate post, but it’s worth experimenting to see what works for you.
Many of the macros here were originally from the WoWWiki page on Warlock Macros. I really recommend you spend some time over there looking at what other people have done and adapting them for your use.
And, despite what I said at the beginning of this post, I hope that even non-Warlocks can take some of the macro ideas presented here and find ways to make playing their own classes more enjoyable.