Pular para o conteúdo principalPular para o conteúdo
Análise a fundo

IA joga Pokémon Gold: o Bobcat, de um jogo novo às 16 insígnias

O Bobcat nunca escreve uma palavra: ele lê um estado e devolve uma probabilidade para cada opção. Colocamos a edição coreana de Pokémon Gold atrás de um harness que só informa fatos e lista as ações que o jogo permite, demos ao Bobcat um detonado e deixamos que ele fizesse todas as escolhas desde um jogo novo. Vinte jogos novos num mesmo commit, sem mudar nada enquanto rodavam: 17 ganharam as 16 insígnias, com uma mediana de 19,3 horas de jogo cada. Um segundo lote, em outro commit, terminou igual, 17 de 20. Respostas aleatórias no mesmo harness não ganharam nenhuma insígnia. Mais uma partida foi gravada inteira; as seis que empacaram estão listadas com o motivo.

Foxl AIAtualizado em 13 min de leitura

O Red no Mt. Silver, a última batalha do jogo, acelerada, de uma das partidas gravadas. À esquerda, o jogo; ao lado, o estado que o Bobcat recebeu, as opções que ele avaliou mais alto, com os botões de cada uma e as probabilidades, e o registro das suas escolhas. GIF
Nesta página
Revisado em 14 de outubro de 2026 com base na implementação publicada e nos testes mantidos.

Atualização (14/10/2026): o nosso modelo mais recente, o Bobcat 1.3, está empatado em terceiro lugar no Jev Decision Index, com 62,8 contra 60,1 do Jev (veja abaixo). As partidas deste artigo foram jogadas por uma versão anterior, o Bobcat 1.1, com o Bobcat Flash 1.1 nas batalhas.

O Bobcat é um modelo que nunca escreve uma palavra. Dado um estado e uma lista de opções, ele devolve uma probabilidade para cada opção, e isso é tudo o que ele sabe fazer. Colocamos a edição coreana de Pokémon Gold atrás de um harness que só informa fatos e lista as ações que o jogo permite naquele momento, demos ao Bobcat um detonado para ler e deixamos que ele fizesse todas as escolhas desde um jogo novo: aonde ir, o que fazer lá, cada golpe de cada batalha, o que comprar, quem capturar e quando um passo do detonado está concluído.

Depois, começamos 20 jogos novos ao mesmo tempo, todos no mesmo commit, e não mudamos nada enquanto eles rodavam. 17 das 20 partidas ganharam as 16 insígnias, as oito de Johto e as oito de Kanto, derrotando a Elite dos Quatro e o Campeão pelo caminho. Uma partida concluída levou uma mediana de 19,3 horas no relógio do próprio jogo e cerca de 5.100 decisões. Fizemos isso duas vezes, em dois commits com poucas horas de diferença, e os dois lotes terminaram com 17 de 20. O mesmo harness respondendo ao acaso não ganhou nenhuma insígnia.

A nossa própria meta era nove partidas em dez, e ainda não chegamos lá: as seis partidas que empacaram estão listadas abaixo, com o motivo de cada uma. Depois dos lotes, começamos mais três partidas no commit do segundo lote e as gravamos quadro a quadro; todas as três ganharam as dezesseis insígnias, derrotaram o Red no Mt. Silver e capturaram o Ho-Oh. Os vídeos aqui são da que terminou primeiro: 4.887 decisões e 19,9 horas de jogo.

Dois painéis, um para cada lote de vinte jogos novos, cada partida uma linha em degraus de insígnias contra horas de jogo. Em cada painel, a maioria das linhas chega a dezesseis insígnias; as partidas que empacaram param antes, cada uma marcada com um X. As partidas gravadas depois, no commit do segundo lote, estão desenhadas em cor de argila sobre o segundo painel, e a dos vídeos em traço grosso.
A partida gravada em 60 segundos, do quarto até a última insígnia (no YouTube). Em cada quadro, o jogo fica à esquerda; os painéis são o que o Bobcat recebeu para aquela decisão, e à direita estão as opções que ele avaliou mais alto, com os botões que executam cada uma e a probabilidade dela, e depois o registro das suas escolhas. Para compartilhar como arquivo: o vídeo e a capa dele.

