The following two topics are about side-effects of the program flow of macros that are important to understand since they can cause extremely confusing bugs in your macro. The first of these topics is Cooldown Limitations.
Cooldown limitation refers to the interaction between skill cooldowns, the GCD, and program flow. When a macro never gets far enough down the macro command list to execute a skill, this is a cooldown limitation. This is the primary reason why macros are made in "reverse order" in relation to their cooldowns. To avoid a cooldown limitation you typically want to order the skills from highest cooldown to lowest, though there are exceptions. This is also the reason why typically you can not have more than one non-proc no-cooldown skill in a macro as the skill should always be valid, therefore preventing execution of any skills below.
If, however, you have a lot of skills in a macro or have re-arranged the commands to optimize execution order (the skills aren't in highest -> lowest cooldown order) you can ensure your macro will not suffer from cooldown limitations via an analysis:
An example to demonstrate the above principles:
- Determine time remaining before the cooldown refreshes by taking the cooldown and subtracting either the cast time or the GCD (whichever is higher): (skillCD - max(GCD/castTime))
- Determine the amount of time used by each successive skill by using either the cast time or the GCD (whichever is higher): (max(GCD/castTime))
- At the point in which the summation of the successive skills is equal to or greater than the cooldown refresh time by a GCD, no more skills after that will execute (assuming first execution). The exception to this being if one or more cooldowns on successive skills are longer than the initial skill's cooldown. Each skill which has a longer cooldown than the initial skill's cooldown will grant one extra skill per macro activation while it is on cooldown.
- You can apply these steps recursively to determine whether all areas of the macro will activate at some point and to also determine the execution pattern.
Each line is a new skill, CT = cast time, CD = cooldown
The program flow:
1) CT 0; CD 10
2) CT 5; CD 8
3) CT 0; CD 8
4) CT 0; CD 6
5) CT 0; CD 0
The final topic I'd like to discuss is Order of Execution/Optimization. This is a very general idea, and is the reason behind the exceptions in the cooldown limitations section above. Ordering cooldowns from highest to lowest may be the easiest way, but it is not always the optimal way. The program flow of macros is sequential starting from the first line, therefore you can easily optimize the order of execution by arranging skills in such a way that skills only activate when you need them to.
Take for example a possible Justicar macro:
Bolt of Radiance is instant cast, 8 second CD; sovereignty is instant cast, 20 second CD; precept of refuge is instant cast, 5 second CD; censure is instant cast, 6 second CD; strike of judgment is instant cast, no cooldown. Also, precept of refuge has a buff that lasts for 8 seconds, and censure has a debuff that lasts for 15 seconds.
#show Bolt of Radiance
cast Bolt of Radiance
cast Precept of Refuge
cast Strike of Judgment
As you can see, this macro is very much not organized via cooldowns, so why is it organized the way it is? Simple, optimization. Clerics have a GCD of 1.5, and all these skills are instant cast, so it's easy to show that no cooldown limitations will occur (1.5x5 = 7.5 < 8, 1.5x4 = 6 < 20, 1.5x3 = 4.5 < 5, 1.5x2 = 3 < 6). Bolt of Radiance is obviously first as a threat generator (forces mob to attack for 3s), Sovereignty is most likely placed second due to its range and additional threat from damage, Precept of Refuge carries an important shield buff, and Censure/Strike of Judgment bring up the rear with an unimportant debuff and damage.
So what does the execution look like? That's easy enough to analyze:
So looking at that in terms of the PoR buff:
PoR buff (lasts 8 seconds): 7.5 seconds until refreshed, 6 seconds until refreshed, 7.5 seconds until refreshed
So the 15% block buff never dropped off us in the above execution. That could mean the difference between living and dieing. People tend to believe that simply throwing skills into macros and spamming the buttons is the way to go, but a more careful analytical approach usually leads to a better macro.
In this section I'll outline some basic tips for making functional macros. Nothing extraordinary, and after reading the above sections most of these are probably obvious:
- Put proc skills at the top of the macro. Yes, you can technically put them at the bottom (you'll activate them during the GCD on normal skills), but it requires you to spam the macro button extremely fast, especially for rogues.
- You can have more than one instant-cast no-cooldown skill in a macro as long as there are instances in which all but one are invalid. For example, many Champ/Paras have their main spam macro setup like this:
Path of the Wind and Power Strike are both instant-cast no-cooldown skills (though this will change in 1.1), but Power Strike can only be used in melee range. This means that as long as you aren't in melee range Path of the Wind will be used, otherwise Power Strike will be used.
cast Power Strike
cast Path of the Wind
- Use modifiers sparingly. Many times people will forget they have modifiers in a macro and the associated skill will go unused. Also using a modifier with multiple skills in a macro is uncomfortable, as you have to hold down either shift/alt/ctrl (whichever you used) and spam a macro key. I generally tend to use modifiers only for high-cooldown situational skills that fit the theme of that macro.
- Don't be afraid to macro only one skill (like with mouseover macros) or to macro a whole lot of skills. As long as the skills used in the macro make sense, function properly, and aren't skills you need to activate on the fly (like "oh shi-" skills) it probably won't cause any issues. If it does, just change the macro.
- Finally, macros are supposed to make life easier. If you find it making it harder, reconsider using a macro for whatever you're trying. Not everything feels "natural" when macro'd.
References[list][*]Commands List: A great reference for the various commands and emotes in RIFT. The most structured guide I have found, and it includes examples that show not only how to use the command, but what it will do. A must-bookmark for any serious macro maker.
As a final note, I'd like to thank Trion for bringing us such a great game along with all the bug fixes and new content that they managed to churn out so fast. I'd like to thank the community for the initial macro information that got me started, and I'd like to give a special thanks to the section of the community who dedicate themselves to discovering new and interesting mechanics behind the game that we all love.
If editing is allowed in the future, I'll try to keep this guide as up-to-date as possible along with any rewording that needs to be done in order to clarify any of the sections. If anyone wants to contribute real-world macro examples of anything presented in this guide, I'd love to have them associated with the guide, so feel free to post the macro. That'll ensure credit is given to the originator.
Thank you for reading, hope it helped de-mystify macros for some people,