Skip to content
N0zoM1z0Public

About

Source reconstruction of 東方錦上京 ~ Fossilized Wonders. Japanese 1.00a (Steamless)

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

東方錦上京 ~ Fossilized Wonders.

Original Japanese TH20 title screen

TH20 exact source reconstruction progress

Source reconstruction of the original Japanese TH20 v1.00a Steamless executable. Function-level exactness requires reproducible comparison against one hash-attested target. The workflow follows TH095, with Ghidra and a separate modern MSVC environment for TH20.

Important

Reconstruction is in progress. Verified source components and exact function comparisons are available; the repository does not yet build a playable game. Origin review, source presence, exactness, linkage and runtime behavior are separate statuses.

Exact target

Supply your own executable as resources/th20.exe:

Property Required value
Version Japanese 1.00a, user-selected Steamless variant
Embedded title/replay label 1.00c; recorded separately from registry/package identification
Size 1,858,560 bytes
SHA-256 a274b45fe6ec53511718bb328c2ff169a74e67f95d1b0c74d97d348b955a0897
MD5 e7ccdbd2f319ba868ce386e484fff1d3
Image base 0x00400000
Entry point 0x005435E0
scripts/import-target.sh /path/to/th20.exe
scripts/repo-python scripts/verify-target.py

The Steam-original backup is retained locally as provenance evidence. Its code differs from the comparison target. See target provenance for official Japanese release and independent executable identification. Game executables, assets, private databases, toolchains and reference checkouts are excluded from Git.

Repository status

At the October 30, 2026 checkpoint the maintained graph has 1,238 source-present mappings, 1,238 strict canonical native units and 259 canonical MSVC object/receipt providers. Independently verified game-authored whole-function exactness is 589 complete functions / 193,512 original native bytes. These are dated values, not a whole-game buildability or playable-game claim: always run scripts/repo-python scripts/report-reconstruction-status.py --summary for the live inventory and consult the current concise handoff for the unfinished bosses.

Area Verified current state
Large game-original exact bodies 11,110B ECL Runtime tick, 3,735B Bullet emitter /3,832B complete compiler extent, 3,490B InputDevice poll, 456B Animation handle resolver, 1,404B Bullet command-11, 1,036B LZSS compressor and 73B Animation factory are whole native strict exact.
Source-present, NONEXACT 3,111B Player main, 555B Player movement, 273B Bullet draw group, and 1,649B Enemy mesh. Compiler, stack and ABI/codegen differences remain.
Giant original bosses, NONEXACT (Animation draw and quad submission source-present; Bullet command, Enemy ECL and Animation VM source-absent) 12,140B Bullet command processor, 5,993B Animation draw Boss now with complete 49-mode typed C++ source, still NONEXACT, 3,159B quad submit Boss with complete typed C++ but nonexact codegen, 41,967B Enemy ECL dispatcher and 39,470B Animation VM. Exact children do not close these parent bodies.
Bullet command call graph Entire original 12,140B has 210 original native E8 calls, 208 with fully strict-canonical source targets and two compiler-runtime-only outstanding. Seven new Animation methods in two batches add 447 whole native original bytes, but the parent remains NONEXACT. The three original switch tables contain 53 genuine PE HIGHLOW code pointers.
Renderer/Animation draw (whole strict children vs nonexact parents) Whole-native strict exact: 2,725B ten-mode D3D9 texture/sampler boss including its ten-case PE table; 1,163B four-mode blend-state boss including its four-way PE table; 352B batch append +26B forwarding wrapper; 60B game texture lookup and 34B+16B checked STL helpers, with library bytes excluded from game credit; 192B D3D9 batch flush; five quad drawing mode wrappers and three 92B Graphics state-cache transitions. Still NONEXACT parents: 3,159B quad submission with 41/41 E8 and 96/96 HIGHLOW target roles and 5,993B draw dispatcher with all 123 E8 roles. Original source-role counts do not establish machine-code exactness.
Typed gameplay and native library source 199B Bullet interpolation game methods, Animation/Player/ECL game methods, Laser lifetimes, geometry and value methods. Separate PMR vector STL and shared_ptr STL code is library-excluded, not additional game-authored exact credit.
Original game data 72B signed 9x2 Player movement direction table is exact original .rdata and real maintained C++; not counted as authored .text.
Whole-program link or playability Not yet available. Strict mapping, provenance, game-origin credit and executable runtime are distinct.

Generated progress and the status reporter provide live authored totals. The current handoff records remaining work and local verification; the evidence index routes dated investigations without mixing historical counts into current status.

The pinned toolchain candidate is MSVC 19.44.35211 x86, Windows SDK 10.0.26100.0 and D3DX 9.29.952.8. Accepted units use explicit per-source profiles. These results do not establish executable-wide compiler flags, SDK or CRT identity.

Build and verify

Documentation and artifact-cleanup handoffs use diff/link checks and protected product hashes. An unchanged native compiler-input graph needs no replay, compiler, Ghidra or full CI run. Shared-header text edits can invalidate pinned compiler receipt hashes: replay only the actual pre-edit receipt include closure in that case. Use the gpt-web: commit prefix.

When code or infrastructure changes warrant broader checks, public CI needs Python 3.11+, with no original game or C++ compiler:

scripts/repo-python scripts/ci.py

Default CI checks the exact oracle and repository metadata. The historical portable C++ semantic suite has been retired; retained tests cover exact comparison and repository tools. Exact checkpoints require affected native builds and complete strict replay. A specific unresolved behavior or ABI question can use a temporary probe under .analysis/.

Private preflight for reconstruction changes is:

scripts/bootstrap-tools.sh
scripts/repo-python scripts/verify-target.py
scripts/repo-python scripts/report-reconstruction-status.py --summary
scripts/repo-python scripts/validate-tracking.py --require-target

On a fresh private workspace, provision tools as described in Tools, then run scripts/repo-python scripts/ghidra.py import once. Every query re-attests the executable and complete mapped code section; inventory refreshes never overwrite reviewed ledgers. For source changes, derive the actual affected providers from captured include closures and manifest dependencies. Build and replay only those units, with individual unit commands or explicit --source filters. New exact acceptance requires affected cold builds; see build and matching.

Reference review

Oracatt/Touhou20 is pinned locally under ignored _reference/Touhou20. Its target hash matches ours. Its v1.00c label comes from embedded strings; our v1.00a identification follows the independent hash registry and supplied package. Both observations are preserved in provenance.

The review records the repository-wide evidence audit, module dispositions, stale reports and independently verified absorption. Validated source diagnostics route further analysis; reference source, build layout and completion claims are not imported wholesale.

The function-by-function review is complete for all 6,945 indexed implementations, including one parser omission recovered during manual review. All 113 parser-gap files are manually reconciled. The final audit records coverage and evidence limits; nonexact implementations remain documented for further reconstruction.

Documentation

Credits

  • Oracatt/Touhou20: reference reconstruction, source diagnostics and behavioral investigations that guide our independent, function-by-function review.
  • N0zoM1z0/th095: reconstruction workflow, exact-oracle control plane, tracking conventions and README/progress layout.

License

MIT for this repository's original code and TH095-derived control plane. It grants no rights to the original game, downloaded tools or external reference material. Maintained prose and commit messages are in English; official names and original target evidence retain their original language.

About

Source reconstruction of 東方錦上京 ~ Fossilized Wonders. Japanese 1.00a (Steamless)

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages