Skip to content

About

World Of Warcraft Cooldown Enhancement Addon

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Cooldown Master

Support on Ko-fi Donate with PayPal Join our Discord Version Languages WoW Midnight WoW Classic Era WoW TBC WoW MoP WoW Forever Interface License

A timeline-style cooldown tracker for World of Warcraft. Your spells, items, potions, and trinkets glide along lanes toward a ready edge, with depleting bars and pop-up alerts the moment they come up. The visual companion to Blizzard's built-in Cooldown Manager. Install it and it just works. Your cooldowns show up automatically, in your own language, with deep customization there if you want it.

Runs on Midnight (retail 12.1), Classic Era, Burning Crusade Classic, Mists of Pandaria Classic, and WoW Forever from one code base, ships in seven languages, and registers a LibDataBroker launcher plus minimap button so panel addons like Titan Panel, Bazooka, Arcana, and other LibDataBroker displays pick it up automatically.

WoW Forever support is a work in progress, so expect bugs. Forever plays by the original game's rules, but it runs on the modern retail client, so Cooldown Master finds your spells there the Classic way and reads their cooldowns the Retail way. Wherever this page says Classic, it means Classic Era, Burning Crusade Classic, and Mists of Pandaria Classic. Forever is called out on its own wherever it differs, and Flavor differences has the full list.


Contents

Using it

  1. What it does
  2. How it works, and why Retail settles in after a few casts
  3. Quick start
  4. Lanes
  5. Bars
  6. Ready boxes
  7. What gets tracked
  8. Filters and routing
  9. Highlights and flags
  10. Custom cooldowns
  11. Text tags
  12. Test mode
  13. Appearance and media
  14. Masque
  15. Profiles
  16. Panel addons and the minimap button
  17. Slash commands
  18. Flavor differences
  19. Languages

For developers

  1. Midnight and the secret-value API
  2. The localization pipeline
  3. Building and running locally

Project

  1. What is next
  2. Credits
  3. Found a bug or have an idea?
  4. License

What it does

Cooldown Master shows you when your abilities come back, in three different styles, and you can use any mix of them at once.

Lanes are the signature view. Every ability gets an icon that travels along a lane toward a "ready" edge, at a speed set by its own cooldown. Long cooldowns sit at the far end, imminent ones crowd the ready edge, and the whole rotation fans out by urgency so you read it at a glance.

Bars are the classic view. A tidy list of depleting status bars, each with an icon, the spell name, and a live countdown, sorted by time remaining.

Ready boxes are alerts. An icon pops the instant a cooldown finishes, holds for a few seconds, then fades.

Out of the box you get three lanes, one bar frame, and one ready box, so you can see the three styles side by side and keep whichever suits you. Everything routes to Lane 1 except your potions, which start on Lane 2, and Lane 3 is left empty as a spare. Every cooldown can be sent to any combination of the three, either by category or one spell at a time.

Cooldown Master complements Blizzard's built-in Cooldown Manager rather than replacing it. On Retail it reads the same category sets. On the Classic flavors, which have no Cooldown Manager, and on WoW Forever, it scans your spellbook instead. Either way your abilities appear automatically with nothing to set up, and it adds the timeline, the bars, and the ready alerts that the built-in one does not have.

It only ever displays information. It never casts, queues, or automates anything.


How it works, and why Retail settles in after a few casts

To place an icon on a timeline, Cooldown Master has to know how long that cooldown really is, including your talents and your haste.

On Classic that number is readable at any time, so there is nothing to learn and nothing to wait for.

On Retail (Midnight) Blizzard hides cooldown numbers from addons during combat, so Cooldown Master learns them instead. Out of combat it reads your true cooldown lengths directly and saves them to your settings profile, which your characters share unless you keep per-character profiles, so a spell is only ever learned once. During combat, where the number is hidden, it times each cooldown from start to finish to fill in anything it has not seen yet.

On WoW Forever it works the same way as on Retail. Forever runs on the modern client, which hides cooldown numbers from addons in combat just the same, so Cooldown Master learns your cooldown lengths out of combat there too.

What that means for you. On a fresh install, a new character, or right after a spec change, give it a minute. For the first few casts some icons may sit slightly off on the lane while it works out their real timing. It sharpens with every cooldown you use, and once a spell is learned it stays learned across sessions.

For your spells and items the countdown number and the swipe are exact. Those come straight from Blizzard's own cooldown widgets, and your spells on Forever get theirs the same way. It is only the icon's position along the lane that settles in as it learns. Offensive dot timers are the exception, because Blizzard hides those in combat by every route, so their countdown is Cooldown Master's own learned estimate.

If a spell or buff is missing, or has landed in the wrong category, please say so on the Discord or open a GitHub issue and it will get sorted.

The technical detail behind all this is in Midnight and the secret-value API.


Quick start

  1. Install and log in. Your cooldowns should already be moving along Lane 1.
  2. Type /cm, or click the minimap button, to open the settings window.
  3. Frames start unlocked, so drag them where you want them and then type /cm lock. Type /cm unlock, or right-click the minimap button, whenever you want to move them again.
  4. Type /cm test to fill the frames with sample cooldowns while you set things up, and again to turn it off.

That is enough to use it. Everything below is optional.


Lanes

Options > Lanes. You get three lanes, all on by default, with Lane 3 left empty as a spare for you to fill or switch off. Each lane is configured independently. Lanes opens in the sidebar into General, Appearance, Icons, Stacking, and Text, and the Lane 1 / Lane 2 / Lane 3 switch at the top of every page picks which lane you are editing. A lane that is switched off shows dimmer there.

General

Frame Name is the name tag shown above the lane while frames are unlocked. It is purely for your own reference.

Enabled turns the lane on or off. A lane that is off draws nothing, and it shows as "Lane N (off)" everywhere you can route a cooldown to it.

Reversed flips the direction of travel, so icons move the other way along the lane.

Vertical runs the lane top to bottom instead of left to right. Toggling it swaps the lane's Width and Height so the bar keeps its shape, just rotated.

Mode and Max Time

Mode decides how a cooldown's time remaining maps to its spot on the lane. This is the single most important setting on a lane.

Mode What it does Best for
Linear Each icon spans its own cooldown, so it sits at the middle when half its own cooldown is left. A cooldown longer than Max Time stays hidden until it is within range, then appears part way along. Seeing progress as a percentage, regardless of length
Timeline (seconds) One shared seconds axis. Position is time remaining divided by Max Time, evenly. A true, honest timeline
Logarithmic (seconds) Same shared axis, but the last few seconds spread out wide and long cooldowns compress toward the far end. Rotations where the final seconds matter most
Split (seconds) You shape the curve yourself with up to three control points. Full control, see below

Max Time (seconds) is the most time left the lane will display, from 10 up to 360. A cooldown with more time left than this stays hidden until it comes within range, because Hide Long Timers (below) is on by default. Untick it and that cooldown is drawn the whole time instead, parked at the far end until it comes within range on Timeline, Logarithmic and Split, and traveling its own full span on Linear.

In Linear mode Max Time no longer decides position, since each icon spans its own cooldown, but it is still the threshold Hide Long Timers measures against, so it is not inert there.

Split mode, explained

Split mode lets you decide exactly how much lane space each stretch of time gets.

Set Split Points to how many control points you want (1 to 3). Each point has two sliders:

  • Point N Time (sec) is a number of seconds remaining.
  • Point N Position (%) is where along the lane that moment should sit.

Cooldown Master draws a straight line from the ready end (0 seconds, 0%) through each of your points, and on to the far end (Max Time, 100%).

A worked example. Set Max Time to 360, Split Points to 1, Point 1 Time to 30, and Point 1 Position to 70.

You have just said: the last 30 seconds should take up 70% of the lane, and everything from 30 seconds out to 6 minutes gets squeezed into the remaining 30%.

The result is a lane that gives you a huge amount of room to read your imminent cooldowns, while still showing you that your long ones exist. A cooldown with 15 seconds left sits at 35%. One with 30 seconds left sits at 70%. One with 6 minutes left sits at 100%.

Two rules the curve enforces. A point set at or beyond Max Time is ignored, because it would strand the end of the lane as unreachable. A point that does not advance both time and position past the point before it is also ignored, because it would fold the curve back on itself. In both cases the lane just falls back to a straight line through whatever points remain valid.

Hide Long Timers and Auto-hide

Hide Long Timers hides a cooldown while it has more time left than the lane's Max Time, instead of parking it at the far end. It is on by default.

The next two sit under the Auto-hide heading on the same page.

Override Autohide keeps this lane's background, border, name, and markers visible even when Auto-hide Frames is switched on globally.

Keep Shown While Running is the softer version of the same idea. With Auto-hide Frames on, the lane keeps its chrome out of combat for as long as a cooldown is still traveling on it, then hides it again once the lane empties. It is off by default and set per lane. Override Autohide wins on a lane where you have ticked it, and this option stands aside while Unlock Frames is on, so a lane never changes shape under your cursor mid-drag.

Secondary tracking (Classic only)

Primary Tracking fills the whole lane like a progress bar for a recurring timer. Secondary Tracking adds a second, thinner bar that slides along it. Both can be set to GCD (your global cooldown), Swing (your main hand swing timer), or None.

Both bars draw with the ST Texture and ST Color below, not with the lane's own Lane Texture and Lane Color. Primary fills the whole lane, so ST Width and ST Height size the sliding Secondary bar only. Reverse Primary and Reverse Secondary flip each one's direction independently, relative to the lane's own Reversed setting.

These are Classic only. On Retail, Blizzard's own Cooldown Manager already covers this ground. On WoW Forever they are switched off and hidden, because the swing timer needs the combat log, which Cooldown Master does not use on Forever, and the GCD needs cooldown numbers that Forever hides from addons in combat.

Appearance

Width, Height, X Offset, Y Offset, and Anchor position and size the lane. Width and Height each run from 1 up to 1300, and on a vertical lane it is Height that sets how far an icon travels. Anchor is the screen point the lane is measured from, and the offsets move it from there.

Lane Texture and Lane Color style the bar itself, and each texture in the list shows a preview swatch so you can see what you are picking. Use Class Color (Lane) overrides the color with your class color.

Show Border, Border Texture, Border Color, Border Padding, and Border Size control the frame around the lane. Border textures also preview in the list. A soft border like CDM Soft Edge needs room to fade, so raise Border Size to around 6 or it squashes into a smear. Setting Border Texture to None draws no border art at all, which is the tidiest way to drop the frame while leaving Show Border alone.

Lane Alpha fades the whole of the lane's chrome together: background, border, markers, status line, and name tag. Icons are untouched and keep their own Transparency on the Icons page. It sits with Lane Texture and Lane Color in Appearance's Lane card.

Icons

Size, Transparency, and Icon Offset control the icons themselves. Icon Offset nudges them across the lane, perpendicular to their direction of travel.

Pulse makes an icon breathe in and out as it travels, so a lane you care about is easier to catch out of the corner of your eye.

  • Pulse Within (sec) starts the pulsing only once a cooldown is that close to ready. Set it to 0 to pulse the whole way along the lane.
  • Pulse Strength is how many pixels the icon grows on each edge at the peak of each pulse.

Masque skins draw their own icon, so the pulse steps aside while a skin is active.

Cooldown Tint (0 = off) darkens the cooldown swipe over the icon.

Show Icon Border draws a solid ring around each icon, with its own size and color.

Show Timer, in the Countdown Timer section, draws the time left on the icon, styled by the Timer Font section below it: Font, Font Size (0 means scale with the icon), Font Outline, and Font Color.

Show Label, in the Icon Label section, adds a line of tag-built text from Label Text, with its own font, size, outline, and color. See Text tags.

Label Position, in the same section, anchors that label above, on, or below the icon.

Stacking

When cooldowns bunch up near the ready edge they can cover each other. Stacking keeps them readable.

Enabled turns stacking on for this lane. It is off by default, so nothing below takes effect until you tick it, apart from Raise On Mouseover, which works on any lane.

Stack Style What it does
Grouped Overlapping icons stack into rows
Spread Icons are nudged apart along the lane
Offset Icons fan out with an even step

Grow Direction sets which way the stack builds (Up, Down, or Center on a horizontal lane, Left, Right, or Center on a vertical one). Height caps how far it can grow. Spread uses neither, so both are hidden for it. Raise On Mouseover brings a hovered icon to the front. Icons only notice the mouse while Enable tooltips is on under Global and frames are locked, so the option is dimmed until both are true, and Enable tooltips is off by default.

Text

This page controls the labels printed along the lane itself, plus the lane's name tag and its status line.

Lane markers and auto labels

A lane can show up to five position markers, the little labels that tell you where you are on the timeline. By default they read Ready, 25%, 50%, 75%, and 100%.

The markers are a five-row table in the Default Text card, one row per marker: a tick box to show it, Anchor By, its Text, and its position. Anchor By is the part worth understanding, because it decides two separate things at once: what pins the marker in place, and who writes its text.

Anchor By Pinned to Text written by
Percent of lane A spot on the lane You
Percent of lane (auto label) A spot on the lane Cooldown Master
Time (seconds) A number of seconds You
Time (auto label) A number of seconds Cooldown Master

A marker's position is in percent or in seconds, whichever its Anchor By pins it to. The two are views of the same spot, and Cooldown Master keeps both up to date, so switching Anchor By leaves the marker where it was. An auto label's Text is dimmed, because Cooldown Master writes it.

Why the auto label options exist. Say you hand-type a marker that reads "30s" and place it at 70% of the lane. Later you change Mode from Timeline to Logarithmic, or raise Max Time from 180 to 360. That spot on the lane is no longer 30 seconds, but your label still says "30s", and now it is lying to you.

An auto label solves itself every time the lane changes. Set it to Percent of lane (auto label) and it stays at 70% and rewrites its own text to whatever time actually falls there. Set it to Time (auto label) and it stays pinned to 30 seconds and moves itself to wherever that lands.

On a Linear lane the Time anchors are not offered. Linear has no shared clock, because every icon spans its own cooldown, so no single number of seconds is true at a given spot. Anchor By shows only the two percent choices there. A Time anchor you saved while that lane was on another Mode is kept, and comes back the moment you switch it to Timeline, Logarithmic or Split.

Label placement

Label Placement puts the whole set of markers above the lane bar, on it, or below it. Move them off the bar when tall icons cover them.

On a vertical lane the cross axis rotates with everything else, so Above lane places them to the right of the lane and Below lane places them to the left.

X Offset and Y Offset nudge every label from wherever the placement put it.

The Marker Font section, with its Font, Font Size, Font Outline, and Font Color, styles all five markers together.

The Name Tag Font section below it styles the lane's own name tag, the one that appears above the bar while frames are unlocked.

Status line

Show Status Line, in the Status Line section, adds a live readout to the lane, for things like the next cooldown coming up or how many are currently down. It is off by default. See Text tags.


Bars

Options > Bars. Three bar frames, off by default except the first. Bars opens into General, Appearance, Bar, and Text, with a Bars 1 / Bars 2 / Bars 3 switch at the top of every page. Each one is a list of depleting status bars, sorted by time remaining, longest first by default, which you can flip with Sort Order.

Enabled, Frame Name, Anchor, X Offset, and Y Offset work the same as on a lane. Frame Alpha fades the whole frame, bars included, where a lane's Lane Alpha leaves the icons alone.

Texture and Color style the fill, with preview swatches in the texture list, and there is a Use Class Color option. The Bar Background section has its own Texture and color, sitting behind the fill.

Bar Width and Bar Height size the bars, Spacing sets the gap between them, and Frame Padding insets them from the frame edge. Max Bars caps how many show at once, from 1 to 20, 10 by default. The cap keeps the first ones in Sort Order, so with the default Longest first it is the bars closest to ready that drop off when a frame overflows. Set Sort Order to Shortest first if you would rather lose the far-out ones.

Grow Direction builds the list up, down, left, right, or out from the center vertically or horizontally, so a bar frame can run as a column or a row. Sort Order picks Longest first, the default, or Shortest first.

Icon Position puts the icon on the left or right of each bar. The Text page styles the spell name and the countdown independently, each with its own font, size, outline, and color, under Show Name and Show Time.

Long cooldowns, and handing them to a lane

These two settings, both under Bars > a bar frame > General, let a bar frame cover the long end of your cooldowns while the lanes stay quick.

Show Extremely Long Cooldowns lets this one frame reach past the Ignore Threshold that keeps abilities longer than half an hour off your lanes, up to 60 minutes. It covers everything shorter than that too — a 45 minute cooldown shows, not only the very longest ones. It applies to the frame you tick it on, so your lanes and ready boxes carry on as they were, and a cooldown you hid by hand on its Filters row stays hidden. It is off by default.

Hand Off Below (sec) is the other end of the same idea. The frame lets go of a cooldown once it has that many seconds left, so a lane can carry it the rest of the way. The bar takes the long haul, the lane the final approach. 0, the default, keeps every cooldown on the bar right through to ready.

It takes two settings, not one. Hand Off Below decides when the bar lets go. What decides when the lane picks up is that lane's own Max Time and Hide Long Timers, over under Lanes. So set Hand Off Below to the lane's Max Time, and make sure that lane has Hide Long Timers ticked. With both in place a ten minute cooldown sits on the bar until it reaches two minutes, then leaves the bar for the lane. It enters at the far end on Timeline, Logarithmic and Split, and a fifth of the way from the ready edge on Linear, where it spans its whole ten minutes. With Hide Long Timers off, the lane draws that cooldown the entire time instead — clamped to the far end of the lane on any Mode but Linear, because it cannot travel a distance it does not fit in — and the hand-off looks like it did nothing.

Tick it on the frame your cooldowns actually go to. Both settings belong to one bar frame, and what decides which frame a cooldown lands on is Default Bar in the category's Defaults card under Filters, or the Bar column on an individual spell's row. Everything ships routed to Bars 1, and Bars 2 and 3 start switched off, so ticking the box on Bars 2 does nothing until you enable that frame and send something there as well. If you want a dedicated frame for your long cooldowns, enable it under Bars and then point a category or a few spells at it.

How they work together. The lane has to be able to show the cooldown it is handed, and what decides that is the category's Ignore Threshold, not the bar's setting — so for anything longer than that threshold, raise it first or the cooldown will simply leave the bar and go nowhere. Mind the gap in the other direction too: a hand-off higher than the receiving lane's Max Time leaves a stretch where neither surface draws the cooldown, so keep the two numbers equal unless you mean otherwise. The Hand Off Below slider moves in steps of 5, and a number you type snaps to the nearest step too, so give the lane a Max Time that is a multiple of 5 and set the two equal. The default Max Time, 120, already is. If they differ, keep the hand-off below the lane's Max Time rather than above it — overshooting the lane is what opens the gap.

A few things worth knowing. Hand Off Below applies to everything on that frame, not only to long cooldowns, so a frame that also carries your buffs will drop those at the same mark. A bar showing hour-long cooldowns holds those places in its list for the whole hour, so raise Max Bars or give them a frame of their own. And a long cooldown that only a bar can see stays out of your ready boxes, so it finishes quietly rather than popping an icon an hour after you cast it.


Ready boxes

Options > Ready. Three notification boxes, the first on by default. A ready box pops an icon the instant a cooldown finishes, holds it, then fades it out. Ready opens into General, Appearance, Icons, Text, and Highlight, with a Box 1 / Box 2 / Box 3 switch at the top of every page.

Display Duration (sec) is how long an ordinary icon stays up. Highlight Duration (sec), over on the Highlight page, is the same thing for an Important icon.

Grow Direction, on the box's General page, stacks new icons down, up, left, right, or out from the center, so a box can run as a column or a row. It grows from the box's Anchor point.

Max Ready Icons caps how many can sit in the box at once. When it is full, the icon closest to fading is pushed out, and pinned icons are never the ones chosen. A box with every slot pinned has no room left, so a new pop is dropped.

Post-Combat Hide (sec, 0 = off) clears the box that many seconds after combat ends or after the latest pop, whichever comes later, so icons left over from a fight do not sit out their full Display Duration. It also applies to pops out of combat, so a value shorter than Display Duration cuts those short. Pinned icons stay where they are.

Ready Sound plays when an icon pops, and an Important icon plays the box's Highlight Sound instead, which is None until you pick one. The list offers a few game sounds, Cooldown Master's own CDM: Ready Click, and any LibSharedMedia sound you have.

Size, Transparency, Icon Offset, and the border and label options match a lane's Icons page.

Texture, under the Background header on Ready > a box > Appearance, sets the texture drawn behind the icons, and Border Texture, under the Border heading on the same page, sets the box's edge. Texture offers every LibSharedMedia statusbar texture you have installed and Border Texture every border texture, and a Border Texture of None draws no border at all. The defaults are unchanged, so a box you have not touched looks as it always did.

Icons flagged Pinned never fade. They stay in the box until you reload, switch profile, or turn test mode on or off, so a cooldown you must not miss will wait for you.


What gets tracked

Cooldown Master sorts everything it tracks into nine categories. Each one has its own page under Options > Filters. Buff Bars lists a Blizzard category that only exists on retail, so its page appears there only, and Offensives is switched off on WoW Forever, which leaves Forever with seven.

Category What is in it
Spells Your main ability cooldowns
Utility Utility and movement abilities on Retail. On Classic and WoW Forever nearly everything is sorted under Spells
Buffs Timed buffs on you from spells you know, on Classic and WoW Forever. On Retail, the buffs Blizzard's category sets track
Buff Bars Buff-style entries from Blizzard's own category set (Retail)
Potions Potions, flasks, and elixirs found in your bags
Trinkets Equipped on-use trinkets
Offensives Harmful effects you have put on your target
Pet Spells Your pet's cooldowns
Custom Anything you define yourself

Potions and consumables are discovered from your bags automatically. Conjured mana gems and healthstones are recognized by ID, and your equipped on-use trinkets are picked up without any setup. Classic Era reports every consumable under one category with nothing to tell a potion from a sandwich, so there it lists them all. Food and drink carry no cooldown, so they never draw anything, though their rows stay in the list. Potions and trinkets work on WoW Forever too, in combat and out.

Buffs on WoW Forever are read out of combat only, because Forever blocks addons from reading your buffs mid-fight. Cooldown Master fills that gap from what you cast. A buff already on a lane keeps counting down, and recasting a buff it has already seen on you restarts that icon immediately, at the length it read, so a seal you refresh mid-fight shows at once instead of waiting for the fight to end. Casting a buff that replaces another, one seal over another, clears the replaced icon as well, worked out from which of your buffs have never been up at the same time and last the same length.

A buff whose timer runs out mid-fight pops its ready box at that moment, as long as its icon came from Cooldown Master reading the buff on you out of combat, even if you have recast it since. The buff of a spell with a cooldown, such as Divine Protection, leaves quietly instead while that spell is still cooling down, since the spell is not ready yet. An icon it started from a cast alone never pops one, because casting a buff does not prove it landed on you. A buff it has not read on you out of combat this session is not restarted by a cast and still waits for combat to end. One it has read at more than one length, such as Slice and Dice, is not restarted either, since its new length is unknown. Recast it mid-fight and its icon keeps the old timer, then leaves quietly when that runs out instead of popping, and if the buff is still up when combat ends its real timer comes back. Spend a moment out of combat with your buffs up and it will have read them all.

Buffing a groupmate mid-fight leaves your own buff icons alone. Cooldown Master reads who each buff was cast on, so a blessing you put on someone else neither shows on your lanes nor clears one of yours. When that buff shares its name with one you are wearing, or is a party-wide buff such as Arcane Brilliance or Prayer of Fortitude that may have reached you too, Cooldown Master cannot tell whether yours was refreshed, so your icon is handled like Slice and Dice above: it keeps its old timer and leaves quietly instead of popping, and if the buff is still up when combat ends its real timer comes back. Recasting it on yourself in the same fight restarts it as normal.

Pet Spells reads your pet's spellbook, so Spell Lock, Axe Toss, Gnaw, Freeze and the rest travel the lanes like anything else. Your pet's basic attack and its command and stance buttons are left out, so only real cooldowns show. It is on by default for anyone with a pet bar.

Detect Shared Spell Cooldowns, on the Global page, collapses abilities tracked under multiple spell IDs, a base spell and its talent override or the same spell in two categories, to a single lane icon and a single ready pop. It is off by default.

A cooldown's buff, on Classic and WoW Forever

Some abilities have a cooldown and give you a buff, and you want to watch both. Icy Veins and Arcane Power are the obvious cases.

Tick Buff on that spell's row under Filters > Spells or Filters > Utility, where it is the last column on the list, and the buff appears as its own second icon, counting down the buff itself rather than the cooldown. It is off by default, so nothing new appears until you ask for it.

On Retail, Blizzard's own category sets already surface tracked buffs, so this is not needed there. On WoW Forever the Buff column is offered too, and recasting the spell restarts that second icon in combat, the same as any other buff there.

Offensives

Offensives watches the harmful effects you put on your target. Damage over time effects and debuffs like stuns are both included. They are timed by how long the effect lasts rather than by a cooldown, so an effect travels the lane and pops a ready box the moment it wants recasting.

It follows your current target, so swapping targets clears the lane. Each spell gets a Remove (X) button for clearing anything picked up off a shared target dummy.

Offensives is off by default. Turn it on under Filters > Offensives.

