NOTA: pregunté esto en Stack Overflow hace unos días, pero tuve muy pocas vistas y ninguna respuesta. Supuse que debería preguntar en gamdev.stackexchange en su lugar.
Esta es una pregunta / solicitud general de asesoramiento sobre el mantenimiento de un sistema de generación de procedimientos a través de múltiples actualizaciones posteriores al lanzamiento, sin romper el contenido generado anteriormente.
Estoy tratando de encontrar información y técnicas para evitar problemas de "efecto mariposa" al crear contenido procesal para juegos. Cuando se usa un generador de números aleatorios sembrados, se puede usar una secuencia repetitiva de números aleatorios para crear un mundo reproducible. Si bien algunos juegos simplemente guardan el mundo generado en el disco una vez generado, una de las características poderosas de la generación de procedimientos es el hecho de que puede confiar en la reproducibilidad de la secuencia numérica para recrear una región varias veces de la misma manera, eliminando la necesidad de persistencia. Debido a las limitaciones de mi situación particular, debo minimizar la persistencia y necesito confiar en el concentrado puramente sembrado tanto como sea posible.
El principal peligro en este enfoque es que incluso el más mínimo cambio en el sistema de generación de procedimientos puede causar un efecto mariposa que cambia el mundo entero. Esto hace que sea muy difícil actualizar el juego sin destruir los mundos que los jugadores están explorando.
La técnica principal que he estado usando para evitar este problema es diseñar la generación de procedimientos en múltiples fases, cada una de las cuales tiene su propio generador de números aleatorios. Esto significa que cada subsistema es autónomo, y si algo se rompe, no afectará a todo en el mundo. Sin embargo, parece que todavía tiene un gran potencial de "rotura", incluso si está en una parte aislada del juego.
Otra posible forma de lidiar con este problema podría ser mantener versiones completas de sus generadores dentro del código, y seguir usando el generador correcto para una instancia mundial dada. Sin embargo, esto me parece una pesadilla de mantenimiento, y tengo curiosidad por saber si alguien realmente hace esto.
Por lo tanto, mi pregunta es realmente una solicitud de asesoramiento general, técnicas y patrones de diseño para tratar este problema del efecto mariposa, especialmente en el contexto de las actualizaciones del juego posteriores al lanzamiento. (Esperemos que esa no sea una pregunta demasiado amplia).
Actualmente estoy trabajando en Unity3D / C #, aunque esta es una pregunta independiente del lenguaje.
ACTUALIZAR:
Gracias por las respuestas
Se parece cada vez más a que los datos estáticos son el mejor y más seguro enfoque, y también que cuando almacenar una gran cantidad de datos estáticos no es una opción, tener una campaña larga en un mundo generado requeriría una versión estricta de los generadores utilizados. La razón de la limitación en mi caso es la necesidad de un guardado / sincronización en la nube basado en dispositivos móviles. Mi solución puede ser encontrar formas de almacenar pequeñas cantidades de datos compactos sobre cosas esenciales.
Creo que el concepto de "Jaulas" de Stormwind es una forma particularmente útil de pensar sobre las cosas. Una jaula es básicamente un punto de reinicio, evitando los efectos de pequeños cambios, es decir, enjaulando a la mariposa.