セーブ・ロード

スクリプトから制御はしない前提。

コマンドを実行する度にオートセーブが基本。

localStorageに保存するだけなら簡単。
当然サーバーに保存も予定しているけどまだ。
@ gameと@ systemで分けてまとめてるけどどう保存するかは未定。

それよりロード後にどう再開するかが重要な所。
index,label,commandの情報があれば一応再開できる。
index: スクリプトはビルドでひとまとめにされるのでスクリプト内の位置はindexで一意に決まる。
label: 最後に通過したジャンプ可能なラベル。
command: 最後に実行したコマンド。

index,labelがない→セーブデータがないので最初から。
index位置のコマンドとセーブデータのコマンドが違う→アップデートでスクリプトが変わってるのでlabel位置から再開。

いきなりindexまで飛ばして再開するとその前の画像表示などがなくなるので
labelまで飛んでからindexまでスクリプトを高速に進めている。
ラベルジャンプできるのでラベル単位ではどこから再開しても大丈夫なように作られているはずという前提。
進んでる様子が見えるけど隠すのはいつでもできるので今はこのまま。
速すぎてemitterが開始されてなかったりまだ要調整。

多少開始位置がずれてもラベルジャンプできるので気にならない。
とにかくアップデートしただけでセーブデータが壊れるような仕様には絶対にしない。
一番大事なセーブデータが壊れる仕様なノベルゲームエンジンが多くて意味不明過ぎる。

## 検討項目

### textやimageならいいけど他のコマンドを自動で実行した場合の問題
今後コマンドが増えて行って問題があるようなら安全なコマンドのみ実行するように変更。

### 途中に選択肢があったら
選択肢はラベルにジャンプするだけのシンプルな仕様にする。
選択肢コマンドではセーブしない。
これで選択肢表示中に終了したら→選択肢直前から再開。
選択肢後に終了したら→選んだラベルから再開。

### アップデートしたけどindexとcommandがたまたま変わってない場合
スクリプトのhashも保存するようにして対処。

### スクリプトから制御
タイトル画面対応のためにこのくらいは必要かもしれない。
$autoload: ロード。起動時に実行されるので不要かも。
$autosave stop: オートセーブを無効化
$autosave start: オートセーブを有効化
$jump load: セーブデータのindex,label,commandを使ってジャンプ。「つづきから」など用。
```
*title
$autosave stop
はじめから／つづきから を表示

*continue
つづきからならここで
$autosave start
$jump load

*start
$autosave start
はじめからならここ
```

### オートセーブ以外
独自にコマンド作ったりstate作ってその中でConfig使えばいつでもセーブできるし@ game、@ system以外のセーブもできたりする。
$window.localStorageを直接使えばConfigを経由する必要もない。