It works on every flavor except WoW Forever, where it is switched off and hidden, because the Classic way of detecting effects relies on the combat log, which Cooldown Master does not use on Forever. Retail and Classic identify an effect differently.

On Classic, effects are detected automatically as you apply them. An effect that leaves nothing readable on your target, and a Paladin's Consecration is the clearest case, has its length learned by observation instead, from when the combat log says it ended. That estimate only ever revises upward, so on a fresh install its ready box fires early for the first several casts and settles once the effect has run its full course uninterrupted. Measured on TBC: 3s, then 5s, then 8s and stable. That is the learning working, not a fault.

On Retail, a target's debuff cannot be identified during combat at all, so Cooldown Master learns which of your abilities applies which effect out of combat, from what lands just after you cast. Since 12.1 the game withholds that too, so an effect it has not already learned cannot be picked up. Run /cm offlearn and it will tell you plainly whether your client is withholding it, and where learning is still allowed it walks you through one ability at a time. Anything already learned keeps tracking normally.

A dot is only ever learned once its source can be positively confirmed as you, so a groupmate's dots on a shared target stay off your lanes.


Filters and routing

Options > Filters. This is where you decide what shows up and where it goes.

Category defaults

Each category's page opens with its Defaults card, which sets how everything in it behaves:

  • Track this category turns the whole category on or off, and the rest of the card dims while it is off.
  • Show by Default decides whether new cooldowns in it appear without you enabling them one by one.
  • Ignore Threshold (sec) hides anything whose full cooldown is longer than this. Use it to keep abilities longer than half an hour off your lanes. This filters on the ability's total cooldown, which is different from a lane's Max Time, which only controls how much of the timeline is drawn. A bar frame with Show Extremely Long Cooldowns ticked reaches past this, up to 60 minutes, for that one frame.
  • Default Lane, Default Bar, and Ready Box decide where the category's cooldowns are sent. Default Bar and Ready Box can each be set to Off. Default Lane always names a lane, so to stop a lane drawing you turn that lane off under Lanes, and the dropdown entry then reads "Lane 1 (off)".

Filters > Defaults shows every category at a glance, whether it is on and where it sends its cooldowns, and clicking a row opens that category.

Per-spell overrides

Below its Defaults card, every category's page lists the individual spells it has found, with a Find a cooldown box that narrows the list as you type. Hover a column heading for what it does, or a spell's name for its game tooltip. Each row gives you:

  • Show to hide that one spell without touching the rest.
  • Lane, Bar, and Ready Box to send that one spell somewhere different. "Default" means it follows the category.
  • Flags to mark it Normal, Important, Pinned, or Imp + Pin.

Set All buttons next to the category defaults push that setting onto every spell in the category at once, after asking first, clearing any per-spell choices for that one setting and leaving the others alone.

Route by Cooldown Length

Sitting at the top of Filters > Defaults, this sends a cooldown to a lane based on how long it is rather than what kind of ability it is.

Tick Sort cooldowns into lanes by length and set your bands:

  • Short Up To (sec) and Short Lane
  • Medium Up To (sec) and Medium Lane, where Medium Up To can never be set below Short Up To
  • Long Lane takes everything above the medium threshold

The classic use is a fast lane and a slow lane. Send everything under a minute to Lane 1 with a short Max Time so it reads like a rotation helper, and everything longer to Lane 2 with a long Max Time so your big cooldowns have their own space.

How it interacts with everything else. A lane you picked for an individual spell still wins over this. A spell whose real length has not been learned yet is routed by the game's base cooldown for it on Retail and WoW Forever, and anything with no known length at all falls back to the category defaults underneath. It is off by default, so nothing moves until you turn it on.


Highlights and flags

Mark a spell Important in its Flags column and it can stand out everywhere it appears: on the lane, on the bars, and in the ready box. Bars and ready boxes highlight it out of the box, while lanes start with the style set to None.

The highlight style and color are set per frame, under Lanes > a lane > Icons, Ready > a box > Highlight, and Bars > a bar > Bar:

Style What it looks like
None No highlight
Border A colored ring
Flash Pulses in and out

Older versions also offered Glow and Border + Flash, which always drew exactly what Flash draws. If you had one picked, it keeps drawing as before and shows as Flash.

Pinned is stronger. A pinned icon never fades on a timer — it stays in its ready box until you reload, switch profile, or turn test mode on or off. A box full of pinned icons has no room for new pops.


Custom cooldowns

Options > Filters > Custom. Some things the cooldown API simply will not report. Custom cooldowns let you build your own timer for them.

  1. Click Add Custom Cooldown. Its editor opens below the list.
  2. Give it a Name and a Duration (sec).
  3. Choose a Trigger: either Spell cast, for a spell you cast, or Aura gained, for a buff you gain.
  4. Enter the Trigger ID.

Typing an aura ID by hand is miserable, so with the Trigger set to Aura gained there is a Detect button. Click it, then gain the buff you want to track within 15 seconds, and it fills in the ID, the name, the icon, and the duration for you. On Retail and WoW Forever, press it out of combat: the game blocks reading your buffs mid-fight there, so Detect does nothing in combat.

Each custom cooldown has a tick box in the list to switch it on or off, and Edit opens it in the editor. Delete asks before it removes one.

On Retail and WoW Forever the game hides your buffs from addons while you are in combat, so an Aura gained trigger cannot see a buff you gain mid-fight and its timer will not start. Prefer Spell cast for anything you cast or use.

A Spell cast trigger fires only for the exact ID you enter. Where a spell has ranks, use the ID of the rank you cast, and update it when you train a new one.

Custom cooldowns run on a purely local timer, so they work for anything the cooldown API does not expose. They flow through the same lanes, bars, and ready boxes as everything else, with the same routing and highlight options.


Text tags

Two places take text: the label on each icon, on lanes and ready boxes, and the status line on a lane, a ready box, or a bar frame. Both are off by default and both get full font, size, outline, and color control.

Text is built from tags in square brackets, mixed with any plain text you like.

Icon tags describe the cooldown the icon belongs to, things like its name and type: [cd.name], [cd.type], and [cd.time] on Classic and WoW Forever.

Status tags describe your overall state: [cd.next], [cd.count], [player.class], [player.name], [target.name], [target.class], plus [player.hp.pct] and [player.power.pct] on Classic, with [player.hp] and [player.power] for the raw numbers. Those last two are not among the tag buttons, so type them by hand.

Nobody wants to memorize tag syntax, so every text field has a row of tag buttons under it that insert a tag with a click. It only ever offers the tags that are valid in that spot, and only the ones your game version can actually draw. An icon label or a ready box's status line built from static tags alone resolves once instead of every frame.

