Hoje pela manhã, meu amigo Leonardo, entusiasta dessas coisas de inteligência artificial, me mandou um vídeo de um rapaz falando sobre engenharia reversa de programas: https://vt.tiktok.com/ZSbssYQXR. A ideia era basicamente entender como determinados softwares funcionavam por dentro e, a partir daí, reconstruir seu funcionamento.

Confesso que, enquanto assistia ao vídeo, pensei: ora, por que não?

Quer dizer, estamos vivendo numa época em que a inteligência artificial consegue escrever código, explicar algoritmos, ajudar a encontrar erros e até reconstruir partes de sistemas que já existem há décadas. Se antes você precisava passar horas tentando entender o que um programa fazia, agora tem uma espécie de assistente que, pelo menos em tese, pode ajudar a encurtar bastante esse caminho.

E eu digo em tese porque, como todo mundo que já pediu para uma IA fazer alguma coisa um pouquinho mais complexa sabe, existe uma diferença considerável entre ela dizer que terminou o trabalho e o trabalho realmente estar terminado. Mas isso é assunto para outra hora.

O fato é que o vídeo do Leonardo me deu uma ideia: e se eu tentasse fazer a mesma coisa com alguns jogos do Atari?

Voltando aos tempos do Atari

Para quem cresceu jogando videogame nos anos 1980, o Atari 2600 dispensa apresentações. Estamos falando de uma época em que os jogos cabiam em pouquíssima memória, os gráficos eram extremamente simples e os desenvolvedores precisavam fazer verdadeiros malabarismos para transformar aquelas limitações técnicas em alguma coisa divertida.

E funcionava! Pelo menos na maioria das vezes.

É curioso pensar que, décadas depois, ainda estamos aqui falando desses jogos. Alguns envelheceram melhor do que outros, evidentemente, mas existe algo fascinante em tentar entender como aquelas pequenas máquinas conseguiam fazer tanta coisa com tão pouco.

Foi justamente aí que resolvi colocar a IA para trabalhar.

Peguei alguns jogos clássicos do Atari e comecei a experimentar uma espécie de engenharia reversa assistida por inteligência artificial. A ideia não era simplesmente colocar uma imagem do jogo antigo numa página e fingir que tínhamos feito alguma coisa. Eu queria reconstruir a lógica, entender o comportamento dos inimigos, reproduzir a movimentação, implementar as regras e, principalmente, chegar a algo que fosse realmente jogável.

Em outras palavras, queria sair daquela fase em que você apresenta um protótipo, diz que está quase pronto e torce para ninguém apertar o botão errado.

Do cartucho para o navegador

O resultado foi a criação de versões em HTML5 e JavaScript de alguns desses jogos.

Para quem não é da área, HTML5 e JavaScript são tecnologias que permitem criar experiências interativas diretamente no navegador. Isso significa que, em vez de precisar instalar um emulador específico, configurar um monte de coisas ou procurar aquele cartucho que provavelmente está guardado numa caixa na casa dos seus pais, basta abrir uma página e jogar.

Ou, pelo menos, essa é a ideia.

O processo envolve muito mais do que pedir para a inteligência artificial copiar um jogo. É preciso analisar o comportamento original, definir como os objetos se movimentam, implementar colisões, pontuação, inimigos, condições de vitória e derrota e, claro, testar tudo isso. Porque não adianta o jogo parecer bonito se o personagem atravessa uma parede, os inimigos ficam presos num canto ou a pontuação resolve entrar numa realidade alternativa.

E a IA ajuda bastante nesse processo. Ela pode propor implementações, explicar trechos de código, encontrar problemas e ajudar a acelerar tarefas que, de outra forma, exigiriam muito mais trabalho manual.

Mas não é mágica. É preciso orientar, corrigir, testar e insistir. Às vezes, insistir bastante.

O mais interessante é que esse exercício também acaba sendo uma forma de aprender. Quando você tenta reconstruir um jogo antigo, começa a prestar atenção em detalhes que talvez nunca tivesse percebido enquanto jogava. Por que determinado inimigo aparece naquele momento? Como o jogo aumenta a dificuldade? O que acontece quando você ultrapassa certo limite da tela? Qual é a lógica por trás de uma mecânica que parecia tão simples?

