Skip to content

Commit ee18053

Browse files
committed
Implemented Mangle, Lacerate, and Maul.
On branch guardian Changes to be committed: deleted: sim/druid/_lacerate.go modified: sim/druid/druid.go modified: sim/druid/faerie_fire.go new file: sim/druid/lacerate.go renamed: sim/druid/_mangle.go -> sim/druid/mangle.go renamed: sim/druid/_maul.go -> sim/druid/maul.go
1 parent d946aac commit ee18053

6 files changed

Lines changed: 125 additions & 187 deletions

File tree

sim/druid/_lacerate.go

Lines changed: 0 additions & 97 deletions
This file was deleted.

sim/druid/druid.go

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,7 @@ type Druid struct {
5050
MangleBear *DruidSpell
5151
MangleCat *DruidSpell
5252
Maul *DruidSpell
53-
MaulQueueSpell *DruidSpell
5453
Moonfire *DruidSpell
55-
Pulverize *DruidSpell
5654
Rebirth *DruidSpell
5755
Rake *DruidSpell
5856
Ravage *DruidSpell
@@ -79,8 +77,8 @@ type Druid struct {
7977
BarkskinAura *core.Aura
8078
BlazeOfGloryAura *core.Aura
8179
BearFormAura *core.Aura
82-
BerserkAura *core.Aura
83-
BerserkProcAura *core.Aura
80+
BerserkBearAura *core.Aura
81+
BerserkCatAura *core.Aura
8482
CatFormAura *core.Aura
8583
ClearcastingAura *core.Aura
8684
DemoralizingRoarAuras core.AuraArray
@@ -98,11 +96,7 @@ type Druid struct {
9896
StampedeBearAura *core.Aura
9997
SurvivalInstinctsAura *core.Aura
10098

101-
BleedCategories core.ExclusiveCategoryArray
102-
103-
PrimalMadnessRageMetrics *core.ResourceMetrics
104-
PrimalPrecisionRecoveryMetrics *core.ResourceMetrics
105-
SavageRoarDurationTable [6]time.Duration
99+
SavageRoarDurationTable [6]time.Duration
106100

107101
ProcOoc func(sim *core.Simulation)
108102

@@ -119,8 +113,6 @@ type Druid struct {
119113
GuardianLeatherSpecDep *stats.StatDependency
120114

121115
// Item sets
122-
T11Feral2pBonus *core.Aura
123-
T11Feral4pBonus *core.Aura
124116
T13Feral4pBonus *core.Aura
125117
}
126118

@@ -299,10 +291,10 @@ func (druid *Druid) RegisterFeralCatSpells() {
299291
// druid.registerCatCharge()
300292
druid.registerCatFormSpell()
301293
druid.registerFerociousBiteSpell()
302-
// druid.registerLacerateSpell()
303-
// druid.registerMangleBearSpell()
304-
// druid.registerMangleCatSpell()
305-
// druid.registerMaulSpell()
294+
druid.registerLacerateSpell()
295+
druid.registerMangleBearSpell()
296+
druid.registerMangleCatSpell()
297+
druid.registerMaulSpell()
306298
// druid.registerRakeSpell()
307299
// druid.registerRavageSpell()
308300
druid.registerRipSpell()
@@ -321,10 +313,9 @@ func (druid *Druid) RegisterFeralTankSpells() {
321313
//druid.registerDemoralizingRoarSpell()
322314
// druid.registerEnrageSpell()
323315
druid.registerFrenziedRegenerationSpell()
324-
// druid.registerMangleBearSpell()
325-
// druid.registerMaulSpell()
326-
// druid.registerLacerateSpell()
327-
// druid.registerPulverizeSpell()
316+
druid.registerMangleBearSpell()
317+
druid.registerMaulSpell()
318+
druid.registerLacerateSpell()
328319
// druid.registerRakeSpell()
329320
// druid.registerRipSpell()
330321
//druid.registerSavageDefensePassive()
@@ -402,11 +393,6 @@ func (ds *DruidSpell) IsEqual(s *core.Spell) bool {
402393
func (druid *Druid) UpdateBleedPower(bleedSpell *DruidSpell, sim *core.Simulation, target *core.Unit, updateCurrent bool, updateNew bool) {
403394
snapshotPower := bleedSpell.ExpectedTickDamage(sim, target)
404395

405-
// Assume that Mangle will be up soon if not currently active.
406-
if !druid.BleedCategories.Get(target).AnyActive() {
407-
snapshotPower *= 1.3
408-
}
409-
410396
if updateCurrent {
411397
bleedSpell.CurrentSnapshotPower = snapshotPower
412398

sim/druid/faerie_fire.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,20 @@ func (druid *Druid) registerFaerieFireSpell() {
5959
ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
6060
baseDamage := 0.0
6161
outcome := spell.OutcomeMagicHit
62+
6263
if druid.InForm(Bear) {
6364
baseDamage = 10.0 + 0.302*spell.MeleeAttackPower()
6465
outcome = spell.OutcomeMagicHitAndCrit
6566
}
6667

6768
result := spell.CalcAndDealDamage(sim, target, baseDamage, outcome)
69+
6870
if result.Landed() {
6971
druid.TryApplyFaerieFireEffect(sim, target)
72+
73+
if druid.InForm(Bear) && sim.Proc(0.25, "Mangle CD Reset") {
74+
druid.MangleBear.CD.Reset()
75+
}
7076
}
7177
},
7278

sim/druid/lacerate.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package druid
2+
3+
import (
4+
"time"
5+
6+
"github.com/wowsims/mop/sim/core"
7+
)
8+
9+
func (druid *Druid) registerLacerateSpell() {
10+
druid.Lacerate = druid.RegisterSpell(Bear, core.SpellConfig{
11+
ActionID: core.ActionID{SpellID: 33745},
12+
SpellSchool: core.SpellSchoolPhysical,
13+
ProcMask: core.ProcMaskMeleeMHSpecial,
14+
Flags: core.SpellFlagMeleeMetrics | core.SpellFlagAPL,
15+
16+
Cast: core.CastConfig{
17+
DefaultCast: core.Cast{
18+
GCD: core.GCDDefault,
19+
},
20+
21+
CD: core.Cooldown{
22+
Timer: druid.NewTimer(),
23+
Duration: time.Second * 3,
24+
},
25+
26+
IgnoreHaste: true,
27+
},
28+
29+
BonusCritPercent: 0,
30+
DamageMultiplier: 1,
31+
CritMultiplier: druid.DefaultCritMultiplier(),
32+
ThreatMultiplier: 1, // Changed in Cata
33+
MaxRange: core.MaxMeleeRange,
34+
FlatThreatBonus: 0, // Removed in Cata
35+
36+
Dot: core.DotConfig{
37+
Aura: druid.applyRendAndTear(core.Aura{
38+
Label: "Lacerate",
39+
MaxStacks: 3,
40+
Duration: time.Second * 15,
41+
}),
42+
NumberOfTicks: 5,
43+
TickLength: time.Second * 3,
44+
45+
OnSnapshot: func(_ *core.Simulation, target *core.Unit, dot *core.Dot, isRollover bool) {
46+
if isRollover {
47+
panic("Lacerate cannot roll over snapshots!")
48+
}
49+
50+
dot.SnapshotPhysical(target, 0.0512 * dot.Spell.MeleeAttackPower() * float64(dot.Aura.GetStacks()))
51+
},
52+
53+
OnTick: func(sim *core.Simulation, target *core.Unit, dot *core.Dot) {
54+
dot.CalcAndDealPeriodicSnapshotDamage(sim, target, dot.OutcomeSnapshotCrit)
55+
},
56+
},
57+
58+
ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
59+
baseDamage := 0.616 * spell.MeleeAttackPower()
60+
result := spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMeleeSpecialHitAndCrit)
61+
62+
if result.Landed() {
63+
dot := spell.Dot(target)
64+
if dot.IsActive() {
65+
dot.Refresh(sim)
66+
dot.AddStack(sim)
67+
dot.TakeSnapshot(sim, false)
68+
} else {
69+
dot.Apply(sim)
70+
dot.SetStacks(sim, 1)
71+
dot.TakeSnapshot(sim, false)
72+
}
73+
74+
if sim.Proc(0.25, "Mangle CD Reset") {
75+
druid.MangleBear.CD.Reset()
76+
}
77+
}
78+
},
79+
})
80+
}

0 commit comments

Comments
 (0)