プレイ中にゲーム内セーブを記録する
ゲーム内のセーブは、バックグラウンドへの移行時やゲーム終了時にしかファイルへ記録されていませんでした。1.2.0からは、最後の変化から1秒間変わらなければ記録します。
ゲーム内でセーブすると、その内容はまずエミュレーターのメモリに残ります。1.1.2までは、アプリがバックグラウンドへ移るときかゲームを終了するときにだけ、このメモリをファイルへ移していました。その間にアプリが止まったり、システムがアプリを終了したり、バッテリーが切れたりすると、最後の切り替え以降のセーブはすべて失われていました。
GBとGBAはさらに不利でした。mGBAは開いたままのセーブファイルに直接書き込みますが、アプリがそのファイルを新しいファイルに差し替えた後も、すでに削除された古いファイルに書き続けていました。そのため最初にバックグラウンドへ移った後は、これらの機種でも次の切り替えまでゲーム内セーブがファイルに届きませんでした。
1.2.0では、各コアにセーブメモリが変わったかを0.5秒ごとに確認します。変化のあと1秒間それ以上変わらなければ、その時点でファイルに記録します。ゲームは1回のセーブを複数のフレームに分けて書くことがあり、変化のたびに記録すると書き込みが増え、書きかけのセーブがファイルに残るおそれがあるためです。一時停止メニューを開いたときは待たずにすぐ記録します。
ファイルの書き方は以前と同じです。まず一時ファイルに書き、まとめて差し替えるので、書き込みの途中でアプリが止まっても前のセーブは残ります。書き込むのはゲームがセーブしたときだけで、毎フレーム書くことはありません。PPSSPPはメモリースティックのフォルダに自分で書き込むため、これまでどおりです。
セーブしてから1秒以内にアプリが止まると、そのセーブは今でも失われることがあります。実機でゲーム中にアプリを強制終了したあとにセーブが残るかは、まだ確認していません。
あわせて読みたい開発の話
- 開発の話v1.0.7クローズドベータテスト
他のエミュレータのセーブを取り込めるように
DeltaのDSセーブを取り込めないという報告がありました。ファイル形式だけでなく、N-EMUの取り込みが受け付けるファイルも確認する必要がありました。
- 開発の話v0.4.2初期開発
違うステートを読み込んだとき
古いステートを間違えて読み込んでも、直前まで遊んでいた状態に戻れるよう、読み込みの取り消しを加えました。