REMARQUE: j'ai posé cette question sur Stack Overflow il y a quelques jours, mais j'ai eu très peu de vues et aucune réponse. J'ai pensé que je devrais plutôt demander sur gamdev.stackexchange.
Il s'agit d'une question / demande générale de conseils sur la maintenance d'un système de génération de procédures par le biais de plusieurs mises à jour post-publication, sans interrompre le contenu généré précédemment.
J'essaie de trouver des informations et des techniques pour éviter les problèmes d '"effet papillon" lors de la création de contenu procédural pour les jeux. Lorsque vous utilisez un générateur de nombres aléatoires prédéfini, une séquence répétée de nombres aléatoires peut être utilisée pour créer un monde reproductible. Alors que certains jeux enregistrent simplement le monde généré sur le disque une fois généré, l'une des fonctionnalités puissantes de la génération procédurale est le fait que vous pouvez compter sur la reproductibilité de la séquence de nombres pour recréer une région plusieurs fois de la même manière, supprimant ainsi le besoin de persistance. En raison des contraintes de ma situation particulière, je dois minimiser la persistance et je dois me fier autant que possible à un contenu purement semé.
Le principal danger de cette approche est que même le moindre changement dans le système de génération procédurale peut provoquer un effet papillon qui change le monde entier. Il est donc très difficile de mettre à jour le jeu sans détruire les mondes que les joueurs explorent.
La principale technique que j'ai utilisée pour éviter ce problème est de concevoir la génération procédurale en plusieurs phases, chacune ayant son propre générateur de nombres aléatoires prédéfini. Cela signifie que chaque sous-système est autonome et que si quelque chose se brise, cela n'affectera pas tout dans le monde. Cependant, cela semble avoir encore beaucoup de potentiel de "casse", même si dans une partie isolée du jeu.
Une autre façon possible de résoudre ce problème pourrait être de maintenir des versions complètes de vos générateurs dans le code et de continuer à utiliser le bon générateur pour une instance mondiale donnée. Cela me semble cependant être un cauchemar de maintenance, et je suis curieux de savoir si quelqu'un le fait réellement.
Donc, ma question est vraiment une demande de conseils généraux, de techniques et de modèles de conception pour traiter ce problème de l'effet papillon, en particulier dans le contexte des mises à jour du jeu après la sortie. (J'espère que ce n'est pas une question trop large.)
Je travaille actuellement dans Unity3D / C #, bien que ce soit une question indépendante du langage.
METTRE À JOUR:
Merci pour les réponses.
Il semble de plus en plus que les données statiques soient l'approche la meilleure et la plus sûre, et aussi que lorsque le stockage d'un grand nombre de données statiques n'est pas une option, avoir une longue campagne dans un monde généré nécessiterait une version stricte des générateurs utilisés. La raison de la limitation dans mon cas est la nécessité d'une sauvegarde / synchronisation cloud mobile. Ma solution peut être de trouver des moyens de stocker de petites quantités de données compactes sur des choses essentielles.
Je trouve que le concept de Stormwind de "Cages" est une manière particulièrement utile de penser aux choses. Une cage est fondamentalement un point de réensemencement, empêchant les effets d'entraînement de petits changements, c'est-à-dire la mise en cage du papillon.