Hackeando o Tetris: Como Jogadores Desbloqueiam Novos Comportamentos

Hackeando o Tetris: Como Jogadores Desbloqueiam Novos Comportamentos

Hackeando o Tetris: Como jogadores estão desbloqueando novos comportamentos no clássico jogo

Recentemente, jogadores de Tetris descobriram uma maneira de manipular o famoso “kill screen” do jogo, ativado após o nível 155, para introduzir novos comportamentos em versões originais do Tetris rodando em hardware e cartuchos não modificados. Essa técnica, conhecida como “arbitrary code execution”, já foi vista em outros jogos clássicos, como Super Mario World, Paper Mario e The Legend of Zelda: Ocarina of Time.

Entendendo o “kill screen” do Tetris

O “kill screen” do Tetris ocorre quando o manipulador de pontuação do jogo leva muito tempo para calcular a nova pontuação entre os quadros, o que pode acontecer após o nível 155. Nesse momento, uma parte do código de controle é interrompida pela rotina de gravação do novo quadro, fazendo com que ele salte para uma parte não intencional da memória RAM do jogo em busca da próxima instrução.

Manipulando o salto do código

Normalmente, esse salto inesperado faz com que o código pule para o início da memória RAM, onde dados aleatórios são lidos como código, levando a um rápido travamento. No entanto, os jogadores descobriram uma maneira de manipular esse salto, aproveitando-se de uma peculiaridade no modo como o Tetris lida com possíveis entradas de controle na versão japonesa do console, o Famicom.

Explorando a entrada de controle extra

Diferentemente do Nintendo Entertainment System (NES) americano, o Famicom japonês tinha dois controles conectados diretamente à unidade. Jogadores que desejavam usar controles de terceiros podiam conectá-los através de uma porta de expansão na frente do sistema. O código do jogo Tetris lê as entradas desse “controle extra”, que pode incluir dois controles NES padrão adicionais por meio de um adaptador.

Manipulando a tabela de pontuações

Acontece que a área da memória RAM utilizada pelo Tetris para processar essa entrada de controle extra é a mesma usada para o local do salto de código que ocorre durante o “kill screen”. Assim, quando esse salto de código é acionado por um travamento, essa área da RAM conterá os dados representando os botões pressionados nesses controles adicionais, dando aos jogadores uma maneira de controlar precisamente para onde o código do jogo irá saltar.

Codificando novos comportamentos

Ao colocar um código específico na tabela de pontuações do jogo, os jogadores podem forçar o Tetris a saltar para outra área da tabela de pontuações, onde ele começará a ler os nomes e pontuações sequencialmente como “bare metal code”, com as letras e números representando os códigos de operação (opcodes) para o processador do NES.

Limitações e possibilidades

Embora haja restrições quanto aos símbolos e dígitos que podem ser usados na tabela de pontuações, os jogadores conseguiram criar um código de prova de conceito simples que reduz o tempo de processamento da pontuação, evitando o travamento. Além disso, existem maneiras de contornar essa limitação, como a construção de “bootstrappers” que concedem controle total sobre a memória RAM do jogo.

Essa técnica abre a possibilidade de jogadores recodificarem o Tetris para corrigir os bugs de travamento, especialmente após o nível 255, onde o jogo volta ao nível 0. Ou ainda, transformá-lo em algo completamente diferente, como um Flappy Bird.

Referências

Artigo original: Hack Tetris from the Inside with a High Score

Compartilhe esta postagem