Vanilla Scripting
In Vanilla, tank and assist targeting was done using the /script
command, executing direct LUA calls in game. A LUA variable was set in code that contained the name of the Assist character, and then additional macros would target the same target as the assist, then cast spells, before returning to whatever target you had. The name of the assist variable was just a text name, so we’ll use the name ‘focus’.
Setting Assist To Selected Target
/script focus=UnitName("target")
Casting spells to Assist
/script AssistByName(focus); CastSpellByName("Fireball"); TargetLastTarget()
Healing the Assist without needing to manually target them
/script TargetByName(focus); CastSpellByName("Healing Touch"); TargetLastTarget()
For more information and expanded macros, see here: https://wow.gamepedia.com/Macro_(1.0)#Assist_Main_Tank.2FMain_Assist
The purpose of these macros was to ensure that in raiding, people were focusing on the right target and coordinating the kills. They were also heavily used by healers to ensure that they could always have a button to push that would allow them to heal the main tank immediately. Additionally, CC classes used them to manage the various sheeps and banishes in raiding and PVP.
These were expanded in Addons to become what we knew as the Main Tank and Main Assist windows. Macros could be used to directly target these raid leader selected targets, and eventually Blizzard added the functionality to the Raid UI to get these values set.
In 2006 while developing The Burning Crusade, Blizzard wanted to start restricting the ability of macros to do complex decision making for the player in one button push. A simple example of the type of spell was:
/script class = UnitClass("target"); if ( ( class == "Rogue" ) or ( class == "Warrior" ) ) then CastSpellByName("Blessing of Might"); else CastSpellByName("Blessing of Wisdom"); end
This meant that a Paladin would cast Might on Rogues and Warriors and Wisdom on everyone else, without having to manually decide. Rogues on the Vaelastrasz fight had an even more complex one button macro that chose what abilities to use based on how long S&D had left and how many combo points they had.
Their solution? Secure Frames, Unit IDs and the Macro Conditional Model
TBC and Secure Code
In The Burning Crusade, Blizzard completely remade the UI with regards to targeting. They created what are called “Unit IDs” that represent different targeted elements.
player
- The character itself.
target
- What the character is targeting.
targettarget
- What the character’s target is targeting.
pet
- Your pet.
pettarget
- Your pet’s target.
party1
- The first member of your party.
party2
- The second member of your party.
raid1
- The first member of your raid.
raid40
- The 40th member of your raid.
etc.
However, aside from target
, the player had no control over the Unit that each of these unit IDs referred to. You couldn’t control your target’s target, or who was in what spot in the raid.
In order to revive and continue the ability for the player to set a 2nd ‘target’, for use as an Assist, CC or as a Heal target, they created a Unit ID called focus
.
This focus
unit ID was essentially unique in that the player could control it, and it wasn’t their current target. As with all other Unit IDs, they added Secure Unit Frames for this Unit ID, and they also added a key bind and a slash command (/focus
) to allow you to set it.
The new macro conditional changes allowed these Unit IDs to be used in macros in the way we all likely recognize to this day.
Self Cast
/cast [@player] Healing Touch
Cast at your pet’s target if it exists.
/cast [@pettarget,exists] Aimed Shot
In particular the focus
unit was used extensively by CC macros, so that a mage or warlock etc didn’t have to re-target the CC’d mob to keep them under control. This had an added benefit of making sure you didn’t accidentally fireball your sheep.
/clearfocus [@focus,noharm][@focus,dead]
/focus [@mouseover,harm,nodead][@focus,noharm][@focus,dead]
/cast [@focus,harm] Polymorph
These macros performed exactly the same feature that the custom LUA unit variables did in Vanilla, ensuring that players did not lose the acceptable functionality, while Blizzard got to limit macro’s ability to make complex decisions and choose which spell to cast. The functionality was the same, but the form had changed.
Classic WoW
When Blizzard began rebuilding Classic WoW from the Vanilla data files, they decided that they wanted to keep the improved security and control of the modern Retail API, instead of going back to the uncontrolled and exploitable 1.0 macro model. They began to port the modern API over to the Classic client and had to make some changes along the way, to remove features not found in Vanilla, as well as add features not in Retail (such as weapon skill).
During this process, a developer looked at the focus
Unit Frame and unit ID, and said “This wasn’t in Vanilla.” In the strictest sense it was a correct statement. However, in the wider picture, it was incorrect. The functionality that the focus
unit ID provided was in Vanilla, however it was in the form of the old 1.0 macro model.
By the same token, there were no unit IDs in the 1.0 model, so the same argument could be made for target
or pet
. Obviously there were Target unit frames, and Pet unit frames in Vanilla, but they weren’t Secure Unit Frames, so again, the functionality existed, but the form has changed. The Target frame varies from the Focus frame in the fact that there was a visible frame, and they made the new one look like the old one, but the focus
functionality existed nonetheless.
To my mind, this is an oversight by the development team, in that the equivalent of the focus
unit ID existed in Vanilla, and removing it removed part of the Vanilla meta experience.
The Request
To bring this history lesson back to a relevant request, here it is.
Please reintroduce the focus
unit ID back into the Classic macro API to allow us to have the same functionality that we did in Vanilla, even if the form is slightly different.
We don’t require a Focus Frame, though the /focus
slash command and the keybinding are required so that we can set the focus
unit ID to a value. This would present as the same functionality because in Vanilla you required an addon to display the set Focus and in Classic you would be able to do the same. However, because of the secure Unit ID system, you can’t create a custom Unit Frame without the underlying Unit ID, in this case focus
.
The focus was used for various things in Vanilla such as:
- Assisting the focus by casting at the
focustarget
. Set the main assist to thefocus
and no macro changes are required when the main assist changes. - Managing CC without changing targets. The Garr fight for example, warlocks have to banish 5 of the minions while still DPSing the unbanished ones.
- Healing the Main Tank while saving raid members. Healers will
focus
their primary healing target, and often use a modifier macro to cast on thatfocus
such as holding down Ctrl, instead of whatever their current target is.
All of these activities are no longer available to be done by macros in Classic, creating a different meta game from Vanilla. Because the functionality was in Vanilla, and we are forced to use a non-Vanilla macro API, that macro API should continue to implement the method by which the 2.0.1 UI changes allowed the 1.0 functionality to exist in a limited form.
Therefore, please revert the change to the modern API ported from Retail to Classic, such that we the getfocus
unit ID back.
TL;DR
focus
existed in Vanilla, and needs to exist in Classic.