RMXP 工具链:把童年游戏的录制流程自动化
把 RMXP 作品集整理成文章的过程中,有个问题反复出现:游戏画面怎么搬进博客。
截图一张张拍太累,录屏软件剪起来麻烦,而且这些游戏是 640×480 的老窗口,很多录屏工具对它的支持一言难尽。所以干脆自己写了一套工具链,从解密老档案到游戏自动行走,再到逐帧录制和 GIF 剪辑,一条龙。工具都整理进了一个仓库收着——目前先设成了私密,自用为主,等以后想公开了再说。
这套工具是干嘛的
整个工作流是这样的:老游戏的工程打不开,先用解密工具把 .rgssad 档案解开,拿到 Data 和 Graphics,游戏就能在现在的电脑上跑起来。跑起来之后才是重头戏——把画面录下来。
recgif.py 是连拍录制器,用 PrintWindow 直接抓游戏窗口,每秒能拍一百多帧,不受游戏是否在前台影响。拍完之后 makegif.py 从帧序列里挑出关键段,缩放到 380 像素宽,每帧独立调色板,输出成博客能用的 GIF。
操作游戏这边,walker.py 能让角色按地图格子自动走位,autoplay.py 是从标题画面一路点到下注台的完整宏。这些脚本依赖很多游戏自带的 66RPG 鼠标补丁的特性,比如按住左键角色就会朝光标方向走。
写这套工具踩的坑
最有意思的坑是键盘。一开始想当然地用键盘注入来做菜单选择和对话推进,结果发现这个 RGSS 引擎对 PostMessage、keybd_event、SendInput 扫描码模式统统不认。反倒是鼠标的按下状态它读得到——但快速点击会漏采样,必须按住 300 毫秒以上再松开。所以最后的方案是全鼠标操作:按住左键角色朝光标方向走,撞到目标就触发对话。
另一个坑是菜单一开,鼠标补丁的 click_lock 就会把地图上的全部确认操作锁死,关掉菜单也不解锁。解决办法很朴素:全程不开菜单。
还有个不起眼但很要命的:帧文件名排序必须按数字。字典序会让 frame_100000 排到 frame_09999 前面,剪出来的 GIF 里角色会在不同时段之间乱穿。
最后是磁盘。连拍录制器不设上限,一场一小时的录制写了 55 万帧、上百 GB。现在录制器加了 StopFile 停止机制,场次结束立刻清帧。
相关文章
这套工具链录制出来的游戏画面,都在这几篇文章里:
游戏本体的整理还在进行中。
