View Issue Details

IDProjectCategoryView StatusLast Update
0027571Legion CoreGeneralpublic2024-05-25 06:01
Reporterwrptn2Assigned Togodxx 
PriorityurgentSeveritycrashReproducibilityalways
Status acknowledgedResolutionopen 
Summary0027571: Dot clipping mechanics and partial dot ticks
Description1. Partial DoT ticks are not implemented.

Whenever a DoT ends, extra damage is supposed to be calculated based on the time spent for a tick that never happened because the aura expired. This is a consequence of haste: haste shortens the interval of time between DoTs but does not reduce the duration of the aura. That's how it worked in Cataclysm, but it no longer does starting from Warlords of Draenor.

Say you have a DoT that lasts 12 seconds and ticks every 3 seconds. With 5% haste, the new tick speed is 3/1.05 = 2.85 seconds. That means you are expected to get 12/2.85=4.2 ticks. The timeline looks like this:

00.00 AURA APPLIED
02.85 TICK
05.70 TICK
08.55 TICK
11.40 TICK
12.00 PARTIAL TICK <--- This is not implemented

The damage of the partial tick is calculated as a fraction of the spell's tick speed. It's easier to think of every tick's damage as being a percentage of the time since the tick before that:
00.00 AURA APPLIED
02.85 2.85/2.85 = 100%
05.70 2.85/2.85 = 100%
08.55 2.85/2.85 = 100%
11.40 2.85/2.85 = 100%
12.00 0.60/2.85 = 21% <----- NON FUNCTIONAL

Prior to Warlords of Draenor, that final "bonus" tick would not happen, and the spell duration would be adjusted to include either 4 ticks or an extra 5th tick. But Warlords of Draenor **removed** aura duration scaling with haste. Instead, this partial tick mechanic was introduced.

2. DoT Clipping is not implemented.

Whenever a dot is reapplied while active, any time remaining towards the next tick of the previous application would be carried over and would be used as the initial period of the spell. Here is a timeline, again with our imaginary spell

00.00 AURA APPLIED
02.85 TICK
05.70 TICK
08.55 TICK
10.00 AURA REFRESHED
11.40 TICK
14.25 TICK
17.10 TICK
19.95 TICK
22.80 TICK
24.00 PARTIAL TICK

Notice that the time of the first tick after refreshing the aura is relative to the last tick of the previous application. THIS DOES NOT WORK EITHER.
Notice also that a partial tick has been added, because even if the aura was refreshed 2 seconds before it would initially expire, that duration still needs to carry over, because we effectively cast our DoT twice
Steps To Reproduce1. Create a shadowpriest
2. Get some amount of haste.
3. Create a new WeakAura with the following trigger: https://i.imgur.com/ZHecpd3.png
    Lua Code:
```
function(s, waEvent, ...)
  local timestamp, event, hideCaster, sourceGUID, sourceName, sourceFlags, sourceRaidFlags, destGUID, destName, destFlags, destRaidFlags, spellID, spellName,spellSchool,auraType = ...
  
  if (waEvent == "COMBAT_LOG_EVENT_UNFILTERED") then
    if (sourceGUID ~= UnitGUID("player")) then
      return false
    end
    
    if (event == "SPELL_AURA_REMOVED" or event == "SPELL_AURA_APPLIED" or event == "SPELL_DAMAGE" or event == "SPELL_CAST_SUCCESS") then
      SendChatMessage(timestamp .. "[" .. event .. "]: " .. spellID .. " (" .. spellName .. ")", "PARTY")
    end
    
    return false
  end
end
```
4. Cast Vampiric Touch. Refresh it BEFORE THE LAST TICK EXPIRES. https://i.imgur.com/VJxVzBW.png (this is with 4.52% haste)
5. Notice that the time between two ticks around the refresh is larger than the expected tick speed. However, if you instead look at the time between the new application and the first tick, it lines up.
Additional Informationhttps://infuswow.wordpress.com/2014/03/28/partial-ticks-in-warlords-of-draenor/
https://web.archive.org/web/20190318195112/http://iam.yellingontheinternet.com/2014/03/29/behavior-of-dots-and-haste-in-warlords-of-draenor/
Probably everywhere all over simulationcraft

Activities

wrptn2

2023-09-05 01:01

reporter   ~0072272

more info (up to date for DF but mostly accurate, this has not changed since WoD) https://blog.askmrrobot.com/how-wow-works-periodic-damage-and-healing-dots-and-hots/

wrptn2

2023-09-09 01:27

reporter   ~0072317

Also triaged to General because this is a core game mechanic but **really** impacts shadowpriest (because void bolt refreshes vampiric touch and shadow word pain meaning the damage gets delayed more frequently with haste)

wrptn2

2023-09-09 01:58

reporter   ~0072318

For cliary (because i can't edit my previous messages - wtf?), the partial tick of the second example would deal 42% of a normal tick of damage (because we cast twice, we are expected to have 24 seconds overall, so 8.4 ticks, so 8 full ticks + (24 - 8 * 2.85)/2.85 = 42%` of a tick).

Issue History

Date Modified Username Field Change
2023-09-04 22:00 wrptn2 New Issue
2023-09-04 22:00 wrptn2 Status new => assigned
2023-09-04 22:00 wrptn2 Assigned To => Alica228
2023-09-05 01:01 wrptn2 Note Added: 0072272
2023-09-05 07:58 Alica228 Assigned To Alica228 => Kyckax
2023-09-05 11:04 Kyckax Assigned To Kyckax => godxx
2023-09-06 17:43 godxx Status assigned => acknowledged
2023-09-09 01:27 wrptn2 Note Added: 0072317
2023-09-09 01:58 wrptn2 Note Added: 0072318