Oscrosis: Sub-Tick Networking for Tactical Extraction

The Problem With "Good Enough" Netcode
Extraction shooters live or die by trust. When you peak a corner and die, you need to know: was that fair? Standard UE5 replication (60Hz, client-authoritative movement, server rewind) works for battle royales. It fails for tactical extraction where:
- Time-to-kill is 80-120ms — one frame of desync = death
- Audio is tactical intel — footstep timing must be sample-accurate
- Gadgets deploy in 200ms windows — breach charges, drones, EMPs need deterministic sync
We couldn't ship Oscrosis on "good enough." So we wrote our own layer.
Sub-Tick Simulation Architecture
The core insight: simulate at 128Hz, replicate at 64Hz, render at whatever.
┌─────────────────────────────────────────────────────────────┐
│ CLIENT (128Hz) │
│ Input → Prediction → Local Simulation → Render │
└──────────────────────────┬──────────────────────────────────┘
│ 64Hz snapshot + input buffer
▼
┌─────────────────────────────────────────────────────────────┐
│ SERVER (128Hz) │
│ Authoritative Simulation → Rewind/Replay → State Broadcast │
└──────────────────────────┬──────────────────────────────────┘
│ 64Hz state + acknowledgments
▼
┌─────────────────────────────────────────────────────────────┐
│ CLIENT (128Hz) │
│ Reconciliation → Correction → Smooth Interpolation │
└─────────────────────────────────────────────────────────────┘
Key properties:
| Layer | Rate | Purpose | |-------|------|---------| | Simulation | 128Hz | Physics, movement, ability logic | | Replication | 64Hz | State snapshots, RPCs | | Audio | 48kHz | Sample-accurate HRTF spatialization | | Input | Polling | Client buffers 4 frames for jitter absorption |
Deterministic Replay = Fairness Debugging
Every frame, the server records: inputs + random seeds + physics state. This creates a perfect replay of any engagement. When a player reports "I died behind cover," we don't guess — we replay the tick.
struct FFrameRecord {
uint32 FrameNumber;
TArray<FClientInput> ClientInputs; // All players' inputs
FPhysicsState PhysicsSnapshot; // Deterministic physics
FRandomStreamSeeds RandomSeeds; // For spread, proc, etc.
double ServerTimestamp;
};
// Replay verification
bool VerifyKill(const FFrameRecord& KillFrame, const FVector& VictimPos, const FVector& ShooterPos) {
// Re-simulate the exact frame with recorded inputs
FPhysicsState Simulated = ReplaySimulate(KillFrame);
return Simulated.LineTrace(ShooterPos, VictimPos).bBlockingHit;
}
This also powers our killcam — not a recording, a re-simulation from the server's perspective.
Spatial Audio as Netcode
In Oscrosis, audio travels at the speed of sound (343 m/s), not instant. Footsteps, reloads, gadget deployments — all propagate through the same simulation tick as bullets.
This means:
- You hear the breach charge 120ms before it detonates (at 40m)
- Suppressed weapons have realistic crack/thump separation
- Vertical audio — floor/ceiling occlusion calculated per-tick
The audio thread reads the same 128Hz simulation state as the netcode. Zero desync between what you hear and what the server simulates.
The Geometry of Fair Gunfights
We map every engagement to a fairness score (0-100) based on:
Fairness = 100 - (DesyncMs × 1.2) - (PacketLoss% × 0.8) - (JitterMs × 0.5) - (PlayoutDelayMs × 0.3)
Matches with Fairness < 70 are flagged for review. Players see their session fairness average in the after-action report. This transparency builds trust — the #1 retention driver in extraction.
Closed Alpha Learnings
After 3 weeks of closed alpha (2,400 players, 47k matches):
| Metric | Value | |--------|-------| | Avg. fairness score | 87.3 | | Desync-related reports | 2.1% of matches | | Replay verification accuracy | 99.7% | | Player "trust" survey (1-10) | 8.4 |
The 2.1% desync reports? All traced to client-side frame pacing issues — fixed by moving input polling to a dedicated high-priority thread.
Open Source Commitment
The Oscrosis Netcode Framework (sub-tick simulation, deterministic replay, spatial audio sync) will be released as a UE5 plugin under MIT license post-launch. Tactical extraction deserves a netcode standard, not proprietary black boxes.
Dispatch from the engine room — Oscrosis networking lead