1 puntos por GN⁺ 2024-06-14 | 1 comentarios | Compartir por WhatsApp

Análisis del código fuente de Serious Engine 1

Resumen

  • Serious Sam fue diseñado como un juego multijugador.
  • La campaña para un jugador también funciona como si fuera multijugador.
  • Serious Engine soporta modo para un jugador, multijugador, grabación de demos y reproducción.

Determinismo de punto flotante

  • Para la sincronización del juego, el comportamiento determinista de las operaciones de punto flotante es importante.
  • Como solo se lanzó en Windows, pudo evitar problemas de sincronización causados por diferencias entre compiladores.
  • Para resolver problemas causados por diferencias en la precisión de la FPU, usa guards de precisión.

Ticks vs frames

  • La tasa de ticks de la lógica del juego está separada de la tasa de frames de renderizado.
  • La lógica del juego está fijada en 20 ticks por segundo.
  • Usa interpolación (interpolation) para lograr movimiento y animaciones suaves.

Multijugador en red

  • El modelo de red de Serious Engine es de cliente-servidor.
  • El servidor recibe y procesa mensajes de los clientes, y transmite la información relevante a todos los clientes.
  • Usa el protocolo UDP para transmitir paquetes.

Capa de paquetes

  • Los paquetes UDP pueden llegar fuera de orden o no llegar.
  • Serious Engine implementa su propio protocolo sobre UDP para garantizar confiabilidad y orden de paquetes.
  • Los paquetes confiables se confirman mediante paquetes ACK.

Ciclo de vida de la conexión

  • Usa paquetes de broadcast para establecer una conexión virtual entre cliente y servidor.
  • El servidor asigna un identificador único al cliente y enruta los paquetes a través de este.

Juego offline

  • El modo para un jugador y la reproducción de demos son casos especiales del multijugador.
  • El servidor y el cliente se comunican dentro del mismo proceso.

Capa de mensajes

  • CNetworkMessage es una abstracción de mensajes que puede leerse y escribirse como un stream.
  • Los mensajes pueden comprimirse, y por defecto usa compresión LZRW1.
  • Usa codificación delta para minimizar la cantidad de datos transmitidos.

Seguridad de mensajes

  • Los mensajes no están cifrados.
  • Los mensajes de chat se transmiten en texto plano.

Opinión de GN⁺

  • Útil para desarrolladores de juegos: La estructura de red y el mecanismo de sincronización de Serious Engine pueden servir como referencia útil para el desarrollo de juegos multijugador.
  • Importancia del comportamiento determinista: La forma de garantizar el comportamiento determinista en operaciones de punto flotante es un elemento clave para resolver problemas de sincronización en juegos.
  • Diseño de protocolos de red: Implementar un protocolo propio sobre UDP que garantice confiabilidad y orden es un buen ejemplo de programación de redes.
  • Consideraciones de seguridad: El hecho de que no haya cifrado de mensajes es algo que debe considerarse desde la perspectiva de seguridad en el desarrollo moderno de videojuegos.
  • Desafíos técnicos: Ayuda a entender los desafíos técnicos de implementar un juego multijugador de ritmo rápido en el entorno de red de inicios de los 2000.

1 comentarios

 
GN⁺ 2024-06-14
Comentarios de Hacker News
  • Fui el desarrollador que implementó el código de red de Serious Sam. Escribí un MVP simple inspirado en el sistema de predicción de QuakeWorld.
  • Serious Sam siempre funcionaba bien en las LAN parties. Corría de forma estable incluso cuando otros juegos tenían problemas.
  • Implementé el multijugador de Vigilante 8 en el port para GB Color con jugabilidad determinista. Usábamos el cable link de GBC para transmitir datos de a 1 byte.
  • Croteam es un equipo de desarrollo de juegos con muchísimo talento. Desarrollaron la serie Talos Principle y un motor de juegos Vulkan personalizado.
  • Pregunta si es una idea similar a "1500 archers on a 28.8" de Age of Empires.
  • Señala el fenómeno por el cual, a medida que aumentan los recursos técnicos, el software se vuelve más lento e ineficiente. Lo llama el "efecto Benjamin Button del diseño de software".
  • La arquitectura de Factorio solo transmite eventos de entrada y depende de un núcleo de simulación sincronizado.
  • Recuerda haber jugado Serious Sam en una demo de PC Gamer. Ahora ya se considera un juego clásico.
  • Explica la función de interpolación del Serious Engine. En la consola puedes escribir net_bLerping=0 para jugar sin interpolación.