Takafumi Horiuchi

Geração do meu próprio Pokémon no mundo

Resumo

A partir de seis palavras inseridas durante o jogo, a IA gera uma nova espécie de Pokémon. Alguns minutos depois, essa nova espécie aparece na grama, e o jogador pode encontrá-la, capturá-la e dar um apelido. Foi desenvolvido um protótipo de pesquisa que monta no momento não apenas a aparência e o nome, mas também o tipo, os valores de base, os movimentos e os dados manipulados dentro do jogo.

No protótipo, a conversa, a entrada de palavras, a geração em segundo plano, os encontros na natureza, a captura e a nomeação foram conectados em uma única experiência sem interromper o jogo. As novas espécies são registradas como raças que os sistemas de jogo existentes podem manipular, e não apenas como imagens.

O foco principal desta iniciativa não foi o próprio modelo gerador. É um 'quadro de geração' no qual os humanos projetam as condições para manter o equilíbrio do jogo e a consistência visual, e a IA explora apenas dentro desse escopo. Além disso, ele próprio jogou para examinar preliminarmente se realmente se desenvolveria apego a uma criação que fosse exclusivamente sua.

Pergunta — Se for único e insubstituível, surgirá apego?

Nos jogos, existe a diversão de escolher um personagem, desenvolvê-lo e dar-lhe um nome, tornando-o "único para si mesmo". No entanto, o ponto de partida está entre as opções preparadas pelos desenvolvedores. Quando a IA generativa permite criar uma existência única para o jogador desde o próprio ponto de partida, o apego provavelmente se torna ainda mais forte.

Para verificar essa questão, não basta gerar apenas uma imagem. É necessário que a entidade gerada entre no mundo do jogo, encontre coisas, seja capturada e continue utilizável depois. Portanto, foram preparados dois pontos de entrada diferentes com níveis distintos de envolvimento do jogador. Ao falar com o avô, a geração ocorre sem entrada; ao falar com a avó, o jogador escolhe seis palavras. O método de geração desse jogo é determinado pelo lado com o qual se conversa primeiro.

O objetivo deste protótipo não é tirar conclusões sobre apego. Trata-se de criar uma base para integrar os produtos gerados à experiência normal do jogo e encontrar condições que possam ser comparadas no futuro.

Fluxo do jogo

A seguir está o fluxo de "geração de envolvimento" onde o jogador escolhe palavras. Fale com a senhora na Floresta Touka e escolha seis palavras no "conversa fácil" já existente no jogo. À medida que você continua jogando, a geração avança e, quando pronta, um som será ouvido. Ao entrar na grama, uma nova espécie aparecerá e poderá ser capturada com as mesmas operações usadas para Pokémon selvagens normais. Nome, tipo, valores de base, movimentos, sprites de batalha frontal e traseiro, e ícones de bolso são gerados a cada execução. Esta sequência de ações também pode ser verificada em Vídeo de demonstração.

Um casal idoso está de pé na floresta de Touka. No quadro de diálogo aparece: 'Que tipo de criatura você está imaginando?'
Começa quando você fala com a avó.
Tela de entrada de conversa simples intitulada 'Criatura que imaginei:'. As palavras BEAUTIFUL, ATTACK, FIRE estão inseridas.
Com o 'conversa fácil' que já existe no Emerald, transmita seis palavras.
O jogador está de pé perto de uma moita na floresta. No janela de conversa está escrito: 'A moita está se mexendo... algo está lá!'
A geração leva alguns minutos no PC. O som avisa que a preparação foi concluída.
Tela de batalha. Um lagarto vermelho com fogo na cabeça está de frente para o jogador. Está escrito:
O lagarto do tipo fogo FLAMEREL aparece do meio da grama que balança.
Durante a batalha, uma Pokébola está sendo lançada em direção a FLAMEREL.
Assim como outras espécies, pode ser capturado com uma Pokébola.
Tela de nomeação perguntando o apelido de FLAMEREL. Está escrito GGG.
Como as outras raças, pode-se dar um apelido.
Tela de mão. A espécie gerada possui um ícone exclusivo e está alinhada com três Pokémon normais.
Como as outras raças, possui um ícone exclusivo e fica alinhado na mão.
Tela de informações do Pokémon FLAMEREL. Tipo Fogo, habilidade Chama, personalidade Brava, e mostra que foi encontrado na Floresta Touka no nível 7.
Assim como outras raças, a tela de status também funciona corretamente.

