Proceduralne generowanie poziomów

Proceduralne generowanie poziomów

Wielu z was pewnie miało okazję zagrać w takie gry jak Minecraft, Diablo lub The Binding of Isaac. Jednym z głównych elementów tych gier jest proceduralne generowanie poziomów, które polega na ich pseudolosowym ułożeniu według pewnych określonych zasad. Użycie takiej mechaniki w grze niesie ze sobą wiele korzyści oraz wiele problemów, które postaram się tu jedynie częściowo naświetlić, gdyż temat ten jest dość obszerny.

Główną zaletą losowo generowanych poziomów jest to, że każdy jest unikatowy, a to ciągnie za sobą kilka rzeczy. Gracz za każdym razem otrzymuje nieco inne wrażenia z gry, co przy odpowiednim zaprojektowaniu gry może znacząco zwiększyć replayability, gdyż gracz nie będzie mógł się nauczyć gry na pamięć. Ta losowość może też wciągać, zachęcając do eksploracji nowego świata, bo zwyczajnie nie wiadomo gdzie tym razem ukryte zostały diamenty lub skrzynia z wielkim skarbem. Dobrze wykonane proceduralnie generowane poziomy mogą znacząco wydłużyć życie gry. Zadaj sobie pytanie czy np Minecraft utrzymałby Cię przy monitorze gdybyś za każdym razem lądował na tej samej mapie?
Kolejną takich gier jest możliwość dopasowywania trudności rozgrywki na bieżąco w trakcie gry. Jako projektant możesz przewidzieć sytuację w której generowane plansze stają się nieco łatwiejsze gdy gracz będzie radził sobie bardzo słabo lub zbyt dobrze. Ten mechanizm może pomóc utrzymać gracza przy monitorze. Gra nigdy nie będzie zbyt łatwa dla sprawnego gracza, ani zbyt trudna dla słabego. Dodatkowym atutem takiej mechaniki jest to, że gracz nie musi o niej wiedzieć, a ty zza kurtyny będziesz mógł sterować jego wrażeniami. Niestety nie mogę sobie teraz przypomnieć tytułu, który używał tej mechaniki… może dlatego, że nawet jej nie zauważyłem? Jednak znależy z tym uważać – gracz może czuć się oszukany lub niedoceniany gdy zauważy, że gra  zmieniał poziom trudności bez jego polecenia.

Jak pisałem na początku proceduralnie generowanie poziomów niesie ze sobą też pewne minusy.
Trudno jest w nich prowadzić gracza w taki sposób aby jego wrażenia były jak najlepsze. Nie masz tu bezpośredniej kontroli nad tym co zostanie rzucone naprzeciw gracza, tak jak w wypadku ręcznie tworzonych poziomów.
Prowadzenie fabuły oraz narracji jest nieco utrudnione. Nie mając pełnej kontroli nad światem ciężko jest uformować świat w taki sposób aby gracz otrzymywał odpowiednie informacje w odpowiedniej kolejności. Diablo rozwiązało ten problem w ciekawy sposób. Ważne wydarzenia umieszczone zostały w miejscach, których nie da się ominąć, jeśli gracz chce popchnąć fabułę do przodu. Połączono tu też poziomy wygenerowane losowo z częściami mapy, które zostały stworzone ręcznie.
Kolejnym problemem jest sprawnie aby lokacje w grze miały sens, a elementy świata współgrały ze sobą. Problem ten pojawia się np w grze Swindle, gdzie gra generuje często puste pomieszczenia lub korytarze, które prowadzą donikąd. Warto też wskazać na Minecrafta w którym pewne elementy świata, np wioski generowane są czasami w bardzo dziwny sposób.

Pozostaje jeszcze kwestia ekonomiczna. Zaprojektowanie oraz zaprogramowanie proceduralnie generowanych poziomów jest trudne oraz czasochłonne. Należy dobrze przemyśleć to, czy wynik, który chcesz osiągnąć usprawiedliwi włożony nakład pracy. Stworzenie systemu, który generował będzie jedynie kilka poziomów może mijać się z celem, jednak gdy w grze użyjesz stu, tysiąca, lub nieskończenie wielu poziomów, wtedy może mieć to sens, gdyż zwyczajnie nakład pracy wymagany do stworzenia takich poziomów ręcznie będzie znacznie większy od stworzenia algorytmów, które same będą konstruować poziomy.