Quantcast

Warrior: Update warrior scripts to MoP 5.4.8.

Johnny C. Lam [05-22-14 - 12:38]
Warrior: Update warrior scripts to MoP 5.4.8.

Regenerate reference warrior scripts after improving the translation
accuracy of OvaleSimulationCraft.

Create new scripts for Arms, Fury, and Protection based on the reference
scripts.

The protection warrior script is very basic and needs improvement.

git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1491 d5049fe3-3747-40f7-a4b5-f36d6801af5f
Filename
OvaleSimulationCraft.lua
scripts/ovale_warrior.lua
scripts/ovale_warrior_spells.lua
scripts/simulationcraft_warrior_arms_t16h.lua
scripts/simulationcraft_warrior_fury_1h_t16h.lua
scripts/simulationcraft_warrior_fury_2h_t16h.lua
diff --git a/OvaleSimulationCraft.lua b/OvaleSimulationCraft.lua
index 448b393..89e3ef7 100644
--- a/OvaleSimulationCraft.lua
+++ b/OvaleSimulationCraft.lua
@@ -468,6 +468,10 @@ do
 		["^wind_shear$"] = "Interrupt()",
 		-- Warlock
 		["^service_pet$"] = "ServicePet()",
+		-- Warrior
+		["^execute$"] = "Spell(execute usable=1)",
+		["^heroic_leap$"] = "HeroicLeap()",
+		["^raging_blow$"] = "RagingBlow()",
 	}

 	local scriptLine = {}
diff --git a/scripts/ovale_warrior.lua b/scripts/ovale_warrior.lua
index f948ff5..9397a9e 100644
--- a/scripts/ovale_warrior.lua
+++ b/scripts/ovale_warrior.lua
@@ -3,9 +3,9 @@ local OvaleScripts = Ovale.OvaleScripts

 do
 	local name = "Ovale"
