Speedruny to fascynująca rzecz. Zjawisko to polega na jak najszybszym ukończeniu gry, pomijając przy tym takie rzeczy jak znajdźki czy misje poboczne. To, co jest w nich jednak najbardziej imponujące, to glitche.

Jeden z takich glitchy został wykorzystany w światowym rekordzie Grand Theft Auto: Vice City. Nim przejdziemy do wyjaśnień, obejrzyjmy speedrunera w akcji.

Dla osoby, która nie ma styczności ze sceną, to co dzieje się na ekranie jest totalną zagadką. Mimo, że sam nie jestem w tej dziedzinie ekspertem, postaram się wam przybliżyć to co się tam dzieje (chociaż poniżej zamieszczam też profesjonalne wytłumaczenie kogoś, kto miał okazję ten glitch wykonać).

Na czym to polega?

Cały trick polega na ciągłą manipulacją wewnętrznego zegara gry oraz flagi ON_MISSION (czyli tej sprawdzającej, czy gracz wykonuje akurat teraz jakąś misję). Rozrzucone na mapie Rozwałki służą więc za swoistą furtkę. Połączenie ich z funkcją Powtórki umożliwia ich przeskakiwanie (jako, że w powtórce godzina w grze jest inna, gra myśli że czas przeznaczony na rozwałkę minął). Powtórzenie tego zabiegu parokrotnie pozwala na zdobycie wystarczającej liczby pieniędzy na kupno pierwszej posiadłości.

To, co trzeba zrobić dalej, to już czysta abstrakcja. Gracz w trakcie gry może rabować każdy sklep – i to właśnie ta funkcja zostaje wykorzystana do dalszej manipulacji. Przed wymierzeniem w sklepowego kasjera gracz musi jednak zdobyć radiowóz policyjny, bo będzie on potrzebny później.

W każdym razie, uruchomienie ostatniej misji możliwe jest dzięki połączeniu dwóch zmiennych – tj. tej znajdującej się w zasięgu spawnu sklepikarza oraz tej odpowiadającej za misje pościgowe w radiowozie. Odpowiednie zmieszczenie się w przedziałach czasowych może prowadzić do:

  1. Crasha gry
  2. Uruchomienia ostatniej cutscenki (czyli automatycznego skończenia gry)
  3. Odblokowania ostatniej misji
  4. No cóż. Niczego.

Poniżej profesjonalne wyjaśnienie:

What we’re basically doing is forcing the game into a state where it returns a value that we manipulate (not necessarily write, though) to be ran as a return command on an empty stack.

Sixty threads need to be active within the game. To do this, we start the ten different instances of the first mission. This is prone to crashing, unfortunately. The way this is accomplished is by using „rampages” as a tool to manipulate the game’s ON_MISSION flag.

So, save the game, then wait around six minutes. Then make a replay over a rampage icon. Load the game, and now activate your Rampage and trigger the first mission at the same time. Then, activate the replay again. It’ll cancel the Rampage, because the game sees that within the replay, the internal clock has passed the time in which the rampage ends, as these are timed missions. When the Rampage ends, ON_MISSION is set to false, and a new mission can be started.

Repeat this process ten times – cancel the Rampage, and then trigger the Rampage and mission simultaneously. Then pass all ten instances of the mission. Acquire enough money to buy the cheapest property available ($3,000), and make a replay over the property’s purchase icon. Then, find a cop car, and drive to the hardware store.

Stand at the edge of the spawn and despawn zone of the hardware store clerk. Spawn him, and kill him – I do it by sniping. Then, step out of his spawn radius.

Now is the tricky part. It’s necessary to wait about 53500 milliseconds. There’s a 200ms window between 53500 and 53700 where multiple variables can be used to start the last mission of the game. There’s a 20% chance of hitting one of these correct variables if you step inside the spawn radius within the 200ms window.

When that’s done, get in the cop car again. Hold down the submission key to start VIGILANTE, and start hitting your replay and Action button to buy the property. When the property is bought and the cutscene is playing, let go of the submission key, and hit it again to cancel VIGILANTE. When VIGILANTE is canceled, we’ve forced the game into such a glitched state that it executes the hardware clerk’s despawned time as a return command on an empty stack.