Cogspark

Cogspark Works · Rotation

Protection Paladin

The priority list SimulationCraft plays this spec with · engine build 20261019-1860cd1-w8a2c73d · game data 12.1.5.70448

§1How to read this

A rotation in SimulationCraft is a priority list, not a sequence. Every time the character can act, the sim starts at the top of The main loop and does the first line whose conditions hold. Lower lines only happen when nothing above them fits.

  • The page shows the list as a decision tree: set what you know about the fight and your talents, and it lights the lists the sim checks, in order.
  • Cast lines use the ability. Hover, focus or tap an icon or a name for its tooltip.
  • Go through another list: its lines are checked in order; when none of them fits, the sim comes back and carries on with the next line here.
  • Switch to another list: the rest of this list is skipped and the choice is made from that list alone.
  • Helpers are values the list works out on the spot, such as “are we holding a cooldown”. Setting one takes no time and the list carries on. The tree works out the ones your situation settles.

The list is written to perform well in the sim, not to be the only right way to play. Every line keeps its original simc text under the simc toggle at its right, and the list author’s note where there is one.

§2Decision tree

Set what you know. The tree lights the lists the sim checks, top to bottom; in each list it presses the first ability whose conditions hold and that is ready. Readiness (cooldowns, resources) isn’t in the list, so a lit ability is the first one allowed, not a promise it is cast.

Your situation
Your talents (click: talented, not talented, not set)
Checked
  1. The main loop
  2. Trinkets
Before the pull, done once before the fight starts (17 steps)

Before the pull17 lines

  1. Cast Rite of Sanctification
    simcrite_of_sanctification
  2. Cast Rite of Adjuration
    simcrite_of_adjuration
  3. Record your stats before the pull (sim bookkeeping)
    simcsnapshot_stats
  4. Cast Devotion Aura
    simcdevotion_aura
  5. Set trinket 1 buffs to true when the following holds, otherwise false
    trinket 1 has an on-use effect that grants a stat buff
    simcvariable,name=trinket_1_buffs,value=trinket.1.has_use_buff
  6. Set trinket 2 buffs to true when the following holds, otherwise false
    trinket 2 has an on-use effect that grants a stat buff
    simcvariable,name=trinket_2_buffs,value=trinket.2.has_use_buff
  7. Set trinket 1 duration to 0 when the following holds, otherwise to trinket 1's stat buff's duration
    never
    simcvariable,name=trinket_1_duration,op=setif,value=0,value_else=trinket.1.proc.any_dps.duration,condition=0
  8. Set trinket 2 duration to 0 when the following holds, otherwise to trinket 2's stat buff's duration
    never
    simcvariable,name=trinket_2_duration,op=setif,value=0,value_else=trinket.2.proc.any_dps.duration,condition=0
  9. Set trinket 1 high value to 3 when the following holds, otherwise to 1
    trinket 1 is Voracious Heart of Ulatek
    simcvariable,name=trinket_1_high_value,op=setif,value=3,value_else=1,condition=trinket.1.is.voracious_heart_of_ulatek
  10. Set trinket 2 high value to 3 when the following holds, otherwise to 1
    trinket 2 is Voracious Heart of Ulatek
    simcvariable,name=trinket_2_high_value,op=setif,value=3,value_else=1,condition=trinket.2.is.voracious_heart_of_ulatek
  11. Set trinket 1 sync to 1 when the following holds, otherwise to 0.5
    all of these:
    • trinket 1 buffs is true
    • the remainder of trinket 1's cooldown divided by Avenging Wrath's cooldown is 0
    simcvariable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_1_buffs&trinket.1.cooldown.duration%%cooldown.avenging_wrath.duration=0
  12. Set trinket 2 sync to 1 when the following holds, otherwise to 0.5
    all of these:
    • trinket 2 buffs is true
    • the remainder of trinket 2's cooldown divided by Avenging Wrath's cooldown is 0
    simcvariable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_2_buffs&trinket.2.cooldown.duration%%cooldown.avenging_wrath.duration=0
  13. Set trinket priority to 2 when the following holds, otherwise to 1
    any of these:
    • all of these:
      • trinket 1 buffs is false
      • trinket 2 buffs is true
      • any of these:
        • trinket 2 has a cooldown
        • trinket 1 has no cooldown
    • all of these:
      • trinket 2 buffs is true
      • trinket 2's cooldown divided by trinket 2 duration times (1.5 plus (1 if trinket 2 can grant Strength, else 0)) times trinket 2 sync times trinket 2 high value times (1 plus ((trinket 2's item level minus trinket 1's item level) divided by 100)) is more than trinket 1's cooldown divided by trinket 1 duration times (1.5 plus (1 if trinket 1 can grant Strength, else 0)) times trinket 1 sync times trinket 1 high value times (1 plus ((trinket 1's item level minus trinket 2's item level) divided by 100))
    simcvariable,name=trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&variable.trinket_2_buffs&(trinket.2.has_cooldown|!trinket.1.has_cooldown)|variable.trinket_2_buffs&((trinket.2.cooldown.duration%variable.trinket_2_duration)*(1.5+trinket.2.has_buff.strength)*(variable.trinket_2_sync)*(variable.trinket_2_high_value)*(1+((trinket.2.ilvl-trinket.1.ilvl)%100)))>((trinket.1.cooldown.duration%variable.trinket_1_duration)*(1.5+trinket.1.has_buff.strength)*(variable.trinket_1_sync)*(variable.trinket_1_high_value)*(1+((trinket.1.ilvl-trinket.2.ilvl)%100)))
  14. Set damage trinket priority to 2 when the following holds, otherwise to 1
    all of these:
    • trinket 1 buffs is false
    • trinket 2 buffs is false
    • trinket 2's item level is at least trinket 1's item level
    simcvariable,name=damage_trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&!variable.trinket_2_buffs&trinket.2.ilvl>=trinket.1.ilvl
  15. Drink a potion if your potion is Liquid Luster
    simcpotion,pre_pot_time=8,if=potion.liquid_luster
  16. Cast Consecration
    simcconsecration
  17. Cast Holy Armaments if next_armament is holy_bulwark
    simcholy_armaments,if=next_armament=holy_bulwark

