console-anywhere
PS2Recomp ポートは、再コンパイルされたゲームコードとランタイムからビルドされた通常のネイティブプログラム (ps2EntryRunner) で、raylib で描画されます。同じ CMake プロジェクトが Windows、macOS(Apple Silicon は sse2neon 経由)、Linux、Steam Deck 向けにビルドされ、android/ で APK、vita/ で vpk が生成されます。このスキルはツールチェーンをチェックし、各デバイス向けの正しい手順を出力し、プレイヤーが自分のディスクからゲームを持ち込めるようにパッケージ化します。
正直な制限:PS2Recomp は主に MSVC でテストされているため、Mac、Linux、Android、Vita のビルドはテストが少なくなっています。Vita は PC よりもはるかに遅く、Android にはまだオンスクリーンコントロールがありません。また、ランナーはあなたのゲームの再コンパイルされたコードからコンパイルされるため、パッケージはあなた自身のデバイス専用です。ディスク自体は含まれませんが、ゲームから派生しているため、アップロードするものではありません。
以下、${CLAUDE_SKILL_DIR} はこのスキルのフォルダ(この SKILL.md がある場所)です。
python3 "${CLAUDE_SKILL_DIR}/targets.py" doctor # このマシンのOS向け
python3 "${CLAUDE_SKILL_DIR}/targets.py" doctor --target android --target vita # または --target all
python3 "${CLAUDE_SKILL_DIR}/targets.py" plan --target steamdeck --elf-name SLUS_203.12
python3 "${CLAUDE_SKILL_DIR}/targets.py" package --runner out/release/ps2xRuntime/ps2EntryRunner \
--target linux --elf-name SLUS_203.12 --game "My Game" --serial SLUS-20312 \
--out console/dist/mygame-linux
python3 "${CLAUDE_SKILL_DIR}/targets.py" guard console/dist/mygame-linux # 圧縮やプッシュの前に
python3 "${CLAUDE_SKILL_DIR}/targets.py" recomp-json --game "My Game" --serial SLUS-20312 --status playable
ターゲット: windows、macos、linux、steamdeck、android、vita、web(plan と doctor のみ:別のツールチェーン)。plan は --repo(PS2Recomp のチェックアウトディレクトリ)と --build-dir を受け取ります。package は --lib FILE(追加ライブラリ)、--allow FILE、--replace、--status、--json を受け取ります。終了コード: 0 正常、1 不足または拒否、2 不正な入力。
読み書きするファイル
| ファイル | 内容 |
|---|---|
| ビルド出力 | ps2EntryRunner(+ 隣の .dll / .so / .dylib)、app-release.apk、または ps2EntryRunner.vpk |
console/dist/<name>/ | プレイヤーフォルダ: ランナー、ライブラリ、game/(空)、PLAYERS.md、play.bat / play.command / play.sh / install-android.sh、.recomp.json、.console-dist.json |
templates/PLAYERS.md | プレイヤー向け説明テンプレート |
.recomp.json | オプションのプロジェクト説明。recomp lists で読まれます(PS2Recomp 自体は無視) |
console/STATE.md | ビルドフォルダとチェックアウトパスを読み取り、ビルド結果を記録 |
手順
- どこでプレイしたいか尋ねる:PC、Mac、Steam Deck、Android フォン・タブレット・TV ボックス、ホームブリューの Vita。「テレビで」は Bluetooth パッドを接続した Android TV ボックス、またはコントローラーを接続した PC または Deck を指します。
- ポートはまずここで動作している必要があります。 開発マシン上でビルドし、
/console-testerで確認してください。デスクトップでクラッシュするものは、スマートフォンでも改善しません。 - Doctor.
targets.py doctor --target <t>。不足しているものを表示されたコマンドでインストールし、再度 doctor を実行します。 - Plan.
targets.py plan --target <t> --elf-name <ディスクのELF>。ユーザーのチェックアウト(再コンパイルされたコードがある場所)の手順に従います。各ターゲットの詳細と各情報の出典は reference/targets.md を参照してください。 - ビルド:計画のコマンドでビルドします。インクリメンタルビルドのみ;ビルドフォルダをクリーンしたり、Vita で
CLEAN=1を指定したりしないでください。別のリリースフォルダ(out/release)を使うと、日常のビルドを壊さずに済みます。 - パッケージ化。
targets.py package --runner <ビルド済みファイル> --target <t> --out console/dist/<name>。--elf-name(指定しないと起動スクリプトがプレイヤーのSYSTEM.CNFからBOOT2を読み取ります)と、.recomp.json用の--game/--serialを追加します。 - ガードの判定を読む。 拒否された場合、各ファイルとその理由がリストされます。原因を修正してください(
--libが間違っている、ランナーの横にディスクファイルがあるなど)。ディスクイメージ、PS2 ELF、IRX、SYSTEM.CNF、ランナーソースに allow 行を追加しないでください:allow ファイルは、本当にユーザー自身のファイルである誤検出のみに、理由を付けて記述するためのものです。詳細は reference/guard.md を参照してください。 - デバイスにインストール:
PLAYERS.mdに従い、プレイヤーが自分のディスクをgame/にダンプします。そこでテストし、結果をconsole/STATE.mdに記録します。
各ターゲットの概要(一行)
| ターゲット | ランナー | ELF の検出方法 | 備考 |
|---|---|---|---|
| Windows | ps2EntryRunner.exe + FFmpeg DLL | play.bat が game\<ELF> を渡す | MSVC、最もテストされたパス |
| macOS | ps2EntryRunner | play.command が game/<ELF> を渡す | sse2neon 経由の arm64 ビルド;Homebrew FFmpeg が必要(組み込まない場合は不要) |
| Linux | ps2EntryRunner | play.sh | raylib のビルドに X11 と GL ヘッダが必要 |
| Steam Deck | Linux ビルド | play.sh、Steam で非 Steam ゲームとして追加 | Proton 経由の Windows ビルドも可(ここでは未テスト) |
| Android | app-release.apk | -Pps2xBootElf=... で組み込む | ファイルは adb push で /storage/emulated/0/Android/data/com.ps2x.runner/files/ へ;コントローラーをペアリングする |
| PS Vita | ps2EntryRunner.vpk | ./vita/build.sh <ux0:data/... path> で組み込む | ./vita/setup.sh を一度実行;VitaShell でインストール;低速 |
| web | (PS2Recomp のターゲットではない) | snuri00/ps2-web-recomp は別のリコンパイラ:同じディスクの別ポート、実験的 |
ガードレール
- 自分でゲームを用意してください。 各プレイヤーは自分が所有するディスクから自分でダンプしたゲームを提供します。ISO、ELF、BIOS ファイルをダウンロードしたり、見つける手伝いをしたり、要求したりしないでください。BIOS は不要です。
- ゲームの一部を公開してはいけません。
packageはディスクイメージ(ISO、BIN、IMG、MDF、NRG、CHD、CSO および ISO 9660 形式のファイル、名前は問わない)、PS2 ELF と IRX モジュール(マジックナンバーと機械的に識別)、SLUS_203.12のようなディスク形式の名前、SYSTEM.CNF、再コンパイルされたrunner/ソース、game/内のファイル、および 512 MB を超えるファイルを拒否します。ランナー自体は再コンパイルされたゲームコードからビルドされています:パッケージはユーザー自身のデバイス用であり、アップロード用ではありません。パッチ、オーバーライド、オリジナルアセットを共有してください。 - ソニーとは関係ありません。 PlayStation は Sony Interactive Entertainment の商標です。PS Vita ホームブリュー、Steam、Android、その他のプラットフォームはそれぞれの所有者に帰属します。
- ユーザーのファイルを絶対に破壊しないでください。
--replaceはこのツールが作成したフォルダのみを置き換え、game/に何かが含まれている場合(プレイヤーのディスク、mc0/のセーブデータ)は拒否します。
連携先
/console-testerに、パッケージ化の前後にこのマシンでビルドを実行させる。/console-controllerに、デバイスのコントロール設定を任せる(Steam Deck ではxboxレイアウト、Android ではタッチゾーンまたは Bluetooth パッド)。/console-savesに、デバイス間でのセーブデータの移動を任せる(mc0/はゲームの ELF と同じ場所に置く)。