当前位置: 首页 > news >正文

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图片)降低风险

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

http://www.gsyq.cn/news/1409503.html

相关文章:

  • 别再只看Top-1了!用Python代码实战解析Rank-1与Rank-5正确率,帮你更懂模型真实能力
  • Vue项目里用Highcharts+Canvas画频谱瀑布图,30ms刷新也不卡(附完整代码)
  • 孜喵鳕鱼泡芙真的有母婴博主测评过吗?结果怎么样?值不值得买?
  • UE4玻璃和水面材质实战:从折射率到光照模式,手把手调出真实半透明效果
  • 百度文心助手 LeetCode 2751. 机器人碰撞 C语言实现
  • 基于可靠性的直接Turbo译码器RCODD的FPGA实现与优化
  • 2026年零基础适配!新手友好型AI自动化测试工具测评
  • 技术笔记 | 解析SQR-PR300管道机器人
  • ChatGPT驱动的客户旅程地图重构:从模糊感知到精准预测的7步落地框架
  • 天龙八部单机版GM工具终极指南:5分钟快速掌握游戏数据管理
  • 2026 AR 巡检标杆实录
  • ANSYS Workbench螺栓连接仿真避坑指南:从Beam连接到预紧力锁死,一个案例讲透
  • 从CentOS 8.5 Minimal到开发环境:安装后必做的10件事(配置yum源、SSH、防火墙)
  • 观察使用Taotoken的Token Plan套餐后月度账单的变化
  • 多级重叠Schwarz预处理技术在CFD中的应用与优化
  • 基于 HarmonyOS 6.0 的日程备忘应用页面构建:深色主题与数据看板设计详解
  • ManySpeech-CLI:开箱即用的本地命令行语音识别工具
  • Linux内核开发者视角:深入SMMUv3驱动,手把手拆解dma_map_sg()的IOVA连续映射魔法
  • 力扣HOT100(35)回溯-全排列
  • 国产第一!Qwen3.7-Max全端上线,好易智算同步首发,企业级Agent底座再添新选择
  • 阿姆智创IBOX-6076R工控一体机,机器视觉设备控制升级
  • Windows命令行利器:Hexdump十六进制文件解析实战
  • 为什么92.3%的人用错ChatGPT设目标?——斯坦福HAI实验室联合实证:3类错误输入导致目标漂移率提升4.8倍
  • AI应用可观测性工程2026:LLM调用追踪评估与监控全栈实践
  • 睡眠呼吸暂停监测:轻量化CNN与ECG信号分析
  • 跨越十个数量级的能效革命:从GPU到忆阻器,神经计算硬件的能耗全景与路径选择
  • 别再死记硬背梯度下降公式了!用Python动画可视化梯度流,理解优化算法的本质
  • 基于 HarmonyOS 6.0 的日程备忘应用:待办事项板与提醒卡片详解
  • 美股盘前盘后数据接入前的 4 项核验:交易窗口、返回样本、timestamp 与失败分支
  • Cortex-M3开发者文档版本更新解析与应对策略