9 पॉइंट द्वारा GN⁺ 2025-11-22 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • AthenaEnv नाम के एक open source environment की मदद से अब PlayStation 2 पर JavaScript code चलाना संभव हो गया है
  • यह environment QuickJS engine को embed करता है, JavaScript को interpret करता है, और rendering, input, sound, file handling जैसी game development APIs देता है
  • डेवलपर सिर्फ main.js, athena.ini, athena.elf जैसी basic file structure के साथ गेम लिख सकते हैं और उन्हें PCSX2 emulator में चला सकते हैं
  • तैयार प्रोजेक्ट को .iso file के रूप में package करके single-file format में distribute किया जा सकता है, जिसके लिए zip→iso conversion प्रक्रिया भी बताई गई है
  • यह retro console development और web technologies के मेल का एक उदाहरण है, जो JavaScript-आधारित game development की विस्तार संभावनाओं की ओर इशारा करता है

AthenaEnv प्रोजेक्ट का अवलोकन

  • AthenaEnv एक PS2 के लिए JavaScript runtime environment है, जो पारंपरिक game engine की जगह API-केंद्रित development environment देता है
    • अंदरूनी तौर पर यह QuickJS को modify और embed करके JavaScript code को interpret करता है
    • इसे इस तरह बनाया गया है कि PS2 native program (C में लिखा गया) JavaScript code चला सके
  • उपलब्ध APIs में rendering, asset loading, input handling, file I/O, sound playback शामिल हैं
    • abstraction का स्तर p5.js या Raylib जैसा है, इसलिए collision detection या scene management जैसी चीजें खुद implement करनी होंगी

PS2 पर JavaScript गेम चलाने की प्रक्रिया

  • इसे चलाने के लिए PCSX2 emulator का उपयोग होता है, और settings में “Enable host filesystem” option चालू करना होगा
  • प्रोजेक्ट फ़ोल्डर में ये फ़ाइलें शामिल होती हैं
    • athena.elf: Athena executable file
    • athena.ini: entry point (main.js) और boot logo settings जैसी configuration
    • main.js, src/, assets/: game code और resources
  • emulator में athena.elf चलाने पर गेम शुरू हो जाता है, और JavaScript code बदलने के बाद reset करके तुरंत बदलाव देखे जा सकते हैं

