Como Lançar um MMORPG Onde Agentes de IA e Humanos Jogam como Iguais
Recentemente encontrei o repositório OpenMMO. O autor do projeto está construindo algo que muitos discutiram puramente de forma teórica: um sandbox onde agentes de IA assumem personagens e correm pelo mundo junto com pessoas reais. O servidor não faz ideia de quem está do outro lado. Bots e humanos são atendidos pelo mesmo protocolo WebSocket sem manipuladores especiais ou endpoints ocultos.
O projeto está sendo construído por um único desenvolvedor. O stack tecnológico aqui é mais interessante do que projetos pessoais típicos: um servidor em Rust, um cliente navegador construído com Svelte e Three.js para gráficos 3D usando WebGPU, além de um cliente Rust separado para agentes de IA com suporte ao protocolo MCP.
Do que se trata o projeto
A ideia gira em torno da paridade justa. Se um humano precisa enviar um pacote WebSocket para se mover para uma célula adjacente ou atacar um mob, o agente de IA faz exatamente a mesma coisa. O servidor processa essas ações de forma idêntica, sem concessões especiais para automação.
O mundo é isométrico com uma perspectiva de visão em quarto. Os gráficos são montados a partir de uma mistura de modelos adquiridos e ativos gerados algoritmicamente. A música de fundo com cerca de cinquenta faixas foi criada usando as ferramentas Suno e Google Flow Music.
Vamos dar uma olhada em como este mundo é estruturado internamente.
Geografia procedural e construção
O espaço do jogo cobre uma área de 32 por 32 quilômetros. O mapa é gerado proceduralmente: biomas, linhas costeiras e um sistema complexo de rios.

Os rios formam deltas quando fluem para o oceano e se dividem em ramos. Ao longo da rede de estradas, o servidor coloca automaticamente pontes de madeira onde as estradas intersectam os canais dos rios.

O jogo apresenta mudanças de horários do dia e estações. O comprimento do dia e da noite depende da posição do planeta em sua órbita. Dois satélites com fases e órbitas independentes estão presentes no céu simultaneamente.

A atmosfera é aprimorada pela iluminação. Tochas projetam sombras dinâmicas com queda de luz realista.

Os jogadores têm acesso a construção modular. Você pode construir casas de dois a quatro andares, colocar portas, janelas e móveis.

A física dos itens leva em conta os pisos. Se um personagem joga uma espada no segundo andar de uma casa, apenas alguém no mesmo piso pode pegá-la. O servidor verifica coordenadas ao longo de todos os três eixos antes de passar um item do mundo para um inventário.
Sistema de combate e mecânicas no espírito de D&D
O combate se inspira nas regras de jogos de interpretação clássicos como NetHack ou Dungeons & Dragons. Ao criar um personagem, o jogador rola seis atributos principais: força, destreza, constituição, inteligência, sabedoria e carisma.
A geração segue a regra 4d6 com balanceamento subsequente. Todos os cálculos matemáticos, verificações de acerto e dano são tratados pelo servidor.

O inventário tem limite de peso. A boneca do personagem tem 11 slots de equipamento: cabeça, ambas as mãos, corpo, cinto, calças, sapatos, pescoço, orelhas e dois anéis. Armadura pesada ou um inventário cheio de pedras vai forçá-lo a escolher o que carregar com você e o que deixar no baú.
Editor integrado diretamente no cliente
Para editar o mundo, você não precisa reiniciar o servidor ou abrir utilitários externos. Um editor de mapa é construído diretamente no cliente.

Ele inclui pincéis para modificar a altura do terreno, suavizar colinas, colocar estradas e posicionar objetos. Você pode selecionar zonas retangulares: por exemplo, declarar áreas seguras de cidade sem spawns de monstros ou definir áreas de spawn para mobs específicos.
As mudanças no mapa são enviadas ao servidor via API REST, onde os direitos de acesso são verificados através de um token de autorização do Google.
Arquitetura e stack técnico
O projeto é dividido em três blocos principais dentro de um monorepo.
O lado do cliente é escrito em Svelte e TypeScript. A renderização de cenas 3D passa pelo Threlte e Three.js com foco em WebGPU.
O lado do servidor é construído em Rust usando o runtime assíncrono Tokio. Atualizações de estado de mundo fresco são distribuídas através de canais de broadcast. A comunicação cliente-servidor ocorre via WebSocket baseado na biblioteca tokio-tungstenite, enquanto endpoints REST para o mapa são servidos pelo framework Axum.
O cliente de agentes é separado em seu próprio projeto Rust. Ele pode iniciar um servidor MCP (Model Context Protocol), permitindo que modelos LLM se conectem diretamente ao gameplay.
O autor aplicou uma solução interessante para a lógica compartilhada. O código da pasta shared compila para WASM para o navegador e é usado pelo servidor diretamente. Isso elimina a duplicação de regras de cálculo de mecânicas entre cliente e servidor.
Como implantar o projeto localmente
Você vai precisar de Rust, Cargo, Node.js e npm instalados.
Para implantação conveniente, o desenvolvedor usa um Cargo Workspace. Você pode iniciar a parte do servidor com rebuild automático em mudanças de código a partir da raiz do projeto:
cargo install cargo-watch
cargo watch -w server -w shared -w data-src -x "run -p onlinerpg-server"
O servidor vai iniciar um WebSocket na porta 10006 e API REST na porta 10007.
Para executar o cliente, você precisa copiar o arquivo de ambiente e iniciar o servidor de desenvolvimento Vite:
cd client
cp .env.example .env.local
npm install
npm run dev -- --port 10004
Se você está editando lógica compartilhada na pasta shared, vale a pena executar builds automáticos de WASM para o navegador em um segundo terminal:
cargo watch -w shared -s "npm run build:wasm --prefix client"
O cliente de agentes é iniciado a partir da pasta agent-client:
cd agent-client
cargo watch -i "data/prompts/memory/" -x run
Por que você deveria estudar o código
O projeto será mais útil para quem escreve ou planeja escrever serviços de rede e jogos em Rust. Aqui você pode encontrar um exemplo funcional de organização de race condition de estado, distribuição de eventos via canais de broadcast e trabalho com Tokio.
A segunda área interessante é gráficos web. A combinação Svelte, Threlte e Three.js não é tão comum, e executar WebGPU em um projeto real demonstra o desempenho da web moderna.
Finalmente, o OpenMMO será útil para pesquisadores de agentes de IA. O protocolo MCP e direitos iguais para agentes com jogadores regulares fornecem um sandbox pronto para testar cenários comportamentais de LLM em um ambiente contínuo.
Projetos relacionados