Questions on Attack Chains


BCastro

 

Posted

Hi everyone,

I was wondering how people went about developing their attack chains? Do they just kind of play around and see what works for them? Do some people just not develop attack chains?

Thanks!


 

Posted

Quote:
Originally Posted by BCastro View Post
I was wondering how people went about developing their attack chains?
I have a specific method that I use that involves generating external and internal attack strings that lets me figure out the most effective attack string for a specific subset of attack pretty easily. I'm currently working on putting it into algorithmic form so that I can develop it into a tool for other people to use.


 

Posted

And on the other side of the coin, I'll say I'm one of those who doesn't use attack chains. Whatever power is available and will do the most damage under the current circumstances is the one I use.

I suspect the median is somewhere in the middle between these two extremes. (Although I must admit a tool to generate attack chains is a pretty cool idea)


 

Posted

Quote:
Originally Posted by Jade_Dragon View Post
And on the other side of the coin, I'll say I'm one of those who doesn't use attack chains. Whatever power is available and will do the most damage under the current circumstances is the one I use.

I suspect the median is somewhere in the middle between these two extremes. (Although I must admit a tool to generate attack chains is a pretty cool idea)
I think that I'm that medium, I generally order my powers according to recharge rate from fastest to slowest, that way something is always available. By the time I fire off the slowest power the fastest is usually recharged, and by the time I get back to the slowest, it's usually recharged as well.

There CAN be gaps, but I's either add some recharges to the slower powers, or fire off the fastest one 2-3 times before the slow ones are recharged.

The only tool I use is my eyes and observation...


 

Posted

Quote:
Originally Posted by Umbral View Post
I have a specific method that I use that involves generating external and internal attack strings that lets me figure out the most effective attack string for a specific subset of attack pretty easily. I'm currently working on putting it into algorithmic form so that I can develop it into a tool for other people to use.
I've thought about trying this before. The problem I have in my head is that sometimes a chain with a gap in it will be better than a chain that has no gaps. I'd be interested to know how you handle this.

For instance, suppose you have the following attacks:

Squirrel Ambush
1s activation (accounting for arcanatime)
0.1s recharge
1000 damage

Poke
1s activation (accounting for arcanatime)
0.1s recharge
1 damage

The best attack chain is Squirrel Ambush->0.1s gap->Squirrel Ambush->0.1s gap->Squirrel Ambush->...
Rather than the best gapless attack chain: Squirrel Ambush->Poke->Squirrel Ambush->Poke->...


 

Posted

Quote:
Originally Posted by Kahlan_ View Post
The best attack chain is Squirrel Ambush->0.1s gap->Squirrel Ambush->0.1s gap->Squirrel Ambush->...
Rather than the best gapless attack chain: Squirrel Ambush->Poke->Squirrel Ambush->Poke->...
Now I want a Squirrel Power Set...

Seriously, though, this should not be the case with normal attacks in the game. The only attacks that should have really low damage compared to their recharge should be those that are not damage dealing powers, such as Cobra Strike or Tesla Cage. Normally the damage formula should make damage and recharge proportional.

The bigger issue is going to be animation time. You could have a situation where you have an attack that is so low DPS, it is more efficient to wait until another attack has recharged so you can use it right away. (This is the reason Sniper attacks, or Jump Kick or Propel, are not considered useful by some players)


 

Posted

Quote:
Originally Posted by Jade_Dragon View Post
The bigger issue is going to be animation time. You could have a situation where you have an attack that is so low DPS, it is more efficient to wait until another attack has recharged so you can use it right away. (This is the reason Sniper attacks, or Jump Kick or Propel, are not considered useful by some players)
I was just giving a theoretical example because I forgot where this cropped up. But I do remember this issue happening for one of the scrapper primaries, which is why it's something to consider.


 

Posted

It recently cropped up in a discussion on Broadsword attack chains. A specific example was given where a pause in a chain of higher DPA attacks gave a better DPS than inserting another attack in the gap. Umbral commented on it because it fubared his existing algorithmic intentions.


Blue
American Steele: 50 BS/Inv
Nightfall: 50 DDD
Sable Slayer: 50 DM/Rgn
Fortune's Shadow: 50 Dark/Psi
WinterStrike: 47 Ice/Dev
Quantum Well: 43 Inv/EM
Twilit Destiny: 43 MA/DA
Red
Shadowslip: 50 DDC
Final Rest: 50 MA/Rgn
Abyssal Frost: 50 Ice/Dark
Golden Ember: 50 SM/FA

 

Posted

