2 poin oleh GN⁺ 2026-03-08 | 1 komentar | Bagikan ke WhatsApp
  • Proyek open-source yang sepenuhnya mengimplementasikan ulang server Ultima Online dengan .NET 10 dan C#, menargetkan performa tinggi dan eksekusi stabil berbasis AOT (ahead-of-time compilation)
  • Memiliki arsitektur modular, pemrosesan game loop yang akurat, dan packet tooling, serta mendukung interaksi dalam game dan kontrol AI melalui scripting Lua
  • Menyediakan infrastruktur server lengkap termasuk sistem persistensi berbasis MessagePack-CSharp, jaringan TCP, endpoint manajemen HTTP, serta Docker dan stack monitoring
  • Memungkinkan gameplay yang dapat dikustomisasi melalui fitur ekstensi scripting seperti perintah berbasis Lua, AI NPC, efek visual, dan sistem UI (Gump)
  • Dirilis sebagai open source dan dinilai sebagai framework server .NET modern yang berguna untuk pengembangan server MMO berperforma tinggi dan riset restorasi game legacy

Gambaran proyek

  • Moongate v2 adalah proyek server Ultima Online modern yang ditulis dengan .NET 10, menghadirkan struktur modular dan kompilasi AOT untuk memastikan performa tinggi dan kemudahan pemeliharaan
  • Dirancang dengan struktur yang mencakup generasi otomatis definisi paket, game loop deterministik, dan cakupan pengujian
  • Dibangun ulang dari nol tanpa menyalin kode dari server yang sudah ada seperti ModernUO, RunUO, dan ServUO, meski terinspirasi dari proyek-proyek tersebut

Tujuan utama

  • Membangun fondasi server yang mudah dipelihara dengan fokus pada akurasi dan kecepatan iterasi
  • Memperjelas batas antara jaringan dan game loop serta memastikan keamanan thread
  • Menerapkan pemodelan paket berbasis tipe dan registrasi melalui source generation
  • Menjaga struktur yang ramah AOT sambil tetap menjamin efisiensi pengembangan lokal

Status pengembangan saat ini

  • Fitur inti seperti server TCP, parsing paket, event bus, manajemen sesi, antarmuka administrasi HTTP, dan runtime Lua telah diimplementasikan
  • Mencakup generasi otomatis metadata Lua, UI konsol, game loop berbasis timer, pathfinding A*, kontrol pencahayaan dan cuaca, serta fitur pengiriman email
  • Menyimpan status game melalui modul persistensi berbasis MessagePack ke file snapshot dan journal
  • Menyediakan image Docker dan stack monitoring Prometheus/Grafana agar deployment lingkungan operasional lebih mudah

Sistem scripting dan perintah

  • Menyertakan mesin scripting Lua (berbasis MoonSharp) untuk mengendalikan AI NPC, perilaku item, efek visual, UI (Gump), dan lainnya
  • Mendukung secara bersamaan sistem registrasi perintah C# dan registrasi perintah dinamis Lua
  • Contoh: perintah GM seperti .teleport, .add_item_backpack, .set_world_light
  • Memungkinkan penanganan event klik berbasis tabel Lua melalui dispatch ScriptId item

Performa dan benchmark

  • Berdasarkan pengukuran performa dengan BenchmarkDotNet, parsing paket utama dan pekerjaan serialisasi diproses dalam puluhan nanodetik
  • Dalam perbandingan AOT vs JIT, beberapa pekerjaan menunjukkan peningkatan kecepatan hingga 5–6 kali
  • Efisiensi pemrosesan pada jalur inti game seperti SpatialWorldService dan ItemService telah diukur secara rinci

Deployment dan eksekusi

  • Membutuhkan .NET SDK 10.0.x
  • Prosedur dasar menjalankan:
    dotnet restore
    dotnet build
    dotnet run --project src/Moongate.Server
    
  • Pengaturan detail seperti port HTTP, game loop, email, dan scripting dapat dikendalikan melalui konfigurasi berbasis environment variable (MOONGATE_*)
  • Menyediakan contoh Docker Compose, dengan port default 2593 (game) dan 8088 (HTTP)

Lisensi dan kontribusi

Ringkasan karakteristik teknis

  • Framework server MMO berbasis C# + .NET 10 + NativeAOT
  • Mendukung integrasi script Lua, persistensi MessagePack, dan monitoring Prometheus/Grafana
  • Menyertakan deployment Docker dan skrip otomatisasi
  • Desain berperforma tinggi, modular, dan berfokus pada pengujian sehingga cocok untuk pengembangan server modern

