Thanks for looking into it Zakalwe. Maybe my mistake was simming it using my profile and not the T12H profile.
I just run the T12H profile and then I applied to it my BoD modification, and you are indeed right, there is a rough 130 dps loss.
Interestingly enough, I run a sim for your profile (I just pulled it off the armory now) and I got 30281 dps.
I then made my BoD modification to your profile and I saw a similar increase on dps, 30614 dps. Roughly 330 dps.
As I read the current action list (and I might be wrong) the doomguard is being summoned before the target gets a BoD. So my thinking is that the doomguard is idle until BoD is applied (and possible some small time after).
I didn't mean to try to cover any bugs by recasting BoD. My apologies if I expressed myself incorrectly there.
No, what I'm saying is the simulator does not take any bane into account when simulating the doomguard - it simply assumes the doomguard will always assist you right away. The "bug" I was referring to was that he doesn't automatically do so in-game, but looking at the tooltip I guess it's actually intended behavior. Whether we should simulate that behavior I'm not sure.
Either way, you're right, there is a DPS boost by changing the action list in the way you are. It's not because of the doomguard, however, it's because the default action list syncs up BoD with DS, but if you're not syncing Meta with DS it's better to sync BoD with Meta instead.
The real issue here is that the default action list is optimized for the BiS profile, which uses the moonwell trinket and syncs Meta with that (and thus also with DS). I may have to make it check for the trinket when generating the action list.
EDIT: This is now fixed in SVN, and as a bonus you now no longer have to manually modify your action list if you're demo and have the moonwell chalice (unless you want to simulate *not* syncing meta with the trinket, of course).
If you import a profile with Synapse Springs and Moonwell Chalice the sim will put the springs above chalice in the default action list. Just switching them around was a 550 dps gain with my current gear.
If you import a profile with Synapse Springs and Moonwell Chalice the sim will put the springs above chalice in the default action list. Just switching them around was a 550 dps gain with my current gear.
This has been fixed in SVN - it used to search through items for on-use effects in an ascending order, but I reversed it, meaning it should always put trinkets first, on the assumption that trinkets tend to be more powerful than the springs.
It's worth noting that before this fix it also wouldn't automatically sync up metamorphosis with the chalice, even for non-engineers, but it does now (in SVN).
I didn't find the info on these forums, so i tried to simulate it using the svn version, here are the results i got :
Affliction : int 1 spell 0.8627 hit 0.727 crit 0.3219 haste ~0 mastery ~0
Destruction int 1 spell 0.8052 hit 0.7372 crit 0.3421 haste ~0 mastery ~0
Demonology (mastery factor = 3) : int 1 spell 0.7775 hit 0.6246 crit 0.3629 haste ~0 mastery 0.8073
Demonology (mastery factor = 1) : int 1 spell 0.8176 hit 0.6437 crit 0.3714 haste ~0 mastery 0.342
This was simmed using no equipement but pure stats (4500 int, 2400 spell, 1650 hit, 1000 crit, 1000 mastery, 2350 haste) and 10000 iterations, with fight duration fixed to effective dooomguard duration, and actionlist containing only buffs, no pet, no spells except doomguard on pull with a pre-pot. No demon soul nor meta were used, thoudh i tested it just to be sure but that changed nothing. Edit : I just realize i didn't though of adding hand of gul'dan in the sim for the additionnal demon crit, but i don't even know it the doomguard would benefit from it).
Side note : simming my own demo warlock afterwards and changing the mastery factor from 3 to 1 resulted in total doomguard damage going down from ~800k to ~550k (ie approx 31% loss) so it's a hint at what will happen when Blizzard fixes the triple mastery bug (similarily to what happened when they fixed the imp/racial bug)
The doomguard currently gets a damage multiplier in which the contribution from mastery is tree times what it normaly would be (ie once). More info here, here and here. I haven't found any "reliable" source to say where or what is wrong, nor why it's there. My personnal opinion is that the devs could use this mechanic to tune the demonology output without having any influence on other specs.
This bug is implemented via the following (in green color) fix in simc code (and simc doomguard numbers line up with live data)
// FIXME: Somehow he (the doomguard) gains three times as much from mastery as expected?
m *= 1.0 + ( o -> mastery_spells.master_demonologist -> ok() * snapshot_mastery
* o -> mastery_spells.master_demonologist -> effect_base_value( 3 ) / 10000.0 ) * 3;
I notice that when simming myself as Demonology and changing to the "actions+=/metamorphosis,if=buff.moonwell_chalice.up" in order to simulate stacking metamorphisis with Demon Soul and Moonwell Chalice the DPS distribution of the 10k iterations I ran was slightly bi-modal such that a noticeable minority of iterations would net me a significant amount less average DPS than the majority of iterations.
Can anyone help me explain this slight bi-modality? I'd just like to figure out why it's there and see if I can't avoid the situation that caused it when I'm actually in a raid situation.
I notice that when simming myself as Demonology and changing to the "actions+=/metamorphosis,if=buff.moonwell_chalice.up" in order to simulate stacking metamorphisis with Demon Soul and Moonwell Chalice the DPS distribution of the 10k iterations I ran was slightly bi-modal such that a noticeable minority of iterations would net me a significant amount less average DPS than the majority of iterations.
Can anyone help me explain this slight bi-modality? I'd just like to figure out why it's there and see if I can't avoid the situation that caused it when I'm actually in a raid situation.
This is presumably because of the random chance for your meta cooldown to be the full 3 minutes. That would produce a very long wait time for moonwell chalice and due to the huge effect meta + chalice has on our dps it would produce an overall low result. The major problem with mastery scalling meta is that the higher our mastery gets the more cricial meta becomes to our overall dps.
Couple of changes in the OP: Since we finally have fully optimized T12N profiles, I've included a chart (with a link to a report with scale factors) for normal mode gear as well. And I've changed the tier set and trinket proc evaluations to use a T12N baseline.
I also made the default demonology action list much more robust to the effects of movement, which had a dramatic effect on the movement sims.
There is another problem with Darkmantles theory: If all you do is add the condition on using Metamorphosis "actions+=/metamorphosis,if=buff.moonwell_chalice.up", this will not change anything if Metamorphosis ends up with a CD higher than 2 minutes, IF you are already syncing up the Trinkets with Metamorphosis like "actions+=/use_item,name=moonwell_chalice,if=cooldown.metamorphosis.remains=0|cooldown.metamorph osis.remains>cooldown". I would assume that you did not change this part and are in fact using Moonwell Chalice on Cooldown, which will then mean that you are not syncing up Metamorphosis with Moonwell Chalice/Trinkets if Metamorphosis has a higher cooldown than 2 minutes.
However, without actually seing your action priority list and the report that shows this bi-modality, it is pretty hard to theorize what could cause this. Please upload the report to somewhere and link it here.
I'm embarrassed to admit that the previously mentioned bi-modality appeared only in release 3 of Simcraft. When I re-ran the release 5 sim, the bi-modality was gone. I'm assuming that there was a bug or other inaccuracy somewhere in v.3 that created these results.
Gil, in answer to your question, I was using the same priority action last as you did above. However, as you were using release v.4, it likely was an idiosyncrasy that worked its way out of the Sim after v.3.
There is another problem with Darkmantles theory: If all you do is add the condition on using Metamorphosis "actions+=/metamorphosis,if=buff.moonwell_chalice.up", this will not change anything if Metamorphosis ends up with a CD higher than 2 minutes, IF you are already syncing up the Trinkets with Metamorphosis like "actions+=/use_item,name=moonwell_chalice,if=cooldown.metamorphosis.remains=0|cooldown.metamorph osis.remains>cooldown". I would assume that you did not change this part and are in fact using Moonwell Chalice on Cooldown, which will then mean that you are not syncing up Metamorphosis with Moonwell Chalice/Trinkets if Metamorphosis has a higher cooldown than 2 minutes.
You're reading that line wrong - it will always sync up MWC with meta. The second part of the expression will never evaluate to true, because the cooldown remaining on meta will never be higher than the full cooldown of the trinket except when the trinket is still on cooldown anyway. (In other words, meta's full cooldown duration will never be above 2 + 2 = 4 minutes. Obviously, since it starts at 3 minutes.)
The line you're looking at is generated in the same generic manner for all on-use trinkets. It's constructed that way to make sure trinkets with a lower cooldown are used in between metas.
This would have desynced MWC and Metamorphosis if Metamorphosis had a cooldown greater than 140 seconds. (On a sidenote, this is the case for the automatically generated use of Blood Fury, the orc racial, which is being used on cooldown, regardless of Metamorphosis.) This could have explained the couple of iterations that were at significantly less DPS than the average. Turns out, the bimodularity was a "bug" of an older simcraft version, so we can just ignore the last couple of posts I guess.
I understand that we want to use Bane of Doom when we have Demon Soul up as often as possible, and that to stop ourselves from clipping off the last empowered tick with a non-empowered tick we have changed back to the !ticking condition for recasting Bane of Doom, this gives us 4 empowered and 4 normal ticks per 2 Doom cycle, which if we were always casting Demon Soul and BoD at the same time is the best we could hope for.
However, we currently have a non-zero time between Demon Soul and BoD (Corruption and UA are in there for Aff for example) that skews the timers and gives rise to a slightly better strategy: surely it's worth clipping the last tick of BoD if we're doing so with Demon Soul up, that way we'll get 5 empowered and 3 normal ticks per 2 Doom cycle.
This would mean that the doom conditional would become:
I took the actionlist from Zakalwes OP/website and updated the Ovale default script accordingly.
I am very happy with the idea to come up with a Main/GCD-Icon and one separate dedicated to movement only.
You will want to install LibRangeCheck-2.0 for Immolation and Shadowflame.
Maybe someone can try this and give feedback on how it feels like.
Define(AXETOSS 89766)
Define(FELSTORM 89751)
Define(BANEOFAGONY 980)
Spellinfo(BANEOFAGONY duration=24)
SpellAddTargetDebuff(BANEOFAGONY BANEOFAGONY=24)
Define(BANEOFDOOM 603)
SpellInfo(BANEOFDOOM duration=60)
SpellAddTargetDebuff(BANEOFDOOM BANEOFDOOM=60)
Define(BANEOFHAVOC 80240)
SpellAddTargetDebuff(BANEOFHAVOC BANEOFHAVOC=300)
Define(CHAOSBOLT 50796)
SpellInfo(CHAOSBOLT cd=12)
Define(CONFLAGRATE 17962)
SpellInfo(CONFLAGRATE cd=10)
Define(CORRUPTION 172)
SpellAddTargetDebuff(CORRUPTION CORRUPTION=18)
Define(CURSEELEMENTS 1490)
SpellAddTargetDebuff(CURSEELEMENTS CURSEELEMENTS=300)
Define(CURSETONGUES 1714)
SpellAddTargetDebuff(CURSETONGUES CURSETONGUES=30)
Define(CURSEWEAKNESS 702)
SpellAddTargetDebuff(CURSEWEAKNESS CURSEWEAKNESS=120)
Define(DARKINTENT 80398)
SpellAddBuff(DARKINTENT DARKINTENTBUFF=1800)
Define(DEATHCOIL 6789)
SpellInfo(DEATHCOIL cd=120)
Define(DEMONARMOR 687)
SpellAddBuff(DEMONARMOR DEMONARMOR=1000)
Define(DEMONICEMPOWERMENT 47193)
SpellInfo(DEMONICEMPOWERMENT cd=60)
Define(DEMONSOUL 77801)
SpellInfo(DEMONSOUL cd=120)
SpellAddBuff(DEMONSOUL DEMONSOULBUFF=20)
Define(DRAINLIFE 689)
SpellInfo(DRAINLIFE canStopChannelling=3)
SpellAddTargetDebuff(DRAINLIFE DRAINLIFE=3)
SpellAddBuff(DRAINLIFE SOULBURN=0)
Define(DRAINSOUL 1120)
SpellInfo(DRAINSOUL canStopChannelling=5)
SpellAddTargetDebuff(DRAINSOUL DRAINSOUL=15)
Define(FELARMOR 28176)
SpellAddBuff(FELARMOR FELARMOR=1000)
Define(FELFLAME 77799)
SpellAddTargetDebuff(FELFLAME IMMOLATE=refresh UNSTABLEAFFLICTION=refresh)
Define(HANDOFGULDAN 71521)
SpellInfo(HANDOFGULDAN cd=12)
SpellAddTargetDebuff(HANDOFGULDAN IMMOLATE=refresh)
Define(HAUNT 48181)
SpellInfo(HAUNT cd=8)
SpellAddBuff(HAUNT HAUNT=12)
Define(IMMOLATE 348)
SpellInfo(IMMOLATE duration=15)
SpellAddTargetDebuff(IMMOLATE IMMOLATE=15)
SpellAddBuff(IMMOLATE MOLTENCORE=-1)
Define(IMMOLATIONAURA 50589)
SpellInfo(IMMOLATIONAURA cd=30)
SpellAddBuff(IMMOLATIONAURA IMMOLATIONAURA=15)
Define(INCINERATE 29722)
SpellAddBuff(INCINERATE MOLTENCORE=-1)
Define(LIFETAP 1454)
SpellInfo(LIFETAP cd=10) #fake
Define(METAMORPHOSIS 47241)
SpellInfo(METAMORPHOSIS cd=180)
SpellAddBuff(METAMORPHOSIS METAMORPHOSIS=30)
Define(SEARINGPAIN 5676)
Define(SEEDOFCORRUPTION 27243)
SpellAddTargetDebuff(SEEDOFCORRUPTION SEEDOFCORRUPTION=18)
Define(SHADOWBOLT 686)
SpellAddTargetDebuff(SHADOWBOLT SHADOWEMBRACE=12 SHADOWANDFLAMEDEBUFF=30)
Define(SHADOWBURN 17877)
SpellInfo(SHADOWBURN cd=15)
Define(SHADOWFLAME 47897)
SpellInfo(SHADOWFLAME cd=12 range=10)
Define(SOULFIRE 6353)
SpellAddBuff(SOULFIRE IMPROVEDSOULFIREBUFF=15 SOULBURN=0)
Define(SOULBURN 74434)
SpellInfo(SOULBURN cd=45)
SpellAddBuff(SOULBURN SOULBURN=15)
Define(SUMMONINFERNAL 1122)
SpellInfo(SUMMONINFERNAL cd=600)
Define(SUMMONDOOMGUARD 18540)
SpellInfo(SUMMONDOOMGUARD cd=600)
Define(SUMMONFELGUARD 30146)
SpellInfo(SUMMONFELGUARD cd=600) #fake
Define(SUMMONFELHUNTER 691)
SpellInfo(SUMMONFELHUNTER cd=600) #fake
Define(SUMMONIMP 688)
SpellInfo(SUMMONIMP cd=600) #fake
Define(SUMMONSUCCUBUS 712)
SpellInfo(SUMMONSUCCUBUS cd=600) #fake
Define(UNSTABLEAFFLICTION 30108)
SpellInfo(UNSTABLEAFFLICTION duration=15)
SpellAddTargetDebuff(UNSTABLEAFFLICTION UNSTABLEAFFLICTION=15)
Define(SOULHARVEST 79268)
SpellInfo(SOULHARVEST cd=30 duration=9)
Define(BLOODFURY 33702)
SpellInfo(BLOODFURY cd=120)
SpellAddBuff(BLOODFURY BLOODFURYBUFF=15)
Define(ESCAPEARTIST 20589)
SpellInfo(ESCAPEARTIST cd=90)
Define(CREATEHEALTHSTONE 6201)
SpellInfo(CREATEHEALTHSTONE cd=0)
Define(RITUALOFSOULS 29893)
SpellInfo(RITUALOFSOULS cd=360)
#Buff
Define(DECIMATION 63167)
Define(MOLTENCORE 71165)
Define(EMPOWEREDIMP 47283)
Define(IMPROVEDSOULFIREBUFF 85383)
Define(SHADOWTRANCE 17941)
Define(SHADOWANDFLAMEDEBUFF 17800)
Define(DEMONSOULBUFF 79460) #felhunter
Define(BLOODFURYBUFF 33702)
Define(DARKINTENTBUFF 85768)
Define(FLASKOFTHEDRACONICMINDBUFFSINGLE 79470)
Define(FLASKOFTHEDRACONICMINDBUFFGROUP 92730)
Define(WELLFED 87547)
Define(VOLCANICPOWER 79476)
#Talent
Define(IMPROVEDSOULFIRE 11197)
Define(SHADOWANDFLAMETALENT 10936)
Define(BANETALENT 10938)
Define(EMBERSTORMTALENT 11181)
#Glyph
Define(GLYPHOFLASHOFPAIN 70947)
Define(GLYPHOFIMP 56248)
Define(GLYPHOFMETAMORPHOSIS 64318)
#Item
Define(HEALTHSTONE 5512)
Define(FLASKOFTHEDRACONICMIND 58086)
Define(FOOD 62671)
Define(VOLCANICPOTION 58091)
Define(MOONWELLCHALICE 70142)
Define(RUNEOFZETH 68998)
Define(SOULCASKET 58183)
AddCheckBox(flask SpellName(FLASKOFTHEDRACONICMINDBUFFSINGLE) default)
AddCheckBox(food SpellName(WELLFED) default)
AddCheckBox(potion SpellName(VOLCANICPOWER) default)
AddListItem(curse elements SpellName(CURSEELEMENTS) default)
AddListItem(curse tongues SpellName(CURSETONGUES))
AddListItem(curse weakness SpellName(CURSEWEAKNESS))
AddListItem(curse none L(None))
AddListItem(bane doom SpellName(BANEOFDOOM) default)
AddListItem(bane agony SpellName(BANEOFAGONY))
AddListItem(bane havoc SpellName(BANEOFHAVOC) mastery=3)
ScoreSpells(CURSEELEMENTS SHADOWBOLT HAUNT UNSTABLEAFFLICTION IMMOLATE CONFLAGRATE CURSEWEAKNESS
BANEOFAGONY CORRUPTION SOULFIRE DRAINSOUL INCINERATE SHADOWBOLT CHAOSBOLT)
AddIcon help=buff size=small mastery=1
{
#0 flask,type=draconic_mind
if CheckBoxOn(flask) and BuffExpires(FLASKOFTHEDRACONICMINDBUFFSINGLE 0) and BuffExpires(FLASKOFTHEDRACONICMINDBUFFGROUP 0) Item(FLASKOFTHEDRACONICMIND)
#1 food,type=seafood_magnifique_feast
if CheckBoxOn(food) and InCombat(no) and BuffExpires(WELLFED 0) Item(FOOD)
#2 fel_armor
if BuffExpires(FELARMOR) Spell(FELARMOR)
#3 summon_felhunter
if PetPresent(no)
{
if InCombat(yes) Spell(SOULBURN usable=1)
Spell(SUMMONFELHUNTER)
}
#4 dark_intent
if BuffExpires(DARKINTENTBUFF) Spell(DARKINTENT)
#5 soulburn,if=!in_combat #seems to only make sense in simc, but not in real world, instead:
if InCombat(no) and SoulShards(less 2) Spell(SOULHARVEST)
if ItemCount(HEALTHSTONE less 1) and InCombat(no) Spell(RITUALOFSOULS)
if ItemCount(HEALTHSTONE less 1) and InCombat(yes) Spell(CREATEHEALTHSTONE)
#6 snapshot_stats
}
AddIcon help=offgcd size=small mastery=1
{
#7 use_item,name=rune_of_zeth
Item(Trinket0Slot usable=1)
Item(Trinket1Slot usable=1)
#8 blood_fury
Spell(BLOODFURY)
#9 volcanic_potion,if=buff.bloodlust.react|!in_combat|target.health_pct<=20
if CheckBoxOn(potion) and TargetClassification(worldboss) and { BuffPresent(heroism) or InCombat(no) or TargetLifePercent(less 20) } Item(VOLCANICPOTION usable=1)
#A demon_soul
Spell(DEMONSOUL)
}
AddIcon help=main mastery=1
{
# not included in simc because of optimal raid environmet
if List(curse elements) and TargetDebuffExpires(magicaldamagetaken) and TargetDeadIn(more 8) Spell(CURSEELEMENTS)
if List(curse weakness) and TargetDebuffExpires(CURSEWEAKNESS) and TargetDeadIn(more 8) Spell(CURSEWEAKNESS)
if List(curse tongues) and TargetDebuffExpires(CURSETONGUES) and TargetDeadIn(more 8) Spell(CURSETONGUES)
#B corruption,if=(!ticking|remains<tick_time)&miss_react
if TargetDebuffExpires(CORRUPTION 3 mine=1 haste=spell) and TargetDebuffExpires(SEEDOFCORRUPTION 0 mine=1) Spell(CORRUPTION)
#C unstable_affliction,if=(!ticking|remains<(cast_time+tick_time))&target.time_to_die>=5&miss_react
if TargetDebuffExpires(UNSTABLEAFFLICTION 5.5 mine=1 haste=spell) and TargetDeadIn(more 5) Spell(UNSTABLEAFFLICTION)
#D bane_of_doom,if=target.time_to_die>15&!ticking&miss_react
if TargetDebuffExpires(BANEOFDOOM 0 mine=1) and TargetDebuffExpires(BANEOFAGONY 0 mine=1)
{
if List(bane doom) and TargetDeadIn(more 15) Spell(BANEOFDOOM)
if TargetDeadIn(more 10) Spell(BANEOFAGONY)
}
#E haunt
Spell(HAUNT)
#F summon_doomguard,if=time>10
if TimeInCombat(more 10) Spell(SUMMONDOOMGUARD)
#G drain_soul,interrupt=1,if=target.health_pct<=25
if TargetLifePercent(less 25) Spell(DRAINSOUL)
#H shadowflame
if TargetDistance(less 8) Spell(SHADOWFLAME)
#I life_tap,mana_percentage<=35
if ManaPercent(less 35) Spell(LIFETAP)
#J soulburn,if=buff.demon_soul_felhunter.down
unless BuffPresent(DEMONSOULBUFF) Spell(SOULBURN usable=1)
#K soul_fire,if=buff.soulburn.up
if BuffPresent(SOULBURN) Spell(SOULFIRE)
#L shadow_bolt
Spell(SHADOWBOLT)
#O life_tap
if ManaPercent(less 80) Spell(LIFETAP)
}
AddIcon mastery=1 #moving
{
#6 snapshot_stats
# not included in simc because of optimal raid environmet
if List(curse elements) and TargetDebuffExpires(magicaldamagetaken 0) and TargetDeadIn(more 8) Spell(CURSEELEMENTS)
if List(curse weakness) and TargetDebuffExpires(CURSEWEAKNESS 2) and TargetDeadIn(more 8) Spell(CURSEWEAKNESS)
if List(curse tongues) and TargetDebuffExpires(CURSETONGUES 2) and TargetDeadIn(more 8) Spell(CURSETONGUES)
#B corruption,if=(!ticking|remains<tick_time)&miss_react
if TargetDebuffExpires(CORRUPTION 3 mine=1 haste=spell) and TargetDebuffExpires(SEEDOFCORRUPTION 0 mine=1) Spell(CORRUPTION)
#D bane_of_doom,if=target.time_to_die>15&!ticking&miss_react
if TargetDebuffExpires(BANEOFDOOM 0 mine=1) and TargetDebuffExpires(BANEOFAGONY 0 mine=1)
{
if List(bane doom) and TargetDeadIn(more 15) Spell(BANEOFDOOM)
if TargetDeadIn(more 10) Spell(BANEOFAGONY)
}
#F summon_doomguard,if=time>10
if TimeInCombat(more 10) Spell(SUMMONDOOMGUARD)
#H shadowflame
if TargetDistance(less 8) Spell(SHADOWFLAME)
#I life_tap,mana_percentage<=35
if ManaPercent(less 35) Spell(LIFETAP)
#J soulburn,if=buff.demon_soul_felhunter.down
unless BuffPresent(DEMONSOULBUFF) Spell(SOULBURN usable=1)
#K soul_fire,if=buff.soulburn.up
if BuffPresent(SOULBURN) Spell(SOULFIRE)
#L shadow_bolt
if BuffPresent(SHADOWTRANCE) Spell(SHADOWBOLT)
#M life_tap,moving=1, if=mana_pct<80&mana_pct<target.health_pct
if ManaPercent(less 80) and { manaPercent() < target.lifePercent() } Spell(LIFETAP)
#N fel_flame,moving=1
Spell(FELFLAME)
#O life_tap
if ManaPercent(less 80) Spell(LIFETAP)
}
AddIcon help=buff size=small mastery=2
{
#0 flask,type=draconic_mind
if CheckBoxOn(flask) and BuffExpires(FLASKOFTHEDRACONICMINDBUFFSINGLE 0) and BuffExpires(FLASKOFTHEDRACONICMINDBUFFGROUP 0) Item(FLASKOFTHEDRACONICMIND)
#1 food,type=seafood_magnifique_feast
if CheckBoxOn(food) and InCombat(no) and BuffExpires(WELLFED 0) Item(FOOD)
#2 fel_armor
if BuffExpires(FELARMOR) Spell(FELARMOR)
#3 summon_felguard,if=cooldown.demon_soul.remains<5&cooldown.metamorphosis.remains<5&!pet.felguard.active
if 5s before Spell(DEMONSOUL) and 5s before Spell(METAMORPHOSIS) unless Spell(AXETOSS usable=1) Spell(SUMMONFELGUARD)
#3 summon_felguard,if=cooldown.demon_soul.remains<5&cooldown.metamorphosis.remains<5&!pet.felguard.active
if PetPresent(no)
{
if InCombat(yes) Spell(SOULBURN usable=1)
Spell(SUMMONFELGUARD)
}
#4 dark_intent
if BuffExpires(DARKINTENTBUFF) Spell(DARKINTENT)
#5 soulburn,if=!in_combat #seems to only make sense in simc, but not in real world, instead:
if InCombat(no) and SoulShards(less 2) Spell(SOULHARVEST)
if ItemCount(HEALTHSTONE less 1) and InCombat(no) Spell(RITUALOFSOULS)
if ItemCount(HEALTHSTONE less 1) and InCombat(yes) Spell(CREATEHEALTHSTONE)
}
AddIcon help=offgcd size=small mastery=2
{
#6 snapshot_stats
#7 use_item,name=moonwell_chalice,if=cooldown.metamorphosis.remains=0|cooldown.metamorphosis.remains>cooldown
if Spell(METAMORPHOSIS usable=1)
{
Item(Trinket0Slot usable=1)
Item(Trinket1Slot usable=1)
}
unless 100s before Spell(METAMORPHOSIS usable=1)
{
Item(Trinket0Slot usable=1)
Item(Trinket1Slot usable=1)
}
#8 blood_fury
Spell(BLOODFURY)
#9 volcanic_potion,if=buff.metamorphosis.up|!in_combat
if CheckBoxOn(potion) and TargetClassification(worldboss) and { BuffPresent(METAMORPHOSIS) or InCombat(no) } Item(VOLCANICPOTION usable=1)
#A metamorphosis,if=buff.moonwell_chalice.up&pet.felguard.active
if Spell(AXETOSS usable=1)
{
unless 100s before Item(Trinket0Slot usable=1) Spell(METAMORPHOSIS)
unless 100s before Item(Trinket1Slot usable=1) Spell(METAMORPHOSIS)
}
#B demon_soul,if=buff.metamorphosis.up
if BuffPresent(METAMORPHOSIS) Spell(DEMONSOUL)
#C summon_doomguard,if=time>10
if TimeInCombat(more 10) Spell(SUMMONDOOMGUARD)
#D felguard:felstorm
Spell(FELSTORM usable=1)
#E soulburn,if=pet.felguard.active&!pet.felguard.dot.felstorm.ticking
if Spell(AXETOSS usable=1) and 39s before Spell(FELSTORM) unless Spell(FELSTORM usable=1) Spell(SOULBURN usable=1)
#F summon_felhunter,if=!pet.felguard.dot.felstorm.ticking&pet.felguard.active
if Spell(AXETOSS usable=1) and 39s before Spell(FELSTORM) unless Spell(FELSTORM usable=1) Spell(SUMMONFELHUNTER)
}
AddIcon help=main mastery=2
{
# not included in simc because of optimal raid environmet
if List(curse elements) and TargetDebuffExpires(magicaldamagetaken 0) and TargetDeadIn(more 8) Spell(CURSEELEMENTS)
if List(curse weakness) and TargetDebuffExpires(CURSEWEAKNESS 2) and TargetDeadIn(more 8) Spell(CURSEWEAKNESS)
if List(curse tongues) and TargetDebuffExpires(CURSETONGUES 2) and TargetDeadIn(more 8) Spell(CURSETONGUES)
#G immolate,if=!ticking&target.time_to_die>=4&miss_react
if TargetDebuffExpires(IMMOLATE 2 mine=1 haste=spell) and TargetDeadIn(more 4) Spell(IMMOLATE)
#H bane_of_doom,if=(!ticking|(buff.metamorphosis.up&remains<45))&target.time_to_die>=15&miss_react
if List(bane doom) and TargetDeadIn(more 15) and BuffPresent(METAMORPHOSIS) and TargetDebuffPresent(BANEOFDOOM 0 mine=1) and TargetDebuffExpires(BANEOFDOOM 45 mine=1)
{
Spell(BANEOFDOOM)
}
if TargetDebuffExpires(BANEOFDOOM 0 mine=1) and TargetDebuffExpires(BANEOFAGONY 0 mine=1)
{
if List(bane doom) and TargetDeadIn(more 15) Spell(BANEOFDOOM)
if TargetDeadIn(more 10) Spell(BANEOFAGONY)
}
#I corruption,if=(remains<tick_time|!ticking)&target.time_to_die>=6&miss_react
if TargetDebuffExpires(CORRUPTION 2 mine=1 haste=spell) and TargetDebuffExpires(SEEDOFCORRUPTION 0 mine=1) and TargetDeadIn(more 6) Spell(CORRUPTION)
#J shadowflame
if TargetDistance(less 8) Spell(SHADOWFLAME)
#K hand_of_guldan
Spell(HANDOFGULDAN)
#L immolation_aura,if=buff.metamorphosis.remains>10
if BuffPresent(METAMORPHOSIS 10) and TargetDistance(less 8) Spell(IMMOLATIONAURA)
#M shadow_bolt,if=buff.shadow_trance.react
if BuffPresent(SHADOWTRANCE) Spell(SHADOWBOLT)
#N incinerate,if=buff.molten_core.react
if BuffPresent(MOLTENCORE) Spell(INCINERATE)
#O soul_fire,if=buff.decimation.up
if BuffPresent(DECIMATION) Spell(SOULFIRE)
#P life_tap,if=mana_pct<=30&buff.bloodlust.down&buff.metamorphosis.down&buff.demon_soul_felguard.down
if ManaPercent(less 30) and BuffExpires(heroism) and BuffExpires(METAMORPHOSIS) and BuffExpires(DEMONSOULBUFF) Spell(LIFETAP)
#Q shadow_bolt
Spell(SHADOWBOLT)
#T life_tap
if ManaPercent(less 80) Spell(LIFETAP)
}
AddIcon mastery=2 #moving
{
# not included in simc because of optimal raid environmet
if List(curse elements) and TargetDebuffExpires(magicaldamagetaken 0) and TargetDeadIn(more 8) Spell(CURSEELEMENTS)
if List(curse weakness) and TargetDebuffExpires(CURSEWEAKNESS 2) and TargetDeadIn(more 8) Spell(CURSEWEAKNESS)
if List(curse tongues) and TargetDebuffExpires(CURSETONGUES 2) and TargetDeadIn(more 8) Spell(CURSETONGUES)
#H bane_of_doom,if=(!ticking|(buff.metamorphosis.up&remains<45))&target.time_to_die>=15&miss_react
if List(bane doom) and TargetDeadIn(more 15) and BuffPresent(METAMORPHOSIS) and TargetDebuffPresent(BANEOFDOOM 0 mine=1) and TargetDebuffExpires(BANEOFDOOM 45 mine=1)
{
Spell(BANEOFDOOM)
}
if TargetDebuffExpires(BANEOFDOOM 0 mine=1) and TargetDebuffExpires(BANEOFAGONY 0 mine=1)
{
if List(bane doom) and TargetDeadIn(more 15) Spell(BANEOFDOOM)
if TargetDeadIn(more 10) Spell(BANEOFAGONY)
}
#I corruption,if=(remains<tick_time|!ticking)&target.time_to_die>=6&miss_react
if TargetDebuffExpires(CORRUPTION 2 mine=1 haste=spell) and TargetDebuffExpires(SEEDOFCORRUPTION 0 mine=1) and TargetDeadIn(more 6) Spell(CORRUPTION)
#J shadowflame
if TargetDistance(less 8) Spell(SHADOWFLAME)
#L immolation_aura,if=buff.metamorphosis.remains>10
if BuffPresent(METAMORPHOSIS 10) and TargetDistance(less 8) Spell(IMMOLATIONAURA)
#M shadow_bolt,if=buff.shadow_trance.react
if BuffPresent(SHADOWTRANCE) Spell(SHADOWBOLT)
#P life_tap,if=mana_pct<=30&buff.bloodlust.down&buff.metamorphosis.down&buff.demon_soul_felguard.down
if ManaPercent(less 30) and BuffExpires(heroism) and BuffExpires(METAMORPHOSIS) and BuffExpires(DEMONSOULBUFF) Spell(LIFETAP)
#R life_tap,moving=1,if=mana_pct<80&mana_pct<target.health_pct
if ManaPercent(less 80) and { manaPercent() < target.lifePercent() } Spell(LIFETAP)
#S fel_flame,moving=1
Spell(FELFLAME)
#T life_tap
if ManaPercent(less 80) Spell(LIFETAP)
}
AddIcon help=buff size=small mastery=3
{
#0 flask,type=draconic_mind
if CheckBoxOn(flask) and BuffExpires(FLASKOFTHEDRACONICMINDBUFFSINGLE 0) and BuffExpires(FLASKOFTHEDRACONICMINDBUFFGROUP 0) Item(FLASKOFTHEDRACONICMIND)
#1 food,type=seafood_magnifique_feast
if CheckBoxOn(food) and InCombat(no) and BuffExpires(WELLFED 0) Item(FOOD)
#2 fel_armor
if BuffExpires(FELARMOR) Spell(FELARMOR)
#3 summon_imp
if PetPresent(no)
{
if InCombat(yes) Spell(SOULBURN usable=1)
Spell(SUMMONIMP)
}
#4 dark_intent
if BuffExpires(DARKINTENTBUFF) Spell(DARKINTENT)
#5 soulburn,if=!in_combat #seems to only make sense in simc, but not in real world, instead:
if InCombat(no) and SoulShards(less 2) Spell(SOULHARVEST)
if ItemCount(HEALTHSTONE less 1) and InCombat(no) Spell(RITUALOFSOULS)
if ItemCount(HEALTHSTONE less 1) and InCombat(yes) Spell(CREATEHEALTHSTONE)
}
AddIcon help=offgcd size=small mastery=1,3
{
#7 use_item,name=balespiders_handwraps
Item(Trinket0Slot usable=1)
Item(Trinket1Slot usable=1)
#8 blood_fury
Spell(BLOODFURY)
#9 volcanic_potion,if=buff.bloodlust.react|!in_combat|target.health_pct<=20
if CheckBoxOn(potion) and TargetClassification(worldboss) and { BuffPresent(heroism) or InCombat(no) or TargetLifePercent(less 20) } Item(VOLCANICPOTION usable=1)
#A demon_soul
Spell(DEMONSOUL)
}
AddIcon help=main mastery=3
{
# not included in simc because of optimal raid environmet
if List(curse elements) and TargetDebuffExpires(magicaldamagetaken 0) and TargetDeadIn(more 8) Spell(CURSEELEMENTS)
if List(curse weakness) and TargetDebuffExpires(CURSEWEAKNESS 2) and TargetDeadIn(more 8) Spell(CURSEWEAKNESS)
if List(curse tongues) and TargetDebuffExpires(CURSETONGUES 2) and TargetDeadIn(more 8) Spell(CURSETONGUES)
#B soulburn,if=buff.bloodlust.down
if BuffExpires(heroism) Spell(SOULBURN)
#C soul_fire,if=buff.soulburn.up
if BuffPresent(SOULBURN) Spell(SOULFIRE)
#D immolate,if=(remains<cast_time+gcd|!ticking)&target.time_to_die>=4&miss_react
if TargetDebuffExpires(IMMOLATE 2 mine=1 haste=spell) and TargetDeadIn(more 4) Spell(IMMOLATE)
#E conflagrate
Spell(CONFLAGRATE)
#F bane_of_doom,if=!ticking&target.time_to_die>=15&miss_react
if TargetDebuffExpires(BANEOFDOOM 0 mine=1) and TargetDebuffExpires(BANEOFAGONY 0 mine=1) and TargetDebuffExpires(BANEOFHAVOC 0 mine=1)
{
if List(bane doom) and TargetDeadIn(more 15) Spell(BANEOFDOOM)
if TargetDeadIn(more 10) unless List(bane havoc) Spell(BANEOFAGONY)
if TargetDeadIn(more 10) Spell(BANEOFHAVOC)
}
#G corruption,if=(!ticking|dot.corruption.remains<tick_time)&miss_react
if TargetDebuffExpires(CORRUPTION 3 mine=1 haste=spell) and TargetDebuffExpires(SEEDOFCORRUPTION 0 mine=1) Spell(CORRUPTION)
#H shadowflame
if TargetDistance(less 8) Spell(SHADOWFLAME)
#I soul_fire,if=buff.empowered_imp.react&buff.empowered_imp.remains<(buff.improved_soul_fire.remains+action.soul_fire.travel_time)
if TalentPoints(IMPROVEDSOULFIRE more 0) and BuffExpires(IMPROVEDSOULFIREBUFF 0) and BuffExpires(EMPOWEREDIMP 0) Spell(SOULFIRE)
#J chaos_bolt
Spell(CHAOSBOLT)
#K summon_doomguard,if=time>10
if TimeInCombat(more 10) Spell(SUMMONDOOMGUARD)
#L soul_fire,if=buff.improved_soul_fire.remains<(cast_time+travel_time+action.incinerate.cast_time+gcd)&!in_flight
if TalentPoints(IMPROVEDSOULFIRE more 0) and buffExpires(IMPROVEDSOULFIREBUFF) < { castTime(SOULFIRE) + castTime(INCINERATE) + timeWithHaste(1.5) + 1 } Spell(SOULFIRE)
#M shadowburn
Spell(SHADOWBURN usable=1)
#N incinerate
Spell(INCINERATE)
#Q life_tap
if ManaPercent(less 80) Spell(LIFETAP)
}
AddIcon help=main mastery=3 #moving
{
# not included in simc because of optimal raid environmet
if List(curse elements) and TargetDebuffExpires(magicaldamagetaken 0) and TargetDeadIn(more 8) Spell(CURSEELEMENTS)
if List(curse weakness) and TargetDebuffExpires(CURSEWEAKNESS 2) and TargetDeadIn(more 8) Spell(CURSEWEAKNESS)
if List(curse tongues) and TargetDebuffExpires(CURSETONGUES 2) and TargetDeadIn(more 8) Spell(CURSETONGUES)
#B soulburn,if=buff.bloodlust.down
if BuffExpires(heroism) Spell(SOULBURN)
#C soul_fire,if=buff.soulburn.up
if BuffPresent(SOULBURN) Spell(SOULFIRE)
#E conflagrate
Spell(CONFLAGRATE)
#F bane_of_doom,if=!ticking&target.time_to_die>=15&miss_react
if TargetDebuffExpires(BANEOFDOOM 0 mine=1) and TargetDebuffExpires(BANEOFAGONY 0 mine=1) and TargetDebuffExpires(BANEOFHAVOC 0 mine=1)
{
if List(bane doom) and TargetDeadIn(more 15) Spell(BANEOFDOOM)
if TargetDeadIn(more 10) unless List(bane havoc) Spell(BANEOFAGONY)
if TargetDeadIn(more 10) Spell(BANEOFHAVOC)
}
#G corruption,if=(!ticking|dot.corruption.remains<tick_time)&miss_react
if TargetDebuffExpires(CORRUPTION 3 mine=1 haste=spell) and TargetDebuffExpires(SEEDOFCORRUPTION 0 mine=1) Spell(CORRUPTION)
#H shadowflame
if TargetDistance(less 8) Spell(SHADOWFLAME)
#K summon_doomguard,if=time>10
if TimeInCombat(more 10) Spell(SUMMONDOOMGUARD)
#M shadowburn
Spell(SHADOWBURN usable=1)
#O life_tap,moving=1,if=mana_pct<80&mana_pct<target.health_pct
if ManaPercent(less 80) and { manaPercent() < target.lifePercent() } Spell(LIFETAP)
#P fel_flame,moving=1
Spell(FELFLAME)
#Q life_tap
if ManaPercent(less 80) Spell(LIFETAP)
}
By changing the bane of doom action in the T12H profile to bane_of_doom,if=target.time_to_die>=15&miss_react&(!ticking|(remains<45&buff.metamorp hosis.up)) I was able to simulate a 300 DPS increase from the original profile at 37038 DPS, up from 36731.
The logic is is similar to what VoidStar has mentioned. I had actually wanted to simulate the action of reapplying BoD every time meta is popped, and then refresh it right before meta ends, so that you'll be able to get 6(?) ticks of BoD with meta.
So I tried changing the bane of doom conditional to this: bane_of_doom,if=target.time_to_die>=15&miss_react&(!ticking|(remains<45&buff.metamorp hosis.up&(buff.metamorphosis.remains>30|buff.metamorphosis.remains<6))) but it was only a 100 DPS increase from the original T12H profile, compared to the former one which gave a 300 DPS increase. Both profiles had the same BoD counts, but the latter's actually had a lesser total amount of BoD damage done. I suppose this is because the first conditional actually does line up BoD with Meta as well as Demon Soul but the latter does not? Still trying to figure it out though.
Also, I modified the action priorities in the T12H profile as well, and gained another 200 DPS at 37224 DPS, making it a grand total of a 500 DPS increase, combined with the modified BoD conditional.
This is the action priority list which I used, bolded parts are the action which I changed.
I first noticed a DPS increase when I tried this priority list on my own toon, as this is exactly the way I actually play my lock in-game. I prioritise shadowflame above HoG due to it having a higher DPE, and also since you have a 36 second window during meta to pop Immolation Aura, you could always hold back until you have most/all of your procs up and use it then, so I actually moved it down the priority list.
By changing the bane of doom action in the T12H profile to bane_of_doom,if=target.time_to_die>=15&miss_react&(!ticking|(remains<45&buff.metamorp hosis.up)) I was able to simulate a 300 DPS increase from the original profile at 37038 DPS, up from 36731.
The logic is is similar to what VoidStar has mentioned. I had actually wanted to simulate the action of reapplying BoD every time meta is popped, and then refresh it right before meta ends, so that you'll be able to get 6(?) ticks of BoD with meta.
So I tried changing the bane of doom conditional to this: bane_of_doom,if=target.time_to_die>=15&miss_react&(!ticking|(remains<45&buff.metamorp hosis.up&(buff.metamorphosis.remains>30|buff.metamorphosis.remains<6))) but it was only a 100 DPS increase from the original T12H profile, compared to the former one which gave a 300 DPS increase. Both profiles had the same BoD counts, but the latter's actually had a lesser total amount of BoD damage done. I suppose this is because the first conditional actually does line up BoD with Meta as well as Demon Soul but the latter does not? Still trying to figure it out though.
Also, I modified the action priorities in the T12H profile as well, and gained another 200 DPS at 37224 DPS, making it a grand total of a 500 DPS increase, combined with the modified BoD conditional.
This is the action priority list which I used, bolded parts are the action which I changed.
I first noticed a DPS increase when I tried this priority list on my own toon, as this is exactly the way I actually play my lock in-game. I prioritise shadowflame above HoG due to it having a higher DPE, and also since you have a 36 second window during meta to pop Immolation Aura, you could always hold back until you have most/all of your procs up and use it then, so I actually moved it down the priority list.
Hmm, you could be on to something Hystify: I believe that my suggestion was guaranteed to be at least as good as the current behaviour, but your suggestion may be even better.
It's actually possible to get seven ticks of Doom enhanced by a single Meta with your strategy, but it requires you to have the tick from a previous doom scheduled to tick within 6 seconds of the start of Meta, and to recast your Doom in that gap. In this scenario you only get the Demon Soul buff for two of those ticks as well, which is a shame. You'll always get at least 5 enhanced ticks out of this strategy.
If you restrict the doom refresh behaviour such that it's only during both meta and demon soul then you restrict yourself to at most 6 enhanced doom ticks (and at least 5) but all those ticks benefit from both Meta and Demon Soul, and six ticks enhanced by both gives a greater bonus than 2 meta + ds & 5 meta alone as long as your meta bonus is less than 66%.
I believe that the best Doom enchancing strategy that always gets either 6 or 7 doubly enhanced ticks and never casts an unnecessary Doom during Meta is to cast Doom ASAP after you pop Meta/Demon Soul and then to cast Doom again after the last tick of Doom that occurs before the end of Demon Soul, but I can't think of a way of writing such a conditional within Simcraft!
I believe that the best Doom enchancing strategy that always gets either 6 or 7 doubly enhanced ticks and never casts an unnecessary Doom during Meta is to cast Doom ASAP after you pop Meta/Demon Soul and then to cast Doom again after the last tick of Doom that occurs before the end of Demon Soul, but I can't think of a way of writing such a conditional within Simcraft!
Due to the high amount of mastery on the T12H profile, coupled with MWC, it puts it around ~80% additional damage during meta. Thus it probably would be better for it to have 2+5 empowered ticks of BoD, so I decided to sim it again with a new conditional:
I actually added in the &cooldown.demon_soul.remains>30 condition back into the action which was in the original profile. Basically this makes it such that it will not cast BoD during the 15 second downtime after the 7 empowered ticks of BoD are over and while waiting for Meta/DS/MWC to go off cooldown.
Running the T12H profile with this BoD conditional and my modified priority list netted 36932 DPS, which is actually 300 DPS lower than my original BoD conditional.
Using 420-5 and my battle.net Demo profile simcraft is summoning a felhunter despite having lash of pain glyph.
Yep, we no longer pick pets for demo based on what glyph you have, because felhunter is the clearly superior choice. If you desperately want to sim yourself with a different pet just modify the default action list after importing.
Yep, we no longer pick pets for demo based on what glyph you have, because felhunter is the clearly superior choice. If you desperately want to sim yourself with a different pet just modify the default action list after importing.
Hmm, maybe I am doing something wrong then.
Using my current setup with 1000 iterations and healterskelter mode and modifying the import setting to summon succubus and incinerate as my filler my profile sims out to 21603dps.
Using the standard spec and the default import settings I sim out 21473dps.
I used the same gear in both setups.
edit - Yes I realized I didnt have dark arts since it didnt benefit the succubus. I just modified my chardev profile and fix the spec and it still sims slightly lower.
No idea where you have this "standard spec" chardev link from, but that profile doesn't have the Dark Arts talent, which buffs both your felguard and your felhunter.
Yes, you caught my mistake fast I was thinking about the mods I made to chardev profile and realized I didnt make all the changes necessary; with my current raiding spec I use the succubus and have no use to dark artt and forgot to make that change in the demo tree. I edited the post above.
Import settings based on editted chardev profile below sims to 21473 .