Quote:
Originally Posted by UberGuy View Post
It recently cropped up in a discussion on Broadsword attack chains. A specific example was given where a pause in a chain of higher DPA attacks gave a better DPS than inserting another attack in the gap. Umbral commented on it because it fubared his existing algorithmic intentions.
And I've now figured out how to get around that specific problem, though, in implementing the algorithm, it's going to take up a lot more memory while activating because I'm having to use a recursive loop rather than a simple loop to determine and compare the internal attack string options. Still, it shouldn't be too bad. All I had to do was create a "Wait" attack with an animation of 0 seconds (Arcanatime'd up to .132 seconds) and a recharge of 0 seconds. Any wait period is going to be accounted for as a series of .132 second waits rather than a single discrete period of the required time.

I actually thought of the solution about 3 days after the problem was introduced. My biggest issue now is getting the time to code it in between everything else life is throwing at me.


 

Posted

Well, since I posted the original post, I played around with Mid's Hero designer and my current toon and played around with using cast and recharge times to try to find somewhat efficient attack chains. Here's a question which I think I'm pretty sure of the answer...on Mid's for example, the cast time happens first THEN the recharge starts. Is that right? So if something had a cast time of 1 second and a recharge of 3 seconds...the 3 seconds would start right after the cast time has complete right?


 

Posted

And in a related question, what do you all rely on when picking powers for an attack chain: DPA or DPS?


"Everybody wants to change the world, but nobody wants to change themselves." -Tolstoy

 

Posted

Quote:
Originally Posted by BCastro View Post
Well, since I posted the original post, I played around with Mid's Hero designer and my current toon and played around with using cast and recharge times to try to find somewhat efficient attack chains. Here's a question which I think I'm pretty sure of the answer...on Mid's for example, the cast time happens first THEN the recharge starts. Is that right? So if something had a cast time of 1 second and a recharge of 3 seconds...the 3 seconds would start right after the cast time has complete right?
Yep, that's right.

Quote:
And in a related question, what do you all rely on when picking powers for an attack chain: DPA or DPS?
I use both. I pick one or two high DPS powers (i.e. good damage/recharge ratio) which usually are the highest recharge powers in the chain and then find the best DPA attacks to fill the gaps between them.


- @DSorrow - alts on Union and Freedom mostly -
Currently playing as Castigation on Freedom

My Katana/Inv Guide

Anyone who doesn't take truth seriously in small matters cannot be trusted in large ones either. -Einstein

 

Posted

Quote:
Originally Posted by GATE-keeper View Post
And in a related question, what do you all rely on when picking powers for an attack chain: DPA or DPS?
I only ever bother with DPA. DPS is too variable in its real applicability to make a viable metric with which to choose powers.

My general method is to first find an "anchor" power (generally the longest recharging and hardest hitting power) that the entire attack string will be based around (occasionally I find myself having to design an attack string with 2 anchors, which only really happens with low recharge builds that are using AoEs to fill in time). After that, the problem becomes generating the most efficient use of time to fill in the time for the anchor power to recharge. Sometimes this includes finding another "anchor" power for the internal attack string and other times it is simply alternating or cycling other powers, depending on recharges and animation times. To determine whether a wait is necessary, all you have to do is compare the DPS of the string with the wait to the DPS of the string without. Most of the time it's actually pretty obvious whether a wait will be beneficial or not.


 

Posted

Quote:
Originally Posted by BCastro View Post
Hi everyone,

I was wondering how people went about developing their attack chains? Do they just kind of play around and see what works for them? Do some people just not develop attack chains?

Thanks!
For me, a lot of it depends on how well I plan to develop a given character. If I'm just playing around with a concept and using cheap SOs / frankenslotting I'll probably just play around with the powers and see what works best with the resources I have. If I'm serious about a character, I break out my spreadsheets and come up with the best chain I can based on the rough level of recharge I'm going to have, then use Mids and create a build based around that recharge plus whatever defense, regen, etc... I'm shooting for. Alternately, if I'm working on a particular budget I'll make the best build I can afford, then calculate the best attack chain that build can generate (and possible tweak the build a bit as needed).

I don't get near as in-depth as Umbral, though I probably would if I was anywhere near as good with spreadsheets as he is. (I don't have the slightest clue how to do a recursive function in OpenOffice, for instance.) I find "pretty close" plenty good enough though, it's not like a 0.1 second gap is really noticeable.

