Multipliers snapshotting for spells with travel time #3335

Closed
nuoHep opened this Issue Jan 8, 2017 · 11 comments

Projects

None yet

3 participants

@nuoHep
Contributor
nuoHep commented Jan 8, 2017

Really only concerns dd actions/spells with travel time.

Currently (in the engine) actions calculate the final damage amount in ::execute(), after that they are basically immutable (damage numbers wise) with ::impact() simply doing damage accounting.

In-game though it looks like the final damage is calculated on impact and spells snapshot different multipliers at different times. I did not do very extensive testing, but my current theory from the testing I've done is that target debuffs "state" gets snapshotted on cast end while player buffs are accounted for on impact.

The latter is easily (somewhat) testable with a mage (even the premade one, though higher haste levels make it easier) by standing at max range and casting RoP right after Frostbolt (or any spell with low travel speed) - Frostbolt benefits from RoP even though RoP buff is applied while the FB is in flight.
Rapid Killing (buff from MM artifact trait that boosts crit damage) behaves the same - it (Trueshot which applies it) may be activated after Windburst cast, with the projectile in the air, and it will affect it; conversely if it [Rapid Killing] fades while Windburst is mid-flight it does not affect it on impact.

The former is pretty common knowledge, I believe. For MM hunters, for example, Vulnerable is accounted for on cast end, which can be easily checked with a variety of scenarios and is usually taken advantage of in play.

TL;DR:

  • actions should do damage calculation in ::impact()
  • action_state_t should be split into target/player parts with the former snapshotted in ::execute() and the latter in ::impact() (or it should simply snapshot only the "target" part in ::execute())
@navv1234
Contributor
navv1234 commented Jan 8, 2017

Blizzard designed Frost Mages to compute damage on impact. This is a special case. Would be interested in seeing some logs where target-based multipliers affect in flight projectiles for other classes. Lava Burst for example is the converse, it checks for the presence of the target-based aura (Flame Shock) when the spell is cast and generates damage based on that, not when the bolt of lava impacts the target.

@nuoHep
Contributor
nuoHep commented Jan 8, 2017 edited

I'm mostly talking about player-based multipliers here.

What really prompted me doing the testing and writing this is Trueshot / Rapid Killing. Which affects in-flight projectiles.
Then I decided to test some other classes (and buff types) - Frost was the first choice as it both has a slow projectile in Frostbolt and a player +dmg buff in RoP.

@navv1234
Contributor
navv1234 commented Jan 8, 2017 edited

Sure, but Blizzard has outright stated that Frost is a special case here (they compute damage on impact, instead of cast finish). If you can do WCL logs where this effect is shown for trueshot / rapid killing, i'd be really interested. (And then it begs the question what has happened, since it's not supposed to work like that)

@nuoHep
Contributor
nuoHep commented Jan 8, 2017 edited

Quick testing as I can't find the old logs atm
https://www.warcraftlogs.com/reports/4zYVkRQL93qKBP6H/
the last Windburst there is with Trueshot activated after Windburst SPELL_CAST_SUCCESS

I'm not proficient enough with WCL, but the relevant log lines are

1/8 16:06:28.235  SPELL_CAST_SUCCESS,Player-1598-06E9661C,"Shermy-Sunstrider",0x511,0x0,Creature-0-3895-1116-18-87762-00006C7AA0,"Raider's Training Dummy",0x10a28,0x0,204147,"Windburst",0x1,Player-1598-06E9661C,0000000000000000,2547600,2547600,25821,6005,2,106,150,20,5236.73,-4129.05,823
1/8 16:06:28.543  SPELL_AURA_APPLIED,Player-1598-06E9661C,"Shermy-Sunstrider",0x511,0x0,Player-1598-06E9661C,"Shermy-Sunstrider",0x511,0x0,193526,"Trueshot",0x1,BUFF
1/8 16:06:28.543  SPELL_CAST_SUCCESS,Player-1598-06E9661C,"Shermy-Sunstrider",0x511,0x0,0000000000000000,nil,0x80000000,0x80000000,193526,"Trueshot",0x1,Player-1598-06E9661C,0000000000000000,2547600,2547600,25821,6005,2,89,150,0,5236.73,-4129.05,823
1/8 16:06:28.543  SPELL_AURA_APPLIED,Player-1598-06E9661C,"Shermy-Sunstrider",0x511,0x0,Player-1598-06E9661C,"Shermy-Sunstrider",0x511,0x0,191342,"Rapid Killing",0x1,BUFF
1/8 16:06:28.877  SPELL_DAMAGE,Player-1598-06E9661C,"Shermy-Sunstrider",0x511,0x0,Creature-0-3895-1116-18-87762-00006C7AA0,"Raider's Training Dummy",0x10a28,0x0,204147,"Windburst",0x1,Creature-0-3895-1116-18-87762-00006C7AA0,0000000000000000,1,10832800,0,0,1,0,0,0,5237.46,-4156.50,103,1439845,1183622,1,0,0,0,1,nil,nil

while Windburst without Rapid Killing does sub 1m crits:

1/8 16:02:31.792  SPELL_DAMAGE,Player-1598-06E9661C,"Shermy-Sunstrider",0x511,0x0,Creature-0-3895-1116-18-87762-00006C7AA0,"Raider's Training Dummy",0x10a28,0x0,204147,"Windburst",0x1,Creature-0-3895-1116-18-87762-00006C7AA0,0000000000000000,1,10832800,0,0,1,0,0,0,5237.46,-4156.50,103,959924,959923,1,0,0,0,1,nil,nil
@navv1234
Contributor
navv1234 commented Jan 8, 2017

You are talking about critical damage here? It indeed looks like buffs that affect critical damage bonus can be applied at impact, which probably means critical damage is actually calculated at impact.

@nuoHep
Contributor
nuoHep commented Jan 8, 2017

Yeah, Rapid Killing is a critical damage bonus multiplier buff.
I'm currently trying to test RoP on a Fire mage.

@nuoHep
Contributor
nuoHep commented Jan 8, 2017

Premade mages do not have enough haste (even under TW) to test Fireball -> RoP (or I'm doing something wrong). But at least blinking out of RoP with Fireball in flight retains the RoP bonus on it, so I guess it really is only about critical damage.

@navv1234
Contributor
navv1234 commented Jan 8, 2017

Yep, that would be my guess also. But it may also mean that "critical strike success" is rolled on impact. This would change some timing-related things. I'll see if Blizzard wants to comment on this stuff, and then look at what to do in the core to adjust the critical strike bonus damage computation.

@Collisionc
Contributor

I don't think crit chance is rolled on impact, at least on warrior.

Cast storm bolt (has travel time)
Immediately press battle cry - 100% crit
Storm bolt will not crit everytime on impact.

@navv1234
Contributor

Nay, it is looking like it's only critical bonus damage.

@navv1234
Contributor

Changed this behavior in c745ee8.

@navv1234 navv1234 closed this Jan 15, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment