Jump to content

Darkness Dark Ward/Dark Bulwark Question


Ryuku-sama

Recommended Posts

dipstik, KBN, Bant and any other Darkness theorycrafter who wants to join.....

 

I have tried to do some calculation around Dark Ward and Dark Bulwark. I use a variable I named HTPS (Hits Taken Per Second) to calculate how fast Dark Ward falls off and how fast you build Dark Bulwark.

 

Here is my spreadsheet. It's not user ready, I'm still developping it but feel free to comment here and changes shield pre-DW and HTPS values. Changing fractions DTPS won't change anything since I have yet to do the defense calculations, I assume post-defense data everywhere in my current calculations.

 

EDIT: Found an error when the uptime you can't get max stacks during Dark Ward. This error seems to stem from Dark Bastion giving a charge while Dark Ward loses a charge.

 

EDIT: Fixed the above error and a few more. Now the results makes more sense to me.

 

EDIT: The bigger the number of charges recovered through Bastion, the less precise are my numbers since I assume you will always recover a charge, even if you're capped at 15.

Edited by Ryuku-sama
Link to comment
Share on other sites

i thought bastion only increased the duration of the absorb stacks, not the shield buff. isnt 18% shield better than 10% absorb? if it is, then the limiting factor would be the duration of ward (23 seconds), or eating all the stacks. both of those limiting factors are accounted for in my methodology.

 

im assuming 23 second duration, 18% shield, 20 charges and 10 stacks.

 

here is what i am using (maple):

 

> m(T):=floor((23)/(T)):

> with(SumTools);

> p(d,s,r,kw,kf,fb,fn):=1/(kw+kf)*(kf*s*(1-r)+kw*s*(fb*(1-(d+0.1))+fn*(1-d))):

> E(n,p):=Summation(piecewise(i<11,(n!)/(i!*(n-i)!)*p^(i)*(1-p)^(n-i)*i,i<20,(n!)/(i!*(n-i)!)*p^(i)*(1-p)^(n-i)*10,20<=i,0),i=1..n):

> P(m,p):=piecewise(m>=20,(m!)/(20!*(m-20)!)*p^(20)*(1-p)^(m-20),0):

> A(T,p):=piecewise(m(T)<20,1/(m(T))*Summation(E(n,p),n=1..m(T)),Summation((Summation(E(n,p),n=1..20+i)* P(20+i,p))/(20+i),i=0..m(T)-20)+((1- Summation(P(n,p),n=20..m(T)))*Summation(E(n,p),n=1..m(T)))/(m(T))):

 

basically a binomial approach setting the number of trials to the number of swings in 23 seconds. if more than 20 successes happen, then i change the time. i take a probabilistic weighted time for all cases.

 

it does seem like i am missing something though, based on you and kbn trying to figure it out still.

 

here are example results. p is probability of shielding (taking damage type and defese/resist into account):

 

prob time time

p 1.035 0.85

0.35 4.003 4.793

0.355 4.058 4.856

0.36 4.112 4.915

0.365 4.167 4.975

0.37 4.221 5.034

0.375 4.275 5.09

0.38 4.33 5.149

0.385 4.383 5.205

0.39 4.436 5.261

0.395 4.489 5.313

0.4 4.542 5.369

0.405 4.595 5.422

0.41 4.645 5.474

0.415 4.7 5.526

0.42 4.75 5.575

0.425 4.8 5.628

0.43 4.85 5.682

0.435 4.9 5.728

0.44 4.95 5.778

0.445 5 5.824

0.45 5.05 5.872

Edited by dipstik
Link to comment
Share on other sites

i thought bastion only increased the duration of the absorb stacks, not the shield buff. isnt 18% shield better than 10% absorb? if it is, then the limiting factor would be the duration of ward (23 seconds), or eating all the stacks. both of those limiting factors are accounted for in my methodology.

 

Bastion increases the number of DW charges. It restores 1 charge 20% of the shielded hits. You regain 1/5th of the charge you lose on average. Bastion in fact doesn't increase Bulwark Duration, but shielding will always reset Bulwark. Bastion increases the shield stack duration. Not the absorb one.

 

im assuming 23 second duration, 18% shield, 20 charges and 10 stacks.

 

here is what i am using (maple):

 

> m(T):=floor((23)/(T)):

> with(SumTools);

> p(d,s,r,kw,kf,fb,fn):=1/(kw+kf)*(kf*s*(1-r)+kw*s*(fb*(1-(d+0.1))+fn*(1-d))):

> E(n,p):=Summation(piecewise(i<11,(n!)/(i!*(n-i)!)*p^(i)*(1-p)^(n-i)*i,i<20,(n!)/(i!*(n-i)!)*p^(i)*(1-p)^(n-i)*10,20<=i,0),i=1..n):

