给windowframe添加音量调节功能

给windowframe添加音量调节功能

一次偶然, 我成功得到了基于GameMaker:Studio的创意游戏windowframe的源文件, 并发现它原来还有bgm!

我带起耳机打开了windowframe, 发现果真如此.

于是, 为了修改bgm的音量. 我开始魔改它.

事情的开始, 我试着寻找这个游戏的官网

https://managore.itch.io/windowframe

windowframe是个创意游戏, 游戏总体围绕”窗口”的伸缩, 角色的跑酷与射击, 非常好玩以至于班里同学不停找我要游戏. 如果你不了解这个游戏, 可以看看官网, 非常的有意思.

windowframe官网

当我往下查看后, 发现了这一条:

more information

原来这个游戏是用GameMaker:Studio制作的.

不过, 基于GameMaker:StudioWindows游戏目录下, 除了程序的.exe, 应该还有一个名为data.win的文件, 这是GameMaker:Studio游戏的主体, 在生成可执行文件后会自动生成. 按道理GameMaker:Studio是不会生成独立的.exe. 我猜它应该是被通过某种手段给”打包”了.

windowframe是独立exe

我没有太多拆包经验. 一次偶然, 我在运行时查看文件目录, 结果有了意想不到的收获:

属性

原来这个打包原理是把游戏源文件放到temp, 然后再运行游戏源文件, 等到游戏关闭后再次删除游戏源文件.

这就好办了, 可以直接把游戏源文件复制出来.

复制出来

上图中的mus_main.ogg就是bgm文件了, 有点阴森.

接下来开始魔改, 直接用UndertaleModTool反编译, 把脚本全部扒拉出来. UndertaleModTool是一个用于修改, 反编译和解压Undertale以及其他GameMaker:Studio引擎游戏的开源工具, Github仓库地址:https://github.com/krzys-h/UndertaleModTool.

导出所有脚本

然后通过Visual Studio Code搜索设置背景音乐的函数:

搜索"audio_sound_gain(mus_main"

找到了!

1
audio_sound_gain(mus_main, 0.07, 0)

只有原音频音量的7%, 难怪我不带耳机玩时没听到.

之后我返回UndertaleModTool, 插入了个利用ini文件调音量的脚本.

1
2
3
4
5
6
7
8
9
10
11
12
//首先, 声明个用来设置音量的变量. 因为其他地方没有修改bgm的脚本, 不需要设置全局变量
var vol;

//其次, 通过读取setting.ini, 给变量赋值. 我设置成把 vol 变量赋予"Sound"节, "Vol"键名的键值.
ini_open(".\setting.ini")
vol = ini_read_real("Sound", "Vol", "default")

//防止内存溢出, 停止读取ini
ini_close()

//最后以变量为音量来播放背景音乐
audio_sound_gain(mus_main, vol, 0)

魔改

接下来手动在游戏目录创建setting.ini:

1
2
[Sound]
Vol = 0.08

大功告成! 以后只需要调整setting.iniVol键名的键值, 就可以调整bgm的音量.

评论