Game freeze

From Glitch City Wiki
Jump to navigation Jump to search
A bar freeze in Pokémon Red/Blue, caused by stepping into the 'grass' right of Pallet Town.

A game freeze refers to the instance of where a game's controls lock up disallowing the player to play the game normally. Through different glitches, different varieties of game freezes have been found. Sometimes music may be frozen on the current note but sometimes the music will stop completely. On rare occasions, the music will still be playing.

Types of game freezes

Softlock (Lock-up)

A softlock, or lock-up, simply refers to when the player is stuck in a loop, either with the controls not responding or, for example, being infinitely forced to do an action. Music may still be playing.

Examples:

Bar freeze

A bar freeze, also known as a rst $38 freeze, is a common kind of game freeze in Game Boy games (with Pokémon games, best known in Generation I but also happening in Generation II). It fills the screen up with mostly full vertical bars, some interrupted with seemingly random letters and numbers.

Example: In Generation I, a bar freeze is often encountered when using a walk through walls glitch to step out of the bounds of the map, e.g. when stepping into the first column of "grass" tiles east of Pallet Town.

Technical details

A bar freeze happens when the game tries executes a 0xFF byte, which is interpreted as a rst $38 instruction (a shorter and faster equivalent of call $0038), but the content of the ROM address $0038 is also a 0xFF byte (which is the case for all Generation I and II games). This will cause the game to repeatedly call $0038, i.e. jump to $0038 and push $0039 onto the stack as the return address. This results in a stack overflow quickly, and the pattern "00 39" ends up being written to other accessible regions of the memory, causing memory corruption.[1]

In most games, the stack begins at the top of the WRAM ($DFFF) and grows downwards (i.e. the address decreases), so the entire WRAM is corrupted first, followed by the SRAM (which may be locked, and is also subject to banking) and the VRAM (which is subject to VRAM inaccessibility). To complicate matters, the VBlank interrupt works normally in this process, which may copy some of the corrupted WRAM data to the VRAM, or otherwise use the corrupted WRAM data (e.g. try to play sound from a glitch sound bank). Sometimes, the screen will show a bar freeze pattern for a split second before turning blank[2].

In Pokémon Red, Green, Blue, and Yellow (Japanese), the rst $38 instead points to a jp F080 (Echo RAM for D080), and arbitrary code execution has been verified. This was changed to point to another rst $38 like in the English versions from Rev 1 of Japanese Pokémon Yellow and up. In every other known Japanese revision of Red/Green/Blue it is jp F080.

Black screen freeze

When the game freezes this way, it will switch to a black screen. Music often freezes on the note it was playing when this freeze happens.

Example: Can appear when the player uses returns to the overworld after using the Explorer Kit in an invalid area through accessing a 'void' in Generation IV. This phenomenon is also referred to as a 'BSoD' (Black Screen of Death) in the Hall of Origin community.

White screen freeze

When the game freezes this way, it will switch to a white screen. Music often stops completely when this freeze happens.

Example: When the player uses the dokokashira door glitch in Pokémon Red/Green to enter a location which does not exist.

References

  1. Re: PokéWTrainer freeze by TheZZAZZGlitch, the Glitch City Laboratories forum
  2. For an example, see the video Pokémon R/B/Y: What's "out of bounds"? (at 8:42) by TheZZAZZGlitch.