RPG Maker MV Android 存档修改

之前在网上下了《永生之物》(Ambrosia)的安卓版,第一次玩这种rpg,别的先不说,确实刺激,实用度挺高,遂开始对这类游戏感兴趣,不过,作为懒狗,让我手动练级刷怪我肯定是不愿意的,于是我就开始找歪门邪道了。

其实玩的多了就知道这些游戏很多都是用 RPG Maker MV 做的,所以存档修改的技术已经很成熟了,然而,这些修改方式都需要找到*.rpgsave存档,PC 端还好,文件就赤裸裸地放在那里,Android 端就不一样了,我翻遍了 /sdcard/Android/data/PACKAGE_NAME/data/data/PACKAGE_NAME 都没找到,由此猜测存档可能被放到数据库里了。

但是很可惜, /data/data/PACKAGE_NAME/databases 是空的,又仔细翻了翻,在 /data/data/PACKAGE_NAME/app_xwalkcore/Default/Local Storage 里找到了文件file__0.localstorage,虽然后缀不是db,但一看旁边的file__0.localstorage-journal就知道是sqlite3了。

把文件掏出来,sqlite3打开看了下,是这样的:

CREATE TABLE ItemTable (key TEXT UNIQUE ON CONFLICT REPLACE, value BLOB NOT NULL ON CONFLICT FAIL);

数据差不多是这样的:

KeyValue
RPG Config一堆看上去像base64的文本
RPG File1一大堆看上去像base64的文本
......一大堆看上去像base64的文本
RPG Global一堆看上去像base64的文本

显然,RPG File*就是我们要的存档,我试着通过.optput扒了下来,因为看上去是base64过的文本,于是惯性思维解码以后上传到Save Editor,却显示格式错误,因为我对 RPG Maker MV 也不熟,只能试着把未解码的文件传上去,没想到成功了。修改完以后把下载回来的存档塞回去,高高兴兴地打开游戏,读取存档选项直接变成灰的了...

陷入僵局,看了半天也没看出什么来,也不知道出于什么心理,可能是闲的发慌,试验都没成功就用py写了个脚本把数据库里的键值对全导出成文件,无意间瞟了一眼文件大小,发现居然正好是之前扒下来的存档的一半!

于是我分别看了下文件的hex,发现用python导出的文件每个字节后面都跟了个空白字符\x00,而用.output扒下来的就没有,也不知道是为什么。遂手动把之前修改过的存档每个字节后面加上\x00,再塞回数据库,打开游戏,成了!

当然每次修改存档还要这么操作一番也挺烦的,就写了个小工具,使用方法readme里写了。

虽然成功了,但我小小的眼睛里还是充满了大大的疑惑:

为什么用python的sqlite3库和用.output的结果不一样?

RPG Maker MV 为什么一定要在每个字节后面加上丑不啦叽的\x00

发愁。

下一篇:泡沫冬景