The main loop24 lines

  1. Start auto-attacking
    simcauto_attack
  2. go through Trinkets, then carry on below if nothing there fits

    simccall_action_list,name=trinkets

    Trinkets5 lines

    1. Set cds active to true when the following holds, otherwise false
      all of these:
      • Avenging Wrath is active
      • Avenging Wrath has more than 5 s left
      Trinkets
      simcvariable,name=cds_active,value=buff.avenging_wrath.up&buff.avenging_wrath.remains>5
    2. Use your trinket 1 if trinket 1 buffs is true and (trinket priority is 1 or trinket 2 buffs is false or trinket 2 has no cooldown or (trinket 2 buffs is true and trinket 2 is on cooldown)) and ((trinket 1's on-use cast time is more than 0 s and trinket 1's on-use cast time is more than the cooldown left on Avenging Wrath) or (trinket 1's on-use cast time is 0 s and cds active is true))
      simcuse_item,slot=trinket1,if=variable.trinket_1_buffs&(variable.trinket_priority=1|!variable.trinket_2_buffs|!trinket.2.has_cooldown|variable.trinket_2_buffs&trinket.2.cooldown.remains)&(trinket.1.cast_time>0&trinket.1.cast_time>cooldown.avenging_wrath.remains|trinket.1.cast_time=0&variable.cds_active)
    3. Use your trinket 2 if trinket 2 buffs is true and (trinket priority is 2 or trinket 1 buffs is false or trinket 1 has no cooldown or (trinket 1 buffs is true and trinket 1 is on cooldown)) and ((trinket 2's on-use cast time is more than 0 s and trinket 2's on-use cast time is more than the cooldown left on Avenging Wrath) or (trinket 2's on-use cast time is 0 s and cds active is true))
      simcuse_item,slot=trinket2,if=variable.trinket_2_buffs&(variable.trinket_priority=2|!variable.trinket_1_buffs|!trinket.1.has_cooldown|variable.trinket_1_buffs&trinket.1.cooldown.remains)&(trinket.2.cast_time>0&trinket.2.cast_time>cooldown.avenging_wrath.remains|trinket.2.cast_time=0&variable.cds_active)
    4. Use your trinket 1 if trinket 1 buffs is false and (trinket 2 has no cooldown or trinket 2 is on cooldown or trinket 2 buffs is false) and (damage trinket priority is 1 or trinket 2 is on cooldown)
      simcuse_item,slot=trinket1,if=!variable.trinket_1_buffs&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|!variable.trinket_2_buffs)&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains)
    5. Use your trinket 2 if trinket 2 buffs is false and (trinket 1 has no cooldown or trinket 1 is on cooldown or trinket 1 buffs is false) and (damage trinket priority is 2 or trinket 1 is on cooldown)
      simcuse_item,slot=trinket2,if=!variable.trinket_2_buffs&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|!variable.trinket_1_buffs)&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains)
  3. Drink a potion if your potion is Liquid Luster and Avenging Wrath comes off cooldown within 8 s
    simcpotion,if=potion.liquid_luster&cooldown.avenging_wrath.remains<8
  4. Drink a potion if your potion isn't Liquid Luster and (Avenging Wrath is active or Avenging Wrath is off cooldown)
    simcpotion,if=!potion.liquid_luster&(buff.avenging_wrath.up|cooldown.avenging_wrath.up)
  5. Cast Ardent Defender if you have Eye for an Eye talented
    simcardent_defender,if=talent.eye_for_an_eye
  6. Set wants to hammer to true when the following holds, otherwise false
    all of these:
    • Hammer Of Light Ready is active
    • Judgment is active on the target
    • any of these:
      • Undisputed Ruling has at most 1.8 s left, or isn't active
      • Hammer Of Light Ready has less than 5 s left, or isn't active
    Used without waiting for the global cooldown
    simcvariable,use_off_gcd=1,name=wants_to_hammer,value=buff.hammer_of_light_ready.up&debuff.judgment.up&(buff.undisputed_ruling.remains<=1.8|buff.hammer_of_light_ready.remains<5)
  7. Cast Holy Armaments if Avenging Wrath comes off cooldown within one global cooldown or time_to_die is less than 30 or Holy Armaments has exactly 2 charges
    simcholy_armaments,if=cooldown.avenging_wrath.remains<=gcd|time_to_die<30|charges=2
  8. Cast Fireblood if Avenging Wrath is active
    simcfireblood,if=buff.avenging_wrath.up
  9. Cast Avenging Wrath
    simcavenging_wrath
  10. Cast Divine Toll if Avenging Wrath is active or you don't have tier 3 of your apex talent talented
    simcdivine_toll,if=buff.avenging_wrath.up|!apex.3
  11. Cast Hammer of Light if wants to hammer is true
    simchammer_of_light,if=variable.wants_to_hammer
  12. Cast Shield of the Righteous if ((you don't have Instrument of the Divine talented and Divine Guidance has fewer than 5 stacks) or you have exactly 5 Holy Power or (Valor isn't active and Divine Purpose isn't active)) and (wants to hammer is false or your last spell on the global cooldown was Divine Toll)
    simcshield_of_the_righteous,if=(!talent.instrument_of_the_divine&buff.divine_guidance.stack<5|holy_power=5|!buff.valor.up&!buff.divine_purpose.up)&(!variable.wants_to_hammer|prev_gcd.1.divine_toll)
  13. Cast Hammer of Wrath if Hammer of Wrath is fully recharged within one global cooldown or (Hammer Of Light Ready is active and Judgment isn't active on the target)
    simchammer_of_wrath,if=full_recharge_time<=gcd|buff.hammer_of_light_ready.up&!debuff.judgment.up
  14. Cast Judgment if Judgment is fully recharged within one global cooldown or (Hammer Of Light Ready is active and Judgment isn't active on the target)
    simcjudgment,if=full_recharge_time<=gcd|buff.hammer_of_light_ready.up&!debuff.judgment.up
  15. Cast Avenger's Shield if Vanguard is active or (Avenging Wrath is active and you have tier 3 of your apex talent talented)
    simcavengers_shield,if=buff.vanguard.up|(buff.avenging_wrath.up&apex.3)
  16. Cast Consecration if Divine Guidance has 5 or more stacks or not consecration.up
    simcconsecration,if=buff.divine_guidance.stack>=5|!consecration.up
  17. Cast Hammer of Wrath
    simchammer_of_wrath
  18. Cast Judgment
    simcjudgment
  19. Cast Avenger's Shield
    simcavengers_shield
  20. Cast Blessed Hammer
    simcblessed_hammer
  21. Cast Hammer of the Righteous
    simchammer_of_the_righteous
  22. Cast Arcane Torrent
    simcarcane_torrent
  23. Cast Word of Glory if Shining Light Free is active and Divine Purpose isn't active
    simcword_of_glory,if=buff.shining_light_free.up&!buff.divine_purpose.up
  24. Cast Consecration
    simcconsecration

Read from ActionPriorityLists/default/paladin_protection.simc in simulationcraft/simc at 1860cd1d5763, the commit this engine build runs.