前言

这篇文章是 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 scriptfntimport.csx
  14. 在弹出的窗口内打开刚才导出字体的位置,然后打开文件夹 Export_fonts 并点击右下角 打开

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

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

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

    (和电脑斗智斗勇.jpg)

第二部分

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

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

  1. 回到 UMT,点击上方的 Scripts,运行 Unpack assetsExportAllStrings.csx

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

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

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

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

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

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

  4. 弄好之后,FileSave来保存,弹出窗口选择 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, 汉化