2 pontos por GN⁺ 2026-03-08 | 1 comentários | Compartilhar no WhatsApp
  • Projeto open source que reimplementa do zero um servidor de Ultima Online em .NET 10 e C#, com foco em alto desempenho e execução estável com base em AOT (compilação antecipada)
  • Conta com arquitetura modular, processamento preciso do game loop e ferramentas para pacotes, além de oferecer suporte a interações no jogo e controle de IA por meio de scripts em Lua
  • Fornece uma infraestrutura completa de servidor, incluindo sistema de persistência baseado em MessagePack-CSharp, rede TCP, endpoints de administração HTTP, Docker e stack de monitoramento
  • Permite implementar gameplay customizável por meio de recursos de extensão por script, como comandos baseados em Lua, IA de NPCs, efeitos visuais e sistema de UI (Gump)
  • Está disponível como open source e é avaliado como um framework moderno de servidor .NET útil para desenvolvimento de servidores MMO de alto desempenho e pesquisa de restauração de jogos legados

Visão geral do projeto

  • O Moongate v2 é um projeto moderno de servidor para Ultima Online escrito em .NET 10, garantindo alto desempenho e facilidade de manutenção por meio de uma estrutura modular e compilação AOT
  • Foi projetado com uma estrutura que inclui geração automática de definições de pacotes, game loop determinístico e cobertura de testes
  • Em vez de copiar código de servidores existentes como ModernUO, RunUO e ServUO, foi construído do zero inspirado neles

Objetivos principais

  • Construir uma base de servidor sustentável com foco em precisão e velocidade de iteração
  • Clarificar os limites entre rede e game loop e garantir segurança de threads
  • Aplicar modelagem de pacotes baseada em tipos e registro por geração de código-fonte
  • Manter uma estrutura amigável a AOT sem abrir mão da eficiência no desenvolvimento local

Estado atual de desenvolvimento

  • Recursos centrais como servidor TCP, parsing de pacotes, event bus, gerenciamento de sessões, interface administrativa HTTP e runtime Lua já foram implementados
  • Inclui geração automática de metadados Lua, UI de console, game loop baseado em timer, pathfinding A*, controle de iluminação e clima e envio de e-mails
  • Salva o estado do jogo em arquivos de snapshot e journal por meio de um módulo de persistência baseado em MessagePack
  • Oferece imagens Docker e uma stack de monitoramento Prometheus/Grafana, facilitando a implantação em ambientes de operação

Sistema de scripts e comandos

  • Traz embutido um motor de script Lua (baseado em MoonSharp), permitindo controlar IA de NPCs, comportamento de itens, efeitos visuais e UI (Gump)
  • Suporta em paralelo um sistema de registro de comandos em C# e registro dinâmico de comandos em Lua
  • Exemplos: comandos de GM como .teleport, .add_item_backpack, .set_world_light
  • Permite tratar eventos de clique com tabelas Lua por meio de despacho de ScriptId de itens

Desempenho e benchmarks

  • Segundo medições com BenchmarkDotNet, tarefas importantes de parsing e serialização de pacotes são processadas em dezenas de nanossegundos
  • Na comparação AOT vs JIT, algumas tarefas mostraram ganhos de até 5 a 6 vezes
  • A eficiência de processamento de caminhos críticos do jogo, como SpatialWorldService e ItemService, foi medida em detalhe

Implantação e execução

  • Requer .NET SDK 10.0.x
  • Procedimento básico de execução:
    dotnet restore
    dotnet build
    dotnet run --project src/Moongate.Server
    
  • Permite controlar configurações detalhadas, como porta HTTP, game loop, e-mail e scripting, por meio de configuração baseada em variáveis de ambiente (MOONGATE_*)
  • Fornece exemplo com Docker Compose; as portas padrão são 2593 (jogo) e 8088 (HTTP)

Licença e contribuições

Resumo dos destaques técnicos

  • Framework de servidor MMO baseado em C# + .NET 10 + NativeAOT
  • Suporte a integração com scripts Lua, persistência com MessagePack e monitoramento com Prometheus/Grafana
  • Inclui implantação com Docker e scripts de automação
  • Estrutura adequada para desenvolvimento moderno de servidores com design de alto desempenho, modular e orientado a testes