.iso file बनाने की प्रक्रिया

  • distribution के लिए प्रोजेक्ट को एक single ISO image में पैक करने का तरीका बताया गया है
    • ज़रूरी फ़ाइलें: athena.elf, athena.ini, main.js, src/, ATHA_000.01, SYSTEM.CNF
    • सभी फ़ाइलों को चुनकर zip में compress करें, फिर mconverter.eu साइट से उसे iso में convert करें
    • conversion के बाद “Enable host filesystem” setting के बिना भी इसे चलाया जा सकता है
  • इस conversion को automate करने के लिए Python-आधारित CLI tool GENISO(https://github.com/scottvr/GENISO) का भी परिचय दिया गया है
    • यह बिना external dependency के zip को iso में convert कर सकता है

Hello World उदाहरण

  • basic example में font और image loading, game loop बनाना, sprite animation, input handling, text rendering को implement किया गया है
    • Athena के built-in modules जैसे Screen, Font, Image, Pads का उपयोग होता है
    • Screen.display() method से frame-by-frame loop चलाया जाता है
    • Pads.get(0) से controller input detect किया जाता है
    • sprite के startx, endx जैसी properties से frame-based animation control होता है
    • font.print() से FPS या text output दिखाया जाता है
  • sprite flip करने के लिए width में negative value दी जाती है, और position correction के लिए offset calculation की ज़रूरत पड़ती है

3D support और आगे का विकास

निष्कर्ष

  • AthenaEnv एक ऐसा अभिनव environment है जो सिर्फ JavaScript से PS2 गेम बनाने देता है
  • यह web developers को भी retro console के लिए game development तक पहुँच देता है, और
    JavaScript ecosystem की विस्तार क्षमता और compatibility को दिखाता है

1 टिप्पणियां

 
GN⁺ 2025-11-22
Hacker News टिप्पणियाँ
  • ऐसा लगता है कि Fabrice Bellard के प्रोजेक्ट्स का असर वाकई बहुत व्यापक है
    QuickJS की वजह से PS2 जैसे पुराने सिस्टम पर भी AthenaEnv के ज़रिये homebrew का फिर से उभार संभव होना शानदार है

    • मेरी Photoshop स्किल लगभग न के बराबर है, इसलिए कर नहीं पाया, लेकिन xkcd 2347 meme में “Fabrice Bellard ने आधी नींद में बस यह साबित करने के लिए इसे implement कर दिया” लिखना चाहता था
      कई FOSS projects की dependency chain में कहीं न कहीं उसका code शामिल है
  • लेखक ने ZIP को ISO में बदलने वाली वेबसाइट इस्तेमाल करने की असुविधा का ज़िक्र किया, तो मैंने खुद एक cross-platform Python script बना दी जिसमें कोई external dependency नहीं है
    इसे ZIP2ISO.py पर देखा जा सकता है
    यह दिलचस्प लगा कि ISO9660 spec पढ़े बिना Gemini3 Pro के साथ इसे “vibe-coded” किया गया

    • लगता है यही काम mkisofs से भी किया जा सकता है
  • AthenaEnv दिलचस्प है। लगता है यह QuickJS को JS interpreter की तरह इस्तेमाल करता है और PS2 की native system libraries को wrap करता है
    सोच रहा हूँ कि क्या modern consoles (Switch/2, PS5, Xbox) पर भी JS Canvas(WebGPU/WebGL) games deploy करने के लिए ऐसा कोई मिलता-जुलता प्रोजेक्ट है
    console SDKs NDA के तहत होते हैं, इसलिए सार्वजनिक जानकारी लगभग नहीं के बराबर है, और ज़्यादातर games Unreal या Unity इस्तेमाल करते हैं
    PC या mobile पर Electron या WebView से चलाना आसान है, इसलिए वहाँ मामला तुलनात्मक रूप से सरल है

    • JS में बना game Cross Code consoles पर port किया गया था। पूरी प्रक्रिया इस ब्लॉग पोस्ट में लिखी है
    • याद है कि Nintendo 3DS और Wii U SDK में web technology आधारित Electron-जैसा framework था, लेकिन Switch में उसे बंद कर दिया गया
      Switch का WebKit browser applet JIT disabled होने की वजह से e-manual जैसे सीमित उपयोगों तक ही सिमटा है
  • सोच रहा था कि असली console पर चलाने के लिए क्या ISO को disc पर burn करना पड़ेगा

    • FreeDVDBoot के साथ मिलाकर देखें तो संभव लगता है
    • memory card पर FreeMcBoot + USB flash drive वाला setup एक लोकप्रिय तरीका है। इससे optical drive की घिसावट भी कम हो सकती है
    • disc burn करके चलाने के लिए console hack करना पड़ेगा, लेकिन USB से भी किया जा सकता है। बस असल disc जैसा feel पाने के लिए burn करके देख सकते हैं
    • एक राय यह भी थी कि physical disc की बजाय optical drive mode इस्तेमाल करना बेहतर होगा
  • QuickJS इस्तेमाल करने वाले ऐसे ही एक मिलते-जुलते प्रोजेक्ट के रूप में Nintendo Switch के लिए nx.js है

    • यह प्रोजेक्ट फिलहाल canvas2d ही support करता है, लेकिन सैद्धांतिक रूप से WebGPU या WebGL games को Switch में बदलने के लिए एक layer बनाई जा सकती है
      हालांकि v8/JIT engine से QuickJS पर आने पर performance hit काफ़ी बड़ा होगा
  • अब PS2 भी JavaScript की पकड़ से बच नहीं सकता

  • AthenaEnv उसी developer के Lua-आधारित Enceladus का successor project है
    games ही नहीं, homebrew apps में भी इसका खूब उपयोग होता है; Enceladus में RETROLauncher और POPSLoader, और Athena में OSD-XMB जैसे उदाहरण हैं

  • लगा कि शायद PS2 के लिए web browser बनाकर games को website की तरह खोला जा सकता है

    • लेकिन Chrome की minimum memory requirement 4GB है, इसलिए PS2 की 32MB RAM में फिट करने के लिए इसे 128वें हिस्से तक घटाना पड़ेगा
  • मैं इसी तरह की चीज़ ढूँढ रहा था, यह सच में शानदार project है, धन्यवाद

  • लोग .gdscript या Godot इस्तेमाल न करने के लिए कुछ भी कर लेते हैं

    • मुझे Godot पसंद है, लेकिन PS2 पर यह चल ही नहीं सकता
    • सच कहें तो Godot में build करके PS2 पर export करना कोई सीधी-सादी बात नहीं है