加载中...

「RO 笔记」汉化个人信息面板的职业名(进阶版)


0x00 前言

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

但是此方法是通过修改 data/msgstringtable.txt 实现的,汉化的职业范围只有:

  • 一转
  • 二转
  • 进阶二转
  • 扩展一转
  • 扩展二转

但是除此之外的职业就汉化不了了:

  • 三转
  • 进阶三转
  • 四转
  • 扩展突破
  • 扩展上位
  • 宝宝系列

在本篇会教大家如何汉化剩下的这些职业名称。

0x10 分析

之前不少同学看过我之前的汉化教程后,都有在问我三转、四转要如何汉化。

其实如果你翻遍了所有地方都没找到配置位置时,可以猜测它被硬编码在 Ragexe.exe 中了。

但不是所有配置项都可以通过 Nemo/Warp 找到的,此时我们就要学会自己分析。

以四转职业【天籁颂者】为例,他在个人面板的英文名是 Troubadour

通过 c32asm 以十六进制编辑 Ragexe.exe,然后搜索 Troubadour大小写完全匹配),只会找到一个地方。

我们尝试把 Troubadour 修改为 Txxxxyyyyz,重新进入游戏:

个人面板的英文名变成了 Txxxxyyyyz,由此即可验证四转的职业名称是被硬编码了。

0x20 职业名分布

20220406 版本的 Ragexe.exe 为例,根据我分析,职业名主要分布在三个位置。

对应可以搜索这三个字符串:

  1. _滚努矾
  2. : %d俺
  3. 7 vs 7

至于怎么找到这三个字符串,其实是通过在游戏逐个职业切换,查看它在 Ragexe 修改后有没有发生变化而倒推出来的

0x21 关键字 _滚努矾

这个关键字后面跟着 83 个英文职业名,主要包括:

  • 四转
  • 扩展突破
  • 扩展上位
  • 宝宝系列

0x22 关键字 : %d俺

这个关键字后面跟着 3 个英文职业名,都是 四转。

0x23 关键字 7 vs 7

这个关键字后面跟着 15 个英文职业名,主要包括:

  • 三转
  • 进阶三转

0x30 职业名修改方法

这里以 Troubadour..Trouvere 为例说明是如何汉化的:

不难发现这些职业名都是用不等长的 ... 分割的,其实每一个 . 都是十六进制中的 00 空字节。

需要注意的是,. 只是为了方便表示空字节,它实际上不是一个点,正常编辑文本是无法输入空字节的,十六进制的空字节 00 必须借助脚本写入

那这些空字节有什么用呢

首先我们得知道,编辑 exe 文件有一个必须遵守的规则: 编辑前后的 exe 大小不能发生改变

Troubadour 为例,我们修改为另一个字符串时,会出现 3 种情况:

  1. 新字符串 长度与 Troubadour 一致,例如前面我们修改成 Txxxxyyyyz,此时不需要特殊处理。
  2. 新字符串 长度比 Troubadour 短,例如修改成 Txyz,因为长度不够完全覆盖原字符串,就会变成 Txyzbadour,后面的 badour 需要特殊处理。
  3. 新字符串 长度比 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 中,分布的职业名就有:

  1. _滚努矾: 83 个
  2. : %d俺: 3 个
  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 脚本下载


文章作者: EXP
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 EXP !
 上一篇
「流行声乐学习笔记 29」期末考试 「流行声乐学习笔记 29」期末考试
价值 6K 的流行声乐课程笔记!本节内容是期末考试,需要运用前面学过的所有技巧演唱自选的期末歌曲,最终成绩会由两名导师进行综合判断、现场举牌是否通过。
2025-03-21
下一篇 
「流行声乐学习笔记 28」课程回顾与复习 「流行声乐学习笔记 28」课程回顾与复习
价值 6K 的流行声乐课程笔记!本节课主要回顾前面课程学过的关键知识点、巩固气息、声带控制、真假声切换、咬字、咽音、混声等核心技巧,把遗忘的东西巩固一下,为期末考试做准备。
2025-03-12
  目录