†アリス「おかしいわ。何だかとってもおかしいわ。したんだい、海老名グリーンみたいなことを口走って!」アリス「誰が海老名パーキングエリアよ。それより、ゴーストを作ってるんだけど、ゴーストを切り替えるたびにセーブデータがぽこぽこ増殖していくのよ。そいつはゴーストキャッシュという名のSSPの仕掛けた恐るべきトラップなのさ。通常、ゴーストが起動/終了するとき、栞ロードと栞アンロードが発生します。ところが、SSPのゴーストキャッシュが有効である場合、ゴーストキャッシュからゴーストが起動したり、ゴーストキャッシュに入ったりする場合には栞ロードや栞アンロードが発生しません。これが華和梨的には由々しき問題なのです。栞ロードが発生したとき、華和梨は「エントリの初期化」と「スクリプト記述ゾーンのKISの実行」を実施します。ところが、ゴーストキャッシュからの起動ではこれらの処理が実施されず、「各エントリの前回終了時の状態の復元」が実施されます。この挙動の差が問題なのです。以下のようにだけ書いてゴーストを起動します。\eまずはゴーストキャッシュを無効にして、このゴーストを起動します。普通にゴーストが起動すれば起動時に「1」と喋ります。起動時に「ほげ」エントリの内容を話していますが、この「ほげ」エントリの初期値は「0」でOnBoot?イベント受信時に1増やしているので。このゴーストを他のゴーストに切り替えて戻したり、他のゴーストから呼び出してみても起動時に「1」と話します。ところがゴーストキャッシュを有効にしてこのゴーストを起動してみると......。最初の起動時こそ「1」と話しますが、他のゴーストに切り替えてすぐにもどしてみると「2」と喋り、もう一度やってみると「3」になりと、起動すればするほど喋る値、つまり、「ほげ」エントリの値が増えていきます。†ゴーストキャッシュからゴーストが起動される時、「各エントリの前回終了時の状態の復元」が実施されるので、「ほげ」エントリは「0」で初期化するのではなく、前回終了時の「1」という状態を復元されてしまっているのです。ほげ)により更に1増えて「2」となるのです。起動回数)\eまずはゴーストキャッシュを無効にして、このゴーストを起動します。ゴーストが起動すれば起動時に「1」と喋り、起動するごとに「2」、「3」と増えていきます。ゴースト終了時(OnClose?やOnGhostChanging?)の契機で「起動回数」エントリをセーブし、ゴースト起動時(OnBoot?)でそれをロードして1増やしているのですから当然ですね。ところがゴーストキャッシュを有効にすると......。ゴーストを切り替えたりするごとに、起動時のトーク、つまり、「起動回数」エントリの中身が「1」→「2/1」→「3/1/2/1」とカオスなことに。†ゴーストキャッシュからゴーストが起動される時、「各エントリの前回終了時の状態の復元」が実施されるのはさっき述べた通り。そのため、OnBoot?イベントを受信したときには既に「起動回数」エントリには「1」という値が設定されています。ところが、OnBoot?イベントでさらにセーブデータのロードを実行することに「ほげ」エントリに「1」という単語がもうひとつ追加されて、「1」が「1,1」という2つの単語を持った状態になってしまうのです。起動回数)により、コレが「2,1」に。起動回数)されるので「3,1,2,1」と倍増していくのです。簡単な対策はスクリプト記述ゾーンにセーブデータのロード処理を書いてしまうこと。ゴーストキャッシュから起動するときにはエントリの内容は前回終了時の状態が復元されるのだから有難くそれを使わさせてもらうことにして、通常の栞ロードが発生した時だけセーブデータから値を読み込んで使いましょう。†セーブデータが増えるのはこれでいいとして、前の方に出てきた「ほげ」エントリのようにセーブ対象ではないけれど起動時に初期化したいエントリはどうしましょう。実は、ゴーストキャッシュからゴーストが起動されるとき、SSPはOnCacheRestore?というNOTIFYイベントを投げてきています。この中で値の初期化を実施しましょう。0)どうせなら処理を共通化。$(初期化処理)これでめでたしめでたし......と思いきや。続きはそずべねぐ/セーブとロードのおはなしで。