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
Comentarios de Hacker News
net_bLerping=0para jugar sin interpolación.