三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

GMS 1.4 YYC编译的游戏,如何安全地修改里面的文字和图片?(附UndertaleModTool实战)

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文件通常包含三个关键部分:

  1. 解释器部分:文件起始至FORM标记(十六进制46 4F 52 4D)。这部分负责解释游戏数据结构,由于采用C语言编译,难以直接反编译。
  2. 数据包部分:从FORM标记到AUDO标记(41 55 44 4F)。若该部分未加密,FORM后通常跟随GEN8标记(47 45 4E 38),表明资源可提取。
  3. 代码部分AUDO标记至文件末尾。这部分包含实际游戏代码,任何直接修改都可能导致程序崩溃。

表:YYC编译游戏文件结构关键标记

部分名称起始标记(十六进制)结束标记可修改性
解释器文件起始FORM (46 4F 52 4D)不可修改
数据包FORMAUDO (41 55 44 4F)可提取资源
代码AUDO文件末尾极难修改

1.2 资源嵌入方式与安全修改原则

YYC编译将游戏资源(图片、音效等)直接嵌入可执行文件,这种设计带来两个重要影响:

  • 资源访问效率提升:减少外部文件依赖
  • 修改难度增加:需要特殊工具和技巧才能安全修改

黄金法则:任何修改都必须保持原始文件大小不变,否则极易导致程序崩溃。对于字符串修改,必须严格遵循等长替换或使用空字节(00)占位。

2. 准备工作:工具与环境配置

2.1 必备工具清单

要进行安全的游戏资源修改,需要以下工具组合:

  1. 十六进制编辑器

    • HxD(Windows平台推荐)
    • 010 Editor(高级功能更丰富)
  2. 专用修改工具

    • UndertaleModTool(支持GMS游戏资源查看与编辑)
    • GMS Resource Explorer(辅助资源提取)
  3. 辅助工具

    • 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 识别并提取数据包部分

  1. 使用十六进制编辑器打开游戏.exe文件
  2. 搜索FORM标记(46 4F 52 4D
  3. 确认后续四个字节是否为GEN847 45 4E 38
  4. 选中从FORMAUDO之间的所有数据
  5. 将选中部分另存为新文件(如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解析资源

  1. 启动UndertaleModTool
  2. 选择"File"→"Open",加载提取的extracted_data.win文件
  3. 浏览左侧资源树,可看到:
    • 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)。定位步骤:

  1. 在十六进制编辑器中搜索SetEndOfFile
  2. 向下滚动,观察可读文本区域
  3. 记录目标字符串的偏移地址和长度

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 图片资源替换步骤

  1. 在UndertaleModTool中定位目标Sprite
  2. 右键选择"Export"导出原始图片
  3. 使用图像编辑软件修改或替换图片
    • 保持相同尺寸(或等比例缩放)
    • 使用相同格式(通常为PNG)
  4. 返回UndertaleModTool,右键选择"Import"导入新图片
  5. 保存修改到新的data.win文件

5.2 将修改后的资源重新打包

  1. 在十六进制编辑器中打开原始游戏.exe
  2. 用修改后的data.win内容替换原始FORM-AUDO部分
  3. 确保:
    • 新数据不超过原始空间(否则需要高级技术调整)
    • 所有关键标记位置保持不变
  4. 保存为新.exe文件

6. 高级技巧与疑难排解

6.1 处理加密数据包

若FORM后不是GEN8标记,表明数据包已加密。可尝试:

  1. 搜索已知资源名称的加密形式
  2. 尝试通用XOR解密工具
  3. 分析游戏内存获取解密密钥

6.2 修改后游戏崩溃的常见原因

  1. 文件大小变化:任何导致.exe大小改变的操作都极危险
  2. 字符串长度超标:新增字符会覆盖后续关键数据
  3. 资源格式不符:如图片色深、音频采样率改变
  4. 内存校验:部分游戏会验证资源完整性

6.3 性能优化建议

  • 修改前创建多个备份点
  • 使用版本控制工具跟踪修改历史
  • 建立自动化测试流程验证每次修改
  • 优先修改非核心资源(如UI图片)降低风险

在实际项目中,我发现最稳妥的方法是先针对游戏的非关键部分进行试验性修改。例如,替换标题画面图片比修改游戏对话文本安全得多。通过渐进式学习和积累经验,逐步掌握更复杂的修改技术。

← 返回列表