वीडियो गेम लिखने के लिए प्रयोगात्मक नई तकनीक Core
(github.com/damn)-
coreCore क्या है
- coreCore वीडियो गेम लिखने का एक प्रयोगात्मक तरीका है, जो Action-RPG गेम निर्माण टूल, इंजन और property editor के रूप में काम करता है
- यह एक सरल component system का उपयोग करता है, और components
[keyword value]रूप के clojure vectors होते हैं - विभिन्न entities clojure maps से बनी होती हैं
- गेम के भीतर side effects को
[:tx/foo param]जैसे components से संभाला जाता है, जो datomic structure जैसा है - पूरे गेम की state
app/stateनाम के एक atom में स्टोर होती है, और entities भी main atom के भीतर atom के रूप में मौजूद रहती हैं - application की पूरी सामग्री
resources/properties.ednमें स्टोर होती है, जिसे malli-schemas के जरिए validate किया जाता है और GUI से edit किया जा सकता है
-
स्क्रीनशॉट
-
विकास शुरू करने का तरीका
- नीचे दिया गया command चलाएँ:
lein dev
- application शुरू होगा और साथ में ये काम भी करेगा:
- NREPL-server शुरू करना
- application बंद होने पर (main menu में ESC), clojure.tools.namespace बदली हुई files को refresh करता है और app को restart करता है
- error होने पर JVM को restart करने की ज़रूरत नहीं; error ठीक करके
dev-loop/restart!कॉल करें - VIM में F5 key पर यह command bind करके इस्तेमाल किया जा सकता है:
nmap <F5> :Eval (do (in-ns 'dev-loop)(restart!))
- नीचे दिया गया command चलाएँ:
-
कोड लाइसेंस
- MIT लाइसेंस के तहत उपलब्ध
-
एसेट लाइसेंस
- इस्तेमाल किए गए assets proprietary हैं और open source नहीं हैं
- tileset: https://winlu.itch.io/
- जीव, items, skill icons, FX और अन्य assets: https://www.oryxdesignlab.com
- cursor: Leonid Deburger https://deburger.itch.io/
- इस्तेमाल किए गए assets proprietary हैं और open source नहीं हैं
GN⁺ का सार
- coreCore ऐसा टूल है जो Action-RPG गेम को आसानी से बनाने देता है और एक सरल component system से गेम state को मैनेज करता है
- पूरे गेम की state को एक atom में स्टोर किया जाता है, और GUI के जरिए properties edit की जा सकती हैं, इसलिए यह developers के लिए उपयोगी है
- यह MIT लाइसेंस के तहत उपलब्ध है, लेकिन इस्तेमाल किए गए assets proprietary हैं
- समान फीचर्स वाले tools में RPG Maker, Unity आदि शामिल हैं
1 टिप्पणियां
Hacker News की राय
बढ़िया। मैंने कभी गेम रिलीज़ नहीं किया है, लेकिन गेम डेवलपमेंट के अलग-अलग approaches देखना मुझे हमेशा पसंद है
अब तक Bevy शुरुआत में अच्छा लगता था, लेकिन implementation में कई समस्याएँ थीं और यह messy हो सकता था। Unity में gameobject और compositional component वाला तरीका सबसे व्यावहारिक लगा, क्योंकि engine रास्ते में नहीं आता और spaghetti से बचना आसान था
Godot मुझे पसंद नहीं आया। object-oriented की खराब hierarchy, कमजोर built-in language, और spaghetti घटाने के लिए बने “signals” ने उल्टा उसे और बढ़ा दिया। Pygame छोटे projects के लिए काफ़ी अच्छा है, और procedural आधार पर आप object-oriented या functional layers खुद चढ़ा सकते हैं
Clojure के बारे में मुझे नहीं पता, लेकिन जिस क्षेत्र में आम तौर पर object-oriented approach अच्छी फिट लगती है, वहाँ functional implementation आज़माना दिलचस्प है
Godot के signals, Unity की built-in classes में modularity की कमी की तुलना में बड़ा सुधार हैं। Godot और Unity मूलतः एक ही scene/node/component model रखते हैं, लेकिन मेरे हिसाब से Godot इसे बेहतर करता है
Unity की खूबियाँ 3D renderer, built-in PhysX, C# के लिए il2cpp backend, profiler, कुल runtime performance और console support हैं। दूसरी ओर Godot का design ज़्यादा cohesive है, जबकि Unity करीब 2018 से 10 दिशाओं में बिखरता हुआ लगता है
आजकल मैं C++ embedded तरफ़ हूँ, इसलिए object-oriented ज़्यादा इस्तेमाल नहीं करता, लेकिन मैंने programming C# से सीखी थी, इसलिए inheritance से परिचित हूँ
Unity जिन क्षेत्रों में आगे है वे “Triple I” और “Double A” स्तर के हैं, क्योंकि उसके 3D/performance features, tools और add-ons बेहतर हैं। AAA projects के लिए दोनों ही सबसे अच्छे विकल्प नहीं हैं
2D और साधारण 3D games में अब Unity इस्तेमाल करने की वजह नहीं दिखती, और लगता है Godot धीरे-धीरे आगे निकलेगा जबकि Unity का market share लगातार घटेगा
nodes और editor में bug हैं या features, समझ न आने वाली चीज़ें सबसे ज़्यादा परेशान करती हैं, और शुरुआत में यह “छोटे” projects के लिए बना था, ऐसा एहसास बहुत मजबूत है
इसलिए editor को मैं scene composition और मोटे तौर पर hierarchy set करने के अलावा लगभग इस्तेमाल नहीं करता। रोज़मर्रा के tools Emacs+C# LSP हैं, debugging के लिए VS Code, और scene tree adjust करने के लिए Godot editor इस्तेमाल करता हूँ
यह मूलतः Python में slot/emit semantics जोड़कर editor के साथ integrate किया हुआ रूप है, इसलिए उल्टा ठीक ही है। build system, metadata और external config files से integrate करने वाले जटिल तरीकों की तुलना में इसका language के अंदर होना बेहतर है
कहते हैं कि game development को simple बना सकते हैं, और फिर Clojure vectors, datomics, atoms, transactions, malli schemas जैसे jargon की भरमार कर देते हैं। कोई समझा सकता है?
यह game elements और properties को सरल data structures के रूप में represent करता है, और पूरी game state को एक container (app/state) में store करता है ताकि management और updates आसान हों
साथ ही यह एक GUI देता है जिससे single file (resources/properties.edn) में stored game content edit किया जा सके, ताकि non-programmers के लिए भी access आसान हो। Malli schema से data validation करके content consistency और errors में कमी लाने का लक्ष्य है
Clojure vector मूलतः list के काफ़ी करीब है। atom immutable data structure की ओर इशारा करने वाला mutable reference है, और इसे खास update semantics वाले pointer की तरह देख सकते हैं
transaction database transaction जैसा है: कई data structures को साथ में बदलता है, लेकिन सभी operations सफल हों तभी commit करता है; fail होने पर rollback या retry करता है
Malli schema dynamic typed language में type checking करने का तरीका है, और Datomic immutable data structures पर आधारित non-SQL database implementation है, जो changes को destructively overwrite नहीं करता बल्कि सिर्फ़ append करता है, ताकि past के किसी भी point पर वापस जाकर देखा जा सके
मेरे हिसाब से इस model को सीखने का सबसे अच्छा तरीका Clojure के creator Rich Hickey का “Are we there yet” talk देखना है
[1 2 3]जैसा दिखता हैमैं इसका इस्तेमाल
[:tx/foo 3]जैसे side effects compose करने के लिए करता हूँ, और Datomic की तरह इन्हें transaction कहता हूँ। यहाँ:tx/fookeyword है और component behavior को uniquely identify करता हैसच कहूँ तो यह project असल में fail हुआ लगता है। यह over-engineered chaos है और इसमें clear structure नहीं है
सबसे बड़ी समस्या यह है कि specification बिल्कुल नहीं है। या तो game story बनाई नहीं गई, या शायद सोचा गया कि game को story की ज़रूरत नहीं है। इसलिए बस Clojure में coding मज़ेदार लगी और पागलों की तरह code कर दिया
कुछ cool try करना अच्छी बात है, और यह ऐसा area है जिसमें बहुत लोगों की दिलचस्पी है
गेम डेवलपर के तौर पर यह GitHub मुझे हास्यास्पद लगता है। यह उन अकादमिक आत्ममुग्धता की पैरोडी जैसा है जिसे गेम डेवलपर नापसंद करते हैं। ऊपर से बदसूरत screenshots इसे पूरा कर देते हैं
ऐसी अजीब अकादमिक आत्ममुग्धता से निकले कुछ games भी याद आते हैं। sibling comment में Jonathan Blow भी है, और यह project देखते ही मुझे Braid याद आया
Procedural generation भी पहले ivory tower वाला विषय था, और 3D graphics की हर advancement शुरू में conferences से निकले पूरी तरह अव्यावहारिक papers से शुरू हुई थी। आज games में mainstream बनी कई चीजें कभी niche academic ideas थीं
यह क्या करता है, यह बताने के बुनियादी चरण में ही असफल है
अगर boredom की वजह से आप कुछ बनाते ही नहीं, तो यह उल्टा फायदा ही है। Indie development में Jonathan Blow के Jai इस्तेमाल करने वाले logic जैसा है
हैरानी है कि इस repository के docs इतने कम होने के बावजूद काफी बातचीत निकली। code देखने पर यह game engine से ज्यादा एक project जैसा लगता है
property editor दिलचस्प है, लेकिन लगता है इस post को content से ज्यादा title की वजह से upvotes मिल रहे हैं
अच्छा है। मेरी तरह Clojure में game development करने वाले developer को देखकर खुशी हुई। कभी-कभी हम खुद अपना काम ज्यादा मुश्किल बना लेते हैं :)
अभी मैं Clojure में 3D multiplayer TPS shooter develop कर रहा हूं। interest हो तो demo यहां है: https://prototype-game.pages.dev
जल्द ही development journey पर blog post भी डालने वाला हूं
मुझे Clojure पसंद है, लेकिन immutable data structures इस्तेमाल करने वाली functional language वीडियो गेम development के लिए थोड़ी अजीब choice नहीं है?
functional game development से जुड़े मेरे पसंदीदा लेख ये हैं:
https://prog21.dadgum.com/228.html
https://prog21.dadgum.com/23.html
https://prog21.dadgum.com/24.html
https://prog21.dadgum.com/25.html
https://prog21.dadgum.com/26.html
बाकी, Lisp से आप लगभग कुछ भी कर सकते हैं। Clojure की immutable data structures handle करने की शैली और बेहतरीन protocol system(https://www.freshcodeit.com/blog/clojure-protocols-and-the-e...) की वजह से पूरा game अलग-अलग components में आसानी से बांट पाया
Clojure में Ruby या Python से बेहतर performance potential है, और दोनों ही commercial indie games में सचमुच इस्तेमाल हो चुके हैं
studios स्वाभाविक रूप से risk-averse होते हैं, और object-oriented या बड़े swarms के लिए ECS जैसी परिचित strategies पसंद करते हैं
personally मुझे लगता है कि functional programming अच्छी fit हो सकती है, लेकिन पहले ऐसा architecture ढूंढना होगा जो real game development problems solve करे। शुरुआत छोटे experiments से करनी होगी, और game jams इसके लिए perfect हैं
Unreal Engine 4 पर चलने वाला Core नाम का commercial game creation platform पहले से मौजूद है
https://en.wikipedia.org/wiki/Core_(video_game)
लगता है नाम गलत चुना गया है। इसी space में यह पहले से इस्तेमाल हो रहा है: https://www.coregames.com/create
“game engine पर लगाए गए time/complexity” और “निकले game की complexity/interestingness” के data का analysis करना interesting होगा
game developer के तौर पर, मेरा अनुमान है कि simple template/engine systems से निकलने वाले नए games का payoff diminishing log curve जैसा होगा
दूसरे शब्दों में, cookie बनाने वाली machine जितनी बेहतर बनाते जाते हैं, cookies की variety उतनी घटती जाती है