UWAGA: Poprosiłem o to na Przepełnienie stosu kilka dni temu, ale miałem bardzo mało wyświetleń i brak odpowiedzi. Pomyślałem, że zamiast tego powinienem zapytać na gamdev.stackexchange.
Jest to ogólne pytanie / prośba o poradę w sprawie utrzymania systemu generowania procedur poprzez wiele aktualizacji po wydaniu, bez niszczenia wcześniej wygenerowanej treści.
Staram się znaleźć informacje i techniki pozwalające uniknąć problemów z efektem motyla podczas tworzenia treści proceduralnych do gier. Podczas korzystania z generatora liczb losowych zaszczepionych można użyć powtarzającej się sekwencji liczb losowych w celu stworzenia odtwarzalnego świata. Podczas gdy niektóre gry po prostu zapisują wygenerowany świat na dysku po wygenerowaniu, jedną z potężnych funkcji generowania procedur jest fakt, że można polegać na odtwarzalności sekwencji numerów w celu wielokrotnego odtworzenia regionu w ten sam sposób, eliminując potrzebę trwałość. Ze względu na ograniczenia związane z moją szczególną sytuacją muszę zminimalizować wytrwałość i w jak największym stopniu polegać na czysto zaszczepionej koncentracji.
Głównym niebezpieczeństwem tego podejścia jest to, że nawet najmniejsza zmiana w proceduralnym systemie generowania może spowodować efekt motyla, który zmienia cały świat. Utrudnia to aktualizację gry bez niszczenia światów eksplorowanych przez graczy.
Główną techniką, której użyłem, aby uniknąć tego problemu, jest zaprojektowanie generowania proceduralnego w wielu fazach, z których każda ma swój własny generator liczb losowych. Oznacza to, że każdy podsystem jest samowystarczalny, a jeśli coś się zepsuje, nie wpłynie to na wszystko na świecie. Wydaje się jednak, że wciąż ma duży potencjał do „złamania”, nawet jeśli jest to odizolowana część gry.
Innym możliwym sposobem radzenia sobie z tym problemem może być utrzymanie kompletnych wersji generatorów w kodzie i używanie odpowiedniego generatora dla danej instancji świata. Wydaje mi się to jednak koszmarem konserwacyjnym i jestem ciekawy, czy ktoś to robi.
Tak więc moje pytanie jest tak naprawdę prośbą o ogólne porady, techniki i wzorce projektowe dotyczące radzenia sobie z tym problemem efektu motyla, szczególnie w kontekście aktualizacji po wydaniu gry. (Mam nadzieję, że nie jest to zbyt szerokie pytanie).
Obecnie pracuję w Unity3D / C #, chociaż jest to pytanie agnostyczne z języka.
AKTUALIZACJA:
Dziękuję za odpowiedzi.
Coraz bardziej przypomina to, że dane statyczne są najlepszym i najbezpieczniejszym podejściem, a także, że podczas przechowywania dużej ilości danych statycznych nie ma opcji, długa kampania w wygenerowanym świecie wymagałaby ścisłej wersji używanych generatorów. Powodem tego ograniczenia jest w moim przypadku potrzeba zapisywania / synchronizacji w chmurze opartej na urządzeniach mobilnych. Moim rozwiązaniem może być znalezienie sposobu przechowywania niewielkich ilości zwartych danych o istotnych sprawach.
Uważam, że koncepcja „klatek” Stormwind jest szczególnie użytecznym sposobem myślenia o rzeczach. Klatka jest w zasadzie punktem ponownie wysuniętym, zapobiegającym efektowi niewielkich zmian, np. Umieszczaniu w klatce motyla.