0x00 前言
此前,在《「RO 笔记」汉化个人信息面板的职业名》中介绍了如何汉化职业名称:

但是此方法是通过修改 data/msgstringtable.txt 实现的,汉化的职业范围只有:
- 一转
- 二转
- 进阶二转
- 扩展一转
- 扩展二转
但是除此之外的职业就汉化不了了:
- 三转
- 进阶三转
- 四转
- 扩展突破
- 扩展上位
- 宝宝系列
在本篇会教大家如何汉化剩下的这些职业名称。
0x10 分析
之前不少同学看过我之前的汉化教程后,都有在问我三转、四转要如何汉化。
其实如果你翻遍了所有地方都没找到配置位置时,可以猜测它被硬编码在 Ragexe.exe 中了。
但不是所有配置项都可以通过 Nemo/Warp 找到的,此时我们就要学会自己分析。
以四转职业【天籁颂者】为例,他在个人面板的英文名是 Troubadour。
通过 c32asm 以十六进制编辑 Ragexe.exe,然后搜索 Troubadour(大小写完全匹配),只会找到一个地方。
我们尝试把 Troubadour 修改为 Txxxxyyyyz,重新进入游戏:

个人面板的英文名变成了 Txxxxyyyyz,由此即可验证四转的职业名称是被硬编码了。
0x20 职业名分布
以 20220406 版本的 Ragexe.exe 为例,根据我分析,职业名主要分布在三个位置。
对应可以搜索这三个字符串:
_滚努矾: %d俺7 vs 7
至于怎么找到这三个字符串,其实是通过在游戏逐个职业切换,查看它在 Ragexe 修改后有没有发生变化而倒推出来的
0x21 关键字 _滚努矾
这个关键字后面跟着 83 个英文职业名,主要包括:
- 四转
- 扩展突破
- 扩展上位
- 宝宝系列

0x22 关键字 : %d俺
这个关键字后面跟着 3 个英文职业名,都是 四转。

0x23 关键字 7 vs 7
这个关键字后面跟着 15 个英文职业名,主要包括:
- 三转
- 进阶三转

0x30 职业名修改方法
这里以 Troubadour..Trouvere 为例说明是如何汉化的:

不难发现这些职业名都是用不等长的 ... 分割的,其实每一个 . 都是十六进制中的 00 空字节。
需要注意的是,
.只是为了方便表示空字节,它实际上不是一个点,正常编辑文本是无法输入空字节的,十六进制的空字节00必须借助脚本写入
那这些空字节有什么用呢 ?
首先我们得知道,编辑 exe 文件有一个必须遵守的规则: 编辑前后的 exe 大小不能发生改变。
以 Troubadour 为例,我们修改为另一个字符串时,会出现 3 种情况:
- 新字符串 长度与
Troubadour一致,例如前面我们修改成Txxxxyyyyz,此时不需要特殊处理。 - 新字符串 长度比
Troubadour短,例如修改成Txyz,因为长度不够完全覆盖原字符串,就会变成Txyzbadour,后面的badour需要特殊处理。 - 新字符串 长度比
Troubadour长,例如修改成Troubadour1234,因为长度越界了,就会挤占并覆写后一个字符串Trouvere的存储空间,变成了一个字符串Troubadour1234ouvere,此时运行 Ragexe.exe 就会出现意想不到的错误。
尤其是我们在汉化时,这个长度就更难把握了,因为 GBK 编码中:
- 英文的
1 个字母/数字/字符 = 1 字节 - 简体中文的
1 个汉字/字符 = 2 字节
汉化时,绝大多数情况下,新串的长度都和原串不一样。
那么要怎么处理才能确保 exe 大小不变呢 ?
0x31 新串比原串短
先处理最简单的情况,还是这个例子:
- 原串
Troubadour长度为 10 字节 - 汉化的新串
天籁颂者长度为 8 字节(4 个汉字)
汉化后末尾就会多出 2 个字节 ur 。
我们只需要在新串末尾补 2 个空字节 ..,汉化成 天籁颂者.. 就可以覆盖掉 ur 了。

