视频教学系列,持续更新中
文字版请向后翻页
#01 THK 编译与反编译入门
文案
THK 控制怪物的行动,即怪物 AI。THK 是一个决策树,基于节点和控制语句,对怪物动作进行更改。
文件结构
THK 文件位于游戏目录 `/em/emxxx/xx/data` 内,通常根据功能会分为多块,例如 `em013_00.thk`, `em013_55.thk` 等。分块的 THK 通过 `.thklst` 进行索引。
解包
通过解包游戏获取原始怪物数据
可视化解包器 MHW No Chunk: https://www.nexusmods.com/monsterhunterworld/mods/411
为方便操作,解包整个em目录
反编译
下载编译/反编译器 Leviathon: https://github.com/AsteriskAmpersand/Leviathon
Leviathon 有一套自己定义的语法。语法有点类似 Lua
语法和编译器用法参考: https://github.com/Ezekial711/MonsterHunterWorldModding/wiki/Leviathon-Language-Reference
.fand <=> .thklst
.nack <=> .thk
补充
为了调试方便,需要在反编译时导出所有符号。由于默认导出设置丢弃了空的节点,会导致调试器与实际反编译的代码无法一一对应
编译:
.\ABCompiler.exe <你的.fand文件路径> -outputName em124
反编译:
.\ABCompiler.exe chunk\em\em124\00\data\em124.thklst -nullShow -fixShow -indexShow
安装调试器
安装动态调试器插件(需要 Stracker's Loader 前置): https://github.com/Fexty12573/mhw-thk-logger
**将下载的 `mhw-thk-logger.dll` 放到游戏内 `nativePC/plugins` 内**
实际上只需要打印 log 就够用了,其高级调试功能通常用不上。
建议启用 loader 的 log 功能,启用 log 输出到文件的功能
编辑游戏根目录 `loader-config.json`
{
"logfile": true,
"logcmd": true,
"logLevel": "INFO",
"outputEveryPath": false,
"enablePluginLoader": true
}
logfile 设为true以输出log到文件
logLevel 等级至少设为INFO以上,推荐设为INFO
查看 log 并对照反编译代码分析
推荐实践:使用录屏记录怪物出招时的时间刻,在log文件里对照时间刻分析
