Skip to content

Commit

Permalink
update saber slash dot logic to better match in-game
Browse files Browse the repository at this point in the history
  • Loading branch information
kayla-glick committed Aug 23, 2024
1 parent bc76869 commit 92d4d53
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 10 deletions.
19 changes: 10 additions & 9 deletions sim/rogue/saber_slash.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func (rogue *Rogue) registerSaberSlashSpell() {
Flags: core.SpellFlagMeleeMetrics,
ProcMask: core.ProcMaskEmpty,

DamageMultiplier: []float64{1, 1.02, 1.04, 1.06}[rogue.Talents.Aggression],
DamageMultiplier: 1,
ThreatMultiplier: 1,

Dot: core.DotConfig{
Expand All @@ -43,6 +43,9 @@ func (rogue *Rogue) registerSaberSlashSpell() {
dot.SnapshotBaseDamage = 0
}

dot.SnapshotAttackerMultiplier /= rogue.saberSlashMultiplier(dot.GetStacks() - 1)
dot.SnapshotAttackerMultiplier *= rogue.saberSlashMultiplier(dot.GetStacks())

// each stack snapshots the AP it was applied with
dot.SnapshotBaseDamage += 0.05 * dot.Spell.MeleeAttackPower()
},
Expand Down Expand Up @@ -79,8 +82,11 @@ func (rogue *Rogue) registerSaberSlashSpell() {
ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
rogue.BreakStealth(sim)

dot := rogue.saberSlashTick.Dot(target)
oldMultiplier := spell.DamageMultiplier
spell.DamageMultiplier *= rogue.saberSlashMultiplier(target)
if dot.IsActive() {
spell.DamageMultiplier *= rogue.saberSlashMultiplier(dot.GetStacks())
}

baseDamage := spell.Unit.MHNormalizedWeaponDamage(sim, spell.MeleeAttackPower())
result := spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMeleeWeaponSpecialHitAndCrit)
Expand All @@ -90,8 +96,6 @@ func (rogue *Rogue) registerSaberSlashSpell() {
if result.Landed() {
rogue.AddComboPoints(sim, 1, spell.ComboPointMetrics())

dot := rogue.saberSlashTick.Dot(target)

dot.ApplyOrRefresh(sim)
if dot.GetStacks() < dot.MaxStacks {
dot.AddStack(sim)
Expand All @@ -105,9 +109,6 @@ func (rogue *Rogue) registerSaberSlashSpell() {
})
}

func (rogue *Rogue) saberSlashMultiplier(target *core.Unit) float64 {
if rogue.saberSlashTick == nil {
return 1
}
return 1 + 0.33*float64(rogue.saberSlashTick.Dot(target).GetStacks())
func (rogue *Rogue) saberSlashMultiplier(stacks int32) float64 {
return []float64{1, 1.33, 1.67, 2.0}[stacks]
}
9 changes: 8 additions & 1 deletion sim/rogue/sinister_strike.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ import (
"time"

"github.com/wowsims/sod/sim/core"
"github.com/wowsims/sod/sim/core/proto"
)

func (rogue *Rogue) registerSinisterStrikeSpell() {
hasSaberSlash := rogue.HasRune(proto.RogueRune_RuneSaberSlash)

flatDamageBonus := map[int32]float64{
25: 15,
40: 33,
Expand Down Expand Up @@ -49,7 +52,11 @@ func (rogue *Rogue) registerSinisterStrikeSpell() {
rogue.BreakStealth(sim)

oldMultiplier := spell.DamageMultiplier
spell.DamageMultiplier *= rogue.saberSlashMultiplier(target)
if hasSaberSlash {
if dot := rogue.saberSlashTick.Dot(target); dot.IsActive() {
spell.DamageMultiplier *= rogue.saberSlashMultiplier(dot.GetStacks())
}
}

baseDamage := flatDamageBonus + spell.Unit.MHNormalizedWeaponDamage(sim, spell.MeleeAttackPower())
result := spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMeleeWeaponSpecialHitAndCrit)
Expand Down

0 comments on commit 92d4d53

Please sign in to comment.