De repente, aquele joguinho que você conhecia desde criança vira um pequeno laboratório de programação.

E por que não compartilhar?

Depois de reconstruir os jogos, resolvi publicar as versões na internet de forma aberta, para que qualquer pessoa possa acessá-las e jogar.

Afinal, de que adianta passar horas reconstruindo um jogo se o resultado vai ficar escondido numa pasta do meu computador, junto com outros projetos que comecei numa empolgação de domingo e nunca mais abri?

A proposta é justamente facilitar o acesso. Você abre o navegador, entra na página e começa a jogar. Sem precisar instalar nada, sem configurações complicadas e sem a obrigação de entender uma linha sequer de JavaScript.

Quem quiser apenas matar a saudade pode jogar. Quem tiver curiosidade sobre programação pode olhar o código, entender como as coisas foram implementadas e experimentar suas próprias modificações. E quem também gosta de inteligência artificial pode usar o projeto como ponto de partida para descobrir o que essas ferramentas conseguem fazer quando colocadas diante de um problema concreto.

É uma maneira interessante de aproximar duas coisas que, à primeira vista, parecem pertencer a mundos diferentes: os videogames de uma época em que a tecnologia era extremamente limitada e as ferramentas de inteligência artificial que temos hoje.

Existe também uma satisfação particular em ver algo funcionando depois de horas de tentativa e erro. Principalmente quando esse algo é um jogo que você pode abrir no navegador e compartilhar com outras pessoas.

Alguns exemplos: 

Crédito: Reprodução/Jonatas Afonso

A IA não faz tudo sozinha. Ainda bem?

Uma coisa que ficou clara durante esse processo é que a inteligência artificial não elimina a necessidade de saber o que você está fazendo. Na verdade, quanto mais você conhece o assunto, mais consegue aproveitar o que ela oferece.

Se você não sabe o que espera do resultado, pode acabar aceitando qualquer coisa que pareça funcionar. E, como já descobri algumas vezes, existe uma diferença enorme entre um programa que roda e um programa que realmente faz aquilo que deveria fazer.

A IA pode produzir código rapidamente, mas alguém precisa decidir se aquele código faz sentido, se o comportamento está correto e se o resultado corresponde ao objetivo original.

No caso dos jogos antigos, isso é ainda mais interessante. Não basta produzir algo que lembre visualmente o original. A graça está justamente em recuperar aquela experiência, respeitando tanto quanto possível as mecânicas que tornaram o jogo reconhecível.

É um trabalho de reconstrução, experimentação e aprendizado. E, convenhamos, se no final ainda dá para jogar, melhor ainda.

O passado também pode ser um ótimo projeto para o futuro

O vídeo que o Leonardo me mandou nesta manhã acabou servindo como ponto de partida para um projeto que mistura nostalgia, programação e inteligência artificial.

Comecei querendo experimentar engenharia reversa em alguns jogos do Atari e terminei publicando versões jogáveis em HTML5 e JavaScript, disponíveis gratuitamente na internet.

Não estou dizendo que reinventei a roda, muito menos que substituí os jogos originais. A proposta é outra: explorar o que conseguimos reconstruir com as ferramentas de hoje, aprender durante o processo e compartilhar o resultado com quem também gosta dessas coisas.

E talvez essa seja uma das partes mais legais de trabalhar com tecnologia atualmente. Você pode pegar uma curiosidade que surgiu durante o café da manhã, transformar a ideia num projeto concreto e, algumas horas ou dias depois, ter alguma coisa funcionando que outras pessoas também podem experimentar.

Agora, se me dão licença, preciso voltar aos testes. Ainda há coisas para ajustar, detalhes para melhorar e, evidentemente, alguns jogos para jogar em nome da ciência.

Porque desenvolver software é uma atividade séria. Mas, quando envolve Atari, pelo menos uma parte do expediente pode ser dedicada à diversão.

Jônatas Afonso, deus grego, explorador audacioso, artilheiro da copa do mundo, encanador bigodudo, piloto de karts e aviões, atirador de elite, chefe da Horda, membro da SWAT, assassino silencioso, um pequeno pixel na tela... E um ciclista quando falta luz ou preciso sair do meu mundinho.