5 पॉइंट द्वारा GN⁺ 2024-08-05 | 1 टिप्पणियां | WhatsApp पर शेयर करें

high_impact: JavaScript गेम इंजन को C में पोर्ट करना

सारांश

  • high_impact 2D एक्शन गेम्स के लिए एक छोटा गेम इंजन है, जिसे C में लिखा गया है और जिसे Windows, Mac, Linux और वेब के लिए WASM में compile किया जा सकता है
  • यह 2010 के JavaScript गेम इंजन Impact से प्रेरित है और MIT लाइसेंस के तहत उपलब्ध है
  • सोर्स कोड: GitHub

प्राचीन इतिहास

  • अप्रैल 2010 में Steve Jobs ने "Thoughts on Flash" नामक एक खुला पत्र जारी कर घोषणा की कि iOS पर Flash को सपोर्ट नहीं किया जाएगा
  • Flash वेब पर एक बेहद महत्वपूर्ण browser plugin था, और कई वेबसाइटें Flash गेम्स और animations पर निर्भर थीं
  • Android Flash को सपोर्ट करता था, लेकिन उसका performance अच्छा नहीं था, और Apple का यह फैसला Flash के अंत का संकेत था
  • यह साबित करने के लिए कि Flash के बिना भी JavaScript Canvas2D API का उपयोग करके वेब गेम बनाए जा सकते हैं, Biolab Disaster विकसित किया गया

C ही क्यों?

  • C एक सरल लेकिन गहराई वाली भाषा है, जो गेम डेवलपमेंट के लिए उपयुक्त है
  • JavaScript MPEG1 decoder को C में पोर्ट करने, VR implementation, image और audio format development जैसे कामों के जरिए C के प्रति लगाव फिर से जागा
  • Impact को C में दोबारा लिखना एक मजेदार अभ्यास होगा

अवधारणा

  • high_impact को न्यूनतम कोड के साथ लागू किया गया है और यह tile map loading, game object creation, update और drawing की सुविधाएँ देता है
  • यह physics और collision detection संभालता है, और इसमें simple sprite sheet animation, text drawing, sound effects और music playback शामिल हैं
  • high_impact एक library नहीं बल्कि एक framework है, इसलिए users को business logic खुद लिखना होता है
  • इसे SDL या Sokol platform backend के साथ compile किया जा सकता है

एंटिटी

  • सभी entities एक ही entity_t struct साझा करती हैं, जिसमें position, velocity, size जैसी properties होती हैं
  • macros के जरिए base entity struct को extend किया जा सकता है
  • हर entity type को function pointers देने वाला entity_vtab_t उपलब्ध कराना होता है
  • यह अधिकतम 64k active entities संभाल सकता है

collision detection और response

  • tile map के साथ collision की गणना कर सटीक collision point खोजा जाता है
  • entities के बीच collision अलग से संभाले जाते हैं, और हर entity यह परिभाषित करती है कि वह दूसरी entities से कैसे टकराएगी

rendering

  • यह OpenGL और software renderer दोनों प्रदान करता है
  • सारा rendering एक single function call के जरिए किया जाता है, और textures को मिलाने के लिए texture atlas का उपयोग होता है

sound

  • sound output को SDL2 या Sokol के जरिए संभाला जाता है
  • एक fixed संख्या में sources लोड किए जा सकते हैं, और fixed संख्या में sounds चलाए जा सकते हैं
  • sounds अपने-आप discard हो जाते हैं और दोबारा उपयोग किए जा सकते हैं

memory management

  • memory management के लिए "hunk" नाम का एक single byte array उपयोग किया जाता है
  • memory allocation के लिए bump allocator और temp allocator का उपयोग होता है
  • memory release अपने-आप संभाला जाता है, इसलिए users को memory management की चिंता नहीं करनी पड़ती

level editor

  • इसमें मूल Impact level editor "Weltmeister" शामिल है
  • इसे JavaScript में लिखा गया था और आधुनिक browser features का उपयोग कर update किया गया है
  • files को load और save करने के लिए File System API का उपयोग किया जाता है

