GridTurnWorld
Experimento de RPG tático em Godot sobre criaturas companheiras autônomas, inimigos coordenados, pathfinding A* e exploração procedural.
GridTurnWorld é um experimento de sistemas para um RPG tático baseado em turnos. A fantasia é familiar: o jogador explora um mundo em grid acompanhado por pequenas criaturas aliadas, enquanto slimes e outros inimigos reagem à presença do grupo. O foco do projeto, porém, nunca foi produzir rapidamente um jogo completo. Eu queria descobrir quanto comportamento convincente poderia surgir de regras simples de percepção, comunicação, movimento e combate.
O protótipo foi inspirado por Stoneshard (abre em uma nova aba), com seu combate tático por turnos, e por Caves of Qud (abre em uma nova aba), principalmente pela ideia de um mundo definido por sistemas que interagem. GridTurnWorld não tenta reproduzir o escopo desses jogos; usa a mesma linhagem de ideias para investigar IA, pathfinding e geração procedural em Godot.
O projeto está pausado há bastante tempo e não deve ser apresentado como um jogo finalizado. O repositório é privado, e eu gostaria de retomá-lo no futuro. O que existe hoje é um laboratório jogável com uma base técnica que ainda considero interessante.
Um mundo compartilhado por jogador, aliados e inimigos
O jogo separa a exploração em turnos. O jogador pode se mover, atacar, pegar itens ou interagir com o inventário; depois, o gerenciador de turnos sinaliza aos NPCs em combate que chegou a vez deles. A rodada só avança quando cada participante termina sua ação. Essa coordenação por sinais permite que criaturas entrem ou saiam do combate sem manter uma sequência rígida de entidades.
As criaturas possuem disposições hostil, neutra e amigável. Os slimes procuram alvos válidos dentro do campo de visão e atacam tanto o jogador quanto seus companheiros. Os dois pequenos aliados seguem o personagem, detectam ameaças próximas e participam da luta sem depender de comandos diretos a cada turno. Esse comportamento era importante para que eles parecessem companheiros, e não apenas peças extras controladas pelo jogador.
IA baseada em percepção e memória
Cada NPC toma decisões usando informação local. Ele procura o inimigo visível mais próximo, verifica linha de visão e registra a última posição conhecida do alvo. Se perde contato, ainda pode investigar essa posição por algum tempo antes de desistir da busca.
NPCs próximos também comunicam ameaças entre si. Uma criatura que percebe um inimigo pode alertar aliados dentro do alcance; em vez de cada agente conhecer magicamente o estado inteiro do mapa, a informação se propaga pelo grupo. Estados visuais de alerta, busca, hostilidade e afeto tornam parte desse raciocínio legível para o jogador.
Os companheiros acrescentam outro problema: acompanhar o jogador sem disputar constantemente a mesma célula. A IA consulta ocupações e reservas de movimento, tenta manter proximidade e recalcula sua rota quando outro personagem bloqueia o caminho. O resultado não é uma coreografia roteirizada, mas um comportamento coletivo produzido por agentes que obedecem às mesmas regras espaciais.
A* escrito para as regras do jogo
Embora a Godot ofereça AStarGrid2D, uma implementação pronta de A* para grids,1 escrevi o pathfinding do projeto em GDScript para controlar como terreno, entidades e movimentos diagonais entram no custo de uma rota.
A busca mantém os nós abertos em uma fila de prioridade implementada como heap mínimo. Para cada célula, ela combina o custo já percorrido com uma estimativa diagonal até o destino. Passos ortogonais e diagonais possuem custos diferentes, tiles podem ter pesos próprios e o algoritmo impede que uma diagonal atravesse o canto formado por dois obstáculos.
O cálculo também considera células ocupadas e posições reservadas por outros NPCs. Isso conecta o algoritmo à IA coletiva: encontrar o caminho geometricamente mais curto não basta quando várias criaturas tentam se mover no mesmo turno. Um limite de busca impede que um destino inalcançável consuma trabalho indefinidamente.
A visibilidade usa uma implementação da linha de Bresenham para testar obstruções entre duas células. O mesmo modelo alimenta a percepção dos NPCs e a névoa de guerra revelada pelo jogador.
Um mundo grande sem manter tudo ativo
O mapa é organizado como uma grade lógica de 170 por 170 biomas, com 250 por 250 células em cada bioma — um espaço potencial de 42.500 células por eixo. Isso não significa que bilhões de tiles sejam instanciados ao mesmo tempo.
O gerenciador mantém uma janela renderizada de 150 por 150 células ao redor do jogador. Biomas próximos são gerados e carregados conforme a posição muda; regiões distantes saem das camadas ativas. Terreno e objetos são escolhidos por pesos associados ao bioma, enquanto camadas distintas representam solo, objetos, personagens e névoa de guerra.
Essa divisão transforma um mapa teoricamente enorme em um custo local e previsível. É uma otimização arquitetural, não uma alegação de benchmark: o protótipo ainda precisaria de medições, persistência e mais variedade para sustentar um mundo longo. A geração procedural de Caves of Qud foi uma referência conceitual importante; a apresentação de Jason Grinblat na GDC mostra como suas regiões são compostas por várias etapas e estratégias de geração.2
Para acompanhar outra forma de conectar terreno, recursos e decisões dos habitantes, veja Criar mundos: das placas tectônicas aos conflitos. O artigo segue essas relações até as condições de vida e os conflitos de um cenário de fantasia.
Sistemas de RPG ao redor do experimento
Além do núcleo de movimentação, o projeto já possui:
- combate com acerto, erro crítico, crítico, bloqueio e esquiva;
- vida, stamina, mana, dano e resistências como base para progressão;
- inventário espacial, equipamentos, itens no chão e ações que consomem turnos;
- câmera, seleção de destino e pré-visualização da rota;
- estruturas iniciais para poderes de dano, cura, efeitos, movimento e invocação.
Algumas dessas áreas são fundações, não sistemas terminados. Há ideias de partes do corpo, efeitos e poderes ainda incompletas. Mantê-las documentadas como tal é mais útil do que transformar um protótipo antigo numa lista artificial de funcionalidades prontas.
As relações entre escolhas também aparecem no Orion Art Engine: ali, uma camada visual pode depender da pele e da roupa já selecionadas. É outro exemplo de como regras de combinação ajudam a organizar um sistema criativo.
O que eu retomaria
Se eu voltar ao GridTurnWorld, preservaria exatamente seu centro: criaturas companheiras com autonomia, encontros táticos e exploração sistêmica. O próximo passo seria transformar as regras atuais em uma pequena experiência completa, com objetivos, progressão e conteúdo suficientes para testar se o comportamento emergente continua divertido ao longo do tempo.
Também revisaria a geração com métricas reais, ampliaria os comportamentos de grupo e criaria ferramentas de depuração para visualizar percepção, memória, custos e decisões da IA. O código já provou a ideia mais importante: pathfinding, turnos e comunicação ficam muito mais interessantes quando são tratados como partes do mesmo sistema.
Nota sobre os visuais: o protótipo usa sprites gratuitos de terceiros encontrados na internet; eles não são pixel art de minha autoria. Antes de uma distribuição pública do jogo, os pacotes originais e suas licenças precisam ser identificados e creditados. Minha produção própria de pixel art merece um artigo separado no Scriptorium.
Footnotes
-
A documentação oficial de
AStarGrid2D(abre em uma nova aba) descreve a solução nativa da Godot para encontrar caminhos em grids parciais 2D, incluindo heurísticas e movimento diagonal. ↩ -
Jason Grinblat, “End-to-End Procedural Generation in Caves of Qud” (abre em uma nova aba), GDC 2019. ↩