dwgx@blog:~$dwgx
> cd ../posts

thtk:fork 一套东方游戏数据逆向工具

// created

Touhou Toolkit

thtk(Touhou Toolkit)是 thpatch 那帮做东方汉化的人写的一套 C 命令行工具,专门拆东方系列游戏的私有数据格式。这里是我 fork 过来的实验副本,用来学他们怎么写逆向工具,不跟上游同步,别当上游用。

东方每一作的档案、动画、剧本、关卡都塞在自家的二进制格式里,thtk 硬是逆出来做成工具,从早期一路支持到 20 代。它不是一把大而全的瑞士刀,而是几个各管一摊的小工具:

  • thdat 管档案 DAT,x 解包 c 打包,支持的作数最全
  • thanm 管动画和精灵图 ANM,xl 列内容
  • thecl 管 ECL 脚本,d 反编译 c 编回去,弹幕逻辑都在这
  • thmsg 管对话文本 MSG,d dump c compile,汉化最先动它
  • thstd 管关卡布局 STD,dump/compile 一对

思路很统一:每种私有格式配一个工具,先解成人能读能改的东西,改完再编回游戏认的二进制。上手从 thdat x 拆某一作的 DAT 开始,往里一层层剥就行。

真正有意思的在源码。thecl、thmsg、thstd 用 Yacc/Lex 写了词法和语法,dump 出来那份文本其实是一门小 DSL,compile 就是把它解析回字节。这套二进制和可读脚本的双向管线很干净,格式版本怎么表驱动区分、跨版本兼容怎么留口子、CMake 怎么把一堆 extlib 串起来,照着读能搞懂不少以前糊弄过去的地方。

提醒一句:这仓库只在本地折腾,游戏的私有二进制、带路径凭据的东西都不往里 commit。工具本身是公开的,但拆出来的游戏数据是人家版权物,边界自己守好。授权看 thpatch/thtk 上游,我没动那块。