-	local desc = "[5.2] Ovale: Arms, Fury, Protection"
+	local desc = "[5.4] Ovale: Arms, Fury, Protection"
 	local code = [[
-# Ovale warrior script by Sidoine for WoW 5.2.
+# Ovale warrior script based on SimulationCraft.

 Include(ovale_items)
 Include(ovale_racials)
@@ -15,191 +15,760 @@ AddCheckBox(opt_aoe L(AOE) default)
 AddCheckBox(opt_icons_left "Left icons")
 AddCheckBox(opt_icons_right "Right icons")

-AddCheckBox(heroic_leap_check SpellName(heroic_leap))
-AddCheckBox(sunder_armor_check SpellName(sunder_armor))
-AddCheckBox(showwait L(showwait) mastery=fury default)
+###
+### Arms
+###
+# Based on SimulationCraft profile "Warrior_Arms_T16H".
+#	class=warrior
+#	spec=arms
+#	talents=http://us.battle.net/wow/en/tool/talent-calculator#Za!122011
+#	glyphs=unending_rage/death_from_above/sweeping_strikes/resonating_power

-### Arms icons.
+AddFunction ArmsAoeActions
+{
+	#sweeping_strikes
+	Spell(sweeping_strikes)
+	#cleave,if=rage>110&active_enemies<=4
+	if Rage() > { MaxRage() - 10 } and Enemies() <= 4 Spell(cleave)
+	#bladestorm,if=enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)
+	if TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } Spell(bladestorm)
+	#dragon_roar,if=enabled&debuff.colossus_smash.down
+	if TalentPoints(dragon_roar_talent) and target.DebuffExpires(colossus_smash_debuff) Spell(dragon_roar)
+	#colossus_smash,if=debuff.colossus_smash.remains<1
+	if target.DebuffRemains(colossus_smash_debuff) < 1 Spell(colossus_smash)
+	#thunder_clap,target=2,if=dot.deep_wounds.attack_power*1.1<stat.attack_power
+	if target.DebuffAttackPower(deep_wounds_debuff) * 1.1 < AttackPower() Spell(thunder_clap)
+	#mortal_strike,if=active_enemies=2|rage<50
+	if Enemies() == 2 or Rage() < 50 Spell(mortal_strike)
+	#execute,if=buff.sudden_execute.down&active_enemies=2
+	if BuffExpires(sudden_execute_buff) and Enemies() == 2 Spell(execute usable=1)
+	#slam,if=buff.sweeping_strikes.up&debuff.colossus_smash.up
+	if BuffPresent(sweeping_strikes_buff) and target.DebuffPresent(colossus_smash_debuff) Spell(slam)
+	#overpower,if=active_enemies=2
+	if Enemies() == 2 Spell(overpower)
+	#slam,if=buff.sweeping_strikes.up
+	if BuffPresent(sweeping_strikes_buff) Spell(slam)
+	#battle_shout
+	Spell(battle_shout)
+}

-AddIcon mastery=arms size=small checkboxon=opt_icons_left {}
-AddIcon mastery=arms size=small checkboxon=opt_icons_left {}
+AddFunction ArmsSingleTargetActions
+{
+	#heroic_strike,if=rage>115|(debuff.colossus_smash.up&rage>60&set_bonus.tier16_2pc_melee)
+	if Rage() > { MaxRage() - 5 } or { target.DebuffPresent(colossus_smash_debuff) and Rage() > 60 and ArmorSetBonus(T16_melee 2) } Spell(heroic_strike)
+	#mortal_strike,if=dot.deep_wounds.remains<1.0|buff.enrage.down|rage<10
+	if target.DebuffRemains(deep_wounds_debuff) < 1 or BuffExpires(enrage_buff) or Rage() < 10 Spell(mortal_strike)
+	#colossus_smash,if=debuff.colossus_smash.remains<1.0
+	if target.DebuffRemains(colossus_smash_debuff) < 1 Spell(colossus_smash)
+	#mortal_strike
+	Spell(mortal_strike)
+	#storm_bolt,if=enabled&debuff.colossus_smash.up
+	if TalentPoints(storm_bolt_talent) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
+	#execute,if=buff.sudden_execute.down|buff.taste_for_blood.down|rage>90|target.time_to_die<12
+	if BuffExpires(sudden_execute_buff) or BuffExpires(taste_for_blood_buff) or Rage() > 90 or target.TimeToDie() < 12 Spell(execute usable=1)
+	#slam,if=target.health.pct>=20&(trinket.stacking_stat.crit.stack>=10|buff.recklessness.up)
+	if target.HealthPercent() >= 20 and { BuffStacks(trinket_stacking_stat_crit_buff) >= 10 or BuffPresent(recklessness_buff) } Spell(slam)
+	#overpower,if=target.health.pct>=20&rage<100|buff.sudden_execute.up
+	if { target.HealthPercent() >= 20 and Rage() < { MaxRage() - 20 } } or BuffPresent(sudden_execute_buff) Spell(overpower)
+	#execute
+	Spell(execute usable=1)
+	#slam,if=target.health.pct>=20
+	if target.HealthPercent() >= 20 Spell(slam)
+	#heroic_throw
+	Spell(heroic_throw)
+	#battle_shout
+	Spell(battle_shout)
+}

-AddIcon mastery=arms help=offgcd
+AddFunction ArmsSingleTargetShortCdActions
 {
-	if target.IsInterruptible() Spell(pummel)
-	if TalentPoints(bloodbath_talent) and {target.DeadIn() <=18 or BuffPresent(recklessness) or target.DeadIn() >=75 } Spell(bloodbath)
-	if BuffExpires(enrage) and Rage() <=Rage() -10 Spell(berserker_rage)
-	if target.DebuffPresent(colossus_smash) if CheckBoxOn(heroic_leap_check) Spell(heroic_leap)
-	if {target.DebuffPresent(colossus_smash) and Rage() >=Rage() -40 and target.HealthPercent() >=20 } or Rage() >=Rage() -15 Spell(heroic_strike)
+	unless { { Rage() > { MaxRage() - 5 } or { target.DebuffPresent(colossus_smash_debuff) and Rage() > 60 and ArmorSetBonus(T16_melee 2) } } and Spell(heroic_strike) }
+		or { target.DebuffRemains(deep_wounds_debuff) < 1 or BuffExpires(enrage_buff) or Rage() < 10 and Spell(mortal_strike) }
+		or { target.DebuffRemains(colossus_smash_debuff) < 1 and Spell(colossus_smash) }
+	{
+		#bladestorm,if=enabled,interrupt_if=!cooldown.colossus_smash.remains
+		if TalentPoints(bladestorm_talent) Spell(bladestorm)
+
+		unless Spell(mortal_strike)
+			or { TalentPoints(storm_bolt_talent) and target.DebuffPresent(colossus_smash_debuff) and Spell(storm_bolt) }
+		{
+			#dragon_roar,if=enabled&debuff.colossus_smash.down
+			if TalentPoints(dragon_roar_talent) and target.DebuffExpires(colossus_smash_debuff) Spell(dragon_roar)
+		}
+	}
 }

-AddIcon mastery=arms help=main
+AddFunction ArmsDefaultActions
+{
+	#auto_attack
+	#berserker_rage,if=buff.enrage.remains<0.5
+	if BuffRemains(enrage_buff) < 0.5 Spell(berserker_rage)
+	#run_action_list,name=aoe,if=active_enemies>=2
+	#if Enemies() >= 2 ArmsAoeActions()
+	#run_action_list,name=single_target,if=active_enemies<2
+	#if Enemies() < 2 ArmsSingleTargetActions()
+}
+
+AddFunction ArmsDefaultShortCdActions
 {
-	if not InCombat()
+	#bloodbath,if=enabled&(debuff.colossus_smash.remains>0.1|cooldown.colossus_smash.remains<5|target.time_to_die<=20)
+	if TalentPoints(bloodbath_talent) and { target.DebuffRemains(colossus_smash_debuff) > 0.1 or SpellCooldown(colossus_smash) < 5 or target.TimeToDie() <= 20 } Spell(bloodbath)
+
+	unless { BuffRemains(enrage_buff) < 0.5 and Spell(berserker_rage) }
 	{
-		unless Stance(1) Spell(battle_stance)
+		#heroic_leap,if=debuff.colossus_smash.up
+		if target.DebuffPresent(colossus_smash_debuff) HeroicLeap()
 	}
-	if target.DebuffStacks(weakened_armor any=1) <3 or target.DebuffRemains(weakened_armor any=1) <3 if CheckBoxOn(sunder_armor_check) Spell(sunder_armor)
-	Spell(mortal_strike)
-	if TalentPoints(dragon_roar_talent) and TalentPoints(bloodbath_talent) and BuffPresent(bloodbath) and target.DebuffExpires(colossus_smash) and target.HealthPercent() >=20 Spell(dragon_roar)
-	if TalentPoints(storm_bolt_talent) and target.DebuffPresent(colossus_smash) Spell(storm_bolt)
-	if target.DebuffRemains(colossus_smash) <1 Spell(colossus_smash)
-	if target.DebuffPresent(colossus_smash) or BuffPresent(recklessness) or Rage() >=Rage() -25 if target.HealthPercent(less 20) Spell(execute)
-	if TalentPoints(dragon_roar_talent) and {TalentPoints(bloodbath_talent) and BuffPresent(bloodbath) and target.HealthPercent() >=20 } or {target.DebuffExpires(colossus_smash) and target.HealthPercent() <20 } Spell(dragon_roar)
-	if target.DebuffPresent(colossus_smash) and {target.DebuffRemains(colossus_smash) <1 or BuffPresent(recklessness) } and target.HealthPercent() >=20 Spell(slam)
-	if BuffStacks(taste_for_blood) >=3 and target.HealthPercent() >=20 Spell(overpower usable=1)
-	if target.DebuffPresent(colossus_smash) and target.DebuffRemains(colossus_smash) <2.5 and target.HealthPercent() >=20 Spell(slam)
-	if BuffExpires(sudden_execute) if target.HealthPercent(less 20) Spell(execute)
-	if target.HealthPercent() >=20 or BuffPresent(sudden_execute) Spell(overpower usable=1)
-	if Rage() >=40 and target.HealthPercent() >=20 Spell(slam)
+}
+
+AddFunction ArmsDefaultCdActions
+{
+	#mogu_power_potion,if=(target.health.pct<20&buff.recklessness.up)|buff.bloodlust.react|target.time_to_die<=25
+	if { target.HealthPercent() < 20 and BuffPresent(recklessness_buff) } or BuffPresent(burst_haste any=1) or target.TimeToDie() <= 25 UsePotionStrength()
+	#recklessness,if=!talent.bloodbath.enabled&((cooldown.colossus_smash.remains<2|debuff.colossus_smash.remains>=5)&(target.time_to_die>(192*buff.cooldown_reduction.value)|target.health.pct<20))|buff.bloodbath.up&(target.time_to_die>(192*buff.cooldown_reduction.value)|target.health.pct<20)|target.time_to_die<=12
+	if not TalentPoints(bloodbath_talent) and { { SpellCooldown(colossus_smash) < 2 or target.DebuffRemains(colossus_smash_debuff) >= 5 } and { target.TimeToDie() > { 192 * BuffAmount(cooldown_reduction_strength_buff) } or target.HealthPercent() < 20 } } or BuffPresent(bloodbath_buff) and { target.TimeToDie() > { 192 * BuffAmount(cooldown_reduction_strength_buff) } or target.HealthPercent() < 20 } or target.TimeToDie() <= 12 Spell(recklessness)
+	#avatar,if=enabled&(buff.recklessness.up|target.time_to_die<=25)
+	if TalentPoints(avatar_talent) and { BuffPresent(recklessness_buff) or target.TimeToDie() <= 25 } Spell(avatar)
+	#skull_banner,if=buff.skull_banner.down&(((cooldown.colossus_smash.remains<2|debuff.colossus_smash.remains>=5)&target.time_to_die>192&buff.cooldown_reduction.up)|buff.recklessness.up)
+	if BuffExpires(skull_banner_buff) and { { { SpellCooldown(colossus_smash) < 2 or target.DebuffRemains(colossus_smash_debuff) >= 5 } and target.TimeToDie() > 192 and BuffPresent(cooldown_reduction_strength_buff) } or BuffPresent(recklessness_buff) } Spell(skull_banner)
+	#use_item,slot=hands,if=!talent.bloodbath.enabled&debuff.colossus_smash.up|buff.bloodbath.up
+	if not TalentPoints(bloodbath_talent) and target.DebuffPresent(colossus_smash_debuff) or BuffPresent(bloodbath_buff) UseItemActions()
+	#blood_fury,if=buff.cooldown_reduction.down&(buff.bloodbath.up|(!talent.bloodbath.enabled&debuff.colossus_smash.up))|buff.cooldown_reduction.up&buff.recklessness.up
+	if BuffExpires(cooldown_reduction_strength_buff) and { BuffPresent(bloodbath_buff) or { not TalentPoints(bloodbath_talent) and target.DebuffPresent(colossus_smash_debuff) } } or BuffPresent(cooldown_reduction_strength_buff) and BuffPresent(recklessness_buff) Spell(blood_fury)
+	#berserking,if=buff.cooldown_reduction.down&(buff.bloodbath.up|(!talent.bloodbath.enabled&debuff.colossus_smash.up))|buff.cooldown_reduction.up&buff.recklessness.up
+	if BuffExpires(cooldown_reduction_strength_buff) and { BuffPresent(bloodbath_buff) or { not TalentPoints(bloodbath_talent) and target.DebuffPresent(colossus_smash_debuff) } } or BuffPresent(cooldown_reduction_strength_buff) and BuffPresent(recklessness_buff) Spell(berserking)
+	#arcane_torrent,if=buff.cooldown_reduction.down&(buff.bloodbath.up|(!talent.bloodbath.enabled&debuff.colossus_smash.up))|buff.cooldown_reduction.up&buff.recklessness.up
+	if BuffExpires(cooldown_reduction_strength_buff) and { BuffPresent(bloodbath_buff) or { not TalentPoints(bloodbath_talent) and target.DebuffPresent(colossus_smash_debuff) } } or BuffPresent(cooldown_reduction_strength_buff) and BuffPresent(recklessness_buff) Spell(arcane_torrent)
+}
+
+AddFunction ArmsPrecombatActions
+{
+	#flask,type=winters_bite
+	#food,type=black_pepper_ribs_and_shrimp
+	#snapshot_stats
+	#stance,choose=battle
+	if not Stance(warrior_battle_stance) Spell(battle_stance)
+	#battle_shout
 	Spell(battle_shout)
-	Spell(heroic_throw)
+}
+
+AddFunction ArmsPrecombatCdActions
+{
+	if Stance(warrior_battle_stance)
+	{
+		#mogu_power_potion
+		UsePotionStrength()
+	}
+}
+
+### Arms icons.
+
+AddIcon mastery=arms size=small checkboxon=opt_icons_left
+{
+	Spell(vigilance)
+	Spell(demoralizing_banner)
+	Spell(rallying_cry)
+}
+
+AddIcon mastery=arms size=small checkboxon=opt_icons_left
+{
+	if TalentPoints(impending_victory_talent) and HealthPercent() < 80 Spell(impending_victory usable=1)
+	if not TalentPoints(impending_victory_talent) and HealthPercent() < 80 Spell(victory_rush usable=1)
+	if TalentPoints(enraged_regeneration_talent) Spell(enraged_regeneration)
+}
+
+AddIcon mastery=arms help=shortcd
+{
+	ArmsDefaultShortCdActions()
+	ArmsSingleTargetShortCdActions()
+}
+
+AddIcon mastery=arms help=main
+{
+	if InCombat(no) ArmsPrecombatActions()
+	ArmsDefaultActions()
+	ArmsSingleTargetActions()
 }

 AddIcon mastery=arms help=aoe checkboxon=opt_aoe
 {
-	Spell(dragon_roar)
-	Spell(shockwave)
-	Spell(whirlwind)
-	Spell(sweeping_strikes)
-	if Rage() >=90 Spell(cleave)
-	Spell(bloodthirst)
+	if InCombat(no) ArmsPrecombatActions()
+	ArmsDefaultActions()
+	ArmsAoeActions()
 }

 AddIcon mastery=arms help=cd
 {
-	if target.DeadIn() <=18 or {{target.DeadIn() >=186 or {target.HealthPercent() <20 and {target.DebuffRemains(colossus_smash) >=5 or SpellCooldown(colossus_smash) <=1.5 } } } and {not TalentPoints(bloodbath_talent) or not SpellCooldown(bloodbath) } } Spell(recklessness)
-	if TalentPoints(avatar_talent) and {BuffPresent(recklessness) or target.DeadIn() <=25 } Spell(avatar)
-	if BuffPresent(recklessness) Spell(skull_banner)
-	if TalentPoints(bloodbath_talent) and BuffPresent(bloodbath) UseItemActions()
+	Interrupt()
+	UseRacialInterruptActions()
+
+	if InCombat(no) ArmsPrecombatCdActions()
+	ArmsDefaultCdActions()
 }

-AddIcon mastery=arms size=small checkboxon=opt_icons_right {}
+AddIcon mastery=arms size=small checkboxon=opt_icons_right
+{
+	Spell(die_by_the_sword)
+	Spell(shield_wall)
+}

 AddIcon mastery=arms size=small checkboxon=opt_icons_right
 {
+	#shattering_throw,if=cooldown.colossus_smash.remains>5
+	if target.DebuffExpires(shattering_throw_debuff) and SpellCooldown(colossus_smash) > 5 Spell(shattering_throw)
+
 	UseItemActions()
 }

-### Fury icons.
-
-AddIcon mastery=fury size=small checkboxon=opt_icons_left {}
-AddIcon mastery=fury size=small checkboxon=opt_icons_left {}
+###
+### Fury
+###
+# Based on SimulationCraft profile "Warrior_Fury_1h_T16H".
+#	class=warrior
+#	spec=fury
+#	talents=http://us.battle.net/wow/en/tool/talent-calculator#ZZ!122212
+#	glyphs=unending_rage/death_from_above/bull_rush

-AddIcon mastery=fury help=offgcd
+AddFunction FuryPrecombatActions
 {
-	if target.IsInterruptible() Spell(pummel)
-	if TalentPoints(bloodbath_talent) and {SpellCooldown(colossus_smash) <2 or target.DebuffRemains(colossus_smash) >=5 or target.DeadIn() <=20 } Spell(bloodbath)
-	if not {BuffStacks(enrage) or {BuffStacks(raging_blow_aura) ==2 and target.HealthPercent() >=20 } } or {BuffRemains(recklessness) >=10 and not BuffStacks(raging_blow_aura) } Spell(berserker_rage)
-	if target.DebuffPresent(colossus_smash) if CheckBoxOn(heroic_leap_check) Spell(heroic_leap)
-	if {{target.DebuffPresent(colossus_smash) and Rage() >=40 } and target.HealthPercent() >=20 } or Rage() >=110 Spell(heroic_strike)
+	#flask,type=winters_bite
+	#food,type=black_pepper_ribs_and_shrimp
+	#snapshot_stats
+	#stance,choose=battle
+	if not Stance(warrior_battle_stance) Spell(battle_stance)
+	#battle_shout
+	Spell(battle_shout)
 }

-AddIcon mastery=fury help=main
+AddFunction FuryPrecombatCdActions
 {
-	if not InCombat()
+	if Stance(warrior_battle_stance)
 	{
-		unless Stance(1) Spell(battle_stance)
+		#mogu_power_potion
+		UsePotionStrength()
 	}
-	if target.DebuffStacks(weakened_armor any=1) <3 or target.DebuffRemains(weakened_armor any=1) <3 if CheckBoxOn(sunder_armor_check) Spell(sunder_armor)
-	if BuffStacks(raging_blow_aura) ==2 and target.DebuffPresent(colossus_smash) and target.HealthPercent() >=20 Spell(raging_blow)
-	if not {target.HealthPercent() <20 and target.DebuffPresent(colossus_smash) and Rage() >=30 } Spell(bloodthirst)
-	if BuffStacks(bloodsurge) and target.HealthPercent() >=20 and SpellCooldown(bloodthirst) <=1 Spell(wild_strike)
-	if not {target.HealthPercent() <20 and target.DebuffPresent(colossus_smash) and Rage() >=30 } and SpellCooldown(bloodthirst) <=1 and SpellCooldown(bloodthirst) if CheckBoxOn(showwait) Texture(Spell_nature_timestop)
-	if TalentPoints(dragon_roar_talent) and {not target.DebuffPresent(colossus_smash) and {BuffPresent(bloodbath) or not TalentPoints(bloodbath_talent) } } Spell(dragon_roar)
+}
+
+AddFunction FuryDefaultCdActions
+{
+	#mogu_power_potion,if=(target.health.pct<20&buff.recklessness.up)|target.time_to_die<=25
+	if { target.HealthPercent() < 20 and BuffPresent(recklessness_buff) } or target.TimeToDie() <= 25 UsePotionStrength()
+	#recklessness,if=!talent.bloodbath.enabled&((cooldown.colossus_smash.remains<2|debuff.colossus_smash.remains>=5)&(target.time_to_die>(192*buff.cooldown_reduction.value)|target.health.pct<20))|buff.bloodbath.up&(target.time_to_die>(192*buff.cooldown_reduction.value)|target.health.pct<20)|target.time_to_die<=12
+	if not TalentPoints(bloodbath_talent) and { { SpellCooldown(colossus_smash) < 2 or target.DebuffRemains(colossus_smash_debuff) >= 5 } and { target.TimeToDie() > { 192 * BuffAmount(cooldown_reduction_strength_buff) } or target.HealthPercent() < 20 } } or BuffPresent(bloodbath_buff) and { target.TimeToDie() > { 192 * BuffAmount(cooldown_reduction_strength_buff) } or target.HealthPercent() < 20 } or target.TimeToDie() <= 12 Spell(recklessness)
+	#avatar,if=enabled&(buff.recklessness.up|target.time_to_die<=25)
+	if TalentPoints(avatar_talent) and { BuffPresent(recklessness_buff) or target.TimeToDie() <= 25 } Spell(avatar)
+	#skull_banner,if=buff.skull_banner.down&(((cooldown.colossus_smash.remains<2|debuff.colossus_smash.remains>=5)&target.time_to_die>192&buff.cooldown_reduction.up)|buff.recklessness.up)
+	if BuffExpires(skull_banner_buff) and { { { SpellCooldown(colossus_smash) < 2 or target.DebuffRemains(colossus_smash_debuff) >= 5 } and target.TimeToDie() > 192 and BuffPresent(cooldown_reduction_strength_buff) } or BuffPresent(recklessness_buff) } Spell(skull_banner)
+	#use_item,slot=hands,if=!talent.bloodbath.enabled&debuff.colossus_smash.up|buff.bloodbath.up
+	if not TalentPoints(bloodbath_talent) and target.DebuffPresent(colossus_smash_debuff) or BuffPresent(bloodbath_buff) UseItemActions()
+	#blood_fury,if=buff.cooldown_reduction.down&(buff.bloodbath.up|(!talent.bloodbath.enabled&debuff.colossus_smash.up))|buff.cooldown_reduction.up&buff.recklessness.up
+	if BuffExpires(cooldown_reduction_strength_buff) and { BuffPresent(bloodbath_buff) or { not TalentPoints(bloodbath_talent) and target.DebuffPresent(colossus_smash_debuff) } } or BuffPresent(cooldown_reduction_strength_buff) and BuffPresent(recklessness_buff) Spell(blood_fury)
+	#berserking,if=buff.cooldown_reduction.down&(buff.bloodbath.up|(!talent.bloodbath.enabled&debuff.colossus_smash.up))|buff.cooldown_reduction.up&buff.recklessness.up
+	if BuffExpires(cooldown_reduction_strength_buff) and { BuffPresent(bloodbath_buff) or { not TalentPoints(bloodbath_talent) and target.DebuffPresent(colossus_smash_debuff) } } or BuffPresent(cooldown_reduction_strength_buff) and BuffPresent(recklessness_buff) Spell(berserking)
+	#arcane_torrent,if=buff.cooldown_reduction.down&(buff.bloodbath.up|(!talent.bloodbath.enabled&debuff.colossus_smash.up))|buff.cooldown_reduction.up&buff.recklessness.up
+	if BuffExpires(cooldown_reduction_strength_buff) and { BuffPresent(bloodbath_buff) or { not TalentPoints(bloodbath_talent) and target.DebuffPresent(colossus_smash_debuff) } } or BuffPresent(cooldown_reduction_strength_buff) and BuffPresent(recklessness_buff) Spell(arcane_torrent)
+}
+
+AddFunction FuryTwoTargetsActions
+{
+	#bloodbath,if=enabled&((!talent.bladestorm.enabled&(cooldown.colossus_smash.remains<2|debuff.colossus_smash.remains>=5|target.time_to_die<=20))|(talent.bladestorm.enabled))
+	#if TalentPoints(bloodbath_talent) and { { not TalentPoints(bladestorm_talent) and { SpellCooldown(colossus_smash) < 2 or target.DebuffRemains(colossus_smash_debuff) >= 5 or target.TimeToDie() <= 20 } } or { TalentPoints(bladestorm_talent) } } Spell(bloodbath)
+	#berserker_rage,if=(talent.bladestorm.enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)&!cooldown.bladestorm.remains&(!talent.storm_bolt.enabled|(talent.storm_bolt.enabled&!debuff.colossus_smash.up)))|(!talent.bladestorm.enabled&buff.enrage.remains<1&cooldown.bloodthirst.remains>1)
+	if { TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } and not SpellCooldown(bladestorm) and { not TalentPoints(storm_bolt_talent) or { TalentPoints(storm_bolt_talent) and not target.DebuffPresent(colossus_smash_debuff) } } } or { not TalentPoints(bladestorm_talent) and BuffRemains(enrage_buff) < 1 and SpellCooldown(bloodthirst) > 1 } Spell(berserker_rage)
+	#cleave,if=(rage>=60&debuff.colossus_smash.up)|rage>110
+	if { Rage() >= 60 and target.DebuffPresent(colossus_smash_debuff) } or Rage() > { MaxRage() - 10 } Spell(cleave)
+	#heroic_leap,if=buff.enrage.up&(debuff.colossus_smash.up&buff.cooldown_reduction.up|!buff.cooldown_reduction.up)
+	if BuffPresent(enrage_buff) and { target.DebuffPresent(colossus_smash_debuff) and BuffPresent(cooldown_reduction_strength_buff) or not BuffPresent(cooldown_reduction_strength_buff) } HeroicLeap()
+	#bladestorm,if=enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)&(!talent.storm_bolt.enabled|(talent.storm_bolt.enabled&!debuff.colossus_smash.up))
+	if TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } and { not TalentPoints(storm_bolt_talent) or { TalentPoints(storm_bolt_talent) and not target.DebuffPresent(colossus_smash_debuff) } } Spell(bladestorm)
+	#dragon_roar,if=enabled&(!debuff.colossus_smash.up&(buff.bloodbath.up|!talent.bloodbath.enabled))
+	if TalentPoints(dragon_roar_talent) and { not target.DebuffPresent(colossus_smash_debuff) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } } Spell(dragon_roar)
+	#colossus_smash
 	Spell(colossus_smash)
