A totem is a summoned creature, not an aura, so nothing in the addon could see one. Strength of Earth and Mana Spring could be faked through [nomybuff], but Searing, Magma, Fire Nova, Tremor and Grounding put nothing on the player at all, and those are the ones worth conditioning a recast on. There was no workaround. ClassicAPI backports the TBC totem bar (src/totem/Tracker.cpp), tracking the player's own summons from their SMSG_SPELL_GO and classifying them by the summon spell's SUMMON_TOTEM_SLOT1..4 effect, so Turtle's custom totems self-classify. Ungated like GLOBAL_MOUSE_*: the tracker landed in v1.10.0, far below the v1.15.0 floor the addon already refuses to run below. [totem:X] takes an element (fire/earth/water/air), a slot number, or the totem's own name -- ResolveTotemSlot tries the slot table first, then matches X against the name standing in each slot, so [totem:Searing_Totem] asks for that totem rather than whatever holds the fire slot. Bare [totem] takes the action as its argument the way [mybuff] does, making /cast [nototem] Searing Totem a complete recast macro. Comparisons follow the aura precedent exactly: an empty slot reads -1, the same "missing counts as least" ValidateAura uses, so [totem:Searing_Totem<5] passes while the totem is expiring AND while it is absent -- one clause, no [nototem] needed. A totem is either up or it isn't, so #N stack comparisons read 1 for a standing totem. The parser needed nothing: its name/operator/amount capture is generic, so multi-comparisons ([totem:X>2&<8]), OR groups and the De Morgan flip all came for free. Occupancy is read from GetTotemInfo's totemName, never from the time left. GetTotemInfo's first return is TOOL presence -- whether the player carries the slot's Earth/Fire/Water/Air Totem item -- not whether a totem is out, and a summon spell with no SpellDuration row reports 0 seconds, which is "up with no timer", not "absent". Icon refresh needs two feeds. PLAYER_TOTEM_UPDATE covers a slot changing hands (dropped, expired, killed, recalled). It does not fire as a totem counts toward zero, and unlike an aura there is no ambient event stream to ride -- UNIT_AURA is what quietly keeps [mybuff:X<N] honest -- so a [totem:X<N] icon held its last answer until some unrelated event queued a refresh: the macro sat on the question mark through the window it should have lit up. Hence the once-a-second re-test in OnUpdate while any totem timer runs, skipped in realtime mode, which re-tests everything anyway. Only the icon was ever at stake; the click path evaluates conditionals live.
SuperCleveRoid Macros
Enhanced macro addon for World of Warcraft 1.12.1 (Vanilla/Turtle WoW) with dynamic tooltips, conditional execution, and extended syntax.
Full Documentation on the Wiki
Requirements
| Mod | Required | Purpose |
|---|---|---|
| Nampower (v3.0.0+) | ✅ | Spell queueing, DBC data, auto-attack events |
| UnitXP_SP3 | ✅ | Distance checks, [multiscan] enemy scanning |
| ClassicAPI (v1.15.0+) | ✅ | Modern C_* API: dispel-type conditionals ([magic], [curse], …), [moving] speed, unit-filtered events |
Installation
- Download and extract to
Interface/AddOns/SuperCleveRoidMacros - Recommended pfUI: Use brues-code/pfUI for full compatibility with macro spell scanning and action bar features
Quick Start
#showtooltip
/cast [mod:alt] Frostbolt; [mod:ctrl] Fire Blast; Blink
- Conditionals in
[]brackets, space or comma separated - Arguments use colon:
[mod:alt],[hp:>50] - Negation with
noprefix:[nobuff],[nomod:alt] - Target with
@:[@mouseover,help],[@party1,hp:<50] - Fallback groups, Blizzard-style:
[@mouseover,help][@focus,help][] Rejuvenationtries each[...]in order and the first that passes casts the shared spell;[]always passes. Mixes freely with; - Spell names with spaces:
"Mark of the Wild"orMark_of_the_Wild
Multi-value logic:
| Syntax | Logic | Example |
|---|---|---|
[buff:X/Y] |
OR | Has X or Y |
[buff:X&Y] |
AND | Has X and Y |
[nobuff:X/Y] |
NOR | Missing both |
[nobuff:X&Y] |
NAND | Missing at least one |
Comparisons: [hp:>50], [hp:>20&<50], [buff:"Name"<5] (time), [debuff:"Name">#3] (stacks)
Wiki
See the Wiki for complete documentation:
- Quick Start — Syntax, multi-value logic, comparisons, special prefixes
- Slash Commands — All 35+ commands, priority macros, UnitXP scanning
- Conditionals — 150+ conditionals (player & target), short aliases, extended unit tokens, multiscan
- Reference Tables — CC types, damage schools, stat types, swing types
- Features — Debuff timers, combo tracking, talent modifiers, TWoW mechanics
- Overflow Buff Frame — Hidden buff display for 32+ buffs
- Immunity Tracking — Auto-learned NPC immunities
- Settings — Configuration and console commands
- Supported Addons — Compatible addons and integrations
Known Issues
- Action-bar macros are identified by slot, so blank or duplicate macro names are fine. Only macros referenced by name (
{MacroName}nesting,/runmacro "Name") still need a unique name to disambiguate. - Reactive abilities must be on action bars for detection
- Debuff time-left conditionals only work on own debuffs unless pfUI libdebuff or Cursive has data
- Macro line length: 261 characters max (MacroLengthWarn extension prevents crashes)
Supported Addons
Unit Frames: pfUI, LunaUnitFrames, XPerl, Grid, CT_UnitFrames, agUnitFrames, and more
Action Bars: Blizzard, pfUI, Bongos, Discord Action Bars
Integrations: SP_SwingTimer, TWThreat, TimeToKill, QuickHeal, Cursive, ClassicFocus, SuperMacro
Note: For pfUI users, the brues-code/pfUI fork includes native SuperCleveRoidMacros integration for proper cooldown, icon, and tooltip display on conditional macros.
Credits
Based on CleverMacro and Roid-Macros.
MIT License