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
Commentaires sur Hacker News
net_bLerping=0pour jouer sans interpolation.