PODOBNE ZIARNA
Minecraftowe ziarna. Wydawać by się mogło, że jest nieskończenie wiele ziaren i nieskończenie wiele światów. Jednak ziaren jest tylko 18446744073709551616. Jeżeli wpiszesz tę liczbę, uzyskasz jednak ziarno o dużo niższej wartości. A to dlatego, że jest traktowane jako tekstowe. Jeżeli zakres ziaren mielibyśmy opisać nierównością, byłaby ona taka: -9223372036854775808 ≤ x ≤ 9223372036854775807. Jeżeli wpiszesz w pole ziarna tekst bądź liczbę x niespełniającą wcześniejszej równości, ziarno będzie przekonwertowane na liczbę od -2147483648 do 2147483647.
Na razie bez wiedzy technicznej
Wiem, że tutaj nie będę mówić o technicznej kwestii podobnych ziaren, ale mimo to zdecydowałem to napisać. W 2014 roku, grając na wersji 1.5.2, odnalazłem gdzieś w czeluściach Internetu ziarno GIMMEABREAK. Generowało ono wioskę. Chciałem mieć jednak wioskę z kowalem. Postanowiłem pokombinować z ziarnem, i wpisałem w pole ziarno GIMMEABREAJ. Zespawnowałem się gdzieś na polanie, musiałem trochę podejść do wioski. W wiosce był kowal. Prawdopodobnie był to zbieg okoloczności, że dwa podobnie wyglądające ziarna wygenerowały w miarę podobny teren. Wtedy uznałem jednak, że to jest zasada, nie zbieg okoliczności. Tutaj nie został opisany przypadek podobnych ziaren. Zaraz się o nich dowiesz.
W końcu zacznijmy
Definicja mówi, że podobne ziarna to takie, które dają taką samą resztę przy dzieleniu przez 281474976710656, czyli 248. Skąd?
Nie będziemy mówić o sprawach dla nikogo niezrozumiałych. Otóż Minecraft, generując teren, używa dwóch generatorów liczb pseudolosowych. Oba są wyciągane z ziarna. Jeden z nich to pRNG 64-bitowy. Bierze pod uwagę całe ziarno. To on odpowiada m. in. za biomy i rzeki. Drugi pRNG bierze pod uwagę tylko 48 ostatnich bitów ziarna, czyli resztę z dzielenia przez 281474976710656. Dzięki niemu mamy m. in. rzeźbę terenu, jaskinie, struktury. Teraz wyjaśniliśmy, skąd taka definicja. Podobne ziarna dają ten sam wynik przy 48-bitowym pRNG, lecz dają różne liczby przy 64-bitowym pRNG. W podobnych ziarnach jeżeli gdzieś jest taki sam biom, wszystko na danym terenie jest takie same. To dlatego Nether i Kres są w światach z podobnych ziaren takie same.
A na co nam to?
Podobne ziarna są używane m. in. w speedrunningu, czyli przechodzeniu gry w jak najszybszym czasie. Odkryto kiedyś ziarno, które jest dobre do tych celów. Zawiera aż 8 ok Kresu, a 4 perły są w tej samej twierdzy. Nie było to jednak ziarno idealne. Dzięki metodzie podobnych ziaren udało się odnaleźć ziarno, które było lepsze. Przy spawnie był śnieg i loch, a w nim trochę żelaza.
Jeżeli odnalazłeś ciekawe ziarno, ale widzisz, że mogłoby być lepiej, popróbuj testować podobne ziarna. Aby uzyskać z danego ziarna ziarno podobne, należy dodać lub odjąć 281474976710656. W sumie masz 65535 podobnych ziaren dla danego ziarna X.
Porównanie dwóch ziaren
Element porównywany | Ziarno I | Ziarno II | Wnioski |
Ziarno | -3289940473935419453 | 220528835438531 | Różnica tych ziaren wynosi 3290161002770857984, czyli 11689 * 248. Stąd reszta z dzielenia tych ziaren przez 248 jest taka sama, więc te ziarna są podobne. |
Spawn |  (182; 69; 186) |  (49; 74; -3) | Spawny są inne, więc za ich lokalizację odpowiada pRNG 64-bitowy. |
Teren przy tym samym biomie (-1000; 100; 0) |  |  | Jeżeli na tych samych koordynatach jest ten sam biom, teren jest taki sam. Za rzeźbę terenu odpowiada więc pRNG 48-bitowy. Jeżeli ktoś dobrze się przyjrzy, zauważy, że kwiaty są inaczej ustawione, zatem za nie odpowiada pRNG 64-bitowy. |
Granica biomów Jaskinie (930; 100; 0) |  |  | Po prawej stronie wszystko jest takie same, gdyż biom jest taki sam. Natomiast po lewej stronie biom jest inny, więc wszystko wygląda kompletnie inaczej. Jednak na lewo widać w obu przypadkach wzgórze i jaskinię. Mimo to, że biom jest inny, jaskinie generują się tak samo, więc za nie odpowiada pRNG 48-bitowy. |
Jaskinie Jeziorka (1024; 30; -768) |  |  | Jaskinie generują się niezależnie od biomu. Obecność biomu oceanicznego ucina jednak niektóre jaskinie. Oznacza to, że za jaskinie odpowiada pRNG 48-bitowy. Co do jeziorek, jeżeli biom jest inny - generują się w innym miejscu. Jednak nie da się określić, jaki pRNG odpowiada za jeziorka. Jeżeli wiesz - pisz na maila, nie gryzę. |
Nether Układy generowane (286; 61; 144) |  |  | Ze względu na to, że Nether składa się z jednego biomu, generowanie tego wymiaru opiera się niemal w całości o pRNG 48-bitowy. Układy generowane również są generowane w oparciu o pRNG 48-bitowy, ale to, czy i w jakim wariancie się ukażą - to zależy od pRNG 64-bitowego. Przykładowo, w lokalizacji XYZ jest chatka wiedźmy. Gdy mamy ziarno podobne, które generuje w miejscu XYZ tundrę, mamy w tym miejscu igloo, gdyż w kodzie gry chatki wiedźmy, piramidy, świątynie Majów i igla są traktowane jako świątynia. |
Lokalizacje biomów źródło: chunkbase.com |  |  | Na mapach (kliknij, aby powiększyć) można zauważyć, że niektóre granice biomów idą tak samo. pRNG 48-bitowy odpowiada za granice między biomami, natomiast pRNG 64-bitowy decyduje, gdzie dany biom umieścić i gdzie umieścić rzekę. W przypadku, gdy pRNG 64-bitowy zdecyduje, że po obu stronach danej granicy ma być ten sam biom, granica nie będzie widoczna, lecz w podobnym ziarnie może się ona ukazać. |
InfDev (288; 127; 96) |  |  | Widać, że teren jest taki sam. Nie było wtedy biomów, więc za teren odpowiada w całości pRNG 48-bitowy. To odpowiada, że kiedyś każde ziarno miało 65535 dublów. Różnica między dublami ukazuje się dopiero w Becie 1.8. Ale jak w tej wersji można było wygenerować świat z określonym ziarnem? Trzeba było zająć się edycją pliku level.dat - tam mamy ziarno. Edycja tego pliku pomogła również w uzyskaniu tej samej perspektywy. |
Alpha 1.2 (-43; 82; 64) |  |  | Mimo tego, iż w Alphie 1.2 wprowadzono biomy, to one generowały się według rozkazów pRNG 48-bitowego. pRNG 64-bitowy został użyty do generowania biomów dopiero w Becie 1.8. |
|
|