Comp-SaveDataEX セーブデータ圧縮暗号化スクリプトにおいての詳細情報です。
- ※ご注意
-
このスクリプトを導入する前のセーブデータとは互換性がなくなります。
圧縮をかけるセーブデータは、次のように選択されます。
-
グローバル変数で、 $game_ で始まり、 続く文字が、1文字以上、20文字以内の次の条件を満たすもの
-
英小文字、数字またはアンダーバーで構成されている
-
続く文字列の最初の一文字が英小文字または数字
例) $game_temp 、 $game_system 、 $game_self_switches など
-
1.の条件を満たすグローバル変数のうち、次の条件を満たすものがセーブデータとして保存されます。
-
WFRGSS_CompSave::EXCLUSION_MODE の値が true の場合、EXCLUDE_SAVE にクラスが指定されておらず、値が nil (NilClass)でないもの
-
WFRGSS_CompSave::EXCLUSION_MODE の値が false の場合、ALLOW_SAVEにクラスが指定されているもの
規定では、WFRGSS_CompSave::EXCLUSION_MODE は false になっており、次のクラスのインスタンスが保存されるようになっています。
(デフォルトのセーブデータと保存されるものは同じです。)
Game_System, Game_Switches, Game_Variables,
Game_SelfSwitches, Game_Screen, Game_Actors,
Game_Party, Game_Troop, Game_Map, Game_Player
圧縮をかけるセーブデータをカスタマイズするときは、次のように設定します。
-
許可モードか、除外モードかを指定します。
-
WFRGSS_CompSave::EXCLUSION_MODE = true のとき、許可モードで動作します。
-
WFRGSS_CompSave::EXCLUSION_MODE = false のとき、除外モードで動作します。
-
(1) 許可モードで動作させる場合は、セーブデータに含めるオブジェクトのクラス名を ALLOW_SAVEに、クラス名の配列で指定してください。
例)
ALLOW_SAVE = [Game_System,Game_Switches,Game_Variables,Game_SelfSwitches,
Game_Screen,Game_Actors,Game_Party,Game_Troop,
Game_Map,Game_Player].freeze
(2) 除外モードで動作させる場合は、セーブデータに含めないオブジェクトのクラス名を EXCLUDE_SAVE に、クラス名の配列で指定してください。
例)
EXCLUDE_SAVE = [Game_Temp].freeze
- ※ご注意:
-
除外モードで動作させるとき、セーブデータに保存させたくないオブジェクトは、$game_ で始まらない変数名にすることを強く推奨します。
$game_で始まる変数名が付いている場合、意図せずにセーブデータに取り込まれることがあります。
セーブデータウィンドウに表示する項目(このスクリプトの場合、 Game_SaveHeader クラスの内容)は圧縮をかけずに保存するようにしてください。表示する項目を編集する場合は、このインスタンスに行うようにします。
フレームカウントはヘッダ部分に保存しておくことをお勧めします。
本スクリプトでは、Window_SaveFile クラスの、次のメソッドおよびプライベートメソッドはカスタマイズされています。これらのメソッドがカスタマイズされている場合は修正が必要です。
refresh
initialize(file_index, filename)
セーブ失敗のときは、Window_Helpのウィンドウを作成してメッセージを表示します。
セーブデータの形式は次のようになっています。
- ヘッダ部分 (Game SaveHeader)
- 非圧縮。シーンで一覧表示するなどで呼び出されます。
- データ部分 (Game SaveData)
- 圧縮暗号化。実際のセーブデータの内容が入ります。容易に解析できません。そのため、鍵の取り扱いには十分注意してください。
セーブデータは、Zlib圧縮をかけたうえ、暗号化をかけています。
暗号化のアルゴリズムは、
AES(Rijndael)のブロックサイズ256bit、キーサイズ256bit、CBCを用いています。
暗号化に使う鍵がばれなければ解析は非常に困難です。
ただし、鍵を無くしてしまったらそのセーブデータは使用出来なくなりますのでご注意ください。
本スクリプトでは解析・改造されることを困難にしますが、
セーブデータが絶対に解析されない、改造されない事を保障するものではありません。
※セーブヘッダを暗号化することは推奨しません。
一覧表示するときに、復号することになり非常に処理が重くなります。
カスタマイズポイントのmake_keyメソッドに定義されています。
作品ごとにかならず値を推測されにくいように変えてください。
各値は、0から255までです。
実際は、この鍵から、ファイルインデックス毎に実際に使われる鍵を生成して
使用します。そのため、ファイル名を変えて行うと鍵が異なるため、復号できません。
鍵を更新する場合は、以前のセーブデータが読み込めなくなる恐れがあります。