-	if BuffPresent(enrage) or target.DebuffPresent(colossus_smash) or Rage() >90 or target.DeadIn() <12 or BuffPresent(recklessness) if target.HealthPercent(less 20) Spell(execute)
-	if TalentPoints(storm_bolt_talent) Spell(storm_bolt)
-	if BuffStacks(raging_blow_aura) ==2 or {BuffPresent(raging_blow_aura) and {target.DebuffPresent(colossus_smash) or SpellCooldown(colossus_smash) >=3 or {SpellCooldown(bloodthirst) >=1 and BuffRemains(raging_blow_aura) <=3 } } } Spell(raging_blow)
-	if BuffStacks(bloodsurge) Spell(wild_strike)
+	#bloodthirst,cycle_targets=1,if=dot.deep_wounds.remains<5
+	if target.DebuffRemains(deep_wounds_debuff) < 5 Spell(bloodthirst)
+	#storm_bolt,if=enabled&debuff.colossus_smash.up
+	if TalentPoints(storm_bolt_talent) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
+	#bloodthirst
+	Spell(bloodthirst)
+	#wait,sec=cooldown.bloodthirst.remains,if=!(target.health.pct<20&debuff.colossus_smash.up&rage>=30&buff.enrage.up)&cooldown.bloodthirst.remains<=1
+	if not { target.HealthPercent() < 20 and target.DebuffPresent(colossus_smash_debuff) and Rage() >= 30 and BuffPresent(enrage_buff) } Spell(bloodthirst wait=1)
+	#raging_blow,if=buff.meat_cleaver.up
+	if BuffPresent(meat_cleaver_buff) RagingBlow()
+	#whirlwind,if=!buff.meat_cleaver.up
+	if not BuffPresent(meat_cleaver_buff) Spell(whirlwind)
+	#shockwave,if=enabled
 	if TalentPoints(shockwave_talent) Spell(shockwave)
-	if target.DebuffExpires(colossus_smash) Spell(heroic_throw)
-	if Rage() <70 and not target.DebuffPresent(colossus_smash) Spell(battle_shout)
-	if target.DebuffPresent(colossus_smash) and target.HealthPercent() >=20 Spell(wild_strike)
-	if TalentPoints(impending_victory_talent) and target.HealthPercent() >=20 Spell(impending_victory)
-	if SpellCooldown(colossus_smash) >=2 and Rage() >=80 and target.HealthPercent() >=20 Spell(wild_strike)
-	if Rage() <70 Spell(battle_shout)
+	#execute
+	Spell(execute usable=1)
+	#battle_shout
+	Spell(battle_shout)
+	#heroic_throw
+	Spell(heroic_throw)
 }

-AddIcon mastery=fury help=aoe checkboxon=opt_aoe
+AddFunction FuryThreeTargetsActions
 {
+	#bloodbath,if=enabled
+	#if TalentPoints(bloodbath_talent) Spell(bloodbath)
+	#berserker_rage,if=(talent.bladestorm.enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)&!cooldown.bladestorm.remains)|(!talent.bladestorm.enabled&buff.enrage.remains<1&cooldown.bloodthirst.remains>1)
+	if { TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } and not SpellCooldown(bladestorm) } or { not TalentPoints(bladestorm_talent) and BuffRemains(enrage_buff) < 1 and SpellCooldown(bloodthirst) > 1 } Spell(berserker_rage)
+	#cleave,if=(rage>=70&debuff.colossus_smash.up)|rage>90
+	if { Rage() >= 70 and target.DebuffPresent(colossus_smash_debuff) } or Rage() > 90 Spell(cleave)
+	#heroic_leap,if=buff.enrage.up&(debuff.colossus_smash.up&buff.cooldown_reduction.up|!buff.cooldown_reduction.up)
+	if BuffPresent(enrage_buff) and { target.DebuffPresent(colossus_smash_debuff) and BuffPresent(cooldown_reduction_strength_buff) or not BuffPresent(cooldown_reduction_strength_buff) } HeroicLeap()
+	#bladestorm,if=enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)
+	if TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } Spell(bladestorm)
+	#dragon_roar,if=enabled&!debuff.colossus_smash.up&(buff.bloodbath.up|!talent.bloodbath.enabled)
+	if TalentPoints(dragon_roar_talent) and not target.DebuffPresent(colossus_smash_debuff) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } Spell(dragon_roar)
+	#bloodthirst,cycle_targets=1,if=!dot.deep_wounds.ticking
+	if not target.DebuffPresent(deep_wounds_debuff) Spell(bloodthirst)
+	#colossus_smash
+	Spell(colossus_smash)
+	#storm_bolt,if=enabled&debuff.colossus_smash.up
+	if TalentPoints(storm_bolt_talent) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
+	#raging_blow,if=buff.meat_cleaver.stack=2
+	if BuffStacks(meat_cleaver_buff) == 2 RagingBlow()
+	#whirlwind
+	Spell(whirlwind)
+	#shockwave,if=enabled
+	if TalentPoints(shockwave_talent) Spell(shockwave)
+	#raging_blow
+	RagingBlow()
+	#battle_shout
+	Spell(battle_shout)
+	#heroic_throw
+	Spell(heroic_throw)
+}

-	Spell(dragon_roar)
-	Spell(shockwave)
-	if BuffStacks(meat_cleaver) and BuffStacks(raging_blow_aura) Spell(raging_blow)
+AddFunction FuryAoeActions
+{
+	#bloodbath,if=enabled
+	#if TalentPoints(bloodbath_talent) Spell(bloodbath)
+	#berserker_rage,if=(talent.bladestorm.enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)&!cooldown.bladestorm.remains)|(!talent.bladestorm.enabled&buff.enrage.remains<1&cooldown.bloodthirst.remains>1)
+	if { TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } and not SpellCooldown(bladestorm) } or { not TalentPoints(bladestorm_talent) and BuffRemains(enrage_buff) < 1 and SpellCooldown(bloodthirst) > 1 } Spell(berserker_rage)
+	#cleave,if=rage>90
+	if Rage() > 90 Spell(cleave)
+	#heroic_leap,if=buff.enrage.up
+	if BuffPresent(enrage_buff) HeroicLeap()
+	#bladestorm,if=enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)
+	if TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } Spell(bladestorm)
+	#bloodthirst,cycle_targets=1,if=!dot.deep_wounds.ticking&buff.enrage.down
+	if not target.DebuffPresent(deep_wounds_debuff) and BuffExpires(enrage_buff) Spell(bloodthirst)
+	#raging_blow,if=buff.meat_cleaver.stack=3
+	if BuffStacks(meat_cleaver_buff) == 3 RagingBlow()
+	#whirlwind
 	Spell(whirlwind)
