Inspiration
Localizing a legacy visual novel is not just a translation problem. Text is buried inside binary containers, language slots can be misidentified, control codes can be damaged, and a one-byte mistake can invalidate an entire resource. Existing workflows often rely on one-off scripts and manual confidence rather than reproducible evidence.
Patchsmith was built to make that work auditable. Every change needs an exact address, an expected source value, and a post-write proof.
What it does
Patchsmith provides one local Python CLI for three connected jobs:
- FPD and EGPACK inspection: safely identify FPD containers and parse EGPACK multi-language records by real field identity rather than nearby visible strings.
- RIO and CRsa writeback: verify encrypted chunks, preserve fixed offsets and UTF-16LE slot capacity, re-encrypt with checksum validation, and produce a compact byte patch.
- Translation provenance and QA: audit stable IDs, empty rows, duplicate records, manual newlines, and control-code sequence changes before binary writeback.
The public demo uses only generated synthetic files. It contains no commercial dialogue, images, music, fonts, game packages, or proprietary keys.
How we built it
Patchsmith is written in Python 3.10+ using only the standard library. The demo creates synthetic FPD, EGPACK, and RIO/CRsa resources in memory, performs exact modifications, reparses or decrypts the output, and verifies the resulting hashes.
The EGPACK pipeline requires relative_path + text_id + language_slot + expected_text. The RIO pipeline requires filename + block_offset + payload_offset + capacity. The byte-patch layer refuses an unexpected base SHA-256 or file size.
What changed during Build Week
This project grew from a pre-existing localization effort. We clearly separated prior work from the Build Week extension. During the submission period we added a new title pipeline, asset and manifest tests, UI-string tooling, separated terminology/translation/review/technical standards, and this standalone copyright-free CLI and synthetic evaluation path.
How we used Codex and GPT-5.6
Codex helped us inspect a large multi-worktree codebase, distinguish reusable primitives from game-specific scripts, design the public/private boundary, implement the unified CLI, create synthetic fixtures, write tests, debug binary round trips, and prepare judge-facing documentation.
Codex sessions running GPT-5.6 were used to reason through the exact-address and fail-closed safety model, refactor reusable EGPACK and RIO/CRsa primitives into the standalone CLI, generate copyright-free binary fixtures, and test both successful round trips and malformed-input rejection. The final submission will include the primary /feedback session evidence.
Challenges
- The same engine family uses different container and script layouts across titles and platforms.
- A marker such as
CRsais not proof by itself; size fields, checksums, decryption, encoding, and offsets all need independent evidence. - Translation text and binary correctness require different review stages.
- A public developer-tool submission must remain useful without redistributing copyrighted source material.
Accomplishments
- A one-command, zero-dependency synthetic demo.
- Exact EGPACK field targeting with fail-closed validation.
- Checksum-verified RIO/CRsa encryption round trips.
- SHA-256-locked, equal-size byte patches.
- Nineteen automated tests covering success and failure paths.
- A clean repository containing zero commercial assets.
What we learned
The most important lesson was that successful output is not the same as proven output. A patch that launches can still contain a shifted language slot, altered control sequence, or undocumented fallback. Stable identifiers, expected-value locks, independent QA, and byte-level verification turn reverse engineering into a maintainable engineering process.
What's next
Next we plan to add pluggable format profiles, richer manifest visualization, more synthetic container variants, and a review dashboard that links every proposed translation to its binary location and audit history.
Log in or sign up for Devpost to join the conversation.