给 GTA 文本编辑加一个 Agent 外挂:dsh-gxt-editor 1.2.0
从二进制 GXT 到可 diff 的仓库文本,再到字符表 PNG:这是给 DeepSeek Harness 写的 GXT 工具链。
一、GXT 的麻烦,不在翻译
GXT 是 GTA 系列的文本资源。它看起来只是“键值对”,实际却是一套很容易写坏的二进制格式:
- 不同版本的表结构不一样,III、VC、SA、IV、GXT2、Manhunt 2 各有各的 TKEY 布局
- 键可能是字面量,也可能是 CRC32、GTA4 hash、JOAAT
- 字符可能是 UTF-16LE、UTF-8、CP1252,甚至自定义字符集
- 改完要重建、回读、比对,否则很容易出现“文本变了,但文件坏了”
真正麻烦的是改完之后的确认:
- 占位符
~1~数量对不对? - 颜色码
~h~、~w~有没有丢? - 按键提示
~k~~ACTION~有没有被翻译掉? - 这句字幕在游戏里会不会太长?
- 这个字在字符表里到底有没有?
传统做法是“编辑器 + 肉眼 + 进游戏试”。文本量一大,就开始靠脚本,脚本一多,又容易和仓库文本脱节。
dsh-gxt-editor 想解决的就是这一段。
二、它是什么
dsh-gxt-editor 是一个 DeepSeek Harness Host 插件,用 Cordis 的 tools 服务注册了 5 个工具,让 Agent 可以直接读写 GXT。
它不是 GXTStudio 的替代品。GXTStudio 是给人用的 GUI 专业工具;这个插件是给 Agent 用的自动化工具链:
- GXTStudio 负责“看得见、点得到”
dsh-gxt-editor负责“批量、可重复、可校验”
底层二进制布局参考 GXTStudio 的 GXTParser.cpp / GXTEditor.cpp,键名表也来自 GXTStudio 的 keylist/,并用 GXTStudio 3.1.0 的命令行做过双向交叉验证。
三、五个工具
| 工具 | 一句话 |
|---|---|
gxt_read | 看结构、搜键、读条目 |
gxt_edit | 结构化编辑,原子写入 |
gxt_convert | GXT ↔ 文本 / JSON / compiler 文本 |
gxt_repo | GXT ↔ 仓库目录,支持 diff |
gxt_preview | 行宽、token、缺字、PNG 预览 |
1. gxt_read
先摸清文件,再决定改什么。
{ "path": "text/chinese.gxt", "query": "兰斯", "limit": 10 }
它会返回版本、格式、编码、表数、条目数,以及每条的表、规范键、可读名和值。infoOnly: true 只看结构;includeValues: false 只列键。
2. gxt_edit
一次调用执行多个操作,全部成功才落盘。
{
"path": "text/chinese.gxt",
"operations": [
{ "op": "set", "table": "LAN_C6", "key": "LC6_01", "value": "~w~兰斯!快回来!" },
{ "op": "replace", "table": "MAIN", "pattern": "摩托帮", "replacement": "飞车党" }
]
}
支持 set、delete、renameKey、replace、addTable、renameTable、deleteTable、sortEntries、dedupe。也支持新建文件、另存为、8 位编码、dryRun 和备份。
3. gxt_convert
GXT 和文本/JSON 之间互转,也可以转版本。
{ "inputPath": "text/chinese.gxt", "outputPath": "text/chinese.json" }
JSON 是无损交换格式,保留表名、编码和 MH2 duration。普通文本不能表示字面换行,这类值要用 JSON。
4. gxt_repo
这是 1.2.0 的重点:把 GXT 变成可读、可 diff、可 Git 管理的仓库目录。
[LAN_C6]
;LC6_00=Packages
LC6_00=包裹
;LC6_01=Lance! Get back here now!
LC6_01=~w~兰斯!马上给我回来!
三个动作:
export:GXT → 仓库目录,referencePath用来生成;KEY=源语言注释build:仓库目录 → GXT,version必填,;行自动跳过diff:比较 GXT 和仓库,返回每张表的 added / removed / changed
diff 还可以直接回写:
{ "action": "diff", "path": "text/chinese.gxt", "repoPath": "text/chinese", "writeTo": "gxt" }
仓库文本是 UTF-8 无 BOM、CRLF、条目之间空行。值里如果有字面换行,会报 REPO_NEWLINE,避免悄悄改坏数据。
5. gxt_preview
不打开 GUI,直接看“这句话在游戏里大概长什么样”。
{
"path": "text/chinese.gxt",
"table": "LAN_C6",
"key": "LC6_01",
"datPath": "Data/Chinese.dat",
"width": 40
}
它做四件事:
- 解析
~w~/~r~/~g~/~b~/~y~/~p~/~h~/~n~/~k~~ACTION~/~1~ - 按 CJK 宽度算每行长度,判断是否超过
width - 检查
Chinese.dat里有没有这个字 - 可选生成
text/grid/atlas三种 PNG
渲染参数可以直接放顶层:
{
"datPath": "Data/Chinese.dat",
"render": "grid",
"fontPath": "fonts/HYWenHei-85W-1.ttf",
"fontSize": 40,
"fontUnit": "pt",
"outlineWidth": 4,
"cellSize": 64
}
fontUnit 支持 px 和 pt,40pt 在 96DPI 下就是 53.33px。outlineWidth: 4 会自动开启 4px 描边。
四、字符表:DAT + PNG
VC 的字符表不是 fonts.dat 那种字体配置,而是 Chinese.dat 这种映射文件:
- 131072 字节
- 65536 个
(row, col)对 - 指向 64×64 的字符图集
(63,63)表示未使用
gxt_preview 的 grid 模式可以把 DAT 直接渲染成图集 PNG;atlas 模式则用 DAT + PNG 渲染真实台词。
用当前中文 GXT 做了一次实测:
- 2090 个非 ASCII 字符
- 占 33 行
- 旧
Chinese.dat缺 9 个在用字符 - 新图集用汉仪文黑 85W、40pt、4px 黑色描边

