前言

这篇文章是 2022 年 11 月 25 日(前汉化组博客)从哔哩哔哩搬过来的,博客写的日期是哔哩哔哩专栏发布的时间。

闲着没事干就把这篇文章搬过来了,没人看的话当个存档也是好的。这篇文章由于时间有些久远,里面的内容可能到现在并不适用。

以前我连这种东西都写得出来,也是佩服我自己当时的能力了。

原文在此:https://www.bilibili.com/read/cv13304948

须知

  1. 本教程并不是 如何安装汉化,而是 如何汉化游戏。
  2. 理论上 大部分 GameMaker 游戏都能依靠此教程进行翻译。
  3. 相关的链接将在文末列举。

准备工作

  • GameMaker: Studio
  • 一个支持中文的字体(推荐点阵字体)
  • Undertale Mod Tool(下文简称 UMT)
  • fontScripts(UMT 脚本)
  • 决心 很多耐心

第一部分

  1. 打开下载的 fontScripts.zip,同时打开 UMT 根目录。

  2. 打开 UMT 根目录中的 SampleScripts,将压缩包脚本复制进去。
  3. 打开 GameMaker 并创建新项目,同时用 UMT 打开 Deltarune 的 data.win。

  4. 右键 GameMaker 资源管理器 中的 字体 资源夹 → 创建 → 字体,并选择准备好的字体。(需要安装!)

  5. 同时打开 UMT 左侧的 Fonts,右键打开一个字体(文章内使用 fnt_tinynoelle 示例)。

  6. 字体中最关键的是:名称 (Name) 和 字体大小 (Font size),将这两个信息在 GameMaker 里填写上。

    还有最重要的:关闭抗锯齿!关闭抗锯齿!关闭抗锯齿!

  7. 点击 添加 来添加文字范围,范围从 0 到 字体最大范围(随便填就行,过大就会自动设为最大范围)。
  8. 填写完后点击 添加范围,之后关闭即可。

  9. 字体弄好之后,按 F5 运行或点击上方的 播放 图标。

    注:游戏需要至少一个房间才能运行,添加房间方式与添加字体大同小异。

    构建成功后会弹出游戏窗口,这时临时的 data.win 文件已经被创建。

  10. 打开 [项目名].win 文件,应该保存在 C:\Users\[用户名]\AppData\Local\GameMakerStudio2\GMS2TEMP 内。

    找不到?用 Everything 搜

  11. 打开正确的 *.win 文件并点击上方的 Scripts,运行 Run builtin script-fntexport.csx。
  12. 选择所有准备好的字体。

    点击 OK 后会弹出成功消息,其中包含了导出字体文件夹的位置。

    随后你就可以在目录里看到 Export_fonts 文件夹。

    注:为了电脑,请在进行以下步骤前窗口显示的不是字体,可以点 General info。

  13. 点击上方的 Scripts,运行 Run builtin script → fntimport.csx。
  14. 在弹出的窗口内打开刚才导出字体的位置,然后打开文件夹 Export_fonts 并点击右下角 打开。

    字体导入完毕!现在你可以直接翻译 Deltarune 根目录里 lang 文件夹中的英文 JSON 文件 lang_en_ch1.json。

    然后最重要的:不要双击打开字体!不要双击打开字体!不要双击打开字体!

    中文字体拥有的字符多到惊人(我自己用的凤凰点阵体有 65000 多字符),所以当你双击打开覆盖好的字体,不仅把你卡到人生,而且有可能在加载完毕之前你电脑就先撑不住。

    (和电脑斗智斗勇.jpg)

第二部分

当然这篇文章最关键的是如何对第二章内容进行汉化,而不是如何对第一章内容汉化。

第一章的文字内容都在 JSON 文件里,而第二章的文字内容都在 data.win 里。

  1. 回到 UMT,点击上方的 Scripts,运行 Unpack assets → ExportAllStrings.csx。

    随后弹出窗口让你选择导出之后存储文件的地方,随便选就行(能找得到就彳亍)。

  2. 随后在保存文件的地方找到 strings.txt,打开它。

    恭喜!你已经找到了存储第二章文字内容的文件,现在你只需要对能够翻译的内容进行翻译就好了。

  3. 当你想要翻译的内容弄好之后,你就可以重新将文件导入让它起作用。

    下面这个警告直接按 是 就可以。

    随后在弹出的窗口内选择你翻译好的 strings.txt。

  4. 弄好之后,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, 汉化