Skip to content

Repository files navigation

東方文花帖 ~ Shoot the Bullet

Original Japanese TH095 1.02a title screen

TH095 exact source reconstruction progress

This project reconstructs the original Japanese TH095 version 1.02a executable. Reproducible byte comparison against one hash-attested target is the acceptance criterion.

Exact target

Supply your own legal copy as resources/th095.exe:

Property Required value
Version original Japanese 1.02a
Size 696,832 bytes
SHA-256 bb54f6fc54f0eeffaec416ca9f64aef32b5f59b7427fa5a6579f6538e0eddc07
MD5 8de95bc7651419201fc1a4ea49bc0697
Image base 0x00400000
Entry point 0x00486A9D

The target identifies itself as Shoot the Bullet. ver 1.02a. The official 1.02a update post links the th095_ver102a.exe updater used to produce the final Japanese version.

scripts/import-target.sh /path/to/th095.exe
python3 scripts/verify-target.py

Copyrighted executables, game data, and private analysis databases are not included.

Current status

TH095 is in active reconstruction. The historical attested Ghidra 12.1.3 import supplied 1,830 provisional function candidates; IDA Pro MCP is now the primary semantic-analysis backend. The generated progress badge and report are the canonical live totals. Exact units include the complete 17,018-byte AnmManager::ExecuteScript, 27,091-byte EclManager::RunEcl, the target-specific asynchronous SoundPlayer core, and the Main/D3D runtime family. The TH095-specific replay stream, disk/archive loader, compressed writer, result-screen dependencies, scene-selection helpers, photography camera helpers, the five-function WinMM/DirectInput controller chain, keyboard reset, and the shared FileSystem codec/archive-or-disk loader are also exact. The complete dual-device and aggregate Controller::GetInput path is source-present. The complete TH095 Music Room is source-present, with both music-comment parsing helpers exact. The complete nine-page Help viewer is also source-present, and its asynchronous archive-or-disk loading callback is exact. The shared TH095 scene-score/replay-browser text renderer is source-present as well, with exact update/draw chain ownership wrappers. The owning ten-state front-end coordinator is source-present with its complete main/scene/replay/options/music/Help and game-transition routing. Its complete six-row title menu is source-present as well, including idle-demo playback and queue cleanup; both of its high-fan-out VM interrupt helpers are exact. The complete TH095 group/scene selection hub is source-present with all three asynchronous preview pipelines and its exact 275-call topology; its shared D3D texture clear helper is exact. The selector's asynchronous mission/face asset worker is source-present with its complete queue protocol and exact 38-call topology. The selected-scene best-shot loader and shared 8 KiB-ring decompressor are source-present, and their aligned checksum dependency is exact. The selector/Help ANM texture pipeline is source-present through full and regional uploads and three-format alpha bleed; the full upload, format selector, and all three pixel-neighbor helpers are exact.

A target-local audit continues to admit photography/camera, replay/menu, scene-selection, options, and gameplay/resource functions as their authored origins are proved. Mapping, source presence, semantic validation, and exact matches are deliberately tracked as independent states, so the denominator can grow and difficult compiler-shape residuals remain uncredited. The aspirational reconstruction target is 99.5% of that conservative authored denominator, but difficult units remain uncredited rather than weakening the exact-match standard.

The pinned compiler is Microsoft Visual C++ .NET 2003 13.10.3077, matching the target's PE/Rich-header evidence. The /Od /Ob1 /Oi /Gr main translation-unit profile is proven across seventeen accepted Main/D3D units. The exact ANM and ECL VM units independently prove the same optimization/inlining shape for their bounded translation units. The reconstructed SoundPlayer lane also uses /Od /Ob1; profiles elsewhere remain unclassified.

Start a reconstruction session with:

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

Attest the active IDA database against config/target.toml before relying on its analysis; see the IDA guide below.

Documentation

Run public, target-independent checks with python3 scripts/ci.py. Private target and IDA/Ghidra checks remain separate from public CI.

Reference model

The control plane follows the conservative in-progress model from N0zoM1z0/th105. The completed N0zoM1z0/th08 project is a secondary source for strict comparison and Ghidra workflow patterns. Neither repository is binary evidence for TH095, and completed port infrastructure is intentionally out of scope during bring-up.

License

Repository-authored code and documentation are provided under the MIT License. This does not grant rights to the original game or its assets.

About

Source reconstruction of 東方文花帖 ~ Shoot the Bullet 1.02a

Topics

Resources

Stars

24 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages