Introdução
Neste guia, vamos explorar a arquitetura e os aprendizados do desenvolvimento do jogo Ninja Legends, um MMORPG de ação 2D com tema ninja que roda no navegador, PC e celular. Começou como um jogo .exe para Windows, mas hoje roda direto no navegador.

Client: Godot 4.4 para Web (WebAssembly)
O client é desenvolvido em Godot 4.4, exportado para WebAssembly, usando o renderer de compatibilidade WebGL2. O jogo é responsivo para navegadores modernos, permitindo uma experiência de jogo fluida.
Server: Node.js 22 + Express + ws + node:sqlite
O servidor é construído com Node.js 22, Express para gerenciamento de rotas, ws para comunicação WebSocket pura e node:sqlite para armazenamento de dados. A arquitetura do servidor é responsável por gerenciar XP, drop, HP dos monstros, recompensas e outros dados críticos do jogo.
Hospedagem: AWS Lightsail de US$ 7/mês
O jogo é hospedado em uma VM AWS Lightsail de US$ 7/mês, utilizando Nginx e PM2 para gerenciamento de processos. O deploy é realizado por meio de GitHub Actions após cada push.
Arquitetura do Servidor
O servidor é autoritativo desde o início. No início, o save ficava no cliente e era possível trapacear. Com o tempo, tudo foi migrado para o servidor, incluindo XP, drop, HP dos monstros, recompensas e outros dados. O cliente apenas desenha e manda intenções de ataque, enquanto o servidor confere distância, limite de dano e decide o resultado.
Arquitetura do Client
O servidor é responsável por gerenciar monstros do lado do servidor, com a IA dos monstros rodando em um tick de 100 ms por sala. Cada caçada é uma instância só do jogador (ou da party), o que simplifica o cálculo de dano e drop.
Problemas Encenados
No teste de carga, 500 jogadores caçando usavam 80% de um núcleo, mas 20 pessoas juntas na cidade geravam 14 MB/s de saída. Juntando os envios por sala a cada 100 ms e mandando a posição dos monstros só pra quem está na caçada, 50 pessoas na cidade caíram de 89 MB/s para 1,7 MB/s e de 67% para 3% de CPU.
Desafios de Interface e Artes
Na web, não existe fonte de reserva do sistema. Qualquer caractere fora da fonte do jogo (seta, kanji, emoji) vira um quadrado. O login fica no site (HTML puro) e o jogo continua a sessão pelo localStorage.
Arte e Som
A arte e som são cuidadosamente gerenciados. A pixel art dos personagens, monstros e cenários é feita com o PixelLab e os efeitos sonoros são gerenciados com o ElevenLabs.
Conclusão
Neste guia, exploramos a arquitetura e os aprendizados do desenvolvimento do jogo Ninja Legends. Com uma arquitetura robusta e uma equipe dedicada, o jogo Ninja Legends está em fase de testes e está sempre aberto a feedbacks e sugestões de jogadores."