Co to jest “seed” w grach ?
Teoria
Prekrekwizyty:
- Wiesz co to generowanie proceduralne
- Wiesz co to są liczby pseudo-losowe [opcjonalnie]
- Wiesz co to są szumy [opcjonalnie]
- Mnożenie, dodawanie, reszta z dzielenia
Jeśli graliście kiedyś w Minecrafta, Terrarię, Rimworlda lub inną grę z elementami proceduralnej generacji, mogliście się natknąć na określenie “seed”, najczęściej podczas rozpoczynania rozgrywki na nowym świecie. Wcale nie jest to termin na który zwrócą uwagę tylko entuzjaści Noisegra – jest to parametr widoczny gołym okiem na interfejsie użytkownika.

Nasiona (seeds) są na tyle ciekawe, że mają swoje własne fora lub strony internetowe:
- https://www.reddit.com/r/minecraftseeds
- https://www.reddit.com/r/RimWorldSeeds
- https://www.reddit.com/r/Valheim_Seeds/
Całkiem popularne, nawiasem mówiąc, bo ten z Minecrafta ma ponad 300 tysięcy użytknowników! Co więc jest takiego ciekawego w tych “seed’ach”?
Seed to nic innego jak ciąg znaków, który jest unikalny dla każdego świata lub innego elementu, który jest tworzony proceduralnie. Innymi słowy to wizytówka, identyfikator – porównując do naszego świata to tak jak numer PESEL dla człowieka. Rozpoczynając nową rozgrywkę, gdy gra tworzy nowy świat, nadaje mu właśnie taki identyfikator (właściwie to dzieje się to w odwrotnej kolejności – najpierw losuje identyfikator, a potem tworzy świat). Dzieje się tak dlatego, że gra tworzy świat na podstawie tego ciągu znaków – więc jeśli jakimś cudem dwóch graczy wylosuje taki sam seed, otrzymają taki sam świat.
Stąd nazwa “seed” czyli ziarno – prawdopodobnie pomysłodawcy chodziło o analogię do natury, gdzie z dwóch identycznych ziaren wyrośnie takie samo drzewko.
Tutaj możemy powrócić do znanych forów, gdzie ludzie dzielą się swoimi “ziarnami”. Skoro gry oferują opcję wpisania własnego seed’a, a także informują jaki seed posiada wygenerowany świat, nic nie stoi na przeszkodzie, aby się podzielić swoim światem z innymi – i to właśnie robią gracze na przeróżnych forach i stronach internetowych. Twój świat w Terrarii ma super wypasioną górę i jaskinie ze skarbami zaraz obok punktu startowego? Podziel się! A może masz dość generowania nowych światów bo masz pecha i zawsze najbliższa pustynia jest zbyt daleko? Zobacz na forum, może ktoś ma dokładnie taki seed, który odpowiada Twoim potrzebom.
Pamiętaj, że seed to nie zapis gry. Nie zawiera informacji o tym co gracz zrobił w świecie, tylko to jak gra ma wygenerować nowy świat.

Od strony technicznej seed to po prostu liczba lub ciąg znaków. Aby zrozumieć dlaczego jest tak ważna, warto wiedzieć jak działa losowość w grach (tutaj zapraszam do osobnego artykułu poświęconego tej tematyce -> LINK), a dla leniuszków spieszę z przypominajką:
W skrócie – gry generują unikalne światy lub ich elementy na podstawie liczb, które określają wszystkie ich parametry jak np. wysokość gór, położenie rzek czy częstotliwość patroli nieokrzesanych orków. Te wylosowane liczby to po prostu kolejne wartości z pewnego ciągu, który bierze poprzednią liczbę, modyfikuję ją według matematycznych wzorów i przekształceń i na tej podstawie zwraca kolejną wartość. Taki ciąg może tworzyć kolejne liczby w nieskończoność… ale skąd ma wziąć pierwszą liczbę?
Pierwsza liczba to właśnie seed! Jest ona niezmiernie ważna, ponieważ decyduje o całym szeregu wygenerowanych liczb – dwa takie same seed’y dadzą taki sam ciąg, różne natomiast sprawią, że te ciągi będą od siebie zupełnie inne. Przykładowo, wyobraźmy sobie prosty wzór w postaci:
następna_liczba = poprzednia_liczba * 3
Dla pierwszej liczby (seed’a) = 1, ciąg będzie wyglądał tak:
1, 3 ,9 ,27 (...)
Dla pierwszej liczby (seed’a) = 2, ciąg będzie wyglądał tak:
2, 6, 18, 54, 162 (...)
Inna początkowa liczba sprawiła, że ciąg generuje zupełnie różny zestaw liczb. Choć ciągi używane w praktyce są bardziej skomplikowane, opierają się na dokładnie tej samej zasadzie – tworzą nową liczbę poprzez przekształcenie poprzedniej.
A skąd komputery biorą tę pierwszą liczbę? Mogą sobie ją wygenerować same, lub pozwolić na to graczowi. Tak jak napisałem wcześniej, wspominając o forach z seed’ami, wiele gier pozwala wpisać swój seed. Niech cię nie zmyli to, że często zawierają litery lub całe słowa – pod spodem i tak gra konwertuje je na liczby. Gry oferują taką możliwość, żeby gracz miał kontrolę nad wygenerowanym światem – podając ten sam seed co kolega sprawi, że generator liczb losowych wytworzy ten sam ciąg liczb, w efekcie czego góry, rzeki i potwory będą w tych samych miejscach!
Jednak nie wszystkie gry oferują taką możliwość. Jeśli kiedyś korzystaliście z liczb losowych w programowaniu, zauważyliście pewnie, że podanie seed’a nie było obowiązkowe. Skąd komputery więc potrafią wygenerować seed, gdy użytkownik go nie wpisze ręcznie?
Tutaj trzeba wykazać się kreatywnością, ponieważ potrzebujemy względnie losowej liczby jako… pierwszej liczby ciągu generującego liczby losowe. Bardzo często więc jest to czynnik zewnętrzny, który będzie unikalny dla każdego użytkownika. Przykładem takiej metody może być wykorzystanie czasu systemowego — w momencie, gdy gra inicjalizuje generator liczb losowych, pobiera aktualny czas w milisekundach lub nanosekundach i używa go jako pierwszej liczby ciągu. To dobry sposób, ponieważ jest bardzo mało prawdopodobne, aby wiele osób uruchomiło dany program lub grę dokładnie w tej samej milisekundzie — a nawet jedna cyferka różnicy sprawi, że wygenerowany ciąg będzie zupełnie inny.
Podsumowywując – seed to liczba, która determinuje cały ciąg kolejnych liczb losowych, które to z kolei decydują o przeróżnych aspektach naszej gry. Tak więc dzieląc się seed’em z innymi graczami, tak naprawdę dajecie im pierwszą liczbę do ich generatora losowego!
Możesz teraz śmiało imponować znajomym, mówiąc że analizujesz i wrzucasz na internetowe fora swoje ulubione liczby losowe 🙂