1 पॉइंट द्वारा GN⁺ 2023-12-10 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
GN⁺ 2023-12-10
Hacker News की राय
  • saint11 नाम लगा देखकर ही भरोसा हो गया था कि यह अच्छा होगा। Pixel art tutorials वाकई बहुत अच्छी तरह व्यवस्थित हैं: http://saint11.org/blog/pixel-art-tutorials/

    • पहली बार देखा, और बस थोड़ी देर सरसरी नज़र डालने से ही यकीन हो गया कि यह पूरे इंटरनेट का सबसे अच्छा ब्लॉग है
    • पता नहीं था कि यह वही व्यक्ति हैं। पहले यह tutorial देखा था, और जिस तरह content को फैलाकर दिखाया गया है वह शानदार था
    • लगता है saint11 ने गेम Celeste का art किया है
    • Celeste और Towerfall पर काम किया है, और दोनों में pixel art बेहतरीन है। वे सच में बहुत प्रतिभाशाली लगते हैं
  • नए 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, Friction components की मौजूदगी के आधार पर generate होते हैं, शायद component ID cache की वजह से, पक्का नहीं
    यह archetype-based नहीं है; हर entity component id => component dictionary store करती है, और हर system track करता है कि कौन-सी entities filter से match होती हैं। performance कितनी अच्छी होगी पता नहीं, लेकिन कई games में performance से ज़्यादा developer convenience अहम हो सकती है
    बदलाव भी तुरंत apply होते दिखते हैं। ऐसे में, जब कोई system किसी entity में component जोड़ता/हटाता है और filter match बदल जाता है, तो क्या उसी tick में process होना entity ID पर निर्भर करेगा, यह जानना चाहूँगा

    • system execution order भी जानना चाहूँगा। नए systems को fixed list में manually जोड़ना झुंझलाहट भरा हो सकता है, लेकिन साथ ही systems के बीच अक्सर implicit dependencies होती हैं, इसलिए compile time पर execution order fix करना भी अहम है
      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 की समस्या होती है या नहीं

    • simple object management और simulation delay के छोटे multiple intervals पर GC.Collect() को explicitly call करने से काफ़ी अच्छा काम हुआ। optimal point scene content और gameplay style, यानी scene objects कैसे बदलते हैं, इस पर निर्भर लगता है
      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 है
    • होती है। Miguel de Icaza की एक अच्छी talk है जिसमें game engines में C# जोड़ने का इतिहास है, और यह भी कि Swift की reference counting GC pause problem से बचती है—इसी वजह से वे Godot में Swift के इस्तेमाल को लेकर उत्साहित हैं
      https://youtu.be/tzt36EGKEZo?si=WNxwcTPGFbJABKez
    • मुझे लगता है GC problem लगभग सिर्फ Unity वाली है। Stride जैसे दूसरे game engines जो normal .NET इस्तेमाल करते हैं, बिना समस्या चलते हैं
    • होती है। Unity तो है ही, Unreal में भी GC है, इसलिए startup पर allocate करना और object pooling इस्तेमाल करना चाहिए
    • ज़्यादातर दूसरी languages की तरह C# में भी allocation avoid करते हुए code लिखा जा सकता है
  • सिर्फ link पढ़कर साफ़ नहीं हो रहा, लेकिन Murder game engine से F# game बनाना कितना कठिन होगा, यह सोच रहा हूँ

  • Unity में ECS थोड़ा इस्तेमाल किया था, लेकिन Murder का ECS कहीं ज़्यादा आसान लगा। developers ने वाकई बहुत अच्छा बनाया है
    मैंने Murder से एक छोटा arcade game project बनाया है, जिसे यहाँ खेल सकते हैं: https://nopetrides.itch.io/bombs-away

    • क्या फर्क थोड़ा और detail में समझा सकते हैं?
  • 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 कैसे इस्तेमाल कर सकता है

    • थोड़ा खिंचा हुआ लगता है, लेकिन The Onion articles को literal मान लेने वाले लोग भी हुए हैं
      फिर भी, अगर मामला इतनी आसानी से rebut हो सकता है, तो “लोग murder पर चर्चा कर रहे हैं” कहने और खुलकर झूठ बोलने में बहुत फर्क है या नहीं, पता नहीं
    • इसी तरह, बस उल्टा सोचकर, mass media news consume करने का यही एकमात्र तरीका है। आजकल सब कुछ यकीन करना मुश्किल हो इतना biased और हास्यास्पद है
  • ECS क्या है?

    • शायद Entity Component System। game engines में common architecture है
    • यह आजकल trend में high-performance architecture है। Unity हाल में इसे बहुत popular बनाने की कोशिश कर रहा है