Health and resource tags are Classic only, because Midnight protects those values from addons even out of combat, and WoW Forever, which runs on the same modern client, hides them too. [cd.time] is not offered on Retail for the same reason, and the icon's native countdown draws it there instead. Forever still offers [cd.time], and for a spell there it counts down Cooldown Master's own learned timing, the same one that places the icon, so the icon's native countdown is the exact one.


Test mode

Options > Global > Test Mode, the Test button at the bottom of the settings window, /cm test, or middle-click the minimap button.

Test mode fills your frames with sample cooldowns so you can position and style everything without waiting for a real fight.

  • Type picks what kind of cooldowns to fake.
  • Number of Cooldowns is how many, from 1 to 20.
  • First Cooldown Duration and Last Cooldown Duration set the range of lengths they span.
  • Loop restarts them when they finish.

Settings apply live as you drag the sliders, and the samples obey your real filter routing, so what you see while setting up is what you will get in combat.


Appearance and media

One in-game settings window controls the whole look. It is the same window Everything Quests, EQ Objective Tracker and Everything Delves use: a sidebar of pages on the left, cards on the right, and Unlock Frames and Test at the bottom of every page that changes what you see. Click any slider's number to type a value, which snaps to that slider's step. Escape closes the window out of combat.

Fonts are picked from a list that previews each font in the font itself, so you can see what you are choosing before you commit.

Textures and borders preview too. Statusbar textures show a filled swatch of the actual texture, and borders show a small square with that border drawn around it. Picking None as a Border Texture draws no border at all, on lanes and on ready boxes. Ready boxes have their own Texture (under Background) and Border Texture (under Border) pickers at Ready > a box > Appearance.

LibSharedMedia is fully supported, so any font, texture, border, or sound pack you already have appears in the pickers automatically. A few original Cooldown Master media files are bundled as well: the statusbar textures CDM Gradient and CDM Glass, the border CDM Soft Edge, and the sound CDM: Ready Click.

Two scale sliders under Options > Global: one resizes every cooldown frame together while keeping each anchored where you put it, and the other resizes the settings window itself from half size up to double, or as large as fits your screen.

Auto-hide Frames hides each lane's background, border, name, and markers out of combat, while your tracked cooldown icons stay visible. The chrome returns in combat. It also lets an empty ready box or bar frame fade away rather than sit there. Visibility rules are tickboxes for Always, In Group, and In Instance, and any one of them ticked will show your lanes — they gate lanes only, so ready boxes and bars are not affected.

Both auto-hide opt-outs live under Lanes > a lane > General > Auto-hide. Override Autohide keeps that lane's chrome always shown. Keep Shown While Running, off by default, is the softer version: with Auto-hide Frames on, the lane keeps its chrome out of combat for as long as a cooldown is still traveling on it, then hides it again once the lane empties. Override Autohide wins over it, and it is ignored while Unlock Frames is on.

Class colors are a per-class table, flavor-aware (13 classes on retail, 11 on MoP, 9 on Era, TBC, and Forever), feeding the lane fill and bar fill "use class color" toggles. The Colors page lists your own class first.

Icon zoom and an unusable icon tint or desaturate are under Global as well. The cooldown swipe tint is per lane, under Lanes > a lane > Icons.

A What's New window shows the notes after an update that brings new features, listing every release since you last looked. Releases with only fixes stay quiet, a first install skips it, and it can be a quiet chat link instead, or off entirely.

Or change nothing. The defaults stand on their own.


Masque

If you skin your icons, Cooldown Master registers three separate groups in Masque's own options:

  • Lane Icons
  • Ready Icons
  • Bar Icons

Masque applies its default skin to all three groups as soon as it is installed. Pick a different skin for each, or disable a group, in Masque's own options.

While a group is enabled, its skin owns the icon's border and crop, so Cooldown Master's own icon border, zoom, and pulse step aside for it. Disable the group in Masque and they come straight back, no /reload needed.

Run /cm masque if you want to check what it has detected.


Profiles

Options > Profiles. Every profile is in one list: your active one is highlighted, and every other one has Switch, Copy and Delete beside it. New Profile starts one from the defaults and Duplicate Current copies the one you are on. Copy, Delete and Reset ask before they change anything. Plus two extras.

Auto-switch by Specialization maps a profile to each spec and switches for you when you change spec. Retail and Mists of Pandaria Classic only, since Classic Era and Burning Crusade Classic have no specs, so the section is not drawn there. On WoW Forever the section is drawn, but it lists a single row named after your class, because Forever's original rules have no specs, so there is never a spec change for it to switch on.

Export turns your current profile into a copy-paste string, and Import pastes one over your current profile, so you can share a setup or carry it to another character.


Panel addons and the minimap button

Cooldown Master provides a LibDataBroker-1.1 launcher and a LibDBIcon-1.0 minimap button. Titan Panel, Bazooka, Arcana, and other LibDataBroker displays pick it up automatically. Just enable "Cooldown Master" in your panel addon's plugin list.

Click What happens
Left Open or close the settings window
Right Lock or unlock frames
Middle Toggle test mode

The minimap button can be hidden under Options > Global if you would rather not have it.


Slash commands

Command What it does
/cm Open or close the settings window
/cm lock Lock all frames
/cm unlock Unlock all frames for repositioning
/cm test Toggle test mode
/cm offlearn Guided setup for Offensives on Retail
/cm offlearn stop End that guided setup early
/cm whatsnew Show the What's New window
/cm reset Reset the current profile to defaults
/cm version Print the version and the game flavor it detected, such as Classic Era or Forever

/cdmaster and /cooldownmaster work as long forms, with every subcommand above.

There is a set of diagnostic subcommands too, for troubleshooting or filing a good bug report: debug, api, spells, haste, tracking (Classic only), cdv (Retail only), seedtest, curvetest, items, bagscan, itemcd <id>, buffs, petprobe, tagprobe, anchor, masque, and, on every flavor but WoW Forever, the offensives probes (off, offprobe, offreset, auraprobe, auraapi, plus offlearn on Retail only). A few have aliases: config and options for bare /cm, news for whatsnew, curveprobe for curvetest, and pettest for petprobe.

