- Grâce à un environnement open source appelé AthenaEnv, il est désormais possible d’exécuter du code JavaScript sur PlayStation 2
- Cet environnement intègre le moteur QuickJS pour interpréter le JavaScript et fournit des API de développement de jeux pour le rendu, les entrées, le son, la gestion des fichiers, etc.
- Les développeurs peuvent créer un jeu avec une structure de fichiers minimale comprenant main.js, athena.ini, athena.elf, puis l’exécuter dans l’émulateur PCSX2
- Le projet final peut être packagé en fichier
.iso pour être distribué sous la forme d’un fichier unique, avec une procédure de conversion zip→iso présentée pour cela
- C’est un exemple qui illustre la fusion entre le développement sur console rétro et les technologies web, et qui laisse entrevoir le potentiel d’extension du développement de jeux en JavaScript
Vue d’ensemble du projet AthenaEnv
- AthenaEnv est un environnement d’exécution JavaScript pour PS2 qui propose non pas un moteur de jeu traditionnel, mais un environnement de développement centré sur des API
- Il modifie et embarque QuickJS en interne pour interpréter le code JavaScript
- Il est conçu pour qu’un programme natif PS2 (écrit en C) exécute le code JavaScript
- Les API fournies couvrent le rendu, le chargement des assets, la gestion des entrées, les entrées/sorties de fichiers et la lecture audio
- Le niveau d’abstraction est comparable à p5.js ou Raylib, ce qui signifie que des éléments comme la détection de collisions ou la gestion des scènes doivent être implémentés manuellement
Processus d’exécution d’un jeu JavaScript sur PS2
- L’exécution se fait avec l’émulateur PCSX2, et il faut activer l’option « Enable host filesystem » dans les paramètres
- Le dossier du projet contient les fichiers suivants
athena.elf : exécutable Athena
athena.ini : configuration du point d’entrée (main.js), du logo de démarrage, etc.
main.js, src/, assets/ : code du jeu et ressources
- En lançant
athena.elf dans l’émulateur, le jeu démarre, et les modifications du code JavaScript peuvent être appliquées immédiatement après un reset
Procédure de création d’un fichier .iso
- Une méthode est expliquée pour regrouper le projet dans une image ISO unique en vue de sa distribution
- Fichiers requis :
athena.elf, athena.ini, main.js, src/, ATHA_000.01, SYSTEM.CNF
- Il faut sélectionner tous les fichiers, les compresser en zip, puis utiliser le site mconverter.eu pour les convertir en iso
- Après conversion, l’exécution est possible même sans activer le paramètre « Enable host filesystem »
- Un outil CLI GENISO basé sur Python (https://github.com/scottvr/GENISO) est également présenté pour automatiser la conversion
- Il permet de convertir un zip en iso sans dépendances externes
Exemple Hello World
- L’exemple de base implémente le chargement de polices et d’images, la construction de la boucle de jeu, l’animation de sprites, la gestion des entrées et le rendu de texte
- Utilisation des modules intégrés à Athena comme
Screen, Font, Image, Pads
- Exécution de la boucle image par image avec la méthode
Screen.display()
- Détection des entrées manette avec
Pads.get(0)
- Contrôle d’une animation image par image avec des propriétés du sprite comme
startx, endx, etc.
- Affichage des FPS ou de texte avec
font.print()
- L’inversion d’un sprite se fait en donnant une valeur négative à
width, avec un calcul d’offset nécessaire pour corriger la position
Support 3D et développements futurs
- Athena prend en charge à la fois la 2D et la 3D, mais une version v4 centrée sur la 3D est en cours de développement
- Pour l’instant, les exemples sont principalement orientés 2D, avec quelques démos 3D
- Le dépôt GitHub officiel et la communauté Discord fournissent le code et les ressources d’aide
Conclusion
- AthenaEnv est un environnement innovant qui permet de créer des jeux PS2 uniquement en JavaScript
- Il permet aussi aux développeurs web d’aborder le développement de jeux pour console rétro et
montre l’extensibilité et la compatibilité de l’écosystème JavaScript
1 commentaires
Commentaires sur Hacker News
Les projets créés par Fabrice Bellard semblent avoir une portée vraiment immense
C’est génial que QuickJS permette de relancer le homebrew sur d’anciens systèmes comme la PS2 via AthenaEnv
Quelque part dans la chaîne de dépendances d’innombrables projets FOSS, il y a forcément de son code
En voyant l’auteur mentionner la gêne d’utiliser un site web qui convertit des ZIP en ISO, j’ai créé moi-même un script Python multiplateforme sans dépendances externes
On peut le voir sur ZIP2ISO.py
C’était impressionnant de voir qu’il avait été « vibe-codé » avec Gemini3 Pro sans même lire la spécification ISO9660
AthenaEnv est intéressant. Il semble utiliser QuickJS comme interpréteur JS et encapsuler les bibliothèques système natives de la PS2
Je me demande s’il existe un projet similaire permettant de déployer des jeux JS Canvas (WebGPU/WebGL) sur des consoles modernes (Switch/2, PS5, Xbox)
Les SDK de consoles sont sous NDA, donc il y a très peu d’informations publiques, et la plupart des jeux utilisent Unreal ou Unity
Sur PC ou mobile, c’est relativement simple puisqu’on peut les exécuter facilement via Electron ou WebView
L’applet navigateur WebKit de la Switch a le JIT désactivé, donc il ne sert qu’à des usages limités comme les e-manuals
Je me demandais s’il fallait graver l’ISO sur un disque pour l’exécuter sur une vraie console
Il existe un projet similaire utilisant QuickJS pour Nintendo Switch : nx.js
En revanche, passer d’un moteur v8/JIT à QuickJS entraînerait une forte baisse de performances
Même la PS2 ne peut désormais plus échapper à l’emprise de JavaScript
AthenaEnv est le projet successeur d’Enceladus, basé sur Lua, créé par le même développeur
Il est beaucoup utilisé non seulement pour les jeux, mais aussi pour les applications homebrew ; côté Enceladus, il y a par exemple RETROLauncher et POPSLoader, et côté Athena, OSD-XMB
Je me suis dit qu’il serait peut-être possible de créer un navigateur web pour PS2 afin d’ouvrir les jeux comme des sites web
C’est exactement le genre de chose que je cherchais, merci pour ce projet vraiment génial
Les gens font vraiment tout leur possible pour éviter d’utiliser .gdscript ou Godot