欢迎光临散文网 会员登陆 & 注册

Undertale Engine/Kristal类游戏汉化思路

2023-07-22 02:09 作者:AX暗星233  | 我要投稿

(本文基于MarkDown格式撰写,使用的符号不做删改,不影响阅读)


# Undertale Engine游戏汉化思路


> Undertale Engine (UTE)一般指的是糖萌芦于 2018 年 8 月开发的 Undertale 游戏制作模板。使用者需要使用 GameMaker 加载模板工程进行开发。

>

> 该模板包含了主世界和战斗功能,同时包含了多个方便开发的工具,例如 Anim 缓动系统、Console 调试控制台等。

>

> 目前 Undertale Engine 只进行功能性维护,将不再得到更新。 

——摘自[UT社区维基(UTCWIKI)](https://utcwiki.com/Undertale_Engine)


关于UTE游戏的汉化,之前已经有人提供方法了,在这个视频中,@憨憨羊の宇航鸽鸽 讲到了ute游戏汉化字体内嵌的方法


这里我以内嵌和外置字体的方法进去字体的替换

一样的,我们需要utmt来打开data,别搞丢了哟


## 内嵌字体


这里以fdy的困难杉为例子(抱歉屯的ute游戏很少)


典型的UTE游戏一般都有bin,locale文件夹(其中locale文件夹是放语言文件的地方。制作者通常不会全把文本写在那里,只是部分会需要。所以文本方面记得多看看data里面的strings栏哟)


我们用utmt打开data.win,进行字体内嵌




我们搜索text,找到`gml_Object_text_typer_Other_15`,如图所示

大概长这样

你会发现右边有好多橙色黄色

我们先看黄色的是什么

如果你在`"locale\english\string"`这个文件夹,打开**font.txt**,发现左边**双引号的字符串跟上面图中黄色的一模一样**(这里是得到该txt的字符串,相关变量会进行识别,这里不多讲)

猜猜看是什么文本编辑器()

这里我们是内嵌字体,那就内嵌咯。使出你的ImportFontData.csx,导入字体


导入完了,那我们怎么让游戏用到我们导入的字体呢?

没错,这也就是我要你打开那个代码的目的:把原来使用的字体换了


这里我导入的字体为:`fnt_comicsans``fnt_maintext`,`fnt_plain`,分别对应 sans、主世界、怪物说话字体

老三样?

这里我们把第一个字体为sans字体,对应文本中的{font 3}

然后我们改为下面的

以此类推,我们把其他的[4,0],[4,1],[5,0],[5,1]分别改为主世界,怪物说话字体(其实这里作者已经内置相关的英文字体,不过这里只是举例)

点击代码外部保存,你会发现那些字体名都变成了数值(utmt特性罢了,不用担心)


附图:gml_Object_text_typer_Other_15中 scale_x,scale_y,space_x,sapce_y形象区分

至此完成了字体的使用


翻译文本时切换字体应为: {font +**_group_font[]数组的第一个数**},比如我这里sans的为`{font 3}`,主世界的为`{font 4}`


要不我们试试看?


这是开头杀前的一段话:

稍微修一下:

我们保存看一下效果:

这里再把它换成主世界字体看看({font 3}改为{font 4}):

之后就自己去翻译啦,你已经学会内嵌字体了!ヾ(≧▽≦*)o



##外置字体(消除抗锯齿)


其实外置字体也没什么可讲的,只要把对应Lang的字体文件换一换,ini文件里参数换一换,就基本上ok的了


不巧的是,当你把字体换上,并且把字体大小改了之后,进入游戏看,字体居然是糊的!

啊啊啊啊啊啊啊啊啊啊啊要死了要死了!!!!!!


别急,下面就是消除抗锯齿的方法


还是utmt打开data.win,搜索text找到`gml_Object_text_typer_Other_15`


你可能会好奇:_group_font[]的右值 Lang_GetFont()是什么?


问到点上了。这是一个函数,用来获取外部字体资产的值(简单点说就是这个函数来读外部的字体的,当然仅限ute,因为这是作者(指tml)自己写的 而非gm内置)


那么我们找找呗~


既然这是获取,那么就得找找读取这个函数的脚本(即load)


我们在搜索框搜索lang,相应的code栏找到 `gml_Script_Lang_LoadFont` 这段代码

我们重点关注30行之后的。我们来看到37行,发现有个`font_add()`函数哎


什么?你不知道这是什么?那我稍微引用下吧


> 此函数可用于从**包含的文件**中存在的字体文件向游戏添加字体。可以定义字体的大小 (以点数表示),以及字体应该是粗体还是斜体, 也可以定义要包含的字符范围。该函数返回一个index值,该值应存储在变量中,因为在引用此字体的所有其他代码中都需要此值,或者如果该函数由于任何原因而失败,它将返回- 1。

>

> 请注意,字体文件必须是 `*.ttf``*.otf` 文件,对于添加亚洲或阿拉伯字体等非标准字体也很有用。

>  ——[Gamemaker 开发者之家 翻译的 GameMaker 用户手册](https://github.com/GamemakerChina)


我们在那行下面插入 `font_add_enable_aa(0)` ,并且要给该条件括上花括号,如图:

自行比较,看看区别在哪


你:啊?这又是什么函数?


> 该函数可用于对使用`font_add()`添加的字体启用或禁用抗锯齿 (AA)。这个函数需要在添加任何字体之前调用并将其设置为true会启用AA,将其设置为**false**会禁用它。默认情况下,已启用AA。请注意,这对在调用函数之前已经添加的字体没有影响,并且该函数只需要在添加字体时调用一次,而不是在使用该字体的每个绘制/步骤。

> ——[Gamemaker 开发者之家 翻译的 GameMaker 用户手册](https://github.com/GamemakerChina)


简单点说就是这个函数来开关抗锯齿,0是关,1是开

把它们括一起的原因是要在读的同时也要关掉抗锯齿(如果不是同时那加了也没用)


保存后看看效果(这里使用主世界字体)


这里可以换种写法(如果你想让抗锯齿可开可关而不是写死了关的话)


28行插入:


```gml

var aa = ini_read_real("font", "aa", 0)

```

相应的,`font_add_enable_aa(0)` 改为 `font_add_enable_aa(aa)`

相应的,对应字体的ini文件加上 `aa = 0`

这里换成1看看字体是否会糊


# Kristal游戏汉化思路


你:?这什么东西


> Kristal is a powerful [Deltarune](https://deltarune.com/) fangame and battle engine, made with [LÖVE](https://love2d.org/). Easily play and create custom Deltarune stories, using the [Lua](https://www.lua.org/) scripting language with an accurate battle and overworld engine!

>

> Kristal是基于[LÖVE](https://love2d.org/)制作的一个强大的[Deltarune](https://deltarune.com/) fangame和战斗引擎。使用[Lua](https://www.lua.org/)脚本语言制作精确的战斗和主世界,轻松游玩和创建自制的Deltarune故事线!

> ——[Kristal官方WIKI](https://github.com/KristalTeam/Kristal/wiki)

>

> LÖVE是一个使用 Lua 作为编程语言的 2D 游戏框架。LÖVE 完全免费,能用在任何开源项目,或闭源、商业项目。

> ——[LÖVE官方WIKI](https://love2d.org/wiki/Main_Page_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87))


<br>


关于这类游戏的拆包,我只能说很简单。因为很多的都是**普通打包**(普通打包:简单的对资源和源代码进行打包,打包成相应平台的安装文件),即使是编译打包,游戏作者也是会提供源代码的,所以拆的事这点不用担心


懒得下源码就直接把那exe解压出来就行了

(游戏通常可辨认为 一个红蓝背景中间白爱心的程序 带着一些dll文件。)

解压哟

字体资源在该文件夹的 **assets\font** 文件夹

你可以把一些字体替换了而且能加入新的字体


我们先把一些原字体换了,比如 `main.ttf``main_mono.ttf`,并在相应的json调字体大小

一般情况下你就在 `defaultSize` 这个键调字体大小就行了

`fallbacks`就是缺字的时候补上的字体(ps:用图像驱动的,fallbacks不管用)

这里我用的字体最佳比例为24,那我就调24(如果需要小一点的同个字体,需要在对应代码调参数)

不过这样还是看不出变化的,我们需要修改一下才能看到效果

没变化...

我们根据这界面的文字来找找好了。发现在 `src\engine\ment\menu.lua` ,然后稍微翻一翻

修改后

再把文件导进去exe里(你就用解压软件打开exe 找到lua文件相应位置 拖进去就行了)(对了那些字体文件,json也要拖到相应位置)

拖拖你的
修改后


怪物说话的字体(plain)怎么办?它可是图片哎

我能想到的是:创建新字体,因为中文需要ttf(

比如我新字体为plain_cn,把ttf文件和json文件放进 `assets\fonts` 文件夹,然后我们来到`src\engine\game\battle\ui\speechbubble.lua`


`Assets.getFont()``Assets.getFontData()` 里面的 **plain** 改成 **plain_cn** ,也就是那个新字体,然后拖进去看看

如有必要,`DialogueText()` 里面的 `font= "plain"` 改为`font = "plain_cn"`

效果如图


下面讲下修改非 `defaultSize` 控制的字体大小

如图,这个字体大小很大,肯定不是给出的24

这里我们搜一下,找到大写的fps,发现在 `"src\engine\overlay.lua"`,看到这行:

看到没?32!

改,都可以改(这里改成12,顺便调了下位置,体现差距)。改完之后拖进exe,如图:

目前遇到的情况目前就这么多

当然也会有拖进 `assets\fonts` 还会有问题的情况

那就把字体拖进 `mods\[游戏名]\assets\fonts` 文件夹里,总之这个不是没就是有了


至此,我能够说的思路目前就这么多,希望对你能有所帮助

如有疑问或错漏的地方,请指出来,毕竟我不是专业的

如有问题,可以在该q群里问:238552588


Undertale Engine/Kristal类游戏汉化思路的评论 (共 条)

分享到微博请遵守国家法律