LNS001 セーブデータ圧縮

セーブデータの容量を削減し、解析を多少面倒にします。





基本情報

前提スクリプト


挿入位置



説明

概要

 DataManager によるセーブファイルの読み書きメソッドを、圧縮と暗号化を行うように変更します。このスクリプトの導入前から存在したセーブデータはそのまま使えます。
 ついでに、セーブ時にエラーが起こると既にあったセーブファイルを削除するという鬼畜仕様を改善します。また、セーブ/ロード時のエラーが完全に無視される仕様も改善し、エラー時にはエラーの内容をメッセージボックスとコンソールに表示するようにします。クリップボードが利用可能な場合はクリップボードにも書き込みます。
 DataManager のセーブ/ロードに関するメソッドを再定義しています。他のスクリプト素材とは競合する可能性があります。また、エイリアスを使って機能の拡張をするスクリプトは基本的にこれより後ろに入れてください。

◆ 保存場所の変更

 セーブファイルの保存先を System フォルダに変えます。
このフォルダ名は設定項目により変更可能です(空文字列にすれば標準と同じくゲームフォルダ内に保存されます)。

◆ 圧縮

 データの圧縮には Zlib::Deflate.deflate が使われます。ツクールのセーブデータには マップの通行フラグ情報 など繰り返される内容が多いため、圧縮率はそれなりに高くなります(標準のセーブ内容で1/5~1/10程度)。
 SaveFileSeed が nil 以外の値なら、データの圧縮と同時にビットクラッシュも行います。外部ツールによるセーブデータの容易な改変を防ぐ簡易的な暗号化です。セーブデータが膨大な場合、ある程度のタイムラグが発生するため、セーブデータの圧縮だけで十分な場合は nil のままにしておいてください。
 なお、スクリプトを解析されると解読方法も分かるため、暗号化として見たときの安全性は RGSS3 の暗号化と同等かそれ以下となります。

◆ バックアップ

 ゲームデータをセーブする際、セーブフォルダにSaveBackup.rvdata2というファイルが生成されます(名前は設定項目から変更可能)。セーブ中に何もエラーが起こらなければ、バックアップファイルは何にも使われずに即時削除されます。
 RGSS内部でのエラーが起こった場合、書き込み中のファイルは破棄され、バックアップされたデータを復元します。この結果、セーブ処理自体がなかったことにされます(セーブ回数は増えます)。この場合、復元後にバックアップは削除されます。
 セーブ中にメモリリークなどの致命的なエラーによりゲーム自体が強制終了した場合は、バックアップは削除されずに残ります。この場合、バックアップファイルの名前をSave01.rvdata2などの形式に変更すれば、データを復旧できます。


備考

再定義されるメソッド

  • DataManager.save_game
例外発生時の挙動を変更します。

  • DataManager.save_game_without_rescue
  • DataManager.load_game_without_rescue
セーブ/ロード時にセーブデータを圧縮/解凍するように変更します。

上記のメソッドを拡張するスクリプトはこれよりも後ろに入れてください。

設定項目

SaveFileZip<初期値:true>
真のときセーブデータの圧縮を行う。偽にするとRGSS3の標準セーブプロセスとなる。
SaveFileSeed<初期値:nil>
セーブデータ暗号化(笑)の種。nil の場合、暗号化を行わない。変更すると以前のセーブデータは読み込めなるので注意。
SaveDirName<初期値:"System/">
セーブファイルを保存するフォルダ名 ※"/"で終わらせること
BackupName<初期値:"SaveBackup.rvdata2">
バックアップデータのファイル名。



更新履歴

  • 2019/10/18 セーブフォルダを変更できるように修正
  • 2018/04/17 暗号化処理の速度を改善
コメント:

すべてのコメントを見る
最終更新:2019年10月18日 12:50