1 points par GN⁺ 2024-06-14 | 1 commentaires | Partager sur WhatsApp

Analyse du code source de Serious Engine 1

Aperçu

  • Serious Sam a été conçu comme un jeu multijoueur.
  • Même la campagne solo fonctionne comme du multijoueur.
  • Serious Engine prend en charge le solo, le multijoueur, l’enregistrement de démos et leur lecture.

Déterminisme en virgule flottante

  • Pour synchroniser le jeu, le comportement déterministe des calculs en virgule flottante est essentiel.
  • Le jeu n’étant sorti que sur Windows, il a pu éviter les problèmes de synchronisation dus aux différences entre compilateurs.
  • Des gardes de précision sont utilisés pour résoudre les problèmes liés aux différences de précision du FPU.

Ticks vs frames

  • Le tickrate de la logique du jeu est séparé du framerate de rendu.
  • La logique du jeu est fixée à 20 ticks par seconde.
  • L’interpolation est utilisée pour obtenir des mouvements et des animations fluides.

Multijoueur réseau

  • Le modèle réseau de Serious Engine suit une architecture client-serveur.
  • Le serveur reçoit les messages des clients, les traite, puis transmet les informations pertinentes à tous les clients.
  • Le protocole UDP est utilisé pour transmettre les paquets.

Couche de paquets

  • Les paquets UDP peuvent arriver dans le désordre ou ne jamais être livrés.
  • Serious Engine implémente son propre protocole au-dessus d’UDP afin de garantir la fiabilité et l’ordre des paquets.
  • Les paquets fiables sont confirmés via des paquets ACK.

Cycle de vie de la connexion

  • Des paquets de broadcast sont utilisés pour établir une connexion virtuelle entre le client et le serveur.
  • Le serveur attribue un identifiant unique au client et s’en sert pour router les paquets.

Jeu hors ligne

  • Le solo et la lecture de démos sont des cas particuliers du multijoueur.
  • Le serveur et le client communiquent au sein du même processus.

Couche de messages

  • CNetworkMessage est une abstraction de message qui peut être lue et écrite comme un flux.
  • Les messages peuvent être compressés, avec par défaut la compression LZRW1.
  • Un encodage delta est utilisé pour minimiser la quantité de données transmises.

Sécurité des messages

  • Les messages ne sont pas chiffrés.
  • Les messages de chat sont transmis en clair.

L’avis de GN⁺

  • Utile pour les développeurs de jeux : l’architecture réseau et les mécanismes de synchronisation de Serious Engine peuvent constituer une référence précieuse pour le développement de jeux multijoueur.
  • L’importance du déterminisme : les méthodes permettant de garantir un comportement déterministe des calculs en virgule flottante sont un élément clé pour résoudre les problèmes de synchronisation dans les jeux.
  • Conception de protocole réseau : l’implémentation d’un protocole propriétaire garantissant fiabilité et ordre au-dessus d’UDP est un bon exemple de programmation réseau.
  • Considérations de sécurité : l’absence de chiffrement des messages est un point à prendre en compte du point de vue de la sécurité dans le développement de jeux moderne.
  • Défis techniques : cela aide à comprendre les défis techniques qu’impliquait la création d’un jeu multijoueur rapide dans l’environnement réseau du début des années 2000.

1 commentaires

 
GN⁺ 2024-06-14
Commentaires sur Hacker News
  • J’étais le développeur qui a implémenté le code réseau de Serious Sam. J’ai codé un MVP simple inspiré du système de prédiction de QuakeWorld.
  • Serious Sam fonctionnait toujours très bien en LAN party. Il tournait de façon stable même quand d’autres jeux rencontraient des problèmes.
  • J’ai implémenté le multijoueur de Vigilante 8 sur le portage GB Color avec un gameplay déterministe. Les données étaient transmises un octet à la fois via le câble link de la GBC.
  • Croteam est une équipe de développement de jeux très talentueuse. Ils ont créé la série Talos Principle ainsi qu’un moteur de jeu Vulkan sur mesure.
  • Quelqu’un demande si c’est une idée comparable à « 1500 archers on a 28.8 » d’Age of Empires.
  • Cela souligne le phénomène par lequel, à mesure que les ressources techniques augmentent, les logiciels deviennent plus lents et moins efficaces. Il appelle cela « l’effet Benjamin Button du design logiciel ».
  • L’architecture de Factorio n’envoie que les événements d’entrée et repose sur un cœur de simulation synchronisé.
  • Quelqu’un se rappelle avoir joué à Serious Sam via une démo de PC Gamer. Le jeu est désormais considéré comme un classique.
  • Les fonctions d’interpolation du Serious Engine sont expliquées. Sur la console, on peut saisir net_bLerping=0 pour jouer sans interpolation.