C# से बना पिक्सेल आर्ट ECS गेम इंजन 'Murder'
(github.com/isadorasophia)- Murder Engine FNA के ऊपर बनाया गया पिक्सेल आर्ट के लिए ECS गेम इंजन है, और यह अभी development में है, इसलिए इसमें काफी बदलाव और breaking changes की संभावना है
- शुरुआत के उदाहरण के तौर पर neocityexpress game jam project और hellomurder दिए गए हैं, जो world, entity और component बनाने का flow दिखाते हैं
- प्रोजेक्ट संरचना
gameऔरgame.editorको अलग रखती है, और अलगeditor.exeके बिना यूज़र के अपने प्रोजेक्ट के भीतर से ही editor को सीधे control करने का तरीका अपनाती है - development environment Linux, MacOS, Windows, Steam Deck को support करता है, ज़रूरी चीज़ सिर्फ .NET 8 SDK है, और game target Linux, MacOS, Windows को support करता है
- अभी NuGet package उपलब्ध नहीं है, इसलिए
.csprojमें reference के साथ git submodule वाला तरीका recommended है, और web/mobile के लिए फिलहाल कोई official support plan नहीं है
Murder Engine की प्रकृति और स्थिति
- Murder Engine FNA-आधारित पिक्सेल आर्ट ECS गेम इंजन है
- यह अभी development में चल रहा इंजन है, और release branch को stable रखने की कोशिश की जाती है, लेकिन काफी बदलाव और अभी अधूरे हिस्सों की अपेक्षा करनी चाहिए
- README में “Proceed at your own risk” कहकर चेतावनी दी गई है, और breaking changes की संभावना साफ़ बताई गई है
शुरुआत के उदाहरण और ECS सीखने का मार्ग
- जो यूज़र जल्दी examples देखकर समझना चाहते हैं, उनके लिए इन प्रोजेक्ट्स से शुरू करने की सलाह दी गई है
- game jam project: Murder architecture देखने के लिए game jam project
- Hello World project: world, entity और component creation का तरीका दिखाने वाला उदाहरण
- Murder में ECS कैसे लागू किया गया है, इसके लिए Bang documentation देखने को कहा गया है
- Bang, Murder द्वारा इस्तेमाल किया जाने वाला ECS framework है
प्रोजेक्ट संरचना और editor का तरीका
- Murder की project structure
resources,src/game,src/game.editorमें बंटी हुई हैgameमें final game के लिएbin,packed,resourcesशामिल हैंgame.editorमें game editor के लिएbinऔरresourcesशामिल हैं
- बाहरी
editor.exeनहीं है, सिर्फ यूज़र का अपना project होता है - यह संरचना MonoGame या FNA project development style की तरह पूरे project को सीधे control करने के लिए चुनी गई है
- editor को अलग project में रखने का कारण यह है कि editor code, game code को छुए नहीं, और editor side पर मनचाहे काम स्वतंत्र रूप से किए जा सकें
build और dependency का तरीका
- फिलहाल Murder के लिए NuGet package उपलब्ध नहीं है
- recommended तरीका है कि Murder को git submodule के रूप में रखा जाए और
.csprojमें उसे reference किया जाए - reference का उदाहरण HelloMurder.csproj में देखा जा सकता है
आवश्यकताएँ और supported platforms
- editor चलाने वाला development environment Linux, MacOS, Windows, Steam Deck को support करता है
- ज़रूरी requirement है .NET 8 SDK install होना
- game target platform के रूप में Linux, MacOS, Windows supported हैं
- Linux में Steam Deck शामिल है
- console support पर अभी काम चल रहा है
- web और mobile iOS·Android के लिए अभी कोई official support plan नहीं है
योगदान और feedback
- यह project अभी बहुत शुरुआती चरण में है
- सुझाव या feedback के लिए निर्माता से संपर्क किया जा सकता है, और वास्तविक उपयोग तथा feedback में उनकी रुचि बताई गई है
1 टिप्पणियां
Hacker News की राय
saint11 नाम लगा देखकर ही भरोसा हो गया था कि यह अच्छा होगा। Pixel art tutorials वाकई बहुत अच्छी तरह व्यवस्थित हैं: http://saint11.org/blog/pixel-art-tutorials/
नए game engines और ECS frameworks देखने में मज़ा आता है। ECS वाला हिस्सा, Bang, देखने पर
CarComponentजैसे components औरCarMoverSystemजैसे systems के उदाहरण मिलते हैं, और system एक class है; जो interfaces वह implement करता है, वही उसके चलने का समय तय करते दिखते हैंDOTS से थोड़ा मिलता-जुलता है, लेकिन अभी यह नहीं मिला कि systems को game में कहाँ जोड़ा जाता है और एक जैसे systems को कैसे sort किया जाता है। यह भी जानना दिलचस्प होगा कि cars और obstacles जैसी अलग-अलग queries करने वाला system कैसा दिखता है
Bang शायद source code generator का इस्तेमाल करता है।
GetComponentके विपरीत,TryGetVelocity,RemoveFriction,SetVelocityशायदVelocity,Frictioncomponents की मौजूदगी के आधार पर generate होते हैं, शायद component ID cache की वजह से, पक्का नहींयह archetype-based नहीं है; हर entity
component id => componentdictionary store करती है, और हर system track करता है कि कौन-सी entities filter से match होती हैं। performance कितनी अच्छी होगी पता नहीं, लेकिन कई games में performance से ज़्यादा developer convenience अहम हो सकती हैबदलाव भी तुरंत apply होते दिखते हैं। ऐसे में, जब कोई system किसी entity में component जोड़ता/हटाता है और filter match बदल जाता है, तो क्या उसी tick में process होना entity ID पर निर्भर करेगा, यह जानना चाहूँगा
docs को जल्दी से देखने पर ऐसी dependencies या order को explicitly बताने का तरीका नहीं दिखा, और जानना चाहूँगा कि यह engine इसे कैसे handle करता है
इस framework से बने jam game का Itch page और download: https://saint11.itch.io/neo-city-express
72-hour jam game के हिसाब से प्रभावशाली है। art और writing अच्छे हैं, और अप्रत्याशित तरीके से इसमें mechanical मज़ा भी है
बहुत अच्छा। editor काफ़ी stylish है, पसंद आया। MonoGame performance में अच्छा और cross-platform है, इसलिए हमेशा पसंद रहा है, लेकिन कोई बड़ा game नहीं बनाया, बस कभी-कभार demos बनाए हैं
अच्छा दिखता है। सोच रहा हूँ कि C# game development में GC pauses की समस्या होती है या नहीं
Q3A-style scenes और gameplay में यह बहुत robust है। हर tick में बदलने वाले scene elements बहुत कम होते हैं, इसलिए GC pauses ज़्यादातर नज़रअंदाज़ करने लायक होते हैं
.NET 6+ में DIY engine में strategically तेज़ी से repeated calls करने पर GC pauses करीब 1–5ms मापे गए। project settings में concurrent/server/background GC बंद करके foreground+workstation GC इस्तेमाल करने पर jitter सबसे कम था
विकल्प बस यही लगते हैं: memory को 100% खुद manage करें, या garbage को जितनी बार हो सके साफ़ करें। modern .NET में low-level DLL hacking जैसी काली विद्या के बिना GC को पूरी तरह बंद करना लगभग असंभव है। अगर work events या game rounds के बीच process restart कर सकते हैं, तो
Process.Exit()भी कुछ क्षेत्रों में एक वैध GC technique हैhttps://youtu.be/tzt36EGKEZo?si=WNxwcTPGFbJABKez
सिर्फ link पढ़कर साफ़ नहीं हो रहा, लेकिन Murder game engine से F# game बनाना कितना कठिन होगा, यह सोच रहा हूँ
Unity में ECS थोड़ा इस्तेमाल किया था, लेकिन Murder का ECS कहीं ज़्यादा आसान लगा। developers ने वाकई बहुत अच्छा बनाया है
मैंने Murder से एक छोटा arcade game project बनाया है, जिसे यहाँ खेल सकते हैं: https://nopetrides.itch.io/bombs-away
saint11 के introduction page पर यह लिखा है: “Murder Engine: 2D Pixel art C# ECS Game Engine made by Isa! I usually help on the render and physics side of it.”
Isa: https://isadorasophia.com/projects/
game engine से अलग बात है, लेकिन यह मज़ेदार है कि कोई malicious व्यक्ति कह सकता है, “उस hacker website के लोग murder पर चर्चा कर रहे हैं”
आजकल मैं बहुत सोचता हूँ कि ऐसे पूरी तरह harmless material को कोई determined adversary कैसे इस्तेमाल कर सकता है
फिर भी, अगर मामला इतनी आसानी से rebut हो सकता है, तो “लोग murder पर चर्चा कर रहे हैं” कहने और खुलकर झूठ बोलने में बहुत फर्क है या नहीं, पता नहीं
ECS क्या है?