-	if Rage() >=90 Spell(cleave)
+	#dragon_roar,if=enabled&debuff.colossus_smash.down&(buff.bloodbath.up|!talent.bloodbath.enabled)
+	if TalentPoints(dragon_roar_talent) and target.DebuffExpires(colossus_smash_debuff) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } Spell(dragon_roar)
+	#bloodthirst,cycle_targets=1,if=!dot.deep_wounds.ticking
+	if not target.DebuffPresent(deep_wounds_debuff) Spell(bloodthirst)
+	#colossus_smash
+	Spell(colossus_smash)
+	#storm_bolt,if=enabled
+	if TalentPoints(storm_bolt_talent) Spell(storm_bolt)
+	#shockwave,if=enabled
+	if TalentPoints(shockwave_talent) Spell(shockwave)
+	#battle_shout
+	Spell(battle_shout)
+}
+
+AddFunction FuryOneHandSingleTargetActions
+{
+	#berserker_rage,if=buff.enrage.remains<1&cooldown.bloodthirst.remains>1
+	if BuffRemains(enrage_buff) < 1 and SpellCooldown(bloodthirst) > 1 Spell(berserker_rage)
+	#heroic_leap,if=debuff.colossus_smash.up
+	if target.DebuffPresent(colossus_smash_debuff) HeroicLeap()
+	#storm_bolt,if=enabled&buff.cooldown_reduction.up&debuff.colossus_smash.up
+	if TalentPoints(storm_bolt_talent) and BuffPresent(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
+	#raging_blow,if=buff.raging_blow.stack=2&debuff.colossus_smash.up&target.health.pct>=20
+	if BuffStacks(raging_blow_buff) == 2 and target.DebuffPresent(colossus_smash_debuff) and target.HealthPercent() >= 20 RagingBlow()
+	#storm_bolt,if=enabled&buff.cooldown_reduction.down&debuff.colossus_smash.up
+	if TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
+	#bloodthirst,if=!(target.health.pct<20&debuff.colossus_smash.up&rage>=30&buff.enrage.up)
+	if not { target.HealthPercent() < 20 and target.DebuffPresent(colossus_smash_debuff) and Rage() >= 30 and BuffPresent(enrage_buff) } Spell(bloodthirst)
+	#wild_strike,if=buff.bloodsurge.react&target.health.pct>=20&cooldown.bloodthirst.remains<=1
+	if BuffPresent(bloodsurge_buff) and target.HealthPercent() >= 20 and SpellCooldown(bloodthirst) <= 1 Spell(wild_strike)
+	#wait,sec=cooldown.bloodthirst.remains,if=!(target.health.pct<20&debuff.colossus_smash.up&rage>=30&buff.enrage.up)&cooldown.bloodthirst.remains<=1
+	if not { target.HealthPercent() < 20 and target.DebuffPresent(colossus_smash_debuff) and Rage() >= 30 and BuffPresent(enrage_buff) } Spell(bloodthirst wait=1)
+	#colossus_smash
+	Spell(colossus_smash)
+	#storm_bolt,if=enabled&buff.cooldown_reduction.down
+	if TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) Spell(storm_bolt)
+	#execute,if=debuff.colossus_smash.up|rage>70|target.time_to_die<12
+	if target.DebuffPresent(colossus_smash_debuff) or Rage() > 70 or target.TimeToDie() < 12 Spell(execute usable=1)
+	#raging_blow,if=target.health.pct<20|buff.raging_blow.stack=2|(debuff.colossus_smash.up|(cooldown.bloodthirst.remains>=1&buff.raging_blow.remains<=3))
+	if target.HealthPercent() < 20 or BuffStacks(raging_blow_buff) == 2 or { target.DebuffPresent(colossus_smash_debuff) or { SpellCooldown(bloodthirst) >= 1 and BuffRemains(raging_blow_buff) <= 3 } } RagingBlow()
+	#wild_strike,if=buff.bloodsurge.up
+	if BuffPresent(bloodsurge_buff) Spell(wild_strike)
+	#raging_blow,if=cooldown.colossus_smash.remains>=3
+	if SpellCooldown(colossus_smash) >= 3 RagingBlow()
+	#heroic_throw,if=debuff.colossus_smash.down&rage<60
+	if target.DebuffExpires(colossus_smash_debuff) and Rage() < 60 Spell(heroic_throw)
+	#battle_shout,if=rage<70&!debuff.colossus_smash.up
+	if Rage() < 70 and not target.DebuffPresent(colossus_smash_debuff) Spell(battle_shout)
+	#wild_strike,if=debuff.colossus_smash.up&target.health.pct>=20
+	if target.DebuffPresent(colossus_smash_debuff) and target.HealthPercent() >= 20 Spell(wild_strike)
+	#battle_shout,if=rage<70
+	if Rage() < 70 Spell(battle_shout)
+	#wild_strike,if=cooldown.colossus_smash.remains>=2&rage>=70&target.health.pct>=20
+	if SpellCooldown(colossus_smash) >= 2 and Rage() >= 70 and target.HealthPercent() >= 20 Spell(wild_strike)
+	#impending_victory,if=enabled&target.health.pct>=20&cooldown.colossus_smash.remains>=2
+	if TalentPoints(impending_victory_talent) and target.HealthPercent() >= 20 and SpellCooldown(colossus_smash) >= 2 Spell(impending_victory)
+}
+
+AddFunction FuryOneHandSingleTargetShortCdActions
+{
+	#bloodbath,if=enabled&(cooldown.colossus_smash.remains<2|debuff.colossus_smash.remains>=5|target.time_to_die<=20)
+	if TalentPoints(bloodbath_talent) and { SpellCooldown(colossus_smash) < 2 or target.DebuffRemains(colossus_smash_debuff) >= 5 or target.TimeToDie() <= 20 } Spell(bloodbath)
+
+	unless { BuffRemains(enrage_buff) < 1 and SpellCooldown(bloodthirst) > 1 and Spell(berserker_rage) }
+	{
+		#heroic_strike,if=((debuff.colossus_smash.up&rage>=40)&target.health.pct>=20)|rage>=100&buff.enrage.up
+		if { { target.DebuffPresent(colossus_smash_debuff) and Rage() >= 40 } and target.HealthPercent() >= 20 } or Rage() >= { MaxRage() - 20 } and BuffPresent(enrage_buff) Spell(heroic_strike)
+
+		unless { target.DebuffPresent(colossus_smash_debuff) and HeroicLeap() }
+			or { TalentPoints(storm_bolt_talent) and BuffPresent(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) and Spell(storm_bolt) }
+			or { BuffStacks(raging_blow_buff) == 2 and target.DebuffPresent(colossus_smash_debuff) and target.HealthPercent() >= 20 and RagingBlow() }
+			or { TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) and Spell(storm_bolt) }
+			or { BuffPresent(bloodsurge_buff) and target.HealthPercent() >= 20 and SpellCooldown(bloodthirst) <= 1 and Spell(wild_strike) }
+			or { not { target.HealthPercent() < 20 and target.DebuffPresent(colossus_smash_debuff) and Rage() >= 30 and BuffPresent(enrage_buff) } and SpellCooldown(bloodthirst) <= 1 }
+		{
+			#dragon_roar,if=enabled&(!debuff.colossus_smash.up&(buff.bloodbath.up|!talent.bloodbath.enabled))
+			if TalentPoints(dragon_roar_talent) and { not target.DebuffPresent(colossus_smash_debuff) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } } Spell(dragon_roar)
+
+			unless Spell(colossus_smash)
+				or { TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) and Spell(storm_bolt) }
+				or { { target.DebuffPresent(colossus_smash_debuff) or Rage() > 70 or target.TimeToDie() < 12 } and Spell(execute usable=1) }
+				or { { target.HealthPercent() < 20 or BuffStacks(raging_blow_buff) == 2 or { target.DebuffPresent(colossus_smash_debuff) or { SpellCooldown(bloodthirst) >= 1 and BuffRemains(raging_blow_buff) <= 3 } } } and RagingBlow() }
+			{
+				#bladestorm,if=enabled
+				if TalentPoints(bladestorm_talent) Spell(bladestorm)
+
+				unless { BuffPresent(bloodsurge_buff) and Spell(wild_strike) }
+					or { SpellCooldown(colossus_smash) >= 3 and RagingBlow() }
+				{
+					#shockwave,if=enabled
+					if TalentPoints(shockwave_talent) Spell(shockwave)
+				}
+			}
+		}
+	}
+}
+
+# Based on SimulationCraft profile "Warrior_Fury_2h_T16H".
+#	class=warrior
+#	spec=fury
+#	talents=http://us.battle.net/wow/en/tool/talent-calculator#ZZ!122012
+#	glyphs=unending_rage/death_from_above/bull_rush
+
+AddFunction FuryTwoHandSingleTargetActions
+{
+	#berserker_rage,if=buff.enrage.remains<1&cooldown.bloodthirst.remains>1
+	if BuffRemains(enrage_buff) < 1 and SpellCooldown(bloodthirst) > 1 Spell(berserker_rage)
+	#heroic_leap,if=debuff.colossus_smash.up&buff.enrage.up
+	if target.DebuffPresent(colossus_smash_debuff) and BuffPresent(enrage_buff) HeroicLeap()
+	#bloodthirst,if=!buff.enrage.up
+	if not BuffPresent(enrage_buff) Spell(bloodthirst)
+	#storm_bolt,if=enabled&buff.cooldown_reduction.up&debuff.colossus_smash.up
+	if TalentPoints(storm_bolt_talent) and BuffPresent(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
+	#raging_blow,if=buff.raging_blow.stack=2&debuff.colossus_smash.up
+	if BuffStacks(raging_blow_buff) == 2 and target.DebuffPresent(colossus_smash_debuff) RagingBlow()
+	#storm_bolt,if=enabled&buff.cooldown_reduction.down&debuff.colossus_smash.up
+	if TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
+	#bloodthirst
 	Spell(bloodthirst)
+	#wild_strike,if=buff.bloodsurge.react&cooldown.bloodthirst.remains<=1&cooldown.bloodthirst.remains>0.3
+	if BuffPresent(bloodsurge_buff) and SpellCooldown(bloodthirst) <= 1 and SpellCooldown(bloodthirst) > 0.3 Spell(wild_strike)
+	#wait,sec=cooldown.bloodthirst.remains,if=!(debuff.colossus_smash.up&rage>=30&buff.enrage.up)&cooldown.bloodthirst.remains<=1
+	if not { target.DebuffPresent(colossus_smash_debuff) and Rage() >= 30 and BuffPresent(enrage_buff) } and SpellCooldown(bloodthirst) <= 1 Spell(bloodthirst wait=1)
+	#colossus_smash
+	Spell(colossus_smash)
+	#storm_bolt,if=enabled&buff.cooldown_reduction.down
+	if TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) Spell(storm_bolt)
+	#execute,if=buff.raging_blow.stack<2&(((rage>70&!debuff.colossus_smash.up)|debuff.colossus_smash.up)|trinket.proc.strength.up)|target.time_to_die<5
+	if BuffStacks(raging_blow_buff) < 2 and { { { Rage() > 70 and not target.DebuffPresent(colossus_smash_debuff) } or target.DebuffPresent(colossus_smash_debuff) } or BuffPresent(trinket_proc_strength_buff) } or target.TimeToDie() < 5 Spell(execute usable=1)
+	#berserker_rage,if=buff.raging_blow.stack<=1&target.health.pct>=20
+	if BuffStacks(raging_blow_buff) <= 1 and target.HealthPercent() >= 20 Spell(berserker_rage)
+	#raging_blow,if=buff.raging_blow.stack=2|debuff.colossus_smash.up|buff.raging_blow.remains<=3
+	if BuffStacks(raging_blow_buff) == 2 or target.DebuffPresent(colossus_smash_debuff) or BuffRemains(raging_blow_buff) <= 3 RagingBlow()
+	#raging_blow,if=cooldown.colossus_smash.remains>=1
+	if SpellCooldown(colossus_smash) >= 1 RagingBlow()
+	#wild_strike,if=buff.bloodsurge.up
+	if BuffPresent(bloodsurge_buff) Spell(wild_strike)
+	#heroic_throw,if=debuff.colossus_smash.down&rage<60
+	if target.DebuffExpires(colossus_smash_debuff) and Rage() < 60 Spell(heroic_throw)
+	#wild_strike,if=debuff.colossus_smash.up
+	if target.DebuffPresent(colossus_smash_debuff) Spell(wild_strike)
+	#battle_shout,if=rage<70
+	if Rage() < 70 Spell(battle_shout)
+	#impending_victory,if=enabled&cooldown.colossus_smash.remains>=1.5
+	if TalentPoints(impending_victory_talent) and SpellCooldown(colossus_smash) >= 1.5 Spell(impending_victory)
+	#wild_strike,if=cooldown.colossus_smash.remains>=2&rage>=70
+	if SpellCooldown(colossus_smash) >= 2 and Rage() >= 70 Spell(wild_strike)
+}

+AddFunction FuryTwoHandSingleTargetShortCdActions
+{
+	#bloodbath,if=enabled&(cooldown.colossus_smash.remains<2|debuff.colossus_smash.remains>=5|target.time_to_die<=20)
+	if TalentPoints(bloodbath_talent) and { SpellCooldown(colossus_smash) < 2 or target.DebuffRemains(colossus_smash_debuff) >= 5 or target.TimeToDie() <= 20 } Spell(bloodbath)
+
+	unless { BuffRemains(enrage_buff) < 1 and SpellCooldown(bloodthirst) > 1 and Spell(berserker_rage) }
+	{
+		#heroic_strike,if=(debuff.colossus_smash.up&rage>=40|rage>=100)&buff.enrage.up
+		if { { target.DebuffPresent(colossus_smash_debuff) and Rage() >= 40 } or Rage() >= { MaxRage() - 20 } } and BuffPresent(enrage_buff) Spell(heroic_strike)
+
+		unless { target.DebuffPresent(colossus_smash_debuff) and BuffPresent(enrage_buff) and HeroicLeap() }
+			or { not BuffPresent(enrage_buff) and Spell(bloodthirst) }
+			or { TalentPoints(storm_bolt_talent) and BuffPresent(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) and Spell(storm_bolt) }
+			or { BuffStacks(raging_blow_buff) == 2 and target.DebuffPresent(colossus_smash_debuff) and RagingBlow() }
+			or { TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) and Spell(storm_bolt) }
+		{
+			#dragon_roar,if=enabled&(!debuff.colossus_smash.up&(buff.bloodbath.up|!talent.bloodbath.enabled))
+			if TalentPoints(dragon_roar_talent) and { not target.DebuffPresent(colossus_smash_debuff) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } } Spell(dragon_roar)
+
+			unless Spell(bloodthirst)
+				or { BuffPresent(bloodsurge_buff) and SpellCooldown(bloodthirst) <= 1 and SpellCooldown(bloodthirst) > 0.3 and Spell(wild_strike) }
+				or { not { target.DebuffPresent(colossus_smash_debuff) and Rage() >= 30 and BuffPresent(enrage_buff) } and SpellCooldown(bloodthirst) <= 1 }
+				or Spell(colossus_smash)
+				or { TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) and Spell(storm_bolt) }
+				or { { BuffStacks(raging_blow_buff) < 2 and { { { Rage() > 70 and not target.DebuffPresent(colossus_smash_debuff) } or target.DebuffPresent(colossus_smash_debuff) } or BuffPresent(trinket_proc_strength_buff) } or target.TimeToDie() < 5 } and Spell(execute usable=1) }
+				or { BuffStacks(raging_blow_buff) <= 1 and target.HealthPercent() >= 20 and Spell(berserker_rage) }
+				or { { BuffStacks(raging_blow_buff) == 2 or target.DebuffPresent(colossus_smash_debuff) or BuffRemains(raging_blow_buff) <= 3 } and RagingBlow() }
+			{
+				#bladestorm,if=enabled,interrupt_if=cooldown.bloodthirst.remains<1
+				if TalentPoints(bladestorm_talent) Spell(bladestorm)
+
+				unless { SpellCooldown(colossus_smash) >= 1 and RagingBlow() }
+					or { BuffPresent(bloodsurge_buff) and Spell(wild_strike) }
+				{
+					#shockwave,if=enabled
+					if TalentPoints(shockwave_talent) Spell(shockwave)
+				}
+			}
+		}
+	}
+}
+
+### Fury icons.
+
+AddIcon mastery=fury size=small checkboxon=opt_icons_left
+{
+	Spell(vigilance)
+	Spell(demoralizing_banner)
+	Spell(rallying_cry)
+}
+
+AddIcon mastery=fury size=small checkboxon=opt_icons_left
+{
+	if TalentPoints(impending_victory_talent) and HealthPercent() < 80 Spell(impending_victory usable=1)
+	if not TalentPoints(impending_victory_talent) and HealthPercent() < 80 Spell(victory_rush usable=1)
+	if TalentPoints(enraged_regeneration_talent) Spell(enraged_regeneration)
+}
+
+AddIcon mastery=fury help=shortcd
+{
+	if HasWeapon(main type=1h) FuryOneHandSingleTargetShortCdActions()
+	if HasWeapon(main type=2h) FuryTwoHandSingleTargetShortCdActions()
+}
+
+AddIcon mastery=fury help=main
+{
+	if InCombat(no) FuryPrecombatActions()
+	if HasWeapon(main type=1h) FuryOneHandSingleTargetActions()
+	if HasWeapon(main type=2h) FuryTwoHandSingleTargetActions()
+}
+
+AddIcon mastery=fury help=aoe checkboxon=opt_aoe
+{
+	if InCombat(no) FuryPrecombatActions()
+	#run_action_list,name=two_targets,if=active_enemies=2
+	if Enemies() <= 2 FuryTwoTargetsActions()
+	#run_action_list,name=three_targets,if=active_enemies=3
+	if Enemies() == 3 FuryThreeTargetsActions()
+	#run_action_list,name=aoe,if=active_enemies>3
+	if Enemies() > 3 FuryAoeActions()
 }

 AddIcon mastery=fury help=cd
 {
-	if {TalentPoints(avatar_talent) and {SpellCooldown(colossus_smash) <2 or target.DebuffRemains(colossus_smash) >=5 } } or {TalentPoints(bloodbath_talent) and {BuffPresent(bloodbath) and {target.DeadIn() >192 or target.HealthPercent() <20 } } } or target.DeadIn() <=12 Spell(recklessness)
-	if BuffPresent(recklessness) and TalentPoints(avatar_talent) Spell(avatar)
-	if BuffPresent(recklessness) Spell(skull_banner)
-	if {not TalentPoints(bloodbath_talent) and target.DebuffPresent(colossus_smash) } or {TalentPoints(bloodbath_talent) and BuffPresent(bloodbath) } UseItemActions()
+	Interrupt()
+	UseRacialInterruptActions()
+
+	if InCombat(no) FuryPrecombatCdActions()
+	FuryDefaultCdActions()
 }

