Barrage Cast On Crit Optimization - A Full Enquiry

Hello fellow Exiles !

Since Cast On Crit is back on the menu with its 0.15sec cooldown, let's talk about Barrage CoC

I wasn't there during the CoC "Golden Era", but barrage was the "way to go" for Bow CoC builds due to its nature :
Barrage is a bow attack that takes some time charging, then fires sequentially several projectiles in a short amount of time.

Since the projectiles are not simultaneous, several projectiles of the same attack CAN hit the same target, so the idea with Barrage and CoC is to trigger the spell several times in the same attack

So now we have an idea, however, there are some contraints to do so :

The servers have an internal clock of 30,3Hz, which means events are actually treated server-side every 33ms, basically spells can only triggered on server ticks, meaning the effective cooldown of the Gem is 165ms , or 132ms if you have more than 14% cooldown recovery rate.

We now also know how barrage works :
"
"Barrage spends the first 40% of the attack time doing the wind up, and then spends the remaining 60% firing the projectiles (each projectile takes a time that is 60% of the attack time, divided by the number of projectiles, so regardless of the number of projectiles, they take 60% of the attack time in total). The attack thus takes the full attack time, regardless of number of projectiles."


So we have 40% of the attack time doing nothing, then spending the 60 remaining % on unleashing projectiles. That means there is a "tempo" your attack must have to optimise casts,

