9 ポイント 投稿者 GN⁺ 2025-11-22 | 1件のコメント | WhatsAppで共有
  • 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.jsRaylib 程度の抽象化レベルで、衝突判定やシーン管理などは自分で実装する必要がある

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) も紹介されている
    • 外部依存なしで zip を iso に変換できる

Hello World の例

  • 基本サンプルでは フォントと画像の読み込みゲームループの構成スプライトアニメーション入力処理テキストレンダリング を実装している
    • Screen, Font, Image, Pads など Athena 内蔵モジュールを使用
    • Screen.display() メソッドでフレーム単位のループを実行
    • Pads.get(0) でコントローラ入力を検知
    • スプライトの startx, endx などのプロパティでフレーム単位のアニメーションを制御
    • font.print() で FPS やテキストを表示
  • スプライト反転は width に負の値を与えることで実装し、位置補正のためにオフセット計算が必要になる

3D対応と今後の開発

結論

  • AthenaEnv は JavaScriptだけでPS2ゲームを制作できる革新的な環境
  • Web開発者でも レトロコンソール向けゲーム開発 にアクセスしやすくし、
    JavaScriptエコシステムの拡張性と互換性 を示す事例となっている

1件のコメント

 
GN⁺ 2025-11-22
Hacker Newsのコメント
  • Fabrice Bellardが作ったプロジェクトは本当に広範な影響力を持っている気がする
    QuickJSのおかげで、PS2のような古いシステムでもAthenaEnvを通じてホームブリュー復興が可能になったのはすばらしい

    • Photoshopの腕がほとんどないのでできなかったが、xkcd 2347のミームに「Fabrice Bellardが半分寝た状態で、ただ証明するために実装したもの」と書き込みたかった
      数多くのFOSSプロジェクトの依存関係チェーンのどこかには、彼のコードが入っている
  • 投稿者がZIPをISOに変換するウェブサイトを使う煩わしさに触れていたのを見て、外部依存のないクロスプラットフォームのPythonスクリプトを自分で作った
    ZIP2ISO.pyで確認できる
    ISO9660仕様を読まずにGemini3 Proで“vibe-coded”したのが印象的だった

    • mkisofsでも同じことができそうだ
  • AthenaEnvは興味深い。QuickJSをJSインタープリタとして使い、PS2のネイティブシステムライブラリをラップする構造に見える
    現代のコンソール(Switch/2、PS5、Xbox)でも、JS Canvas(WebGPU/WebGL)ゲームを配布できる似たようなプロジェクトがあるのか気になる
    コンソールSDKはNDAなので公開情報がほとんどなく、ほとんどのゲームはUnrealやUnityを使っている
    PCやモバイルはElectronやWebViewで簡単に動かせるので、比較的単純だ

    • JSで作られたゲームCross Codeがコンソールに移植された例がある。詳細な過程はこのブログ記事にまとまっている
    • Nintendo 3DSとWii UのSDKにはウェブ技術ベースのElectron類似フレームワークがあったが、Switchでは中止されたと記憶している
      SwitchのWebKitブラウザアプレットはJITが無効化されているため、eマニュアルのような限定的な用途にしか使われていない
  • 本物のコンソールで動かすにはISOをディスクに焼く必要があるのか気になった

    • FreeDVDBootと組み合わせれば可能そうだ
    • メモリーカードのFreeMcBoot + USBフラッシュドライブの組み合わせが人気のある方法だ。光学ドライブの摩耗も減らせる
    • ディスクを焼いて動かすにはコンソールのハックが必要だが、USBでも可能だ。単に本物のディスク感のために焼いてみることもある
    • 物理ディスクの代わりに光学ドライブエミュレーションを使う方がよいのでは、という意見もある
  • QuickJSを使った似たプロジェクトとして、Nintendo Switch向けのnx.jsがある

    • このプロジェクトは現在canvas2dのみ対応だが、理論上はWebGPUやWebGLゲームをSwitchへ変換するレイヤーを作れそうだ
      ただしv8/JITエンジンからQuickJSに切り替えると、性能低下は大きいだろう
  • もはやPS2でさえJavaScriptの手の内から逃れられなくなった

  • AthenaEnvは、同じ開発者が作ったLuaベースのEnceladusの後継プロジェクトだ
    ゲームだけでなくホームブリューアプリにも多く使われており、EnceladusではRETROLauncherやPOPSLoader、AthenaではOSD-XMBのような例がある

  • PS2向けにウェブブラウザを作って、ゲームをウェブサイトとして開く方式も可能ではないかと思う

    • ただしChromeの最小メモリ要件は4GBなので、PS2の32MB RAMに合わせるには128分の1に縮小しなければならない
  • こういうものを探していたが、本当にすばらしいプロジェクトなのでありがたい

  • みんな.gdscriptやGodotを使いたくなくて、あらゆることをしている

    • Godotは好きだが、PS2では動かせない
    • 実際、GodotでビルドしてPS2へエクスポートするのは簡単なことではない