半个月前下载这游戏第一次发现有这种格式的文件,就想看看这游戏汉化是怎么个事,前前后后花了一天也是成功翻译了,相比gal汉化来说简单的太多了。
当然这个只适合未加密的情况下,加密后的哈哈我也不知道,使用这种引擎的游戏应该也不是很多。
另外就是这种玩法的游戏我记得十多年前比较流行,很多都不需要联网渣机都能玩,应该叫文字冒险类,现在确实太少见了。

一、解包
首先需要UndertaleModTool对data.win文件进行解包
https://github.com/UnderminersTeam/UndertaleModTool
下载最新版后打开工具的文件夹,找到"Sripts\Resource Importers\ImportFonts.csx"打开,将int textureSize改为4096,目的是为了容纳更多的中文字体;
打开exe程序,在File/open中选择文件进行解包;
然后选择ExportAllStrings.csx或者StringsJSON.csx导出,Strings导出为txt格式,Json则为json文件,用LinguaGacha翻译的话选择前者txt格式,json格式会分析不了。

二、翻译文本
- 使用LinguaGacha进行翻译(这部分要是写的话又要写不少,详细教学直接b站搜就能看到了),然后将翻译好的文本放回去。选择ImportAllStringsJSON.csx导入翻译好的文本。
- 或者采用在线ai网站,不过不是很建议,只适用于文本不太长的文件;当然也可以用具有本地文件读写能力的 AI 编程代理,例如Claude,VS Code+ai插件这种,就不怕文本数量的问题了。
导入文本后去String一栏发现成功后,点击Fonts一栏,看到用的是思源黑体,尝试直接封包看看可不可以。
一进来就发现问题了,有框框存在,进入游戏后发现框框也有,所以需要替换字体。这也很正常,因为虽然使用的是思源黑体但是原本就是用于日文字体的。

三、制作字体
1.使用gamemaker制作字体
(1)制作字体
下载后新建项目:

进去后到工作区右键创建字体;
字体名称换成上面Fonts一栏的名称,然后点击“添加”,选择从文件中获取,将翻译好的文件导入进去,然后点击增加范围。点击左下角的重新生成获得字体,这个时候字体会保存到你创建的项目的目录下Fonts文件夹里,需要注意生成的字体要在一张图里面。
然后点击窗口右上方游戏预览,看看是否正确显示字体,以此类推把另外两个字体也生成了,保持字体大小一致(最好还是新建字体,共用一个窗口会比较麻烦)。

(2)导入字体
在UndertaleModTool中选择ImportGMS2FontData.csx,导入之前保存的yy后缀文件,三个都替换。然后在File/save生成新的data.win文件。
发现游戏翻译成功:

2.使用BMFont和BMFontToGMFont制作字体
使用这个方法会稍微复杂一点,但是相比gamemaker可调节的选项会多一些。
(1)BMFont
BMFont下载地址:https://angelcode.com/products/bmfont/
选择下面的64位,下载后打开bmfont64.exe。
点击Options/Font settings调节字体格式,下面的注释是ai参考:
Charset (字符集):必须选择 Unicode。这是生成中文字库的核心前提,若误选 OEM 或 ANSI,所有中文文本在读取时都会变成乱码。
Size (大小):该数值决定字体的基础分辨率,需尽量贴合游戏原版设定的尺寸。设置过小会导致游戏内文字模糊发虚,过大则会呈指数级消耗贴图空间,导致生成多张贴图或直接报错。
Bold/Italic:粗体/斜体
Match char height:在制作中英文混排的字体时,通常建议勾选该选项。它能强制统一所有字符的行高包围盒,有效防止游戏内出现标点符号或英文字母上下跳动、对齐错位的现象。
Render from TrueType outline:相比于依赖系统的字体渲染,直接从 TrueType 轮廓渲染能提供更干净、锐利的像素边缘,避免在透明通道中产生难以察觉的杂色噪点。
Font smoothing / ClearType:这两项用于开启字体的平滑抗锯齿,通常应保持开启。但如果目标游戏是复古像素风(Pixel Art),或者采用了SDF(有符号距离场)着色器渲染,则必须关闭这些平滑选项以保持边缘绝对锐利。
点击Option/Export Options,调节导出格式;
1.强制偏移量 (Force offsets to zero)
- 试过了不勾选后续不能导入成功,勾选才能成功
2. 纹理尺寸 (Texture Width & Height)
- 如果为中文建议改成4096,但需要注意导出的结果:导出后请务必去文件夹看一眼,是否只生成了一张图片(如 xxxx_0.png)。如果生成了多张(如 0.png, 1.png),说明 4096 依然不够装下您选中的所有汉字。很多简易的导入脚本不支持多页贴图导入,若出现多张图,需要回到上一级的 Font Settings 把字体 Size 调小,或者删减生僻字。
3. 通道设置 (Channels)
Alpha 通道为 glyph,R、G、B 通道均为 one。
这种组合会生成“纯白色的字,背景完全透明”的贴图。游戏引擎在渲染文字时,通常需要这种纯白贴图作为基础,以便通过代码任意修改文字颜色(如果这里 RGB 不是 one 而是 glyph,导出的字可能会变成黑色或半透明,导致游戏内无法正常变色)。
4. 字体数据格式 (File -> Font)
当前状态:选择了 Text 格式。
导出的坐标映射数据将是一个纯文本的 .fnt 文件。需要确认您后续使用的导入工具(如 UndertaleModTool 的某段 .csx 脚本)具体支持哪种格式。有些脚本只认 XML 格式,有些只认纯 Text。如果导入时报错“解析失败”,请回这里尝试切换为 XML 并重新导出。
5. 间距 (Spacing)
当前状态:水平(A)和垂直(B)间距均设置为 1 像素。
这决定了贴图上汉字与汉字之间的距离。通常 1 像素是够用的,但如果游戏引擎有缩放操作(比如抗锯齿或分辨率自适应),1 像素的间距可能会导致“边缘粘连”(即某个字显示时,边缘带上了旁边汉字的毛边)。如果游戏中出现这种现象,建议将 Spacing 修改为 2 或 4。
调节好后选择Edit/Select chars from file,导入之前翻译好的文本
然后需要注意文本文件的编码格式:BMFont 对读取的文本文件编码有严格要求。必须保存为带有 BOM 签名的 UTF-8 编码,或者 UTF-16 LE 编码。如果使用默认的 ANSI 或 GBK 编码保存,BMFont 会将其读取为乱码,导致根本无法选中任何中文字符。
可以通过Options/Visualize预览字体纹理,如果觉得不合适可以调整字体格式,字体面积占整个图片超过70%就不会太小;
接着点击Options/Save bitmap font as...导出fnt文件。
(2)使用BmFontToGM将fnt格式转成yy格式
上面的BMFont导出的格式为fnt,需要转成yy格式才能导入回UndertaleModTool;
下载地址:https://github.com/YAL-GameMaker-Tools/BMFontToGMFont
下载后将fnt文件拖拽到BmFontToYY23.exe打开就能生成yy后缀的文件。剩下的两个直接复制fnt文件改名字后拖拽生成即可。
剩下导入字体步骤就和前面一样,选择ImportGMS2FontData.csx,导入之前保存的yy后缀文件,三个都替换。然后在File/save生成新的data.win文件。然后启动游戏成功即可。

四、总结
总结一下,就是解包文件,提取string文本后翻译放回,然后可通过两种方法制作字体并替换,最后封包结束。
