Vorab · ganz persönlich

Boreout.

KI schreibt inzwischen den meisten Code. Spannend, aber ich selbst programmiere kaum noch etwas.

KI übernimmt das Coden. Produktiv, aber ich bin nur noch Reviewer.
Ich mag RTS. Echtzeit, Strategie, hunderte Einheiten.
Ich mag Multiplayer. Gegeneinander, im selben Moment.
Also: selbst was bauen. Von Hand, weil es Spaß macht.
Warum · das Problem

Hunderte Einheiten, ein paar Bytes

Ein Echtzeit-Strategiespiel: hunderte Einheiten, mehrere Spieler, alles synchron. Was schickt man dafür übers Netz?

Den Zustand senden

Position, HP und Ziel jeder Einheit, jeden Tick übers Netz. Die Bandbreite wächst mit jeder Einheit, bei hunderten ist das chancenlos.

skaliert nicht
Nur Befehle senden

Jeder Client rechnet dieselbe Simulation. Übers Netz gehen nur die Eingaben: „Einheit X nach Y". Ein paar Bytes, egal ob 10 oder 1000 Einheiten.

konstant klein
Der Deal: Statt Megabyte an Zustand fließen nur Bytes an Befehlen. Der Preis: alle müssen exakt dasselbe simulieren, genau darum geht es im Rest des Show & Tells.
Godot-Frontend · Rust-Simulation · deterministic lockstep

Gleiche Simulation, ÜBERALL.
Übertragen werden nur Befehle.

Godot rendert. Der Rust-Kern simuliert, identisch auf jedem Client und dem Server. Statt Spielzustand fließen nur winzige Command-Pakete.

zwei Peers im Gleichschritt
01 · Workspace

Vier Crates, eine Wahrheit

sim kennt weder Godot noch Netz. Es wird in Client und Server kompiliert. Tippe auf eine Crate.

sim
ECS · Logik · Fixed-Point
no deps
▲ net → sim
net
transport · lockstep
scheduling
▲ server & client → sim + net
server
headless · authoritativ
bin
client
gdext · Godot-Glue
cdylib
Eine Simulation, zwei Targets. sim ist die einzige Wahrheit, Godot liest sie nur.
02 · Datenfluss (Client)

Einbahnstraße

Input rein, State raus.

Godot
Klick auf Tick T
net
Command für T+D → alle Peers
Gate
wartet auf alle Inputs
sim
step() · überall gleich
Godot
interpoliert & rendert
03 · Interaktiv

Das Lab

Die wichtigste Regel, visualisiert.

Der Tick steigt nur, wenn der Befehl beider Spieler angekommen ist.
P1
P2
0
Sim-Tick
bereit
Befehl P1 Befehl P2 offen → Tick++ hält → alle warten
04 · Die Fallen

Determinismus ist Pflicht

Ein Bit Abweichung → über die Ticks ein Desync. Diese Regeln gelten in der sim.

f32 / f64
✓ Fixed-Point
thread_rng
✓ geseedeter RNG
HashMap-Order
✓ stabile Reihenfolge
spät bemerken
✓ Checksum/Tick
Zusammengefasst

Netzwerklayer → Rust

Netzwerklayer = Rust (net), eng an die Sim-Loop.
sim in Client + Server → eine Wahrheit.
Nur Befehle übers Netz · Stall auf den Langsamsten.
Fixed-Point + Checksums, sonst Desync.
Ausblick · der Look

Und so soll's aussehen

Pixel-Art für den Prototyp: kleine Ritter, Goblins, Gebäude und Terrain, genau die Bausteine für ein RTS.

Tiny Swords: Karte mit Burg, Rittern und Dorf
Art: Tiny Swords von Pixel Frog pixelfrog-assets.itch.io/tiny-swords frei für kommerzielle Nutzung
blättern
1 / 9