/cm anchor is a one-shot probe of the anchoring state. On Retail and WoW Forever, /cm anchor arm 30 <spell> traces one spell's live cooldown state for 30 seconds, which is the quickest way to show what the engine is actually seeing when reporting a timing bug. /cm off arm [seconds] does the same for the offensives binder on Retail, showing why each dot was learned or refused. Classic reads its dots straight off the combat log, so it has no binder to trace and the command says so. On WoW Forever every offensives command reports that Offensives is switched off there rather than running.


Flavor differences

Cooldown Master runs on Midnight (12.1), Classic Era, Burning Crusade Classic, Mists of Pandaria Classic, and WoW Forever from one install. A few things differ between them, and all of them come down to what the game will tell an addon.

Feature Retail (Midnight) WoW Forever Classic
Finding your spells Blizzard's Cooldown Manager category sets Spellbook scan Spellbook scan
Cooldown lengths Learned, see above Learned, like Retail Read directly
Buffs Surfaced by Blizzard's category sets Read out of combat, and a recast restarts one in combat Tracked in and out of combat
GCD and swing indicators Not available Not available Available
Health and resource tags Not available Not available Available
[cd.time] tag Not available Available Available
A cooldown's buff as a second icon Handled by Blizzard's category sets Tick Buff on the spell's row, and a recast restarts it in combat Tick Buff on the spell's row
Offensives Learned out of combat, /cm offlearn Switched off Detected automatically
Potions and trinkets Tracked Tracked Tracked
Auto-switch profile by spec Available One row named after your class, no specs to switch between Mists of Pandaria Classic only, Era and TBC have no specs

WoW Forever support is a work in progress, so expect bugs. If something looks wrong there, please report it on the Discord or open a GitHub issue.


Languages

Cooldown Master speaks English, French, German, Russian, Korean, Simplified Chinese, and Traditional Chinese, and all seven are complete, end to end. Every options label, tooltip, and ready box reads in your client's language, and so does the What's New window, apart from the release notes inside it, which stay in English.

Translations are bundled in Locales/, selected from GetLocale(), and fall back to English per phrase, so a language renders as itself where it has a translation and as English where it does not. There is nothing extra to install, and switching client language switches the addon with it.

Spotted a translation that reads wrong, or want your language added? Say so on the Discord or open a GitHub issue. You do not need a GitHub account or any tooling to help. A plain list of phrases is perfectly welcome, and corrections to the languages already here are just as valuable as a new one.

Translator credits are in Credits.


Midnight and the secret-value API

The interesting part for other addon authors. Under Midnight, every cooldown number is a secret value in combat: C_Spell.GetSpellCooldown's start/duration, the DurationObject's GetRemainingDuration/GetTotalDuration, and even curve evaluation all return taint-protected secrets that error the moment you do arithmetic on, compare, or format them in Lua. The read itself hands the secret back without complaint, which is exactly why issecretvalue() exists as a detector. The only combat-readable signals are C_Spell.GetSpellCooldown(id).isActive / .isOnGCD (plain booleans) and maxCharges.

Cooldown Master works around this with a hybrid approach:

  • Exact swipe + countdown text come from feeding the opaque DurationObject straight into a native Cooldown widget via Cooldown:SetCooldownFromDurationObject. Blizzard's widget consumes the secret internally, so the timer is exact even though the addon can never read the number.
  • Icon position on the lane is self-extrapolated from each spell's true duration, learned out of combat (where numbers read normally) and persisted across sessions via SavedVariables, plus an in-combat wall-clock observation layer for anything not yet learned.
  • Spell discovery uses the C_CooldownViewer category sets, and on/off is driven entirely off the readable isActive/isOnGCD booleans.

(Earlier versions of this README described a curve-evaluation engine that "sidesteps the taint." That turned out to be a dead end. Step, linear and identity curves all came back secret.)

Auras are stricter than cooldowns, and 12.1 tightened them again

A cooldown at least keeps two readable booleans. An aura on your target keeps almost nothing: in combat its spellId, name, icon, duration and sourceUnit are all secret, and every "ask by spell" API (GetUnitAuraBySpellID, GetAuraDataBySpellName) returns nil outright rather than a secret. So you cannot identify a debuff on your target in combat by any path. That is why Offensives is cast-driven: the spell ID from UNIT_SPELLCAST_SUCCEEDED stays plain, so identity comes from what you cast rather than from what you read.

As of 12.1 the UNIT_AURA payload itself arrives secret. isFullUpdate is a secret boolean and addedAuras a secret table. Two practical notes for anyone hitting this:

  • A boolean test on a secret boolean throws (if updateInfo.isFullUpdate then is enough to error), because the single bit is the whole payload. A boolean test on a secret table or number does not throw, since truthiness of a non-boolean leaks nothing. Check the value type before assuming which you have.
  • tostring does not throw on a secret. It hands back a secret string, and string.format is what dies. Wrapping a read in tostring or a pcall around the producer protects nothing. Test the returned value with issecretvalue().

Instance-id collections go the same way. removedAuraInstanceIDs measures as a secret table, and C_UnitAuras.GetUnitAuraInstanceIDs(unit, "HARMFUL|PLAYER") returns a secret vector in combat, so its result is dropped for the same reason. The reconcile loop itself still runs and still earns its keep out of combat, where the list and a direct GetAuraDataByAuraInstanceID read plain and a dot can be rehydrated onto the lane after a target swap. In combat there is no plain reconcile source left, so the cast-driven path stands alone and a wall-clock expiry sweep covers the liveness the reconcile used to.

WoW Forever: the original rules on the Midnight engine

