- AthenaEnv คือสภาพแวดล้อมโอเพนซอร์สที่ทำให้ สามารถรันโค้ด JavaScript บน PlayStation 2 ได้
- สภาพแวดล้อมนี้ ฝังเอนจิน QuickJS เพื่อแปลความ JavaScript และมี API สำหรับพัฒนาเกม เช่น การเรนเดอร์ การรับอินพุต เสียง และการจัดการไฟล์
- นักพัฒนาสามารถเขียนเกมได้ด้วยโครงสร้างไฟล์พื้นฐานอย่าง main.js, athena.ini, athena.elf และสามารถรันบน อีมูเลเตอร์ PCSX2 ได้
- โปรเจ็กต์ที่เสร็จแล้วสามารถ แพ็กเป็นไฟล์ .iso เพื่อแจกจ่ายในรูปแบบไฟล์เดียวได้ โดยมีการอธิบายขั้นตอนแปลง zip → iso ไว้
- เป็นตัวอย่างที่แสดงให้เห็นถึง การผสานการพัฒนาสำหรับเครื่องเกมย้อนยุคเข้ากับเทคโนโลยีเว็บ และชี้ให้เห็นถึงศักยภาพการขยายตัวของการพัฒนาเกมด้วย JavaScript
ภาพรวมโปรเจ็กต์ AthenaEnv
- AthenaEnv คือ สภาพแวดล้อมรัน JavaScript สำหรับ PS2 ที่ให้ สภาพแวดล้อมการพัฒนาแบบเน้น API แทนที่จะเป็นเกมเอนจินแบบดั้งเดิม
- ภายในมีการปรับแต่งและฝัง QuickJS เพื่อแปลความโค้ด JavaScript
- ถูกออกแบบให้โปรแกรมเนทีฟบน PS2 (เขียนด้วย C) เป็นผู้เรียกใช้โค้ด JavaScript
- API ที่มีให้ครอบคลุม การเรนเดอร์ การโหลดแอสเซ็ต การจัดการอินพุต การอ่านเขียนไฟล์ และการเล่นเสียง
- มีระดับการนามธรรมใกล้เคียงกับ p5.js หรือ Raylib โดยฟีเจอร์อย่างการตรวจจับการชนหรือการจัดการซีนยังต้องเขียนเอง
ขั้นตอนการรันเกม JavaScript บน PS2
- การรันใช้ อีมูเลเตอร์ PCSX2 และต้องเปิดใช้งานตัวเลือก “Enable host filesystem” ในการตั้งค่า
- ในโฟลเดอร์โปรเจ็กต์จะมีไฟล์ดังต่อไปนี้
athena.elf: ไฟล์รันของ Athena
athena.ini: ไฟล์ตั้งค่า เช่น entry point (main.js) และการตั้งค่า boot logo
main.js, src/, assets/: โค้ดเกมและทรัพยากร
- เมื่อรัน
athena.elf ในอีมูเลเตอร์ เกมจะเริ่มทำงาน และ สามารถแก้โค้ด JavaScript แล้วรีเซ็ตเพื่อให้มีผลทันที
ขั้นตอนการสร้างไฟล์ .iso
- มีการอธิบายวิธีรวมโปรเจ็กต์เป็น อิมเมจ ISO เดียว เพื่อใช้ในการแจกจ่าย
- ไฟล์ที่จำเป็น:
athena.elf, athena.ini, main.js, src/, ATHA_000.01, SYSTEM.CNF
- เลือกทุกไฟล์แล้วบีบอัดเป็น zip จากนั้นใช้เว็บไซต์ mconverter.eu เพื่อแปลงเป็น iso
- หลังจากแปลงแล้วจะสามารถรันได้โดยไม่ต้องเปิดการตั้งค่า “Enable host filesystem”
- เพื่อทำให้กระบวนการแปลงเป็นอัตโนมัติ มีการแนะนำ เครื่องมือ CLI ชื่อ GENISO ที่พัฒนาด้วย Python (https://github.com/scottvr/GENISO)
- สามารถแปลง zip เป็น iso ได้โดยไม่ต้องพึ่งพา dependency ภายนอก
ตัวอย่าง Hello World
- ในตัวอย่างพื้นฐาน มีการสาธิต การโหลดฟอนต์และรูปภาพ การจัดโครงสร้าง game loop สปรाइटแอนิเมชัน การจัดการอินพุต และ การเรนเดอร์ข้อความ
- ใช้โมดูลในตัวของ Athena เช่น
Screen, Font, Image, Pads
- รันลูปแบบเฟรมต่อเฟรมด้วยเมธอด
Screen.display()
- ตรวจจับอินพุตคอนโทรลเลอร์ด้วย
Pads.get(0)
- ควบคุมแอนิเมชันแบบเฟรมต่อเฟรมด้วยพร็อพเพอร์ตีของสปรाइटอย่าง
startx, endx
- แสดง FPS หรือข้อความด้วย
font.print()
- การกลับด้านสปรाइटทำได้ด้วยการ กำหนดค่า width เป็นค่าติดลบ และต้องคำนวณออฟเซ็ตเพื่อชดเชยตำแหน่ง
การรองรับ 3D และการพัฒนาต่อในอนาคต
- Athena รองรับทั้ง 2D และ 3D แต่ขณะนี้กำลังพัฒนา เวอร์ชัน v4 ที่เน้น 3D เป็นหลัก
- ปัจจุบันตัวอย่างส่วนใหญ่ยังคงเน้น 2D และมีเดโม 3D อยู่บางส่วน
- มีการให้โค้ดและเอกสารสนับสนุนผ่าน GitHub อย่างเป็นทางการและชุมชน Discord
บทสรุป
- AthenaEnv คือ สภาพแวดล้อมล้ำสมัยที่ทำให้สามารถสร้างเกม PS2 ได้ด้วย JavaScript เพียงอย่างเดียว
- มันช่วยให้นักพัฒนาเว็บสามารถเข้าถึง การพัฒนาเกมสำหรับเครื่องเกมย้อนยุค ได้ และ
ยังเป็นตัวอย่างที่แสดงให้เห็นถึง ความยืดหยุ่นและความเข้ากันได้ของระบบนิเวศ JavaScript
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
โปรเจกต์ที่ Fabrice Bellard สร้างดูเหมือนจะมีอิทธิพลกว้างขวางมากจริง ๆ
น่าทึ่งที่ด้วย QuickJS ทำให้การคืนชีพโฮมบรูบนระบบเก่าอย่าง PS2 เป็นไปได้ผ่าน AthenaEnv
ที่ไหนสักแห่งในสายโซ่ dependency ของโปรเจกต์ FOSSจำนวนมากก็มีโค้ดของเขาอยู่
พอเห็นผู้เขียนพูดถึงความยุ่งยากของการใช้เว็บไซต์ที่แปลง ZIP เป็น ISO ก็เลยทำสคริปต์ Python ข้ามแพลตฟอร์มที่ไม่มี dependency ภายนอกขึ้นมาเอง
ดูได้ที่ ZIP2ISO.py
น่าประทับใจที่ “vibe-coded” มันด้วย Gemini3 Pro โดยไม่ได้อ่านสเปก ISO9660
AthenaEnv น่าสนใจ ใช้ QuickJS เป็นตัวแปลภาษา JS และดูเหมือนมีโครงสร้างที่ครอบไลบรารีระบบแบบเนทีฟของ PS2
เลยสงสัยว่าบนคอนโซลยุคใหม่อย่าง Switch/2, PS5, Xbox จะมีโปรเจกต์คล้ายกันที่ปล่อยเกม JS Canvas(WebGPU/WebGL) ได้หรือไม่
SDK ของคอนโซลติด NDA เลยแทบไม่มีข้อมูลสาธารณะ และเกมส่วนใหญ่ก็ใช้ Unreal หรือ Unity
ส่วนบน PC หรือมือถือค่อนข้างง่ายกว่า เพราะรันผ่าน Electron หรือ WebView ได้สะดวก
แอปเล็ตเบราว์เซอร์ WebKit ของ Switch ปิดการใช้ JIT เอาไว้ จึงใช้ได้แค่กับงานจำกัดอย่าง e-manual
สงสัยว่าถ้าจะรันบนคอนโซลจริง ๆ จำเป็นต้องไรต์ ISO ลงแผ่นหรือเปล่า
มีโปรเจกต์คล้ายกันที่ใช้ QuickJS คือ nx.js สำหรับ Nintendo Switch
เพียงแต่ถ้าเปลี่ยนจากเอนจิน v8/JIT มาเป็น QuickJS ประสิทธิภาพก็น่าจะลดลงมาก
ตอนนี้แม้แต่ PS2 ก็หนีเงื้อมมือของ JavaScriptไม่พ้นแล้ว
AthenaEnv เป็นโปรเจกต์ต่อจาก Enceladus ที่ใช้ Lua และมาจากนักพัฒนาคนเดียวกัน
ไม่ได้ใช้แค่กับเกม แต่ยังใช้กับแอปโฮมบรูจำนวนมากด้วย โดยฝั่ง Enceladus มีตัวอย่างอย่าง RETROLauncher และ POPSLoader ส่วน Athena มี OSD-XMB
คิดว่าอาจเป็นไปได้ที่จะสร้างเว็บเบราว์เซอร์สำหรับ PS2 แล้วเปิดเกมเป็นเว็บไซต์
กำลังมองหาสิ่งแบบนี้อยู่พอดี เป็นโปรเจกต์ที่เจ๋งมากจริง ๆ ขอบคุณ
ผู้คนทำทุกอย่างเพื่อจะได้ไม่ต้องใช้ .gdscript หรือ Godot