But…that’s the central core of RPPM. How would the equation even work without that? At that point, it’s effectively just a scaling proc rate based on time since last proc, there’s nothing even remotely RPPM about that.
Without the time since last proc attempt component, how would you even go about calculating the chance on an an AA crit based on said base rate? Unless you just meant some base chance. And if so, again, that’s not RPPM, that’s a fixed base chance and a scaling multiplier by time since last proc.
Besides, not sure that jives with the data either. Or at least, it appears that AA crits are incapable of reaching 100% chance, since we saw failures to proc as far out as 14 seconds from the last proc, despite the proc rate being ~70-75% in at the 6-7s mark. A linear fit would have it hitting 100% around the 11-12s mark.
Thing is, any system that is time sensitive should show similar time-sensitivity with regards to time since last crit, since that time is a subset of the time since last proc. The time since last proc is at minimum the time since last crit, so longer times since last crit should, in general, show larger proc chances, since they also necessarily reflect larger times since last proc, on average. We’re seeing no such time sensitivity with regards to the last crit, which is what is making me suspect that the observed time sensitivity vis a vis the last proc is an artifact of some sort.
I think this is because the slope isn’t as significant. You’d still expect a slope and I think that’s what you see in the data. This is from 24 logs. I might spend some time later to add even more to it.
I mean, the shallower that slope, the more likely we’re just seeing a flat proc chance. Have to keep in mind that the size of the sample goes down precipitously as the time grouping rises, which means much larger error bars and much noisier data.
Really need more data to say tbf, it’s just very time-consuming to pull it. Might look at fights with more natural downtime to populate the points at higher x-values.
They do. I utilised the WCL API to pull a total of 500 logs and boy this is getting interesting. Bear in mind that I might’ve introduced some weird bug as you always do (accidentally picked out non-crit autos in first iteration) but let’s hope not. Here are the graphs:
So there seems to be no correlation between time since last proc attempt and proc rate. However, there is a strong correlation between proc rate and time since last proc. Interestingly enough, this looks to have a peak and then drop at later values?
encounter = "2335" #Shad'har
wow_class = "1" #DK
spec = "2" #Frost
page = "1" #Ranking Page
api_key = "############"
ids = []
for i in range(5):
page = str(i+1+5)
rankings = requests.get("https://www.warcraftlogs.com/v1/rankings/encounter/{}?class= {}&spec={}&page={}&api_key={}"
.format(encounter, wow_class, spec, page, api_key)).json()
for rank in rankings["rankings"]:
ids.append([rank["name"], rank["reportID"]])
start_time=0
end_time=100000000000000
total_data=[]
for id_ in tqdm(ids):
name = id_[0]
fight_id = id_[1]
fight_data = requests.get("https://www.warcraftlogs.com/v1/report/fights/{}? api_key={}"
.format(fight_id,api_key)).json()
for character in fight_data["friendlies"]:
if character["name"] == name:
character_id = character["id"]
km_id = "51124"
km_data = requests.get("https://www.warcraftlogs.com/v1/report/events/buffs/{}?encounter={}&abilityid={}&start={}&end={}&targetid={}&api_key={}"
.format(fight_id, encounter, km_id, start_time,end_time, character_id, api_key)).json()
melee_id = "1"
melee_data = requests.get("https://www.warcraftlogs.com/v1/report/events/damage-done/{}?encounter={}&abilityid={}&start={}&end={}&sourceid={}&api_key={}"
.format(fight_id, encounter, melee_id, start_time,end_time, character_id, api_key)).json()
a = []
for event in melee_data["events"]:
if event["hitType"] == 2:
a.append(event["timestamp"])
b = []
for event in km_data["events"]:
if event["type"] == "applybuff" or event["type"] == "refreshbuff":
b.append(event["timestamp"])
total_data.append([a,b])
EDIT: I’ve limited my data to only show entries below 19 seconds.
Knew there would be an annoying bug. So I’d receive a maximum of 300 entries of buff data, but an unlimited amount of melee stuff. So any log that goes beyond the point would have crit autos without their associate km-procs associated to them. This created a downward bias throughout the data and caused it to dip at higher values of x. I’ve limited my data to only include logs with less than 150 total km procs. I’m also rerunning the data fetch, excluding everything where I’ve reached that max value of 300 entries. I’ll post that as soon as it’s done in 40 min or so.
Ok, I admit myself baffled. It clearly shows an logarithmic curve of probability for time since last proc, but the time since last proc attempt is basically straight up flat, and I don’t understand how those two can coexist. A longer time since last AA crit translates to a higher probability of a longer time since last proc, since it’s impossible for the time since last proc to be shorter than the time since last AA crit. I honestly don’t understand how we could be seeing such different trends between the two.
Either way, I think we’ve distinctly proved it is definitely not PPM or RPPM. I’m not sure what it is, though.
I’ll have a look at fitting the RPPM formula to all of this. It has one multiple which is the time since last proc, and on multiple which is time since last proc attempt.
If time since last proc attempt caps out at 2 seconds, it would be consistent with the data. Contribution from time since last proc could be something like a sigmoid? Looks like it might fit.
Here’s how I think about the time since last proc attempt graph. Let’s say you get a proc at time 20 seconds. Does that give any information on when your last crit auto before that point happened? It’ll give information about the last crit auto that gave you a proc, sure, but it won’t give any information about crit autos that didn’t give you a proc. I think because of this, there’s no correlation.
Not sure if that makes sense, need to think more about it.
Right, but my point is, if the time since last AA crit is, say, 7 seconds, then the time since last proc cannot be less than 7 seconds. If the time is 2, however, you could have time values between 2 and 7, or greater than 7. The probable time since last proc on any given AA crit will be longer the longer the time since last AA crit, so it should also show time sensitive correlation, but it’s not.
Edit: like, if you go through and, for every AA crit, record the time since last AA crit and the time since last KM proc, I’m willing to bet the two will show distinct correlation.
It does show some time sensitive correlation at low x-values.
It’s rather late for me atm so not sure how well my thought train is running. I was thinking about picking a specific X value and thinking about that. If x=7, it was at least 7 seconds ago that you had the last proc, so your proc rate should be at least 0.6 or smth.
I feel like the y-value for an x-value on the proc attempt graph should be a weighted average of the proc graph, starting from the X value and then going to infinity.
I need to have another look at my code, might be something funny going on here…
Right, but the time since last AA graph doesn’t show that. In fact, the data seems impossible. Since the time since last crit is the floor for the time since last proc, it should be impossible for the time since last crit to have a lower probability of proc than the time since last proc for that same interval. And yet it consistently shows close to a 50% proc chance, except at the very low end. And frankly, that’s only really a single data point (the data point for 1 is in line with other ones, it’s a visual artifact that makes it seem like part of the trend line) that’s ~6% lower, I’d hardly call that a conclusive trend.
If it’s anything, was thinking about it at lunch, its a way to get roughly the same amount of procs before it was changed to be based off of crits. Prior to it being based off of auto crits each auto had a 20% change for DW, and 30% chance for 2h (rounding) to proc a km. If they had kept that then it would have been massively lower and the only way to get back to that state would be to have 100% crit chance.
Increasing the proc chance as attempts go on from the last proc would at least provide a somewhat steady stream of KM procs. Given crit is at a somewhat decent level.
So the trigger was changed to crit which was dumb to begin with just by the nature of what the proc did, which was to give a guaranteed crit, and a full guaranteed crit for DW (instead of possible half crits) and that trigger change cut the chance to roll for a km proc down significantly. It looks like it’s a fix, for another fix, for a problem that didn’t exist in the first place or at least a problem that just didn’t matter since you can only spend procs as fast as your resource system will allow (double and sometimes triple procs resulting in procs you couldn’t use).
Actually, changing it to trigger from crits was pretty clever. One of the core issues with any sort of guaranteed crit mechanism is that it considerably devalues crit rating, as a portion of your damage is not affected by increased crit chance. That has to be offset somehow.
For Elemental shaman, it is offset with Elemental Fury, causing their crits to deal 25% more damage. For Destruction, Chaos Bolt’s damage is simply increased by a multiplier equal to your crit chance.
Frost has classically not had a compensation for it, and thus their dominant stat has generally been haste (edit: or mastery, for that weird DW Howling Blast spam build that existed for a while during one of the pre-Legion expansions). Shifting KM procs to trigger from crits serves to offset the depression of crit value. It just doesn’t work in a world of both DW and 2h being supported playstyles.
It may be that the simplest solution is to apply the Chaos Bolt treatment to Killing Machine (ie. Oblit’s damage during KM is increased by a percentage equal to your crit chance), then shift KM back to a normal RPPM system on all auto-attack swings. That also prevents the crit value depression while providing similar proc rates for both 2h and DW.
'Course, it still doesn’t solve the issue that 1h weapons have 12.5% too much intrinsic (ie. weapon tooltip) DPS compared to 2h weapons, but hey, one problem at a time.
I think I solved it! We have been looking at the wrong thing all along. The probability of getting a km proc off a crit auto depends on the number of crits since the last attempt. You have a 30% probability on your first crit. If that doesn’t give you a proc you have 60% on the second one. Again, if no proc you get 90% and then 100%.
I cleaned up the data. Removed everything where you’d have empty arrays pulled from WCL and extreme outliers, 91 logs from that. Also removed logs where you had more than 4 consecutive crit without a proc, 236 logs from that. This left me with a total of 6674 logs. Here’s the graph for proc rate as a function of number of proc attempts since last proc:
This also fits nicely into the previous data we looked at. There is a constant proc rate for time since last proc, since proc rate only depends on number of procs since last proc! The first bump might be due to some shenanigans with main hand/ off hand hit delta, not 100% sure.
Finally, there is an increasing probability for time since last proc, since that correlates to number of crits since last proc. The longer the time, the higher the probability of multiple procs and the higher the proc chance.
This fits nicely in the recent findings of a constant 50% proc chance. The proc chance from the data is 50.2%.
Masterfrost, and people hated it because it removed an aspect of the spec. Any new frost dk player had no idea that if you went DW at a certain mastery point you basically dropped obliterate in favor of Howling Blast. That is dead now though.
But KM giving a crit, while proccing of crits, devalues the proc since you just get regular crits in the first place from your crit rating that you need to even trigger a roll. It’s a dumb way to make crit important. Of course you have murderous efficiency, and Frostscythe which KM procs are important to have in that regard, but actual KM without anything else is just bad. Its not smart design. But then how do you make crit important without making the guaranteed crit less valuable? Adding on a frost damage component is one way of course.
Nice! Yep, that cleanly solves it. Scales with crit rate, as observed, and has built in bad luck protection (well, sorta, you still don’t have any bad luck protection for getting the crit in the first place, but you can’t go 4 or more crits without a proc). The distribution means that the average is every 2.008 crits, which aligns with the observed average 50% ratio of procs to crits. It also explains the low point at the start of the scale, as swings at time category 0 basically cannot have more than 1-2 crits preceding them without proc (depending on whether you rounded or floor the time since last). Good work!
Unfortunately, this mechanism doesn’t even slightly lend itself to 2-hand usage. It has no mechanism for handling different attack speeds, so 2h is just flat out going to get ~36.11% as many procs as DW at the same haste and crit level. So 2h either needs to get 3 stacks (or for precise balance, 2 stacks and a 77% chance of a 3rd) on proc, or they need to find some other mechanism to solve the discrepancy.
You can’t even fix this just by raising the proc chance per crit. In order for 2h to get the same number of procs per minute as DW, they’d need to get a proc on average every 0.722 AA crits (ie. they’d be behind DW even if they had a 100% chance on AA crit to generate KM. This makes intuitive sense, as they are getting ~36% as many procs, but DW averages to a ~50% proc rate on crit, so simply doubling that isn’t enough).
That said, they could get pretty close while retaining a similar mechanism if they make 2h KM proc with 2 stacks, and then have either a 55%/100% or 65%/75%/100% proc rate on successive crits. Either one averages to ~1.44 AA crits per proc, which at 2 stacks per proc gives the necessary 0.722 AA crits per KM stack. At any given level of crit and haste, this would cause DW and 2h to get the same number of procs over time, but 2h would obviously be more feast-or-famine about it. 2h would likely want to sit on runes to make sure they can use at least one of the two KM stacks on Obliterate, if not both, before the next AA swing, though with a 3.6s base swing timer, that’s much easier to time than it is for DW.
It doesn’t devalue crit at all. Basically, this is letting you leverage your natural crit rate on AAs to amplify the crit rate of Obliterate.
Think of it this way. At 0% haste and before talents (just for simplicity), you regenerate 3 runes every 10 seconds, so you get 1.5 Obliterates in that time from natural rune regen. 1.5 Obliterates generates 30 runic power, and 0.675 Rime procs, for another 6.75 runic power (for now, I’m ignoring the runic from talents, cooldowns, and Frost Fever). 36.75 Runic is an extra 0.735 runes, but it’s easier to subtract that from the effective cost of the Obliterates. Rime and Runic Empowerment effectively sum to reducing the average natural-regened-rune cost of Obliterate by 0.49 runes. So basically, you average 2 Obliterates per 3 runes that naturally recharge, which is every 10s before haste.
10s is 7.7 AA swings for DW. So let’s compare that at various crit levels.
10% crit: 0.77 average AA crits, 0.38 average KM procs. 0.38 of your 2 Obliterates crit, and the remaining 1.62 crit 10% of the time, for a total of 0.542 Obliterate crits (27.1% Obliterate crit rate).
20% crit: 1.54 average AA crits, 0.77 average KM procs. 0.77 of your 2 Obliterates crit, and the remaining 1.23 crit 20% of the time, for a total of 1.016 Obliterate crits (50.8% Obliterate crit rate).
30% crit: 2.31 average AA crits, 1.16 average KM procs. 1.16 of your 2 Obliterates crit, and the remaining 0.84 crit 30% of the time, for a total of 1.412 Obliterate crits (70.6% Obliterate crit rate).
Now, in practice, the effect isn’t quite as striking as this, simply because KM occasionally chomps (refreshes) itself before you can use it, and because talents, cooldowns, and other sources of runic amplify (sometimes rather significantly) the average ratio of Obliterate casts to AA swings at any given haste level (though note that rune recharge and AA swings scale at the same rate with haste, so we can generally ignore haste for these purposes).
The key to note here is that increasing your critical chance has a significantly amplified effect on Obliterate, as it boosts how many of your Obliterates are buffed by KM, as well as the number of non-KM Obliterates that naturally crit.
So it’s not devaluing it. What it’s doing is letting you convert auto-attack crits into guaranteed Obliterate crits, without affecting the crit rate of non-KM Obliterates, with the net effect that Obliterate’s crit rate scales extremely well with your crit chance.