<- click here to join discord server.
This project aims to perfectly reconstruct the source code of Touhou Koumakyou ~ the Embodiment of Scarlet Devil 1.02h by Team Shanghai Alice.
This project is still highly work in progress and in its early stages.
This project requires the original 東方紅魔郷.exe
version 1.02h (SHA256 hashsum 9f76483c46256804792399296619c1274363c31cd8f1775fafb55106fb852245, you can check hashsum on windows with command certutil -hashfile <path-to-your-file> SHA256
.)
Copy 東方紅魔郷.exe
to resources/game.exe
.
The build system has the following package requirements:
python3
>= 3.4msiextract
(On linux/macos only)wine
(on linux/macos only, prefer CrossOver on macOS to avoid possible CL.EXE heap issues)aria2c
(optional, allows for torrent downloads, will automatically install on Windows if selected.)
The rest of the build system is constructed out of Visual Studio 2002 and DirectX 8.0 from the Web Archive.
This will download and install compiler, libraries, and other tools.
If you are on windows, and for some reason want to download dependencies manually, run this command to get the list of files to download:
python scripts/create_devenv.py scripts/dls scripts/prefix --no-download
But if you want everything to be downloaded automatically, run it like this instead:
python scripts/create_devenv.py scripts/dls scripts/prefix
And if you want to use torrent to download those dependencies, use this:
python scripts/create_devenv.py scripts/dls scripts/prefix --torrent
On linux and mac, run the following script:
# NOTE: On macOS if you use CrossOver.
# export WINE=<CrossOverPath>/wine
./scripts/create_th06_prefix
Run the following script:
python3 ./scripts/build.py
This will automatically generate a ninja build script build.ninja
, and run
ninja on it.
You can find an XML export of our Ghidra RE in the companion repository
th06-re, in the xml
branch. This repo is updated nightly through
[scripts/export_ghidra_database.py
], and its history matches the checkin
history from our team's Ghidra Server.
If you wish to help us in our Reverse Engineering effort, please contact @roblabla on discord so we can give you an account on the Ghidra Server.
The easiest way to work on the reimplementation is through the use of
objdiff
. Here's how to get started:
- First, follow the instruction above to get a devenv setup.
- Copy the original
東方紅魔郷.exe
file (version 1.02h) to theresources/
folder, and rename it intogame.exe
. This will be used as the source to compare the reimplementations against. - Download the latest version of objdiff.
- Run
python3 scripts/export_ghidra_objs.py --import-csv
. This will extract fromresources/game.exe
the object files that objdiff can compare against. - Finally, run objdiff and open the th06 project.
The easiest is to look at the config/stubbed.csv
files. Those are all
functions that are automatically stubbed out. You should pick one of them, open
the associated object file in objdiff, and click on the function of interest.
Then, open the correct cpp
file, copy/paste the declaration, and start
hacking! It may be useful to take the ghidra decompiler output as a base. You
can find this output in the th06-re repository.
We would like to extend our thanks to the following individuals for their invaluable contributions:
- @EstexNT for porting the
var_order
pragma to MSVC7.