The macro system has received significant upgrades, expanding both its functionality and the number of supported operations. In practice, behavior trees have proven to be fairly complex to grasp, while Macros were always meant to occupy the niche between very simple auras and more sophisticated behavior trees. These changes aim not only to reinforce that position but also to incorporate many of the strengths from both Auras and Trees.
Let’s dive in:
This is the core concept from the Auras system. When something happens, a trigger fires. Then, in the aura, the following blocks are called sequentially:
This combination of blocks can describe many situations and automate gameplay. However, it often lacked flexibility — for example, it wasn’t possible to add additional conditions within blocks or repeat actions multiple times. Auras simply weren’t designed for that, but these features are fundamental to Macros.
The one thing Macros were missing was the ability to check their own current state — to know whether they should be active at a given moment.
CheckIsActive
This is where the new node CheckIsActive
comes in. Its sole purpose is to let the macro body check if the macro is currently active. Just this node alone allows Macros to replicate the exact logic that Auras used for years.
There are many possible ways this kind of macro could look. Here’s just one example:
The idea is simple:
OnEnter
) runs on entry.WhileActive
) is actually a Repeat
loop that runs every 250ms as long as the macro remains active.OnExit
) takes over to handle any exit logic.In the near future, additional improvements will make creating "Aura-like" macros even easier.
Here’s another example – a macro that waits for deactivation and performs an action only on exit. This mirrors the behavior of an aura with just OnExit
.
A whole set of nodes previously exclusive to Behavior Trees is now supported in Macros as well:
Note: The first three nodes (Selector/Sequence/Cooldown) are most useful inside a
Repeat
block — that’s where they shine.
Let’s build a simple rotation with two skills and a basic attack, using macros:
Nothing too special — we check cooldowns, then availability, then cast in order. If skills are unavailable, we fall back to a basic attack.
Now here’s the exact same logic, wrapped inside a macro:
The logic is nearly identical, except now we're building the rotation inside the macro itself with a loop, and using a Selector to control flow.
Side note: Looking at this screenshot, it seems like I went a bit overboard with icons and formatting — it’s a bit too "noisy". I’ll try to clean that up.
Finally — in the foreseeable future, macros will also be editable in a graph view. This feature is still in development, but many users may find it easier to understand and work with macros this way.