-AddIcon mastery=fury size=small checkboxon=opt_icons_right {}
+AddIcon mastery=fury size=small checkboxon=opt_icons_right
+{
+	Spell(die_by_the_sword)
+	Spell(shield_wall)
+}

 AddIcon mastery=fury size=small checkboxon=opt_icons_right
 {
+	#shattering_throw,if=cooldown.colossus_smash.remains>5
+	if target.DebuffExpires(shattering_throw_debuff) and SpellCooldown(colossus_smash) > 5 Spell(shattering_throw)
+
 	UseItemActions()
 }

-### Protection icons.
+###
+### Protection
+###
+# Based on SimulationCraft profile "Warrior_Protection_T16H".
+#	class=warrior
+#	spec=protection
+#	talents=http://us.battle.net/wow/en/tool/talent-calculator#Zb!.00110
+#	glyphs=unending_rage/hold_the_line/heavy_repercussions

-AddIcon mastery=protection size=small checkboxon=opt_icons_left {}
-AddIcon mastery=protection size=small checkboxon=opt_icons_left {}
+AddFunction ProtectionDpsCdsActions
+{
+	#avatar,if=enabled
+	if TalentPoints(avatar_talent) Spell(avatar)
+	#bloodbath,if=enabled
+	if TalentPoints(bloodbath_talent) Spell(bloodbath)
+	#blood_fury
+	Spell(blood_fury)
+	#berserking
+	Spell(berserking)
+	#arcane_torrent
+	Spell(arcane_torrent)
+	#dragon_roar,if=enabled
+	if TalentPoints(dragon_roar_talent) Spell(dragon_roar)
+	#shattering_throw
+	Spell(shattering_throw)
+	#skull_banner
+	Spell(skull_banner)
+	#recklessness
+	Spell(recklessness)
+	#storm_bolt,if=enabled
+	if TalentPoints(storm_bolt_talent) Spell(storm_bolt)
+	#shockwave,if=enabled
+	if TalentPoints(shockwave_talent) Spell(shockwave)
+	#bladestorm,if=enabled
+	if TalentPoints(bladestorm_talent) Spell(bladestorm)
+}

-AddIcon mastery=protection help=offgcd
+AddFunction ProtectionNormalRotationActions
 {
-	if target.IsInterruptible() Spell(pummel)
-	if {BuffPresent(ultimatum) and target.HealthPercent() >=20 } Spell(heroic_strike)
-	if Rage() <90 Spell(berserker_rage)
-	if BuffExpires(shield_block_aura) Spell(shield_block)
-	if BuffExpires(shield_barrier) and Rage() >80 Spell(shield_barrier)
+	#shield_slam
+	Spell(shield_slam)
+	#revenge
+	Spell(revenge)
+	#battle_shout,if=rage<=rage.max-20
+	if Rage() <= MaxRage() -20 Spell(battle_shout)
+	#thunder_clap,if=glyph.resonating_power.enabled|target.debuff.weakened_blows.down
+	if Glyph(glyph_of_resonating_power) or target.DebuffExpires(weakened_blows_debuff) Spell(thunder_clap)
+	#demoralizing_shout
 	Spell(demoralizing_shout)
+	#impending_victory,if=enabled
+	if TalentPoints(impending_victory_talent) Spell(impending_victory)
+	#victory_rush,if=!talent.impending_victory.enabled
+	if not TalentPoints(impending_victory_talent) Spell(victory_rush)
+	#devastate
+	Spell(devastate)
+}
+
+AddFunction ProtectionDefaultActions
+{
+	#auto_attack
+	#berserker_rage,if=buff.enrage.down&rage<=rage.max-10
+	if BuffExpires(enrage_buff) and Rage() <= MaxRage() -10 Spell(berserker_rage)
+}
+
+AddFunction ProtectionDefaultShortCdActions
+{
+	#auto_attack
+	#heroic_strike,if=buff.ultimatum.up|buff.glyph_incite.up
+	if BuffPresent(ultimatum_buff) or BuffPresent(glyph_incite_buff) Spell(heroic_strike)
+	#shield_block
+	Spell(shield_block)
+	#shield_barrier,if=incoming_damage_1500ms>health.max*0.3|rage>rage.max-20
+	if IncomingDamage(1.500) > MaxHealth() * 0.3 or Rage() > MaxRage() -20 Spell(shield_barrier)
+}
+
+AddFunction ProtectionDefaultCdActions
+{
+	#mountains_potion,if=incoming_damage_2500ms>health.max*0.6&(buff.shield_wall.down&buff.last_stand.down)
+	if IncomingDamage(2.500) > MaxHealth() * 0.6 and { BuffExpires(shield_wall_buff) and BuffExpires(last_stand_buff) } Spell(mountains_potion)
+	#shield_wall,if=incoming_damage_2500ms>health.max*0.6
+	if IncomingDamage(2.500) > MaxHealth() * 0.6 Spell(shield_wall)
+	#run_action_list,name=dps_cds,if=buff.vengeance.value>health.max*0.20
+	if BuffAmount(vengeance_buff) > MaxHealth() * 0.2 ProtectionDpsCdsActions()
+}
+
+AddFunction ProtectionAoeActions
+{
+	if BuffPresent(ultimatum_buff) or BuffPresent(glyph_incite_buff) Spell(cleave)
+	ProtectionDefaultActions()
+	Spell(thunder_clap)
+	ProtectionNormalRotationActions()
+}
+
+AddFunction ProtectionPrecombatActions
+{
+	#flask,type=earth
+	#food,type=chun_tian_spring_rolls
+	#snapshot_stats
+	#stance,choose=defensive
+	if not Stance(warrior_defensive_stance) Spell(defensive_stance)
+	#battle_shout
+	Spell(battle_shout)
+}
+
+### Protection icons.
+
+AddIcon mastery=protection size=small checkboxon=opt_icons_left
+{
+	Spell(vigilance)
+	Spell(demoralizing_banner)
+	Spell(rallying_cry)
+}
+
+AddIcon mastery=protection size=small checkboxon=opt_icons_left
+{
+	if TalentPoints(impending_victory_talent) and HealthPercent() < 80 Spell(impending_victory usable=1)
+	if not TalentPoints(impending_victory_talent) and HealthPercent() < 80 Spell(victory_rush usable=1)
+	if TalentPoints(enraged_regeneration_talent) Spell(enraged_regeneration)
+}
+
+AddIcon mastery=protection help=shortcd
+{
+	ProtectionDefaultShortCdActions()
 }

 AddIcon mastery=protection help=main
 {
-	if not InCombat()
-	{
-		unless Stance(2) Spell(defensive_stance)
-	}
-	if Rage() <80 Spell(shield_slam)
-	if Rage() <85 Spell(revenge)
-	if Rage() <90 Spell(battle_shout)
-	if target.DebuffExpires(weakened_blows) Spell(thunder_clap)
-	if target.HealthPercent(less 20) Spell(execute)
-	Spell(devastate)
+	if InCombat(no) ProtectionPrecombatActions()
+	ProtectionDefaultActions()
+	ProtectionNormalRotationActions()
 }

 AddIcon mastery=protection help=aoe checkboxon=opt_aoe
 {
-	Spell(dragon_roar)
-	Spell(shockwave)
-	Spell(thunder_clap)
-	if BuffPresent(ultimatum) Spell(cleave)
-	if Rage() >=90 Spell(cleave)
-	Spell(shield_slam)
+	if InCombat(no) ProtectionPrecombatActions()
+	ProtectionAoeActions()
 }

 AddIcon mastery=protection help=cd
 {
-	if Health() <130000 Spell(last_stand)
-	if TalentPoints(avatar_talent) Spell(avatar)
-	Spell(recklessness)
-	if BuffExpires(shield_block_aura) Spell(shield_wall)
-	UseItemActions()
+	Interrupt()
+	UseRacialInterruptActions()
+	ProtectionDefaultCdActions()
 }

-AddIcon mastery=protection size=small checkboxon=opt_icons_right {}
+AddIcon mastery=protection size=small checkboxon=opt_icons_right
+{
+	Spell(die_by_the_sword)
+	Spell(shield_wall)
+}

 AddIcon mastery=protection size=small checkboxon=opt_icons_right
 {
+	#shattering_throw
+	if target.DebuffExpires(shattering_throw_debuff) Spell(shattering_throw)
+
 	UseItemActions()
 }
 ]]
diff --git a/scripts/ovale_warrior_spells.lua b/scripts/ovale_warrior_spells.lua
index 7c1bd78..bc8517f 100644
--- a/scripts/ovale_warrior_spells.lua
+++ b/scripts/ovale_warrior_spells.lua
@@ -3,140 +3,301 @@ local OvaleScripts = Ovale.OvaleScripts

 do
 	local name = "ovale_warrior_spells"