Os melhores momentos da partida gravada

8 momentos da partida gravada, cada um com o painel do jeito que o Bobcat o via, acelerado (um quadro gravado é um segundo de jogo): à esquerda o jogo, ao lado o estado que o Bobcat recebeu, depois as opções que ele avaliou mais alto, com os botões e as probabilidades, e o registro das suas escolhas. Primeiro todos os 25, incluindo todos os líderes de ginásio, em quatro minutos; depois 8 deles, um por um.

Os melhores momentos: todos os líderes de ginásio, a Elite dos Quatro, o Snorlax acordando, o Red e o Ho-Oh (no YouTube).
Insígnia 1: Falkner, o primeiro ginásio. Aos 0 h 37 min de tempo de jogo, a 19 vezes a velocidade do jogo.
Insígnia 3: Whitney e a sua Miltank. Aos 2 h 07 min de tempo de jogo, a 120 vezes a velocidade do jogo.
Insígnia 8: Clair, a última de Johto. Aos 8 h 36 min de tempo de jogo, a 60 vezes a velocidade do jogo.
O Campeão, Lance. Aos 13 h 07 min de tempo de jogo, a 22 vezes a velocidade do jogo.
O rádio do Pokégear acorda o Snorlax. Aos 15 h 16 min de tempo de jogo, a 8 vezes a velocidade do jogo.
Insígnia 16: Blue em Viridian. Aos 16 h 02 min de tempo de jogo, a 30 vezes a velocidade do jogo.
Red no Mt. Silver. Aos 17 h 39 min de tempo de jogo, a 30 vezes a velocidade do jogo.
Ho-Oh e a Master Ball. Aos 19 h 55 min de tempo de jogo, a 6 vezes a velocidade do jogo.
A partida inteira, cada quadro que ela gravou, com um capítulo para cada insígnia (no YouTube).

Com que frequência ele termina?

Um lote são vinte partidas iniciadas juntas a partir do mesmo jogo novo, no quarto, logo depois da abertura, num único commit do harness e do detonado. Nada é editado enquanto elas rodam, e nenhuma partida continua a partir de um save: uma partida que empaca é uma partida que não terminou. Cada uma para quando ganha a décima sexta insígnia. Uma partida que ficou num mesmo passo do detonado por milhares de decisões sem avançar foi interrompida e contada como empacada.

LoteCommitTodas as 16 insígniasHoras de jogo até terminar (mais rápida, mediana, mais lenta)
A13803fe17 de 2017,1; 20,3; 26,0
B6c233f117 de 2017,0; 19,3; 24,2

No total, são 34 de 40, 85%. Quarenta partidas não definem uma taxa com precisão: o intervalo de 95% vai de 71% a 93%. As partidas que não terminaram:

  • Lote A, partida 7, com 15 insígnias: perdeu para o Blue, o último líder de ginásio, uma vez atrás da outra, e entre uma luta e outra saía andando por aí em vez de treinar. Interrompida depois de 4.977 decisões naquele passo, com 56,6 horas de jogo.
  • Lote A, partida 11, com 7 insígnias: continuou perdendo para a Clair com um único Pokémon forte e o resto do time muito atrás dele, e acabou se afastando do ginásio dela. Interrompida depois de 3.514 decisões naquele passo, com 22,1 horas de jogo.
  • Lote A, partida 15, com 7 insígnias: tinha deixado de lado as pedras do Ice Path como se fossem placas já lidas, embora seja preciso usar Strength de novo a cada visita (corrigido antes do lote B). Interrompida depois de 3.215 decisões naquele passo, com 19,9 horas de jogo.
  • Lote B, partida 2, com 8 insígnias: não conseguiu ensinar Waterfall ao seu Gyarados, que já sabia quatro golpes: duas perguntas do jogo ficaram sem ser lidas, e o ensino nunca aconteceu. Interrompida depois de 5.677 decisões naquele passo, com 27,6 horas de jogo.
  • Lote B, partida 14, com 7 insígnias: perdeu para a Clair do mesmo jeito que uma das partidas do lote A, com um time muito atrás do seu inicial. Interrompida depois de 6.450 decisões naquele passo, com 25,6 horas de jogo.
  • Lote B, partida 20, com 11 insígnias: pegou a Cycling Road para Fuchsia sem bicicleta, e o guarda do portão o mandava voltar todas as vezes. Interrompida depois de 4.681 decisões naquele passo, com 24,6 horas de jogo.

Três das seis perderam uma batalha que o Bobcat precisava vencer: um líder de ginásio forte contra um time montado em torno de um único Pokémon. As outras três foram lacunas do harness: pedras que ele deixava de lado, corrigidas entre os lotes; perguntas que ele não lia; uma estrada que ele não sabia que estava fechada. As duas últimas são as próximas correções; as batalhas cabe ao Bobcat vencer.

O que o harness faz, e o que ele não faz?

Um speedrunner chamaria o harness de verificador de status. Ele lê o jogo e diz o que é verdade: o diálogo na tela, lido dos pixels comparando com a própria fonte do cartucho; os menus e onde está o cursor; o lugar e o tile, o dinheiro e as insígnias; o time, com o nível, o HP e os golpes de cada Pokémon, com o PP restante; a mochila e os cartões do Pokégear; em batalha, os dois Pokémon e os nossos próprios tipos; e o que foi tentado e não funcionou (um golpe sem efeito, uma saída que não levava a lugar nenhum, uma batalha perdida, com os níveis do time). Ele lista o que o jogo permite agora: as saídas até onde o jogador pode andar, as pessoas e os objetos ao alcance, placas, água e árvores para um golpe de campo que o time conhece, grama, o rádio do Pokégear onde um Snorlax dormindo bloqueia a estrada e, em batalha, os golpes com PP restante, trocar de Pokémon, itens de cura, bolas e fugir. Cada opção mostra os botões que a executam (“→5 ↑3 A”), do jeito que um jogador os apertaria.

Ele não escolhe, e não revela o que o jogo não mostra. Os tipos do oponente nunca são informados, nem se um golpe é eficaz; o Bobcat precisa saber isso, ou deduzir pelo que o jogo diz depois de um golpe. Quando o Bobcat escolhe uma ação, o harness a executa mecanicamente: “ir ao 2º andar da Radio Tower” é um caminho mais curto até a escada e os botões para subi-la.

O que o Bobcat decide?

Na partida gravada:

  • Aonde ir e o que fazer, numa única solicitação com duas Choices, cada vez que a situação muda (2.245 decisões no mapa). O lugar que ele escolheu é mantido nas próximas decisões, e cada saída diz se leva até lá.
  • Cada turno de batalha: qual golpe usar, se troca de Pokémon, se cura, se joga uma bola ou se foge (2.234 decisões).
  • Cada pergunta e cada menu: sim ou não, o que comprar, qual golpe esquecer, quem aprende uma HM (323 decisões).
  • Se deve capturar um Pokémon selvagem quando o detonado diz para capturar um, e com qual bola (13 decisões).
  • Quem vai na frente, perguntado num Centro Pokémon quando um membro está muito à frente ou muito atrás do resto (30 vezes).
  • Se um passo do detonado está concluído, quando nenhum fato registrado pelo jogo resolve a questão (41 consultas).

Por que um detonado, e o que há nele?

Uma pessoa que joga um jogo longo pela primeira vez lê um detonado, então o Bobcat recebe um: um texto em coreano com um capítulo para cada número de insígnias, publicado exatamente como as partidas o usaram. Ele traz a ordem da história, os nomes dos lugares, o time a capturar (Mareep na Rota 32, um Pokémon de Água que possa aprender Surf, o Gyarados vermelho), quais tipos se dão bem contra cada líder e, para os poucos enigmas do jogo que têm uma única resposta (as pedras do Ice Path, os interruptores do subterrâneo, as plataformas de teletransporte de Saffron), essa resposta, conferida tile por tile com o disassembly do jogo. O Bobcat decide o que fazer com ele. O harness só vira a página com base em fatos: um item citado no passo está na mochila, um lugar onde o passo termina foi alcançado, um treinador citado foi derrotado, um evento que o jogo registra (a peça da Power Plant devolvida, a luta com o Snorlax, a conversa com o Blue em Cinnabar) está marcado.

Quais escolhas não foram do Bobcat?

