NOTA: l'ho chiesto su Stack Overflow alcuni giorni fa ma avevo pochissime visualizzazioni e nessuna risposta. Ho pensato che avrei dovuto chiedere invece su gamdev.stackexchange.
Questa è una domanda / richiesta generale per consigli su come mantenere un sistema di generazione procedurale attraverso più aggiornamenti post-release, senza interrompere i contenuti generati in precedenza.
Sto cercando di trovare informazioni e tecniche per evitare problemi di "effetto farfalla" durante la creazione di contenuti procedurali per i giochi. Quando si utilizza un generatore di numeri casuali con seeding, è possibile utilizzare una sequenza ripetuta di numeri casuali per creare un mondo riproducibile. Mentre alcuni giochi salvano semplicemente il mondo generato su disco una volta generati, una delle potenti funzionalità della generazione procedurale è il fatto che puoi fare affidamento sulla riproducibilità della sequenza numerica per ricreare una regione più volte allo stesso modo, eliminando la necessità di persistenza. A causa dei vincoli della mia situazione particolare, devo ridurre al minimo la persistenza e devo fare affidamento il più possibile sulla concentrazione puramente seminata.
Il principale pericolo in questo approccio è che anche il minimo cambiamento nel sistema di generazione procedurale può causare un effetto farfalla che cambia il mondo intero. Questo rende molto difficile aggiornare il gioco senza distruggere i mondi che i giocatori stanno esplorando.
La tecnica principale che ho usato per evitare questo problema è progettare la generazione procedurale in più fasi, ognuna delle quali ha il proprio generatore di numeri casuali con seeding. Ciò significa che ogni sottosistema è autonomo e se qualcosa si rompe non influirà su tutto il mondo. Tuttavia, sembra che abbia ancora un grande potenziale di "rottura", anche se in una parte isolata del gioco.
Un altro possibile modo di affrontare questo problema potrebbe essere mantenere versioni complete dei generatori all'interno del codice e continuare a utilizzare il generatore giusto per una determinata istanza mondiale. Questo mi sembra un incubo per la manutenzione e sono curioso di sapere se qualcuno lo fa davvero.
Quindi, la mia domanda è davvero una richiesta di consigli generali, tecniche e schemi di progettazione per affrontare questo problema dell'effetto farfalla, specialmente nel contesto degli aggiornamenti di gioco post-rilascio. (Spero non sia una domanda troppo ampia.)
Attualmente sto lavorando in Unity3D / C #, anche se questa è una domanda agnostica sul linguaggio.
AGGIORNARE:
Grazie per le risposte
Sembra sempre più che i dati statici siano l'approccio migliore e più sicuro, e inoltre che quando si memorizzano molti dati statici non è un'opzione, avere una lunga campagna in un mondo generato richiederebbe un rigoroso controllo delle versioni dei generatori utilizzati. Il motivo della limitazione nel mio caso è la necessità di un salvataggio / sincronizzazione del cloud basato su dispositivi mobili. La mia soluzione potrebbe essere quella di trovare modi per archiviare piccole quantità di dati compatti su cose essenziali.
Trovo che il concetto di "Gabbie" di Stormwind sia un modo particolarmente utile di pensare alle cose. Una gabbia è fondamentalmente un punto rialzato, prevenendo gli effetti di scorrimento di piccoli cambiamenti, cioè mettendo in gabbia la farfalla.