Problema de design — se gerar livremente, o jogo quebra

O fato de a IA ser capaz de criar um novo personagem e o fato de esse personagem ser viável dentro do jogo são questões separadas. Se suas habilidades forem muito altas, a dificuldade será desequilibrada, e se seu tipo e movimentos não combinarem, será difícil treiná-lo. Se a aparência for muito complexa, ao ser convertida em um sprite de 64×64 pixels, a forma se tornará ilegível.

Por outro lado, se você fixar tudo, não faz sentido que algo diferente surja a cada execução. O que é necessário não é eliminar a liberdade da IA, mas separar as partes que devem ser protegidas como um jogo das partes que podem variar.

Portanto, o alvo do design foi mudado de um único Pokémon para um espaço capaz de gerar Pokémon. O ser humano define os objetivos, restrições, proibições e métodos de verificação, e a IA concretiza os candidatos dentro desses parâmetros. Isso é uma tentativa de experimentar o design baseado em restrições, que é Minha filosofia de design, como um protótipo funcional.

Abordagem — projetar as condições de produção, não os produtos

Não permita que o LLM escreva texto livre; faça com que ele preencha apenas os itens determinados, como nome, tipo, estatísticas de espécie, habilidades, tamanho e cor. Não utilize a saída diretamente, mas verifique-a com um validador. Se houver violação, devolva ao modelo quais regras foram infringidas e gere novamente até que as condições sejam atendidas.

  1. Os humanos determinam os limites. Transformar o equilíbrio do jogo, a forma legível na tela e as expressões a serem evitadas em regras verificáveis.
  2. A IA concretiza os candidatos. Com base nas palavras do jogador, sugira valores dos itens permitidos.
  3. A máquina verifica as regras. Julga automaticamente números, combinações de técnicas e expressões proibidas.
  4. Fornecer feedback apenas sobre violações. Candidatos que não atendem aos critérios devem ser devolvidos com os motivos e regenerados.

Restrições que protegem o brincar. O total de valores de base dos tipos foi definido na faixa de 280 a 360, e limites superior e inferior foram aplicados a cada habilidade. As técnicas foram extraídas da fonte do jogo e restringidas ao tipo daquela espécie ou ao tipo normal. Além disso, foram excluídas técnicas de um golpe fatal, autodestruição, dano fixo e técnicas excessivamente fortes, e também foram verificadas o número de técnicas de ataque e a presença de técnicas combinadas com o tipo. Taxas de captura, velocidade de crescimento e outros foram fixados para que as diferenças geradas pudessem ser comparáveis.

Restrições para proteger a aparência. O tipo de corpo foi escolhido a partir de candidatos que mantêm facilmente o contorno mesmo em sprites pequenos, e o vocabulário de cores e características também foi limitado. Características humanas, sangue, armas e caracteres foram excluídos. Por fim, condições para prevenir falhas, como 'apenas um corpo', 'corpo inteiro' e 'não criar membros extras', devem ser sempre adicionadas às instruções de geração de imagens.

Em um registro, o modelo inicialmente propôs uma ideia com um total de valor de espécie de 380. O framework detectou violações e incentivou a regeneração, eventualmente convergindo para uma especificação de 320. O importante não é que bons resultados surjam por acaso, mas que foi projetado um processo que não adota resultados fora do padrão.

Concluir a experiência dentro do jogo

