Please upgrade your browser for the best possible experience.

Chrome Firefox Internet Explorer
×

Darkness Dark Ward/Dark Bulwark Question

STAR WARS: The Old Republic > English > Classes > Roles
Darkness Dark Ward/Dark Bulwark Question

Ryuku-sama's Avatar


Ryuku-sama
10.23.2015 , 10:36 AM | #1
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.
"If it wasn't broken, we shall break it. If it is balanced, we shall beat it until slow and painful death follows. If it is overpowered, it is working as intended." - Bioware 2015

dipstik's Avatar


dipstik
10.23.2015 , 11:24 AM | #2
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((Summ ation(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

Ryuku-sama's Avatar


Ryuku-sama
10.23.2015 , 11:51 AM | #3
Quote: Originally Posted by dipstik View Post
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.

Quote: Originally Posted by dipstik View Post
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((Summ ation(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.
"If it wasn't broken, we shall break it. If it is balanced, we shall beat it until slow and painful death follows. If it is overpowered, it is working as intended." - Bioware 2015

dipstik's Avatar


dipstik
10.23.2015 , 12:07 PM | #4
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?

Ryuku-sama's Avatar


Ryuku-sama
10.23.2015 , 12:13 PM | #5
Quote: Originally Posted by dipstik View Post
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
"If it wasn't broken, we shall break it. If it is balanced, we shall beat it until slow and painful death follows. If it is overpowered, it is working as intended." - Bioware 2015

Goblin_Lackey's Avatar


Goblin_Lackey
10.23.2015 , 12:21 PM | #6
Here is what I have been using to try and estimate the absorb from the Dark Bulwark stacks (in javscript/Googlescript):

Code:
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.
Bant The Fat and Pink.

Co-GM of Psy-Ops on The Harbinger

KeyboardNinja's Avatar


KeyboardNinja
10.23.2015 , 12:27 PM | #7
Quote: Originally Posted by Ryuku-sama View Post
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.
Computer Programmer. Theory Crafter. Dilettante on The Ebon Hawk.
Tam (shadow tank) Tov-ren (commando healer) Aveo (retired sentinel) Nimri (ruffian scoundrel)
Averith (marksman sniper) Alish (lightning sorcerer) Aresham (vengeance jugg) Effek (pyro pt)

December 13, 2011 to January 30, 2017

dipstik's Avatar


dipstik
10.23.2015 , 12:39 PM | #8
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.

Ryuku-sama's Avatar


Ryuku-sama
10.23.2015 , 12:42 PM | #9
Quote: Originally Posted by dipstik View Post
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.
"If it wasn't broken, we shall break it. If it is balanced, we shall beat it until slow and painful death follows. If it is overpowered, it is working as intended." - Bioware 2015

dipstik's Avatar


dipstik
10.23.2015 , 12:44 PM | #10
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