-	local desc = "[5.2] Ovale: Warrior spells"
+	local desc = "[5.4.7] Ovale: Warrior spells"
 	local code = [[
 # Warrior spells and functions.

 Define(avatar 107574)
-	SpellInfo(avatar duration=24 cd=180)
-	SpellAddBuff(avatar avatar=1)
+	SpellInfo(avatar cd=180)
+	SpellInfo(avatar buff_cdr=cooldown_reduction_strength_buff mastery=arms)
+	SpellInfo(avatar buff_cdr=cooldown_reduction_strength_buff mastery=fury)
 Define(avatar_talent 16)
+Define(bastion_of_defense 84608)
 Define(battle_shout 6673)
-	SpellInfo(battle_shout duration=300 cd=60)
-	SpellAddBuff(battle_shout battle_shout=1)
+	SpellInfo(battle_shout cd=60 rage=-20)
+	SpellInfo(battle_shout cd=30 rage=-10 glyph=glyph_of_hoarse_voice)
 Define(battle_stance 2457)
-	SpellInfo(battle_stance cd=3)
+	SpellInfo(battle_stance cd=1.5)
 Define(berserker_rage 18499)
-	SpellInfo(berserker_rage duration=6 cd=30)
-	SpellAddBuff(berserker_rage berserker_rage=1)
+	SpellInfo(berserker_rage cd=30 rage=-10)
+Define(berserker_stance 2458)
+	SpellInfo(berserker_stance cd=1.5)
 Define(bladestorm 46924)
-	SpellInfo(bladestorm duration=6 cd=90)
-	SpellAddBuff(bladestorm bladestorm=1)
-Define(bloodbath 113344)
-	SpellInfo(bloodbath duration=6 tick=1)
-	SpellAddTargetDebuff(bloodbath bloodbath=1)
+	SpellInfo(bladestorm cd=60)
+	SpellInfo(bladestorm buff_cdr=cooldown_reduction_strength_buff mastery=arms)
+	SpellInfo(bladestorm buff_cdr=cooldown_reduction_strength_buff mastery=fury)
+Define(bladestorm_talent 10)
+Define(blood_and_thunder 84615)
+Define(bloodbath 12292)
+	SpellInfo(bloodbath cd=60)
+	SpellInfo(bloodbath buff_cdr=cooldown_reduction_strength_buff mastery=arms)
+	SpellInfo(bloodbath buff_cdr=cooldown_reduction_strength_buff mastery=fury)
+	SpellAddBuff(bloodbath bloodbath_buff=1)
+Define(bloodbath_buff 12292)
+	SpellInfo(bloodbath_buff duration=12)
 Define(bloodbath_talent 17)
-Define(bloodsurge 46916)
-	SpellInfo(bloodsurge duration=10)
+Define(bloodsurge 46915)
+Define(bloodsurge_buff 46916)
+	SpellInfo(bloodsurge_buff duration=15 maxstacks=3)
 Define(bloodthirst 23881)
-	SpellInfo(bloodthirst rage=-10 cd=4.5)
+	SpellInfo(bloodthirst cd=4.5 rage=-10)
+	SpellAddTargetDebuff(bloodthirst deep_wounds_debuff=1 if_spell=deep_wounds)
+Define(charge 100)
+	SpellInfo(charge cd=20 rage=20)
+	SpellInfo(charge cd=12 talent=juggernaut_talent)
+	SpellInfo(charge rage=35 glyph=glyph_of_bull_rush)
 Define(cleave 845)
-	SpellInfo(cleave rage=30 cd=1.5)
+	SpellInfo(cleave cd=1.5 rage=30)
+	SpellInfo(cleave buff_rage_none=cleave_heroic_strike_no_rage_buff)
+	SpellAddBuff(cleave cleaving_buff=0)
+	SpellAddBuff(cleave glyph_incite_buff=-1 glyph=glyph_of_incite)
+	SpellAddBuff(cleave ultimatum_buff=0 if_spell=ultimatum)
+Define(cleaving_buff 65156)
+	SpellInfo(cleaving_buff duration=6)
+SpellList(cleave_heroic_strike_no_rage_buff cleaving_buff ultimatum_buff)
 Define(colossus_smash 86346)
-	SpellInfo(colossus_smash duration=6.5 cd=20)
-	SpellAddTargetDebuff(colossus_smash colossus_smash=1)
+	SpellInfo(colossus_smash cd=20)
+	SpellAddTargetDebuff(colossus_smash colossus_smash_debuff=1)
+	SpellAddTargetDebuff(colossus_smash weakened_armor_debuff=1 glyph=glyph_of_colossus_smash)
+Define(colossus_smash_debuff 86346)
+	SpellInfo(colossus_smash duration=6)
+Define(commanding_shout 469)
+	SpellInfo(commanding_shout cd=60 rage=-20)
+	SpellInfo(commanding_shout cd=30 rage=-10 glyph=glyph_of_hoarse_voice)
+Define(death_sentence_buff 144442)	# tier16_4pc_melee_buff
+	SpellInfo(death_sentence_buff duration=12)
+Define(deep_wounds 115767)
+Define(deep_wounds_debuff 115767)
+	SpellInfo(deep_wounds_debuff duration=15 tick=3)
 Define(defensive_stance 71)
-	SpellInfo(defensive_stance cd=3)
+	SpellInfo(defensive_stance cd=1.5)
+Define(demoralizing_banner 114203)
+	SpellInfo(demoralizing_banner cd=180)
 Define(demoralizing_shout 1160)
-	SpellInfo(demoralizing_shout duration=10 cd=60)
-	SpellAddTargetDebuff(demoralizing_shout demoralizing_shout=1)
+	SpellInfo(demoralizing_shout cd=60)
+	SpellInfo(demoralizing_shout buff_cdr=cooldown_reduction_tank_buff)
 Define(devastate 20243)
+	SpellAddTargetDebuff(devastate weakened_armor_debuff=1)
+	SpellAddTargetDebuff(devastate deep_wounds_debuff=1 if_spell=deep_wounds)
+Define(die_by_the_sword 118038)
+	SpellInfo(die_by_the_sword cd=120)
+Define(disrupting_shout 102060)
+	SpellInfo(disrupting_shout cd=40)
+Define(disrupting_shout_talent 9)
 Define(dragon_roar 118000)
 	SpellInfo(dragon_roar cd=60)
+	SpellInfo(dragon_roar buff_cdr=cooldown_reduction_strength_buff mastery=arms)
+	SpellInfo(dragon_roar buff_cdr=cooldown_reduction_strength_buff mastery=fury)
 Define(dragon_roar_talent 12)
-Define(enrage 5229)
-	SpellInfo(enrage duration=10 rage=-20 cd=60)
-	SpellAddBuff(enrage enrage=1)
+Define(enrage_buff 12880)
+	SpellInfo(enrage_buff duration=6)
+Define(enraged_regeneration 55694)
+	SpellInfo(enraged_regeneration cd=60)
+Define(enraged_regeneration_talent 4)
 Define(execute 5308)
 	SpellInfo(execute rage=30)
+	SpellInfo(execute buff_rage_none=death_sentence_buff itemset=T16_melee itemcount=4)
+	SpellAddBuff(execute sudden_execute_buff=1 if_spell=sudden_death)
+Define(glyph_of_bull_rush 94372)
+Define(glyph_of_colossus_smash 89003)
+Define(glyph_of_death_from_above 63325)
+Define(glyph_incite_buff 122016)
+	SpellInfo(glyph_incite_buff duration=10 maxstacks=3)
+Define(glyph_of_furious_sundering 63326)
+Define(glyph_of_gag_order 58357)
+Define(glyph_of_hoarse_voice 58387)
+Define(glyph_of_incite 122013)
+Define(glyph_of_recklessness 94374)
+Define(glyph_of_resonating_power 58356)
+Define(glyph_of_rude_interruption 58372)
+Define(glyph_of_shield_wall 63329)
+Define(glyph_of_spell_reflection 63328)
 Define(heroic_leap 6544)
-	SpellInfo(heroic_leap duration=1 cd=45)
+	SpellInfo(heroic_leap cd=45)
+	SpellInfo(heroic_leap addcd=-15 glyph=glyph_of_death_from_above)
+	SpellInfo(heroic_leap buff_cdr=cooldown_reduction_strength_buff mastery=arms)
+	SpellInfo(heroic_leap buff_cdr=cooldown_reduction_strength_buff mastery=fury)
+	SpellInfo(heroic_leap buff_cdr=cooldown_reduction_tank_buff mastery=protection)
 Define(heroic_strike 78)
 	SpellInfo(heroic_strike rage=30 cd=1.5)
+	SpellInfo(heroic_strike buff_rage_none=cleave_heroic_strike_no_rage_buff)
+	SpellAddBuff(heroic_strike cleaving_buff=0)
+	SpellAddBuff(heroic_strike glyph_incite_buff=-1 glyph=glyph_of_incite)
+	SpellAddBuff(heroic_strike ultimatum_buff=0 if_spell=ultimatum)
 Define(heroic_throw 57755)
 	SpellInfo(heroic_throw cd=30)
 Define(impending_victory 103840)
 	SpellInfo(impending_victory rage=10 cd=30)
+	SpellAddBuff(impending_victory victorious_buff=0)
+	SpellAddBuff(impending_victory tier15_2pc_tank_buff=0 itemset=T15_tank itemcount=2)
 Define(impending_victory_talent 6)
+Define(juggernaut_talent 1)
 Define(last_stand 12975)
-	SpellInfo(last_stand duration=20 cd=180)
-	SpellAddBuff(last_stand last_stand=1)
-Define(meat_cleaver 85739)
-	SpellInfo(meat_cleaver duration=10)
-	SpellAddBuff(meat_cleaver meat_cleaver=1)
+	SpellInfo(last_stand cd=180)
+	SpellInfo(last_stand addcd=-60 itemset=T14_tank itemcount=2)
+	SpellInfo(last_stand buff_cdr=cooldown_reduction_tank_buff)
+	SpellAddBuff(last_stand last_stand_buff=1)
+Define(last_stand_buff 12975)
+	SpellInfo(last_stand_buff duration=20)
+Define(meat_cleaver 12950)
+Define(meat_cleaver_buff 85739)
+	SpellInfo(meat_cleaver_buff duration=10 maxstacks=3)
 Define(mortal_strike 12294)
-	SpellInfo(mortal_strike duration=10 rage=-10 cd=6)
-	SpellAddTargetDebuff(mortal_strike mortal_wounds=1)
+	SpellInfo(mortal_strike cd=6 rage=-10)
+	SpellAddBuff(mortal_strike taste_for_blood_buff=2 if_spell=taste_for_blood)
+	SpellAddTargetDebuff(mortal_strike deep_wounds_debuff=1 if_spell=deep_wounds)
 Define(overpower 7384)
 	SpellInfo(overpower rage=10)
-	SpellAddBuff(overpower taste_for_blood=-1)
+	SpellInfo(overpower buff_rage_none=sudden_execute_buff)
+	SpellAddBuff(overpower sudden_execute_buff=0)
+	SpellAddBuff(overpower taste_for_blood_buff=-1 if_spell=taste_for_blood)
 Define(pummel 6552)
-	SpellInfo(pummel duration=4 cd=15)
+	SpellInfo(pummel cd=15)
 Define(raging_blow 85288)
-	SpellInfo(raging_blow rage=10)
-	SpellAddBuff(raging_blow raging_blow_aura=-1)
-Define(raging_blow_aura 131116)
-	SpellInfo(raging_blow_aura duration=12)
-	SpellAddBuff(raging_blow_aura raging_blow_aura=1)
+	SpellInfo(raging_blow rage=10)
+	SpellAddBuff(raging_blow raging_blow_buff=-1)
+	SpellAddBuff(raging_blow meat_cleaver_buff=0 if_spell=meat_cleaver)
+Define(raging_blow_buff 131116)
+	SpellInfo(raging_blow_aura duration=12 maxstacks=2)
+Define(rallying_cry 97462)
+	SpellInfo(rallying_cry cd=180)
 Define(recklessness 1719)
-	SpellInfo(recklessness duration=12 cd=180)
-	SpellAddBuff(recklessness recklessness=1)
+	SpellInfo(recklessness cd=180)
+	SpellInfo(recklessness buff_cdr=cooldown_reduction_strength_buff mastery=arms)
+	SpellInfo(recklessness buff_cdr=cooldown_reduction_strength_buff mastery=fury)
+	SpellInfo(recklessness buff_cdr=cooldown_reduction_tank_buff mastery=protection)
+	SpellAddBuff(recklessness recklessness_buff=1)
+Define(recklessness_buff 1719)
+	SpellInfo(recklessness_buff duration=12)
+	SpellInfo(recklessness_buff addduration=6 glyph=glyph_of_recklessness)
 Define(revenge 6572)
-	SpellInfo(revenge rage=-15 cd=9)
+	SpellInfo(revenge rage=-20 cd=9)
+	SpellInfo(revenge rage=-20 if_stance=warrior_defensive_stance)
+Define(safeguard 114029)
+	SpellInfo(safeguard cd=30)
+Define(safeguard_talent 14)
+Define(seasoned_soldier 12712)
+Define(shattering_throw 64382)
+	SpellInfo(shattering_throw cd=300)
+	SpellAddTargetDebuff(shattering_throw shattering_throw_debuff=1)
+Define(shattering_throw_debuff 64382)
+	SpellInfo(shattering_throw_debuff duration=10)
 Define(shield_barrier 112048)
-	SpellInfo(shield_barrier duration=6 rage=20 cd=1.5)
-	SpellAddBuff(shield_barrier shield_barrier=1)
+	SpellInfo(shield_barrier cd=1.5 rage=finisher min_rage=20 max_rage=60)
 Define(shield_block 2565)
-	SpellInfo(shield_block rage=60 cd=1.5)
-	SpellAddTargetDebuff(shield_block shield_block_aura=1)
-Define(shield_block_aura 132404)
-	SpellInfo(shield_block_aura duration=6)
-	SpellAddBuff(shield_block_aura shield_block_aura=1)
+	SpellInfo(shield_block cd=1.5 rage=60)
+	SpellInfo(shield_block rage=55 itemset=T14_tank itemcount=4)
 Define(shield_slam 23922)
-	SpellInfo(shield_slam rage=-20 cd=6)
+	SpellInfo(shield_slam cd=6)
+	SpellInfo(shield_slam rage=-20 if_stance=warrior_defensive_stance)
+	SpellInfo(shield_slam buff_rage=sword_and_board_buff buff_rage_amount=-5 if_spell=sword_and_board)
+	SpellAddBuff(shield_slam sword_and_board_buff=0 if_spell=sword_and_board)
 Define(shield_wall 871)
-	SpellInfo(shield_wall duration=12 cd=300)
-	SpellAddBuff(shield_wall shield_wall=1)
+	SpellInfo(shield_wall cd=300)
+	SpellInfo(shield_wall addcd=120 glyph=glyph_of_shield_wall)
+	SpellInfo(shield_wall addcd=-60 if_spell=bastion_of_defense)
+	SpellAddBuff(shield_wall shield_wall_buff=1)
+Define(shield_wall_buff 871)
+	SpellInfo(shield_wall duration=12)
+	SpellInfo(shield_wall buff_cdr=cooldown_reduction_strength_buff mastery=arms)
+	SpellInfo(shield_wall buff_cdr=cooldown_reduction_strength_buff mastery=fury)
+	SpellInfo(shield_wall buff_cdr=cooldown_reduction_tank_buff mastery=protection)
 Define(shockwave 46968)
 	SpellInfo(shockwave cd=40)
-	SpellAddBuff(shockwave shockwave=1)
+	SpellInfo(shockwave buff_cdr=cooldown_reduction_strength_buff mastery=arms)
+	SpellInfo(shockwave buff_cdr=cooldown_reduction_strength_buff mastery=fury)
 Define(shockwave_talent 11)
 Define(skull_banner 114207)
-	SpellInfo(skull_banner duration=10 cd=180)
+	SpellInfo(skull_banner cd=180)
+	SpellAddBuff(skull_banner skull_banner_buff=1)
+Define(skull_banner_buff 114206)
+	SpellInfo(skull_banner_buff duration=10)
 Define(slam 1464)
-	SpellInfo(slam rage=20)
+	SpellInfo(slam rage=25)
+Define(spell_reflection 23920)
+	SpellInfo(spell_reflection cd=25)
+	SpellInfo(spell_reflection addcd=-5 glyph=glyph_of_spell_reflection)
 Define(storm_bolt 107570)
 	SpellInfo(storm_bolt cd=30)
-	SpellAddBuff(storm_bolt storm_bolt=1)
+	SpellInfo(storm_bolt buff_cdr=cooldown_reduction_strength_buff mastery=arms)
+	SpellInfo(storm_bolt buff_cdr=cooldown_reduction_strength_buff mastery=fury)
 Define(storm_bolt_talent 18)
-Define(sudden_execute 139958)
-	SpellInfo(sudden_execute duration=10)
-	SpellAddBuff(sudden_execute sudden_execute=1)
+Define(sudden_death 29725)
+Define(sudden_execute_buff 139958)
+	SpellInfo(sudden_execute_buff duration=10)
 Define(sunder_armor 7386)
-	SpellInfo(sunder_armor rage=15)
-	SpellAddTargetDebuff(sunder_armor weakened_armor=1)
+	SpellInfo(sunder_armor rage=15 glyph=!glyph_of_furious_sundering)
+	SpellAddTargetDebuff(sunder_armor weakened_armor_debuff=1)
 Define(sweeping_strikes 12328)
-	SpellInfo(sweeping_strikes duration=10 rage=30 cd=10)
-	SpellAddBuff(sweeping_strikes sweeping_strikes=1)
+	SpellInfo(sweeping_strikes cd=10 rage=30)
+	SpellAddBuff(sweeping_strikes sweeping_strikes_buff=1)
+Define(sweeping_strikes_buff 12328)
+	SpellInfo(sweeping_strikes_buff duration=10)
+Define(sword_and_board 46953)
+Define(sword_and_board_buff 50227)
+	SpellInfo(sword_and_board_buff duration=5)
 Define(taste_for_blood 56636)
+Define(taste_for_blood_buff 60503)
+	SpellInfo(taste_for_blood_buff duration=12 maxstacks=5)
 Define(thunder_clap 6343)
-	SpellInfo(thunder_clap rage=20 cd=6)
-	SpellAddTargetDebuff(thunder_clap weakened_blows=1)
-Define(ultimatum 122510)
-	SpellInfo(ultimatum duration=10)
-	SpellAddBuff(ultimatum ultimatum=1)
-Define(weakened_armor 113746)
-	SpellInfo(weakened_armor duration=30)
-	SpellAddBuff(weakened_armor weakened_armor=1)
-Define(weakened_blows 115798)
-	SpellInfo(weakened_blows duration=30)
-	SpellAddBuff(weakened_blows weakened_blows=1)
+	SpellInfo(thunder_clap cd=6 rage=20)
+	SpellInfo(thunder_clap addcd=3 glyph=glyph_of_resonating_power)
+	SpellInfo(thunder_clap rage=10 if_spell=seasoned_soldier)
+	SpellInfo(thunder_clap rage=0 if_spell=unwavering_sentinel)
+	SpellAddTargetDebuff(thunder_clap weakened_blows_debuff=1)
+	SpellAddTargetDebuff(thunder_clap deep_wounds_debuff=1 if_spell=blood_and_thunder)
+Define(tier15_2pc_tank_buff 138279)
+	SpellInfo(tier15_2pc_tank_buff duration=15)
+Define(ultimatum 122509)
+Define(ultimatum_buff 122510)
+	SpellInfo(ultimatum_buff duration=10)
+Define(unwavering_sentinel 29144)
+Define(vengeance_buff 132365)
+	SpellInfo(vengeance_buff duration=20)
+Define(victorious_buff 32216)
+	SpellInfo(victorious_buff duration=20)
+Define(victory_rush 34428)
+	SpellAddBuff(victory_rush victorious_buff=0)
+	SpellAddBuff(victory_rush tier15_2pc_tank_buff=0 itemset=T15_tank itemcount=2)
+Define(vigilance 114030)
+	SpellInfo(vigilance cd=120)
+Define(vigilance_talent 15)
+Define(weakened_armor_debuff 113746)
+	SpellInfo(weakened_armor_debuff duration=30 maxstacks=3)
+Define(weakened_blows_debuff 115798)
+	SpellInfo(weakened_blows_debuff duration=30)
+Define(wild_strike 100130)
+	SpellInfo(wild_strike rage=30)
+	SpellInfo(wild_strike buff_rage_none=bloodsurge_buff if_spell=bloodsurge)
+	SpellAddBuff(wild_strike bloodsurge_buff=-1 if_spell=bloodsurge)
 Define(whirlwind 1680)
 	SpellInfo(whirlwind rage=30)
+	SpellInfo(whirlwind rage=20 if_spell=seasoned_soldier)
 Define(wild_strike 100130)
 	SpellInfo(wild_strike rage=30)
-	SpellAddBuff(wild_strike bloodsurge=-1)
-	SpellAddTargetDebuff(wild_strike wild_strike=1)
+	SpellInfo(wild_strike buff_rage_none=bloodsurge_buff if_spell=bloodsurge)
+	SpellAddBuff(wild_strike bloodsurge_buff=-1)
+
+AddFunction Interrupt
+{
+	if target.IsFriend(no) and target.IsInterruptible()
+	{
+		if target.InRange(pummel) Spell(pummel)
+		if Glyph(glyph_of_gag_order) and target.InRange(heroic_throw) Spell(heroic_throw)
+		Spell(disrupting_shout)
+	}
+}
+
+AddCheckBox(opt_heroic_leap_dps SpellName(heroic_leap) mastery=!protection)
+AddFunction HeroicLeap
+{
+	if CheckBoxOn(opt_heroic_leap_dps) Spell(heroic_leap)
+}
+
+AddFunction RagingBlow
+{
+	if BuffPresent(raging_blow_buff) Spell(raging_blow)
+}
 ]]

 	OvaleScripts:RegisterScript("WARRIOR", name, desc, code, "include")
