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 # 本机的操作系统
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构建并检查。在桌面上崩溃的问题在手机上不会好转。 - 检查工具链。
targets.py doctor --target <t>。使用打印的命令安装缺少的内容,然后再次运行 doctor。 - 计划。
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)和--game/--serial(用于.recomp.json)。 - **阅读检查结果。**拒绝时会列出每个文件及其原因。修复原因(错误的
--lib、运行器旁边的光盘文件)。切勿为光盘镜像、PS2 ELF、IRX、SYSTEM.CNF或运行器源代码添加允许行: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 | 或 Windows 版本通过 Proton 运行(此处未测试) |
| 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 的文件。运行器本身由重新编译的游戏代码构建:该包仅用于用户自己的设备,不可上传。分享补丁、覆盖层和原始资源。 - **与索尼无关。**PlayStation 是索尼互动娱乐的商标。PS Vita 自制系统、Steam、Android 及其他平台归其各自所有者所有。
- 切勿破坏用户的文件。
--replace仅替换此工具创建的文件夹,并且在game/中存有任何内容(玩家的光盘,mc0/中的存档)时拒绝操作。
移交给
/console-tester在打包前后在本机上运行构建。/console-controller处理设备的控制(Steam Deck 上的xbox布局,Android 上的触摸区域或蓝牙手柄)。/console-saves在设备之间移动存档(mc0/位于游戏 ELF 旁边)。