O harness tem regras fixas, cada uma no código publicado com o seu limite e cada uma contada no registro da partida. No mapa, elas deixam de lado a ação preferida do Bobcat quando ele se repete: uma ação escolhida quatro vezes em cinquenta num mesmo mapa, uma saída que falhou duas vezes, alguém que já disse a mesma coisa três vezes; a ação executada passa a ser a mais provável que restou ao Bobcat ou, quando tudo foi deixado de lado, a que foi feita há mais tempo. Na partida gravada, 79% das 2.245 ações no mapa foram a primeira escolha do próprio Bobcat. As batalhas, as perguntas e as capturas são respostas do Bobcat. Algumas coisas são feitas sem perguntar: a introdução, recusar apelidos, confirmar uma compra ou um ensino que o Bobcat escolheu, e sair de um loop de menu que o harness não entende.

Quem escolheu cada ação no mapa da partida gravada: uma parte foi a primeira escolha do próprio Bobcat, e o resto foi definido por uma das regras de loop publicadas.

Como sabemos que não é o harness que está jogando?

Com todas as Choices sorteadas ao acaso no mesmo harness, no mesmo commit e a partir do mesmo jogo novo, ele não ganhou nenhuma insígnia em 9.517 decisões. O harness não é neutro: ele anda até o que foi escolhido e marca as saídas que levam aos lugares do detonado, e é por isso que respostas aleatórias chegam a algum lugar. A diferença entre isso e dezesseis insígnias é do Bobcat. O harness também registra, para cada decisão, o estado que o Bobcat recebeu, cada opção com a sua probabilidade e qual regra, se houver, deixou a escolha dele de lado, então a afirmação pode ser conferida linha por linha.

Como chegamos até aqui?

O harness foi escrito para este jogo com o Bobcat no circuito, e a maior parte do trabalho foi descobrir o que ele lia errado já bem avançado numa partida: um menu do PC deixado aberto, uma tela do time depois de um desmaio, um bolso da mochila lido pela metade enquanto era desenhado, um bolso de itens vazio confundido com o bolso de bolas, uma lista de loja que ignorava toques curtos nos botões, um navio que chegou enquanto o detonado ainda dizia para encontrar o capitão. Cada um só apareceu depois de centenas ou milhares de decisões. Quando uma partida empacava num deles, corrigíamos o harness e continuávamos aquela partida a partir do último save, e foi assim que as primeiras partidas chegaram às dezesseis insígnias, ao Red e ao Ho-Oh. Depois vieram os lotes, vinte jogos novos de cada vez: os pontos em que um lote empacava viravam as correções do commit seguinte, e as mudanças nas dicas do detonado eram testadas ligadas e desligadas a partir dos mesmos saves antes de ficarem. Os dois lotes acima são os dois últimos. Entre eles, corrigimos uma coisa que o lote A mostrou, as pedras do Ice Path, e renomeamos a escada entre Goldenrod e o seu subterrâneo, que algumas partidas tinham confundido com a sala dos interruptores.

Onde o Bobcat é fraco?

  • Batalhas contra um líder forte com um time desequilibrado, como acima. Na partida gravada, ele perdeu 30 batalhas e venceu 229 contra treinadores.
  • Ele depende demais do seu inicial (a partida gravada terminou com Typhlosion no nível 93, Togetic no nível 30, Mareep no nível 8, Slowpoke no nível 10, Gyarados no nível 34 e Ho-Oh no nível 40); quando perguntado sobre quem deve ir na frente, ele mantém a ordem na maioria das vezes.
  • As regras de loop são necessárias: 21,0% das ações no mapa da partida gravada foram definidas por uma delas.

Quanto custou?

A partida gravada usou 9.015.052 tokens de entrada ao longo de 4.887 decisões. Ela rodou por 0,9 horas numa única RTX PRO 6000 (96 GB) alugada, que dividiu com as outras partidas gravadas; a US$ 2,76 por hora, esse tempo custa US$ 2,37. Uma partida concluída dos lotes usou uma mediana de 9,4 milhões de tokens de entrada; vinte dividem uma única GPU. Tudo o que está por trás dos dois lotes, incluindo os lotes anteriores e o teste de cada correção, levou 39,8 horas de uma GPU a US$ 4,12 por hora, US$ 164,13. Para comparação, os tokens da partida gravada pelo preço de tabela publicado do Jev, US$ 0,042 por milhão de tokens de entrada, custariam US$ 0,38; isso é um ponto de referência, não uma medição de nenhum dos dois serviços nesta carga de trabalho.

O Bobcat depois destas partidas

As partidas acima foram jogadas pelo Bobcat 1.1, com o Bobcat Flash 1.1 nas batalhas. A nossa versão mais recente, o Bobcat 1.3 (11/10/2026), não jogou essas partidas. Em vez disso, ele foi medido no Jev Decision Index, um ranking público de modelos de decisão cuja pontuação Full dá peso de 80% aos testes privados dos mantenedores, e os próprios mantenedores rodaram esses testes. O Bobcat 1.3 fez 62,8 e está empatado em terceiro lugar com o Perplexity Decider v1.1 (62,8) e o Darwin-27B-ZTC (62,5): quinto por pontuação entre 166 participantes, e acima dos 60,1 do Jev nos mesmos casos. Como ele chegou lá está em a história do Bobcat.

O ranking Jev Decision Index 0.3.2, pontuação Full, filtrado para os modelos no nível do Jev ou acima. Doze barras de 66,3 até o Jev com 60,1, em grupos de posição: #1 empatados, vLLM-SR d3 (27B) 66,3 e linne-oak 1.0 (31B) 65,6; #2 empatados, Decider 31B (NVFP4) 64,6 e Sieve 31B 63,8; #3 empatados, Bobcat 1.3 (31B) 62,8, Perplexity Decider v1.1 (27B) 62,8 e Darwin-27B-ZTC 62,5; #4 empatados, MORJ 1.0.1 61,0, AnyJev L0 60,2, Fastino GLiDE no-thinking 60,2, Sieve 27B 60,2 e Jev 60,1.
O ranking do Decision Index em 14/10/2026, pontuação Full, com o filtro “Jev and above” do próprio ranking ativado. O Bobcat 1.3 é a quinta barra, no grupo #3; o Jev é a barra preta à direita. Todos os benchmarks estão na página do Bobcat 1.3.

Limitações

  • 85% de 40 jogos novos terminaram, abaixo da nossa própria meta de nove em dez, e quarenta partidas são uma amostra pequena.
  • As vinte partidas de um lote começam do mesmo jogo novo e só diferem pelas pequenas diferenças numéricas de um servidor de modelos ocupado. Não são vinte jogadores independentes: as partidas muitas vezes jogaram os primeiros capítulos de forma parecida, e os pontos em que empacaram vieram em tipos, não um a um.
  • Os dois commits foram ajustados neste jogo: cada correção e cada dica vieram de partidas anteriores dele. Não há um jogo reservado para teste, e outro jogo precisaria do seu próprio harness.
  • Nós escrevemos o detonado, e ele contém as respostas dos enigmas fixos do jogo e o time a capturar.
  • As partidas gravadas foram jogadas depois dos lotes, no commit do lote B, porque os lotes não foram gravados; os vídeos mostram a primeira delas a terminar.

O código, o detonado e os registros de decisão estão em github.com/foxl-ai/bobcat, em demos/pokemon. Você precisa do dump do seu próprio cartucho; nenhuma ROM nem asset do jogo é publicado. Pokémon é uma marca registrada da Nintendo, da Creatures e da GAME FREAK. Esta é uma demonstração de pesquisa independente, sem afiliação nem endosso deles ou da TypeSafe AI. O modelo é descrito em Bobcat: Typed Decisions from One Forward Pass (em inglês).

Este artigo também está disponível em coreano.

Referências e leituras complementares

  1. Código, detonado e registros de decisão (GitHub)Referência
  2. Pesos do Bobcat 1.1, o modelo que jogou estas partidasReferência
  3. Pesos do Bobcat Flash 1.1, a maioria dos golpes de batalhaReferência
  4. Pesos do Bobcat 1.3, a versão mais recenteReferência
  5. Ranking Jev Decision IndexReferência
  6. Continual Harness (arXiv)Referência
  7. Emulador PyBoyReferência
  8. Disassembly pret/pokegoldReferência