Special Chapter: Multiplayer Flashcards
Was ist der Unterschied zwischen Asynchronem und Synchronem Multiplayer? Erkläre ebenso den typischen Flow von einem Input-Ablauf.
Bei asynchronem Multiplayer müssen nicht alle Spieler zur gleichen Zeit online sein - oft bei turn-based Spielen der Fall; Der typische Flow ist: Spieler A macht Input, Server applied Input zum Gamestate, dann wird der GameState oder Input in die Datenbank geschrieben und Spieler B verlangt dann den GameState, wenn dieser online ist
Bei synchronem Multiplayer werden Aktionen direkt auf den GameState angewendet und alle Spieler müssen gleichzeitig online und verbunden sein im Spiel, hierbei ist Latenz ebenso sehr wichtig; Typischer Flow: Player A macht Input, Server wendet den Input auf den GameState an und sendet diesen zu allen verbundenen Spielern, Spieler B bekommt dann den GameState
Was ist ein Game State?
Ein Game State repreäsnetiert alle nicht-statischen Objekte in der Spielwelt:
Spieler, Objekte (mit denen man interagieren kann), Metadaten vom laufenden Match…
Wie oft sollte der Input von Spielern bei einem FPS gesendet werden? Welche Art von Input wird gesendet?
Der Input sollte nur gesendet werden, wenn sich was verändert und wenn dann auch nur tick-basiert - es muss als Input die Spieler Position, der Spiler Input, die Bewegungsvektoren und die ausgerüstete Waffe mitgeschickt werden
Was ist ein Delta Gamestate? Wie hoch ist da die Update Frequenz?
Delta = Veränderung
Man muss nicht jedes Mal den gesamten Game State mitschicken - sondern nur die Änderungen (spart sehr viel Bandbreite), da der Server den derzeitigen State mit dem zuletzt erhaltenen State compared, ist dies möglich
Die Update Frequenz ist abhängig vom Spiel - für schnelle Spiele zwischen 10 und 60 Hertz (nur in eSports manchaml mehr als 60 Hz)
Wie sollte man Game State Daten am besten handhaben beim Herumsenden zwischen Klient und Server? Nenne und beschreibe vier Möglichkeiten.
1) Alle Daten serialisieren (Serialisierung am Server, Deserialsierung am Klienten zum erneut Builden)
+ Leicht zu debuggen
+ Leicht zu verstehen
- Schwer zu extenden
- Nicht sehr dynamisch
2) ECS Komponenten synchroniseren (alle Komponenten als “shared” markieren und alle Updates von geteilten Attributen an Klienten schicken, wo dann der Entity Tree erneut gebaut wird)
+ Leicht zu extenden
- mehr CPU Overhead
- Hat sehr viele Edge Cases
3) Flaches Schlüssel-Wert System (Schlüssel-Werte Tabellen - Sheets, wo die Klienten die Updates vom Klienten geschickt werden)
+ Leicht zu extenden
+ Leicht zu debuggen
- Nicht so einfach wie synchronisiertes ECS, benötigt manuelles Mappen von Sheets zu Game Objekten
4) Game State in generischem Objekt halten (JSONs, Lua Tabellen)
+ Leicht zu extenden
+ Leicht zu debuggen
+ Simpel
- Ineffizent
Was ist Cheating?
Klient kann über die eigenen Daten und Werte lügen und diese an den Server schicken - Server tut sich schwer damit, dies herauszufinden
Was ist ein autoritativer Server?
Der autoritative Server prüft jeglichen Input und Daten, die er vom Spieler erhält, ob diese auch möglich sind und setzt selbst fest, welche Daten angewendet werden
Was ist Lag? Wie wird dieser noch genannt?
Lag ist, wenn das Senden von Daten zwischen Klient und Server verzögert ist
Auch genannt: Latenz, Lag, Round-Trip-Time (RTT) oder Ping (enthält beide Richtungen, also hin und zurück)
Löst 5G die Lag-Probleme?
Nein
Wie funktioniert Lag bei einem autoritativem Server?
Spieler sehen den Delay der eigenen Aktionen - ist okay für manche Aktionen (Bewegung in Chess), aber nicht okay für Spieler Bewegung zum Beispiel
Wie vermeidet man Lag bei einem autoritativen Server? Welche Rolle spielt hierbei die Server Reconciliation?
Der Klient muss das Gameplay selbst auch simulieren und wendet den eigenen Input sofort an (Client-Side-Prediction) - allerdings kann es dann passieren, dass der Spieler bei sich zurückspringt, da der Server behauptet, der Spieler steht an einer anderen Position –> hier kommt Server Reconciliation zum Einsatz
Alle kürzlich getätigten Inputs werden gespeichert und bekommen eine einzigartige ID - mit jedem Server Update wird die letzte Input ID mitgegeben, dadurch kann der Klient alle Inputs die mitgegeben werden selbst anwenden (falls diese noch nicht vom Server angewendet worden sind)
Gibt es alternativen zu Autoritativen Servern?
Ja - Deterministischer Lockstep, das gesamte Gameplay ist deterministisch, weshalb man sich Serverkosten spart.
Wie können große Karten in MMORPG’s mit Servern funktionieren? Ist die Auslastung dafür nicht zu hoch?
= Man unterteilt die große Karte in Regionen auf und jede Region hat nur die Spieler verbunden, die sich gerade in dieser Region befinden
Was ist Sharding?
Mehrere Server für eine einzelne Region, wodurch sich Spieler nicht mehr sehen können, aber dies die Last für die Server erleichtert
Wie funktioniert ein Chat Server mit Sharding?
Es gibt einen Chat Server, mit dem alle Spieler verbunden sind, damit sie miteinander kommunizieren können