diff --git a/scripts/simulationcraft_warrior_arms_t16h.lua b/scripts/simulationcraft_warrior_arms_t16h.lua
index dd23396..ae4b21b 100644
--- a/scripts/simulationcraft_warrior_arms_t16h.lua
+++ b/scripts/simulationcraft_warrior_arms_t16h.lua
@@ -32,7 +32,7 @@ AddFunction ArmsAoeActions
 	#mortal_strike,if=active_enemies=2|rage<50
 	if Enemies() == 2 or Rage() < 50 Spell(mortal_strike)
 	#execute,if=buff.sudden_execute.down&active_enemies=2
-	if BuffExpires(sudden_execute_buff) and Enemies() == 2 Spell(execute)
+	if BuffExpires(sudden_execute_buff) and Enemies() == 2 Spell(execute usable=1)
 	#slam,if=buff.sweeping_strikes.up&debuff.colossus_smash.up
 	if BuffPresent(sweeping_strikes_buff) and target.DebuffPresent(colossus_smash_debuff) Spell(slam)
 	#overpower,if=active_enemies=2
@@ -60,13 +60,13 @@ AddFunction ArmsSingleTargetActions
 	#dragon_roar,if=enabled&debuff.colossus_smash.down
 	if TalentPoints(dragon_roar_talent) and target.DebuffExpires(colossus_smash_debuff) Spell(dragon_roar)
 	#execute,if=buff.sudden_execute.down|buff.taste_for_blood.down|rage>90|target.time_to_die<12
-	if BuffExpires(sudden_execute_buff) or BuffExpires(taste_for_blood_buff) or Rage() > 90 or target.TimeToDie() < 12 Spell(execute)
+	if BuffExpires(sudden_execute_buff) or BuffExpires(taste_for_blood_buff) or Rage() > 90 or target.TimeToDie() < 12 Spell(execute usable=1)
 	#slam,if=target.health.pct>=20&(trinket.stacking_stat.crit.stack>=10|buff.recklessness.up)
 	if target.HealthPercent() >= 20 and { BuffStacks(trinket_stacking_stat_crit_buff) >= 10 or BuffPresent(recklessness_buff) } Spell(slam)
 	#overpower,if=target.health.pct>=20&rage<100|buff.sudden_execute.up
 	if target.HealthPercent() >= 20 and Rage() < 100 or BuffPresent(sudden_execute_buff) Spell(overpower)
 	#execute
-	Spell(execute)
+	Spell(execute usable=1)
 	#slam,if=target.health.pct>=20
 	if target.HealthPercent() >= 20 Spell(slam)
 	#heroic_throw
@@ -99,7 +99,7 @@ AddFunction ArmsDefaultActions
 	#berserker_rage,if=buff.enrage.remains<0.5
 	if BuffRemains(enrage_buff) < 0.5 Spell(berserker_rage)
 	#heroic_leap,if=debuff.colossus_smash.up
-	if target.DebuffPresent(colossus_smash_debuff) Spell(heroic_leap)
+	if target.DebuffPresent(colossus_smash_debuff) HeroicLeap()
 	#run_action_list,name=aoe,if=active_enemies>=2
 	if Enemies() >= 2 ArmsAoeActions()
 	#run_action_list,name=single_target,if=active_enemies<2
diff --git a/scripts/simulationcraft_warrior_fury_1h_t16h.lua b/scripts/simulationcraft_warrior_fury_1h_t16h.lua
index 2c64170..08896bd 100644
--- a/scripts/simulationcraft_warrior_fury_1h_t16h.lua
+++ b/scripts/simulationcraft_warrior_fury_1h_t16h.lua
@@ -24,11 +24,11 @@ AddFunction FurySingleTargetActions
 	#heroic_strike,if=((debuff.colossus_smash.up&rage>=40)&target.health.pct>=20)|rage>=100&buff.enrage.up
 	if { { target.DebuffPresent(colossus_smash_debuff) and Rage() >= 40 } and target.HealthPercent() >= 20 } or Rage() >= 100 and BuffPresent(enrage_buff) Spell(heroic_strike)
 	#heroic_leap,if=debuff.colossus_smash.up
-	if target.DebuffPresent(colossus_smash_debuff) Spell(heroic_leap)
+	if target.DebuffPresent(colossus_smash_debuff) HeroicLeap()
 	#storm_bolt,if=enabled&buff.cooldown_reduction.up&debuff.colossus_smash.up
 	if TalentPoints(storm_bolt_talent) and BuffPresent(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
 	#raging_blow,if=buff.raging_blow.stack=2&debuff.colossus_smash.up&target.health.pct>=20
-	if BuffStacks(raging_blow_buff) == 2 and target.DebuffPresent(colossus_smash_debuff) and target.HealthPercent() >= 20 Spell(raging_blow)
+	if BuffStacks(raging_blow_buff) == 2 and target.DebuffPresent(colossus_smash_debuff) and target.HealthPercent() >= 20 RagingBlow()
 	#storm_bolt,if=enabled&buff.cooldown_reduction.down&debuff.colossus_smash.up
 	if TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
 	#bloodthirst,if=!(target.health.pct<20&debuff.colossus_smash.up&rage>=30&buff.enrage.up)
@@ -44,15 +44,15 @@ AddFunction FurySingleTargetActions
 	#storm_bolt,if=enabled&buff.cooldown_reduction.down
 	if TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) Spell(storm_bolt)
 	#execute,if=debuff.colossus_smash.up|rage>70|target.time_to_die<12
-	if target.DebuffPresent(colossus_smash_debuff) or Rage() > 70 or target.TimeToDie() < 12 Spell(execute)
+	if target.DebuffPresent(colossus_smash_debuff) or Rage() > 70 or target.TimeToDie() < 12 Spell(execute usable=1)
 	#raging_blow,if=target.health.pct<20|buff.raging_blow.stack=2|(debuff.colossus_smash.up|(cooldown.bloodthirst.remains>=1&buff.raging_blow.remains<=3))
-	if target.HealthPercent() < 20 or BuffStacks(raging_blow_buff) == 2 or { target.DebuffPresent(colossus_smash_debuff) or { SpellCooldown(bloodthirst) >= 1 and BuffRemains(raging_blow_buff) <= 3 } } Spell(raging_blow)
+	if target.HealthPercent() < 20 or BuffStacks(raging_blow_buff) == 2 or { target.DebuffPresent(colossus_smash_debuff) or { SpellCooldown(bloodthirst) >= 1 and BuffRemains(raging_blow_buff) <= 3 } } RagingBlow()
 	#bladestorm,if=enabled
 	if TalentPoints(bladestorm_talent) Spell(bladestorm)
 	#wild_strike,if=buff.bloodsurge.up
 	if BuffPresent(bloodsurge_buff) Spell(wild_strike)
 	#raging_blow,if=cooldown.colossus_smash.remains>=3
-	if SpellCooldown(colossus_smash) >= 3 Spell(raging_blow)
+	if SpellCooldown(colossus_smash) >= 3 RagingBlow()
 	#shattering_throw,if=cooldown.colossus_smash.remains>5
 	if SpellCooldown(colossus_smash) > 5 Spell(shattering_throw)
 	#shockwave,if=enabled
@@ -122,7 +122,7 @@ AddFunction FuryTwoTargetsActions
 	#cleave,if=(rage>=60&debuff.colossus_smash.up)|rage>110
 	if { Rage() >= 60 and target.DebuffPresent(colossus_smash_debuff) } or Rage() > 110 Spell(cleave)
 	#heroic_leap,if=buff.enrage.up&(debuff.colossus_smash.up&buff.cooldown_reduction.up|!buff.cooldown_reduction.up)
-	if BuffPresent(enrage_buff) and { target.DebuffPresent(colossus_smash_debuff) and BuffPresent(cooldown_reduction_strength_buff) or not BuffPresent(cooldown_reduction_strength_buff) } Spell(heroic_leap)
+	if BuffPresent(enrage_buff) and { target.DebuffPresent(colossus_smash_debuff) and BuffPresent(cooldown_reduction_strength_buff) or not BuffPresent(cooldown_reduction_strength_buff) } HeroicLeap()
 	#bladestorm,if=enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)&(!talent.storm_bolt.enabled|(talent.storm_bolt.enabled&!debuff.colossus_smash.up))
 	if TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } and { not TalentPoints(storm_bolt_talent) or { TalentPoints(storm_bolt_talent) and not target.DebuffPresent(colossus_smash_debuff) } } Spell(bladestorm)
 	#dragon_roar,if=enabled&(!debuff.colossus_smash.up&(buff.bloodbath.up|!talent.bloodbath.enabled))
@@ -138,13 +138,13 @@ AddFunction FuryTwoTargetsActions
 	#wait,sec=cooldown.bloodthirst.remains,if=!(target.health.pct<20&debuff.colossus_smash.up&rage>=30&buff.enrage.up)&cooldown.bloodthirst.remains<=1
 	if not { target.HealthPercent() < 20 and target.DebuffPresent(colossus_smash_debuff) and Rage() >= 30 and BuffPresent(enrage_buff) } and SpellCooldown(bloodthirst) <= 1 wait Spell(bloodthirst)
 	#raging_blow,if=buff.meat_cleaver.up
-	if BuffPresent(meat_cleaver_buff) Spell(raging_blow)
+	if BuffPresent(meat_cleaver_buff) RagingBlow()
 	#whirlwind,if=!buff.meat_cleaver.up
 	if not BuffPresent(meat_cleaver_buff) Spell(whirlwind)
 	#shockwave,if=enabled
 	if TalentPoints(shockwave_talent) Spell(shockwave)
 	#execute
