Advanced simming / WoW Forever APL

Tell the sim what to cast, and when.

An Action Priority List (APL) is the set of rules your simulated character follows. Start with your spec's preset, change one rule, then compare the result.

01

Priority is checked again at each decision

The engine starts at the top and chooses the first action that is available and whose condition passes. It skips an action when it cannot cast it, or its condition is false. At the next decision, it starts from the top again.

  1. 1Apply Shadow Word: Pain when your DoT is missing.
  2. 2Cast Mind Blast when available.
  3. 3Use Mind Flay as a filler.

This is a teaching example. It does not claim to be the best Shadow rotation. Moving a filler above other spells can cause it to take priority whenever it is available.

02

Build a rule from checks and thresholds

A condition decides whether the engine should consider an action. An action without a condition can run whenever it is available.

All conditions (AND)
Every check must pass, such as a buff being active and mana being above 20%.
Any condition (OR)
One check is enough, such as a buff being active or the fight ending in less than 10 seconds.
Not (NOT)
Reverse a check. NOT Your DoT active means your DoT is missing.
Compare values
Choose a left value, an operator and a right value. Mana % greater than a constant of 20% is a resource threshold.

Use constants with their units: 20% for a percentage, 3s for time, 5 for stacks or combo points, and true or false for an always-passing or never-passing check. A mana percentage constant of 20 does not mean 20%.

03

Check the right effect on the right unit

Buff or debuff conditions use the same aura checks. Choose You (Self) for your buffs and Current enemy target (CurrentTarget) for enemy debuffs. Omitting the aura source checks your character.

Your DoT active and Your DoT remaining track your character's damage-over-time effect. These are useful for deciding when to apply or refresh it. They differ from checking a shared aura supplied by another player.

Spell and aura IDs can differ, and spell ranks have different IDs. Keep imported rank and tag fields unless you know why they are present. For example, a raid-provided aura may use an external-aura tag.

The spell catalog includes abilities your character may not know. Search results do not guarantee that the current talents, race or equipment can use an ability. Check the report's rotation warnings after a sim.

04

Before-pull actions and sequences have their own timing

Before-pull actions use a scheduled time relative to combat starting. A constant of -1.5s means 1.5 seconds before the pull.

A regular sequence remembers its next step while the priority list can choose other actions between steps. It stops after its final step unless a Reset sequence action resets it.

A strict sequence tries to execute its steps consecutively once it begins. If the next step is unavailable when the engine can act, it resets the sequence and returns to normal priority selection. Spell availability, resources and cooldowns therefore matter.

Add spell works for both ordinary and channeled spells. Open Advanced: channel interruption inside a rule when you want to stop a channel early or allow it to restart. Imported channel rules keep their settings; removing interruption settings makes the spell play normally.

05

Turning off a line can still leave automatic casts

Automatic cooldowns can use eligible cooldowns that are not explicitly handled by the APL. Disabling or deleting an explicit cast can let automatic cooldowns pick that spell up again.

To exclude a spell from automatic cooldowns, keep an explicit Cast spell rule for it, set its condition to the constant false, and leave that rule enabled. The rule never casts, but the automatic cooldown action treats that spell as explicitly managed. Other explicit casts of the spell can still run, so check those rules too.

The automatic cooldown action has no per-spell exclusion setting. The editor's JSON recipe shows the same supported engine behaviour.

06

Use visual controls or keep working in JSON

Open Advanced settings on Quick Sim, choose a preset, then select Customise rotation. The same editor is available in the Build Lab and when tuning a result.

In Visual mode, search for a spell by name under Add a spell and add it to your priority list. Inside a rule, Choose a spell also works for spell and aura checks. Manual IDs, ranks and tags are under Advanced controls. Use the pencil on a rule to choose its action, build nested conditions and preview the sentence. Apply the rule to save it. Drag a rule by its grip to change priority, duplicate a rule to try a variation, or switch it off to skip it. Before-pull actions, sequence steps and nested conditions also have drag handles. On a focused handle, press Space to pick up, use the arrow keys to move, then Space to drop or Escape to cancel. The up/down buttons remain available on rules.

Use the code button on any rule for JSON editing, or choose JSON at the top to edit the complete rotation, including group and variable definitions. The editor remembers your preferred mode on this browser. Apply or discard whole-rotation JSON edits before switching back to Visual or exporting. Export buttons become available once your changes are applied or discarded.

Both views edit the same engine format. An example priority line, casting Mind Blast when mana is above 20%, looks like this:

{
  "action": {
    "condition": {
      "cmp": {
        "lhs": {
          "currentManaPercent": {}
        },
        "op": "OpGt",
        "rhs": {
          "const": {
            "val": "20%"
          }
        }
      }
    },
    "castSpell": {
      "spellId": {
        "spellId": 10947
      }
    }
  }
}

The engine repository also contains a full rotation editor, with groups, variables and advanced controls. A rotation exported as APL JSON can be imported here. Use APL mode rather than a Simple rotation export.

After a change, run the same character with the same encounter and buffs. Compare damage, casts and rotation warnings. Small DPS differences may be simulation noise; repeat or increase iterations before treating them as an improvement.

07

Try editing a teaching rotation

This practice editor changes an example only. It does not submit a simulation or change your character. Try adding a mana condition, then switch to JSON to see how it is represented.

Practice only

Your rotation, in priority order

Checked from the top at each decision. The first available action with a true condition wins.

Loading rotation editor...

How rotations work

An APL (Action Priority List) chooses the next action. Higher rules take priority; unavailable actions or false conditions are skipped. The list starts at the top again at the next decision.

Use All conditions (AND) when every check must pass, Any condition (OR) when one is enough, and Compare values for thresholds. Constants use 20%, 3s, numbers, or true / false.

Buffs on you use Self. Enemy debuffs use CurrentTarget. Your DoT conditions track the damage-over-time effect applied by your character.

Read the rotation guide, with examples