0x32 新串比原串长
前面已经说过,这些职业名都是用不等长的空字节 ... 分割的,例如 Troubadour..Trouvere 就有两个空字节。
为了不出异常,每个字符串之间最少需要保留末尾的 1 个空字节用于分割,前面多出来的 . 空字节就可以利用起来了,譬如:
- 原串
Troubadour长度为 10 字节 - 紧接着
Troubadour后有 2 个空字节,留下末尾的 1 个空字节做分割 - 实际新串可以利用的最大长度一共有
10 + (2 - 1) = 11字节,即Troubadour. - 譬如汉化成
4th天籁颂者(11 字节),覆盖后就会变成4th天籁颂者.Trouvere

但不是所有字符串都会留有足够的空字符的,例如 Meister.Shadow Cross :
- 原串
Meister长度为 7 字节 - 后面紧跟只有 1 个空字节,没法被使用
- 汉化新串为
机械神匠长度为 8 字节(4 个汉字)
如果强行汉化,就会和后一个字符串 “串台” 拼接成 机械神匠Shadow Cross,游戏中就会显示错误:

这种情况只能减少汉化的中文长度:
- 汉化新串为
机神匠长度为 6 字节(3 个汉字) - 为了覆盖原串,还需要补
7 - 6 = 1个空字节 - 最终汉化成
机神匠.

0x40 批量汉化脚本
前面已经说过,单是 20220406 版本的 Ragexe.exe 中,分布的职业名就有:
_滚努矾: 83 个: %d俺: 3 个7 vs 7: 15 个
多达 101 个职业名,如果每次 DIFF 后都要手动配置一次,工程量会极大。
尤其是长度计算、空字符的编辑等,人工方式几乎不可能完成。
于是我就写了一个 python3 脚本批量替换:

