- Mit der Open-Source-Umgebung AthenaEnv ist es möglich, JavaScript-Code auf der PlayStation 2 auszuführen
- Die Umgebung enthält die QuickJS-Engine integriert, interpretiert JavaScript und stellt APIs für die Spieleentwicklung bereit, darunter Rendering, Eingaben, Sound und Dateiverarbeitung
- Entwickler können Spiele allein mit einer grundlegenden Dateistruktur wie main.js, athena.ini, athena.elf erstellen und sie im PCSX2-Emulator ausführen
- Fertige Projekte lassen sich als .iso-Datei paketieren und als einzelne Datei verteilen; dafür wird ein Verfahren zur Umwandlung von zip in iso vorgestellt
- Das Projekt zeigt eine Verbindung von Retro-Konsolenentwicklung und Web-Technologien und deutet auf das Erweiterungspotenzial JavaScript-basierter Spieleentwicklung hin
Überblick über das Projekt AthenaEnv
- AthenaEnv ist eine JavaScript-Laufzeitumgebung für PS2, die statt einer traditionellen Game Engine eine API-zentrierte Entwicklungsumgebung bereitstellt
- Intern wird QuickJS angepasst und eingebettet, um JavaScript-Code zu interpretieren
- Ein natives PS2-Programm (in C geschrieben) ist so aufgebaut, dass es JavaScript-Code ausführt
- Die bereitgestellten APIs umfassen Rendering, Asset-Laden, Eingabeverarbeitung, Datei-Ein/Ausgabe und Soundwiedergabe
- Das Abstraktionsniveau liegt ungefähr bei p5.js oder Raylib; Dinge wie Kollisionserkennung oder Szenenverwaltung müssen selbst implementiert werden
Ablauf zum Ausführen von JavaScript-Spielen auf der PS2
- Zum Ausführen wird der PCSX2-Emulator verwendet; in den Einstellungen muss die Option „Enable host filesystem“ aktiviert werden
- Der Projektordner enthält die folgenden Dateien
athena.elf: ausführbare Athena-Datei
athena.ini: Konfiguration für Einstiegspunkt (main.js), Boot-Logo-Einstellungen usw.
main.js, src/, assets/: Spielcode und Ressourcen
- Wenn im Emulator
athena.elf gestartet wird, läuft das Spiel; Änderungen am JavaScript-Code lassen sich nach einem Reset sofort übernehmen
Vorgehen zum Erstellen einer .iso-Datei
- Es wird erklärt, wie sich ein Projekt zur Distribution in ein einzelnes ISO-Image bündeln lässt
- Erforderliche Dateien:
athena.elf, athena.ini, main.js, src/, ATHA_000.01, SYSTEM.CNF
- Alle Dateien werden ausgewählt, als zip komprimiert und anschließend über die Website mconverter.eu in iso umgewandelt
- Nach der Umwandlung ist die Ausführung auch ohne die Einstellung „Enable host filesystem“ möglich
- Zur Automatisierung der Umwandlung wird das Python-basierte CLI-Tool GENISO (https://github.com/scottvr/GENISO) vorgestellt
- Es kann zip ohne externe Abhängigkeiten in iso umwandeln
Hello-World-Beispiel
- Das Grundbeispiel implementiert Laden von Schriftarten und Bildern, Aufbau einer Game Loop, Sprite-Animation, Eingabeverarbeitung und Text-Rendering
- Nutzung eingebauter Athena-Module wie
Screen, Font, Image, Pads
- Ausführung einer framebasierten Schleife über die Methode
Screen.display()
- Erkennung von Controller-Eingaben mit
Pads.get(0)
- Steuerung frameweiser Animation über Eigenschaften des Sprites wie
startx, endx usw.
- Ausgabe von FPS oder Text mit
font.print()
- Das Spiegeln von Sprites wird durch einen negativen Wert für die width umgesetzt; zur Positionskorrektur ist eine Offset-Berechnung nötig
3D-Unterstützung und weitere Entwicklung
- Athena unterstützt sowohl 2D als auch 3D, allerdings befindet sich eine stärker auf 3D ausgerichtete v4-Version in Entwicklung
- Derzeit dominieren Beispiele mit Fokus auf 2D, daneben existieren einige 3D-Demos
- Über das offizielle GitHub-Repository und die Discord-Community werden Code und Unterstützungsmaterialien bereitgestellt
Fazit
- AthenaEnv ist eine innovative Umgebung, mit der sich PS2-Spiele allein in JavaScript erstellen lassen
- Sie ermöglicht auch Web-Entwicklern den Zugang zur Spieleentwicklung für Retro-Konsolen und
zeigt ein Beispiel für die Erweiterbarkeit und Kompatibilität des JavaScript-Ökosystems
1 Kommentare
Hacker-News-Kommentare
Es wirkt, als hätten die Projekte von Fabrice Bellard wirklich weitreichenden Einfluss.
Dank QuickJS ist es großartig, dass auf alten Systemen wie der PS2 über AthenaEnv sogar ein Homebrew-Revival möglich wird.
Irgendwo in der Abhängigkeitskette unzähliger FOSS-Projekte steckt sein Code.
Nachdem der Autor den Aufwand erwähnt hatte, eine Website zum Umwandeln von ZIP in ISO zu benutzen, habe ich selbst ein plattformübergreifendes Python-Skript ohne externe Abhängigkeiten geschrieben.
Zu finden unter ZIP2ISO.py.
Beeindruckend war, dass es mit Gemini3 Pro „vibe-coded“ wurde, ohne die ISO9660-Spezifikation zu lesen.
mkisofsmüsste sich dieselbe Aufgabe wohl ebenfalls erledigen lassen.AthenaEnv ist interessant. Es scheint so aufgebaut zu sein, dass QuickJS als JS-Interpreter verwendet wird und die nativen Systembibliotheken der PS2 gekapselt werden.
Ich frage mich, ob es auch für moderne Konsolen (Switch/2, PS5, Xbox) ähnliche Projekte gibt, mit denen sich JS-Canvas-(WebGPU/WebGL)-Spiele verteilen lassen.
Die Konsolen-SDKs stehen unter NDA, daher gibt es kaum öffentliche Informationen, und die meisten Spiele nutzen Unreal oder Unity.
Auf PC oder Mobilgeräten ist es vergleichsweise einfach, weil man sie leicht mit Electron oder WebView ausführen kann.
Das WebKit-Browser-Applet der Switch hat JIT deaktiviert und wird daher nur für eingeschränkte Zwecke wie das E-Manual verwendet.
Ich habe mich gefragt, ob man zum Ausführen auf einer echten Konsole die ISO auf eine Disc brennen muss.
Ein ähnliches Projekt mit QuickJS ist nx.js für Nintendo Switch.
Allerdings würde der Wechsel von einer v8-/JIT-Engine zu QuickJS große Leistungseinbußen verursachen.
Jetzt kann sich sogar die PS2 dem Griff von JavaScript nicht mehr entziehen.
AthenaEnv ist ein Nachfolgeprojekt von Enceladus, das vom selben Entwickler auf Lua-Basis erstellt wurde.
Es wird nicht nur für Spiele, sondern auch häufig für Homebrew-Apps genutzt; Beispiele sind bei Enceladus RETROLauncher und POPSLoader, bei Athena etwa OSD-XMB.
Ich dachte, man könnte vielleicht auch einen Webbrowser für die PS2 bauen und Spiele dann über Websites starten.
Genau nach so etwas habe ich gesucht, wirklich ein großartiges Projekt, danke.
Die Leute tun wirklich alles, nur um nicht
.gdscriptoder Godot zu benutzen.