Francesco149/openrecet

GitHub: Francesco149/openrecet

该项目是对 Recettear 游戏 Win32 引擎的开源净室式 C 语言重实现,旨在为正版持有者提供一个逐位兼容原版的可执行文件替代品。

Stars: 8 | Forks: 0

# OpenRecet **Recettear: An Item Shop's Tale**(EasyGameStation,2007 / Carpe Fulgur 英文版,2010)背后的 Win32 引擎("Azumanga")的开源、净室设计式 C 语言重实现项目——旨在为拥有正版游戏副本的玩家提供一个行为与原版一致的 `recettear.exe` 直接替代品。 这是一个**教育性的逆向工程与游戏保存项目**。本项目**不包含任何游戏资源、反编译的二进制文件或受版权保护的内容**——您需要自备游戏副本。采用 MIT 许可证(仅适用于我们的代码;不授予原版游戏的任何权利)。 ![OpenRecet — 在实时的 HOUSE 地图上显示的 iv1_2 序章对话台词](https://static.pigsec.cn/wp-content/uploads/repos/cas/c5/c53ea6575243a1b6fcfa1f33267d7d0b956d2520eb006bf7f35e5a0bf837218d.png) *OpenRecet 在序章 iv1_2 对话台词中的表现:对话框和铭牌、两个角色立绘、法阵效果,以及引擎在实时地图上绘制的顶部 HUD(时钟 / 日期 / 金钱)——镇民从后窗前走过。下方的每一张截图都是真实的 OpenRecet 帧,已在相同的确定性输入轨迹下与原版引擎进行了逐位验证(我们不再将它们并排展示——在我们展示的这些节点上,移植版与零售版 1:1 匹配)。* 来自相同确定性轨迹的更多 OpenRecet 捕获画面: ![HOUSE 商店内部,自由漫游](https://static.pigsec.cn/wp-content/uploads/repos/cas/c5/c58a81e241f238febd980771d8227f2d340b42f25586e60b9731e78f9d651f55.png) *在商店内自由漫游:3D 房间(几何结构、纹理、光照、窗户的丁达尔光效),常驻的顶部 HUD(时钟 / 日期 / 金钱),“Change Camera”提示,Recette,以及一名从后窗走过的镇民。* ![商店内的讨价还价 UI](https://static.pigsec.cn/wp-content/uploads/repos/cas/e2/e2ab2afff7ba19b2e6597b8238172cd279aeece499b5653883cee30c305ec174.png) *与顾客就售价进行讨价还价:“Bargain!”价格表、物品的基础价格、顾客的反应以及物品详情提示——在实时商店之上渲染的客服议价 UI。* 谨以此纪念 Andrew Dice / [@SpaceDrakeCF](https://x.com/SpaceDrakeCF) 以及 Carpe Fulgur。 ## 状态 —— 处于早期阶段,尚不可玩 本项目处于**早期阶段**且**尚不可玩**。真实的启动路径已经可以运行(标题画面 → 新游戏 → 渲染 3D 商店内部),但仍有大量子系统尚未移植,也没有端到端的游戏玩法。上面的截图是目前已能运行的里程碑成果;**这里的截图会在取得重大突破时更新**,因此请将它们视为目前的最高进度,而非完整性的承诺。 关于实际情况——哪些已移植、已验证或尚未触及,请参见逐函数记录的实时状态页面(这些页面是从源代码生成的,而非手动维护的宣传材料): - **[`docs/STATUS.md`](docs/STATUS.md)** — 60 秒摘要:移植覆盖率统计及当前前线进展。 - **[`docs/port-ledger.md`](docs/port-ledger.md)** — 全部约 2,550 个引擎函数的逐函数移植状态。 - **[`docs/PROGRESS.md`](docs/PROGRESS.md)** — 带日期的叙述性更新日志。 目前的大致情况:引擎中约 14% 的非 thunk 函数已被触及(其中一小部分已通过运行时与原版进行验证)。一旦游戏基本可玩,本节将变成一个简短的“已知问题”列表。 ## 验证方式 正确性是通过**与原版二进制文件的行为一致性**来衡量的,而非凭空猜测: - **逐绘制 Direct3D 状态追踪**——从移植版和零售版(通过 Frida)中捕获,并逐个对 draw call 进行差异比对——这就是上述商店亮度、百叶窗和丁达尔光效被精准匹配到 1:1 的方式。 - **调用追踪差异比对**——逐帧比较移植版和零售版之间的函数调用序列,以捕捉遗漏或逻辑分歧。 - **帧捕获**——在固定帧进行移植版与零售版的图像对比。 - **2,900 多项宿主单元测试**——用于可移植解码器和游戏逻辑,每次 C 代码更改都在 AddressSanitizer + UndefinedBehaviorSanitizer 环境下运行。 具体方法详见 [`docs/AGENT-WORKFLOW.md`](docs/AGENT-WORKFLOW.md) 和 [`docs/harness-roadmap.md`](docs/harness-roadmap.md)。 ## 构建与运行 您需要**自行拥有正版的 Recettear 副本**——本构建不包含任何游戏资源,并且在首次运行时,移植版会从您自己的零售版 `recettear.exe` 中读取游戏音效并在本地缓存(项目绝不会重新分发它们;请参见 [`docs/formats/se-pack.md`](docs/formats/se-pack.md))。 ``` nix develop # dev shell: mingw-w64 32-bit cross compiler + RE toolchain make -C src # cross-compiles build/openrecet.exe (+ openrecet-debug.exe) make -C tests run # the host unit-test suite ``` 将生成的 `openrecet.exe` 放入您的 Recettear 安装文件夹(与从中读取 SE 的 `recettear.exe` 并列)并运行。所有内容所针对的确切参考二进制文件已在 [`docs/reference/vendor-exe.md`](docs/reference/vendor-exe.md) 中记录。 预构建的 nightly 二进制文件作为滚动发布的 [`nightly`](../../releases/tag/nightly) 预发布版本提供(未签名;需自备 Recettear)。 ## 仓库结构 ``` docs/ design notes, file-format specs, RE findings, status pages src/ the C reimplementation (cross-compiled with mingw32) tests/ host unit tests, golden-frame diffs, format-decoder tests tools/ build/run harness, extractors, Frida capture, CI scripts ``` ## 法律声明 OpenRecet 是一个独立的非官方项目,**不附属于 EasyGameStation 或 Carpe Fulgur,也未获得它们的认可**。它不包含原版游戏的任何资产或代码,并要求您拥有合法的 Recettear 副本(Steam App ID 70400)。所有商标均归其各自所有者所有。OpenRecet 自身的源代码在 [MIT 许可证](LICENSE) 下发布。
标签:客户端加密