GMS 1.4 YYC编译的游戏,如何安全地修改里面的文字和图片?(附UndertaleModTool实战)
GMS 1.4 YYC编译游戏修改实战:从文字替换到图片资源修改
在独立游戏开发领域,Gamemaker Studio(GMS)因其易用性和灵活性广受欢迎。许多经典独立游戏如《Undertale》等均采用GMS 1.4开发,并通过YYC(YoYo Compiler)编译发布。对于游戏爱好者或模组制作者而言,了解如何安全修改这些游戏中的文字和图片资源,不仅能实现本地化汉化,还能进行个性化定制。本文将深入探讨这一过程的核心技术与实操细节。
1. 理解GMS 1.4 YYC编译的游戏结构
GMS 1.4 YYC编译后的游戏与标准编译版本存在显著差异。YYC编译的核心特点是将游戏资源嵌入单一可执行文件(.exe),而非传统的data.win文件。这种设计虽然提升了安全性,但也为资源修改带来了挑战。
1.1 YYC编译的游戏文件组成
通过十六进制编辑器分析,YYC编译的.exe文件通常包含三个关键部分:
- 解释器部分:文件起始至
FORM标记(十六进制46 4F 52 4D)。这部分负责解释游戏数据结构,由于采用C语言编译,难以直接反编译。 - 数据包部分:从
FORM标记到AUDO标记(41 55 44 4F)。若该部分未加密,FORM后通常跟随GEN8标记(47 45 4E 38),表明资源可提取。 - 代码部分:
AUDO标记至文件末尾。这部分包含实际游戏代码,任何直接修改都可能导致程序崩溃。
表:YYC编译游戏文件结构关键标记
| 部分名称 | 起始标记(十六进制) | 结束标记 | 可修改性 |
|---|---|---|---|
| 解释器 | 文件起始 | FORM (46 4F 52 4D) | 不可修改 |
| 数据包 | FORM | AUDO (41 55 44 4F) | 可提取资源 |
| 代码 | AUDO | 文件末尾 | 极难修改 |
1.2 资源嵌入方式与安全修改原则
YYC编译将游戏资源(图片、音效等)直接嵌入可执行文件,这种设计带来两个重要影响:
- 资源访问效率提升:减少外部文件依赖
- 修改难度增加:需要特殊工具和技巧才能安全修改
黄金法则:任何修改都必须保持原始文件大小不变,否则极易导致程序崩溃。对于字符串修改,必须严格遵循等长替换或使用空字节(00)占位。
2. 准备工作:工具与环境配置
2.1 必备工具清单
要进行安全的游戏资源修改,需要以下工具组合:
十六进制编辑器:
- HxD(Windows平台推荐)
- 010 Editor(高级功能更丰富)
专用修改工具:
- UndertaleModTool(支持GMS游戏资源查看与编辑)
- GMS Resource Explorer(辅助资源提取)
辅助工具:
- Resource Hacker(查看基础资源结构)
- Cheat Engine(动态调试可选)
2.2 UndertaleModTool的安装与配置
UndertaleModTool是修改GMS游戏的核心工具,安装步骤如下:
# 通过GitHub获取最新版本 git clone https://github.com/krzys-h/UndertaleModTool.git cd UndertaleModTool # 安装依赖(Windows下可直接使用预编译版本) dotnet build提示:使用前确保安装.NET 6.0或更高版本运行环境。对于复杂修改,建议备份原始游戏文件。
3. 安全提取游戏资源
3.1 识别并提取数据包部分
- 使用十六进制编辑器打开游戏.exe文件
- 搜索
FORM标记(46 4F 52 4D) - 确认后续四个字节是否为
GEN8(47 45 4E 38) - 选中从
FORM到AUDO之间的所有数据 - 将选中部分另存为新文件(如
extracted_data.win)
# 简易Python脚本实现数据包提取 with open('game.exe', 'rb') as f: data = f.read() form_pos = data.find(b'FORM') audo_pos = data.find(b'AUDO') if form_pos != -1 and audo_pos != -1: with open('extracted_data.win', 'wb') as out: out.write(data[form_pos:audo_pos+4])3.2 使用UndertaleModTool解析资源
- 启动UndertaleModTool
- 选择"File"→"Open",加载提取的
extracted_data.win文件 - 浏览左侧资源树,可看到:
- Sprites(游戏精灵/图片)
- Sounds(音效)
- Strings(部分字符串资源)
- Fonts(字体)
- Rooms(房间数据)
常见资源类型与修改难度对比
| 资源类型 | 修改难度 | 风险等级 | 推荐工具 |
|---|---|---|---|
| 图片 | 低 | 中 | UndertaleModTool |
| 音效 | 低 | 低 | UndertaleModTool |
| UI文本 | 中 | 高 | 十六进制编辑器 |
| 游戏对话 | 高 | 极高 | 专业工具组合 |
4. 实战:修改游戏内文字
4.1 定位字符串的精确方法
YYC编译的字符串通常位于代码部分起始处,紧邻SetEndOfFile标记(53 65 74 45 6E 64 4F 66 46 69 6C 65)。定位步骤:
- 在十六进制编辑器中搜索
SetEndOfFile - 向下滚动,观察可读文本区域
- 记录目标字符串的偏移地址和长度
4.2 安全替换字符串的两种策略
策略一:等长替换
- 新字符串必须与原始字符串完全相同的字节长度
- 示例:将"CeyaseOver"改为"CeyaseEnda"
策略二:空字节截断
- 对于需要缩短的字符串,用空字节(
00)填充剩余空间 - 绝对禁止增加字符串长度
# 原始字符串(十六进制表示) 43 65 79 61 73 65 4F 76 65 72 00 # "CeyaseOver" # 安全修改方案 43 65 79 61 73 65 45 6E 64 61 00 # "CeyaseEnda"(等长) 43 65 79 61 73 65 00 00 00 00 00 # "Ceyase"(空字节截断)警告:字符串修改是最高风险操作,建议每次只修改一处并立即测试游戏稳定性。某些关键字符串(如函数名)修改必然导致崩溃。
5. 替换游戏图片资源
相比文字修改,图片替换相对安全且效果显著。以下是使用UndertaleModTool的标准流程:
5.1 图片资源替换步骤
- 在UndertaleModTool中定位目标Sprite
- 右键选择"Export"导出原始图片
- 使用图像编辑软件修改或替换图片
- 保持相同尺寸(或等比例缩放)
- 使用相同格式(通常为PNG)
- 返回UndertaleModTool,右键选择"Import"导入新图片
- 保存修改到新的data.win文件
5.2 将修改后的资源重新打包
- 在十六进制编辑器中打开原始游戏.exe
- 用修改后的data.win内容替换原始FORM-AUDO部分
- 确保:
- 新数据不超过原始空间(否则需要高级技术调整)
- 所有关键标记位置保持不变
- 保存为新.exe文件
6. 高级技巧与疑难排解
6.1 处理加密数据包
若FORM后不是GEN8标记,表明数据包已加密。可尝试:
- 搜索已知资源名称的加密形式
- 尝试通用XOR解密工具
- 分析游戏内存获取解密密钥
6.2 修改后游戏崩溃的常见原因
- 文件大小变化:任何导致.exe大小改变的操作都极危险
- 字符串长度超标:新增字符会覆盖后续关键数据
- 资源格式不符:如图片色深、音频采样率改变
- 内存校验:部分游戏会验证资源完整性
6.3 性能优化建议
- 修改前创建多个备份点
- 使用版本控制工具跟踪修改历史
- 建立自动化测试流程验证每次修改
- 优先修改非核心资源(如UI图片)降低风险
在实际项目中,我发现最稳妥的方法是先针对游戏的非关键部分进行试验性修改。例如,替换标题画面图片比修改游戏对话文本安全得多。通过渐进式学习和积累经验,逐步掌握更复杂的修改技术。