WoW Forever (internal name Camelot, interface 16001) loads CooldownMaster_Camelot.toc. It plays by the original game's rules, but it is the Midnight client underneath, secret values included. Since build 70170 it reports its own WOW_PROJECT_CAMELOT (earlier builds reported WOW_PROJECT_MAINLINE), and IS_RETAIL in Core/Compat.lua accepts either, since the engine is Retail's. IS_FOREVER tells it apart from Retail by interface number, and Cooldown Master runs a hybrid of its two pipelines there:

  • Discovery is the Classic spellbook scan. The Retail C_CooldownViewer path is gated on a Midnight interface number, which Forever does not have.
  • Reading is the Retail isActive loop. C_Spell.GetSpellCooldown's start and duration are secret in combat and plain out of it, exactly as on Retail, so lengths are learned out of combat, seeded from the game's base cooldown until then, and the swipe and countdown are fed a DurationObject through the native Cooldown widget. Blizzard documents isOnGCD as reliable only while handling SPELL_UPDATE_COOLDOWN, and a misread makes ready spells look like they are cooling down, now and then for one global cooldown after a cast, and for about a second after every wand shot. So a spell you did not just cast has to read as cooling down for 1.6 seconds without a break before it gets an icon. That is checked about every 0.1 seconds, so the short ready moment between two wand shots, or a global cooldown the game labels as one, starts the wait over.
  • Aura reads throw. In combat, reading a player aura raises a Lua error rather than handing back a secret, so the buff scan runs after the cooldown loop, probes under a pcall, and holds its existing entries until auras read again out of combat. Because that leaves the scan blind for a whole fight, buffs are also driven off casts there. Each out-of-combat pass records every buff's name, length and icon, plus which buffs were read in the same pass. A cast whose spell name matches a known buff restarts that entry at the recorded length, unless that buff has been read at more than one length, or the cast went to another player's name (read from UNIT_SPELLCAST_SENT and matched by cast GUID). Either way its existing entry is flagged as inferred so its old timer cannot pop a ready box, and the cast does nothing more. Otherwise, once the cast buff has been read beside at least one other, the cast also drops any entry of the same length that has never been seen beside it, which is how a replaced seal clears. An entry started from a cast is flagged as inferred and never pops a ready box, since a cast does not prove the aura landed on you. A wall-clock sweep retires a buff whose recorded end time passes in combat, and ScanBuffs corrects the estimated timing the moment auras read again.
  • The combat log is off. Registering COMBAT_LOG_EVENT_UNFILTERED is forbidden, as on Retail, so Offensives and the lanes' swing indicator are switched off. The GCD indicator goes with them, since it needs cooldown numbers that are secret in combat.
  • Health and power stay secret. UnitHealth and UnitPower read secret even out of combat, as on Retail, so the health and power tags are hidden.

The localization pipeline

Locales/*.lua are generated. Never hand-edit one. They are built from the EverythingLocales shared store, which Cooldown Master joined alongside Everything Quests and EQ Objective Tracker, and which now carries four addons with Everything Delves as well. That store keys a translation on its English phrase rather than on any addon, so a phrase CDM shares with the others arrives already translated. Dozens did on the day CDM joined, before anyone typed anything. Editing a generated file here is overwritten on the next build, and that repo's drift check exists to catch exactly that.

Locales/enUS.lua is the manifest and creates ns.L. It must load after embeds.xml and before Core\Constants.lua in all five .toc files. ns.L carries an __index that returns the key, so a missing phrase degrades to English rather than erroring.

Run python docs/_verify_locale.py (exit 0) alongside luacheck . after any user-facing string change. It checks code keys against the manifest and every translation for orphans and string.format mismatches, without needing the store repo checked out.

Displayed does not mean translatable. A string that is also persisted to SavedVariables or used as a lookup key must stay bare English. AceDB rawsets scalar defaults straight into the saved profile, so a translated default is written to disk and outlives a client language change. Dropdowns take { value = <bare>, text = L["..."] }, and anything Blizzard already localizes should use the Blizzard global instead.


Building and running locally

Clone it straight into your AddOns folder and /reload. Every embedded library is committed to the repo, so a fresh clone runs as-is:

git clone https://github.com/wheelbarrel00/CooldownMaster.git

Drop the CooldownMaster/ folder into World of Warcraft/_retail_/Interface/AddOns/ (or the _classic_era_, _anniversary_, or _classic_ equivalent, and _forever_ for WoW Forever). The same folder serves every flavor, and the right .toc loads itself:

File Flavor
CooldownMaster.toc Retail (Midnight)
CooldownMaster_Camelot.toc WoW Forever
CooldownMaster_Mists.toc Mists of Pandaria Classic
CooldownMaster_TBC.toc Burning Crusade Classic (Anniversary)
CooldownMaster_Vanilla.toc Classic Era

Forever's file carries the _Camelot suffix, Blizzard's internal name for that flavor.

At release time the BigWigs packager re-fetches each library fresh from its upstream via the externals block in .pkgmeta, so the committed copies are a convenience for local development, not the source of truth for what ships. Libs/EverythingUI is the exception: it is not fetched at release, so the committed copy is exactly what ships.

The settings window is built on EverythingUI-1.0, the shared interface library of the Everything addons, vendored in Libs/EverythingUI and loaded through LibStub, so the newest copy any installed Everything addon carries draws all of their windows. It is not an AceConfig options table, so AceGUI, AceConfig and AceDBOptions are deliberately not embedded. Do not add them.


What is next

  • More tags for the label and status line system.
  • More languages. All seven here are complete, and any new language is welcome. Corrections to the ones already in are just as valuable.
  • Filling in WoW Forever. Support there is a work in progress. Offensives and the GCD and swing indicators are off, the health and power tags are hidden, and a buff Cooldown Master has not read on you out of combat this session still waits for the fight to end, so reports from Forever players are especially welcome.
  • More tracking indicator types on Classic. The per-lane secondary tracking covers the GCD and your main hand swing timer today.
  • More conditional autohide, to hide frames on resource level or stealth state, alongside today's rules: Auto-hide Frames out of combat, the Always / In Group / In Instance visibility gate, and the per-lane Keep Shown While Running added in 1.16.0.

Credits

Cooldown Master carries forward the idea behind CooldownTimeline2 (CDTL2) by cliffclive, the timeline cooldown addon that inspired this one. When Midnight changed how cooldowns work and CDTL2 could no longer run under the new restrictions, I rebuilt the concept from the ground up for 12.0 and reached out to cliffclive before publishing anything. He kindly gave his blessing to carry the idea forward. Full credit for the original timeline cooldown concept goes to him. Thank you, cliffclive.

Translations are shared across my addons, so a phrase translated once helps all of them.

Language Translator
French Zox
German Stonetwist
Russian Malevi4
Korean labrie75
Simplified Chinese Keriaovo
Traditional Chinese BNS333

Credit where it is actually due. These six translated my other addons. Cooldown Master shares a portion of its text with those and inherited their work through the shared translation store. Everything beyond that was written in house, in each translator's established style and with their permission, so any mistake in it is mine and not theirs. The same note is on the addon's About page, and corrections are very welcome.

Thank you all. This addon reaches a lot more people because of you.


Found a bug or have an idea?

Report it on the GitHub Issues page. Include the error text if you can grab it, since BugSack and BugGrabber make that easy, and what you were doing when it happened.

If you like this one, check out my other addons: Everything Quests, Everything Delves, and Loot Pro. Join the Discord for questions or update news.


License

Released under the MIT License. See LICENSE.

About

World Of Warcraft Cooldown Enhancement Addon

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages