console-anywhere
PS2Recomp 的移植作品是一個正常的原生程式(ps2EntryRunner),由重新編譯的遊戲程式碼加上執行時庫組成,並使用 raylib 繪圖。同一個 CMake 專案可在 Windows、macOS(透過 sse2neon 支援 Apple Silicon)、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 # 本機作業系統
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 列表讀取(PS2Recomp 本身忽略) |
console/STATE.md | 讀取建置資料夾和檢出路徑;記錄建置的內容 |
方法
- 詢問他們要在哪裡玩 以及平台:PC、Mac、Steam Deck、Android 手機、平板或電視盒、或是自製的 Vita。「在電視上玩」意指 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。 - 使用 plan 中的指令進行建置。 僅增量建置;絕對不要清除建置資料夾,也絕對不要對 Vita 使用
CLEAN=1。使用獨立的 release 資料夾(out/release)來保持日常建置不受影響。 - Package。 執行
targets.py package --runner <已建置的檔案> --target <t> --out console/dist/<name>。可以加上--elf-name(否則啟動腳本會讀取玩家的SYSTEM.CNF中的BOOT2)以及--game/--serial來產生.recomp.json。 - 閱讀 guard 的結果。 拒絕時會列出每個檔案及其原因。修正原因(錯誤的
--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(除非不使用 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/... 路徑> 內建 | 需要先執行 ./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 的檔案。執行檔本身是由重新編譯的遊戲程式碼所建置:套件僅供使用者自己的裝置使用,不可上傳。請分享修補程式、覆蓋設定和原始素材。 - 與 Sony 無關。 PlayStation 是 Sony Interactive Entertainment 的商標。PS Vita 自製軟體、Steam、Android 及其他平台歸其各自所有者所有。
- 絕不破壞使用者的檔案。
--replace僅會取代本工具建立的資料夾,且在game/中有任何內容(玩家的光碟、mc0/中的存檔)時拒絕執行。
交接給
/console-tester在打包前後於本機測試建置版本。/console-controller處理裝置的控制器設定(Steam Deck 使用xbox配置,Android 使用觸控區域或藍牙手把)。/console-saves在裝置間搬移存檔(mc0/位於遊戲的 ELF 旁邊)。