セーブ・ロード - roratorio-hub/ratorio GitHub Wiki

解析中

セーブ

SaveSystem() から始まる旧バージョンのセーブ処理は非常に複雑で下手に手を出すとセーブデータの互換性を失ってしまいます。 今後セーブデータを拡張する場合はできる限り新バージョンのセーブ処理を踏襲すべきです。 その際は collectionDataShadowEquips() のコードが参考になります。

どうしても旧バージョンの処理に手を加える必要がある場合は saveDataUnitArray の末尾に新しいセーブデータユニットを追加するのが良いでしょう。 PR#129 が参考になります。

シーケンス図「セーブ」

onclick()@ro4/m/js/calcx.html
    「URL出力」ボタンから呼び出される

OnClickUrlOutMIG()@ro4/m/js/saveload.js
    「CSaveController」クラスの「encodeToURL」メソッドを呼び出してURLを取得する

    encodeToURL()@ro4/m/js/CSaveController.js
        「CSaveDataManager」クラスの「encodeToURL」メソッドを呼び出してエンコード文字列を取得する
        「CSaveDataConverter」クラスの「CompressDataTextMIG」メソッドを呼び出してエンコード文字列を圧縮してURLを生成する

        encodeToURL()@ro4/m/js/CSaveDataManager.js
            「saveload.js」の「SaveSystem」メソッドを呼び出す
            これは旧セーブデータ処理を取り込むための暫定対応なので、今後の新規パラメータ処理はここに加えるべきでない

            SaveSystem()@roro/m/js/saveload.js
                ★計算機の各値を配列に格納し、文字列に変換して返す

        encodeToURL()@ro4/m/js/CSaveDataManager.js
            「CSaveDataManager」クラスの「parseDataText」メソッドを呼び出す
            これは旧セーブデータ処理を取り込むための暫定対応なので、今後の新規パラメータ処理はここに加えるべきでない

            parseDataText()@ro4/m/js/CSaveDataManager.js
                「CSaveDataUnit」クラスの「parse」メソッドを呼び出してSaveSystem()が返した文字列をパースする
                パースされたデータは「saveDataUnitArray」に格納される

                parse()@ro4/m/js/CSaveDataUnit.js
        
            #collectDataShadowEquips()@ro4/m/js/CSaveDataManager.js
                これは新セーブデータ処理

            ※「saveDataUnitArray」をコンパクションした後に文字列として結合する

CSaveDataMappingManager.js について

旧バージョンのセーブデータ作成に関わるコードです。 非常に複雑なので下手に手を加えるべきではありませんが 現状では一旦旧バージョンのセーブデータを作成し それを新バージョンのセーブデータにコンバートしているため 拡張したい場所によってはここに手を加えざるを得ない場合もあります。

ラトリオの各数値は文字列表現で出力されますが このとき数値は 6 bitごとに切り出されてから 1 文字に変換されます。 読み込み時には文字をビット表現に戻したうえで 必要な文字数分のビット列を組み立てて数値を復元します。

つまり数値を出力・読み込みする場合には 数値を復元するために必要な文字数を指定する必要があります。 この文字数は CSaveDataConverter.js で定義されています。

例えば以下のコードはアクセサリのデータ構造を定義しています。 アクセサリIDとスロット4つ分のカード・エンチャントIDが必要で それぞれ18bitの数値である事がわかります。

CSaveDataMappingManager.__GetMappingArrayAccessory2 = function (version) {
	var mappingArray = null;
	mappingArray = [
		3,
		3, 3, 3, 3,
	];

https://github.com/roratorio-hub/ratorio/blob/6b563099e3a8e8049b3409c9caf9f982e52b4eee/roro/m/js/CSaveDataMappingManager.js#L348-L355

ロード

onclick()@ro4/m/js/calcx.html

OnClickUrlInMIG()@ro4/m/js/saveload.js

loadFromURL()@ro4/m/js/CSaveController.js

ExtractDataTextMIG()@roro/m/js/CSaveDataConverter.js

funcExtract()@roro/m/js/CSaveDataConverter.js

ConvertStoNMIG()@roro/m/js/CSaveDataConverter.js

parseDataText()@ro4/m/js/CSaveDataManager.js

    CSaveDataUnitParse.parse()@ro4/m/js/CSaveDataUnit.js

applyDataToControls()@ro4/m/js/CSaveDataManager.js