Skip to content

Repository files navigation

GMSave

这是一个为 GameMaker 8.0 设计的模组,旨在使 GameMaker 8.0 的保存系统更现代化和使其 git 友好。

该扩展受 gm82save 启发,采用与 gm82save 扩展一样的项目结构,只有些许不同,迁移更方便。

特性

  • 新的 .gm80 项目格式。使用这个格式就像使用 GameMaker 8.0 原生的 .gmk 格式一样。该格式还兼容 Git、SVN 和 Mercurial 等版本控制系统,可以直观地看到当前的修改。再也不会为多人协作而操心。

  • 使 GameMaker 8.0 处理项目冲突的体验提升至现代 IDE 水平。当项目内的资源同时被外部编辑器和 GameMaker 8.0 修改时,若无冲突会静默重载,有冲突会打开一个冲突合并窗口,让您自由选择要保留哪方。

  • 优化了大型项目的保存时间。该模组实现了智能保存,只保存已修改的文件。

如何使用

  1. 请检查你的 GameMaker 8.0 安装目录,目录下是否有 FoxPluginLoader.dll 和 FoxPlugin.txt。该插件靠这两个文件进行加载。
  2. 到 Release 下载最新版本的二进制发布,解压后,将 GMSave.dll 和 GMSaveMerge.exe 放在 (安装目录)\FoxPlugin 文件夹下(或你能找到的磁盘上的任意地方)。
  3. 打开 FoxPlugin.txt,新建一行并写入 "FoxPlugin\GMSave.dll"(或被双引号包裹的其他路径)。并保存该文件。
  4. 打开 GameMaker 8.0 并开始使用 .gm80 格式。

潜在风险

  • 该模组可能仍然存在 bug。如果你想使用该格式,请备份你的 gmk 或者使用版本控制系统。如果你发现了什么 bug,请告诉我。
  • 该格式不保存实例 ID 和瓦片 ID。也就是说,你在房间里面摆的相同位置和状态的实例或瓦片,在保存并重新载入后其 ID 可能会变。如果你的游戏依赖这些精确值,建议你重新设计游戏代码,或者不要使用该插件。不过,实例的顺序以及层内瓦片的顺序依然保留。
  • 该格式依赖于每个游戏资产都有独特的名称。比如,该格式大小写不敏感,使用 player 和 PlAyEr 做对象名,该格式会将它们看作同一个对象,从而导致保存失败。在同一种类型的资源下不能重名但是在不同类型的资源下可以重名(虽然从工程健康的角度下我也不推荐不同类型资源重名的做法),比如,你可以让一个 sprite 和 object 都叫 world,但你不能让两个 rooms 都叫 world。此外,保留的 Windows 文件名如 con 等也是不能使用的。
  • 冲突合并窗口(GMSaveMerge.exe)依赖于系统的 WebView 组件。要使用冲突合并窗口,需要确保您的系统不低于 Windows 10 1803。若您的系统低于 Windows 10 1803,则不要部署 GMSaveMerge.exe,插件会自动回退至 ver 1.1.0 以前的冲突合并方式。

与原生保存的一些差异

  • 当使用“另存为”对话框保存新的 .gm80 项目时,它会创建一个新的带 .gm80 后缀的文件夹并将项目内容保存到该文件夹中。保存 .gmk 项目的行为保持不变。
  • 目前时间戳尚未被保存。实际上,这意味着“保留最后更改”选项在导入资源时无法正常工作(虽然使用该格式也没必要使用 GameMaker 8.0 内置的”导入资源“功能就是了)。
  • 在首次载入和首次保存时所需的时间可能比载入和保存 .gmk 文件更长。

与 gm82save 的一些差异

  • 只支持 GameMaker 8.0,不支持 GameMaker 8.1。
  • 功能只覆盖 .gm80 格式的读取和保存,不会像 gm82save 那样功能众多。
  • .gm80 项目格式相比 .gm82 项目格式(v5)有一些差异,具体如下:
    • 元数据 .gm80 和 .gm82 文件后缀名和内容行 gm8x_version 不同。
    • .gm80 项目格式的 cache/ 文件夹只存放 IDE 状态(如资源树的展开状态),不会像 gm82save 那样生成缩略图缓存。建议将 cache/ 加入 .gitignore。
    • 不支持和不保存 gm82save 为 gm82room 设计的扩展实例属性。但是实例文件会兼容(即写入)这些属性,都为 4294967295,0,1。
    • 不支持任意类型的任意额外附加数据。不会进行读取也不会进行保存。
    • constants.txt 在常量编辑器无内容的时候不会生成。
    • game_information.rtf/.txt 被简化为 gameinfo.rtf/.txt。
  • 该插件是单线程的,不支持多线程存储和读取 .gm80 项目。
  • 在调试时游戏的默认工作路径不同。gm82save 是 项目.gm82 文件夹里面,GMSave 是 项目.gm80 文件夹外面。

如何编译

使用 Visual Studio 2022 进行编译,编译时平台选择 x86。

About

使 GameMaker 8.0 的保存系统更现代化和 git 友好的模组

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages