Fairy-Oracle-Sanctuary/th06-plus
GitHub: Fairy-Oracle-Sanctuary/th06-plus
这是一个基于 Touhou 06 的增强修改版,提供中文本地化、命中框显示与无限生命等调试与研究功能。
Stars: 1 | Forks: 1
# 东方红魔乡 06 ~ 红魔乡[plus]
[][discord] <- 点击此处加入 discord 服务器。
这是由 GensokyoClub 制作的 [th06](https://github.com/GensokyoClub/th06) 的修改版本。
## 修改内容
此 fork 包含以下修改:
- **修复帧率 Bug** - 修复了游戏运行速度不正确的 Bug
- **内置判定区指示器** - 按 Shift 键可显示以玩家为中心的旋转判定区指示器
- **无限生命** - 玩家死亡时自动获得生命
- **中文本地化** - 全面支持使用 GB2312 字符集和 SimHei 字体的中文文本
- **默认窗口模式** - 游戏默认以窗口模式启动
### 中文本地化数据
中文本地化的 DAT 文件(`th06c_*.DAT`)来自 [thdog.moe](https://cn.thdog.moe/%E5%9B%BD%E9%99%85%E5%88%86%E6%B5%811/%E4%B8%9C%E6%96%B9Project/%E5%AE%98%E6%96%B9%E6%B8%B8%E6%88%8F/%E6%95%B4%E6%95%B0%E4%BD%9C/%5Bth06%5D%20%E4%B8%9C%E6%96%B9%E7%BA%A2%E9%AD%94%E4%B9%A1%20(%E6%B1%89%E5%8C%96%E7%89%88+%E6%97%A5%E6%96%87%E7%89%88)%201.02h.zip)。
原项目描述:
本项目旨在完美重构 Team Shanghai Alice 的 [东方红魔乡 ~ the Embodiment of Scarlet Devil 1.02h](https://en.touhouwiki.net/wiki/Embodiment_of_Scarlet_Devil) 的源代码。
## 安装说明
### 可执行文件
此项目需要原版 `東方紅魔郷.exe` 1.02h 版本(SHA256 哈希值为 9f76483c46256804792399296619c1274363c31cd8f1775fafb55106fb852245,你可以在 Windows 上使用命令 `certutil -hashfile SHA256` 检查哈希值)。
将 `東方紅魔郷.exe` 复制到 `resources/game.exe`。
### 依赖项
构建系统有以下软件包要求:
- `python3` >= 3.4
- `msiextract`(仅限 Linux/macOS)
- `wine`(仅限 Linux/macOS,在 macOS 上推荐使用 CrossOver 以避免可能出现的 CL.EXE 堆问题)
- `aria2c`(可选,允许进行 torrent 下载,如果在 Windows 上选择则会自动安装)
构建系统的其余部分是由来自 Web Archive 的 Visual Studio 2002 和 DirectX 8.0 构建的。
#### 配置 devenv
这将下载并安装编译器、库和其他工具。
如果你使用的是 Windows,并且出于某种原因想要手动下载依赖项,
运行以下命令以获取需要下载的文件列表:
```
python scripts/create_devenv.py scripts/dls scripts/prefix --no-download
```
但如果你希望自动下载所有内容,请像这样运行:
```
python scripts/create_devenv.py scripts/dls scripts/prefix
```
如果你想使用 torrent 下载这些依赖项,请使用以下命令:
```
python scripts/create_devenv.py scripts/dls scripts/prefix --torrent
```
在 Linux 和 Mac 上,运行以下脚本:
```
# 注意:在 macOS 上如果你使用 CrossOver。
# export WINE=/wine
./scripts/create_th06_prefix
```
#### 构建
运行以下脚本:
```
python3 ./scripts/build.py
```
这将自动生成一个 ninja 构建脚本 `build.ninja`,并
运行 ninja。
#### 创建发布包
要创建可分发的发布包:
```
python3 ./scripts/release.py
```
这将:
1. 清理构建目录中不必要的文件(目标文件、调试符号等)
2. 创建一个仅包含基本游戏文件的 zip 压缩包
选项:
- `--no-clean` - 跳过清理构建目录
- `--no-zip` - 跳过创建 zip 压缩包
- `-o PATH` - 指定 zip 的输出路径
- `-n NAME` - 指定发布名称(默认:th06e-release)
### 逆向工程
你可以在配套仓库的 `xml` 分支中找到我们使用 Ghidra 进行逆向工程的
XML 导出文件 [th06-re]。该仓库每晚通过
[`scripts/export_ghidra_database.py`] 进行更新,其历史记录与我们团队在
Ghidra Server 上的签入历史相匹配。
如果你希望协助我们进行逆向工程工作,请在 Discord 上联系
@roblabla,以便我们能在 Ghidra Server 上为你提供一个账号。
### 重新实现
进行重新实现的最简单方法是使用
[`objdiff`](https://github.com/encounter/objdiff)。以下是入门步骤:
1. 首先,按照上述说明配置 devenv。
2. 将原版 `東方紅魔郷.exe` 文件(1.02h 版本)复制到
`resources/` 文件夹,并将其重命名为 `game.exe`。这将用作与
重新实现进行比较的源文件。
3. 下载最新版本的 objdiff。
4. 运行 `python3 scripts/export_ghidra_objs.py --import-csv`。这将从
`resources/game.exe` 中提取可供 objdiff 进行比较的目标文件。
5. 最后,运行 objdiff 并打开 th06 项目。
#### 选择要反编译的函数
最简单的方法是查看 `config/stubbed.csv` 文件。这些都是
自动被 stub 处理的函数。你应该选择其中一个,在
objdiff 中打开关联的目标文件,然后点击感兴趣的函数。
接着,打开正确的 `cpp` 文件,复制/粘贴声明,然后开始
修改代码!以 Ghidra 反编译器的输出作为基础可能会很有用。你
可以在 [th06-re] 仓库中找到此输出。
# 鸣谢
我们在此向以下为项目做出宝贵贡献的
个人表达感谢:
- @EstexNT 感谢其将 [`var_order` pragma](scripts/pragma_var_order.cpp) 移植到
MSVC7。
English | 简体中文
标签:C/C++, 东方Project, 事务性I/O, 云资产清单, 汉化, 游戏, 逆向工程