Speaking of gaps, if you're wondering why it might be better to have one, look at it this way... adding another attack that takes longer to animate than the existing gap adds damage, but also extends the length of the attack chain. For instance, if you had a high recharge Fire Blaster that used Blaze -> Flares -> Fire Blast with a slight gap, you could eliminate that gap by adding another Flares. However, that would also push the next Blaze back, and Blaze has such insane DPA that you're better off doing nothing for a short time and getting off the Blaze sooner than using a lower DPA filler (I'm too tired to calculate that exact time). The key is that you always add a filler if it's shorter than the gap (unless doing so causes endurance problems or requires running into melee or something) but if the filler is longer than the gap you have to compare total damage / time with and without the filler to see if it's worth it.

One thing to remember though.... be flexible when actually using attack chains. If your target is at 1% health and your next attack is Headsplitter, either switch targets or toss in something fast and weak. If you start robotically following a specific pattern you can end up wasting a lot of damage doing overkill.


Cascade, level 50 Blaster (NRG/NRG since before it was cool)
Mechmeister, level 50 Bots / Traps MM
FAR too many non-50 alts to name

[u]Arcs[u]
The Scavenger Hunt: 187076
The Instant Lair Delivery Service: 206636

 

Posted

Quote:
Originally Posted by Umbral View Post
I only ever bother with DPA. DPS is too variable in its real applicability to make a viable metric with which to choose powers.

My general method is to first find an "anchor" power (generally the longest recharging and hardest hitting power) that the entire attack string will be based around (occasionally I find myself having to design an attack string with 2 anchors, which only really happens with low recharge builds that are using AoEs to fill in time). After that, the problem becomes generating the most efficient use of time to fill in the time for the anchor power to recharge. Sometimes this includes finding another "anchor" power for the internal attack string and other times it is simply alternating or cycling other powers, depending on recharges and animation times. To determine whether a wait is necessary, all you have to do is compare the DPS of the string with the wait to the DPS of the string without. Most of the time it's actually pretty obvious whether a wait will be beneficial or not.
I only ever bothered about DPA as well, but your use of an 'anchor' power is a very good idea and will help me a lot when working out my chains.

I did tend to order the powers by DPA and just chain them together filling in the gaps with fillers, but using your method will make calulations easier I think.


Princess Darkstar - Proud Member of the Handprints of Union, the #1 ranked SG in Europe!
British by act of union, English by grace of God, Northern by pure good fortune!
Quote:
Originally Posted by Aggelakis View Post
PrincessDarkstar: "RAAAAAAAAARRRRRRRRRGHHHHHHHHHH SOMEONE IS *WRONG* ON THE INTERNET!"

 

Posted

Quote:
Originally Posted by Umbral View Post
And I've now figured out how to get around that specific problem, though, in implementing the algorithm, it's going to take up a lot more memory while activating because I'm having to use a recursive loop rather than a simple loop to determine and compare the internal attack string options. Still, it shouldn't be too bad. All I had to do was create a "Wait" attack with an animation of 0 seconds (Arcanatime'd up to .132 seconds) and a recharge of 0 seconds. Any wait period is going to be accounted for as a series of .132 second waits rather than a single discrete period of the required time.

I actually thought of the solution about 3 days after the problem was introduced. My biggest issue now is getting the time to code it in between everything else life is throwing at me.
I assume this will be pretty expensive in terms of computational time as well?


 

Posted

Quote:
Originally Posted by Umbral View Post
Any wait period is going to be accounted for as a series of .132 second waits rather than a single discrete period of the required time.
Clever and logical. Nice coding, man.


 

Posted

Quote:
Originally Posted by StrykerX View Post
Speaking of gaps, if you're wondering why it might be better to have one, look at it this way... adding another attack that takes longer to animate than the existing gap adds damage, but also extends the length of the attack chain. For instance, if you had a high recharge Fire Blaster that used Blaze -> Flares -> Fire Blast with a slight gap, you could eliminate that gap by adding another Flares. However, that would also push the next Blaze back, and Blaze has such insane DPA that you're better off doing nothing for a short time and getting off the Blaze sooner than using a lower DPA filler (I'm too tired to calculate that exact time). The key is that you always add a filler if it's shorter than the gap (unless doing so causes endurance problems or requires running into melee or something) but if the filler is longer than the gap you have to compare total damage / time with and without the filler to see if it's worth it.
The calculation to determine this (which I call the extension threshold) is actually pretty simple. Take the animation time and damage of the big, nasty power in question (in this situation, Blaze), and the animation time and damage of another attack in your string (in this situation, Flares). Now, determine the DPA of Flares (63.2/1.188 = 53.2). After that, you then determine how long you would have to wait to give the two equitable DPA (because any inhibition of using Blaze that doesn't contribute more DPA than Blaze would be is going to mean lower DPS) using the same formula (dam/(anim + wait)= DPA) with some algebraic manipulation ((dam/DPA) - anim = wait). Plugging the damage and animation numbers in for Blaze and the DPA for Flares ((170.5/53.2) - 1.188 = 2.017), we see that it would take a 2.017 sec increase in Blaze's animation time in order to make Flares an even choice. Essentially, it takes a 2.017 seconds wait to make Blaze and Flares be even on DPA. Any wait under 2.017 seconds will make doing nothing and waiting Blaze a better alternative and, since Flares animates faster than that, there's no reason to ever delay Blaze by using Flares.

A more demonstrative example (because comparing anything to Blaze is simply saddening) is comparing Smite to Midnight Grasp. Smite (for Scrappers) has a DPA of 76.4 (90.8/1.188). Midnight Grasp has a DPA of 84.6 (189.9/2.244). The extension threshold for Midnight Grasp compared to Smite is .24 seconds ((189.9/76.4) - 2.244 = .24). So, if Smite is up and MG has only .24 seconds left to recharge, you're better off just waiting. If the wait is any longer, you should animate Smite and follow up with MG.


 

Posted

Quote:
Originally Posted by Kahlan_ View Post
I assume this will be pretty expensive in terms of computational time as well?
Yes, but considering that all it's going to be doing is running some simple calculations, the actual difference isn't going to be all that noticeable. When you're running such small scale programs, it's still going to be a difference of seconds, at the most.