-	Spell(execute)
+	Spell(execute usable=1)
 	#battle_shout
 	Spell(battle_shout)
 	#heroic_throw
@@ -160,7 +160,7 @@ AddFunction FuryThreeTargetsActions
 	#cleave,if=(rage>=70&debuff.colossus_smash.up)|rage>90
 	if { Rage() >= 70 and target.DebuffPresent(colossus_smash_debuff) } or Rage() > 90 Spell(cleave)
 	#heroic_leap,if=buff.enrage.up&(debuff.colossus_smash.up&buff.cooldown_reduction.up|!buff.cooldown_reduction.up)
-	if BuffPresent(enrage_buff) and { target.DebuffPresent(colossus_smash_debuff) and BuffPresent(cooldown_reduction_strength_buff) or not BuffPresent(cooldown_reduction_strength_buff) } Spell(heroic_leap)
+	if BuffPresent(enrage_buff) and { target.DebuffPresent(colossus_smash_debuff) and BuffPresent(cooldown_reduction_strength_buff) or not BuffPresent(cooldown_reduction_strength_buff) } HeroicLeap()
 	#bladestorm,if=enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)
 	if TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } Spell(bladestorm)
 	#dragon_roar,if=enabled&!debuff.colossus_smash.up&(buff.bloodbath.up|!talent.bloodbath.enabled)
@@ -172,13 +172,13 @@ AddFunction FuryThreeTargetsActions
 	#storm_bolt,if=enabled&debuff.colossus_smash.up
 	if TalentPoints(storm_bolt_talent) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
 	#raging_blow,if=buff.meat_cleaver.stack=2
-	if BuffStacks(meat_cleaver_buff) == 2 Spell(raging_blow)
+	if BuffStacks(meat_cleaver_buff) == 2 RagingBlow()
 	#whirlwind
 	Spell(whirlwind)
 	#shockwave,if=enabled
 	if TalentPoints(shockwave_talent) Spell(shockwave)
 	#raging_blow
-	Spell(raging_blow)
+	RagingBlow()
 	#battle_shout
 	Spell(battle_shout)
 	#heroic_throw
@@ -194,13 +194,13 @@ AddFunction FuryAoeActions
 	#cleave,if=rage>90
 	if Rage() > 90 Spell(cleave)
 	#heroic_leap,if=buff.enrage.up
-	if BuffPresent(enrage_buff) Spell(heroic_leap)
+	if BuffPresent(enrage_buff) HeroicLeap()
 	#bladestorm,if=enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)
 	if TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } Spell(bladestorm)
 	#bloodthirst,cycle_targets=1,if=!dot.deep_wounds.ticking&buff.enrage.down
 	if not target.DebuffPresent(deep_wounds_debuff) and BuffExpires(enrage_buff) Spell(bloodthirst)
 	#raging_blow,if=buff.meat_cleaver.stack=3
-	if BuffStacks(meat_cleaver_buff) == 3 Spell(raging_blow)
+	if BuffStacks(meat_cleaver_buff) == 3 RagingBlow()
 	#whirlwind
 	Spell(whirlwind)
 	#dragon_roar,if=enabled&debuff.colossus_smash.down&(buff.bloodbath.up|!talent.bloodbath.enabled)
diff --git a/scripts/simulationcraft_warrior_fury_2h_t16h.lua b/scripts/simulationcraft_warrior_fury_2h_t16h.lua
index 95b5775..f97a858 100644
--- a/scripts/simulationcraft_warrior_fury_2h_t16h.lua
+++ b/scripts/simulationcraft_warrior_fury_2h_t16h.lua
@@ -24,13 +24,13 @@ AddFunction FurySingleTargetActions
 	#heroic_strike,if=(debuff.colossus_smash.up&rage>=40|rage>=100)&buff.enrage.up
 	if { target.DebuffPresent(colossus_smash_debuff) and Rage() >= 40 or Rage() >= 100 } and BuffPresent(enrage_buff) Spell(heroic_strike)
 	#heroic_leap,if=debuff.colossus_smash.up&buff.enrage.up
-	if target.DebuffPresent(colossus_smash_debuff) and BuffPresent(enrage_buff) Spell(heroic_leap)
+	if target.DebuffPresent(colossus_smash_debuff) and BuffPresent(enrage_buff) HeroicLeap()
 	#bloodthirst,if=!buff.enrage.up
 	if not BuffPresent(enrage_buff) Spell(bloodthirst)
 	#storm_bolt,if=enabled&buff.cooldown_reduction.up&debuff.colossus_smash.up
 	if TalentPoints(storm_bolt_talent) and BuffPresent(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
 	#raging_blow,if=buff.raging_blow.stack=2&debuff.colossus_smash.up
-	if BuffStacks(raging_blow_buff) == 2 and target.DebuffPresent(colossus_smash_debuff) Spell(raging_blow)
+	if BuffStacks(raging_blow_buff) == 2 and target.DebuffPresent(colossus_smash_debuff) RagingBlow()
 	#storm_bolt,if=enabled&buff.cooldown_reduction.down&debuff.colossus_smash.up
 	if TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
 	#dragon_roar,if=enabled&(!debuff.colossus_smash.up&(buff.bloodbath.up|!talent.bloodbath.enabled))
@@ -46,15 +46,15 @@ AddFunction FurySingleTargetActions
 	#storm_bolt,if=enabled&buff.cooldown_reduction.down
 	if TalentPoints(storm_bolt_talent) and BuffExpires(cooldown_reduction_strength_buff) Spell(storm_bolt)
 	#execute,if=buff.raging_blow.stack<2&(((rage>70&!debuff.colossus_smash.up)|debuff.colossus_smash.up)|trinket.proc.strength.up)|target.time_to_die<5
-	if BuffStacks(raging_blow_buff) < 2 and { { { Rage() > 70 and not target.DebuffPresent(colossus_smash_debuff) } or target.DebuffPresent(colossus_smash_debuff) } or BuffPresent(trinket_proc_strength_buff) } or target.TimeToDie() < 5 Spell(execute)
+	if BuffStacks(raging_blow_buff) < 2 and { { { Rage() > 70 and not target.DebuffPresent(colossus_smash_debuff) } or target.DebuffPresent(colossus_smash_debuff) } or BuffPresent(trinket_proc_strength_buff) } or target.TimeToDie() < 5 Spell(execute usable=1)
 	#berserker_rage,if=buff.raging_blow.stack<=1&target.health.pct>=20
 	if BuffStacks(raging_blow_buff) <= 1 and target.HealthPercent() >= 20 Spell(berserker_rage)
 	#raging_blow,if=buff.raging_blow.stack=2|debuff.colossus_smash.up|buff.raging_blow.remains<=3
-	if BuffStacks(raging_blow_buff) == 2 or target.DebuffPresent(colossus_smash_debuff) or BuffRemains(raging_blow_buff) <= 3 Spell(raging_blow)
+	if BuffStacks(raging_blow_buff) == 2 or target.DebuffPresent(colossus_smash_debuff) or BuffRemains(raging_blow_buff) <= 3 RagingBlow()
 	#bladestorm,if=enabled,interrupt_if=cooldown.bloodthirst.remains<1
 	if TalentPoints(bladestorm_talent) Spell(bladestorm)
 	#raging_blow,if=cooldown.colossus_smash.remains>=1
-	if SpellCooldown(colossus_smash) >= 1 Spell(raging_blow)
+	if SpellCooldown(colossus_smash) >= 1 RagingBlow()
 	#wild_strike,if=buff.bloodsurge.up
 	if BuffPresent(bloodsurge_buff) Spell(wild_strike)
 	#shattering_throw,if=cooldown.colossus_smash.remains>5
@@ -124,7 +124,7 @@ AddFunction FuryTwoTargetsActions
 	#cleave,if=(rage>=60&debuff.colossus_smash.up)|rage>110
 	if { Rage() >= 60 and target.DebuffPresent(colossus_smash_debuff) } or Rage() > 110 Spell(cleave)
 	#heroic_leap,if=buff.enrage.up&(debuff.colossus_smash.up&buff.cooldown_reduction.up|!buff.cooldown_reduction.up)
-	if BuffPresent(enrage_buff) and { target.DebuffPresent(colossus_smash_debuff) and BuffPresent(cooldown_reduction_strength_buff) or not BuffPresent(cooldown_reduction_strength_buff) } Spell(heroic_leap)
+	if BuffPresent(enrage_buff) and { target.DebuffPresent(colossus_smash_debuff) and BuffPresent(cooldown_reduction_strength_buff) or not BuffPresent(cooldown_reduction_strength_buff) } HeroicLeap()
 	#bladestorm,if=enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)&(!talent.storm_bolt.enabled|(talent.storm_bolt.enabled&!debuff.colossus_smash.up))
 	if TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } and { not TalentPoints(storm_bolt_talent) or { TalentPoints(storm_bolt_talent) and not target.DebuffPresent(colossus_smash_debuff) } } Spell(bladestorm)
 	#dragon_roar,if=enabled&(!debuff.colossus_smash.up&(buff.bloodbath.up|!talent.bloodbath.enabled))
@@ -140,13 +140,13 @@ AddFunction FuryTwoTargetsActions
 	#wait,sec=cooldown.bloodthirst.remains,if=!(target.health.pct<20&debuff.colossus_smash.up&rage>=30&buff.enrage.up)&cooldown.bloodthirst.remains<=1
 	if not { target.HealthPercent() < 20 and target.DebuffPresent(colossus_smash_debuff) and Rage() >= 30 and BuffPresent(enrage_buff) } and SpellCooldown(bloodthirst) <= 1 wait Spell(bloodthirst)
 	#raging_blow,if=buff.meat_cleaver.up
-	if BuffPresent(meat_cleaver_buff) Spell(raging_blow)
+	if BuffPresent(meat_cleaver_buff) RagingBlow()
 	#whirlwind,if=!buff.meat_cleaver.up
 	if not BuffPresent(meat_cleaver_buff) Spell(whirlwind)
 	#shockwave,if=enabled
 	if TalentPoints(shockwave_talent) Spell(shockwave)
 	#execute
-	Spell(execute)
+	Spell(execute usable=1)
 	#battle_shout
 	Spell(battle_shout)
 	#heroic_throw
@@ -162,7 +162,7 @@ AddFunction FuryThreeTargetsActions
 	#cleave,if=(rage>=70&debuff.colossus_smash.up)|rage>90
 	if { Rage() >= 70 and target.DebuffPresent(colossus_smash_debuff) } or Rage() > 90 Spell(cleave)
 	#heroic_leap,if=buff.enrage.up&(debuff.colossus_smash.up&buff.cooldown_reduction.up|!buff.cooldown_reduction.up)
-	if BuffPresent(enrage_buff) and { target.DebuffPresent(colossus_smash_debuff) and BuffPresent(cooldown_reduction_strength_buff) or not BuffPresent(cooldown_reduction_strength_buff) } Spell(heroic_leap)
+	if BuffPresent(enrage_buff) and { target.DebuffPresent(colossus_smash_debuff) and BuffPresent(cooldown_reduction_strength_buff) or not BuffPresent(cooldown_reduction_strength_buff) } HeroicLeap()
 	#bladestorm,if=enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)
 	if TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } Spell(bladestorm)
 	#dragon_roar,if=enabled&!debuff.colossus_smash.up&(buff.bloodbath.up|!talent.bloodbath.enabled)
@@ -174,13 +174,13 @@ AddFunction FuryThreeTargetsActions
 	#storm_bolt,if=enabled&debuff.colossus_smash.up
 	if TalentPoints(storm_bolt_talent) and target.DebuffPresent(colossus_smash_debuff) Spell(storm_bolt)
 	#raging_blow,if=buff.meat_cleaver.stack=2
-	if BuffStacks(meat_cleaver_buff) == 2 Spell(raging_blow)
+	if BuffStacks(meat_cleaver_buff) == 2 RagingBlow()
 	#whirlwind
 	Spell(whirlwind)
 	#shockwave,if=enabled
 	if TalentPoints(shockwave_talent) Spell(shockwave)
 	#raging_blow
-	Spell(raging_blow)
+	RagingBlow()
 	#battle_shout
 	Spell(battle_shout)
 	#heroic_throw
@@ -196,13 +196,13 @@ AddFunction FuryAoeActions
 	#cleave,if=rage>90
 	if Rage() > 90 Spell(cleave)
 	#heroic_leap,if=buff.enrage.up
-	if BuffPresent(enrage_buff) Spell(heroic_leap)
+	if BuffPresent(enrage_buff) HeroicLeap()
 	#bladestorm,if=enabled&(buff.bloodbath.up|!talent.bloodbath.enabled)
 	if TalentPoints(bladestorm_talent) and { BuffPresent(bloodbath_buff) or not TalentPoints(bloodbath_talent) } Spell(bladestorm)
 	#bloodthirst,cycle_targets=1,if=!dot.deep_wounds.ticking&buff.enrage.down
 	if not target.DebuffPresent(deep_wounds_debuff) and BuffExpires(enrage_buff) Spell(bloodthirst)
 	#raging_blow,if=buff.meat_cleaver.stack=3
-	if BuffStacks(meat_cleaver_buff) == 3 Spell(raging_blow)
+	if BuffStacks(meat_cleaver_buff) == 3 RagingBlow()
 	#whirlwind
 	Spell(whirlwind)
 	#dragon_roar,if=enabled&debuff.colossus_smash.down&(buff.bloodbath.up|!talent.bloodbath.enabled)