1 Punkte von GN⁺ 2024-06-14 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2024-06-14
Hacker-News-Kommentare
  • Ich war der Entwickler, der den Netzwerkcode von Serious Sam implementiert hat. Inspiriert vom Vorhersagesystem von QuakeWorld habe ich ein einfaches MVP programmiert.
  • Serious Sam funktionierte auf LAN-Partys immer gut. Selbst wenn andere Spiele Probleme hatten, lief es stabil.
  • Ich habe den Vigilante-8-Multiplayer für den GB Color Port mit deterministischem Gameplay umgesetzt. Über das GBC-Link-Kabel wurden die Daten jeweils 1 Byte auf einmal übertragen.
  • Croteam ist ein sehr talentiertes Spieleentwicklerteam. Es hat die Talos-Principle-Reihe und eine maßgeschneiderte Vulkan-Game-Engine entwickelt.
  • Es wird gefragt, ob das dieselbe Idee ist wie bei Age of Empires mit „1500 archers on a 28.8“.
  • Es wird auf das Phänomen hingewiesen, dass Software mit zunehmenden technischen Ressourcen langsamer und ineffizienter wird. Das wird als „Benjamin-Button-Effekt im Softwaredesign“ bezeichnet.
  • Die Architektur von Factorio überträgt nur Eingabeereignisse und verlässt sich auf einen synchronisierten Simulationskern.
  • Jemand erinnert sich daran, Serious Sam als PC-Gamer-Demo gespielt zu haben. Inzwischen gilt es als klassisches Spiel.
  • Die Interpolationsfunktion der Serious Engine wird erklärt. In der Konsole kann man net_bLerping=0 eingeben, um ohne Interpolation zu spielen.