Skip to content

Commit

Permalink
serpent sting gains 60% crit modifier from mortal shots
Browse files Browse the repository at this point in the history
  • Loading branch information
lime-green committed Jun 27, 2023
1 parent 46582e0 commit fe39bc5
Show file tree
Hide file tree
Showing 18 changed files with 34 additions and 27 deletions.
4 changes: 2 additions & 2 deletions sim/hunter/TestAPL.results
Original file line number Diff line number Diff line change
Expand Up @@ -820,8 +820,8 @@ dps_results: {
dps_results: {
key: "TestAPL-AllItems-Windrunner'sPursuit"
value: {
dps: 6948.89297
tps: 5939.66399
dps: 6988.95976
tps: 5979.73077
}
}
dps_results: {
Expand Down
4 changes: 2 additions & 2 deletions sim/hunter/TestBM.results
Original file line number Diff line number Diff line change
Expand Up @@ -820,8 +820,8 @@ dps_results: {
dps_results: {
key: "TestBM-AllItems-Windrunner'sPursuit"
value: {
dps: 6358.96515
tps: 4295.68176
dps: 6390.92028
tps: 4327.63689
}
}
dps_results: {
Expand Down
4 changes: 2 additions & 2 deletions sim/hunter/TestMM.results
Original file line number Diff line number Diff line change
Expand Up @@ -820,8 +820,8 @@ dps_results: {
dps_results: {
key: "TestMM-AllItems-Windrunner'sPursuit"
value: {
dps: 7143.8655
tps: 6222.68518
dps: 7185.07401
tps: 6263.89369
}
}
dps_results: {
Expand Down
4 changes: 2 additions & 2 deletions sim/hunter/TestSV.results
Original file line number Diff line number Diff line change
Expand Up @@ -820,8 +820,8 @@ dps_results: {
dps_results: {
key: "TestSV-AllItems-Windrunner'sPursuit"
value: {
dps: 7058.97004
tps: 6035.73395
dps: 7098.83075
tps: 6075.59466
}
}
dps_results: {
Expand Down
2 changes: 1 addition & 1 deletion sim/hunter/aimed_shot.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func (hunter *Hunter) registerAimedShotSpell(timer *core.Timer) {
.04*float64(hunter.Talents.Barrage),
DamageMultiplier: 1 *
hunter.markedForDeathMultiplier(),
CritMultiplier: hunter.critMultiplier(true, true),
CritMultiplier: hunter.critMultiplier(true, true, false),
ThreatMultiplier: 1,

ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
Expand Down
2 changes: 1 addition & 1 deletion sim/hunter/arcane_shot.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func (hunter *Hunter) registerArcaneShotSpell(timer *core.Timer) {
.05*float64(hunter.Talents.ImprovedArcaneShot),
DamageMultiplier: 1 *
hunter.markedForDeathMultiplier(),
CritMultiplier: hunter.critMultiplier(true, true),
CritMultiplier: hunter.critMultiplier(true, true, false),
ThreatMultiplier: 1,

ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
Expand Down
4 changes: 2 additions & 2 deletions sim/hunter/chimera_shot.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func (hunter *Hunter) registerChimeraShotSpell() {
},

DamageMultiplier: 1 * hunter.markedForDeathMultiplier(),
CritMultiplier: hunter.critMultiplier(true, true),
CritMultiplier: hunter.critMultiplier(true, true, false),
ThreatMultiplier: 1,

ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
Expand Down Expand Up @@ -75,7 +75,7 @@ func (hunter *Hunter) chimeraShotSerpentStingSpell() *core.Spell {
DamageMultiplier: 1 *
(2.0 + core.TernaryFloat64(hunter.HasMajorGlyph(proto.HunterMajorGlyph_GlyphOfSerpentSting), 0.8, 0)) *
hunter.markedForDeathMultiplier(),
CritMultiplier: hunter.critMultiplier(true, false),
CritMultiplier: hunter.critMultiplier(true, false, false),
ThreatMultiplier: 1,

ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
Expand Down
2 changes: 1 addition & 1 deletion sim/hunter/explosive_shot.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func (hunter *Hunter) makeExplosiveShotSpell(timer *core.Timer, downrank bool) *
DamageMultiplierAdditive: 1 +
.02*float64(hunter.Talents.TNT),
DamageMultiplier: 1,
CritMultiplier: hunter.critMultiplier(true, false),
CritMultiplier: hunter.critMultiplier(true, false, false),
ThreatMultiplier: 1,

Dot: core.DotConfig{
Expand Down
2 changes: 1 addition & 1 deletion sim/hunter/explosive_trap.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func (hunter *Hunter) registerExplosiveTrapSpell(timer *core.Timer) {

DamageMultiplierAdditive: 1 +
.02*float64(hunter.Talents.TNT),
CritMultiplier: hunter.critMultiplier(false, false),
CritMultiplier: hunter.critMultiplier(false, false, false),
ThreatMultiplier: 1,

Dot: core.DotConfig{
Expand Down
6 changes: 3 additions & 3 deletions sim/hunter/hunter.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,9 @@ func (hunter *Hunter) AddPartyBuffs(partyBuffs *proto.PartyBuffs) {

func (hunter *Hunter) Initialize() {
// Update auto crit multipliers now that we have the targets.
hunter.AutoAttacks.MHConfig.CritMultiplier = hunter.critMultiplier(false, false)
hunter.AutoAttacks.OHConfig.CritMultiplier = hunter.critMultiplier(false, false)
hunter.AutoAttacks.RangedConfig.CritMultiplier = hunter.critMultiplier(false, false)
hunter.AutoAttacks.MHConfig.CritMultiplier = hunter.critMultiplier(false, false, false)
hunter.AutoAttacks.OHConfig.CritMultiplier = hunter.critMultiplier(false, false, false)
hunter.AutoAttacks.RangedConfig.CritMultiplier = hunter.critMultiplier(false, false, false)

hunter.registerAspectOfTheDragonhawkSpell()
hunter.registerAspectOfTheViperSpell()
Expand Down
2 changes: 1 addition & 1 deletion sim/hunter/kill_shot.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func (hunter *Hunter) registerKillShotSpell() {
5*core.CritRatingPerCritChance*float64(hunter.Talents.SniperTraining),
DamageMultiplier: 1 *
hunter.markedForDeathMultiplier(),
CritMultiplier: hunter.critMultiplier(true, true),
CritMultiplier: hunter.critMultiplier(true, true, false),
ThreatMultiplier: 1,

ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
Expand Down
2 changes: 1 addition & 1 deletion sim/hunter/multi_shot.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ func (hunter *Hunter) registerMultiShotSpell(timer *core.Timer) {
.04*float64(hunter.Talents.Barrage),
DamageMultiplier: 1 *
hunter.markedForDeathMultiplier(),
CritMultiplier: hunter.critMultiplier(true, false),
CritMultiplier: hunter.critMultiplier(true, false, false),
ThreatMultiplier: 1,

ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
Expand Down
2 changes: 1 addition & 1 deletion sim/hunter/raptor_strike.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func (hunter *Hunter) registerRaptorStrikeSpell() {

BonusCritRating: float64(hunter.Talents.SavageStrikes) * 10 * core.CritRatingPerCritChance,
DamageMultiplier: 1,
CritMultiplier: hunter.critMultiplier(false, false),
CritMultiplier: hunter.critMultiplier(false, false, false),
ThreatMultiplier: 1,

ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
Expand Down
4 changes: 3 additions & 1 deletion sim/hunter/serpent_sting.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ func (hunter *Hunter) registerSerpentStingSpell() {
DamageMultiplierAdditive: 1 +
0.1*float64(hunter.Talents.ImprovedStings) +
core.TernaryFloat64(hunter.HasSetBonus(ItemSetScourgestalkerBattlegear, 2), .1, 0),
CritMultiplier: hunter.critMultiplier(true, false),
// according to in-game testing (which happens to match the wowhead 60% mortal shots flag on wowhead)
// serpent-sting gets 60% crit modifier instead of 30% crit modifier from mortal shots
CritMultiplier: hunter.critMultiplier(true, false, true),
ThreatMultiplier: 1,

Dot: core.DotConfig{
Expand Down
2 changes: 1 addition & 1 deletion sim/hunter/silencing_shot.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func (hunter *Hunter) registerSilencingShotSpell() {

DamageMultiplier: 0.5 *
hunter.markedForDeathMultiplier(),
CritMultiplier: hunter.critMultiplier(true, false),
CritMultiplier: hunter.critMultiplier(true, false, false),
ThreatMultiplier: 1,

ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
Expand Down
2 changes: 1 addition & 1 deletion sim/hunter/steady_shot.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ func (hunter *Hunter) registerSteadyShotSpell() {
core.TernaryFloat64(hunter.HasSetBonus(ItemSetGronnstalker, 4), .1, 0),
DamageMultiplier: 1 *
hunter.markedForDeathMultiplier(),
CritMultiplier: hunter.critMultiplier(true, true),
CritMultiplier: hunter.critMultiplier(true, true, false),
ThreatMultiplier: 1,

ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
Expand Down
11 changes: 8 additions & 3 deletions sim/hunter/talents.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,17 @@ func (hunter *Hunter) ApplyTalents() {
hunter.registerReadinessCD()
}

func (hunter *Hunter) critMultiplier(isRanged bool, isMFDSpell bool) float64 {
func (hunter *Hunter) critMultiplier(isRanged bool, isMFDSpell bool, doubleDipMS bool) float64 {
primaryModifier := 1.0
secondaryModifier := 0.0
mortalShotsFactor := 0.06

if doubleDipMS {
mortalShotsFactor = 0.12
}

if isRanged {
secondaryModifier += 0.06 * float64(hunter.Talents.MortalShots)
secondaryModifier += mortalShotsFactor * float64(hunter.Talents.MortalShots)
if isMFDSpell {
secondaryModifier += 0.02 * float64(hunter.Talents.MarkedForDeath)
}
Expand Down Expand Up @@ -321,7 +326,7 @@ func (hunter *Hunter) applyWildQuiver() {
Flags: core.SpellFlagNoOnCastComplete,

DamageMultiplier: 0.8,
CritMultiplier: hunter.critMultiplier(false, false),
CritMultiplier: hunter.critMultiplier(false, false, false),
ThreatMultiplier: 1,

ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
Expand Down
2 changes: 1 addition & 1 deletion sim/hunter/volley.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func (hunter *Hunter) registerVolleySpell() {

DamageMultiplier: 1 *
(1 + 0.04*float64(hunter.Talents.Barrage)),
CritMultiplier: hunter.critMultiplier(true, false),
CritMultiplier: hunter.critMultiplier(true, false, false),
ThreatMultiplier: 1,

Dot: core.DotConfig{
Expand Down

0 comments on commit fe39bc5

Please sign in to comment.