Czy rzuty kośćmi Mini Kraken są uczciwe? Zaglądamy do wnętrza silnika kości
Prędzej czy później pyta o to każda drużyna: czy to jest ustawione? Oto szczery, pozbawiony żargonu przewodnik po tym, jak Mini Kraken wybiera liczbę — dlaczego jest to uczciwe, jak możesz to sprawdzić i czego nigdy nie...
Czy rzuty kośćmi Mini Kraken są uczciwe? Zaglądamy do wnętrza silnika kości
Prędzej czy później ktoś przy stole mówi to na głos: „Nie ma mowy, żeby to było losowe. Ta rzecz mnie nienawidzi". Cyfrowa kość nie zaturkocze po prawdziwym drewnie, więc kiedy przychodzi passa pecha, naturalne jest zastanawianie się, czy aplikacja nie przykłada palca do szali.
Słuszne pytanie. Zasługuje na prostą odpowiedź, więc podajemy ją od razu: kości Mini Kraken są uczciwe. Każda ścianka ma równe szanse, nic nie jest podkręcane, a — co nietypowe — możesz sam zweryfikować rzut. Ten artykuł tłumaczy dokładnie, jak to działa, prostym językiem, żebyś następnym razem, gdy pojawi się ten temat, miał coś konkretnego, na co można wskazać.
Co tak naprawdę znaczy „uczciwa"
Zanim opowiemy o naszym silniku, warto ustalić, czym w ogóle jest uczciwa kość.
Uczciwa d20 oznacza jedno: każda z jej dwudziestu ścianek jest równie prawdopodobna — czysta szansa 1 na 20, przy każdym rzucie. Nie „mniej więcej równa". Nie „równa średnio, z drobnym ukłonem w stronę kasyna". Dokładnie równa. Uczciwa d6 daje każdej ściance szansę 1 na 6; uczciwa d100 — 1 na 100. To cała definicja.
Zwróć uwagę, czego uczciwość nie obiecuje. Nie obiecuje, że zobaczysz wszystkie dwadzieścia liczb, jeśli rzucisz dwadzieścia razy. Nie obiecuje, że zła passa wkrótce się „wyrówna". Nie obiecuje, że wynik będzie sprawiał wrażenie równego. Uczciwość to zawsze wyłącznie stwierdzenie o prawdopodobieństwie każdego rzutu — i tu nie idziemy na kompromisy.
Silnik pod maską
Mini Kraken nie używa żadnej domowej sztuczki do rzucania kośćmi. Każdy rzut — na stronie, w kartach postaci, na wirtualnym stole i przez bota Fortuna na Discordzie — przechodzi przez ten sam wspólny silnik kości, zbudowany na dojrzałej bibliotece kości o otwartym kodzie źródłowym, która rzuca kośćmi dla graczy przy stole od lat.
Ma to znaczenie z dwóch powodów. Po pierwsze, fundament z otwartym kodem oznacza, że matematyka nie jest tajemniczą skrzynką; to kod, który każdy może przeczytać, przetestować i rozłożyć na części. Po drugie, oznacza to, że nie wymyślamy na nowo czegoś delikatnego. Losowość to jeden z tych obszarów, w których sprytne rozwiązania własnej roboty mają skłonność do wprowadzania subtelnego obciążenia, a sprawdzone w boju biblioteki istnieją właśnie po to, żeby nikt nie musiał tego robić.
Najważniejsze jest to, co silnik robi, gdy potrzebuje liczby.
Jak wybierana jest liczba — i dlaczego nie ma ukrytego obciążenia
Oto część, o której większość ludzi nigdy nie słyszy, a która naprawdę jest sednem pytania „czy to jest uczciwe?".
Naiwny sposób na sfałszowanie rzutu kością to wziąć losową wartość i przyciąć ją do rozmiaru za pomocą dzielenia z resztą — programistyczny odpowiednik „podziel i weź resztę". Jest szybki i prawie uczciwy. Ma jednak słynną wadę zwaną obciążeniem modulo: ponieważ zakres, od którego zaczynasz, rzadko dzieli się równo przez liczbę ścianek kości, kilka ścianek okazuje się odrobinę bardziej prawdopodobnych niż pozostałe. Na pojedynczej d20 to odchylenie jest maleńkie, ale prawdziwe, i to dokładnie ten rodzaj niewidzialnego palca na szali, który sprawia, że oskarżenia o „ustawki" się przyklejają.
Nasz silnik odrzuca tę drogę na skróty. Zamiast wciskać na siłę niepasującą liczbę, stosuje technikę często nazywaną próbkowaniem z odrzuceniem (rejection sampling). Mówiąc prosto: jeśli surowa losowa wartość wpadnie w ten maleńki resztkowy skrawek, który zaburzyłby prawdopodobieństwa, silnik ją odrzuca i po cichu losuje ponownie. Zachowuje tylko te wartości, które idealnie równo odwzorowują się na ścianki kości. Efektem jest rozkład całkowicie pozbawiony obciążenia — każda ścianka trafia na swoje dokładne, uczciwe prawdopodobieństwo. Nigdy nie zauważysz okazjonalnego ponownego losowania; dzieje się to w ułamku milisekundy. Ale dzięki niemu d20 w Mini Kraken jest tak równa, jak tylko pozwala matematyka.
To techniczny kręgosłup całej odpowiedzi. „Uczciwa" nie jest tu słowem marketingowym; to właściwość tego, jak wybierana jest liczba.
Kości 3D to uczciwy teatr
Mini Kraken jest znany ze swoich prawdziwych, fizycznych kości 3D, które koziołkują po ekranie i się zatrzymują — i tu właśnie rozsądna osoba może nabrać podejrzeń. Skoro symulacja fizyki decyduje, gdzie kość wyląduje, czy animacji nie dałoby się tak podkręcić, żeby lądowała na niskich liczbach?
Nie — a powodem jest kolejność zdarzeń. Silnik najpierw wybiera liczbę. Dopiero potem animacji zostaje przekazane, żeby na niej wylądowała. Koziołkująca kość, którą obserwujesz, to wierne odtworzenie wyniku, który został już uczciwie wylosowany chwilę wcześniej przez ten sam nieobciążony silnik opisany powyżej. Fizyka jest tu dla wrażeń — satysfakcjonującego turkotu i toczenia, które płaski wynik tekstowy spłaszcza — a nie po to, żeby decydować o rezultacie. To widowisko nadbudowane na uczciwej matematyce i dosłownie nie może ruszyć liczby, bo liczba istnieje już, zanim kość zacznie się poruszać.
Jeden silnik, wszędzie — żeby rzut znaczył to samo
Subtelnym źródłem zaufania jest spójność. Na niektórych platformach rzut w jednym miejscu zachowuje się inaczej niż rzut w innym. W Mini Kraken d20 to d20, niezależnie od tego, czy stukniesz w nią na karcie postaci, rzucisz nią na wirtualnym stole, czy wpiszesz ją na kanale Discorda, gdzie nasłuchuje Fortuna.
Dzieje się tak, ponieważ wszystkie te powierzchnie odwołują się do tego samego silnika. Nie ma „przyjaznego" losowania dla strony i innego dla Discorda. Rzut niesie dokładnie to samo znaczenie w całym ekosystemie, co jest zarazem wygodą i gwarancją: nie istnieje żaden specjalny tryb, w którym prawdopodobieństwa po cichu się zmieniają.
Rzut naprawdę można zweryfikować
Oto funkcja, która zamienia „zaufaj nam" w „sprawdź sam".
Silnik obsługuje deterministyczne odtwarzanie. Mówiąc prosto, rzut można powiązać z małą wartością początkową zwaną ziarnem (seed), a to samo ziarno zawsze odtwarza dokładnie tę samą sekwencję wyników. Podaj silnikowi dwa razy to samo ziarno, a za każdym razem otrzymasz identyczne kości. To przeciwieństwo ustawionego systemu: ustawione losowanie musi ukrywać, jak działa, podczas gdy nasze może wręczyć ci przepis i udowodnić, że te same dane wejściowe zawsze dają ten sam, odtwarzalny wynik. Losowość, którą można odtworzyć, to losowość, którą można skontrolować.
Czego nigdy nie robimy
Bycie uczciwym to w równym stopniu kwestia powściągliwości, co techniki. Więc wprost — oto, czego kości Mini Kraken nie robią:
- Żadnej „karmy kości". Nigdy nie śledzimy tego, że masz pecha, żeby po cichu dać ci dobry rzut w ramach rekompensaty — ani na odwrót. Każdy rzut jest niezależny, dokładnie tak jak prawdziwe kości.
- Żadnego ukrytego naciągania. Nie ma niewidzialnego „wygładzania", które przycina twoje skrajności, żeby wyniki sprawiały milsze wrażenie. Niektóre narzędzia po cichu to robią. My nie; passa to passa.
- Żadnych ukrytych modyfikatorów. Jedyne stosowane bonusy to te, które widzisz w rzucie — modyfikatory z twojej karty, przewaga i tak dalej. Nic nie jest dodawane ani odejmowane po ciemku.
- Żadnego celowania. Silnik nie wie i nie obchodzi go, kim jesteś. Nie jest milszy dla Mistrza Gry ani okrutniejszy dla nowego gracza. Nie ma pojęcia, czym w ogóle jest „gracz".
Kości są obojętne. I ta obojętność jest sednem.
„Ale moje rzuty i tak są dziwne"
Naprawdę mogą tak wyglądać — i to odczucie jest prawdziwe, nawet gdy kości są idealne. Prawdziwa losowość jest nierówna: tworzy passy, skupiska i okrutne wyczucie czasu znacznie częściej, niż spodziewa się nasza intuicja, a nasza pamięć czepia się katastrof, po cichu odrzucając niezapadające w pamięć przeciętne rzuty. Uczciwa d20 z pewnością czasem wręczy ci trzy jedynki z rzędu; to nie dowód obciążenia, to dowód na to, że losowość wykonuje swoją robotę.
Ta przepaść między „uczciwe" a „sprawia wrażenie uczciwego" jest na tyle duża, że zasługuje na osobny artykuł — o psychologii stojącej za passami pecha przeczytasz w Dlaczego uczciwe kości wydają się ustawione. A jeśli chcesz empirycznie zaspokoić drzemiącego w tobie sceptyka, uczciwym testem jest ilość: rzuć d20 kilkaset razy i patrz, jak rozkład wypłaszcza się w stronę równego. Kilkanaście rzutów zawsze będzie wyglądać nierówno; tysiąc powie prawdę.
Rzucaj z pewnością
Więc czy Mini Kraken jest uczciwy? Tak — z założenia, nie z obietnicy. Każda ścianka jest równie prawdopodobna, matematyka stojąca za każdą liczbą jest nieobciążona co do miejsca po przecinku, animacja 3D jedynie odtwarza wynik już uczciwie wybrany, ten sam silnik działa wszędzie, a rzut można odtworzyć i sprawdzić, zamiast przyjmować go na wiarę.
Kości cię nie kochają i nie nienawidzą. One po prostu się toczą. A w Mini Kraken toczą się uczciwie — więc możesz przestać zastanawiać się nad mechanizmem i wrócić do opowieści, tam gdzie naprawdę dzieją się dobre rzeczy.