案例
Final Fantasy VII:PlayStation 版一致性反编译
为 Final Fantasy VII 美版 PlayStation 发行版重建 C 源码,目标是让代码重新编译出原版主可执行文件及各游戏覆盖段(overlay)。构建流程用 splat 拆分使用者自备的光盘文件,以当年的 cc1-psx 编译器编译,并用 SHA-1 校验每个重建文件。基于 PsyZ(PlayStation 库替代实现)的原生构建会在 CI 中编译,但未作为可游玩的移植版加以说明。
使用条件与局限
- 项目自述为该 PS1 游戏的一致性反编译;config/us.yaml 只定义了 us 一个版本,涵盖 SCUS_941.63 以及战斗、野外、菜单、世界地图、小游戏、魔法及其他覆盖段,共 29 条 SHA-1 记录。源码中的数据表(例如陆行鸟小游戏的反余弦表)取自游戏,这在此类项目中很常见。README 未给出完成度数字;CI 会把进度报告上传为构建产物,本合集未记录任何数字。
- 需将 Final Fantasy VII(USA)第 1 张光盘以 BIN/CUE 形式放在 disks/ 下;README 将美版 Interactive Sampler CD 列为可选,但所审配置只构建 us 版本。CONTRIBUTING 说明仓库不含原版游戏数据,也不是可游玩或独立运行的版本。CI 通过机密令牌从一个私有依赖仓库获取光盘镜像。
- README 介绍了 Debian/Ubuntu 与 Arch Linux 下的环境:Go、Python 3(含 splat64、spimdisasm 等的虚拟环境)、ninja、7zip、bchunk 以及 mipsel-linux-gnu binutils 和 GCC;CI 注释指出 Ubuntu 24.04 自带的 binutils 2.42 链接器与游戏不匹配。make 会从项目的 init 发布版下载 cc1-psx-26 与 cc1-psx-272 编译器构建,并以仓库中的 SHA-256 文件校验;maspsx、m2c、asm-differ 与 PsyZ 以子模块引入,另提供 Dockerfile。
- make build 的最后一步是 ninja 规则,以 sha1sum -c 校验每个覆盖段的预期哈希。上游仓库的 CI 检查代码格式、运行该构建、检查符号重叠,并编译 PsyZ 构建。这些检查比较的是美版文件是否一致,并不覆盖游戏流程,本合集未重新运行。
- LICENSE 为 AGPL-3.0;游戏光盘、提取出的数据和下载的编译器另有权利归属。README 表示反编译代码由人编写,拒绝借助 LLM 加速反编译,但允许将 LLM 用于工具开发、对难点函数做排列尝试或排查运行时错误;CONTRIBUTING 禁止自主生成的拉取请求和提交信息。未记录 REA 使用,也不主张运行复现。
关于此条目
- 类型
- 案例
- 类别
- 独立重建案例
- 关联
- 独立重建项目
- 目标
- 游戏
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5
- CONTRIBUTING.md GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5
- Makefile GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5
- config/us.yaml GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5
- tools/ninja/gen.py GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5
- tools/builder/builder/build.go GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5
- .github/workflows/build.yaml GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5
- CMakeLists.txt GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5
- .gitmodules GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5
- bin/cc1-psx-26.gz.sha256 GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5
- Dockerfile GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5
- LICENSE GitHub · Xeeynamo/ff7-decomp · 修订 37f35a5