> P(m,p):=piecewise(m>=20,(m!)/(20!*(m-20)!)*p^(20)*(1-p)^(m-20),0):

> A(T,p):=piecewise(m(T)<20,1/(m(T))*Summation(E(n,p),n=1..m(T)),Summation((Summation(E(n,p),n=1..20+i)* P(20+i,p))/(20+i),i=0..m(T)-20)+((1- Summation(P(n,p),n=20..m(T)))*Summation(E(n,p),n=1..m(T)))/(m(T))):

 

basically a binomial approach setting the number of trials to the number of swings in 23 seconds. if more than 20 successes happen, then i change the time. i take a probabilistic weighted time for all cases.

 

it does seem like i am missing something though, based on you and kbn trying to figure it out still.

 

You can't just assume 23s duration. The duration varies depending on how much you actually shield, and assuming 20% shield or 80% shield (extreme values), your assumptions is just weird.

Edited by Ryuku-sama
Link to comment
Share on other sites

so upon shield there is a 20% chance to increase the duration of dark ward 1 second and to negate the loss of said charge?

 

No. 20% chance to actually recover a charge instead of losing it.. Well at least that's how I understand it, gotta test it in game

Link to comment
Share on other sites

Here is what I have been using to try and estimate the absorb from the Dark Bulwark stacks (in javscript/Googlescript):

 

