Analyse des Quellcodes von Serious Engine 1
Überblick
- Serious Sam wurde als Multiplayer-Spiel entworfen.
- Auch die Singleplayer-Kampagne funktioniert wie ein Multiplayer-Spiel.
- Serious Engine unterstützt Singleplayer, Multiplayer sowie Demo-Aufnahme und -Wiedergabe.
Determinismus bei Gleitkommazahlen
- Für die Synchronisierung des Spiels ist deterministisches Verhalten bei Gleitkommaoperationen entscheidend.
- Da das Spiel nur für Windows veröffentlicht wurde, konnten Synchronisierungsprobleme durch Compiler-Unterschiede vermieden werden.
- Um Probleme durch Unterschiede bei der FPU-Genauigkeit zu lösen, werden Precision Guards verwendet.
Ticks vs. Frames
- Die Tickrate der Spiellogik ist von der Rendering-Framerate getrennt.
- Die Spiellogik läuft fest mit 20 Ticks pro Sekunde.
- Für flüssige Bewegungen und Animationen wird Interpolation verwendet.
Netzwerk-Multiplayer
- Das Networking-Modell der Serious Engine folgt einem Client-Server-Ansatz.
- Der Server verarbeitet Nachrichten von Clients und übermittelt relevante Informationen an alle Clients.
- Für die Paketübertragung wird das UDP-Protokoll verwendet.
Paket-Schicht
- UDP-Pakete können in falscher Reihenfolge ankommen oder ganz verloren gehen.
- Serious Engine implementiert über UDP ein eigenes Protokoll, um Zuverlässigkeit und Paketreihenfolge sicherzustellen.
- Zuverlässige Pakete werden durch ACK-Pakete bestätigt.
Verbindungslebenszyklus
- Um eine virtuelle Verbindung zwischen Client und Server herzustellen, werden Broadcast-Pakete verwendet.
- Der Server weist dem Client eine eindeutige Kennung zu und routet darüber die Pakete.
Offline-Spiel
- Singleplayer und Demo-Wiedergabe sind Sonderfälle des Multiplayer-Modus.
- Server und Client kommunizieren dabei innerhalb desselben Prozesses.
Nachrichten-Schicht
CNetworkMessage ist eine Nachrichtenabstraktion, die sich wie ein Stream lesen und schreiben lässt.
- Nachrichten können komprimiert werden; standardmäßig wird die LZRW1-Komprimierung verwendet.
- Durch Delta-Encoding wird die übertragene Datenmenge minimiert.
Nachrichtensicherheit
- Nachrichten sind nicht verschlüsselt.
- Chat-Nachrichten werden im Klartext übertragen.
Meinung von GN⁺
- Nützlich für Spieleentwickler: Die Netzwerkarchitektur und Synchronisierungsmechanismen der Serious Engine können als wertvolle Referenz für die Entwicklung von Multiplayer-Spielen dienen.
- Die Bedeutung deterministischen Verhaltens: Methoden zur Sicherstellung deterministischen Verhaltens bei Gleitkommaoperationen sind ein wichtiger Baustein zur Lösung von Synchronisierungsproblemen in Spielen.
- Design von Netzwerkprotokollen: Die Implementierung eines eigenen Protokolls über UDP, das Zuverlässigkeit und Reihenfolge garantiert, ist ein gutes Beispiel für Netzwerkprogrammierung.
- Sicherheitsaspekte: Dass keine Nachrichtenverschlüsselung vorhanden ist, ist ein Punkt, der in der modernen Spieleentwicklung unter Sicherheitsgesichtspunkten berücksichtigt werden sollte.
- Technische Herausforderungen: Der Artikel hilft dabei, die technischen Herausforderungen zu verstehen, mit denen in den frühen 2000er Jahren schnelle Multiplayer-Spiele unter den damaligen Netzwerkbedingungen umgesetzt wurden.
1 Kommentare
Hacker-News-Kommentare
net_bLerping=0eingeben, um ohne Interpolation zu spielen.