So, I solved this mathematically. Here’s what’s going on. Attack speed decreases the animation time, but not the time between animations. This means that there is a constant that your formula isn’t accounting for. With your real-world testing data, we can solve for that constant. Commando has a constant of 3. This is because he keeps a constant 2 frames in between each double tap shot. This distorts the scaling and gives him a cap of 20 shots per second once he is able to fire in one frame. Two frames of cooldown, one to fire. Huntress’s constant is 2. This means she has the same issue, but with only one unchanging frame, giving her 30 shots per second. Mul-T has no animation between shots, so his constant is 1. This means he scales 1:1 and caps out at 60 shots per second (one per frame). Even if your game “runs” faster, I believe the animations always lock at 60fps so there’s no way to fix this. Side note: this is also the reason you keep getting slightly over the expected value (like 20.1 instead of 20.0). You are skipping the cooldown frames on the last shot and the firing animation frames on the first shot.
Makes sense. Question is: why even have the cooldown period? The only reason I can think of is to preserve animation smoothness / integrity. I think most people wouldn't mind a wonky animation if it meant actually scaling intuitively
@@Woolie it is indeed animation integrity. A lot of games have this issue; PUBG and fortnite guns would fire more slowly if your frame rate didn’t sync up with the gun’s animation. The cooldown animation exists so that you can’t overlap animations (like firing a phase round and a normal shot at the same time). It’s definitely necessary. The question is, why doesn’t it scale? Probably due to a bug. If all animations scaled on attack speed, it could cause problems with movement animations or projectile speed. Obviously only the devs can answer that question; we can only speculate. But now we know how to calculate and control for it. In the meantime, this makes Huntress’s alternate primary much better. The alt primary has a higher animation:cooldown ratio, meaning that it scales better on attack speed than the main huntress’s primary. We can probably find similar situations on other characters.
@@Woolie I think hopoo probably decided that you need such a stupidly high attack speed before you run into this problem, that it isn’t worth fixing. I’d agree tbh, I’ve never seen a run go long enough to have this much attack speed lol. But it is annoying that attack speed doesn’t really scale intuitively at all.
So, I'm a modder (creator of Manipulator) and had an actual look into the code of things. The game doesn't calculate how many shots should be fired per second, but instead calculates what the duration between each shot should be. The game itself checks this duration with what is called FixedUpdate. It's something Unity (the engine Risk Of Rain 2 uses) has that activates at a fixed rate of time. In this case, FixedUpdate activates a total of 60 times per second. This means that it's impossible to go above 60 shots per second, because it can only fire a single shot per FixedUpdate. This is how it works for Double Tap; it figures out the duration (Base Duration / Attack Speed), fires the bullet, and waits the calculated duration before allowing you to fire another bullet (by starting the code all over again). I've only had a quick glance and am unsure why Double Tap caps out at 20 per second, but it may be some other thing in code that I didn't see, or some form of balance from the developers. The reason it fires 61 shots per 10 seconds is because if fires the bullet IMMEDIATELY and THEN starts calculating duration, so it manages to get an extra bullet in at first. Suppressive Fire works a little bit differently. It has a fixed 'minimum' duration, a duration between each shot (Duration Between Shots / Attack Speed), and the number of shots it needs to fire (base Bullet Count * Attack Speed) before it finishes. It fires the first bullet, and uses FixedUpdate to fire the rest. Within FixedUpdate, it checks if it has passed the 'Duration between shots' timer, and fires a bullet if it has. It then also checks if the 'age' (how long it has been since the ability started) of the ability is higher than the minimum duration AND if it has fired the correct number of shots. If both of those are true, the ability ends. Since there is a maximum rate at which bullets can fire (60 per second), this script will keep looping until you either interrupt it, or it has fired the target number of bullets. Coding things like this is easier for a computer to understand and calculate, but can sometimes end up with funky situations like the ones you've come across. People have been mentioning that animations may be the cause, but this isn't the case. Animation is purely visual, and triggered by the code - the code isn't affected by animation unless the code requests it. The code simply tells the character model 'play this animation' when it fires this bullet. If a new animation is started, it immediately overrides the old animation (and blends between the two to make it look nice). In the case of Commando, animation doesn't affect the code of skills at all. Fun little bonus fact for y'all: There's code inside Double Tap that allows for reloading. So perhaps, at one point, you had a fixed number of shots (one shot per stock) and had to reload for a short time before your stock was fully refunded. It seems they removed that to just allow you to fire constantly, so you could have more consistent DPS. It might've just felt bad to have to reload all the time.
All I talked about above was commando. Interestingly, Huntress actually DOES use animation information - however, it's not as influencial as you think. Within FixedUpdate, it effectively asks 'has the attack animation started'. If it does, it fires the arrow (which is not a projectile, it's some other weird thing called an Orb, but that's not relevant here). This would only really affect the very beginning of when you start attacking, not the time between attacks (or attack speed). Huntress also uses an 'arrow reload' system, where it has a fixed time to 'reload' the arrow between each attack ALONG with the normal duration stuff. This is probably the reason you cap at 30 per second for huntress, because it not only has the duration between each shot, it also has to reload between each shot. MUL-T (known affectionately as 'toolbot' in code) has some funky stuff relating to spinning up and spinning down the nailgun, but other than that, it effectively has 'wait x seconds, fire the nail, repeat' in FixedUpdate, which results in the hard limit of 60 per second. EDIT: please note, I'm not a professional programmer. I'm just doing this as a hobby and for fun. I'm more into design than coding, but I have to code if I want to make Manipulator (the survivor I'm creating) a thing.
This is strange Fixed update is called by default 50 times per second, not 60. I dont see why someone would change that tbh, but it is possible Tho Comando having a cap at 20 is still strange, if it used double tap as "2 fire, 1 reload" frames, the cap would be 40, but its actually half of that
Yeah that's right. The duration of the attack animation is modified by the attack speed value. Source: I've been looking at RoR2 source code since RoR2 modding was a thing.
An animation can be viewed as icing on a cake tho. An animation is played for you the player to understand that you are shooting, it usually has no ties to the actual fire rate. Its just feedback Thats why in some game a Tposing character can still be interactible and act normally even if it is not moving. Animation is meerly just feedback
You could read then as "casting time" vs "cooldown time". It's easier to grasp if you know about stutterstepping in MOBAs, where characters are static when attacking, but inbetween attacks you can move your character, and stop moving at the right moment to begin attacking again without any loss of dps if done perfectly... that techinque hinges on letting the attack animation (or casting time of the attack) go on while stationary, then moving while the attack is on cooldown, before it could start the animation again. If you move before the attack is shot (while still "casting") you cancel the attack and lose damage. If you take too long, the next attack has begun... Here in Risk of Rain it's much harder to see what the casting time and cooldown actually are because attacks are so fast AND you can attack while moving, so it's impossible to tell any difference... but we just found the way: Attack speed just reduces the cooldown, so the "casting" part is what limits the benefits of attack speed. Seeing as commando can have 20 shots per second, I guess his attack casting time is 50ms. (50x20= 1000ms, or one second) Huntress can have 30 shots per second, so her attack cast time must be 33.33ms And Multi having 60 shots per second, his attack casting should be around 16.66ms Considering most games measure the time in ms, I guess some modder can find those values on the files? the casting time might be tied to the fps the game runs at, too.
@@cowonavuwus8758 Not necessarily. In many games, yes the actions are completely disconnected from the animations. "Animation cancelling" is a peak example of that, with commands running through perfectly. However, it's up to the programmers to decide how to implement animations. Many modern developers choose to base actions ON the animation itself. For example, "When the last sprite in frame is the active sprite: do something" or in Risk of Rain's case, when the commando finishes lowering his gun, reset the attack flag back to ready. Animations are not merely just feedback, but can be used as triggers for flags in the code itself. This usually helps with clarity and aligns the player's perspective with the game's processing.
Not really knowing much about this kind of thing, I would guess it could be attack speed actually reducing a cooldown between attacks rather than "speed" of attack and at a certain point each survivor hits some kind of internal cooldown cap, much like how abilities have a global minimum cooldown between uses.
That actually seems logical, since similar things happen with other items like Alien Head always leave a cap on cooldowns at a threshold. The same could be applicative to attack speed once a threshold is met
right - question is: why is that minimum cooldown different between survivors? it'd make much more sense to just keep it the same across the board and, at that point, why not just make it work as everyone would expect (affecting the actual rate of fire?)
@@nathanharris9093 It also makes sense that Mul-T is the fastest one as he basically fires a chaingun, while commando and huntress have to either actuate a trigger or fire an arrow, I think it lines up.
The short version is, it has to do with the EntityState manager shifting between the FirePistol2 state, and the Idle state between shots while you're holding m1 Whereas, with nailgun and saw, for example, you stay in the same state, so it's only capped by the number of updates the game does in a second
That explains why Mul-T is capped at 60 shots/s, because I saw somewhere else in this thread that no matter your framerate the game runs its logic at 60 fps, but what I wonder is why Huntress hits the same cap as Commando and then suddenly breaks through to meet her own cap
@@gameridiotNOT I've done so more looking into it, since I posted this comment, it's because at max attack speed commando actually enters an unused reload state This means that his fire cycle is 3 frames long FirePistol2->ReloadPistol->Idle->repeat Whereas with huntress, you just go between 2 FireSeekingArrow->Idle->repeat The sudden jump is just a matter of rounding
@@gameridiotNOT The reason it looks like Huntress caps the same as Commando and then suddenly jumps is relatively simple. The game runs at 60 frames per second. Instead of thinking of it as jumping from 20 to 30 shots per second, think of it as a shot every 3 frames to every 2 frames. It jumps that much because you can’t shoot a projectile every 2.5 frames, it has to be a whole number.
You're counting from the frame you first had 1 stack of bleed, so if 10 seconds later you have 61 stacks, you've gained 60 stacks in 10 seconds and that's 6 shots per second. Similarly, the cap is 200 stacks in 10 secs, 20 stacks per second or one stack every 3 frames.
Let's say you have a block of wood that's 6" long, and you measure it with a ruler. If you line up one end of the block with the 1" mark, the other end will line up with the 7" mark. This does not make the block 7" long. You started with 1 bleed at T=0.0, so you should expect, with 6 stacks per second for 10 seconds, 61 bleed stacks at T=10.0
@@seangoad7412 Your analogy doesn't work because we're measuring time, not distance. You have to start measuring from the first frame that bleed stack is available, because thats when the hit is registered by the game. the 61st stack also landed before the 10.0 seconds, so the measurement is still accurate.
I'd assume that every attack has 3 mini phases, one Pre-Fire animation, one actual phase where the protectile comes out, and one after animation phase (imagine like after you release the trigger for nailgun). I know this is how autos work in Smite for instance. I'd guess Huntress and Commando have these 3 phases which present a much greater restriction on their attack speed even as it increases whereas Multi is a single "trigger pull" with no need for more animations until you let go of the trigger. Essentially, Commando or Huntress would be more like Semi Auto (that feels like a full auto to us), whereas Multi Nailgun is the only true Automatic in the game.
It looks like it's purely based on the animations. MUL-T has the simplest and fastest animation for firing his nailgun (1 frame) while Commando's double tap is 3 frames. That's why you get 60 shots per second from MUL-T (60 fps / 1 frame per animation = 60 animations per second) vs 20 for Commando (60 fps / 3 frames = 20 animations). Huntress is 2 frames so she caps at 30.
As a comp sci major this kind of stuff is always fun to learn about! Thanks for going through the effort to drill down on this and make an informative video!
Interesting video. If I had to guess the source, I can think of one actually: animations. Chances are, the reason there's a hard cap on DPS on these three characters is because the game has no workaround for when DPS would surpass the maximum speed the attack animation can play at. If you have a dissonance between the projectiles being shot and the animation it's going to start to shoot when the character isn't even in the correct position to do so, and as a result the game hard cuts-off at a certain value to ensure the rate of fire matches the shooting animation. Go any faster and the animations literally cannot keep up, which makes sense- eventually you go so fast it doesn't look right anymore lol If they had a unique animation that didn't consider elements like the Huntress drawing back her arrows or MUL-T's rotating gun or Commando's pistols moving up and down when he shoots, chances are this hard cap might not exist. Just a theory, of course, but it's the only one I can come up with that properly explains why there's a hard cap here without any holes in the logic.
Yeah, well it makes sense that you cannot have infinite attack speed, but the attack speed increase, should make sense and be linear, not completely random.
@@ShadowSlith789 like fossilized nerd and vi7ec have the answer when you combine them. There seems to be 2 animation components to attacks, where attack speed only affects one. If it affected both, the animations would get scrambled and look wonky with enough attack speed. Arrows might come out of huntresses bow without it even being pulled back. The devs must've done it this way to prioritize visuals over the attack speed stat being completely accurate. The attack speed increase isn't completely random, but only part of each 'attack' is being sped up. This would result in a still linear increase to the first animation, but diminishing returns come in when you stack too much attack speed, as the second part is not affected. As the first animation gets faster and faster, the attack speed stat actually affects attack speed less and less because the second animation is unaffected. This would explain it all, but like Fossilized nerd said, just a theory.
The game doesn't rely on any animation at all to determine timing of things (this would lead to a lot of issues). When Commando uses Double Tap, it tells the character model 'play this animation' and continues on its way. The code gives commands to the animation controller, and the animation controller figures out the rest. It doesn't send anything back to the code. In other words, animation doesn't have any influence on the code of skills. I put up a comment explaining what I found (I'm a modder, creator of Manipulator) in more detail, but the reason there's a hard cap on attacks per second is because unity (the game engine) only checks things within skills at a fixed rate (60 times per second, using something called FixedUpdate). Since most skills have it so it's only one shot per fixed update, that puts a hard limit on the number of times you can fire per second.
Could you do armor next? I’m just curious on if it’s good in small amounts or large amounts, and if it’s good for short or long runs. Oh also how shattering justice works and what enemies have armor, also thanks for this video, now I know why my attempts at broken attack speed feel weird, oh also got a profile picture, it was commissioned
Armor gives you a % damage reduction, and scales Logarithmically. This means that its stronger at first and gets weaker and weaker over time, similar to teddy bears. Shattering justice, on most enemies who have no armor, equates to about 33% bonus damage taken. Armor reduction can go negatives, so it works on all enemies throughout the game. Those are what I know of armor at this time.
I think armor scales much more intuitively tho. This video is making me want to test it myself somehow, but I’m pretty sure armor follows a simple ish equation that the wiki editors have already figured out. It just scales logarithmically
I don't think it can be overstated how important the mentality of "Do your own research" is. Super kudos for having it and acting on it. The world needs more of this.
I don't think i saw anyone suggest something like this but it could be fixed like this: 1 (+1 per level) 'extra shot' points per shot (the next shot shoots (x/10=n) extra projectiles only when n is a whole number) At 1 stack, 2 projectiles are fired on the 10 shot 2 stacks, 2 projectiles are fired on the 5th shot 3 stacks, 2 projectiles are fired on the fourth shot, then on the third, then third, then fourth again, et cetera 10 stacks, 2 every shot 25 stacks, 3 every shot + 1 every second shot et cetera
Based on this, is there then a spreadsheet for the max attack speed of each survivor, and correspondingly some mix of items of how to get there? On a side note, I wish that you could keep scaling, but the game would handle it by just multiplying the damage by 2 or something if you had hit double cap, 3 if you hit triple, etc.
My gues is that just like minecraft risk of rain has a cooldown times between each attack. Because in minecraft the "instant break" that many people seek to mine out stone and other things is not truely instant IF you want to break more than 1 block. Bevause if you want to break a second block you need to wait (a certain miniscule amount) to start breaking the other one. This could be happening in risk of rain where you reach a point that your attack can be an "instant attack" and activiate as fast as it can but it needs to wait for the "cooldown timer" of an attack to attack again. Resulting in an atackspeed cap like you saw in your testing.
What they could do in order to alleviate the issues of animation limits would be be to trigger an internal double damage trigger chance increasing with the increase in attack speed making it so that you can get above the animation cap limit and it would probably get closer to the expected values. It'd also be hard to spot without going frame by frame since the numbers flash so fast at that point that you'd be hard pressed to notice.
FYI, "increases by 70%" and "multiplies by 1.7" are the same thing. When you increase by a percentage, you are multiplying. The text for tonic is correct.
They are not the same if you have multiple sources of increased attack speed. If you already have some syringes, mochas, zerker pauldrons, etc active - their %s are all summed to make the total. +70% when you already have 250% is different than +70% when you have 100%. Tonic is different in that it is always increasing your total by 70%, regardless of your other increases, hence, a multiplicative increase. The issue is that both tonic and all other sources of attack speed are worded the exact same way - look at a game like Path of Exile, which solves this issue by using the word "more" for multiplicative increases and "increased" for additive
My guess as to why it's happening: character animations seem to be running at 60 fps and a single animation can't be under 1 frame and their length is, well, a whole ammout of frames, so some characters like commando have a maximum speed of 20 shots per second(probably has an animation for reading to attack, attacking and post-attack), some like huntress have a maximum of 30 shots per second(probably the post-attack animation is actually a part of the shooting animation), while MUL-T has only 1 animation between attacks(the attack animation) and the cap is 60. The reason for the incorrect scaling is probably because all the animations get their durations rounded up, which means you get 3 additional frames between your attacks. The huntres jumping from 20 to 30 is just one of her animations jumping from 2 frames to 1
This game is made in Unity, meaning shooting was probably made using animation events (Running a function on a specific animation's frame). The faster the animation, the faster the attack speed. So, why is there a hard cap? Most probably caused by Unity. The amount of animation frames that have to be done in a single frame might be too many for the game to handle, meaning it would crash/freeze/lag if there wasn't a cap. This explains it all. The devs had to cap the attack speed in order to make it possible for Unity to run the animations properly. So, why is the number different for every character? Simple: they have longer or shorter animations than the others.
the reason you hit 61 stacks with base attack speed is because rate of fire is more accurately represented as the amount of delay between each shot as long as the trigger is being held. the one exception to this is that the first shot (in almost all cases, in almost all games) comes out as soon as you pull the trigger, with zero delay. therefor, if you click, you get 1 bullet in zero seconds, then you hold the m1 for 10 seconds, and get 6 bullets every second, totaling 61 bullets.
This is extremely easy to explain. It's capped by the animations. The devs probably noticed this but left it as is for a number of reasons. 1.stability. The game can already get demanding on your PC in long runs. Not having a speed cap could lead to crashes. 2. If the run has gone long enough for you to get this many of the same item, you will instantly die for not having the others. Players who are good enough to get that far will know better than to fall into this pitfall (outside of for the sake of doing it). 3. If you take the recyclers and printers out of the equation, you will not reach these numbers consistently. 4. The game is clearly designed with soft break points in mind. All rewards fall into the "20 stages or less in a run" category. Pretty much all roguelikes have this same soft cap element.
Out of every video I could ever watch- League, Valorant, Path of Exile... I ALWAYS come back to watch more RoR2 videos from Woolie. Hopoo made me love their game development theory with RoR1 (the game that made me love them) and it always makes me smile, seeing people make content for this game; be it mods or informational videos. Much love Woolie, keep doin ya thang!
Alright ill use Warframe as an example for the comparison since im more familiar with it. In warframe we have mods (which are stat increases), adding +90% fire rate will just give the expected result (aka spawn bullet faster), however adding +90% reload speed will *not* give the expected result, this is because certain stuff are tied to animations, so the potential answer here is that RoR2 attacks are tied to animations, and potentially the cap is placed when an attack animation ends before the next tick starts, since commando's primary is a burst of 2 bullets (and as such a longer animation loop) that could explain why the cap is much lower than his suppresive fire TLDR: attack = animation, animaion = cooldown, cooldown ≥ tickrate
There are ways they could program the game to better scale with insane attack speed. That would eventually lead to you firing more than one bullet per frame, scaling upwards until you basically have a 60 shots per second phase blast on your primary. They likely didn't bother because only a small number of players would ever reach that ridiculous amount of speed and an even smaller number would notice any problems. But it would be cool.
I just did a run with the rail gunner where all I took was soldiers syringes and leech seeds, it worked well for a while but I eventually lost when the recoil got so bad I got launched out of the map and died before I could regain health with leech seed.
Interestingly this means that there's even more variation on how much a survivor benefits from attack speed. Obv for certain survivors attack speed just works differently (e.g. Artificer M2 charge time, or Captain narrowing his M1 spread faster) but for these 3 sustain fire survivors, Mult-T benefits more from AS than Huntress than Commando, by your numbers. This would extend through the synergistic value of attack speed increasing on-hit effect proc rates (when measured over time)
Hey Woolie! My 6yo and I have been watching you a lot lately. We have 4 achievements left to unlock, and we've needed a lot of advice along the way. You're great! Good wholesome content without a bunch of cursing or inappropriate stuff. Thanks for doing what you're doing and keep it up!
I've watched a few of your videos... I used to have my hair like that. Props. All the videos have been good... then I saw this video.. "...looks like I'm going to have to science the shit outta this..." Sub'd for going with the 'for science' mentality. 10/10 on the video.
Obviously others have pointed out that this is most likely tied to animation speeds but I think it also comes down to the games processing speed too. Every attack with commando fires 1 bullet and 1 bullet only. That is a constant thing. Only things such as captains primary act differently. This would be the same for all other attacks as well. So logically since the game processes at a speed of 60fps this would put a hard cap of attack speed at 60/second for everything in the game.
Woolie gives off that metalhead super-nerd energy. Like did anyone else have that one extremely nice/cool metalhead nerd they knew in Highschool or college?
Suppressive fire is obviously firing at max one shot per frame, maybe the others have frame breakpoints? Like you know how Mario moves one pixel on one frame and two on the next with a 1.5 pixel speed? Maybe the attack speed in ror2 just can't do that and only adheres to frame breakpoints, maybe even based on the character's shooting animation. Maybe it takes 6 frames to complete double tap's animation, resulting in 1 stack per 3 frames, but mul-t only takes 2 frames, so 1 stack per 2 frames? If also be interested to see the effects of very high attack speed on attacks with lower base rate, like the rebar, or engineer's grenades (since you can't hold on to the charge forever like captain).
I mean it kinda worked that way in 1 but that was because suppresing fire didnt scale its numbers of attacks so you would activate it only to shot six shots intantly and then just go back to double tap
I would say that attack speed for base attacks are based on an inverse negative exponential (base attack speed*(-10^(-0.1*syringe number) +2))) that would explain the number ceiling and why the numbers don’t quite add up and look like they slow down.
The devs knew you would come looking, and left a trail of crumbs for you to follow. But the crumbs lead nowhere except back to the ready-up button. They have laid a trap and you fell for it woolie. Now, like sisyphus, you are now bound to this fate. Forever on ye shall return to the start screen, never finding solace, never reaching the peak, never... escaping the rain.
Can we all just appreciate that the Huntress is looking like she is giving the camera "the hand" the whole time when firing stupidly fast? "Look, I'm busy, Ok? Just wait." -Huntress, probably
Warframe has a similar issue where every weapon has an internal fire rate cap it isn't explained anywhere. Most of the reason is to prevent crashes with audio errors
Thanks for continuing to make the best ROR2 content out there Woolie. Love it when i can catch your streams. Please keep giving us the OMEGA value all the time
Loving all your videos man. I started watching after buying RoR2 on PS4 and not really understanding how a lot of stuff works, your videos have helped a bunch 😁
i dont play risk of rain 2, only watched like 5 videos of it in my whole life from other content creators. BUT i actually understood what this man said for 11 mins and 28 seconds
maybe whats actually happening is division of attack time instead of multiplication of attack rate. For instance you're firing 6 shots over the length of the animation so to get the real fire rate you'd need something like (animation time)/attack rate * attack speed increase. So the more syringes you have the faster the animation plays, but the animation can never play at zero because you can never make anything zero through division. Of course there still has to be some delays between animations to explain the random caps for each character. Just speculation of course. The potential solution for this could just be doubling projectiles beyond a specific attack speed threshold, IE if you have 200% attack speed then fire twice as many projectiles. But of course that doesn't work for melee only characters, whose attack speed would be capped at frame rate, for them you would have to create an extra damage hitbox or something similar.
8:40 Have you considered that it's the delay between activations of double tap, similarly to how uh... Wake of the Vultures? The one that gives you max cooldown speed when you kill an elite can't bypass the minimum cooldown. Then it would make Mul-T's results make more sense as he was probably coded to just fire on every available frame where he doesn't have a cooldown since his is just fully automatic with no real special features or animations.
Well, what you've really taught me today was at what point I should stop collecting syringes when I'm bored playing with huntress with artifact of command on 🤣
Just a detail but you had indeed 6 shots/s at base AS, because you started when the enemy was at one stack and 10seconds later he was at 61 stacks. It means that you added 60 stacks in 10 seconds so a fire rate of 6shots/s
It's like in WC3 when in some custom maps have similar attack speed as ranged and melee champs. Melee champs have much more actual AS then ranged cause the animation of the attacks.
I thought they meant that because of suppressive fire's cooldown, double tap fires more shots overall and therefore "Fires Faster". But as every other comment on this video states; It's animation delay.
I personally think they were accounting for the cool-down for suppressive fire when saying double tap procs faster than double tap because with cool-down and base attack speed it is faster at procing
With a hard cap made for each survivor based on animation time, you can create caps of attack speed that decide the best total amount of attack speed for a build. Mul-T has the best scaling with attack speed and a far higher cap than other survivors at a total of 60 per second. That means his cap is 4.8 attack speed, 480% total. Knowing this, you can put him up to 375% bonus attack speed. With a tonic, that's caps lowered to 2.82 total attack speed, meaning you only need 180% extra attack speed with a tonic to cap the total. Commando caps at a measly 20 a second, making his scaling with attack speed stop at 3.33 and at 1.96 with a tonic. The Huntress caps at 30, meaning she caps at an enormous 15 attack speed and 8.8 with a tonic. That's mainly because her scaling is so poor with attack speed in general. This means the commando has good initial scaling with attack speed, but taps out at 1/3rd the dps and bleed potential of Mul-T. Ouch. You won't really hit that limit in most games, but with a tonic, that's not that difficult a limit to reach, actually warhorn and predatory instincts caps it out. Mul-T's scaling is otherwordly, as I expected from personal experience. I can calculate the other caps for this kind of thing if someone hands me the raw numbers like this video has. My numbers could be slightly off as well.
So the result is, there is a hard cap on number of shots per round, that varies per character, and suppressive fire is better than double tap. I wonder if the hard cap is preventing number of projectiles on screen, to keep the frame rate high. It looks like PlasmaCore1219 actually kind of answers this talking about it is a bit about animation, but a bit about frame rate cap. Find that thread, currently 5th from top for me, got it.
if i had to guess theres an internal cooldown for each proc meaning you can only proc a certain item once every x amount of time there could also be a cap for attack speed on each survivor try counting each number from the primary for 10 seconds and see if it matches up with the amount of bleed stacks
the reason why mathimatical formulas dont perfectly reflect games is because of game coding. Animation speeds tic speeds and processing speeds of bullets in games will technically affect how you time its travel speed
Preemptive guess as to what’s going on as soon as I heard attackspeed is fully functioning on a move that scales shot count but not for its normal function, I’m guessing part if the animation/timing or double tap isn’t registering attackspeed, some sort of input cooldown or similar, so the AS is less effective and the gap will grow exponentially as AS rises
I managed to get to the point I could mostly use suppressive fire constantly through normal gameplay. It was only after killing an elite, but I had brainstalks and could kill another elite by spamming suppressive fire before the buff ended. Funny enough, I also tried just using double tap since the information on the wiki seemed weird. I couldn't kill elites fast enough to renew brainstalks with double tap, but I could with suppressive fire. Both have a proc coefficient of 1 and are stated in game to do 100% damage per shot, so the only reason simply reducing cooldowns to half a second would let me kill faster with suppressive fire is the fire rate being higher than double tap's.
I noticed that huntress when using the flurry primary will start shooting less arrows than usual with a high enough attack speed. It is supposed to be 3 arrows a shot (without crit) but eventually be 2 and even one with a high enough attack speed
Something worth noting that I didn't see in the video is that bleed works for counting hits despite the 3 second length of effect due to the fact that the bleed timer resets upon getting another stack of bleed It confused me so I figured I'd share with the class
I don't know if you read comments on old videos so I'm dropping this here. I've never seen you mention the synergy between Artifact of sacrifice and the stages where the game clock doesn't advance. The void fields, the gilded coast and Bulwark's Ambry present areas where you can technically get unlimited items without advancing the difficulty of your run, at least if I understand everything correctly. I've been running without command and found it more fun to see how the build develops but I will drop into Bulwark's on command at my first loop to fill out my build with things I've missed just to give my runs better chances.
They have to implement attack speed caps in games because sooner or later the animation quality will degrade in that it won't reflect the attacks well at a certain attack speed/play too quickly etc.
Wouldn't it be because attack speed is multiplying an animation, not just a "fire rate" like a gun. Mul-T is firing a gun where the animation is so quick that it doesn't add to the "delay" for missing shots.
Congratulations Woolie. You proved that wiki's aren't always reliable. Beside that, like others have mentioned, this appears to be an animation issue. The reason Mul-T's line up so well is because they have less frames of animation than Commando & Huntress. The only real way to solve this is to create new attack animations. At the limits of Risk of Rain's sped up animations, Commando fires on the 3rd frame. Huntress fires on the 2nd, and Mul-T (because they have none) fire on the 1st. Because it's a 60 FPS game, it lines up with the shots / second.
I feel like Woolie is the type of guy that would research why some boxes of Lucky Charms have more marshmallows than others. Or why Lay's chips have so much air in them... these are mysterious that I would like cracked.
MOOOM! Woolie is making me learn again 😡😡😡
😡😡
😡😡😡😡😡
😡😡😡😡😡😡😡😡
😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡
Question: what is Huntress's alt primary cap, and does the double shots with crit affect that cap?
So, I solved this mathematically. Here’s what’s going on.
Attack speed decreases the animation time, but not the time between animations. This means that there is a constant that your formula isn’t accounting for. With your real-world testing data, we can solve for that constant.
Commando has a constant of 3. This is because he keeps a constant 2 frames in between each double tap shot. This distorts the scaling and gives him a cap of 20 shots per second once he is able to fire in one frame. Two frames of cooldown, one to fire.
Huntress’s constant is 2. This means she has the same issue, but with only one unchanging frame, giving her 30 shots per second.
Mul-T has no animation between shots, so his constant is 1. This means he scales 1:1 and caps out at 60 shots per second (one per frame).
Even if your game “runs” faster, I believe the animations always lock at 60fps so there’s no way to fix this.
Side note: this is also the reason you keep getting slightly over the expected value (like 20.1 instead of 20.0). You are skipping the cooldown frames on the last shot and the firing animation frames on the first shot.
Makes sense.
Question is: why even have the cooldown period? The only reason I can think of is to preserve animation smoothness / integrity.
I think most people wouldn't mind a wonky animation if it meant actually scaling intuitively
Bro how the hell you so smart, I feel dumb as bricks trying to figure this out myself. xD
@@Woolie it is indeed animation integrity. A lot of games have this issue; PUBG and fortnite guns would fire more slowly if your frame rate didn’t sync up with the gun’s animation.
The cooldown animation exists so that you can’t overlap animations (like firing a phase round and a normal shot at the same time). It’s definitely necessary. The question is, why doesn’t it scale?
Probably due to a bug. If all animations scaled on attack speed, it could cause problems with movement animations or projectile speed.
Obviously only the devs can answer that question; we can only speculate. But now we know how to calculate and control for it.
In the meantime, this makes Huntress’s alternate primary much better. The alt primary has a higher animation:cooldown ratio, meaning that it scales better on attack speed than the main huntress’s primary. We can probably find similar situations on other characters.
@@Woolie I think hopoo probably decided that you need such a stupidly high attack speed before you run into this problem, that it isn’t worth fixing. I’d agree tbh, I’ve never seen a run go long enough to have this much attack speed lol. But it is annoying that attack speed doesn’t really scale intuitively at all.
@@kosmickalamity7071 I mean, the caps don’t matter, but the difference between 8.6 and 10 shots per second is pretty big at 10 syringes.
So, I'm a modder (creator of Manipulator) and had an actual look into the code of things. The game doesn't calculate how many shots should be fired per second, but instead calculates what the duration between each shot should be. The game itself checks this duration with what is called FixedUpdate. It's something Unity (the engine Risk Of Rain 2 uses) has that activates at a fixed rate of time. In this case, FixedUpdate activates a total of 60 times per second. This means that it's impossible to go above 60 shots per second, because it can only fire a single shot per FixedUpdate.
This is how it works for Double Tap; it figures out the duration (Base Duration / Attack Speed), fires the bullet, and waits the calculated duration before allowing you to fire another bullet (by starting the code all over again). I've only had a quick glance and am unsure why Double Tap caps out at 20 per second, but it may be some other thing in code that I didn't see, or some form of balance from the developers. The reason it fires 61 shots per 10 seconds is because if fires the bullet IMMEDIATELY and THEN starts calculating duration, so it manages to get an extra bullet in at first.
Suppressive Fire works a little bit differently. It has a fixed 'minimum' duration, a duration between each shot (Duration Between Shots / Attack Speed), and the number of shots it needs to fire (base Bullet Count * Attack Speed) before it finishes. It fires the first bullet, and uses FixedUpdate to fire the rest. Within FixedUpdate, it checks if it has passed the 'Duration between shots' timer, and fires a bullet if it has. It then also checks if the 'age' (how long it has been since the ability started) of the ability is higher than the minimum duration AND if it has fired the correct number of shots. If both of those are true, the ability ends. Since there is a maximum rate at which bullets can fire (60 per second), this script will keep looping until you either interrupt it, or it has fired the target number of bullets.
Coding things like this is easier for a computer to understand and calculate, but can sometimes end up with funky situations like the ones you've come across. People have been mentioning that animations may be the cause, but this isn't the case. Animation is purely visual, and triggered by the code - the code isn't affected by animation unless the code requests it. The code simply tells the character model 'play this animation' when it fires this bullet. If a new animation is started, it immediately overrides the old animation (and blends between the two to make it look nice). In the case of Commando, animation doesn't affect the code of skills at all.
Fun little bonus fact for y'all: There's code inside Double Tap that allows for reloading. So perhaps, at one point, you had a fixed number of shots (one shot per stock) and had to reload for a short time before your stock was fully refunded. It seems they removed that to just allow you to fire constantly, so you could have more consistent DPS. It might've just felt bad to have to reload all the time.
All I talked about above was commando. Interestingly, Huntress actually DOES use animation information - however, it's not as influencial as you think. Within FixedUpdate, it effectively asks 'has the attack animation started'. If it does, it fires the arrow (which is not a projectile, it's some other weird thing called an Orb, but that's not relevant here). This would only really affect the very beginning of when you start attacking, not the time between attacks (or attack speed).
Huntress also uses an 'arrow reload' system, where it has a fixed time to 'reload' the arrow between each attack ALONG with the normal duration stuff. This is probably the reason you cap at 30 per second for huntress, because it not only has the duration between each shot, it also has to reload between each shot.
MUL-T (known affectionately as 'toolbot' in code) has some funky stuff relating to spinning up and spinning down the nailgun, but other than that, it effectively has 'wait x seconds, fire the nail, repeat' in FixedUpdate, which results in the hard limit of 60 per second.
EDIT: please note, I'm not a professional programmer. I'm just doing this as a hobby and for fun. I'm more into design than coding, but I have to code if I want to make Manipulator (the survivor I'm creating) a thing.
This is strange
Fixed update is called by default 50 times per second, not 60. I dont see why someone would change that tbh, but it is possible
Tho Comando having a cap at 20 is still strange, if it used double tap as "2 fire, 1 reload" frames, the cap would be 40, but its actually half of that
@@vale7610 yeah okay , but most importantly , will it blend ?
You can just change the fixed update rate by changing Time.fixedDeltaTime value
Thanks for the in-depth on the game design, it could be a good reference
Attack speed affects the attack animation, not the delay between attacks animation
Yeah that's right. The duration of the attack animation is modified by the attack speed value.
Source: I've been looking at RoR2 source code since RoR2 modding was a thing.
@@TheLegendsmith I looked at the artificer's M2, and I noticed that the charging time is decreasing
An animation can be viewed as icing on a cake tho. An animation is played for you the player to understand that you are shooting, it usually has no ties to the actual fire rate. Its just feedback
Thats why in some game a Tposing character can still be interactible and act normally even if it is not moving. Animation is meerly just feedback
You could read then as "casting time" vs "cooldown time". It's easier to grasp if you know about stutterstepping in MOBAs, where characters are static when attacking, but inbetween attacks you can move your character, and stop moving at the right moment to begin attacking again without any loss of dps if done perfectly... that techinque hinges on letting the attack animation (or casting time of the attack) go on while stationary, then moving while the attack is on cooldown, before it could start the animation again. If you move before the attack is shot (while still "casting") you cancel the attack and lose damage. If you take too long, the next attack has begun... Here in Risk of Rain it's much harder to see what the casting time and cooldown actually are because attacks are so fast AND you can attack while moving, so it's impossible to tell any difference... but we just found the way: Attack speed just reduces the cooldown, so the "casting" part is what limits the benefits of attack speed.
Seeing as commando can have 20 shots per second, I guess his attack casting time is 50ms. (50x20= 1000ms, or one second)
Huntress can have 30 shots per second, so her attack cast time must be 33.33ms
And Multi having 60 shots per second, his attack casting should be around 16.66ms
Considering most games measure the time in ms, I guess some modder can find those values on the files? the casting time might be tied to the fps the game runs at, too.
@@cowonavuwus8758 Not necessarily. In many games, yes the actions are completely disconnected from the animations. "Animation cancelling" is a peak example of that, with commands running through perfectly. However, it's up to the programmers to decide how to implement animations. Many modern developers choose to base actions ON the animation itself. For example, "When the last sprite in frame is the active sprite: do something" or in Risk of Rain's case, when the commando finishes lowering his gun, reset the attack flag back to ready.
Animations are not merely just feedback, but can be used as triggers for flags in the code itself. This usually helps with clarity and aligns the player's perspective with the game's processing.
Not really knowing much about this kind of thing, I would guess it could be attack speed actually reducing a cooldown between attacks rather than "speed" of attack and at a certain point each survivor hits some kind of internal cooldown cap, much like how abilities have a global minimum cooldown between uses.
That actually seems logical, since similar things happen with other items like Alien Head always leave a cap on cooldowns at a threshold. The same could be applicative to attack speed once a threshold is met
right - question is: why is that minimum cooldown different between survivors?
it'd make much more sense to just keep it the same across the board
and, at that point, why not just make it work as everyone would expect (affecting the actual rate of fire?)
Maybe there is a cap how fast they can play the attack animation.
Different animations -> different caps?
This was the same thought I had. It might have to do with the animations.
@@nathanharris9093 It also makes sense that Mul-T is the fastest one as he basically fires a chaingun, while commando and huntress have to either actuate a trigger or fire an arrow, I think it lines up.
The short version is, it has to do with the EntityState manager shifting between the FirePistol2 state, and the Idle state between shots while you're holding m1
Whereas, with nailgun and saw, for example, you stay in the same state, so it's only capped by the number of updates the game does in a second
As a modder, I have analyzed the code of the game to figure this out. I can say I at least *mostly* know what I'm talking about.
That explains why Mul-T is capped at 60 shots/s, because I saw somewhere else in this thread that no matter your framerate the game runs its logic at 60 fps, but what I wonder is why Huntress hits the same cap as Commando and then suddenly breaks through to meet her own cap
@@gameridiotNOT I've done so more looking into it, since I posted this comment, it's because at max attack speed commando actually enters an unused reload state
This means that his fire cycle is 3 frames long
FirePistol2->ReloadPistol->Idle->repeat
Whereas with huntress, you just go between 2
FireSeekingArrow->Idle->repeat
The sudden jump is just a matter of rounding
@@gameridiotNOT The reason it looks like Huntress caps the same as Commando and then suddenly jumps is relatively simple. The game runs at 60 frames per second. Instead of thinking of it as jumping from 20 to 30 shots per second, think of it as a shot every 3 frames to every 2 frames. It jumps that much because you can’t shoot a projectile every 2.5 frames, it has to be a whole number.
You're counting from the frame you first had 1 stack of bleed, so if 10 seconds later you have 61 stacks, you've gained 60 stacks in 10 seconds and that's 6 shots per second. Similarly, the cap is 200 stacks in 10 secs, 20 stacks per second or one stack every 3 frames.
check out 2:35 in the vid again, my good sir
@@Woolie Your method for calculating attack speed was perfect, ya just forgot to subtract a 1 =P
@@Woolie whoo, 60 stacks (after the first hit) in 9.986 seconds ≈ 6.00841 shots/s
wiki LIED
Let's say you have a block of wood that's 6" long, and you measure it with a ruler. If you line up one end of the block with the 1" mark, the other end will line up with the 7" mark. This does not make the block 7" long. You started with 1 bleed at T=0.0, so you should expect, with 6 stacks per second for 10 seconds, 61 bleed stacks at T=10.0
@@seangoad7412 Your analogy doesn't work because we're measuring time, not distance. You have to start measuring from the first frame that bleed stack is available, because thats when the hit is registered by the game. the 61st stack also landed before the 10.0 seconds, so the measurement is still accurate.
I'd assume that every attack has 3 mini phases, one Pre-Fire animation, one actual phase where the protectile comes out, and one after animation phase (imagine like after you release the trigger for nailgun). I know this is how autos work in Smite for instance.
I'd guess Huntress and Commando have these 3 phases which present a much greater restriction on their attack speed even as it increases whereas Multi is a single "trigger pull" with no need for more animations until you let go of the trigger.
Essentially, Commando or Huntress would be more like Semi Auto (that feels like a full auto to us), whereas Multi Nailgun is the only true Automatic in the game.
It looks like it's purely based on the animations. MUL-T has the simplest and fastest animation for firing his nailgun (1 frame) while Commando's double tap is 3 frames. That's why you get 60 shots per second from MUL-T (60 fps / 1 frame per animation = 60 animations per second) vs 20 for Commando (60 fps / 3 frames = 20 animations). Huntress is 2 frames so she caps at 30.
As a comp sci major this kind of stuff is always fun to learn about! Thanks for going through the effort to drill down on this and make an informative video!
@@emiliogallegosgarcia8573 to highlight my interest in the function of the coding behind the game that causes the game to perform like this.
Interesting video. If I had to guess the source, I can think of one actually: animations.
Chances are, the reason there's a hard cap on DPS on these three characters is because the game has no workaround for when DPS would surpass the maximum speed the attack animation can play at. If you have a dissonance between the projectiles being shot and the animation it's going to start to shoot when the character isn't even in the correct position to do so, and as a result the game hard cuts-off at a certain value to ensure the rate of fire matches the shooting animation. Go any faster and the animations literally cannot keep up, which makes sense- eventually you go so fast it doesn't look right anymore lol
If they had a unique animation that didn't consider elements like the Huntress drawing back her arrows or MUL-T's rotating gun or Commando's pistols moving up and down when he shoots, chances are this hard cap might not exist.
Just a theory, of course, but it's the only one I can come up with that properly explains why there's a hard cap here without any holes in the logic.
But that doesnt explain the scaling mismatch between the expected and actual values
Yeah, well it makes sense that you cannot have infinite attack speed, but the attack speed increase, should make sense and be linear, not completely random.
@@ShadowSlith789 like fossilized nerd and vi7ec have the answer when you combine them. There seems to be 2 animation components to attacks, where attack speed only affects one. If it affected both, the animations would get scrambled and look wonky with enough attack speed. Arrows might come out of huntresses bow without it even being pulled back.
The devs must've done it this way to prioritize visuals over the attack speed stat being completely accurate. The attack speed increase isn't completely random, but only part of each 'attack' is being sped up. This would result in a still linear increase to the first animation, but diminishing returns come in when you stack too much attack speed, as the second part is not affected. As the first animation gets faster and faster, the attack speed stat actually affects attack speed less and less because the second animation is unaffected.
This would explain it all, but like Fossilized nerd said, just a theory.
The game doesn't rely on any animation at all to determine timing of things (this would lead to a lot of issues). When Commando uses Double Tap, it tells the character model 'play this animation' and continues on its way. The code gives commands to the animation controller, and the animation controller figures out the rest. It doesn't send anything back to the code.
In other words, animation doesn't have any influence on the code of skills.
I put up a comment explaining what I found (I'm a modder, creator of Manipulator) in more detail, but the reason there's a hard cap on attacks per second is because unity (the game engine) only checks things within skills at a fixed rate (60 times per second, using something called FixedUpdate). Since most skills have it so it's only one shot per fixed update, that puts a hard limit on the number of times you can fire per second.
Woolie tricked me into doing math homework, SMH.
Now that we have this information, we can generate an item build that most efficiently hits the attack speed cap.
Could you do armor next? I’m just curious on if it’s good in small amounts or large amounts, and if it’s good for short or long runs. Oh also how shattering justice works and what enemies have armor, also thanks for this video, now I know why my attempts at broken attack speed feel weird, oh also got a profile picture, it was commissioned
Armor gives you a % damage reduction, and scales Logarithmically. This means that its stronger at first and gets weaker and weaker over time, similar to teddy bears. Shattering justice, on most enemies who have no armor, equates to about 33% bonus damage taken. Armor reduction can go negatives, so it works on all enemies throughout the game.
Those are what I know of armor at this time.
If I'm not mistaken, most normal enemies have 0 armor and only bosses have some armor, but not 100% sure.
@@hellfrozenphoenix13 Thats not exponential growth. You mean Logarithmic growth.
So, the more repulsion plates I get, the less effective it gets, what’s a good number to go for?
I think armor scales much more intuitively tho. This video is making me want to test it myself somehow, but I’m pretty sure armor follows a simple ish equation that the wiki editors have already figured out. It just scales logarithmically
Me who never played this game: Interesting....
You should play
Did you be honest
I don't think it can be overstated how important the mentality of "Do your own research" is. Super kudos for having it and acting on it. The world needs more of this.
I don't think i saw anyone suggest something like this but it could be fixed like this: 1 (+1 per level) 'extra shot' points per shot (the next shot shoots (x/10=n) extra projectiles only when n is a whole number)
At 1 stack, 2 projectiles are fired on the 10 shot
2 stacks, 2 projectiles are fired on the 5th shot
3 stacks, 2 projectiles are fired on the fourth shot, then on the third, then third, then fourth again, et cetera
10 stacks, 2 every shot
25 stacks, 3 every shot + 1 every second shot
et cetera
Based on this, is there then a spreadsheet for the max attack speed of each survivor, and correspondingly some mix of items of how to get there?
On a side note, I wish that you could keep scaling, but the game would handle it by just multiplying the damage by 2 or something if you had hit double cap, 3 if you hit triple, etc.
@Aegis you should post this idea somewhere where it can get some traction
My gues is that just like minecraft risk of rain has a cooldown times between each attack.
Because in minecraft the "instant break" that many people seek to mine out stone and other things is not truely instant IF you want to break more than 1 block.
Bevause if you want to break a second block you need to wait (a certain miniscule amount) to start breaking the other one.
This could be happening in risk of rain where you reach a point that your attack can be an "instant attack" and activiate as fast as it can but it needs to wait for the "cooldown timer" of an attack to attack again. Resulting in an atackspeed cap like you saw in your testing.
"Ladies and gentlemen, I give you: T H E N U M B E R S" Was probably the best bit I've seen all week lmao.
What they could do in order to alleviate the issues of animation limits would be be to trigger an internal double damage trigger chance increasing with the increase in attack speed making it so that you can get above the animation cap limit and it would probably get closer to the expected values. It'd also be hard to spot without going frame by frame since the numbers flash so fast at that point that you'd be hard pressed to notice.
FYI, "increases by 70%" and "multiplies by 1.7" are the same thing.
When you increase by a percentage, you are multiplying. The text for tonic is correct.
They are not the same if you have multiple sources of increased attack speed.
If you already have some syringes, mochas, zerker pauldrons, etc active - their %s are all summed to make the total. +70% when you already have 250% is different than +70% when you have 100%.
Tonic is different in that it is always increasing your total by 70%, regardless of your other increases, hence, a multiplicative increase.
The issue is that both tonic and all other sources of attack speed are worded the exact same way - look at a game like Path of Exile, which solves this issue by using the word "more" for multiplicative increases and "increased" for additive
Risk of Math
Lol
My guess as to why it's happening:
character animations seem to be running at 60 fps and a single animation can't be under 1 frame and their length is, well, a whole ammout of frames, so some characters like commando have a maximum speed of 20 shots per second(probably has an animation for reading to attack, attacking and post-attack), some like huntress have a maximum of 30 shots per second(probably the post-attack animation is actually a part of the shooting animation), while MUL-T has only 1 animation between attacks(the attack animation) and the cap is 60.
The reason for the incorrect scaling is probably because all the animations get their durations rounded up, which means you get 3 additional frames between your attacks. The huntres jumping from 20 to 30 is just one of her animations jumping from 2 frames to 1
This game is made in Unity, meaning shooting was probably made using animation events (Running a function on a specific animation's frame). The faster the animation, the faster the attack speed. So, why is there a hard cap? Most probably caused by Unity. The amount of animation frames that have to be done in a single frame might be too many for the game to handle, meaning it would crash/freeze/lag if there wasn't a cap. This explains it all. The devs had to cap the attack speed in order to make it possible for Unity to run the animations properly. So, why is the number different for every character? Simple: they have longer or shorter animations than the others.
cool!
the reason you hit 61 stacks with base attack speed is because rate of fire is more accurately represented as the amount of delay between each shot as long as the trigger is being held. the one exception to this is that the first shot (in almost all cases, in almost all games) comes out as soon as you pull the trigger, with zero delay. therefor, if you click, you get 1 bullet in zero seconds, then you hold the m1 for 10 seconds, and get 6 bullets every second, totaling 61 bullets.
Now, despite having to _learn_ (ugh), this was actually a super cool video!!
Now, I wonder what the original video idea was...?
Love that you continue to make content for this game.
Let’s take the time to appreciate how long this man has sat to just raw-test all these combinations. Well done mr. streamer 👍
This is extremely easy to explain. It's capped by the animations. The devs probably noticed this but left it as is for a number of reasons.
1.stability. The game can already get demanding on your PC in long runs. Not having a speed cap could lead to crashes.
2. If the run has gone long enough for you to get this many of the same item, you will instantly die for not having the others. Players who are good enough to get that far will know better than to fall into this pitfall (outside of for the sake of doing it).
3. If you take the recyclers and printers out of the equation, you will not reach these numbers consistently.
4. The game is clearly designed with soft break points in mind. All rewards fall into the "20 stages or less in a run" category.
Pretty much all roguelikes have this same soft cap element.
Out of every video I could ever watch- League, Valorant, Path of Exile...
I ALWAYS come back to watch more RoR2 videos from Woolie. Hopoo made me love their game development theory with RoR1 (the game that made me love them) and it always makes me smile, seeing people make content for this game; be it mods or informational videos. Much love Woolie, keep doin ya thang!
Alright ill use Warframe as an example for the comparison since im more familiar with it. In warframe we have mods (which are stat increases), adding +90% fire rate will just give the expected result (aka spawn bullet faster), however adding +90% reload speed will *not* give the expected result, this is because certain stuff are tied to animations, so the potential answer here is that RoR2 attacks are tied to animations, and potentially the cap is placed when an attack animation ends before the next tick starts, since commando's primary is a burst of 2 bullets (and as such a longer animation loop) that could explain why the cap is much lower than his suppresive fire
TLDR: attack = animation, animaion = cooldown, cooldown ≥ tickrate
the stack tracer is a byte, value rolls gaining what they feel should be a diminishing return, then hard cap the value to the animation per fps.
There are ways they could program the game to better scale with insane attack speed. That would eventually lead to you firing more than one bullet per frame, scaling upwards until you basically have a 60 shots per second phase blast on your primary. They likely didn't bother because only a small number of players would ever reach that ridiculous amount of speed and an even smaller number would notice any problems. But it would be cool.
I just did a run with the rail gunner where all I took was soldiers syringes and leech seeds, it worked well for a while but I eventually lost when the recoil got so bad I got launched out of the map and died before I could regain health with leech seed.
Interestingly this means that there's even more variation on how much a survivor benefits from attack speed. Obv for certain survivors attack speed just works differently (e.g. Artificer M2 charge time, or Captain narrowing his M1 spread faster) but for these 3 sustain fire survivors, Mult-T benefits more from AS than Huntress than Commando, by your numbers. This would extend through the synergistic value of attack speed increasing on-hit effect proc rates (when measured over time)
Big shoutout to my boys Wipwip and Guragura for helping with the reasearch shown here!
Nothing brings me more joy than using artifacts to get 40 syringes, 3 predatory instincts, 9 lens makers glasses, and the brilliant behemoth.
Hey Woolie!
My 6yo and I have been watching you a lot lately. We have 4 achievements left to unlock, and we've needed a lot of advice along the way. You're great! Good wholesome content without a bunch of cursing or inappropriate stuff. Thanks for doing what you're doing and keep it up!
i got 13 soldiers syringes on loader and it was basicly the "standing here i realize" meme against bosses
I've watched a few of your videos... I used to have my hair like that. Props. All the videos have been good... then I saw this video..
"...looks like I'm going to have to science the shit outta this..."
Sub'd for going with the 'for science' mentality.
10/10 on the video.
Obviously others have pointed out that this is most likely tied to animation speeds but I think it also comes down to the games processing speed too.
Every attack with commando fires 1 bullet and 1 bullet only. That is a constant thing. Only things such as captains primary act differently. This would be the same for all other attacks as well.
So logically since the game processes at a speed of 60fps this would put a hard cap of attack speed at 60/second for everything in the game.
Woolie gives off that metalhead super-nerd energy. Like did anyone else have that one extremely nice/cool metalhead nerd they knew in Highschool or college?
My brain fried when I saw numbers
Suppressive fire is obviously firing at max one shot per frame, maybe the others have frame breakpoints?
Like you know how Mario moves one pixel on one frame and two on the next with a 1.5 pixel speed? Maybe the attack speed in ror2 just can't do that and only adheres to frame breakpoints, maybe even based on the character's shooting animation. Maybe it takes 6 frames to complete double tap's animation, resulting in 1 stack per 3 frames, but mul-t only takes 2 frames, so 1 stack per 2 frames?
If also be interested to see the effects of very high attack speed on attacks with lower base rate, like the rebar, or engineer's grenades (since you can't hold on to the charge forever like captain).
I mean it kinda worked that way in 1 but that was because suppresing fire didnt scale its numbers of attacks so you would activate it only to shot six shots intantly and then just go back to double tap
"And console boys, your time has ALMOST come for the Annivers-" And he was consumed anew in the one-run challenge's end-phase.
"Our favorite robot Mul-T"
*SAD FLOWERBOT NOISES*
Paired warbanner, warhorn, and something that gives frenzy. You can turn this game into a bullet hell during bosses
I'm just concerned about the amount of blood this poor twisted scavenger has lost
I would say that attack speed for base attacks are based on an inverse negative exponential (base attack speed*(-10^(-0.1*syringe number) +2))) that would explain the number ceiling and why the numbers don’t quite add up and look like they slow down.
Alright loved the video, But need to watch the video in the morning... to exhausted to take it all in!
The devs knew you would come looking, and left a trail of crumbs for you to follow. But the crumbs lead nowhere except back to the ready-up button. They have laid a trap and you fell for it woolie.
Now, like sisyphus, you are now bound to this fate. Forever on ye shall return to the start screen, never finding solace, never reaching the peak, never... escaping the rain.
its prob an animation speed cap and to make it so animations dont break they have a limiter because broken animations can break or lag the game
"Our favorite robot, Multi"
Rex: Am I a joke to you?
Apparently
rex is only 50% robot so they dont cout
Can we all just appreciate that the Huntress is looking like she is giving the camera "the hand" the whole time when firing stupidly fast?
"Look, I'm busy, Ok? Just wait." -Huntress, probably
Warframe has a similar issue where every weapon has an internal fire rate cap it isn't explained anywhere. Most of the reason is to prevent crashes with audio errors
Thanks for continuing to make the best ROR2 content out there Woolie. Love it when i can catch your streams. Please keep giving us the OMEGA value all the time
Loving all your videos man. I started watching after buying RoR2 on PS4 and not really understanding how a lot of stuff works, your videos have helped a bunch 😁
Now I am prepared for my final math exam on Thursday. Thank You!
i dont play risk of rain 2, only watched like 5 videos of it in my whole life from other content creators. BUT i actually understood what this man said for 11 mins and 28 seconds
Man, I hope those pistols are full auto.
Lol
rip fingers
I still like frag grenades, feel goofy and fun to land
Though that damage is disappointing when you look at railgunner
maybe whats actually happening is division of attack time instead of multiplication of attack rate. For instance you're firing 6 shots over the length of the animation so to get the real fire rate you'd need something like (animation time)/attack rate * attack speed increase. So the more syringes you have the faster the animation plays, but the animation can never play at zero because you can never make anything zero through division. Of course there still has to be some delays between animations to explain the random caps for each character. Just speculation of course.
The potential solution for this could just be doubling projectiles beyond a specific attack speed threshold, IE if you have 200% attack speed then fire twice as many projectiles. But of course that doesn't work for melee only characters, whose attack speed would be capped at frame rate, for them you would have to create an extra damage hitbox or something similar.
8:40 Have you considered that it's the delay between activations of double tap, similarly to how uh... Wake of the Vultures? The one that gives you max cooldown speed when you kill an elite can't bypass the minimum cooldown.
Then it would make Mul-T's results make more sense as he was probably coded to just fire on every available frame where he doesn't have a cooldown since his is just fully automatic with no real special features or animations.
that sound of 606 syringes rapid fire is like some M61 vulcan
Woolie just explained how I was stupid in a million different ways
Just watched a video about someone doing math about a game I never heard of. 10/10 would do it again
Now go watch more videos about the game... And then go play it. It's amazing!
Thank you for the math lesson Mr. Streamer.
no idea whats happening in this vid rn I just like seeing ror2 and hearing woolie talk
Well, what you've really taught me today was at what point I should stop collecting syringes when I'm bored playing with huntress with artifact of command on 🤣
Just a detail but you had indeed 6 shots/s at base AS, because you started when the enemy was at one stack and 10seconds later he was at 61 stacks. It means that you added 60 stacks in 10 seconds so a fire rate of 6shots/s
Thank you, that was a problem I had as well.
It's like in WC3 when in some custom maps have similar attack speed as ranged and melee champs. Melee champs have much more actual AS then ranged cause the animation of the attacks.
I thought they meant that because of suppressive fire's cooldown, double tap fires more shots overall and therefore "Fires Faster". But as every other comment on this video states; It's animation delay.
Bro, you're really overthinking this LMAO
That's is why I love commando with 40 syringes. You go lazer with r. So much fun.
I wish the book examples were like this one
I personally think they were accounting for the cool-down for suppressive fire when saying double tap procs faster than double tap because with cool-down and base attack speed it is faster at procing
With a hard cap made for each survivor based on animation time, you can create caps of attack speed that decide the best total amount of attack speed for a build.
Mul-T has the best scaling with attack speed and a far higher cap than other survivors at a total of 60 per second. That means his cap is 4.8 attack speed, 480% total. Knowing this, you can put him up to 375% bonus attack speed. With a tonic, that's caps lowered to 2.82 total attack speed, meaning you only need 180% extra attack speed with a tonic to cap the total.
Commando caps at a measly 20 a second, making his scaling with attack speed stop at 3.33 and at 1.96 with a tonic.
The Huntress caps at 30, meaning she caps at an enormous 15 attack speed and 8.8 with a tonic. That's mainly because her scaling is so poor with attack speed in general.
This means the commando has good initial scaling with attack speed, but taps out at 1/3rd the dps and bleed potential of Mul-T. Ouch. You won't really hit that limit in most games, but with a tonic, that's not that difficult a limit to reach, actually warhorn and predatory instincts caps it out. Mul-T's scaling is otherwordly, as I expected from personal experience. I can calculate the other caps for this kind of thing if someone hands me the raw numbers like this video has.
My numbers could be slightly off as well.
NGL I was shit face while watching this, and all the math was completely over my head, but I believe you.
So the result is, there is a hard cap on number of shots per round, that varies per character, and suppressive fire is better than double tap. I wonder if the hard cap is preventing number of projectiles on screen, to keep the frame rate high.
It looks like PlasmaCore1219 actually kind of answers this talking about it is a bit about animation, but a bit about frame rate cap. Find that thread, currently 5th from top for me, got it.
if i had to guess theres an internal cooldown for each proc meaning you can only proc a certain item once every x amount of time there could also be a cap for attack speed on each survivor try counting each number from the primary for 10 seconds and see if it matches up with the amount of bleed stacks
the reason why mathimatical formulas dont perfectly reflect games is because of game coding. Animation speeds tic speeds and processing speeds of bullets in games will technically affect how you time its travel speed
That wooohoo foreshadowing got me, take my subscribe!
That perfect cut at "Foreshadowing OOO" is the best
I don't even play this game yet this video is still interesting
never seen this fella alive so long time, only now realized that the "buttons" on it's crotch is actually eyes.
Preemptive guess as to what’s going on as soon as I heard attackspeed is fully functioning on a move that scales shot count but not for its normal function, I’m guessing part if the animation/timing or double tap isn’t registering attackspeed, some sort of input cooldown or similar, so the AS is less effective and the gap will grow exponentially as AS rises
I was right! Someone else did he maths based on his results and found the flat gaps in terms of frames XD
I managed to get to the point I could mostly use suppressive fire constantly through normal gameplay. It was only after killing an elite, but I had brainstalks and could kill another elite by spamming suppressive fire before the buff ended. Funny enough, I also tried just using double tap since the information on the wiki seemed weird. I couldn't kill elites fast enough to renew brainstalks with double tap, but I could with suppressive fire. Both have a proc coefficient of 1 and are stated in game to do 100% damage per shot, so the only reason simply reducing cooldowns to half a second would let me kill faster with suppressive fire is the fire rate being higher than double tap's.
I love how it cuts out at the end, poor console Andy’s though
I noticed that huntress when using the flurry primary will start shooting less arrows than usual with a high enough attack speed. It is supposed to be 3 arrows a shot (without crit) but eventually be 2 and even one with a high enough attack speed
I'd never be able to express how entertaining your videos are. Thanks
Alway gotta take a dig at frag nades whenever possible
wish they buff frag grenade to explode on hit, it'll make it alot better but it's still worse then suppresive fire
Something worth noting that I didn't see in the video is that bleed works for counting hits despite the 3 second length of effect due to the fact that the bleed timer resets upon getting another stack of bleed
It confused me so I figured I'd share with the class
I don't know if you read comments on old videos so I'm dropping this here. I've never seen you mention the synergy between Artifact of sacrifice and the stages where the game clock doesn't advance. The void fields, the gilded coast and Bulwark's Ambry present areas where you can technically get unlimited items without advancing the difficulty of your run, at least if I understand everything correctly. I've been running without command and found it more fun to see how the build develops but I will drop into Bulwark's on command at my first loop to fill out my build with things I've missed just to give my runs better chances.
They have to implement attack speed caps in games because sooner or later the animation quality will degrade in that it won't reflect the attacks well at a certain attack speed/play too quickly etc.
Wouldn't it be because attack speed is multiplying an animation, not just a "fire rate" like a gun.
Mul-T is firing a gun where the animation is so quick that it doesn't add to the "delay" for missing shots.
Love the woolie vids!! Just started playing risk of rain again
Congratulations Woolie. You proved that wiki's aren't always reliable.
Beside that, like others have mentioned, this appears to be an animation issue. The reason Mul-T's line up so well is because they have less frames of animation than Commando & Huntress. The only real way to solve this is to create new attack animations.
At the limits of Risk of Rain's sped up animations, Commando fires on the 3rd frame. Huntress fires on the 2nd, and Mul-T (because they have none) fire on the 1st. Because it's a 60 FPS game, it lines up with the shots / second.
I feel like Woolie is the type of guy that would research why some boxes of Lucky Charms have more marshmallows than others. Or why Lay's chips have so much air in them... these are mysterious that I would like cracked.