ПРИМІТКА: Я запитав це в Stack Overflow кілька днів тому, але у нього було дуже мало переглядів і жодної відповіді. Зрозуміло, що я повинен запитати на gamdev.stackexchange.
Це загальне запитання / запит на консультацію щодо підтримки системи процедурного генерування за допомогою декількох оновлень після випуску, не порушуючи раніше створений контент.
Я намагаюся знайти інформацію та методи для уникнення проблем "Ефект метелика" під час створення процедурного вмісту для ігор. Під час використання насінного генератора випадкових чисел може бути використана повторювана послідовність випадкових чисел для створення відтворюваного світу. У той час як деякі ігри просто зберігають створений світ на створеному диску, одна з потужних особливостей процесуального генерації - це той факт, що ви можете розраховувати на відтворюваність послідовності чисел, щоб відтворити регіон кілька разів однаковим чином, усуваючи потребу в наполегливість. Через обмеження моєї конкретної ситуації я повинен звести до мінімуму наполегливість і потрібно якомога більше покладатися на чисто посівний концентрат.
Основна небезпека цього підходу полягає в тому, що навіть найменша зміна системи процедурного покоління може спричинити ефект метелика, який змінює весь світ. Це робить дуже складним оновити гру, не руйнуючи світи, які досліджують гравці.
Основна методика, яку я використовую, щоб уникнути цієї проблеми, - це розробити процедурне генерування в декілька фаз, кожна з яких має свій власний генератор випадкових чисел. Це означає, що кожна підсистема є самодостатньою, і якщо щось порушиться, це не вплине на все на світі. Однак це здається, що він все ще має великий потенціал для "поломки", навіть якщо в ізольованій частині гри.
Іншим можливим способом вирішення цієї проблеми може бути підтримка повних версій ваших генераторів в коді та продовження використання правильного генератора для даного світового примірника. Мені це здається кошмаром технічного обслуговування, і мені цікаво, якщо хтось насправді робить це.
Отже, моє запитання - це справді запит на загальні поради, методи та схеми дизайну для вирішення цієї проблеми ефекту метелика, особливо в контексті оновлень гри після релізу. (Сподіваємось, це не надто широке питання.)
Зараз я працюю в Unity3D / C #, хоча це мовне агностичне питання.
ОНОВЛЕННЯ:
Дякую за відповіді.
Це виглядає все більше і більше, як статичні дані - це найкращий і найбезпечніший підхід, а також те, що при зберіганні багато статичних даних це не варіант, тривала кампанія в генерованому світі потребує суворої версії використовуваних генераторів. Причиною обмеження в моєму випадку є необхідність збереження / синхронізації на основі мобільних пристроїв. Моє рішення може бути в тому, щоб знайти способи зберігання невеликої кількості компактних даних про основні речі.
Я вважаю, що концепція "Клітки" Stormwind є особливо корисним способом мислення про речі. Клітка - це, в основному, переселене місце, що запобігає побічним впливам невеликих змін, тобто ув'язнення метелика.