Quantcast

Druid: Fix feral script by implementing functions to compute damage.

Johnny C. Lam [04-25-14 - 20:56]
Druid: Fix feral script by implementing functions to compute damage.

git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1328 d5049fe3-3747-40f7-a4b5-f36d6801af5f
Filename
scripts/ovale_druid.lua
scripts/ovale_druid_spells.lua
diff --git a/scripts/ovale_druid.lua b/scripts/ovale_druid.lua
index c30548d..96e1627 100644
--- a/scripts/ovale_druid.lua
+++ b/scripts/ovale_druid.lua
@@ -6,7 +6,7 @@ do
 	local desc = "[5.4] Ovale: Balance, Feral"
 	local code = [[
 # Ovale druid script based on SimulationCraft.
-#	Last updated: 2014-04-18
+#	Last updated: 2014-04-24

 Include(ovale_items)
 Include(ovale_racials)
@@ -222,7 +222,7 @@ AddFunction FeralFillerActions
 	#ravage
 	Spell(ravage usable=1)
 	#rake,if=target.time_to_die-dot.rake.remains>3&action.rake.tick_damage*(dot.rake.ticks_remain+1)-dot.rake.tick_dmg*dot.rake.ticks_remain>action.mangle_cat.hit_damage
-	if target.TimeToDie() - target.DebuffRemains(rake_debuff) > 3 and Damage(rake_debuff) * { target.TicksRemain(rake_debuff) + 1 } - target.LastEstimatedDamage(rake_debuff) * target.TicksRemain(rake_debuff) > Damage(mangle_cat) Spell(rake)
+	if target.TimeToDie() - target.DebuffRemains(rake_debuff) > 3 and target.Damage(rake_debuff) * { target.TicksRemain(rake_debuff) + 1 } - target.LastEstimatedDamage(rake_debuff) * target.TicksRemain(rake_debuff) > target.Damage(mangle_cat) Spell(rake)
 	#shred,if=(buff.omen_of_clarity.react|buff.berserk.up|energy.regen>=15)&buff.king_of_the_jungle.down
 	if { BuffPresent(omen_of_clarity_buff) or BuffPresent(berserk_cat_buff) or EnergyRegen() >= 15 } and BuffExpires(king_of_the_jungle_buff) Spell(shred)
 	#mangle_cat,if=buff.king_of_the_jungle.down
@@ -245,7 +245,7 @@ AddFunction FeralBasicActions
 	#tigers_fury,if=energy<=35&!buff.omen_of_clarity.react
 	if Energy() <= 35 and not BuffPresent(omen_of_clarity_buff) Spell(tigers_fury)
 	#rip,if=combo_points>=5&target.health.pct<=25&action.rip.tick_damage%dot.rip.tick_dmg>=1.15
-	if ComboPoints() >= 5 and target.HealthPercent() <= 25 and Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 1.15 Spell(rip)
+	if ComboPoints() >= 5 and target.HealthPercent() <= 25 and target.Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 1.15 Spell(rip)
 	#ferocious_bite,if=combo_points>=5&target.health.pct<=25&dot.rip.ticking
 	if ComboPoints() >= 5 and target.HealthPercent() <= 25 and target.DebuffPresent(rip_debuff) Spell(ferocious_bite)
 	#rip,if=combo_points>=5&dot.rip.remains<2
@@ -253,7 +253,7 @@ AddFunction FeralBasicActions
 	#thrash_cat,if=buff.omen_of_clarity.react&dot.thrash_cat.remains<3
 	if BuffPresent(omen_of_clarity_buff) and target.DebuffRemains(thrash_cat_debuff) < 3 Spell(thrash_cat)
 	#rake,cycle_targets=1,if=dot.rake.remains<3|action.rake.tick_damage>dot.rake.tick_dmg
-	if target.DebuffRemains(rake_debuff) < 3 or Damage(rake_debuff) > target.LastEstimatedDamage(rake_debuff) Spell(rake)
+	if target.DebuffRemains(rake_debuff) < 3 or target.Damage(rake_debuff) > target.LastEstimatedDamage(rake_debuff) Spell(rake)
 	#pool_resource,for_next=1
 	#thrash_cat,if=dot.thrash_cat.remains<3&(dot.rip.remains>=8&buff.savage_roar.remains>=12|buff.berserk.up|combo_points>=5)
 	if Energy() >= EnergyCost(thrash_cat) and target.DebuffRemains(thrash_cat_debuff) < 3 and { target.DebuffRemains(rip_debuff) >= 8 and BuffRemains(savage_roar_buff) >= 12 or BuffPresent(berserk_cat_buff) or ComboPoints() >= 5 } wait Spell(thrash_cat)
@@ -295,7 +295,7 @@ AddFunction FeralBasicPredictiveActions
 	#tigers_fury,if=energy<=35&!buff.omen_of_clarity.react
 	if Energy() <= 35 and not BuffPresent(omen_of_clarity_buff) Spell(tigers_fury)
 	#rip,if=combo_points>=5&target.health.pct<=25&action.rip.tick_damage%dot.rip.tick_dmg>=1.15
-	if ComboPoints() >= 5 and target.HealthPercent() <= 25 and Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 1.15 Spell(rip)
+	if ComboPoints() >= 5 and target.HealthPercent() <= 25 and target.Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 1.15 Spell(rip)
 	#ferocious_bite,if=combo_points>=5&target.health.pct<=25&dot.rip.ticking
 	if ComboPoints() >= 5 and target.HealthPercent() <= 25 and target.DebuffPresent(rip_debuff) Spell(ferocious_bite)
 	#rip,if=combo_points>=5&dot.rip.remains<2
@@ -303,7 +303,7 @@ AddFunction FeralBasicPredictiveActions
 	#thrash_cat,if=buff.omen_of_clarity.react&dot.thrash_cat.remains<3
 	if BuffPresent(omen_of_clarity_buff) and target.DebuffRemains(thrash_cat_debuff) < 3 Spell(thrash_cat)
 	#rake,cycle_targets=1,if=dot.rake.remains<3|action.rake.tick_damage>dot.rake.tick_dmg
-	if target.DebuffRemains(rake_debuff) < 3 or Damage(rake_debuff) > target.LastEstimatedDamage(rake_debuff) Spell(rake)
+	if target.DebuffRemains(rake_debuff) < 3 or target.Damage(rake_debuff) > target.LastEstimatedDamage(rake_debuff) Spell(rake)
 	#pool_resource,for_next=1
 	#thrash_cat,if=dot.thrash_cat.remains<3&(dot.rip.remains>=8&buff.savage_roar.remains>=12|buff.berserk.up|combo_points>=5)
 	if Energy() >= EnergyCost(thrash_cat) and target.DebuffRemains(thrash_cat_debuff) < 3 and { target.DebuffRemains(rip_debuff) >= 8 and BuffRemains(savage_roar_buff) >= 12 or BuffPresent(berserk_cat_buff) or ComboPoints() >= 5 } wait Spell(thrash_cat)
@@ -424,9 +424,9 @@ AddFunction FeralAdvancedActions
 	#savage_roar,if=buff.savage_roar.remains<=3&combo_points>0&target.health.pct<25
 	if BuffRemains(savage_roar_buff) <= 3 and ComboPoints() > 0 and target.HealthPercent() < 25 SavageRoar()
 	#rip,if=combo_points>=5&action.rip.tick_damage%dot.rip.tick_dmg>=1.15&target.time_to_die>30
-	if ComboPoints() >= 5 and Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 1.15 and target.TimeToDie() > 30 Spell(rip)
+	if ComboPoints() >= 5 and target.Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 1.15 and target.TimeToDie() > 30 Spell(rip)
 	#rip,if=combo_points>=4&action.rip.tick_damage%dot.rip.tick_dmg>=0.95&target.time_to_die>30&buff.rune_of_reorigination.up&buff.rune_of_reorigination.remains<=1.5
-	if ComboPoints() >= 4 and Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 0.95 and target.TimeToDie() > 30 and BuffPresent(rune_of_reorigination_buff) and BuffRemains(rune_of_reorigination_buff) <= 1.5 Spell(rip)
+	if ComboPoints() >= 4 and target.Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 0.95 and target.TimeToDie() > 30 and BuffPresent(rune_of_reorigination_buff) and BuffRemains(rune_of_reorigination_buff) <= 1.5 Spell(rip)
 	#pool_resource,if=combo_points>=5&target.health.pct<=25&dot.rip.ticking&!(energy>=50|(buff.berserk.up&energy>=25))
 	unless ComboPoints() >= 5 and target.HealthPercent() <= 25 and target.DebuffPresent(rip_debuff) and not { Energy() >= 50 or { BuffPresent(berserk_cat_buff) and Energy() >= 25 } }
 	{
@@ -443,7 +443,7 @@ AddFunction FeralAdvancedActions
 		#rake,if=buff.rune_of_reorigination.up&dot.rake.remains<9&buff.rune_of_reorigination.remains<=1.5
 		if BuffPresent(rune_of_reorigination_buff) and target.DebuffRemains(rake_debuff) < 9 and BuffRemains(rune_of_reorigination_buff) <= 1.5 Spell(rake)
 		#rake,cycle_targets=1,if=target.time_to_die-dot.rake.remains>3&(action.rake.tick_damage>dot.rake.tick_dmg|(dot.rake.remains<3&action.rake.tick_damage%dot.rake.tick_dmg>=0.75))
-		if target.TimeToDie() - target.DebuffRemains(rake_debuff) > 3 and { Damage(rake_debuff) > target.LastEstimatedDamage(rake_debuff) or { target.DebuffRemains(rake_debuff) < 3 and Damage(rake_debuff) / target.LastEstimatedDamage(rake_debuff) >= 0.75 } } Spell(rake)
+		if target.TimeToDie() - target.DebuffRemains(rake_debuff) > 3 and { target.Damage(rake_debuff) > target.LastEstimatedDamage(rake_debuff) or { target.DebuffRemains(rake_debuff) < 3 and target.Damage(rake_debuff) / target.LastEstimatedDamage(rake_debuff) >= 0.75 } } Spell(rake)
 		#pool_resource,for_next=1
 		#thrash_cat,if=target.time_to_die>=6&dot.thrash_cat.remains<3&(dot.rip.remains>=8&buff.savage_roar.remains>=12|buff.berserk.up|combo_points>=5)&dot.rip.ticking
 		if Energy() >= EnergyCost(thrash_cat) and target.TimeToDie() >= 6 and target.DebuffRemains(thrash_cat_debuff) < 3 and { target.DebuffRemains(rip_debuff) >= 8 and BuffRemains(savage_roar_buff) >= 12 or BuffPresent(berserk_cat_buff) or ComboPoints() >= 5 } and target.DebuffPresent(rip_debuff) wait Spell(thrash_cat)
@@ -497,9 +497,9 @@ AddFunction FeralAdvancedPredictiveActions
 	#savage_roar,if=buff.savage_roar.remains<=3&combo_points>0&target.health.pct<25
 	if BuffRemains(savage_roar_buff) <= 3 and ComboPoints() > 0 and target.HealthPercent() < 25 SavageRoar()
 	#rip,if=combo_points>=5&action.rip.tick_damage%dot.rip.tick_dmg>=1.15&target.time_to_die>30
-	if ComboPoints() >= 5 and Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 1.15 and target.TimeToDie() > 30 Spell(rip)
+	if ComboPoints() >= 5 and target.Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 1.15 and target.TimeToDie() > 30 Spell(rip)
 	#rip,if=combo_points>=4&action.rip.tick_damage%dot.rip.tick_dmg>=0.95&target.time_to_die>30&buff.rune_of_reorigination.up&buff.rune_of_reorigination.remains<=1.5
-	if ComboPoints() >= 4 and Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 0.95 and target.TimeToDie() > 30 and BuffPresent(rune_of_reorigination_buff) and BuffRemains(rune_of_reorigination_buff) <= 1.5 Spell(rip)
+	if ComboPoints() >= 4 and target.Damage(rip_debuff) / target.LastEstimatedDamage(rip_debuff) >= 0.95 and target.TimeToDie() > 30 and BuffPresent(rune_of_reorigination_buff) and BuffRemains(rune_of_reorigination_buff) <= 1.5 Spell(rip)
 	#pool_resource,if=combo_points>=5&target.health.pct<=25&dot.rip.ticking&!(energy>=50|(buff.berserk.up&energy>=25))
 	unless ComboPoints() >= 5 and target.HealthPercent() <= 25 and target.DebuffPresent(rip_debuff) and not { Energy() >= 50 or { BuffPresent(berserk_cat_buff) and Energy() >= 25 } }
 	{
@@ -516,7 +516,7 @@ AddFunction FeralAdvancedPredictiveActions
 		#rake,if=buff.rune_of_reorigination.up&dot.rake.remains<9&buff.rune_of_reorigination.remains<=1.5
 		if BuffPresent(rune_of_reorigination_buff) and target.DebuffRemains(rake_debuff) < 9 and BuffRemains(rune_of_reorigination_buff) <= 1.5 Spell(rake)
 		#rake,cycle_targets=1,if=target.time_to_die-dot.rake.remains>3&(action.rake.tick_damage>dot.rake.tick_dmg|(dot.rake.remains<3&action.rake.tick_damage%dot.rake.tick_dmg>=0.75))
-		if target.TimeToDie() - target.DebuffRemains(rake_debuff) > 3 and { Damage(rake_debuff) > target.LastEstimatedDamage(rake_debuff) or { target.DebuffRemains(rake_debuff) < 3 and Damage(rake_debuff) / target.LastEstimatedDamage(rake_debuff) >= 0.75 } } Spell(rake)
+		if target.TimeToDie() - target.DebuffRemains(rake_debuff) > 3 and { target.Damage(rake_debuff) > target.LastEstimatedDamage(rake_debuff) or { target.DebuffRemains(rake_debuff) < 3 and target.Damage(rake_debuff) / target.LastEstimatedDamage(rake_debuff) >= 0.75 } } Spell(rake)
 		#pool_resource,for_next=1
 		#thrash_cat,if=target.time_to_die>=6&dot.thrash_cat.remains<3&(dot.rip.remains>=8&buff.savage_roar.remains>=12|buff.berserk.up|combo_points>=5)&dot.rip.ticking
 		if Energy() >= EnergyCost(thrash_cat) and target.TimeToDie() >= 6 and target.DebuffRemains(thrash_cat_debuff) < 3 and { target.DebuffRemains(rip_debuff) >= 8 and BuffRemains(savage_roar_buff) >= 12 or BuffPresent(berserk_cat_buff) or ComboPoints() >= 5 } and target.DebuffPresent(rip_debuff) wait Spell(thrash_cat)
diff --git a/scripts/ovale_druid_spells.lua b/scripts/ovale_druid_spells.lua
index 1e8cb17..c0df1f0 100644
--- a/scripts/ovale_druid_spells.lua
+++ b/scripts/ovale_druid_spells.lua
@@ -5,6 +5,9 @@ do
 	local name = "ovale_druid_spells"
 	local desc = "[5.4.7] Ovale: Druid spells"
 	local code = [[
+# Druid spells and functions.
+#	Last updated: 2014-04-24
+
 Define(barkskin 22812)
 	SpellInfo(barkskin cd=60)
 	SpellInfo(barkskin addcd=-15 if_spell=malfurions_gift)
@@ -51,14 +54,11 @@ Define(feral_fury_buff 48848)
 Define(feral_rage_buff 146874)
 	SpellInfo(feral_rage_buff duration=20)
 Define(ferocious_bite 22568)
-	SpellInfo(ferocious_bite combo=finisher energy=25)
+	SpellInfo(ferocious_bite combo=finisher energy=25 physical=1)
 	SpellInfo(ferocious_bite buff_energy_half=berserk_cat_buff if_stance=druid_cat_form)
 	SpellInfo(ferocious_bite buff_energy_none=omen_of_clarity_buff if_spell=omen_of_clarity)
+	SpellInfo(ferocious_bite damage=FeralFerociousBiteDamage mastery=feral)
 	SpellAddBuff(ferocious_bite omen_of_clarity_buff=0 if_spell=omen_of_clarity)
-	# Ferocious Bite does ((316 to 658) + 762 * CP + 0.196 * AP * CP) damage (from Wowhead).
-	# Average the base damage to (316 + 658) / 2 = 487.
-	SpellInfo(ferocious_bite base=487 bonuscp=762 bonusapcp=0.196)
-	SpellDamageBuff(ferocious_bite dream_of_cenarius_melee_buff=1.3)
 Define(force_of_nature_caster 33831)
 	SpellInfo(force_of_nature_caster gcd=0)
 Define(force_of_nature_melee 102703)
@@ -85,16 +85,17 @@ Define(king_of_the_jungle_buff 102543)
 	SpellInfo(king_of_the_jungle_buff duration=30)
 Define(lunar_eclipse_buff 48518)
 Define(maim 22570)
-	SpellInfo(maim cd=10 combo=finisher energy=35)
+	SpellInfo(maim cd=10 combo=finisher energy=35 physical=1)
 	SpellInfo(maim buff_energy_half=berserk_cat_buff if_stance=druid_cat_form)
 	SpellInfo(maim buff_energy_none=omen_of_clarity_buff if_spell=omen_of_clarity)
 	SpellAddBuff(maim omen_of_clarity_buff=0 if_spell=omen_of_clarity)
 Define(malfurions_gift 92364)
 Define(mangle_cat 33876)
-	SpellInfo(mangle_cat combo=1 energy=35)
+	SpellInfo(mangle_cat combo=1 energy=35 physical=1)
 	SpellInfo(mangle_cat critcombo=1 if_spell=primal_fury)
 	SpellInfo(mangle_cat buff_energy_half=berserk_cat_buff if_stance=druid_cat_form)
 	SpellInfo(mangle_cat buff_energy_none=omen_of_clarity_buff if_spell=omen_of_clarity)
+	SpellInfo(mangle_cat damage=FeralMangleCatDamage mastery=feral)
 	SpellAddBuff(mangle_cat omen_of_clarity_buff=0 if_spell=omen_of_clarity)
 Define(mark_of_the_wild 1126)
 Define(might_of_ursoc 106922)
@@ -124,7 +125,7 @@ Define(predatory_swiftness_buff 69369)
 	SpellInfo(predatory_swiftness_buff duration=8)
 Define(prowl 5215)
 Define(rake 1822)
-	SpellInfo(rake combo=1 energy=35)
+	SpellInfo(rake combo=1 energy=35 physical=1)
 	SpellInfo(rake critcombo=1 if_spell=primal_fury)
 	SpellInfo(rake buff_energy_half=berserk_cat_buff if_stance=druid_cat_form)
 	SpellInfo(rake buff_energy_none=omen_of_clarity_buff if_spell=omen_of_clarity)
@@ -132,14 +133,15 @@ Define(rake 1822)
 	SpellAddTargetDebuff(rake rake_debuff=1)
 Define(rake_debuff 1822)
 	SpellInfo(rake_debuff duration=15 tick=3)
-	# Damage(rake_debuff) = (99 + 0.3 * AP) damage per tick (from Catus).
-	SpellInfo(rake_debuff base=99 bonusap=0.3)
+	SpellInfo(rake_debuff damage=FeralRakeTickDamage mastery=feral)
+	SpellInfo(rake_debuff lastEstimatedDamage=FeralRakeTickLastDamage mastery=feral)
 	SpellDamageBuff(rake_debuff dream_of_cenarius_melee_buff=1.3)
 Define(ravage 6785)
-	SpellInfo(ravage combo=1 energy=45)
+	SpellInfo(ravage combo=1 energy=45 physical=1)
 	SpellInfo(ravage critcombo=1 if_spell=primal_fury)
 	SpellInfo(ravage buff_energy_half=berserk_cat_buff if_stance=druid_cat_form)
 	SpellInfo(ravage buff_energy_none=omen_of_clarity_buff if_spell=omen_of_clarity)
+	SpellInfo(ravage damage=FeralRavageDamage mastery=feral)
 	SpellAddBuff(ravage omen_of_clarity_buff=0 if_spell=omen_of_clarity)
 Define(renewal 108238)
 	SpellInfo(renewal cd=120)
@@ -153,9 +155,9 @@ Define(rip 1079)
 Define(rip_debuff 1079)
 	SpellInfo(rip_debuff duration=16 resetcounter=ripshreds tick=2)
 	SpellInfo(rip_debuff addduration=4 itemset=T14_melee itemcount=4)
-	# Rip does (113 + 320 * CP + 0.0484 * AP * CP * 8) damage over 16 seconds (from Wowhead).
-	# Damage(rip_debuff) = (14.125 + 40 * CP + 0.0484 * AP * CP) damage per tick.
 	SpellInfo(rip_debuff base=14.125 bonuscp=40 bonusapcp=0.0484)
+	SpellInfo(rip_debuff damage=FeralRipTickDamage mastery=feral)
+	SpellInfo(rip_debuff lastEstimatedDamage=FeralRipTickLastDamage mastery=feral)
 	SpellDamageBuff(rip_debuff dream_of_cenarius_damage_buff=1.3)
 Define(rune_of_reorigination_buff 139120)
 	SpellInfo(rune_of_reorigination_buff duration=10)
@@ -175,10 +177,11 @@ Define(savage_roar_glyphed 127538)
 	SpellAddBuff(savage_roar_glyphed omen_of_clarity_buff=0 if_spell=omen_of_clarity)
 SpellList(savage_roar_buff savage_roar savage_roar_glyphed)
 Define(shred 5221)
-	SpellInfo(shred combo=1 energy=40)
+	SpellInfo(shred combo=1 energy=40 physical=1)
 	SpellInfo(shred critcombo=1 if_spell=primal_fury)
 	SpellInfo(shred buff_energy_half=berserk_cat_buff if_stance=druid_cat_form)
 	SpellInfo(shred buff_energy_none=omen_of_clarity_buff if_spell=omen_of_clarity)
+	SpellInfo(shred damage=FeralShredDamage mastery=feral)
 	SpellAddBuff(shred omen_of_clarity_buff=0 if_spell=omen_of_clarity)
 Define(shooting_stars_buff 93400)
 	SpellInfo(shooting_stars_buff duration=12)
@@ -208,20 +211,22 @@ Define(survival_instincts 61336)
 	SpellInfo(survival_instincts addcd=-60 glyph=glyph_of_survival_instincts)
 	SpellAddBuff(survival_instincts survival_instincts=1)
 Define(swipe_cat 62078)
-	SpellInfo(swipe_cat combo=1 energy=45)
+	SpellInfo(swipe_cat combo=1 energy=45 physical=1)
 	SpellInfo(swipe_cat buff_energy_half=berserk_cat_buff if_stance=druid_cat_form)
 	SpellInfo(swipe_cat buff_energy_none=omen_of_clarity_buff if_spell=omen_of_clarity)
+	SpellInfo(swipe_cat damage=FeralSwipeCatDamage mastery=feral)
 	SpellAddBuff(swipe_cat omen_of_clarity_buff=0 if_spell=omen_of_clarity)
 Define(symbiosis_mirror_image 110621)
 	SpellInfo(symbiosis_mirror_image cd=180)
 Define(thrash_cat 106830)
-	SpellInfo(thrash_cat energy=50)
+	SpellInfo(thrash_cat energy=50 physical=1)
 	SpellInfo(thrash_cat buff_energy_half=berserk_cat_buff if_stance=druid_cat_form)
 	SpellInfo(thrash_cat buff_energy_none=omen_of_clarity_buff if_spell=omen_of_clarity)
+	SpellInfo(thrash_cat damage=FeralThrashCatDamage mastery=feral)
 	SpellAddBuff(thrash_cat omen_of_clarity_buff=0 if_spell=omen_of_clarity)
 	SpellAddTargetDebuff(thrash_cat thrash_cat_debuff=1)
 Define(thrash_cat_debuff 106830)
-	SpellInfo(thrash_cat_debuff duration=15 tick=3)
+	SpellInfo(thrash_cat_debuff duration=15 tick=3 physical=1)
 Define(tigers_fury 5217)
 	SpellInfo(tigers_fury cd=30 energy=-60)
 	SpellAddBuff(tigers_fury tigers_fury_buff=1)
@@ -289,6 +294,68 @@ AddFunction FeralInterrupt
 		}
 	}
 }
+
+AddFunction FeralMasteryDamageMultiplier asValue=1 { 1 + MasteryEffect() / 100 }
+
+### Ferocious Bite.
+AddFunction FeralFerociousBiteDamage asValue=1
+{
+	# The "2" at the end is from assuming that FB is always cast at 50 energy, with the extra 25 energy
+	# increasing damage by 100%.
+	{ 500 + { 762 + 0.196 * AttackPower() } * ComboPoints() } * target.DamageMultiplier(ferocious_bite) * 2
+}
+
+### Mangle (cat).
+AddFunction FeralMangleCatDamage asValue=1
+{
+	{ 78 + WeaponDamage() } * 5 * target.DamageMultiplier(mangle_cat)
+}
+
+### Rake.
+AddFunction FeralRakeTickDamage asValue=1
+{
+	{ 99 + 0.3 * AttackPower() } * target.DamageMultiplier(rake_debuff) * FeralMasteryDamageMultiplier()
+}
+AddFunction FeralRakeTickLastDamage asValue=1
+{
+	{ 99 + 0.3 * target.DebuffAttackPower(rake_debuff) } * target.DebuffDamageMultiplier(rake_debuff) * { 1 + target.DebuffMasteryEffect(rake_debuff) / 100 }
+}
+
+### Ravage
+AddFunction FeralRavageDamage asValue=1
+{
+	{ 78 + WeaponDamage() } * 9.5 * target.DamageMultiplier(ravage)
+}
+
+### Rip.
+AddFunction FeralRipTickDamage asValue=1
+{
+	{ 136 + { { 384 + 0.05808 * AttackPower() } * ComboPoints() } } * target.DamageMultiplier(rip_debuff) * FeralMasteryDamageMultiplier()
+}
+AddFunction FeralRipTickLastDamage asValue=1
+{
+	{ 136 + { { 384 + 0.05808 * target.DebuffAttackPower(rip_debuff) } * target.DebuffComboPoints(rip_debuff) } } * target.DebuffDamageMultiplier(rip_debuff) * { 1 + target.DebuffMasteryEffect(rip_debuff) / 100 }
+}
+
+### Shred.
+AddFunction FeralShredDamage asValue=1
+{
+	# The "1.2" at the end is from assuming that Shred is only cast against bleeding targets.
+	FeralMangleCatDamage() * 1.2
+}
+
+### Swipe (cat)
+AddFunction FeralSwipeCatDamage asValue=1
+{
+	# The "1.2" at the end is from assuming that Swipe is only cast against bleeding targets (usually with Thrash debuff)
+	WeaponDamage() * 1.4 * target.DamageMultiplier(swipe_cat) * 1.2
+}
+
+### Thrash (cat)
+AddFunction FeralThrashCatHitDamage asValue=1
+{
+	{ 1232 + 0.191 * AttackPower() } * target.DamageMultiplier(thrash_cat) * FeralMasteryDamageMultiplier()
+}
 ]]

 	OvaleScripts:RegisterScript("DRUID", name, desc, code, "include")