Dzisiaj omówimy sobie zagadnienie wyjścia z tzw. softlocka z Lorelei w Pokemonach. Ale to zagadnienie będzie chwilę omawiane, jak ktoś nie chce czytać, bo woli obejrzeć - to na dole zamieszczam film, w którego czerpałem inspiracje.
Pojęcia
Pokemon (Red / Blue / Yellow) to gra stworzona na platformę GameBoy, w której wcielamy się w 10-latka imieniem Red i naszym celem jest przejść grę i zdobyć wszystkie Pokemony. Jest to o tyle ważne, że wiele osób uznaje, że bohaterem jest Ash - niestety Ash to pierdoła i głąb, a Red to super koleś. W ogóle Ash powstał po wydaniu gry :P
W grze łapiemy Pokemony, walczymy z liderami, by na końcu pokonać Elitarną Czwórkę, wśród której jest Lorelei.
Dobra, coś wiemy - Ale co to jest softlock? Jest to sytuacja, w której z <jakiegoś powodu> gry nie da się przejść. Nie jest to spowodowane błędem tylko np. potężnym niedorozwojem grającego, który wykonał takie kroki, że ostatecznie gry nie da się ukończyć :P
Plan w użyciu
- Potrzebujemy Pokemona, który jest typu fighting (wojownik) / poison (trujący) umiejący ruch Rage.
- Wykorzystaj wszystkie PP innych ataków (punkty umożliwiające atakowanie danym atakiem) prócz Rage (by można było tylko tego używać)
- Wyrzuć wszystkie przedmioty
- Wejdź do pokoju Lorelei i zapisz grę
Zrobiłem to i dlaczego jestem w pułapce? Mamy dwie możliwości wyjścia z tego pokoju:
- Pokonanie jej
- Przegranie z nią
Każda z tych rzeczy wymaga walki, która przypieczętuje los.
Zamieniam się w słuch
Podczas walki Lorelei wypuści swojego pokemona Dewgonga:
Dewgong ma atak "Rest" - umożliwia on zaśnięcie i zregenerowanie swoich punktów życia.
My mamy "Rage" - atak, w którym Pokemon zawsze atakuje "tym samym" atakiem aż do śmierci.
Sztuczna Inteligencja w grze nakazuje Pokemonowi atakować "super efektywnym" atakiem - w tym wypadku Rest. My atakujemy Rage, który prawie nie zadaje obrażeń, a Dewgong będzie się w kółko leczyć - jesteśmy w nieskończonej pętli. Ale czy na pewno?
Czy Rest się kiedyś skończy?
Każdy atak ma PP czyli punkty, które umożliwiają używanie danego ataku ileś razy (by w kółko nie używać najlepszego ataku) - Domyślnie Rage ma 20 punktów, czyli 20 razy możemy go użyć (jednakże raz aktywowany działa do końca walk), a Rest 10. Wydaje się, że jak Dewgong użyje 10 razy "Rest" będzie musiał coś innego wybrać.
Jednakże dla AI twórcy nie zaimplementowani tego systemu, więc może go używać zawsze! ;-)
Dodam jeszcze, że jest coś takiego jak celność ataku - w przypadku Rage wynosi ona 100%, więc zawsze musi się udać, prawda? No prawie ...
To co robić?
Błądzić jest rzeczą ludzką - inaczej by się dzieci na tym świecie nie rodziły, prawda?
I twórcy Pokemonów popełnili jeden błąd. Cały system czy trafisz czy nie zależy od losowości
Działanie jakie jest stosowane wygląda tak
- Jeśli x < 255 to zaatakuj
Gdzie x jest "od 0 do 255".
Jednak powinno być
- Jeśli x jest mniejsze lub równe 255 to zaatakuj
Daje nam to taki "problem", że jeśli X (losowa wartość podana przez komputer) jest równa wartości 255 to warunek nie jest spełniony i atak chybia.
Powoduje nam to, że raz na 256 ataków mamy szanse chybić Ragem.
Oznacza to, że "100%" to tak naprawdę 99.6109% :P
Niezrozumiała matematyka
Jeśli zużyjemy wszystkie ataki (0 PP będziemy mieć na każdym ataku) nasz Pokemon będzie atakował "Struggle" - jest to atak "awaryjny", który atakuje przeciwnika i nas - aż ktoś umrze :P
Jako, że mamy:
1/256 szans na 1 chybienie
Na 20 chybień mamy (1/256)^20
Ogólnie liczba jest w chooooooooolerę mała, ale realna (w jakimś nieskończonym okresie czasu). W każdym razie, żeby pod rząd zużyć 20 PP mamy szanse:
1/1461501637330902918203684832716283019655932542976
Równie dobrze (według wyliczeń z filmu na YT) mamy szansę na spotkanie 12 Shiny Pokemon (lśniące Pokemony) pod rząd. Mi się poza jednym Pokemonem w Crystal wymuszonym przez fabułę - nie udało się spotkać ani jednego ;)
Potencjalnie ...
Potencjalnie da się wyjść z pułapki Lorelei ... Liczę, że kiedyś powstanie filmik na Youtube w przyspieszonym tempie pokazujący tę heroiczną walkę :D
Filmik dla opornych
PS. Raticate nie żyje.
PS2. Pokemonów jest 151 - Mew został dodany przez programistę po cichu :D