2 puntos por GN⁺ 2026-03-08 | 1 comentarios | Compartir por WhatsApp
  • Proyecto open source que reimplementa por completo un servidor de Ultima Online con .NET 10 y C#, con enfoque en alto rendimiento y ejecución estable mediante AOT (compilación anticipada)
  • Cuenta con arquitectura modular, procesamiento preciso del game loop y herramientas para paquetes, además de soporte para interacciones dentro del juego y control de IA mediante scripting en Lua
  • Ofrece una infraestructura de servidor completa que incluye sistema de persistencia basado en MessagePack-CSharp, redes TCP, endpoints de administración HTTP, Docker y stack de monitoreo
  • Permite implementar gameplay personalizable mediante funciones de extensión por script como comandos basados en Lua, IA de NPC, efectos visuales y sistema de UI (Gump)
  • Está publicado como open source y se considera un framework moderno de servidores .NET útil para el desarrollo de servidores MMO de alto rendimiento y la investigación sobre restauración de juegos legados

Resumen del proyecto

  • Moongate v2 es un proyecto moderno de servidor de Ultima Online escrito en .NET 10, con estructura modular y compilación AOT para asegurar alto rendimiento y mantenibilidad
  • Está diseñado con una estructura que incluye generación automática de definiciones de paquetes, game loop determinista y cobertura de pruebas
  • Fue construido desde cero inspirado en servidores previos como ModernUO, RunUO y ServUO, sin copiar código de ellos

Objetivos principales

  • Construir una base de servidor mantenible con énfasis en precisión y velocidad de iteración
  • Definir claramente los límites entre networking y game loop y asegurar seguridad de hilos
  • Aplicar modelado de paquetes basado en tipos y registro mediante generación de código fuente
  • Mantener una estructura amigable con AOT sin sacrificar la eficiencia del desarrollo local

Estado actual del desarrollo

  • Ya están implementadas funciones clave como servidor TCP, parsing de paquetes, event bus, gestión de sesiones, interfaz de administración HTTP y runtime de Lua
  • Incluye generación automática de metadatos para Lua, UI de consola, game loop basado en temporizadores, búsqueda de rutas A*, control de iluminación y clima y envío de correos electrónicos
  • Guarda el estado del juego mediante módulo de persistencia basado en MessagePack usando archivos de snapshot y journal
  • Proporciona imágenes Docker y un stack de monitoreo con Prometheus/Grafana, lo que facilita el despliegue en entornos operativos

Sistema de scripting y comandos

  • Integra un motor de scripting Lua (basado en MoonSharp) para controlar IA de NPC, comportamiento de ítems, efectos visuales y UI (Gump)
  • Soporta en paralelo un sistema de registro de comandos en C# y registro dinámico de comandos en Lua
  • Ejemplos: comandos de GM como .teleport, .add_item_backpack, .set_world_light
  • Permite manejar eventos de clic basados en tablas de Lua mediante despacho de ScriptId de ítems

Rendimiento y benchmarks

  • Según mediciones con BenchmarkDotNet, tareas clave de parsing y serialización de paquetes se procesan en el orden de decenas de nanosegundos
  • En la comparación AOT vs JIT, algunas tareas muestran mejoras de velocidad de hasta 5 a 6 veces
  • La eficiencia de procesamiento en rutas críticas del juego, como SpatialWorldService e ItemService, está medida en detalle

Despliegue y ejecución

  • Requiere .NET SDK 10.0.x
  • Procedimiento básico de ejecución:
    dotnet restore
    dotnet build
    dotnet run --project src/Moongate.Server
    
  • Permite controlar configuraciones detalladas como puerto HTTP, game loop, correo electrónico y scripting mediante configuración basada en variables de entorno (MOONGATE_*)
  • Incluye ejemplo de Docker Compose; los puertos predeterminados son 2593 (juego) y 8088 (HTTP)

Licencia y contribuciones

Resumen de características técnicas

  • Framework de servidor MMO basado en C# + .NET 10 + NativeAOT
  • Soporte para integración con scripts Lua, persistencia con MessagePack y monitoreo con Prometheus/Grafana
  • Incluye despliegue con Docker y scripts de automatización
  • Su diseño de alto rendimiento, modular y centrado en pruebas lo hace adecuado para el desarrollo moderno de servidores

