有关于使用GameMaker Studio引擎的游戏的汉化问题
gamemaker吧
全部回复
仅看楼主
level 4
饮冬归霖 楼主
该游戏已经是封包过的成体游戏,而我想要做的是对其进行英转中的汉化工作。
目前的进度是我通过UndertaleModTool打开了该文件的Data.win文件,并生成了支持中文的位图字体替换了该游戏的初始位图文字解决了该游戏的初始字体不支持中文的问题。
目前遇到的问题是在我进行游戏的部分文本汉化测试时,发现被汉化过后的文本在进行对话时将不再播放对应的人物对话音效,而尚未进行过汉化的文本则会正常播放。之后我又尝试过汉化的部分中插入英文字符,结果是英文字符正常播放音频,中文字符不播放。
游戏的音频播放逻辑是在生成字符时每生成一个字符,就播放一次音频。而游戏的音频并不保存在Date.win文件内,而是在外部,包括对话代码也是。
注:本人纯小白,能走到这一步大部分都是依靠的ai指路,所以可能有看不懂回答的可能,见谅,还有就是请别喷地太重。
另外,如果在此过程中需要其他的资料的话请告诉我。
2025年08月10日 10点08分 1
吧务
level 13
拆解data.win这件事不做公开讨论,先把问题简化成《一个别人做的带音效的打字机显示效果,在用中文字符替代英文字符后,音效未正确生效》这样吧。
由于看不到这个效果原本是怎么做的,那就按可以想象的最简单模型来推测排查方向好了:原来的效果可能是在每“多显示一个字符”时,“先经过了一步判断”再去播放或者不播放音效的,而这个判断的最大可能是新增的字符是否是“需要发音的字符”。推测理由是这类特效一般在经过“空格、标点”的时候是不发声的。继续推测就是可能判断的标准就是看字符对应的数字是否在特定的范围内,而程序预先写好的范围也只有英文、数字这两部分。
如果猜对了,那么现在要做的就是找到这部分范围指定,并把中文字符也加入判定范围。
2025年08月11日 01点08分 2
@q糖豆p 你的猜想十分正确,几乎是一针见血。关于你的猜想,在我询问ai时,ai也是与你基本一致的回答,既该游戏无法识别处于ASCLL(0-127)范围外的字符导致对话音效无法正常播放,另外关于播放音效的效果是如何实现的,它的代码结构具体形容的话是这样: [speaker.指定人物头像.指定人物音效](对话文本) 因为我看关于人物对话所需要的所有素材,包括对话代码、人物头像、人物音效全部在Data外的文件夹内,加上我基本纯小白,所以无法确定无法识别中文是导致该问题的根本原因,而ai给出的解决方式是搜索包括以下代码的代码文件 // 关键模式1:字符遍历+音效播放 for (var i = 0; i < string_length(text); i++) { var char = string_char_at(text, i+1); if (/* 字符检测条件 */) { audio_play_sound(voice_sound, 0, false); } } // 关键模式2:对话标签解析器 if (string_match(tag, "speaker.*")) { var sound = string_replace(tag, "speaker.", ""); current_voice = asset_get(sound); } 如果猜想是正确的,那么问题就剩下我该如何找到包含该代码块的代码文件了
2025年08月11日 04点08分
level 4
你好我也在汉化gms的一个游戏,你的glyphs那里是可以直接填中文的吗,我那里就只能用英文来代替中文,假如Glyphs填a对应位图字体的字,那就要在文本里填a让游戏抠出来这个字,但是英文只有26个字母根本不够,请问怎么解决
2025年08月15日 03点08分 3
@贴吧用户_J4eMJGb 关于你的问题,由于字数太多,所以我把回答放在了这个贴里面,你可以看看能不能帮到你
2025年08月15日 04点08分
level 4
饮冬归霖 楼主
由于我不知道你那里的具体情况,那我就先说说我这里的情况吧。
关于我是怎么生成位图字体以及让他生效的
首先,我先使用了GMS2生成了一个位图字体的png图片和一个yy后缀的字符映射文件,随后我将该yy文件中的关键数据提取后重组,将yy文件转换为了csv文件,也就是你口中的glyphs文件
另外,关于你说的我都glyphs文件是否可以直接输入中文,对此我并不清楚,因为我的glyphs文件也不是用中文对应字符的,而是使用Unicode码来对应的,而它是如何生效的,我猜是这样:
在我导入字体文件并开始着手翻译时,我的确是在文本文件里面输入的中文,而游戏显示的内容也的确是中文,但这是怎么实现的呢?我猜是因为游戏将文本中的中文直接转换为了Unicode编码之后拿到glyphs文件之中进行对照,之后再裁剪下Unicode对应坐标的位图字符在游戏内进行显示。
我的glyphs文件里面是有包含每一个字的Unicode X坐标 Y坐标 宽度 高度 字宽 水平偏移量这些参数的,所以这应该就是我的glyphs虽然不是用的中文对应,却还是可以正常显示中文的原因。所以也许你可以不必执着于完全使用中文对应中文,也可以采用我的办法。
我不知道这些信息能不能帮到你,因为我也只是个小白而已,我只能讲讲我的实现方式。
2025年08月15日 04点08分 4
level 4
谢谢你的回答,这样的话我应该也能用你的方法实现汉化,我也是通过undertalemodtool修改glyphs的,你的glyphs是输入中文然后在游戏文本里输入unicode编码实现的吗,因为在undertalemodtool修改好像只能修改一个字母或者字,一整个编码输不进去,或者你还有修改什么代码才能实现汉化吗
2025年08月15日 05点08分 5
关于你的问题,还是因为字数太多的原因,我将回答发在了这个帖子里
2025年08月15日 07点08分
level 4
饮冬归霖 楼主
关于这个,其实我也不算特别了解,所以,我只能谈谈我的理解,你可以看看。
先回答你的第一个问题,关于我的glyphs文件内部是否是输入中文然后在游戏文本输入Unicode编码实现字符显示
对此问题,我已在上一个回答中做出了解答,既我的glyphs文件中只包含了每一个中文字符的Unicode码,以及每一个中文字符在png字体文件中的相对位置坐标,既:
X坐标 Y坐标 宽度 高度 字宽 水平偏移量
另外,关于我是否是在游戏文本中输入Unicode编码来实现中文字体输出,我的回答是:
我在文本内容中输入的是中文,而在游戏看来,我输入的中文实际上就是Unicode编码,这是游戏的视角逻辑,既“游戏所看见的东西”,而游戏所做的也只是将它看见的东西拿到glyphs中进行比对,然后裁剪出
正确的
区域拿到显示屏上显示。以下是我的glyphs文件的内容
另外,关于你说的“UTMT只能修改一个字母或者数字”我对这个的理解是,你的字体文件完全是只使用UTMT制作的,或者因为别的原因导致修改难度过大,而我则建议你直接使用GMS2生成字体文件,以下是操作步骤:
0.前期准备:下载GMS2,然后再去找一个包含常用汉字的文本文件,一般网上就有
1.使用GMS2创建一个工程,注意工程的存储位置要知道,因为我们到时候需要去那里找字体文件
2.右键右边窗格的字体,选择新建
3.选择好你想要的字体及字体大小,以及基于你的需要开关抗锯齿,关闭抗锯齿的话可以让你的字体看起来更像像素字
4.点击左下角的“添加”,随后选择你找到的文本文件,自动添加常用汉字
5.点击重新左下角的生成字体纹理
6.找到GMS2的工程存储地址,然后在里面找Font文件夹,里面会有一个PNG文件和一个yy文件,在这一步,你可以使用UTMT的lmportGMS2FongData直接导入。而我不是使用的这个方法,所以你使用该脚本时如果无法成功的话,你可以往下看看
7.使用支持批量替换的文本编辑器,将yy后缀的文件提取重要内容后,直接套用csv文件,也就是glyphs文件中的内容格式,具体提取什么重要内容,以下是yy后缀的文件的内容格式以及csv后缀文件的内容格式(图片)你需要做的是将yy文件中glyphs"里面"的东西复制,然后仅保留csv文件中第一行的内容,其余的直接覆盖
8.将替换好的csv里的数据按照csv的原本排序顺序排序好,排序顺序为:
yy:Unicode 高度 水平偏移量 字宽 宽度 X坐标 Y坐标
csv:Unicode X坐标 Y坐标 宽度 高度 字宽 水平偏移量
9.修改好后,将修改过的csv文件中第一列的第一、第二个数据,及字体名字(你创建字体文件时使用的字体的名字)和字体大小(你创建字体文件时设置的字体大小)
10.最后,通过UTMT的lmportFont导入脚本直接将PNG文件和CSV文件直接替换掉原游戏字体文件
注意:手动创建的位图字体文件的文件名一定要与原游戏字体文件名相同,否则的话需要手动找到调用字体文件的代码,将调用字体的字体名字改为创建字体的名字,如果你选择了更改名字的话,那么你只需要将PNG文件名字改为UTMT中的字体文件就行,csv文件的话则是“glyphs_字体文件名”即可
另外,你还需要知道你的这款游戏是否可以识别Unicode编码,不过根据你的进度,想必是可以的,如果你的游戏输出的汉字是“口口口口”的话,那么就有可能是你的这款游戏无法识别Unicode编码,需要找到相关文件手动添加代码,具体的代码你可以去问deepseek。
以上就是我在进行字体文件替换时所进行的操作,你可以看看你能不能适用这个方法
2025年08月15日 07点08分 6
谢谢成功显示中文了,你的csv能直接导入utmt的吗我好像只能替换png,我只输了几个字测试的,看最后一张图片像是直接把映射位置写进代码了
2025年08月19日 03点08分
回复 贴吧用户_J4eMJGb :我的CSV是可以直接导入进UTMT的,我是使用的inportFont函数导入的,还有就是要确保csv和PNG都在一个文件夹里面,要不然的话应该也不行 另外最后一张图展示的是初始的yy文件中的内容,不是直接将映射位置直接写入了代码,真正起作用的是我重组后的CSV文件,也就是第一张排列好参数的图片。虽然yy文件这张图已经比较老了,不过并不影响,跟新版GMS2的yy文件相比起来只是参数排列顺序不一样,照着我给出的排列顺序进行排列就可以
2025年08月19日 03点08分
1