function ActiveAbsorb(DamageProfile, Resist_Chance, Defense_Chance, Shield_Chance){ 
var Absorb = 0;

//Determine the rate of shielding based on Shield chance and Defence chance and the boss damage distribution
var Shield_rate = Shield_Chance * ( ( 1 - Defense_Chance - DamageProfile.Basic*0.1 ) * DamageProfile.MRKE + ( 1-Resist_Chance ) * DamageProfile.FTKE;

//Determine the average time between shielded attacks based on the boss
var Time_between_Shield = (1/Shield_rate) * (DamageProfile.HitTimer);

   	var time = 0;
var uptime = 20;
var Bulwark = -1;

//This part steps through in increments of Time_between_Shield until either all the charges are used or the max uptime is reached
//each time do the following:
	//Subtract 0.8 charges (20% chance of regrant), 
	//Add 0.2 seconds to the uptime (20% chance of 1s regrant)
	//Add 1 Bulwark Stack upto a max of 10
	//Advance the time counter in increments of Time_between_Shield
	//store the current amount of Absorbtion times the Time_between_Shield (for later time averaging)

for(var Charges = 15; time < uptime - Time_between_Shield && Charges > 1; Charges -= 1 - (1 * 0.2)){
	Bulwark = Math.min(Bulwark + 1, 8+2);
	time += Time_between_Shield;
	uptime += .2;
	Absorb += Bulwark*0.01*Time_between_Shield;
}  

   	//remaining Time that is less than a full step is stored as well
if(Charges >= 1){
	//This is refreshing dark Ward before all stacks are used and grants the remaining time's absorb
	Absorb += (Bulwark)*(0.01)*(uptime-time);
}
else{
	//This is refreshing dark Ward when all stacks are used
	uptime = time;
}

//This averages the active absorb from dark bulwark over the actual uptime for Dark ward
Absorb = Absorb/uptime;

Return Absorb;
};

 

It seems to work fairly well as an estimation tool, but as with most things, is likely missing something.

Link to comment
Share on other sites

No. 20% chance to actually recover a charge instead of losing it.. Well at least that's how I understand it, gotta test it in game

 

It's a 20% chance to recover the charge you just lost (and gain 1 second). So, your stack count never goes up, it's just that sometimes you shield, gain a bulwark charge, and don't lose the ward charge.

 

The interesting thing about this change is that it's very easy to calculate the expected number of stacks (18.75), it's just hard to calculate the expected duration. Stacks are given as the following:

 

15 \sum_{i ≥ 0} 0.2^i

 

You can sort of roughly approximate expected maximum duration by using this property, and the result is a good first order approximation. Namely:

 

20 + 15 \sum_{i ≥ 1} 0.2^i = 23.75 seconds

 

So, you basically just pretend that you're going to get exactly the expected number of stacks, and naturally each of the "extra" stacks corresponds to an addition of one second to the max duration.

 

I think this is a reasonable approximation, but it's obviously ignoring a lot of important factors. Swing timers (which is generally on the order of 0.8-1.2 hits/sec), shield chance and defense chance are all applicable here. Obviously such factors don't apply to the maximum stack count, because your stacks decrement when you shield, and it's a flat 20% chance every time you decrement, so things are essentially already factored out by the conditional probability assumption! Not so with the duration though, which is what makes it complicated.

Link to comment
Share on other sites

the script looks good for an averaged out performance. does it take into account what happens if you get m shields in a row, versus not getting any shields? what i was trying to do was account for all variations of the trials. assuming only 4 swings, with 1 a success:

 

all the cases would be:

 

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

 

and each has its own absorb contribution. you can use something like a pascal triangle to find ones with similar absorb contributions.

 

that is what my equations did, buit now with charge count and duration being 2 additional dimensions to the problem, it gets very hairy.

Edited by dipstik
Link to comment
Share on other sites

the script looks good for an averaged out performance. does it take into account what happens if you get m shields in a row, versus not getting any shields? what i was trying to do was account for all variations of the trials. assuming only 4 swings, with 1 a success:

 

all the cases would be:

 

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

 

and each has its own absorb contribution. you can use something like a pascal triangle to find ones with similar absorb contributions.

 

that is what my equations did, buit now with charge count and duration being 2 additional dimensions to the problem, it gets very hairy.

 

But if you were to estimate a nearly infinite fight, wouldn't these events average themselves out??? I say that because Bent first assumption is perfect average.

Link to comment
Share on other sites

problem is we are talking about 20 to 25 seconds, which is only 1 magnitude away from the quanta we are talking about. there are around 17 million combinations for 24 trials.

 

but i would be happy with a first order approximation. charges=24, duration = 27

 

this is what i get:

 

p= t=.85

0.35 5.352

0.355 5.413

0.36 5.474

0.365 5.532

0.37 5.59

0.375 5.645

0.38 5.703

0.385 5.758

0.39 5.81

0.395 5.865

0.4 5.916

0.405 5.968

0.41 6.016

0.415 6.068

0.42 6.117

0.425 6.162

0.43 6.211

0.435 6.256

0.44 6.301

0.445 6.344

0.45 6.386

Edited by dipstik
Link to comment
Share on other sites

1.2*20=24

 

but it looks like it should be 23*1.2.

 

15 base, 3 more from 6 piece, 5 more from 4.0 changes.

 

Increases the duration of Dark Ward by 5 seconds, its number of stacks by 5, the shield chance it provides by an additional 3%, and reduces its cooldown by 5 seconds. In addition, the duration of Dark Bulwark is also 5 seconds longer, and it can build 2 additional stacks. [Whenever a charge of dark ward is depleted there is a 20% chance to increase its duration by 1 second and to not consume the charge.]

 

Kinetic/Dark Ward’s duration is increased by 3 seconds and charges are increased by 3.

 

base 15 stacks, 8 charges, 20 seconds duration, cooldown 15 sec, 15% shield buff

 

with 6set and 4.0: 15+5+3 stacks, 8+2 charges, 20+5+3 duration, 15-5 cooldown, 15+3 shield buff

 

23*1.2=27.6. taking that as 28, get 28*0.2=5.6 extra seconds. 28+5.6 seconds. . but this assumes the swing timer is 1 plus/minus 0.036 seconds, otherwise you will get fewer/more chances. this is to first order in that there is no recursive relationship between swings increasing, thus time increasing, thus swing increase. looks like 2nd order will do. 1st order: 23/swing=m0, m0*p=s0, s0*0.2=t1, 2nd order: t1/swing=m1, m1*p=s1, ,1*0.2=t2. iv done this for p=0.35..0.45 and swing=0.8..1.2.

 

here are my results where bastion indicates the number of additional stacks/seconds, p is shield prob, t is duration, m is trials.

 

0.350 =p

swing t m bastion

0.800 25.189 31.486 2.189

0.850 25.050 29.471 2.050

0.900 24.928 27.698 1.928

0.950 24.820 26.126 1.820

1.000 24.723 24.723 1.723

1.050 24.636 23.462 1.636

1.100 24.557 22.324 1.557

1.150 24.485 21.291 1.485

1.200 24.420 20.350 1.420

 

0.400 =p

t m bastion

0.800 25.530 31.913 2.530

0.850 25.368 29.845 2.368

0.900 25.226 28.029 2.226

0.950 25.100 26.421 2.100

1.000 24.987 24.987 1.987

1.050 24.886 23.701 1.886

1.100 24.794 22.540 1.794

1.150 24.711 21.488 1.711

1.200 24.636 20.530 1.636

 

0.450 =p

t m bastion

0.800 25.879 32.348 2.879

0.850 25.693 30.227 2.693

0.900 25.530 28.367 2.530

0.950 25.385 26.721 2.385

1.000 25.256 25.256 2.256

1.050 25.140 23.943 2.140

1.100 25.036 22.760 2.036

1.150 24.941 21.688 1.941

1.200 24.854 20.712 1.854

 

trying to get a regression from these, but im getting errors on the order of 0.1 for bastion, even using c0+c1*p+c2*swing+c3*p^2+c4*swing^2+c5*p*swing. think i need finer shield points.

Edited by dipstik
Link to comment
Share on other sites

1.2*20=24

 

but it looks like it should be 23*1.2.

 

15 base, 3 more from 6 piece, 5 more from 4.0 changes.

 

Increases the duration of Dark Ward by 5 seconds, its number of stacks by 5, the shield chance it provides by an additional 3%, and reduces its cooldown by 5 seconds. In addition, the duration of Dark Bulwark is also 5 seconds longer, and it can build 2 additional stacks. [Whenever a charge of dark ward is depleted there is a 20% chance to increase its duration by 1 second and to not consume the charge.]

 

Kinetic/Dark Ward’s duration is increased by 3 seconds and charges are increased by 3.

 

Three issues here. First, the 6 set no longer adds 3 charges. All it does is add 3 seconds to the duration of Deflection. Second, the passive no longer adds additional charges to Dark Ward (that was what was announced in the dev blog, but not what went live). With a full 6 piece set bonus at level 65, on live, you have 15 charges of Dark Ward, with a cooldown of 10 seconds and 10 maximum stacks of Dark Bulwark.

 

The third issue is that you're not counting the stacks which are added by the additional stacks! It is possible to shield, regain that stack via the 20% chance, shield again, and regain that same stack an additional time! In fact, this effect may continue indefinitely, though the odds are quite small. If we follow our nose in deriving the expansion, we have:

 

15 stacks basline

15 * 0.2 stacks regenerated

 

Of the stacks we regained, each of those stacks has a chance to regenerate, thus:

 

15 * 0.2 * 0.2 stacks regenerated *twice*

 

And of those, each of those stacks has a chance to regenerate a third time, thus:

 

15 * 0.2 * 0.2 * 0.2 stacks regenerated *thrice*

 

This is of course, all summed, so we have:

 

15 + 15 * 0.2 + 15 * 0.2 * 0.2 + ...

 

Which is to say:

 

15 * \sum_{i ≥ 0} 0.2^i

 

Which is to say:

 

15 * (5/(5-1)) = 18.75

 

Did I miss anything?

 

23*1.2=27.6. taking that as 28, get 28*0.2=5.6 extra seconds. 28+5.6 seconds. . but this assumes the swing timer is 1 plus/minus 0.036 seconds, otherwise you will get fewer/more chances. this is to first order in that there is no recursive relationship between swings increasing, thus time increasing, thus swing increase. looks like 2nd order will do. 1st order: 23/swing=m0, m0*p=s0, s0*0.2=t1, 2nd order: t1/swing=m1, m1*p=s1, ,1*0.2=t2. iv done this for p=0.35..0.45 and swing=0.8..1.2.

 

Actually, thinking about it more deeply, I think it's totally valid to use our old binomial regressions (once we correct for the fact that, somehow, duration is inversely related to dark bulwark value) paired with a max duration of 23.75, since our binomial regressions already account for the swing timer, shield chance, defense chance and maximum bounding problems! So we don't need to double count. We can just go off of the (very straightforward) maximum stacks calculation and treat the duration as a bound, rather than a fixed value, since our calculations already treat it as a bound.

Edited by KeyboardNinja
Link to comment
Share on other sites

thanks for clarifying. I knew I was on a different page than everyone else. should we take the max charges consumable as 18 or 19. I don't want to think about the replacement for integers. gamma/zeta functions?

 

just use 1875 and works from 1 charge = 100... It should be easier if you must keep integers.

Link to comment
Share on other sites

posted some numbers in my thread. im assuming 0.85 swing timer right now. im seeing around 3% m,ore absorb than 3.x stuff, which kind of agrees with the rough estimates of bastion contribution i did. looks like shield chance is around 55% for 4.0. so i will have to recenter the regression data once i get better swing data.

 

in other news. thinking about variance again. looking at the range of squish and sigma from all force (m=0) versus all melee (m=1) gives a good idea what could be happening during a fight to make the healers lose it. interestingly, the variance peaks around the middle m=0.5, but the most damage taken is near m=0. the range from m=1 to m=0 gives an idea of the overall range of health flux. as in, when a boss goes from melee to force mode, the change in squish is basically what the healer will freak out about. for shadow we have 0.17 to 0.33 squish, whereas for juggs go from 0.17 to 0.30 and pts go from 0.17 to 0.27. which i think falls in line with what healers think about spikiness.

Edited by dipstik
Link to comment
Share on other sites

×
×
  • Create New...