今日は、聖おぶ4で作っていた部分セーブシステムをイマジナに移植しました。
部分セーブは、ふつうプレイヤが気づかないうちに利用する機能で、セーブデータの一部のデータを必要に応じて書き換えるというものです。
聖おぶ4ではボス戦の直前にセーブ画面を開くことなく「ボス戦前のイベントを見た」というフラグを立てるために使っていました。
そうすることで、ボス戦に負けてリセットし、再戦するようなときに同じイベントを見ずに済むので、再戦が楽になるし、ボス戦前のイベントを比較的長くしたりもできます。
イマジナでも同じように利用するつもりです。
今回は割と手間取りました。
まず聖おぶ4の部分セーブは、今回ソースを見て気づいたんですが、セーブファイル操作で不正ツールなどなしに普通にデータを不正に書き換えられてしまう可能性がありました。
まずそこを修正。
でもやっぱり抜け目はあります。普通にプレイする分には問題ないので、あえてその抜け目を言ったりはしませんが。
次に
File.open(name, "rb") do |file| 処理 end
の周辺でエラーになって気づいたんですが、ブロックの「処理」の部分で定義した普通のローカル変数はそのブロック内でしか有効ではないんですね。
何気に初めて知りました・・。
最後に、インタプリタのインデックスがダンプされるたび必ず1進むために、部分セーブした後に改めてセーブすることなくゲームを終了した場合、次回ロード時にイベント再開位置がずれてしまうんですね。
これは原因を探し始めてから直すまでに1時間くらいかかりました。
今日は異常に眠い・・早めに寝ようかな。