:D

现在有挺多视觉小说(比如希x薇,与钴糊的日常)都基于 TyranoBuilder 进行开发——一个基于 Web 的视觉小说引擎。

虽然平常挺讨厌电子之类的玩意儿,但这个时候还是不得不说真香。因为用 tyrano 编写的游戏都是跨平台的!在 Linux 下我只要简单地起一个 http server,然后打开目录中的 index.html,就能在浏览器中进行游戏了!再也不需要 wine 了!!

但是有一个问题困扰了我很久,那就是在浏览器中虽然可以玩,但无法存档,会报一个“この環境はセーブ機能を利用できません。ローカルで実行している場合などに発生します”,“セーブデータが壊れている可能性があります。セーブデータを初期化しますか?” 的错误。由于我不会日语看不懂报错也懒得谷歌就一直以来都没有去管这个错误,但是今天看到一个看起来不错的游戏,想试一试但 wine 果不其然地挂掉了,在浏览器里的话虽然能运行但不能存档太难受了。于是试着调试了一下这个问题,发现其实非常简单……

tyrano 内部提供了三种存档方式,分别是 webstorage、webstorage_compress 和 file。前面两个很好理解,一看就是直接存在浏览器里的,也是通用性最强的;而最后一个则是以大家最熟悉的 .sav 文件形式存储的,只能用在 PC 游戏上。

修复方案呼之欲出了:把存档方式改为 webstorage/webstorage_compress 即可(推荐前者,后者似乎偶尔会解压失败导致存档失效),相应代码在 ./data/system/Config.tjs 中,将 ;configSave = file 改为 ;configSave = webstorage 就能存档了。

不过如果要在挂在服务器上玩的话还推荐改一个地方,在 tyrano/lib.js 里,搜索 cache: false,然后去掉 url 后的随机字符串并将 cache 改为 true,改完以后大概这个样子。

1
2
3
4
5
6
7
8
9
10
11
12
$.ajax({
url: file_path,
cache: true,
success: function(text){
order_str = text;
callback(order_str);
},
error:function(){
alert("file not found:"+file_path);
callback("");
}
});

(解释:因为这个辣鸡引擎每次加载一段对话时都会请求整个对话文件,还带了时间戳导致浏览器缓存无效,影响速度(