@_brunodeangelis@TAbrodi@SheriefFYI Happy to answer any questions you may have! Hard to get nuanced with limited character limits. I wrote this blog post which is probably a good place to start and has additional references at the bottom:
https://t.co/UAYM2uHeXs
@_brunodeangelis@TAbrodi@SheriefFYI Client sends one input for every tick. You can’t send an input for an older tick because you’ve already sent an input for that tick. The second will be discarded.
@SheriefFYI This is one reason why Unreal’s RPC-based mechanisms and lack of time sync are so problematic—it gets hard to solve this robustly.
In this case, you don’t send “I shot”, you send inputs per tick, which may trigger a shot. Old inputs will be discarded and new ones will be queued.
@DoctorGester@TAbrodi Tim Ford explicitly states they do entity interpolation and server rewind. It is shown in detail at 37:22: https://t.co/XSUWPaVwo7
Server rewind only makes sense in the context of interpolation because that’s what the server is reconciling.
Rollback is for local player only.
@DoctorGester@TAbrodi No, Overwatch uses interpolation for enemy positions the same as here and will do some extrapolation beyond the server rewind window.
@DoctorGester@TAbrodi I understand the sentiment, but for shooters full rollback is actually worse. Here you get zero input latency and perfect hit registration. Predicting remote players means enemies might not be where you’re shooting and requires input delay to keep errors manageable for most pings
@DoctorGester@TAbrodi Fixed timestep is great for eliminating a lot of traditional vulnerabilities such as speed-hacks, making gameplay/physics/performance more consistent, and reasoning about and debugging the system in general.
@DoctorGester@TAbrodi Determinism is needed for client-side prediction to resimulate inputs from the latest received state from the server. This is effectively rollback but only for your local player instead of everyone.
im studying netcode for fast multiplayer games.
got a server authoritative implementation working.
- pure deterministic sim. same shared rules on client and server.
- fixed tick loop. both sides run the game on a stable update rate.
- server authority. the server owns the real game state.
- client prediction. local movement feels instant instead of waiting on ping.
- input seq plus tick. order and timing are both explicit.
- acked input flow. server tells client which inputs were already processed.
- reconciliation. client reapplies only the inputs the server has not confirmed yet.
- remote interpolation. other players render smoothly instead of snapping.
- snapshot history buffer. server keeps recent past world states for rewind.
- lag compensation. shots are checked against the past state the shooter likely saw.
- max rewind limit. very old shots do not get honored forever.
- authoritative shooting. the server decides the real hit and damage.
- wall aware hitscan. shots stop on walls before hitting players behind cover.
- stale and duplicate input rejection. old packets do not get to corrupt state.
- forward only movement on server. late movement input does not rewind the world.
In an FPS, ideally the elevator logic would be entirely server-side yet would move with client-side prediction. Players on the elevator would sync their locations relative to the elevator rather than in world-space.
"I shot him first!"
No you didn't. The server is just too fucking slow.
You'll spend $1000 on a 240Hz monitor just to play on servers slower than a government worker.
📡 SERVER TICK RATES
128 Hz — Valorant
64 Hz — CS2
64 Hz — Overwatch
64 Hz — R6 Siege
60 Hz — COD
60 Hz — Battlefield 6
60 Hz — PUBG
60 Hz — Marvel Rivals
60 Hz — The Finals
30 Hz — Fortnite
20 Hz — Apex Legends
20 Hz — Call of Duty: Warzone
In Apex and Warzone, the server updates only once every 50 milliseconds.
Even if you're playing on a $2,000 rig with a 1ms monitor, your bullets will still be bottlenecked by servers that feel like they're from 2007.
If you die while already behind cover, it’s not magic. It’s the server the devs didn't want to spend more money on.
But send rate isn’t the whole story. A game like PUBG might send you 60 updates per second, but only a subset of objects are in each one. In Apex, you get 20 updates per second but they each contain all objects/players.
New blog post: A Decade of Slug
This talks about the evolution of the Slug font rendering algorithm, and it includes an exciting announcement: The patent has been dedicated to the public domain.
https://t.co/xWEz0q2c4N
@SheriefFYI Something like Super Mario War (https://t.co/fNgBncnMv7) would be a good candidate. Simple platforming but surprisingly competitive and fun. Can throw in various physics objects/obstacles too.