完整字符表预览:

这张图不只是“好看”,它可以直接看出:
- 哪些字没有字形
- 哪些字被放进了错误的位置
- 描边会不会糊在一起
- 字体风格和游戏是否搭
五、安全机制
GXT 是二进制,最怕“改到一半坏了”。插件的写入流程是:
- 解析到内存模型
- 在模型上执行所有操作
- 重建二进制
- 先解析生成结果,和期望模型逐条比较
- 比较表、规范键、值、MH2 duration、TABL 存在性、版本
- 同目录临时文件 + rename
- 从磁盘读回再比较
- 失败恢复原文件或删除新文件
- 默认备份
所以 gxt_edit 的“原子”不是口号:任一操作失败,整次编辑都不会落盘。
六、和 GXTStudio 的关系
一句话:GXTStudio 是编辑器,dsh-gxt-editor 是工具链。
- 二进制布局参考 GXTStudio
- 键名表来自 GXTStudio
- 用 GXTStudio CLI 做过双向验证
- 但不修改 GXTStudio,也不替代它的 GUI
如果你要“看着改”,用 GXTStudio。
如果你要“批量改、自动校验、让 Agent 帮你改”,用这个插件。
七、安装
发布后可以这样装:
dsh plugin --profile desktop add dsh-gxt-editor@1.2.0
把 desktop 换成你的 profile 名称。也可以在 Harness 的 Plugin Manager 里用 install_bundle,target 填 dsh-gxt-editor。
装完重启 DSH,工具列表里会出现:
gxt_readgxt_editgxt_convertgxt_repogxt_preview
八、适合谁
适合:
- 做 GTA 文本汉化/翻译,需要批量同步和校验的人
- 维护 GXT 仓库,想要可 diff、可 review 流程的人
- 需要检查缺字、行宽、颜色码、按键码的人
- 想让 Agent 直接改 GXT,而不是手工导来导去的人
不太适合:
- 只想偶尔改一两句话、不关心自动化的用户
- 需要编辑 WHM / DAT / RSC 的用户
- 非 Windows 且必须生成 PNG 的用户(PNG 渲染依赖 PowerShell + GDI+)
九、已知限制
- 不编辑 WHM / DAT / RSC
- MH2 写出固定为 PC 20 字节 TKEY
- 普通文本/仓库文本不能表示字面换行
- GXT2 键只有哈希,没有可靠名称表
- 哈希键转 VC/III 字面键没有通用可逆映射
- PNG 渲染依赖 Windows PowerShell + GDI+
grid/临时图集用系统字体;要精确游戏字形请传atlasPath
十、结语
GXT 编辑真正难的不是“把英文换成中文”,而是改完之后还能不能确认它没坏。
dsh-gxt-editor 把这件事拆成了五步:读、改、转、同步、预览。
它不追求取代 GXTStudio,而是让 Agent 能在这套专业格式上做可重复、可校验的批量工作。
如果你也在维护 GTA 文本资源,欢迎试试。












