On this page

Anti-cheat: sources and measurements

The research behind the anti-cheat skill and the speed check in the C# example's Net/ server, gathered on 2026-10-21. It draws on Godot's networking documentation and source, Steamworks, Epic Online Services, BattlEye and Riot pages. Tests ran on Linux with Godot 4.7.2 (mono and standard) and .NET 8. Marks: tested means run here, source means read in the engine code, doc means stated by the vendor, and unconfirmed means general practice or a secondary source.

Sources

Source What it gave
Godot: high-level multiplayer, secure multiplayer design (master; may be newer than the 4.7 docs) "treat all client input as untrusted"; server-authoritative logic; validate RPC arguments; rate limits
Godot 4.7.2 SceneMultiplayer.xml allow_object_decoding can run code; an empty auth_callback accepts every peer; server_relay defaults to true
Riot, Demolishing wallhacks with VALORANT's fog of war Withhold enemy positions until the client needs to draw them
Steamworks anti-cheat, VAC and Game Bans Servers should be authoritative; Game Bans; "Cheat detection is performed by you or your agents"
Steam leaderboards "Trusted" writes only through the Web API
Epic, anti-cheat interfaces, licensing Easy Anti-Cheat cost, scope and platforms
EOSG (community, Godot 4.2+) Anti-cheat client and server interfaces "Completed without sample"
BattlEye No public prices; "License inquiries" by form
Compiling with an encryption key, GDRE Tools PCK encryption needs a custom template; the key ships in the binary; projects are recoverable
Fletcher Dunn (Valve), "Denial of Service Mitigation" (GDC talk; notes) A process fails on packet rate (~250,000 a second well-written, 100 to 1,000 naive) before bandwidth; never reveal player IPs (peer-to-peer, listen servers and dev tools/rich presence/spectating leak them); relay and identify by Steam ID; backend over HTTP; bans need a re-entry cost. The denial-of-service section of the skill
Eugen Harton (as transcribed; Bohemia Interactive), "How DayZ Deals With Cheaters", and John McDonald (Valve), "Robocalypse Now: Using Deep Learning to Combat Cheating in CS:GO" (GDC) (notes) Evidence from server-recorded replays; detections kept off the client; random ban delays and ban waves; false positives; soft measures (Trust Score) for small games; reviewers weighted by agreement; never taunting cheaters. Valve's one-movement-packet-per-tick fix is independent confirmation of the speed check here. The skill's evidence and bans section

The server decides (doc, source)

Measurements

What Result
The C# example's Server (examples/csharp/src/Example.Core/Net/Netcode.cs) receiving two inputs per tick for 600 ticks, before the fix The client moved 3997 px where real time allows 2000
The same, after the fix (AClientSendingExtraInputsDoesNotMoveFaster in NetcodeTests.cs) No more than 2% over 2000 px (the test's bound); the extra inputs counted in InputsRejected
An honest client whose packets are held for half a second (AnHonestClientCatchesUpAfterAStall) Catches up to the exact distance; InputsRejected stays 0
A .tres with an embedded GDScript, loaded with ResourceLoader.load (standard 4.7.2) The script ran: an edited save in that format is code execution
A junk-UDP flood against a Godot 4.7.2 ENet server's own port on 127.0.0.1 (soak -JunkPps, standard 4.7.2, 4 cores); full table in multiplayer.md No effect to ~10,000 packets a second; collapse by ~50,000 (input loss ~38-57%, round trips into the seconds, dropped clients). The talk's "naive 100 to 1,000" and "well-written ~250,000" bracket it

The fix gives each player one input of credit per tick of real time, up to MaxCredit (60, one second of catching up after a stall), and spends one per input applied. Inputs queued beyond MaxQueue (60) are refused and counted in InputsRejected. A client sending faster than real time fills its queue and gains nothing.

Evidence and bans (two GDC talks; self-reported)

Leaderboards, achievements and saves (doc)

Client-side products (doc)

What does not work (doc, unconfirmed)

Not confirmed