- 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
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
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
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
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
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
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
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
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
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)
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
Misalnya, saat pemain menanyakan rumor, rumor itu kemudian benar-benar muncul sebagai kejadian di dalam game
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
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
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
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
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