O que o jogador toca são apenas as conversas dentro do jogo, a escolha das palavras e os encontros na grama. Não há necessidade de abrir outra tela para a geração. Por outro lado, os processos de cálculo intenso são realizados por um processo Python no PC, que colabora com o jogo através de arquivos. O script Lua no mGBA faz a ponte entre os dois, separando a sensação de jogo existente do processamento da IA externa.

  1. Criar especificações. O modelo de linguagem local converte seis palavras em dados de raças verificadas.
  2. Formar uma figura. O modelo de imagem desenha uma ilustração de referência e, a partir dela, gera ícones de frente, de costas e de mão de forma consistente.
  3. Converter para dados de jogo. Reduzir a imagem para 15 cores e converter/comprimir para sprites e paletas compatíveis com GBA.
  4. Refletir no jogo em execução. Grave dados na área reservada e faça novas espécies aparecerem sem reiniciar o jogo.

Como os mesmos dados também são gravados no disco, a raça refletida permanece mesmo após recarregar o jogo. A geração ocorre apenas uma vez e não pode ser desfeita. Se você fugir ou perder em um encontro, eles permanecem no mundo, mas se você os derrotar, nunca mais aparecerão. Essa irreversibilidade também é um design feito para dar à experiência o significado de "apenas um por mundo".

Coisas que puderam ser confirmadas com o protótipo

Esta é uma verificação de viabilidade feita sozinho, e não um jogo completo ou um experimento com usuários. Os pontos alcançados e as áreas não verificadas estão divididos da seguinte forma.

Como resultado de tentar sozinho — apenas ser único não gerou apego

Pelo que pude jogar do protótipo sozinho, não desenvolvi um apego forte pelos Pokémon gerados. Esta é apenas a impressão pessoal do próprio implementador e não é um resultado de experimento que possa ser generalizado. No entanto, serviu como uma pista para pensar sobre o que mudar em seguida para comparar.

Existem duas condições que parecem influenciar o apego.

O que se tornou um contraste foi "Hanagitsune", que foi criado com múltiplas IAs geradoras em combinação com trabalho manual, separado da geração automática para jogos. Tenho afeto por esse personagem, que foi cuidadosamente desenvolvido até uma forma satisfatória, comparando opções e fazendo ajustes. Acredito que isso se deve tanto à qualidade suficiente quanto ao envolvimento, incluindo tentativa e erro.

Vista frontal da raposa flor. Uma raposa verde pálida, com cauda que parece ter trepadeiras com flores caindo. Parte de trás de uma raposa-das-flores. É possível ver todo o comprimento da cauda florida.
Raposa-flor — guardiã da floresta com cauda que floresce. Nos rastros por onde passa, brotam flores e plantas, trazendo nova vida até mesmo para terras devastadas. Sua aparência é considerada um símbolo do crescimento da floresta rumo ao futuro.
Tela de informações do Pokémon do Hanagi2ne. Tipo grama, habilidade Verdejar, personalidade Valente, e mostra que foi encontrado no Ninho das Árvores Toshika no nível 7. O sprite é uma raposa verde-clara com uma cauda florescente. Tela de batalha. Hanagi2ne visto de costas está enfrentando um Poochyena selvagem. Está escrito 'Hanagi2ne usou Sugere!'
Implementamos a 'Hanagitsune', projetada através de diálogos e trabalho manual, como uma raça dentro do jogo.

Este protótipo não responde à pergunta 'O conteúdo gerado cria apego?'. Transformou a questão vaga em dois elementos que podem ser intencionalmente alterados: a qualidade do produto gerado e a profundidade do envolvimento. Na próxima verificação, será necessário incorporar escolhas, comparações e revisões no processo de produção, e depois realizar comparações entre vários participantes, garantindo que a qualidade dos produtos gerados esteja em um nível uniforme.

Implementação

O pipeline de geração, o quadro de restrições e validação, a conversão de dados para GBA e as alterações do lado do jogo estão divulgados em Repositório GitHub.

pret/pokeemerald Baseado na descompilação, foi criado como pesquisa pessoal. Nenhum ROM, patch de ROM ou recurso do jogo foi distribuído. Todos os sprites publicados aqui são originais gerados por IA. Pokémon é uma marca registrada da Nintendo, da Creatures Inc. e da Game Freak Inc., e este projeto não tem relação com essas empresas, nem recebeu aprovação delas.