1 comentarios

 
GN⁺ 2026-03-08
Comentarios de Hacker News
  • Nunca jugué un juego que tuviera tantos jugadores “comunes” como UO (Ultima Online)
    Incluso la gente que no conseguía equipo poderoso podía divertirse, y los jugadores top eran conocidos casi como celebridades
    Era completamente distinto del mundo de los juegos actuales, donde todos parecen superhéroes

    • Totalmente de acuerdo. En UO existían de verdad una economía y clases sociales
      Podías pasarte meses siendo pescador o sastre y aun así tener una experiencia significativa, y tanto un guerrero poderoso como un comerciante común encontraban su propia diversión en el mismo mundo
      Los MMO actuales son como parques temáticos donde todos se suben a la misma atracción, pero UO era un mundo vivo donde los roles surgían de las decisiones del jugador
    • Mi meta era convertirme en un herrero legendario. El crafting era el endgame, y todo el equipo y los muebles salían de las manos de alguien
      El propósito del juego no era “vencer” al mundo, sino vivir dentro de él
      No había quests ni villanos, y había bien, mal y todo lo que existía entre ambos
      Ojalá aparezca un estudio que vuelva a implementar esta filosofía. Creo que Minecraft también tuvo éxito por ese componente de sandbox
    • UO fue el mejor juego en línea que he vivido. Los demás están a su sombra
      También me gustaron EverQuest y WoW, pero no tenían esa misma sensación de libertad y crudeza
      Personalmente, también pondría a The Realm como candidato a mejor MMO
    • De hecho, siento que tenía una sensibilidad más moderna que muchos juegos de ahora. Por eso también me gustan Stardew Valley y Animal Crossing
    • Creo que me voy a pasar la vida persiguiendo esa alegría pura que sentía jugando UO. Hasta me dan ganas de renunciar al trabajo y jugar todo el día
  • Es un trabajo realmente impresionante. Viendo el gráfico de contribuciones, sorprende que de verdad lo haya hecho casi una sola persona
    Me da vibras parecidas al proyecto de emulador de servidor de Infantry Online que empezó hace 16 años
    También encontré los commits originales en SourceForge, y ese fue un proyecto mantenido por más de 10 desarrolladores durante más de 15 años
    Me intriga cómo una sola persona logró hacer tanto

    • Pude construir una base rápido reutilizando infraestructura del primer intento, Moongate, y de Prima
      Ya había implementado el scripting en Lua en Lilly.Engine, y Codex me ayudó con tests e implementación de funcionalidades
      Para la importación de datos tomé como referencia la lógica de ModernUO, y los ítems los importé por script desde POL
      También ayudó que, cuando me obsesiono con algo, me hundo hasta un nivel casi enfermizo
    • Todo el frontend web lo desarrolló Codex con React. Yo odio desarrollar frontend
  • Es un proyecto muy genial. Antes mantuve UOX3, un emulador de UO basado en C++
    No lo desarrollé yo directamente, pero me encargaba de la comunidad y de los releases, y también administré un servidor privado con un amigo canadiense
    Por suerte Origin no hizo problemas legales

    • Cuando estaba en la preparatoria jugaba UO, pero sentí que me estaba volviendo adicto, así que vendí mi cuenta y lo dejé
      Recuerdo haber vendido esa cuenta en eBay por varios miles de dólares y una MTG Mox Pearl
      En ese tiempo sentí por primera vez el poder de la programación mientras aprendía C++ con UOX
      Con un mod que hice yo mismo podía colocar moongates conectados infinitamente, y esa experiencia me llevó al camino de la programación
      Después aprendí Python y eso terminó llevándome a mi carrera actual. De verdad fue una experiencia que me cambió la vida
      (enlace a mi presentación)
    • Me alegra oírlo. De hecho, UOX3 fue una de las inspiraciones de Moongate
      La estructura del servidor y su enfoque de scripting me parecieron interesantes, y terminaron influyendo en este proyecto
      Proyectos así ocupan una parte importante en la historia de los emuladores de UO
  • De verdad me devolvió muchos recuerdos. Hace tiempo compré una casita cerca de Trinsic y administraba una panadería
    Podía contratar comerciantes NPC para vender mis cosas incluso cuando yo no estaba, y un amigo vivía decorando su torre
    A WoW le tomó 20 años implementar un sistema de vivienda, pero en UO las casas eran espacios vivos dentro del mundo

  • Leí un análisis de la arquitectura de Moongate y me impresionó la estructura de implementar DI con Source Generator y separar comportamientos con Lua sin recompilar C#
    Mencionabas que todavía faltaba la IA de los NPC, y me pregunto si en vez de una FSM tradicional no podrías conectar a Lua un microservicio basado en LLM
    Así los NPC podrían tener conversaciones con contexto y memoria, y activar eventos reales según la entrada del jugador
    Como ya tienes bien resuelta la capa de paquetes y el entorno Lua, la integración también se ve limpia. Me gustaría pensar contigo el diseño de la lógica de IA

    • Es una idea realmente interesante. La conversación con NPC incluso podría evolucionar a un sistema que transforme el mundo mismo
      Por ejemplo, si preguntas por un rumor, ese rumor podría generarse después como un evento real dentro del juego
    • Me interesa. Contáctame por GitHub
  • Los servidores MMO tienden a volverse estructuralmente complejos con el tiempo, así que me impresionó el enfoque de arquitectura limpia al separar red y lógica del juego
    Sobre todo, en la delta sync basada en sectores, me da curiosidad cómo evitas una avalancha de paquetes al entrar a zonas congestionadas
    También quisiera saber si el uso de NativeAOT es solo por simplicidad de despliegue o también por rendimiento

    • Sí, esa fue justamente una motivación principal. Las viejas bases de código de UO tenían red, persistencia y lógica todas mezcladas, así que quise probar un nuevo enfoque basado en .NET
      Al entrar a un sector se sincronizan los ítems y móviles de los sectores cercanos, pero se excluyen los sectores que ya estabas viendo
      Los ítems que salen del rango visual el cliente los descarta, así que hace falta reenviarlos
      El envío de paquetes se procesa en una cola para que el game loop no se bloquee
      Más adelante planeo agregar envío con prioridades y distribución por ticks
      NativeAOT también simplifica el despliegue, pero lo clave es el rendimiento predecible. No hay latencia de JIT y se puede mantener un timing de ticks consistente
    • Da la impresión de que la prevención de avalanchas de paquetes depende fundamentalmente del loading por proximidad
      Yo también estuve experimentando en un proyecto parecido con spawning basado en frustum para reducir bursts de red, así que me pareció interesante
      El código es fácil de leer y sirve mucho como referencia
  • Casualmente, MoonSharp, el motor Lua que usa Moongate, volvió a activarse recientemente
    Sacó una beta v3.0.0 después de 10 años
    Yo no soy el creador original, pero participo como mantenedor en GitHub, y Tabletop Simulator también usa este motor

  • Definitivamente quiero abrir un servidor. Hace 15 años fui administrador de SphereServer, pero perdí todos mis scripts y datos del mundo
    Aun así, me gustaría volver a disfrutar UO clásico con otras personas como en esos tiempos

    • ¡Jamás pensé que vería una mención a SphereServer aquí!
      Yo también hice muchos scripts personalizados en su momento y lo perdí todo
      SphereServer fue la razón por la que aprendí a hacer scripting por primera vez
  • Me gusta muchísimo el logo. ¿Tienes algún video en YouTube mostrando el progreso?

    • ¡Gracias! El logo salió casi por accidente, pero quería capturar la sensación del Moongate original
      Todavía no hay video, pero ya funcionan el login, la creación de personajes, el movimiento por el mundo, el scripting de ítems en Lua y una UI de administración basada en React
      Pronto voy a agregar un video corto de demo al README
  • Hace poco me impresionaron unos videos de la serie Ultima de Majuular en YouTube
    Gracias a eso compré Underworld y VII en GOG. Siento que me perdí unas obras maestras de los 90
    Mi hermano jugó mucho UO, y un amigo era un griefer infame llamado SirDarkSpell
    Creo que a ambos les daría muchísimo gusto ver este proyecto. Este fin de semana pienso clavármela con Stygian Abyss

    • Ultima Underworld es un juego fantástico