撰写了文章 发布于 2020-06-13 18:39:14
Cube World (Beta) 汉化不完全回忆录
本文撰写时,距离Cube World (Beta)开始汉化的时刻,已经过去了8个月。(2019.09.23-2020.06.13)
2020.06.13 文章第一版,完成章节:1. 前言 - 2.4 字体
1. 前言
我终于重拾起了被我遗忘多年的奶牛关账号,主要是实在没啥东西可说。而且很久没参与游戏翻译相关的项目了,或者说,远远没有过去那么频繁。转眼间就大三了,下学期就大四了,时光飞逝。
Cube World在多年前也是个有点热门的独立游戏(大概区间为2012-2013年),而且体素的艺术风格搭配艳丽活泼的颜色也很吸引眼球。当时游戏处于Alpha阶段,但是这个Alpha阶段不一般,游戏基本没啥致命的大毛病,可以愉快游玩。不过因为一些原因,游戏停止了更新,也没有了动态,说实话的话我个人认为是非常可惜的,如果当时开发者把握了机会持续做下去,这款游戏我认为是很有潜力成为热点趋势的,也不至于发生如今回归后的评价雪崩,不过现在说这些也没有用了。在沉寂了很多很多年之后(至少5年),去年国庆节Cube World以Beta版本的姿态登录了Steam平台,实属可喜可贺,我也加入了一群Alpha时期的爱好者团队,在国庆正式发售前着手准备游戏的汉化工作,因为在正式发售前有针对Alpha时期老玩家的一周时间的内测。这就是这个汉化项目开端的背景故事。
简短的说,汉化的过程是痛苦的,因为我们都是一群爱好者,没有什么经验,都是第一次做民间汉化(我本人也是第一次接触这种,而且这种汉化本质的说就是逆向搞游戏本体实现汉化),而且游戏自身的奇葩文本系统和编码限制大幅度阻碍了我们汉化的进度。除了中文遭到限制,其它语言社区在翻译时也遇到了奇奇怪怪的问题,比如俄语(之后会提到),在对比之后发现,中文汉化已经算是很幸运了。
虽然最后我们完成了几乎所有内容的汉化,不过很遗憾的是游戏的这次回归并不是“王者归来”,反而让很多从Alpha喜爱游戏的玩家失望,让评价雪崩,而且国内的Cube World游戏社区难得因为这次机会大范围聚集起来,却又被这次游戏的回归打散,包括这次的汉化团队也散了。本来是打算以后如果游戏继续更新,我们也持续更新,甚至翻译wiki的,但是现在基本啥都没有了。游戏正式发售后再也没有更新过,作者也失去了踪影。我本人对此是没有明确的态度的,不算正向也不算逆向,我偏向于沉默。
所以本文只是记录这个让人感到遗憾的项目的过程,但是因为时间太久远了,很多细节我已经记不太清了,所以如果有遗漏的部分会抽空补全。毕竟也得留下一个足迹。
2. 折磨的开端
虽然游戏从2019.09.23开始老玩家内测,但是因为游戏宣传较早,所以在贴吧,也早就开始玩家自发的招募人员了。我就以翻译志愿者的身份直接进入了负责搭建Cube World中文社区论坛的ziokuroi(贴吧ID:ZergZenith)所创建的群,我称之为群主。
但是早期进入负责中文汉化的翻译志愿者只有寥寥三人:law_4x(真.总负责人,我称之为law大,音同老大,爆肝技能点满的上班族程序员),pckk(第二负责人,是材料专业的大学生)以及我(第三负责人,一个毫无亮点的计算机专业的大学生)。也就是因为早期人太少,所以我们三人草草地被定位成汉化组负责人,也建立了汉化组核心成员群,因为这样方便集中讨论相关事宜,以及频繁的测试。而后来加入的翻译志愿者以及拥有游戏的主播/玩家作为测试人员加入了另一个群,大约25人。不过作为负责人的话,确实除了翻译这块,也要负责别的东西,各钟奇怪的测试都少不了,也要对志愿者提交的翻译进行核对和格式调整。
早期加入的一位Alpha时代的老玩家也加入了汉化组核心群,方便核心成员组获取游戏文件和进行测试,同时以腾讯文档的表格作为合作翻译平台。
2.1 开始正式翻译工作
获取游戏文件后,我们初步发现游戏文件夹内有一个文件叫做“dict_en.xml”的文件,以及另一个文件为"dict_de.xml",从名称来看两者最有可能为文本文件,而且“en”代表英语,“de”代表德语。虽然游戏开发者是德国人,但是“dict_de.xml”文件内容并不完整,而且游戏只支持英文,所以理所当然的直接从“dict_en.xml”开始入手。
“dict_en.xml”中的词条大概分为两类,一类是名词,一类是句子。而名词又分为怪物/生物名,武器名等等。句子又分为NPC对话,任务描述,职业描述等等,其中的NPC对话又分为打招呼,闲谈等等。
2.2 名词翻译
<name id="Wizard" tags="m">
{ #plural Wizards | Wizard }
</name>
生物名例子,'|'前是复数,'|'后是单数
<name id="MaterialIron" tags="an">
Iron { #item @item(*) }
</name>
武器/装备/物品的材质名例子
<name id="Sword" tags="n">
{ #plural Swords | Sword }
</name>
武器/装备/物品名例子
举个例子,游戏中的武器,装备,甚至部分物品,都是材质名+物品两者组合(我们暂时不看品质名),比如这个例子里,就可以拼成Iron + Sword=Iron Sword,也就是铁剑,而游戏中这种例子有很多。
但是这种组合方式我们遇到了一些问题,最开始我们对于材质名,统统为“xx制”,于是产生了搞笑的几幕。
游戏中有采矿系统,对于矿石本身,其名称为“Nugget”,并在前面加上符合的材质名,而最开始我们对于“Nugget”的翻译是“金属块”,觉得有点长就莫名其妙的缩成了“金块”,于是挖到的铁矿石变成了“铁制金块”。
而另一个最搞笑的就是游戏中的原木,也就是木头,是材料的一种。但是我们发现这个木头是由材质名“Wood”以及物品名“Log”组合而成的,于是产生了另一幕“木制原木”的搞笑场景。我们左思右想确定游戏没有别的原木材料后,将“Wood”从“木制”改为“木”,因为别的武器装备还需要这个材质名作为前缀,而对于“Log”,我们将其改为“头”,也就是“木头”,而玩家基本不会注意到这么谐的事实。
2.3 句子翻译
此处为整个汉化组的噩梦。
2.3.1 基础规则1
<speech id="hello">
{ Hello | Oh, hello | Hello there | Good day | Greetings | Hey | Hi } {!|.|...}
</speech>
最简单的打招呼句子原文
<speech id="hello">
{ 你好 | 哦,你好 | 你好啊 | 幸会 | 您好 | 嘿 | 嗨 } {!|.|...}
</speech>
参考译文
这里你可能会注意到这些奇奇怪怪的格式是啥玩意儿。这里就是开发者自己弄的随机句系统了,将所有词句按照符合的格式进行拼接。熟悉计算机的朋友应该能看出来这个系统仿照的原型,很快就能发现其规律,对于不太熟悉这块儿的朋友,可以将花括号'{ }'当作数学里的小括号,而这个句子的' | '符号,代表是从其中选一个,所以根据这个原则,有以下21种组合:
你好!
你好.
你好…
哦,你好!
哦,你好.
哦,你好…
你好啊!
你好啊.
你好啊…
幸会!
幸会.
幸会…
您好!
您好.
您好…
嘿!
嘿.
嘿…
嗨!
嗨.
嗨…
这还只是最最简单的组合。
2.3.2 基础规则2
<speech id="nice_to_meet_you">
{ [ It's ] nice to meet you! | [ It's ] good to see you! | How are you [doing] [today]? | How is it going? }
</speech>
较为复杂的打招呼句子原文
<speech id="nice_to_meet_you">
{ 很高兴认识你! | [今天] 你过得怎么样? [ 一切顺利吗? ] | 最近过得如何? }
</speech>
进行了折中处理的参考译文
因为在中文里很难对上“It's”,所以对句子进行了折中处理,毕竟游戏本体并不会检测文字一模一样对上,对于很难一一对应的文本我们都采取了折中处理。那么这里的中括号'[ ]'又是什么意思?代表中括号里面的词句有可能出现,有可能不出现。根据这个原则,该句子的中文译文有6种组合
很高兴认识你!
你过得怎么样?
今天你过得怎么样?
你过得怎么样? 一切顺利吗?
今天你过得怎么用? 一切顺利吗?
最近过得如何?
到了这里,句子的基本规则你应该也就了解了。
2.3.3 语序调整
<speech id="its_hot">
It's { really | very | so | } hot { today | here }!
</speech>
翻译后需要对语序进行调整的原文
<speech id="its_hot">
{ 今天 | 这里 } 真的 { 很 | 非常 | 太 }热!
</speech>
调整了语序的参考译文
由于很多志愿者并不太了解这种格式,所以很多句子只敢翻译完词句,并没有调整语序,需要负责人或者懂格式规则的人进行检查并修正。这种现象在接下来要介绍的有占位符/标识符的词句中更为严重。
2.3.4 标识符(变量)
<speech id="my_name_is">
{ I'm | I am | My name is | You can call me } *mob_name {.|!}
</speech>
<speech id="welcome_to_location">
Welcome to *the_zone {!|.}
</speech>
<speech id="how_do_you_like_our_zone">
{ { How do you | Do you } like our @zone()? | I hope you like our @zone()!}
</speech>
出现了特殊符号/标识符/占位符的句子
<speech id="my_name_is">
{ 我是 | 我叫 | 我的名字叫做 | 你可以叫我 } *mob_name {.|!}
</speech>
<speech id="welcome_to_location">
欢迎来到 *the_zone {!|.}
</speech>
<speech id="how_do_you_like_our_zone">
{ 你觉得 @zone() 怎么样? | 你喜欢 @zone() 吗? | 我希望你会喜欢 @zone()!}
</speech>
参考译文
可以从命名上看到,如*mob_name在游戏里是显示NPC姓名的,而*the_zone这些则表示当前区域/小镇,反正就是地点。出现了这些符号,很多译者更加不敢轻易调整文本顺序。
2.3.5 格式符(文字)
<speech id="im_in_this_zone_to_do_tasks">
I'm { *in_the_zone | here | visiting *the_zone } to
{ buy { glass flasks $stress} #glassflasks
| buy {sugar cubes $stress} #sugarcubes
| buy {bombs $stress} #bombs
| buy {pet food $stress} #petfood
| book an {eagle flight $stress} #flight
| rest in an {inn $stress} #inn
| buy a [new] {weapon $stress} #buyweapon
| craft a [new] {weapon $stress} #craftweapon
| buy a [new] piece of {armor $stress} #buyarmor
| craft a [new] piece of {armor $stress} #craftarmor
| identify {leftovers $stress} #identify
| change my {specialization $stress} #specialization
| talk to the {villagers $stress} #villagers
| meet my {friends $stress} #friends
| sell my {loot $stress} #sell
} {!|.}
</speech>
<speech id="description_crafting_book1">
You can now craft { magic equipment $green } *in_the_land!
</speech>
<speech id="description_crafting_book2">
You can now craft { rare equipment $blue } *in_the_land!
</speech>
<speech id="description_crafting_book3">
You can now craft { epic equipment $purple } *in_the_land!
</speech>
<speech id="description_crafting_book4">
You can now craft { legendary equipment $legendary } *in_the_land!
</speech>
包含了文字强调的格式符(强调,颜色),图标图案的特殊格式符的文本
<speech id="im_in_this_zone_to_do_tasks">
我 { 来 *in_the_zone | 在这 | 来 *the_zone }
{ 购买 { 玻璃瓶 $stress} #glassflasks
| 购买 { 方糖 $stress} #sugarcubes
| 购买 { 炸弹 $stress} #bombs
| 购买 { 宠物饲料 $stress} #petfood
| 登记使用 { 鹰之旅服务 $stress} #flight
| {旅馆 $stress} #inn 休息
| 购买一把 [新的] {武器 $stress} #buyweapon
| 制作一把 [新的] {武器 $stress} #craftweapon
| 购买一件 [新的] {盔甲 $stress} #buyarmor
| 制作一件 [新的] {盔甲 $stress} #craftarmor
| 鉴定出 {未鉴定装备 $stress} #identify
| 改变我的 {职业专精 $stress} #specialization
| 与 {村民 $stress} #villagers 谈话
| 拜访我的 {朋友 $stress} #friends
| 出售我的 {战利品 $stress} #sell
} {!|.}
</speech>
<speech id="description_crafting_book1">
你现在可以在 *in_the_land 制造 { 魔力装备 $green } !
</speech>
<speech id="description_crafting_book2">
你现在可以在 *in_the_land 制造 { 稀有装备 $blue } !
</speech>
<speech id="description_crafting_book3">
你现在可以 *in_the_land 制造 { 史诗装备 $purple } !
</speech>
<speech id="description_crafting_book4">
你现在可以 *in_the_land 制造 { 传奇装备 $legendary } !
</speech>
参考译文
这里有一些专用于文字的特殊格式,$stress代表强调,游戏里是抖动波浪效果。而$green, $blue, $purple, $legendary就很简单,括号里文字的颜色。 #buyarmor这些就是指代的图标。
2.3.6 一些眼花缭乱的例子
<speech id="i_was_exploring_the_location">
{ Yesterday | Recently | A few days ago | Two days ago } I { was exploring *the_zone | traveled to *the_zone | went for a walk *in_the_zone | went on a hike *in_the_zone } *direction_of_here.
</speech>
<speech id="i_was_gathering_ingredients_in_the_location">
{ Yesterday | Recently | A few days ago | Two days ago } I { was gathering | was looking for } { $stress { mushrooms | heartflowers | mana orchids | shimmer mushrooms | dragon roots | iron nuggets | silver nuggets | gold nuggets | emeralds | sapphires | rubies | diamonds | cotton capsules | plant fibers | wood logs | cobwebs | dewdrops | ginseng | crafting ingredients }} *in_the_zone *direction_of_here.
</speech>
<speech id="i_saw_an_item_in_the_zone">
{ You won't believe what I { saw | discovered | found } *in_the_zone! % *an_item! | I { saw | discovered | found } something *in_the_zone! % *an_item! | I { saw | discovered | found } *an_item *in_the_zone! }
</speech>
<speech id="nice">
{ [That's] nice! | [That's] great! | [That's] awesome! | [That's] amazing! | Nice work! | Good work! | Nice job! | Good job! | Not bad! | Wow! }
</speech>
非常长的原文,不方便人脑观察
<speech id="i_was_exploring_the_location">
{ 昨天 | 最近 | 几天前 | 两天前 } 我 { 正在探索 *direction_of_here 的 *the_zone | 去了 *direction_of_here 的 *the_zone | 走在 *direction_of_here 的 *in_the_zone | 去了 *direction_of_here 的 *in_the_zone}.
</speech>
<speech id="i_was_gathering_ingredients_in_the_location">
{ 昨天 | 不久前 | 几天前 | 两天前 } 我在 *in_the_zone 的 *direction_of_here { 搜集 | 寻找 } { $stress {蘑菇 | 生命花 | 曼纳兰花 | 荧光蘑菇 | 龙须草 | 铁块 | 银块 | 金块 | 绿宝石 | 蓝宝石 | 红宝石 | 钻石 | 棉花 | 植物纤维 | 原木 | 蛛网 | 露滴 | 人参 | 合成原料 }}.
</speech>
<speech id="i_saw_an_item_in_the_zone">
{ 你不会相信我在 *in_the_zone { 看到了 | 发现了 | 找到了 } *an_item! | 我在 *in_the_zone { 看到了 | 发现了 | 找到了 } 一些东西 ! 是 % *an_item! | 我在 *in_the_zone { 看到了 | 发现了 | 找到了 } *an_item ! }
</speech>
<speech id="nice">
{ [那] 太好了! | [那] 太棒了! | [真是] 令人惊叹! | [那]太棒了! | 干得好! | 干得漂亮! | 做得好! | 干得不错! | 不错! | 哇哦! }
</speech>
参考译文 *未检查 *未润色 *未统一用词
这些结构上不算特别特别复杂,但是看的人很乱,而且也没来得及检查,有很多的问题。至于别的就不再举例了。
2.3.7碎碎念
因为本人编程非常乐色,所以并没有编写可以遵循此规则的快速文本检查工具,所以全程都是译者们进行翻译后人脑进行词句拼接,人工检查,以确认所有可能的组合句子没有什么问题。很废脑子和眼睛。
看到这里你也应该明白题图里的 { Cube World [ (Beta) ] } { 汉化 [ 不完全 ] 回忆录 } 是什么意思了吧,因为印象过于深刻,所以完成翻译后的那段时间,所以译者都能无压力打出这些格式化文本,深受其害。
因为游戏的停更,热度与志愿者热情的下降,汉化补丁也陷入停滞阶段,虽然所有文本翻译完毕,但是有很大一部分的文本并没有完成游戏内检查以及修正润色,所以非常遗憾的坑掉了。
Cube World 汉化回忆录
Cube World (Beta) 汉化回忆录
Cube World 汉化不完全回忆录
Cube World (Beta) 汉化不完全回忆录
2.4 字体
其实字体应该更早的讲,因为如果字体问题不解决,汉化游戏就是无稽之谈,不过由于这个游戏没啥字体上的阻碍,所以放在后面简单提一下。
很幸运地是,游戏的字体并不是Bitmap font。而Bitmap font这种字体,通俗点理解就是将所有用到的汉字放在一大张图片内由游戏调用,也就是图片形式的字体。对于英文这种语言,Bitmap font很节省地方,但是对于中文,那就是噩梦。而且如果真的是Bitmap font…… 我估计这个汉化项目基本就凉了,因为当时的成员里真的没有会搞这个的。
游戏的字体文件分别为“resource1.dat”和“resource2.dat”,看似很玄,其实就是把".ttf"改为了“.dat”,ttf那就好办了,那时我们最常用的字体格式之一。而“resouce1.dat”放着的是游戏中的正文,GUI,这些最最常用的部分,而“resource2.dat”存放的是用于地名的英文花体字。我们思考之后,用Noto Sans CJK SC也就是思源黑体用于正文,用Noto Serif CJK SC也就是思源宋体用于地名的花体字。因为以前有看过做官方中文翻译的大佬和前辈,脑海里也定死了这俩免费商用字体,这个习惯也带到了民间汉化。(其实另一个原因是我们也想不到合适的字体)
之后为了配合游戏翻译,我们(主要是老大负责)使用字体编辑工具对字体进行了一些修改(很抱歉我忘记了修改字体使用的工具,太久远了,好像叫Font Creator?),但这是后话,此处不提了。
所以字体的部分我们还算愉快的解决了,可以将翻译后的文本快速投入游戏,在游戏中进行文本显示的测试。
3. 中期拉锯对线战(待续)
---待续---
?. 结语(待续)
文章要写完实在是太长了,而且细节部分太多,回忆和写起来很费时间,我甚至都没贴图片解说。
所以如果有人看到这篇文章觉得没看够,那我很荣幸你对这篇文章产生了兴趣,如果想等更新的话,可以等我放暑假之后来看看(大约7月中旬放假),最近忙着期末考试和大作业,这次起笔写文章也是临时没事,一时兴起,觉得这个经历得跟各位分享,也许在业界前辈看来这种经历算不上什么,不过我想也许可以让各位看看一些奇奇怪怪的汉化经历和搞笑的事情,以及恼火的事情。
感谢您的阅读!
2020.06.13 文章第一版,完成章节:1. 前言 - 2.4 字体
Hambaka
万华镜 1年前
很感慨这部作品的改动,应该说游戏的画面以及世界依旧是如此惊艳和有趣。。。。但是游戏本身大型机制的改动,导致游戏产生了。。。。。类似于最开始的。。。。无人之空的效果。。。。玩家所谓的无尽的世界,本身就是随机产生的,配合到处都一样的玩法,以及没有成长奖励的爽度,导致整个游戏缺乏了基本的驱动力,相当可惜。(虽然我对ALPHA版本的记忆好像也不太好)
Hambaka [作者] 1年前
发布
无有时代 1年前
没听过这款游戏,不过为什么文本要这么设计啊,加入这么复杂的标识符,单看英文可觉得很难懂啊……
Hambaka [作者] 1年前
无有时代 1年前
Hambaka [作者] 1年前
无有时代 1年前
无有时代 1年前
发布