1 comentários

 
GN⁺ 2026-03-08
Comentários do Hacker News
  • Nunca houve outro jogo que eu tenha jogado em que existissem tantos jogadores “comuns” quanto em UO (Ultima Online)
    Mesmo quem não conseguia equipamentos poderosos ainda podia se divertir, e os jogadores do topo eram conhecidos quase como celebridades
    Era completamente diferente do mundo dos jogos de hoje, em que todo mundo parece um super-herói

    • Concordo muito. Em UO existiam de fato economia e classes sociais
      Era possível passar meses sendo pescador ou alfaiate e ainda assim ter uma experiência significativa, e um guerreiro poderoso e um comerciante comum podiam encontrar sua própria diversão no mesmo mundo
      Os MMOs de hoje parecem todos parques temáticos em que todo mundo pega o mesmo brinquedo, mas UO era um mundo vivo em que os papéis surgiam das escolhas dos jogadores
    • Meu objetivo era me tornar um ferreiro lendário. Crafting era o verdadeiro endgame, e todo equipamento e mobília vinham das mãos de alguém
      O objetivo do jogo não era “vencer” o mundo, mas viver dentro dele
      Não havia quests nem vilões, e havia o bem, o mal e tudo o que existia entre os dois
      Espero que algum estúdio recrie essa filosofia. Acho que Minecraft também fez sucesso por causa dessa natureza sandbox
    • UO foi o melhor jogo online que já experimentei. Todos os outros ficaram à sua sombra
      Eu também gostei de EverQuest e WoW, mas eles não tinham o mesmo sentimento de liberdade e crueza
      Pessoalmente, eu também colocaria The Realm como candidato a melhor MMO
    • Na verdade, parece que tinha uma sensibilidade mais moderna do que hoje. Acho que é por isso que também gosto de Stardew Valley e Animal Crossing
    • Acho que vou passar a vida inteira perseguindo aquela alegria pura que senti jogando UO. Tenho vontade de largar o emprego agora mesmo e ficar jogando o dia todo
  • Trabalho realmente impressionante. Olhando o gráfico de contribuições, fiquei surpreso se isso foi mesmo tudo feito por uma pessoa
    Me passou uma sensação parecida com um projeto de emulador de servidor de Infantry Online que começou 16 anos atrás
    Também fui procurar os commits originais no SourceForge, e aquele foi um projeto mantido por mais de 10 desenvolvedores ao longo de mais de 15 anos
    Fico imaginando como alguém conseguiu fazer tanta coisa sozinho

    • Peguei a infraestrutura das minhas primeiras tentativas, Moongate e Prima, para montar rapidamente a base
      Eu já tinha implementado scripting em Lua em Lilly.Engine, e o Codex ajudou com testes e implementação de funcionalidades
      Na importação de dados, usei como referência a lógica do ModernUO, e os itens vieram do POL por meio de scripts
      Só foi possível porque, quando eu mergulho em algo, vou fundo num nível quase obsessivo
    • O frontend web foi todo desenvolvido pelo Codex em React. Eu odeio desenvolvimento frontend
  • Projeto muito legal. No passado eu mantive o emulador de UO UOX3, baseado em C++
    Eu não o desenvolvi diretamente, mas cuidava da comunidade e dos lançamentos, e também operava um servidor privado com um amigo canadense
    Ainda bem que a Origin não criou problemas legais

    • Quando eu estava no ensino médio, jogava UO e senti que estava viciado, então vendi minha conta e parei
      Lembro que vendi essa conta no eBay por alguns milhares de dólares e um MTG Mox Pearl
      Naquela época, foi através do UOX que aprendi C++ e senti pela primeira vez o poder da programação
      Com um mod que eu mesmo fiz, consegui colocar moongates conectados infinitamente, e essa experiência me colocou no caminho da programação
      Depois aprendi Python, e isso acabou levando à carreira que tenho hoje. Foi realmente uma experiência que mudou minha vida
      (link sobre mim)
    • Que legal ouvir isso! Na verdade, o UOX3 foi uma das inspirações do Moongate
      A estrutura do servidor e a abordagem de scripting eram interessantes, e isso influenciou o projeto atual
      Projetos assim ocupam uma parte importante da história dos emuladores de UO
  • Isso realmente trouxe de volta a nostalgia. No passado, comprei uma casinha perto de Trinsic e administrava uma padaria
    Eu contratava um vendedor NPC para vender as coisas enquanto eu não estava, e um amigo meu morava numa torre toda decorada
    WoW levou 20 anos para introduzir um sistema de moradia, mas as casas em UO eram espaços vivos dentro do mundo

  • Li a análise da arquitetura do Moongate, e achei impressionante a forma como ele implementa DI com Source Generator e separa comportamentos em Lua sem precisar recompilar C#
    Foi dito que ainda falta IA de NPC, mas e se em vez de uma FSM tradicional fosse conectado um microsserviço baseado em LLM ao Lua?
    Isso daria aos NPCs conversas com contexto e memória, e permitiria acionar eventos reais de acordo com a entrada do jogador
    Como a camada de pacotes e o ambiente Lua já estão bem feitos, a integração também parece que ficaria limpa. Eu adoraria ajudar a projetar a lógica de IA

    • Ideia realmente interessante. As conversas com NPCs talvez possam evoluir para um sistema em que o próprio mundo muda
      Por exemplo, você pergunta sobre um rumor e esse rumor passa a surgir como um evento real dentro do jogo
    • Tenho interesse. Por favor, entre em contato pelo GitHub
  • Servidores de MMO tendem a ficar estruturalmente complexos com o tempo, então a abordagem de arquitetura limpa separando rede e lógica de jogo me chamou atenção
    Fiquei especialmente curioso sobre como o delta sync baseado em setores evita uma enxurrada de pacotes ao entrar em áreas congestionadas
    Também queria saber se o uso de NativeAOT foi mais por facilidade de distribuição ou por desempenho

    • Esse era justamente o principal motivo. Os codebases antigos de UO misturavam rede, persistência e lógica, então tentei uma nova abordagem baseada em .NET
      Ao entrar em um setor, o sistema sincroniza itens e mobiles dos setores ao redor, mas exclui os setores que já estavam visíveis
      Itens que saem do alcance de visão são descartados pelo cliente, então precisam ser reenviados
      O envio de pacotes é processado por uma fila para que o game loop não fique bloqueado
      No futuro, pretendo adicionar envio por prioridade e distribuição por ticks
      O NativeAOT também ajuda a simplificar a distribuição, mas o principal é o desempenho previsível. Não há atraso de JIT, e isso permite manter timings de tick consistentes
    • Parece que a prevenção de explosões de pacotes depende fundamentalmente de loading por proximidade
      Em um projeto parecido, eu também estava experimentando spawning baseado em frustum para reduzir bursts de rede, então isso me interessou bastante
      O código é fácil de ler, então serviu muito como referência
  • Por coincidência, o engine Lua MoonSharp usado pelo Moongate voltou a ficar ativo recentemente
    Depois de 10 anos, saiu um beta release v3.0.0
    Eu não sou o criador original, mas participo como mantenedor no GitHub, e Tabletop Simulator também usa esse engine

  • Eu realmente queria abrir um servidor. Há 15 anos eu era administrador de SphereServer, mas perdi todos os scripts e dados do mundo
    Mesmo assim, quero voltar a curtir o UO clássico com outras pessoas do jeito antigo

    • Não esperava ver alguém mencionar SphereServer aqui!
      Eu também fazia muitos scripts personalizados no passado, mas perdi tudo
      O SphereServer foi o que me levou a aprender scripting pela primeira vez
  • Gostei muito do logo. Fiquei curioso para saber se há algum vídeo no YouTube mostrando o progresso

    • Obrigado! O logo surgiu meio por acaso, mas eu queria passar a sensação de Moongate da obra original
      Ainda não há vídeo, mas login, criação de personagem, movimentação pelo mundo, scripting de itens em Lua e a UI de administração em React já estão funcionando
      Em breve vou adicionar um vídeo curto de demonstração ao README
  • Recentemente, fiquei impressionado ao ver no YouTube a série de vídeos do Majuular sobre Ultima
    Por causa disso, comprei Underworld e VII no GOG. Dá a sensação de ter perdido obras-primas dos anos 90
    Meu irmão jogou muito UO, e um amigo meu, com o nome SirDarkSpell, era um griefer infame
    Acho que os dois ficariam muito felizes ao ver este projeto. Neste fim de semana, pretendo mergulhar em Stygian Abyss

    • Ultima Underworld é um jogo fantástico