1 komentar

 
GN⁺ 2026-03-08
Komentar Hacker News
  • Dari semua game yang pernah kumainkan, tidak ada yang punya pemain ‘rakyat biasa’ sebanyak UO(Ultima Online)
    Bahkan orang yang tidak mendapatkan gear kuat tetap bisa bermain dengan senang, dan para pemain papan atas dikenal layaknya selebritas
    Benar-benar berbeda dari game modern, di mana semua orang terlihat seperti superhero

    • Sangat setuju. UO punya ekonomi dan kelas sosial yang nyata
      Menghabiskan berbulan-bulan sebagai pemancing atau penjahit pun tetap terasa bermakna, dan petarung kuat serta pedagang biasa bisa menikmati dunianya dengan cara masing-masing
      MMO modern terasa seperti taman hiburan tempat semua orang menaiki wahana yang sama, sedangkan UO adalah dunia hidup tempat peran terbentuk dari pilihan pemain
    • Tujuanku dulu adalah menjadi pandai besi legendaris. Crafting adalah endgame itu sendiri, dan semua perlengkapan serta furnitur berasal dari tangan seseorang
      Tujuan game ini bukan untuk ‘mengalahkan’ dunia, melainkan menjalani hidup di dalamnya
      Tidak ada quest, tidak ada villain, hanya ada kebaikan, kejahatan, dan semua yang berada di antaranya
      Semoga ada studio yang mencoba mewujudkan filosofi ini lagi. Menurutku Minecraft berhasil juga karena sifat sandbox seperti ini
    • UO adalah game online terbaik yang pernah kualami. Game-game lain hanya berdiri dalam bayangannya
      Aku juga suka EverQuest dan WoW, tapi keduanya tidak punya rasa kebebasan dan keliaran yang sama
      Secara pribadi, The Realm juga layak disebut kandidat MMO terbaik
    • Justru rasanya punya nuansa modern yang lebih kuat dibanding sekarang. Itu juga alasan aku suka Stardew Valley dan Animal Crossing
    • Sepertinya aku akan mengejar kesenangan murni saat bermain UO itu seumur hidup. Bahkan sekarang pun rasanya ingin berhenti kerja dan main seharian
  • Ini benar-benar pekerjaan yang luar biasa. Saat melihat grafik kontribusi, aku kaget ini benar-benar dikerjakan sendirian
    Rasanya mirip dengan proyek emulator server Infantry Online yang dimulai 16 tahun lalu
    Aku bahkan menemukan commit asli di SourceForge, dan itu adalah proyek yang dipelihara lebih dari 15 tahun oleh lebih dari 10 developer
    Jadi aku penasaran bagaimana bisa sebanyak ini diselesaikan sendirian

    • Aku membangun fondasinya dengan cepat menggunakan infrastruktur dari percobaan pertamaku, Moongate, dan Prima
      Scripting Lua sebelumnya sudah pernah kuimplementasikan di Lilly.Engine, dan Codex membantu testing serta implementasi fitur
      Untuk import data, aku mengacu pada logika ModernUO, dan item diambil dari POL lewat script
      Kalau sudah tenggelam dalam sesuatu, aku memang punya kecenderungan mendalami sampai obsesif
    • Frontend web sepenuhnya dikembangkan Codex dengan React. Aku tidak suka frontend development
  • Proyek yang sangat keren. Dulu aku pernah memelihara emulator UO berbasis C++ UOX3
    Aku bukan pengembang aslinya, tapi menangani pengelolaan komunitas dan rilisan, dan juga menjalankan server pribadi bersama seorang teman dari Kanada
    Syukurlah Origin tidak mempermasalahkannya secara hukum

    • Waktu masih SMA aku main UO sampai merasa kecanduan, lalu menjual akun dan berhenti
      Aku ingat menjual akun itu di eBay seharga beberapa ribu dolar plus MTG Mox Pearl
      Saat itulah aku pertama kali merasakan kekuatan pemrograman sambil belajar C++ lewat UOX
      Dengan mod buatanku sendiri, aku bisa menaruh moongate yang saling terhubung tanpa batas, dan pengalaman itu membawaku ke jalan pemrograman
      Setelah itu aku belajar Python dan berlanjut sampai ke karierku sekarang. Itu benar-benar pengalaman yang mengubah hidup
      (tautan perkenalanku)
    • Senang mendengarnya! Sebenarnya UOX3 adalah salah satu inspirasi Moongate
      Struktur server dan pendekatan scripting-nya menarik, jadi ikut memengaruhi proyek ini
      Proyek-proyek seperti itu adalah bagian besar dari sejarah emulator UO
  • Ini benar-benar membangkitkan nostalgia. Dulu aku membeli rumah kecil dekat Trinsic dan menjalankan toko roti
    Aku bisa mempekerjakan pedagang NPC agar tetap menjual barang saat aku sedang offline, dan temanku tinggal di sebuah menara yang ia dekor sendiri
    WoW butuh 20 tahun untuk menghadirkan sistem housing, tetapi housing di UO adalah ruang hidup di dalam dunia

  • Aku membaca tulisan analisis arsitektur Moongate, dan struktur mengimplementasikan DI dengan Source Generator serta memisahkan perilaku lewat Lua tanpa perlu recompile C# sangat mengesankan
    Katanya AI NPC masih belum ada, jadi bagaimana kalau menghubungkan microservice berbasis LLM ke Lua alih-alih memakai FSM tradisional
    NPC bisa punya percakapan yang kontekstual dan memori, lalu memicu event sungguhan sesuai input pemain
    Karena lapisan packet dan environment Lua-nya sudah matang, integrasinya juga sepertinya akan rapi. Aku ingin ikut merancang logika AI bersama

    • Ide yang sangat menarik. Percakapan NPC bahkan bisa berkembang menjadi sistem yang mengubah dunia itu sendiri
      Misalnya, saat pemain menanyakan rumor, rumor itu kemudian benar-benar muncul sebagai kejadian di dalam game
    • Aku tertarik. Silakan hubungi lewat GitHub
  • Server MMO biasanya mudah menjadi rumit seiring waktu, jadi pendekatan clean architecture yang memisahkan network dan game logic sangat mengesankan
    Aku terutama penasaran, dalam sector-based delta sync, bagaimana lonjakan packet dicegah saat masuk ke area ramai
    Aku juga ingin tahu apakah alasan memakai NativeAOT murni demi kemudahan deployment, atau karena performa

    • Itu memang motivasi utamanya. Codebase UO lama membuat network, storage, dan logic saling terikat, jadi aku mencoba pendekatan baru berbasis .NET
      Saat masuk sector, item dan mobile di sector sekitar akan disinkronkan, tetapi sector yang sudah terlihat dikecualikan
      Item yang keluar dari jangkauan pandang akan dibuang oleh client, jadi memang perlu dikirim ulang
      Pengiriman packet diproses lewat queue agar game loop tidak terblokir
      Ke depannya aku berencana menambahkan priority-based sending dan tick spreading
      NativeAOT memang membantu deployment lebih sederhana, tetapi yang utama adalah performa yang dapat diprediksi. Tidak ada jeda JIT, dan timing tick bisa tetap konsisten
    • Pencegahan lonjakan packet tampaknya pada dasarnya bergantung pada proximity loading
      Aku juga sedang bereksperimen mengurangi network burst lewat spawning berbasis frustum di proyek serupa, jadi ini menarik buatku
      Kodenya mudah dibaca, jadi sangat membantu sebagai referensi
  • Kebetulan, engine Lua yang dipakai Moongate, MoonSharp, belakangan ini kembali aktif
    Setelah 10 tahun, mereka merilis beta v3.0.0
    Aku bukan pembuat aslinya, tapi ikut sebagai maintainer GitHub, dan engine ini juga dipakai di Tabletop Simulator

  • Aku benar-benar ingin membuka sebuah server. Lima belas tahun lalu aku adalah admin SphereServer, tapi semua script dan data world-ku hilang
    Meski begitu, aku tetap ingin kembali menikmati UO klasik bersama orang-orang seperti dulu

    • Tidak menyangka akan melihat SphereServer disebut di sini!
      Aku juga dulu banyak membuat script kustom, tapi semuanya hilang
      SphereServer adalah titik awal yang membuatku pertama kali belajar scripting
  • Aku sangat suka logonya. Apakah ada video YouTube yang menunjukkan progresnya

    • Terima kasih! Logo itu tercipta secara kebetulan, tapi aku ingin menangkap nuansa Moongate dari karya aslinya
      Video belum ada, tapi saat ini login, pembuatan karakter, perpindahan dunia, scripting item Lua, dan UI administrasi berbasis React semuanya sudah berjalan
      Dalam waktu dekat aku berencana menambahkan video demo singkat ke README
  • Belakangan aku terkesan setelah menonton video seri Ultima dari Majuular di YouTube
    Gara-gara itu aku membeli Underworld dan VII di GOG. Rasanya seperti melewatkan mahakarya era 90-an
    Kakakku dulu banyak bermain UO, dan temanku bernama SirDarkSpell adalah griefer terkenal
    Keduanya pasti akan senang melihat proyek ini. Akhir pekan ini aku berencana tenggelam dalam Stygian Abyss

    • Ultima Underworld adalah game yang fantastis