Estoy trabajando en un MMORPG gratuito y tengo un problema.
Estoy (con otras personas) desarrollando un sistema de grabación de video para el juego. La idea es básicamente: registramos todos los paquetes enviados y recibidos con marcas de tiempo, más algunos datos locales del cliente, y luego los volcamos en un archivo. Para reproducir el video, simplemente emulamos todo lo que está en el archivo. También tenemos una opción para exportar el video a avi con ffmpeg.
El problema es: cuando cambiamos entre versiones del juego, es difícil mantener la compatibilidad con versiones anteriores del video (comandos agregados / eliminados, cambios de funciones, etc.). ¿Hay una buena manera de manejar este problema? en lugar de tener un montón de jugadores diferentes y elegir el correcto para cada versión del archivo de video?
Sería útil saber cómo manejan otros juegos esta situación.
Gracias por la ayuda, perdón por mi inglés.
Respuestas:
Nuestra regla básica es nunca cambiar un tipo de paquete existente. Todo se agrega al final de uno existente o un nuevo comando. Esto también hace que sea mucho menos probable que dos personas pisoteen el trabajo del otro.
fuente
No es inconcebible, especialmente en una PC, que solo versionen el código de juego y cambien la versión cuando hacen un cambio que afecta el sistema de reproducción. Si el archivo de reproducción está etiquetado con la versión del código de juego con el que fue creado y el cliente todavía tiene acceso a esa versión, debería funcionar bien.
fuente
Una forma de abordar esto es a lo largo de las líneas de un juego llamado "Heroes of Newerth". (que cambia cada +/- 2 semanas) Por lo que puedo decir, ellos:
Como no trabajo en S2, claramente no puedo decir que definitivamente así es como funciona. Sin embargo, he notado una marcada tendencia de tamaño de descarga asociada con la edad de la repetición.
O eso, o agregan parches de entidad a la repetición (por ejemplo, el hechizo X tiene efecto Y en lugar de efecto Z). Si la información relacionada con los paquetes también se almacena en la configuración de la entidad, esta revisión en caliente de la entidad también le permitirá comprender los paquetes más antiguos.
Definitivamente no almacenaría el comportamiento histórico en el cliente porque eso puede volverse enorme muy rápidamente. Especialmente cuando el cliente está actualizando, por ejemplo, 10.1.0 a 10.2.0 (ya que necesitan descargar cada parche entre las dos versiones, en lugar del parche final).
Google Protobuf es una buena idea como capa de serialización porque admite cosas como esta por diseño.
fuente