- AthenaEnv というオープンソース環境により、PlayStation 2でJavaScriptコードを実行できるようになった
- この環境は QuickJSエンジンを内蔵してJavaScriptを解釈し、レンダリング・入力・サウンド・ファイル処理などのゲーム開発向けAPIを提供する
- 開発者は main.js、athena.ini、athena.elf などの基本ファイル構成だけでゲームを作成でき、PCSX2エミュレータで実行できる
- 完成したプロジェクトは .isoファイルとしてパッケージ化して単一ファイルとして配布でき、そのための zip→iso 変換手順も紹介されている
- レトロコンソール開発とWeb技術の融合を示す事例であり、JavaScriptベースのゲーム開発の拡張可能性を示唆している
AthenaEnv プロジェクト概要
- AthenaEnvは PS2向けJavaScript実行環境で、従来型のゲームエンジンではなくAPI中心の開発環境を提供する
- 内部的には QuickJS を改変・組み込みしてJavaScriptコードを解釈する
- PS2ネイティブプログラム(Cで記述)がJavaScriptコードを実行する構成になっている
- 提供APIには レンダリング、アセット読み込み、入力処理、ファイル入出力、サウンド再生 などが含まれる
- p5.js や Raylib 程度の抽象化レベルで、衝突判定やシーン管理などは自分で実装する必要がある
PS2でJavaScriptゲームを実行する流れ
- 実行には PCSX2エミュレータ が使われ、設定で "Enable host filesystem" オプションを有効にする必要がある
- プロジェクトフォルダには次のファイルが含まれる
athena.elf: Athena実行ファイル
athena.ini: エントリーポイント(main.js)やブートロゴ設定などの構成
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" 設定がなくても実行できる
- 変換の自動化のために PythonベースのCLIツール GENISO (https://github.com/scottvr/GENISO) も紹介されている
Hello World の例
- 基本サンプルでは フォントと画像の読み込み、ゲームループの構成、スプライトアニメーション、入力処理、テキストレンダリング を実装している
Screen, Font, Image, Pads など Athena 内蔵モジュールを使用
Screen.display() メソッドでフレーム単位のループを実行
Pads.get(0) でコントローラ入力を検知
- スプライトの
startx, endx などのプロパティでフレーム単位のアニメーションを制御
font.print() で FPS やテキストを表示
- スプライト反転は width に負の値を与えることで実装し、位置補正のためにオフセット計算が必要になる
3D対応と今後の開発
- Athena は 2Dと3Dの両方に対応しているが、3D中心の v4 バージョンが開発中
- 現在は2D中心のサンプルが主流で、一部3Dデモも存在する
- 公式の GitHubリポジトリとDiscordコミュニティ を通じてコードと支援資料が提供されている
結論
- AthenaEnv は JavaScriptだけでPS2ゲームを制作できる革新的な環境
- Web開発者でも レトロコンソール向けゲーム開発 にアクセスしやすくし、
JavaScriptエコシステムの拡張性と互換性 を示す事例となっている
1件のコメント
Hacker Newsのコメント
Fabrice Bellardが作ったプロジェクトは本当に広範な影響力を持っている気がする
QuickJSのおかげで、PS2のような古いシステムでもAthenaEnvを通じてホームブリュー復興が可能になったのはすばらしい
数多くのFOSSプロジェクトの依存関係チェーンのどこかには、彼のコードが入っている
投稿者がZIPをISOに変換するウェブサイトを使う煩わしさに触れていたのを見て、外部依存のないクロスプラットフォームのPythonスクリプトを自分で作った
ZIP2ISO.pyで確認できる
ISO9660仕様を読まずにGemini3 Proで“vibe-coded”したのが印象的だった
AthenaEnvは興味深い。QuickJSをJSインタープリタとして使い、PS2のネイティブシステムライブラリをラップする構造に見える
現代のコンソール(Switch/2、PS5、Xbox)でも、JS Canvas(WebGPU/WebGL)ゲームを配布できる似たようなプロジェクトがあるのか気になる
コンソールSDKはNDAなので公開情報がほとんどなく、ほとんどのゲームはUnrealやUnityを使っている
PCやモバイルはElectronやWebViewで簡単に動かせるので、比較的単純だ
SwitchのWebKitブラウザアプレットはJITが無効化されているため、eマニュアルのような限定的な用途にしか使われていない
本物のコンソールで動かすにはISOをディスクに焼く必要があるのか気になった
QuickJSを使った似たプロジェクトとして、Nintendo Switch向けのnx.jsがある
ただしv8/JITエンジンからQuickJSに切り替えると、性能低下は大きいだろう
もはやPS2でさえJavaScriptの手の内から逃れられなくなった
AthenaEnvは、同じ開発者が作ったLuaベースのEnceladusの後継プロジェクトだ
ゲームだけでなくホームブリューアプリにも多く使われており、EnceladusではRETROLauncherやPOPSLoader、AthenaではOSD-XMBのような例がある
PS2向けにウェブブラウザを作って、ゲームをウェブサイトとして開く方式も可能ではないかと思う
こういうものを探していたが、本当にすばらしいプロジェクトなのでありがたい
みんな.gdscriptやGodotを使いたくなくて、あらゆることをしている