demo game

  • Biolab Disaster और Drop, इन दो गेम्स को C में पोर्ट करके high_impact की क्षमताओं को सत्यापित किया गया

विस्तार क्षमता

  • high_impact एक पारंपरिक गेम इंजन है, जिसमें game-specific code अलग से जोड़ा जाता है
  • platform और renderer को अन्य systems के समर्थन के लिए बढ़ाया जा सकता है

GN⁺ का संक्षेप

  • high_impact, C में लिखा गया एक 2D गेम इंजन है, जो सरल लेकिन शक्तिशाली सुविधाएँ प्रदान करता है
  • यह JavaScript गेम इंजन Impact का उत्तराधिकारी है और कई platforms पर चल सकता है
  • memory management और collision detection जैसी गेम डेवलपमेंट की मुख्य सुविधाओं को यह सरल तरीके से लागू करता है
  • level editor और demo games के जरिए यह वास्तविक उपयोग के उदाहरण देता है
  • Unity या Unreal जैसे बड़े इंजनों की तुलना में यह हल्के और सरल प्रोजेक्ट्स के लिए अधिक उपयुक्त है

1 टिप्पणियां

 
GN⁺ 2024-08-05
Hacker News राय
  • कई web games Impact game engine से बनाए गए थे, और यह Cross Code, Eliot Quest, XType Plus जैसे commercial cross-platform titles की नींव रहा है

    • Cross Code एक बेहतरीन गेम है, और इसका web technologies का उपयोग प्रभावशाली था
    • मुझे लगता है कि इस engine ने Nintendo Switch hardware पर उच्च performance देने में योगदान किया होगा
  • "Thoughts on Flash" ने web platform को बचाया हो सकता था

    • Adobe के MacOS platform support छोड़ देने को लेकर काफ़ी निराशा रही होगी
    • Mac version हमेशा Windows version से पीछे रहता था
    • Jobs ने शायद सोचा होगा कि Adobe, Apple के बिना मौजूद नहीं रह सकता
  • गेम बहुत साफ़-सुथरा दिखता है

  • high_impact एक "library" नहीं बल्कि एक "framework" है

    • business logic को framework के अंदर लिखना पड़ता है
    • framework को अक्सर नकारात्मक अर्थ में ऐसी "library" कहा जाता था जो दूसरी चीज़ों के साथ अच्छी तरह नहीं चलती
    • इसके लिए एक सकारात्मक अभिव्यक्ति सुनकर अच्छा लगा
  • काफ़ी समय बाद HN account में लॉग इन करके Biolab Disaster को फिर से देखना अच्छा लगा

  • UNION का उपयोग करके polymorphic entity data structure बनाना प्रभावशाली था

    • मुझे अब भी C language पसंद है, और यही पहली language थी जो मैंने सीखी थी
    • C एक संक्षिप्त language है, लेकिन इसमें गहराई से काम किया जा सकता है
    • गेम में Commander Keen जैसी feel है, और मुझे वह franchise पसंद थी
  • QOI lossless file format और 7Zip को मिलाकर lossless PNG से बेहतर performance मिलती है

  • शायद यह player की battery life का सम्मान करने के लिए हो

  • मज़ेदार idea, अधिकतम learning value के लिए open source, बेहतरीन execution, और बिना दिखावे की स्पष्ट writing—यह एक शानदार योगदान है

    • सिर्फ़ ऐसी चीज़ें देख पाना भी अपने आप में सौभाग्य जैसा लगता है
  • 3000 license holders में से एक होने के नाते, Impact का फिर से उभरना देखकर खुशी है

    • जानना चाहता हूँ कि क्या यह Zig के साथ अच्छी तरह काम करता है
  • यह एक बेहतरीन game engine जैसा लगता है

    • समझ नहीं आता कि लेख में इसे लगभग अपने अंत के करीब क्यों बताया गया है
    • सोच रहा हूँ कि क्या अब इससे बेहतर नए engines मौजूद हैं