Basically, assuming you have 100% crit and accuracy, the variables are :
  • Your attack speed
  • Extra projectiles in barrage (Volley fire projs doesn't count)
  • Being over under or over 14% Cooldown recovery rate

A final parameter is the travel time of the arrow(depending on the distance to the target and the velocity modifiers), which was neglected in this study (the hits were assumed instant)

So...I have simulated the number of Spell casts/secon you can obtain, relatively to the variables presented before , the results are interesting to say the least:



(direct link to the image gallery:https://imgur.com/a/Ute7oBs)

A few noteworthy remarks :
    You need to have [b]at least[/b] +1 arrow to maximize your cps[/li]
  • The maximum theoretical cps of the gem can be obtained, but only on a handful of attack speeds : 3.02 with no CDR; 3.79 with CDR
  • Having cooldown recovery rate % requires some attack speed investment to make most of it
  • There are noteworthy low attack speed "modes" that are sub-optimal but can be obtained with VERY LOW attack speed investment, however they might be too clunky to be of any use.

Methodology :
Spoiler

The algorithm is the following :
We consider that the server receives order to make a character attack with Barrage a large number (N=200) of time.
We assume that the origin of time corresponds to the server tick where the character starts the first Barrage windup, then we consider that the logic of the attack does not depend of the server tick rates, but only the hit registration(hitreg) will.
The hit is supposed registered on the next server tick following the projectile launch (we assumed that there was no projectile travel time for now)
If the CoC is still on cooldown, it's not considered a cast, if not it's a cast

That's the idea, now you obtain the number of casts on a high number of attacks, knowing your APS, you can get your CPS :)

I've run a Scilab(MATLAB but Open Source) Script, but was to lazy to comment it, it might explain it further if needed/people are interested

SCILAB Code :

Spoiler
clf();
function [A]=test(N,EP,mu,eta,d,APS,CDR)
T=N/APS;
NP=EP+5;
T_a=1/APS;
T_w=0.4/APS;
T_fa=0.6/(APS*NP);
T_shot=eta*T_fa;
//T_travel =0 for now (d/V_p*mu)
T_trav=0;

for k=0:N
for l=1:NP

t_hit(k*NP+l)=k*T_a+T_w+(l-1)*T_fa+T_shot+T_trav;
t_hitreg(k*NP+l)=(floor(t_hit(k*NP+l)*1000/33)+1)*33/1000;

end
end

cur=1;
size_c=0;
while cur<=N*NP
if cur==1
then
t_cast(size_c+1)=t_hitreg(1);
size_c=size_c+1;
else
if t_hitreg(cur)-t_cast(size_c)>(0.15*100/(100+CDR))
then
t_cast(size_c+1)=t_hitreg(cur);
size_c=size_c+1;
end
end
cur=cur+1;
end

A=size_c/T;
endfunction


N=200;
EP=0;
eta=0.5;
mu=1;
d=0;

A=[1:0.02:6];

CDR=[0,35];

i_max=size(A,2);
j_max=size(CDR,2);
//No Extra proj
for i=1:i_max

for j=1:j_max

R(i,j)=test(N,EP,mu,eta,d,A(i),CDR(j));

end

end
// With GMP
for i=1:i_max

for j=1:j_max

R_GMP(i,j)=test(N,4,mu,eta,d,A(i),CDR(j));

end

end


// With LMP
for i=1:i_max

for j=1:j_max

R_LMP(i,j)=test(N,2,mu,eta,d,A(i),CDR(j));

end

end

// With Enchant or +1 arrow
for i=1:i_max

for j=1:j_max

R_enc(i,j)=test(N,1,mu,eta,d,A(i),CDR(j));

end

end

Thre_CDR=ones(size(A')(1),size(A')(2))/0.132;
Thre=ones(size(A')(1),size(A')(2))/0.165;
subplot(211)
plot2d(A',[R(:,1),R_enc(:,1),R_LMP(:,1),R_GMP(:,1),,Thre],leg='Unsupported@1 Extra proj (Enchant or Quiver/Bow)@2 Extra projs (LMP,.)@4 Extra projs (GMP,.)@Theorical Maximum')
xlabel("Attacks per second")
ylabel("Casts per second")
title("Cooldown Recovery Rate <15%")
subplot(212)
plot2d(A',[R(:,2),R_enc(:,2),R_LMP(:,2),R_GMP(:,2),Thre_CDR],leg='Unsupported@1 Extra proj (Enchant or Quiver/Bow)@2 Extra projs (LMP,.)@4 Extra projs (GMP,.)@Theorical Maximum')
xlabel("Attacks per second")
ylabel("Casts per second")
title("Cooldown Recovery Rate >=15%")
Last edited by HerrMyth on Dec 7, 2018, 8:13:18 PM
Last bumped on Dec 20, 2018, 3:11:21 PM
Is this with a single triggered spell? Does the addition of one or two additional triggered spells affect the optimal breakpoints? What about the barrage threshold jewel?
This is was simulated for a single triggered spell, i'm still downloading 3.5 patch so I have no idea of the behaviour with several spells, but i don't think it will matter since (afaik) the cooldown is effectively on the CoC gem, not on the spells.

The Volley Fire jewels projectiles are not considered as "Extra projectiles", since they are fired on the same time as the first and last projectiles, which mean they don't create a new hit time (they are marginally useful if you consider non perfect accuracy, since they up the hit probability) so they are not creating a potential spell cast.
Last edited by HerrMyth on Dec 7, 2018, 7:14:32 PM
Well the CD is on the individual spell. I just can't remember if a single hit can trigger multiple linked spells.

My main though with volley fire is because it throws out the projectiles in a cone it could be a secondary trigger mechanism for packs, as it would likely not hit at the same server tick. This would only be useful if a single hit cannot trigger multiple spells.
I'll check the behaviour with multiple spells tomorrow as soon as i can.

For Volley Fire projectiles, I agree that they may hit on another server tick, but since it's on the first and last hits, of which the first will always proc the spell, and the last should too (for a barely optimal setup), which means the Volley Fire projs will most likely hitreg during the 4/5 server ticks cooldown, even if the travel distance is very different between both targets, due to the high speed of barrage projectiles

Edit : Considerations about travel distance and target/pack spread are planned but I lack information, particularly about projectile speed
Last edited by HerrMyth on Dec 7, 2018, 8:11:41 PM
This is really interesting, as I'm running deadeye and planning on going barrage-coc. As was stated earlier, the CD is on the spell not the coc gem per se afaik, but I think only one spell can be triggered per frame.

So they need to be (or hit) staggered.
Last edited by mrpetrov on Dec 8, 2018, 11:59:41 AM
Also, any chance you could please run the scenarios where we have two spells linked to CoC?

That would be great, thanks again for your work!
if I have GMP support linked to barrage , would that help or damage my CoC proc ?
also Iam linking 3 spells with barrage,
also Iam considering dual wielding swords since you can get a much higher base attack speed swords and crit chance than bows in general,and link the CoC with lancing steel, do you know if lancing steel interact the same way as barrage does ?

plz do the math for me, thank you very much :) !
"
thepirate32 wrote:
if I have GMP support linked to barrage , would that help or damage my CoC proc ?
also Iam linking 3 spells with barrage,
also Iam considering dual wielding swords since you can get a much higher base attack speed swords and crit chance than bows in general,and link the CoC with lancing steel, do you know if lancing steel interact the same way as barrage does ?

plz do the math for me, thank you very much :) !


GMP helps proc if there is more than a single target. It makes no difference to proc rate va a single target unless your skill shotguns (eg ice spear).

Swords is more dangerous because you need to be in range and you can’t proc as reliably as you can with barrage (although static strike is great). Unless you use cospris.
"
mrpetrov wrote:
"
thepirate32 wrote:
if I have GMP support linked to barrage , would that help or damage my CoC proc ?
also Iam linking 3 spells with barrage,
also Iam considering dual wielding swords since you can get a much higher base attack speed swords and crit chance than bows in general,and link the CoC with lancing steel, do you know if lancing steel interact the same way as barrage does ?

plz do the math for me, thank you very much :) !


GMP helps proc if there is more than a single target. It makes no difference to proc rate va a single target unless your skill shotguns (eg ice spear).

Swords is more dangerous because you need to be in range and you can’t proc as reliably as you can with barrage (although static strike is great). Unless you use cospris.

Lancing Steel is a projectile (read: ranged) skill that shotguns, and it doesn't work with Cospri's Malice, so none of your remarks apply.

@OP
This is the most accurate approach I have seen to this problem, and I appreciate that someone made the effort to solve it arithmetically.

How reliable is your information on the spacing of the spread of the projectiles across the last 60% of a Barrage attack? I could never find out if, even assuming they're spaced evenly, there's extra time before the first or after the last projectile or both, or whether the first and last projectile fire at the exact start and end of the 60%.

Is it possible to expand this code to make it more adjustable / cover precise usecases? Especially concerning crit chance and accuracy which I don't think you considered, but which will certainly make a difference if several spells are linked.

Other than that I could think of (more or less) reasonably adding up to 11 projectiles (+2 bow, +2 corrupted quiver, +2 Dying Sun, +1 Deadeye / Pathfinder, +4 GMP to support shotgunning spells), and it's possible to link up to 5 spells in a bow with the CoC mod. I realise these combinations exceed the frame of what can easily be entered manually, hence I'm wondering about generating it automatically.

In addition to this, another thing I'd be particularly curious about is combining Barrage CoC with Poet's Pens, which have a different cooldown (264ms @ 0-7% icdrs, 231ms @ 8-26% icdrs, 198ms @ 27%+ icdrs). Because spells socketed in Poet's Pens will deal different amounts of damage compared to the CoC setup (and each other because they can't both use the same spell), the exact damage optimisation would be subject to a very adjustable tool, but for now, I'd like to know the achievable casts per second.

I'm also curious about Lancing Steel, but that is outside the scope of this thread.

I realise that all of this would be asking for a lot, so I'm just asking whether it's possible to make the script adjustable or auto generate it for certain input values, not that you enter all of this yourself. I'd try to work with it myself, but I have no experience with Scilab or MATLAB.

Report Forum Post

Report Account:

Report Type

Additional Info