脚本默认提供了 20220406 版本的 Ragexe.exe 的配置字典。
由于 Ragexe 每个版本的偏移可能都不同,如果你有其他版本的配置需求,可以根据上文的方法,编辑 20220406 的配置字典。
文末提供了脚本下载地址
0x50 效果演示
0x51 零转
| 职业 | 普通 | 进阶 |
|---|---|---|
| 初心者 | ![]() |
![]() |
| 杜兰族 | ![]() |
- |
0x52 一转
| 职业 | 普通 | 进阶 |
|---|---|---|
| 剑士 | ![]() |
![]() |
| 魔法师 | ![]() |
![]() |
| 弓箭手 | ![]() |
![]() |
| 服侍 | ![]() |
![]() |
| 商人 | ![]() |
![]() |
| 盗贼 | ![]() |
![]() |
0x53 二转
| 职业 | 普通 | 进阶 |
|---|---|---|
| 骑士 | ![]() |
![]() |
| 十字军 | ![]() |
![]() |
| 巫师 | ![]() |
![]() |
| 贤者 | ![]() |
![]() |
| 猎人 | ![]() |
![]() |
| 诗人 | ![]() |
![]() |
| 舞娘 | ![]() |
![]() |
| 祭司 | ![]() |
![]() |
| 武道家 | ![]() |
![]() |
| 铁匠 | ![]() |
![]() |
| 炼金术士 | ![]() |
![]() |
| 刺客 | ![]() |
![]() |
| 流氓 | ![]() |
![]() |
0x54 三转
| 职业 | 效果图 |
|---|---|
| 卢恩骑士 | ![]() |
| 皇家禁卫队 | ![]() |
| 咒术士 | ![]() |
| 妖术师 | ![]() |
| 游侠 | ![]() |
| 宫廷乐师 | ![]() |
| 浪姬舞者 | ![]() |
| 大主教 | ![]() |
| 修罗 | ![]() |
| 机械工匠 | ![]() |
| 基因学者 | ![]() |
| 十字斩首者 | ![]() |
| 魅影追踪者 | ![]() |
0x55 四转
| 职业 | 效果图 |
|---|---|
| 卢恩龙爵 | ![]() |
| 帝国圣卫军 | ![]() |
| 禁咒魔导士 | ![]() |
| 元素支配者 | ![]() |
| 风鹰狩猎者 | ![]() |
| 天籁颂者 | ![]() |
| 乐之舞灵 | ![]() |
| 枢机主教 | ![]() |
| 圣裁者 | ![]() |
| 机械神匠 | ![]() |
| 生命缔造者 | ![]() |
| 十字影武 | ![]() |
| 深渊追迹者 | ![]() |
0x56 扩展一转
| 职业 | 效果图 |
|---|---|
| 超级初心者 | ![]() |
| 神枪手 | ![]() |
| 忍者 | ![]() |
| 跆拳少年 | ![]() |
| 跆拳少女 | ![]() |
0x57 扩展二转
| 职业 | 效果图 |
|---|---|
| 拳圣/星际角斗士 | ![]() |
| 悟灵士 | ![]() |
0x58 扩展突破
| 职业 | 效果图 |
|---|---|
| 突破初心者 | ![]() |
| 反叛者 | ![]() |
| 日影/影狼 | ![]() |
| 月影/胧 | ![]() |
| 拳皇/星帝 | ![]() |
| 猎灵士 | ![]() |
0x59 扩展上位
| 职业 | 效果图 |
|---|---|
| 顶级初心者 | ![]() |
| 夜巡者 | ![]() |
| 蜃气楼 | ![]() |
| 不知火 | ![]() |
| 天帝 | ![]() |
| 灵导士 | ![]() |
| 魂灵师 | ![]() |
0x5A 宝宝零转
| 职业 | 效果图 |
|---|---|
| 初心者 | ![]() |
| 杜兰族 | ![]() |
0x5B 宝宝一转
| 职业 | 效果图 |
|---|---|
| 剑士 | ![]() |
| 魔法师 | ![]() |
| 弓箭手 | ![]() |
| 服侍 | ![]() |
| 商人 | ![]() |
| 盗贼 | ![]() |
0x5B 宝宝二转
| 职业 | 效果图 |
|---|---|
| 骑士 | ![]() |
| 十字军 | ![]() |
| 巫师 | ![]() |
| 贤者 | ![]() |
| 猎人 | ![]() |
| 诗人 | ![]() |
| 舞娘 | ![]() |
| 祭司 | ![]() |
| 武道家 | ![]() |
| 铁匠 | ![]() |
| 炼金术士 | ![]() |
| 刺客 | ![]() |
| 流氓 | ![]() |
0x5C 宝宝三转
| 职业 | 效果图 |
|---|---|
| 卢恩骑士 | ![]() |
| 皇家禁卫队 | ![]() |
| 咒术士 | ![]() |
| 妖术师 | ![]() |
| 游侠 | ![]() |
| 宫廷乐师 | ![]() |
| 浪姬舞者 | ![]() |
| 大主教 | ![]() |
| 修罗 | ![]() |
| 机械工匠 | ![]() |
| 基因学者 | ![]() |
| 十字斩首者 | ![]() |
| 魅影追迹者 | ![]() |
0x5D 宝宝扩展一转
| 职业 | 效果图 |
|---|---|
| 超级初心者 | ![]() |
| 神枪手 | ![]() |
| 忍者 | ![]() |
| 跆拳道 | ![]() |
0x5E 宝宝扩展二转
| 职业 | 效果图 |
|---|---|
| 拳圣/星际角斗士 | ![]() |
| 悟灵士 | ![]() |
0x5F 宝宝扩展突破
| 职业 | 效果图 |
|---|---|
| 突破初心者 | ![]() |
| 反叛者 | ![]() |
| 日影/影狼 | ![]() |
| 月影/胧 | ![]() |
| 拳皇/星帝 | ![]() |
| 猎灵士 | ![]() |
0xF0 脚本下载
- 腾讯微云: https://share.weiyun.com/8WQl8ouw
- 解压密码: 请在微信扫码到公众号获取





































































































































