Francesco149/openrecet

GitHub: Francesco149/openrecet

Stars: 8 | Forks: 0

# OpenRecet An open-source, clean-room-style C reimplementation of the Win32 engine ("Azumanga") behind **Recettear: An Item Shop's Tale** (EasyGameStation, 2007 / Carpe Fulgur EN, 2010) — aiming at a drop-in replacement for `recettear.exe` that behaves like the original for people who own a legitimate copy of the game. This is an **educational reverse-engineering and game-preservation project**. It ships **no game assets, no decompiled binary, and no copyrighted content** — you bring your own copy of the game. MIT licensed (our code only; no rights to the original game are granted). ![OpenRecet (left) vs the original retail engine (right) — the HOUSE shop interior](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/baf7034dff165530.png) *OpenRecet (left) next to the original engine (right), free-roaming in the shop. The 3D room (geometry, textures, lighting, window god-rays), the persistent top HUD (clock / day / money), the "Change Camera" hint, the FPS overlay, Recette, and the townsfolk drifting past the back window are all reproduced close to 1:1. (The NPCs' exact drift phase isn't pinned yet, so they're at slightly different spots in the two windows.)* A few more side-by-sides from the opening — each is OpenRecet (left) vs the retail engine (right), captured from the same deterministic input trace: ![iv1_1 'sigh' effect sprite](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d0d2b32247165537.png) ![iv1_2 look-up pose, zoomed](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/3bb330e62c165549.png) ![iv1_2 dialogue with the HUD](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/9f0a52bf21165557.png) *Top to bottom: the iv1_1 "sigh" effect sprite mid-fade (full-screen cutscene, no HUD); a zoom on Recette's look-up pose at the iv1_2 opening; and an iv1_2 dialogue line — note the top HUD, which the engine draws over the live map during iv1_2 but suppresses behind iv1_1's full-screen background.* In memory of Andrew Dice / [@SpaceDrakeCF](https://x.com/SpaceDrakeCF) and Carpe Fulgur. ## Status — early, not yet playable This is **early-stage** and **not playable yet**. A real boot path runs (title → new game → the 3D shop interior renders), but large subsystems are unported and there is no end-to-end gameplay. The screenshot above is the kind of milestone that's working today; **screenshots here get refreshed on major breakthroughs**, so treat them as a high-water mark, not a promise of completeness. For the actual state of things — what's ported, verified, or untouched, function by function — see the live status pages (these are generated from the source, not hand-maintained marketing): - **[`docs/STATUS.md`](docs/STATUS.md)** — 60-second headline: port-coverage counts and the current front. - **[`docs/port-ledger.md`](docs/port-ledger.md)** — per-function port status for all ~2,550 engine functions. - **[`docs/PROGRESS.md`](docs/PROGRESS.md)** — dated narrative changelog. At a glance right now: ~14% of the engine's non-thunk functions are touched (a few percent runtime-verified against the original). Once the game is mostly playable this section will turn into a short "known issues" list instead. ## How it's verified Correctness is measured as **behavioural parity against the original binary**, not guesswork: - **Per-draw Direct3D state traces** captured from both the port and retail (via Frida) and diffed draw-call by draw-call — this is how the shop's brightness, window blinds, and god-rays above were pinned to 1:1. - **Call-trace diffing** — per-frame function-call sequences compared between port and retail to catch missing or divergent logic. - **Frame captures** — port-vs-retail image comparisons at fixed frames. - **2,900+ host unit tests** for the portable decoders and game logic, run under AddressSanitizer + UndefinedBehaviorSanitizer on every C change. Methodology lives in [`docs/AGENT-WORKFLOW.md`](docs/AGENT-WORKFLOW.md) and [`docs/harness-roadmap.md`](docs/harness-roadmap.md). ## Building & running You need **your own legitimately-owned copy of Recettear** — the build ships no assets, and on first run the port reads the game's sound effects out of your own retail `recettear.exe` and caches them locally (it never redistributes them; see [`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 Place the resulting `openrecet.exe` in your Recettear install folder (alongside `recettear.exe`, which it reads SE from) and run it. The exact reference binary all of this targets is documented in [`docs/reference/vendor-exe.md`](docs/reference/vendor-exe.md). Pre-built nightly binaries are published as a rolling [`nightly`](../../releases/tag/nightly) pre-release (unsigned; bring your own Recettear). ## Repository layout 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 ## Legal OpenRecet is an independent, unofficial project and is **not affiliated with or endorsed by EasyGameStation or Carpe Fulgur**. It contains none of the original game's assets or code and requires you to own a legitimate copy of Recettear (Steam App ID 70400). All trademarks belong to their respective owners. OpenRecet's own source is released under the [MIT license](LICENSE).
标签:客户端加密