《三角符文》汉化教程
前言
这篇文章是 2022 年 11 月 25 日(前汉化组博客)从哔哩哔哩搬过来的,博客写的日期是哔哩哔哩专栏发布的时间。
闲着没事干就把这篇文章搬过来了,没人看的话当个存档也是好的。这篇文章由于时间有些久远,里面的内容可能到现在并不适用。
以前我连这种东西都写得出来,也是佩服我自己当时的能力了。
原文在此:https://www.bilibili.com/read/cv13304948
须知
- 本教程并不是 如何安装汉化,而是 如何汉化游戏。
- 理论上 大部分 GameMaker 游戏都能依靠此教程进行翻译。
- 相关的链接将在文末列举。
准备工作
- GameMaker: Studio
- 一个支持中文的字体(推荐点阵字体)
- Undertale Mod Tool(下文简称 UMT)
- fontScripts(UMT 脚本)
决心很多耐心
第一部分
打开下载的
fontScripts.zip
,同时打开 UMT 根目录。- 打开 UMT 根目录中的 SampleScripts,将压缩包脚本复制进去。
打开 GameMaker 并创建新项目,同时用 UMT 打开 Deltarune 的
data.win
。右键 GameMaker 资源管理器 中的 字体 资源夹 → 创建 → 字体,并选择准备好的字体。(需要安装!)
同时打开 UMT 左侧的 Fonts,右键打开一个字体(文章内使用 fnt_tinynoelle 示例)。
字体中最关键的是:名称 (Name) 和 字体大小 (Font size),将这两个信息在 GameMaker 里填写上。
还有最重要的:关闭抗锯齿!关闭抗锯齿!关闭抗锯齿!
- 点击 添加 来添加文字范围,范围从 0 到 字体最大范围(随便填就行,过大就会自动设为最大范围)。
填写完后点击 添加范围,之后关闭即可。
字体弄好之后,按
F5
运行或点击上方的 播放 图标。注:游戏需要至少一个房间才能运行,添加房间方式与添加字体大同小异。
构建成功后会弹出游戏窗口,这时临时的
data.win
文件已经被创建。打开
[项目名].win
文件,应该保存在C:\Users\[用户名]\AppData\Local\GameMakerStudio2\GMS2TEMP
内。找不到?用 Everything 搜- 打开正确的
*.win
文件并点击上方的 Scripts,运行 Run builtin script-fntexport.csx。 选择所有准备好的字体。
点击 OK 后会弹出成功消息,其中包含了导出字体文件夹的位置。
随后你就可以在目录里看到 Export_fonts 文件夹。
注:为了电脑,请在进行以下步骤前窗口显示的不是字体,可以点 General info。
- 点击上方的 Scripts,运行 Run builtin script → fntimport.csx。
在弹出的窗口内打开刚才导出字体的位置,然后打开文件夹 Export_fonts 并点击右下角 打开。
字体导入完毕!现在你可以直接翻译 Deltarune 根目录里
lang
文件夹中的英文 JSON 文件lang_en_ch1.json
。然后最重要的:不要双击打开字体!不要双击打开字体!不要双击打开字体!
中文字体拥有的字符多到惊人(我自己用的凤凰点阵体有 65000 多字符),所以当你双击打开覆盖好的字体,不仅把你卡到人生,而且有可能在加载完毕之前你电脑就先撑不住。
(和电脑斗智斗勇.jpg)
第二部分
当然这篇文章最关键的是如何对第二章内容进行汉化,而不是如何对第一章内容汉化。
第一章的文字内容都在 JSON 文件里,而第二章的文字内容都在 data.win
里。
回到 UMT,点击上方的 Scripts,运行 Unpack assets → ExportAllStrings.csx。
随后弹出窗口让你选择导出之后存储文件的地方,随便选就行
(能找得到就彳亍)。随后在保存文件的地方找到
strings.txt
,打开它。恭喜!你已经找到了存储第二章文字内容的文件,现在你只需要对能够翻译的内容进行翻译就好了。
当你想要翻译的内容弄好之后,你就可以重新将文件导入让它起作用。
下面这个警告直接按 是 就可以。
随后在弹出的窗口内选择你翻译好的
strings.txt
。弄好之后,File → Save来保存,弹出窗口选择 Deltarune 的
data.win
文件来覆盖。
芜湖!现在你就可以开始一段传奇般的汉化历程了。
备注
打开 Deltarune 或者你自己用于准备中文字体的项目的 data.win
文件时,UMT 可能会弹出这样的提示:
这个窗口是提示该游戏使用 GameMaker Studio 2.3 构建,GameMaker Studio 2.3 及更新的版本所构建的游戏反编译会有部分内容无法成功反编译,当然对我们来说没用,点确定就对了。
此外,如果你正在用此方法汉化别的游戏,并且 UMT 弹出了一个跟 Yoyo Compiler 有关的警告,请做好 无法汉化 的准备。fontScripts 不太兼容 Yoyo Compiler。
补充
该部分内容由 Devil灬伯爵 提供。
问题一
执行 UMT 的 fntimport 脚本导入新的字体时失败,UMT 还是会提示 Import Complete,但实际字体是没成功导入的,点进 UMT 的 Font 里看还是旧字体。
这个问题是由于新字体文字太多,纹理尺寸过大导致的。
在 GameMaker: Studio 里,字体也是纹理的一种,如果把所有中文字符全导入,超 6w 的字符数很容易就会让纹理尺寸超过2048。
而 fntimport.csx 的脚本仅支持最大尺寸为 2048 的纹理图,因此解决方法就是将需要导入的字符减少即可。注意,这里的 2048 指的是单个字体的最大尺寸,不是所有字体的尺寸总和。
而 GameMaker: Studio 也提供了方便的方法让我们仅导入需要用到的字符,方法就是在创建 Font 时,在 Font Range 中不要手动填写字符范围,而是点击 From File 按钮,再选择已翻译好的文本文件,这样就可以仅导入会显示的字符了。
若想要查看 GameMaker: Studio 中 Font 的纹理尺寸,可以在 Font 的创建界面中,选择右上角的 Game Preview,能看到尺寸大小,例如 1024*1024 之类的。如果这里的尺寸显示不正常的话,可以再点一下左下角的 Regenerate 按钮,重新生成字体材质。
问题二
执行 UMT 的 fntimport 脚本导入新的字体时失败,提示 Length cannot be less than zero.
这个还是脚本的问题,脚本假设了新字体的名称里一定会含有下划线 “_”,因此如果试图导入名称里不含下划线的字体就会报错。
这里需要修改脚本才可以解决,打开 fntimport.csx
这个脚本文件,这个文件就是你刚刚解压到 UMT 的 SampleScripts 文件夹中的两个文件之一。定位到 59 行,内容是:
string spriteName = stripped.Substring(0, lastUnderscore);
把这一行的内容改为:
string spriteName = stripped.Substring(0, (lastUnderscore < 0) ? stripped.Length : lastUnderscore);
这一行开头的空格不要动它,保持原样,不过空格也不影响执行就是了。然后记得保存文件,再回到 UMT 中重新执行一遍 fntimport 脚本,如无意外应该就没问题了。
链接
- GameMaker: Studio官网:https://gamemaker.io/zh-CN
- UMT 下载:https://github.com/krzys-h/UndertaleModTool/releases
我自己弄好的data.win
:https://pan.baidu.com/s/1UVMG9N_K1q63Zd7iyHjHfQ 提取码: kxt3我自己弄的 ComicSans + 迷你简卡通字体:https://ziyuecommentary.lanzoui.com/iiqizueyi8j- fontScripts: https://github.com/krzys-h/UndertaleModTool/files/3937624/fontScripts.zip
提交评论