- Ultima Online सर्वर को .NET 10 और C# में पूरी तरह से नए सिरे से इम्प्लीमेंट करने वाला ओपन सोर्स प्रोजेक्ट, जिसका लक्ष्य AOT (पूर्व-संकलन) आधारित उच्च प्रदर्शन और स्थिर निष्पादन है
- मॉड्यूलर आर्किटेक्चर, सटीक गेम लूप प्रोसेसिंग, और पैकेट टूलिंग से लैस, तथा Lua scripting के जरिए गेम के भीतर इंटरैक्शन और AI नियंत्रण का समर्थन
- MessagePack-CSharp आधारित persistence system, TCP networking, HTTP management endpoint, Docker और monitoring stack सहित पूर्ण सर्वर इन्फ्रास्ट्रक्चर प्रदान करता है
- Lua आधारित commands, NPC AI, visual effects, UI(Gump) system जैसी script extension क्षमताओं के जरिए customizable gameplay लागू किया जा सकता है
- यह ओपन सोर्स के रूप में उपलब्ध है, और उच्च-प्रदर्शन MMO सर्वर विकास तथा legacy game restoration research के लिए उपयोगी आधुनिक .NET server framework के रूप में देखा जाता है
परियोजना अवलोकन
- Moongate v2 एक आधुनिक Ultima Online सर्वर प्रोजेक्ट है, जो .NET 10 में लिखा गया है और मॉड्यूलर संरचना तथा AOT compilation के जरिए उच्च प्रदर्शन और maintainability सुनिश्चित करता है
- इसे पैकेट परिभाषाओं के auto-generation, deterministic game loop, और test coverage वाली संरचना के साथ डिज़ाइन किया गया है
- ModernUO, RunUO, ServUO जैसे मौजूदा सर्वरों का कोड कॉपी किए बिना, उनसे प्रेरणा लेकर इसे नए सिरे से बनाया गया है
मुख्य लक्ष्य
- शुद्धता और iteration speed पर केंद्रित maintainable server foundation बनाना
- networking और game loop boundaries को स्पष्ट करना तथा thread safety सुनिश्चित करना
- type-based packet modeling और source-generation registration approach लागू करना
- AOT-friendly structure बनाए रखते हुए local development efficiency सुनिश्चित करना
वर्तमान विकास स्थिति
- TCP server, packet parsing, event bus, session management, HTTP management interface, Lua runtime जैसी मुख्य सुविधाएँ पूरी हो चुकी हैं
- Lua metadata auto-generation, console UI, timer-based game loop, A pathfinding*, lighting और weather control, email sending feature शामिल हैं
- MessagePack आधारित persistence module के जरिए snapshot और journal files में game state संग्रहीत की जाती है
- Docker image और Prometheus/Grafana monitoring stack उपलब्ध हैं, जिससे production deployment आसान होता है
scripting और command system
- Lua scripting engine (MoonSharp आधारित) अंतर्निर्मित है, जिससे NPC AI, item behavior, visual effects, UI(Gump) आदि नियंत्रित किए जा सकते हैं
- C# command registration system और Lua dynamic command registration दोनों का समर्थन है
- उदाहरण:
.teleport, .add_item_backpack, .set_world_light जैसे GM commands उपलब्ध हैं
- item ScriptId dispatch के जरिए Lua table आधारित click events को हैंडल किया जा सकता है
प्रदर्शन और benchmark
- BenchmarkDotNet से किए गए प्रदर्शन मापन के अनुसार, प्रमुख packet parsing और serialization कार्य दर्जनों nanoseconds के स्तर पर प्रोसेस होते हैं
- AOT vs JIT तुलना में कुछ कार्यों में अधिकतम 5~6 गुना प्रदर्शन सुधार देखा गया
- SpatialWorldService और ItemService जैसे गेम के मुख्य paths की processing efficiency का विस्तार से मापन किया गया है
deployment और execution
लाइसेंस और योगदान
तकनीकी विशेषताओं का सार
- C# + .NET 10 + NativeAOT आधारित MMO server framework
- Lua script integration, MessagePack persistence, Prometheus/Grafana monitoring का समर्थन
- Docker deployment और automation scripts शामिल
- उच्च-प्रदर्शन, मॉड्यूलर, test-centric design के साथ आधुनिक सर्वर विकास के लिए उपयुक्त संरचना
1 टिप्पणियां
Hacker News की टिप्पणियाँ
मैंने जितने भी गेम खेले हैं, उनमें UO(Ultima Online) जैसा ‘आम आदमी’ खिलाड़ी वाला गेम कोई नहीं था
जिन लोगों के पास ताकतवर gear नहीं था, वे भी मज़े से खेल सकते थे, और टॉप-टियर खिलाड़ी किसी सेलिब्रिटी की तरह जाने जाते थे
यह आज के गेम्स की उस दुनिया से बिल्कुल अलग था जहाँ हर कोई सुपरहीरो जैसा दिखता है
कोई महीनों तक मछुआरे या दर्जी की तरह समय बिताए, तब भी वह एक अर्थपूर्ण अनुभव होता था, और ताकतवर योद्धा व साधारण व्यापारी एक ही दुनिया में अपना-अपना आनंद पाते थे
आज के MMO सब एक ही ride वाले theme park जैसे लगते हैं, लेकिन UO एक जीवित दुनिया था जहाँ खिलाड़ी की पसंद से भूमिकाएँ बनती थीं
गेम का मकसद दुनिया को ‘हराना’ नहीं, बल्कि उसके भीतर जीना था
न quests थीं, न कोई villain, बस अच्छाई, बुराई और उनके बीच की सारी परतें मौजूद थीं
काश कोई studio इस दर्शन को फिर से साकार करे। मुझे लगता है Minecraft की सफलता की वजह भी यही sandbox nature है
मुझे EverQuest और WoW भी पसंद थे, लेकिन उनमें वैसी आज़ादी और अनगढ़ एहसास नहीं था
व्यक्तिगत रूप से मैं The Realm को भी बेहतरीन MMO दावेदार मानूँगा
यह सच में कमाल का काम है। contribution graph देखकर हैरानी हुई कि क्या यह सब सच में एक ही व्यक्ति ने किया
इसका एहसास 16 साल पहले शुरू हुए Infantry Online server emulator प्रोजेक्ट जैसा है
मैंने SourceForge के original commits भी देखे, वह 10 से ज़्यादा developers द्वारा 15 साल से अधिक समय तक maintained प्रोजेक्ट था
जानना चाहूँगा कि आपने अकेले इतना सब कैसे कर लिया
Lua scripting मैं पहले ही Lilly.Engine में implement कर चुका था, और Codex ने testing व feature implementation में मदद की
data import के लिए ModernUO की logic देखी, और items को POL से scripts के जरिए लाया
जब मैं किसी चीज़ में डूबता हूँ तो obsession के स्तर तक गहराई में जाने वाला इंसान हूँ, शायद इसलिए यह संभव हुआ
यह वाकई शानदार प्रोजेक्ट है। मैं पहले C++ आधारित UO emulator UOX3 का maintenance करता था
मैंने उसे खुद develop नहीं किया था, लेकिन community management और release की ज़िम्मेदारी संभालता था, और कनाडा के एक दोस्त के साथ private server भी चलाता था
अच्छा हुआ कि Origin ने इसे कानूनी मुद्दा नहीं बनाया
याद है, वह account मैंने eBay पर कुछ हज़ार डॉलर और MTG Mox Pearl के बदले बेचा था
उसी समय UOX के जरिए मैंने C++ सीखी और पहली बार programming की ताकत महसूस की
मैंने एक mod बनाया था जिससे आप अनंत रूप से जुड़े हुए moongates रख सकते थे, और उसी अनुभव ने मुझे programming की राह पर डाल दिया
बाद में Python सीखी और वही आगे मेरी मौजूदा career तक पहुँची। वह सच में जीवन बदल देने वाला अनुभव था
(मेरा परिचय लिंक)
उसका server structure और scripting approach बहुत दिलचस्प था, और उसने इस प्रोजेक्ट को भी प्रभावित किया
ऐसे प्रोजेक्ट्स UO emulator के इतिहास का बड़ा हिस्सा हैं
इसने सच में पुरानी यादें ताज़ा कर दीं। मैं Trinsic के पास एक छोटा घर खरीदकर bakery चलाता था
मैंने NPC merchants रखे थे ताकि मेरी गैरहाज़िरी में भी सामान बिकता रहे, और मेरा दोस्त एक tower सजाकर उसमें रहता था
WoW को housing system लाने में 20 साल लग गए, लेकिन UO के घर दुनिया के भीतर साँस लेती जगहें थे
मैंने Moongate की architecture analysis पोस्ट पढ़ी, और Source Generator से DI implement करना तथा Lua के जरिए C# recompile किए बिना behavior अलग करना बहुत प्रभावशाली लगा
आपने कहा कि NPC AI अभी नहीं है, तो क्या पारंपरिक FSM की जगह LLM-आधारित microservice को Lua से जोड़ना दिलचस्प नहीं होगा
इससे NPC के पास संदर्भयुक्त बातचीत और memory हो सकती है, और वे player input के आधार पर वास्तविक events trigger कर सकते हैं
packet layer और Lua environment पहले से अच्छे हैं, इसलिए integration भी साफ़-सुथरा लग रहा है। मैं साथ में AI logic design पर काम करना चाहूँगा
जैसे अगर आप कोई अफ़वाह पूछें, तो वही अफ़वाह वास्तव में गेम के भीतर एक घटना बनकर उभर आए
MMO servers में समय के साथ structure जटिल हो जाना आसान है, इसलिए network और game logic को अलग करने वाला clean architecture approach प्रभावशाली लगा
खासकर sector-based delta sync में, भीड़भाड़ वाले क्षेत्र में प्रवेश करते समय packet flood को आप कैसे रोकते हैं, यह जानना चाहूँगा
NativeAOT का उपयोग सिर्फ deployment सरल बनाने के लिए है या performance के लिए भी, यह भी जानना है
sector में प्रवेश करते समय आस-पास के sectors के items और mobiles sync किए जाते हैं, लेकिन जो sectors पहले से दिख रहे होते हैं उन्हें छोड़ दिया जाता है
जो items दृश्य सीमा से बाहर चले जाते हैं, उन्हें client हटा देता है, इसलिए दोबारा भेजना पड़ता है
packet transmission queue से process होती है, इसलिए game loop block नहीं होता
आगे चलकर priority-based transmission और tick spreading जोड़ने की योजना है
NativeAOT का फायदा deployment simplicity भी है, लेकिन असली बात predictable performance है। इसमें JIT delay नहीं होता और tick timing consistent रखी जा सकती है
मैं भी एक मिलते-जुलते प्रोजेक्ट में frustum-based spawning से network bursts कम करने के प्रयोग कर रहा हूँ, इसलिए यह दिलचस्प लगा
code पढ़ने में आसान है, इसलिए उससे काफी सीखने को मिलता है
संयोग से, Moongate जिस Lua engine MoonSharp का उपयोग करता है, वह हाल में फिर सक्रिय हो गया है
उसने 10 साल बाद v3.0.0 beta release निकाली है
मैं इसका मूल निर्माता नहीं हूँ, लेकिन GitHub maintainer के रूप में जुड़ा हूँ, और Tabletop Simulator भी इसी engine का उपयोग करता है
मेरा मन है कि एक server ज़रूर खोलूँ। 15 साल पहले मैं SphereServer admin था, लेकिन अपनी scripts और world data सब खो चुका हूँ
फिर भी लोगों के साथ पुराने अंदाज़ में classic UO का आनंद फिर से लेना चाहता हूँ
मैं भी पहले बहुत custom scripts बनाता था, लेकिन वे सब खो गईं
SphereServer ही वह वजह था जिससे मैंने पहली बार scripting सीखी
मुझे logo बहुत पसंद आया। क्या प्रगति दिखाने वाला कोई YouTube video है?
अभी video नहीं है, लेकिन login, character creation, world movement, Lua item scripting, और React-आधारित admin UI जैसी चीज़ें काम कर रही हैं
जल्द ही README में एक छोटा demo video जोड़ने वाला हूँ
हाल में मैंने YouTube पर Majuular की Ultima series videos देखीं और बहुत प्रभावित हुआ
उसी की वजह से मैंने GOG पर Underworld और VII खरीदे। लगता है मैंने 90s के classics मिस कर दिए थे
मेरा भाई UO बहुत खेलता था, और मेरा एक दोस्त SirDarkSpell नाम से कुख्यात griefer था
यह प्रोजेक्ट देखकर दोनों बहुत खुश होंगे। इस वीकेंड मैं Stygian Abyss में डूबने वाला हूँ