
Bullet Frame Warp
Bullet Frame Warp (BFW) is a bug affecting every time you shoot your gun, as your bullet will fire where you were aiming exactly 1 frame prior. CSGO (like every shooter ever) has your bullets fire where you are aiming the same frame you shoot your gun. Fundamental difference, but what does that actually mean?
This is what that looks like (FPS reduced extremely to highlight bug + NO bullet spread):
CS2 – Flick at LOW FPS + Slow Mo
Notice my mouse movement – I flick the mouse, and THEN fire the AWP
But CS2 effectively interprets the input as fire, THEN flick
In essence, CS2 misinterprets input order
This explains the AWP's shitty feeling, every flick is essentially speed capped.
And here's CSGO for direct comparison (with the same mouse movements):
Now that we've established that this is a fundamental difference between CSGO and CS2, I'll now show what this means for actual gameplay.
When watching this NEGEV spray, you can clearly see that the bullets lag behind the crosshair. When turning right, the tracer lags left, vice versa. This leads to the obvious problem – tracking enemies.
Your bullet fires where you aim the previous frame, which means the higher your fps, the less BFW effects gameplay. This explains why not many people know about this, as the most skilled players (usually ) have the best computers. The lower the FPS, the more exaggerated BFW.
This is a great explanation for why running and gunning is more effective in CS2, the faster you move the more BFW gives you an advantage.
Once again, here's CSGO for comparison:
This isn't just a visual bug, it affects hit registration the same:
CS2 – LOW FPS AK flick onto head
And finally, the most egregious showcase of BFW (converted to GIF because of video limit):
CS2 – Egregious BFW at LOW FPS
I've established that BFW effects flicking and tracking, but what about spraying? I wrote a recreation of the AK spray pattern (only linear interpolation between points, no acceleration, but close enough). There is a green dot which follows the actual spray pattern, while the red cross shows how the game interprets the input. The cross on the right shows where the bullets will land on a surface. There is a small distance between them, but as can clearly be seen this small difference between the perfect spray response and the interpreted version from BFW makes a noticeable difference.
CSGO – (Perfect) Spray Control Behavior – 30 FPS
CS2 – (Still Perfect) Spray Control Behavior – 30 FPS
As you can with BFW the bullets fire higher than where they should be, which explains why many people reported feeling like they had to pull down harder to control the spray.
I've now established that BFW effects flicking, tracking, and spraying in a noticeable fashion, but many will ask if this really means much, as all of these clips are at very low fps.
Here is a video of CS2 running at 300 fps, and yet you can still see the bullets lagging behind. Even if I had a beefy computer, I still wouldn't want to live with the fact that CS2's aim is broken, even if only a little. Also, this exponentially effects those with weaker computers, and CS2 already has bad performance, so keep that in mind…
One last note, this doesn't just affect bullets, it also affects knives, grenades, zeus, and everything else. Bullet Frame Warp was just a catchy name.
I've known about this bug since the game was in beta, and a mix of laziness and assuming someone else would fix it prevented this from getting fixed. I'm sorry for that, but I really hope Valve can fix this so we can have an even more competitively sound game, and so I can hit flicks like this again…
https://i.redd.it/4uo0a7rhb73f1.gif
"Valve, this is now proven with data. It’s time to act. This affects one of the most important core mechanics of the game."
EDIT 5/27
A lot of people are misunderstanding the issue here. In CSGO, your shot is delayed until the next tick, but the when your gun eventually fires it fires in the exact direction you are currently aiming at the start of the tick, the moment the gun fires. I did not claim CSGO fires on the next frame, only these two things happen on the same frame. There is a delay, but hit registrations and the aim are in the same moment, they are connected. In CS2, your shot is fired on the current frame, but it uses the angle you were aiming the previous frame. The bug is that there is a disconnect between the moment hit registration is taken (when the gun fires), and the moment it uses for your aim. It uses the current game state with the outdated aim angle. I think most people misunderstood and thought that CS2 simply fires your shot 1 frame early, but this is incorrect. Again, it uses the current game state with outdated aim data. That disconnect is the key issue here.
The egregious case is the best showcase for the disconnect caused by BFW. For the second shot, on the frame you fire the AWP, the CT is standing at the same spot you were aiming exactly 1 frame prior. Current game state, outdated angle.
CS2 does not use sub-frame inputs, as some people claimed, that is a feature in overwatch, as explained by this article: https://us.forums.blizzard.com/en/overwatch/t/new-feature-%E2%80%93-high-precision-mouse-input-gameplay-option/422094
CS2 subtick’s change is only that the game knows the moment of the frame when your gun fires, and not the moment when you press your mouse, outside of frame rate.
If CS2 actually had sub-frame inputs, none of this behavior would be seen. I.e. for a flick the game would be aware that I moved the mouse to the right and then fired.
What Valve should really change is to actually allow sub-frame inputs by polling mouse data, like in Overwatch, but right now BFW introducing this disconnect makes it worse than CSGO, as can hopefully be seen in these examples (in no universe should the egregious shot hit).
49 Comments
Idk enough about what you posted to know if you’re right or wrong, but I hope it gets fixed if you’re right. Thanks for putting in the work to make cs2 better!
another banger from the community
a 2nd CS2 flaw essay has hit the sub
Flicky awp plays were so inconsistent that I don’t play awp anymore. Used to play a lot with awp on csgo. Hope this get fixed, thank you for your time!!
Thank you for the hard work sir
some might argue about the details, but what matters is that it’s different from csgo
You should send this to the dev team at cs2team@valvesoftware.com and everyone as well so they get to see this stuff faster
Great job of putting it all together
Have felt this since release without being able to precisely describe what it was. Looks like you nailed it and it’s, especially for AWP, even more significant than I thought.
Hopefully this is something they can get to work on right away and fix quickly. Also, as much as I respect Valve, I hope this and the last Redditor that helped fix their game have them feeling embarrassed in a way that increases the quality of their work in the future. Both this and the other post have me wondering how these things made it live in the first place. For a game like CS that is (was?) lauded for its consistency and precision, these recent posts showing how reliably and observably ‘off’ things were/are has me reevaluating my opinion on the quality of the game’s devs. Until recently they were basically untouchable. Doubt has entered the chat.
i love you bro thank you for putting in work to make this game better for all of us, now we just gotta hope valve changes this like the last one
I love this community
>CSGO (like every shooter ever) has your bullets fire where you are aiming the same frame you shoot your gun.
CSGO has you shoot on the next tick, not on the next frame. You essentially have 0 to 8ms or 16ms (depending on tickrate) input lag on your clicks. I am saying next frame: You are not clicking on a frame, you are clicking between two frames, always.
>In essence, **CS2 misinterprets input order**
CS2 has no clue of your input order. Whether it prefers the previous or current frame doesn’t really make a difference, neither is more or less accurate. Your mouseclick could happen at any point between previous and last frame and the game wouldn’t know. The likelyhood isn’t larger that you are closer to the last frame than that you are closer to the previous frame. You could at most make an argument about changing it to last frame for feeling, but this is not a bug.
>This is a great explanation for why running and gunning is more effective in CS2, the faster you move the more BFW gives you an advantage.
This has absolutely nothing to do with how effective run and gun is.
>There is a small distance between them, but as can clearly be seen this small difference between the perfect spray response and the interpreted version from BFW makes a noticeable difference.
I think using 30fps is a bit dishonest here and you could have atleast compensated for a good chunk of that latency, just like a player would who is used to that.
Worth noting that freeing movement from frame-independent input is currently a work item at Valve (as per John McDonald in a comment somewhere). The proper solution to this is subframe input. Using a frame from after the click is not more accurate.
I thought I was going insane…
This is huge, that’s why it feels so sluggish and out of control
Great work. I hope the devs will act on it
Having absolutely anything important be tied to fps in a competitive game is just so so so stupid
Nice!
This has been brought up before couple times, think it was cause of subtick being accurate to the millisecond within the tick window, it registered inputs in certain ways and it should be more accurate.
https://old.reddit.com/r/GlobalOffensive/comments/16dcg27/subframe_mouse_input_or_why_flicks_feel_different/
https://old.reddit.com/r/GlobalOffensive/comments/168avkq/why_do_flicks_act_different_in_cs2_they_always/
side note, really miss that procedurally generated workshop map, wish they could get it to work in cs2.
You’re absolutely right, wow. Can’t believe this hasn’t been brought up.
Another banger of a post. Hopefully this leads to some changes that can help gameplay feel better.
and I don’t know if this helps, but flicking upwards hits more than flicking side to side. Why? No clue.
Everything points to this being an intentional change in order to reduce input latency as much as possible and consistency with what you see (you shoot on what you see when you click, ie, you click on enemy head, shot goes there, not AFTER that point, it becomes only a visual input lag), the experiment you’ve shown is an edge case that isn’t representative imo considering how insane this delay is, in a real scenario you want your input to match exactly what you saw when you shot, not what you’re gonna see AFTER (which you can’t know yet), I’ve also known about this for a while (it’s also technically harder to make it do what you showcase, imo no way in hell this isn’t intentional). For a while when cs2 released, it used to shoot on the next tick while taking the frame you clicked on for regitering your view angle, now it waits for the next frame after you shot to display that you shot, but it uses the frame that was displayed to register where you shot (which greatly reduces the visual latency, they can’t make it be lower than this). It’s also far from the main big difference vs csgo, csgo used to “fully” shoot on the next tick, not the next frame, this gave a 0-16.67ms (or half of that… on 128ticks) of input delay for your shots making csgo much more inconsistent in this regard. RN cs2 basically has 0ms latency for your shot, you press, it goes where you clicked, you only see it with x ms latency that depends on your framerate, but it’s only a visual lag which in practice shouldn’t matter. (EDIT: because reading myself again I realize I didn’t make it clear, what this means is that, since cs2 treats firing inputs as “instant based on current frame”, it treats it before any input, in the example video, it shoots before the rotation even tho that’s not what happened IRL, but that’s a limitation, doing the opposite (making it shoot after all inputs) would result in the opposite test to also fail (shoot then move would fail which would work rn), and some other specific tests would fail as well).
However, the shot hitting when it shouldn’t is a bug, seems like it takes the wrong timestamp for when you shot and lag compensation fails? (server says hit when client says otherwise) It clearly takes the right view angle as when the enemy is static it works correctly and shoot at the expected location while resulting in a miss on both views, only when the enemy is moving you manage to hit him while looking ahead of his movements on your view, so seem like it computed your shot with data that was “after” what you actually saw? (technically if it takes your next frame’s timestamp, the enemy would be at the correct position for you to hit him probably vs your past view angle, but just a guess idk). This is what needs to be fixed and should be put forward.
Wasn’t aiming tick- instead of frame-based in csgo?
We already knew this no? I thought this is how subtick is supposed to work.
Wasn’t this already known? Pretty sure it’s been posted before.
😂😂 mom a new CS2 regression thread just dropped
seriously though there is something wrong with CS2’s gunplay. Valve seriously needs to re-evaluate spaghetti design choices that worsens it
?? i don’t think you have any idea about the technicals.
Since over a year, gun firing is registered (subtick, since release) AND SHOWN exactly at the closest frame. You cant register the bullet at the precise moment of the click and then expect the shooting animation to match that perceived hit while you are moving your mouse – cause the animation happens over time. How do you expect to solve that?
This is a heavy downvote, unless I’m missing your point. I mean, if I got your point right, I don’t think there is any “fix” for something which is working exactly as it should (everything rn is as precise as possible and rendered as soon as possible). We worked very hard as a community to get those things done like they are now 🙂
Ah shit, here we go again
[deleted]
in csgo you can shoot and then flick and your shot will register where your mouse ends up after the flick. this is absolutely worse than cs2, and the OP is stupid
I’m a simple guy, I see a long post detailing an error in cs2, I upvote.
Okay so the problem (from what I understand) is about two different ways to deal with a problem (that wasn’t really a big problem) and I guess most people prefer the CSGO version even if it’s technically less accurate. So, Valve thinks that the game can be faster and more accurate so they are trying to make sure that there is as little delay as possible when you click your mouse but it looks like we are losing something important in this process.
**Option 1 (CS2)**
1. You aim at a pixel
2. You click the button
3. The bullet is going to go to that exact pixel no matter what so if you want the game to “look” accurate, you have to wait for the animation to end. If you don’t wait and move your mouse, it will not “look” accurate anymore but it is “mechanically” more accurate, or something like that.
4. Well, I moved my mouse and now it doesn’t look and feel like how guns work in real life. CS2 bad CSGO good.
I think it is more enjoyable to have a game that “looks” as accurate as possible because what you see is what matter. CS is a game that is meant to feel satisfying to play. This maybe feels too focused on the competition aspect but why would anyone try to get better at the game if it doesn’t feel good. If the game feels bad there is no point.
**Option 2 (CSGO)**
1. You aim at a pixel
2. You click the button
3. Shooting animation starts playing
4. You decide to move your mouse before the bullet is launched
5. The bullet goes to where you are aiming at when the bullet animation is finished
6. Finally, what you see is what you get 🙂
But maybe that is not the problem and I am just yapping, idk. I can test this myself but I think Valve should do all of that and not me, so why am I even still typing all of this? Bye
Cs2 should be separate from CSGO,cause cs2 is crap
Guess we’re deep in the era of patronizingly overexplaining any issue found in hope that the devs will actually feel like doing something about it
Shoutout to the community members putting in the hard yards and fuck Valve
Interesting. You would expect bullets to “lag behind” a little bit anyway, due to sub-tick (because the bullets would fire where you WERE aiming in between ticks when the gun fires) but this seems seems more problematic. The example where you show the CT on nuke dying despite never aiming over him is absolutely crazy.
Why zywoo owns then?
Community doing more to fix cs2 then the actual devs.
Dude, they fix this, and the game is going to feel way better.
Thank you for taking the time to work on this. I hope the big dawgs see this and fix it.
Cant wait for the Valve bootlickers defending this and saying this is how CS2 is supposed to be and how we are being copium by bringing such issues.
What
The
Fuck
Can someone make something similar to this about the problem with surfing please ?
That’s the whole point of subtick, and imo it’s better this way. Your bullet goes where your crosshair is when you click the mouse – the animation/effects hereafter should be irrelevant to your kill (but of course it would give better feedback the faster the animation comes)
So yeah maybe we can can some smoother effects one day, but you’re still gonna miss your flick if you don’t shoot when aiming at the enemy the moment you shoot.
I will accept 1 frame of latency if it meant bullets went where i shot,
Amazing work. Hopefully they’ll fix it. Awp feels shit in this game
A lot of people saying this is schizo but the awp hasn’t felt as good in CS2. All the time I put into csgo and coming to cs2 and my bullets simply don’t go where I think they should and this explains it. He has video evidence too I’m not sure how some people don’t see an issue.
It’s not a bug. It’s a feature. They did this on purpose.
I thought the cs2 version is the fixed version where csgo shooting was delayed?
I very much remember being shit at op in valorant and now cs2 because the timings were off from csgo.
With all the work players are putting into doing the developers job for them we might actually have a game on par with csgo in a few years. 🥳
A lot of this was known (maybe known-ish), but I have never seen anything like that egregious example before.
The reason is pretty simple : you never shoot next frame in CSGO, but next client tick. You can find it with host_timescale. In simplly terms : you don’t shoot when you click on your mouse in CSGO. Never. It will wait for the next client tick.
So I wasn’t crazy when doing aimbotz, when flicking that my shoot was late and I had to wait a bit after the flick to shoot
I read the whole thing and a few comments and I am not sure I understand properly.
Please someone correct me if I’m wrong but suppose I shoot/click in moment of time X, and my aim is on the enemy.
The registration happens using position of enemy on X? and is the visual return also in X?
Shouldn’t it be on the next frame?
Wonder if that’s why I feel laggy while spraying, and sometimes it feels like there is a weird delay to my clicking and my shot connecting. Wish I could fix this to play normally.
PS: I run in a somewhat old setup, but even when I can get like ~120FPS this sensation persists but less bad. And yes, I am raising money to upgrade, but haven’t been able yet (and would do it mostly for CS as far as gaming goes, as I can run the other stuff like R6, Destiny and BFV in medium/high with no hiccups).