起動と終了に関するTIPS。
ポストと狛犬では、概ね以下のように記述されています。
*OnFirstBoot >初回 *OnBoot >起動 *OnClose >終了 *OnGhostChanged >他のゴーストから変更 *OnGhostChanging >他のゴーストへ変更
これにより、「*初回」「*起動」「*終了」といったトークが動作するようになります。
*OnBoot :いっちばーん。
*OnFirstBoot :はじめまして。
*OnGhostChanged :(R0)さんから交代しました。
*OnGhostChanged :(R0)さんに呼び出されました。
*OnGhostChanging :(R0)さんに交代します。
*OnClose :おつかれさまでした。
そのゴーストが初めて起動した時に呼ばれる、OnFirstBootイベントに記述します。
前述したとおり、ポストと狛犬では「初回」という名前のトークにジャンプさせています。
名前を変えても構いませんし、処理を追加したりするのもいいでしょう。
*OnFirstBoot >初回 *初回 :(0)はじめましてだね。よろしく。
一度バニッシュ(アンインストール)された後、再びインストール後の初回起動では、Reference0に情報が追加されています。活用すると以下のような事もできます。
*OnFirstBoot >消され経験あり初回【タブ】(R0)>0 >初回 *消され経験あり初回 :(8)一度消したくせに、また来たの?
初回起動ではゴーストの取り扱いや状況といった基本的な説明を行うことが多いでしょう。
しかし、初回起動といえども扱いは普通のトークと同じです。
そのままではマウス反応などの新たなイベントで上書きされてしまう状態のため、誤操作で本体をクリックしてしまったり、SSPを終了させてしまった場合、説明を十分にできないまま次の段階へ進んでしまうといったことが有り得ます。
OnFirstBootは、一度でも起動したら、以後アンインストールするまで二度と発生しないためです。
初回起動でユーザーの名前まで覚えさせるゴーストも多いですから、それもスキップされてしまいます。
*OnFirstBoot >初回 *OnBoot >初回【タブ】(変数「初回イベントを完遂」の存在)==0 >起動 *初回 :\t(0)はじめまして。 ... #中略 ... では(ユーザ名)さん、よろしくお願いします。\x \![raise,初回イベント完了] *初回イベント完了 $初回イベントを完遂【タブ】1
この例では「初回」トークを再生中にはマウス反応が起こらず、
また、このトークが終わる前にSSPを終了した場合、次に起動した時も「初回」トークが流れます。
ポイントはトークごとにさくらスクリプトの \t を追加しておくこと。
このスクリプトを冒頭で宣言しておくだけで、そのトークが流れている間はマウス反応などが起こらなくなります。
そして最後に \x \![raise,イベント名] を使うことで、イベントが終わったタイミングでフラグを立てます。
(\xはバルーンをクリックするまで一時停止、\![raise]は実行したタイミングで新たなイベントを上書き発生させます。)
上の例は中途半端に終了したとき「さっきのはなかったことにしてもう一度初回トーク」という挙動です。
そこでさらに発展させて、初回の最中に終了された時に専用のトークを使ってフォローをする方法も紹介。
OnBootに少し手を加え、新たに中断された時のためのトークを追加します。
*OnFirstBoot >初回 *OnBoot >初回に中断された【タブ】(変数「初回イベントを完遂」の存在)==0 >起動
*初回に中断された :\tちょっとー。まだ説明が終わってないんですけど! まあいいや、もう一度説明するよ? ... #中略 ... では(ユーザ名)さん、よろしくお願いします。\x \![raise,初回イベント完了] *初回イベント完了 $初回イベントを完遂【タブ】1
こうすると、「OnFirstBootは経験済みだけど初回イベントが完了していない」時の処理になります。
初回起動時には、\0側のキャラクターは右、\1側のキャラクターは左に表示されます。
しかし、シェルの向きの関係などで、左側にメインキャラクターを持っていきたい時もあるでしょう。
他にも、デフォルトを始めとした多くのバルーンは\0側が大きく\1側が小さい、右クリックメニューは\0側に設定を始めとした多くの項目がある等、それぞれの差異から初期位置の入れ替えをしたいケースがあると思います。
SSPのプロパティシステムを使うと、\0と\1の初期位置を取得することができます。
この値を参考に、さくらスクリプトのmoveを使えば両者を入れ替えることができます。
ただし、ディスプレイの情報は環境依存(=個人個人で設定が固有)のため、あるユーザのところでだけ動かないなどが起こりえます。
ある程度さくらスクリプトを理解している方向け。
*OnFirstBoot \![get,property,OnChangePosition,currentghost.scope(0).x,currentghost.scope(0).y,currentghost.scope(1).x,currentghost.scope(1).y] *OnChangePosition \0\![move,(R2),(R3),0,primaryscreen,left.top,center.bottom]φ \1\![move,(R0),(R1),0,primaryscreen,left.top,center.bottom]φ (初回)
OnBootイベントの発生から呼び出される平時の起動イベントについて。
*OnBoot >起動 *起動 >深夜に起動【タブ】(現在時)<4 >早朝に起動【タブ】(現在時)<6 >朝に起動【タブ】(現在時)<10 >昼に起動【タブ】(現在時)<16 >夕方に起動【タブ】(現在時)<18 >夜に起動【タブ】(現在時)<23 >深夜に起動 *深夜に起動 :夜中だよ・・・ *早朝に起動 :ずいぶん早起きだね・・・ *朝に起動 :おはよー *昼に起動 :こんちはー *夕方に起動 :ちわーっス *夜に起動 :こんばんわー
こんな感じで記述を。
時間帯の区切りを変えたり細かくしたりいろいろできます。
同じように、終了トークも時間帯によって変えられます。
頻繁に使うのであれば、
@時間帯 (iflist、(現在時)<、4、深夜、6、早朝、10、朝、 16、昼、18、夕方、23、夜、深夜)
の二行を追加した上で、
*起動 >(時間帯)に起動
とすると、それぞれの時間帯に飛ぶので楽です。
*起動 >休日の場合【タブ】(現在曜日)==土||(現在曜日)==日 >午前中に起動【タブ】(現在時)<12 >午後に起動 *休日の場合 >休日の午前中【タブ】(現在時)<12 :きょうは休日です。 *休日の午前中 :やすみの日くらいゆっくり寝かせてたもれ。
*OnBoot $第○週=(when,(現在日)%7,(現在日)÷7+1,(現在日)÷7) $第○何曜日 第(第○週)(現在曜日)曜日 >(現在月)月(第○何曜日) >起動 *1月第2月曜日 :今日は成人の日です。 *5月第2日曜日 :今日は母の日です。 *7月第3月曜日 :今日は海の日です。
上記のように記述をすると、何月の第○何曜日にイベントを起こすことができます。 また、
*OnBoot (第○週取得) $第○何曜日 第(第○週)(現在曜日)曜日 >起動 *1月第2月曜日 :今日は成人の日です。 *5月第2日曜日 :今日は母の日です。 *7月第3月曜日 :今日は海の日です。 @第○週取得 (when,(現在日)%7,(set,第○週,(現在日)÷7+1),(set,第○週,(現在日)÷7))
のように記述することもできます。
ただし、このときには第○週の数値が半角になるので注意が必要です。
新たな記事にまとめました。
→起動時のトークを前回からの期間に応じて変える
正月やバレンタインなど様々な行事に対応した起動イベントがありますが、そういうトークは1回で十分!って人向け。
トークのあとにフラグ用変数に年月日を記録し、次に起動したときの年月日と比較して一緒だったらそのイベントトークにはジャンプしない。
2回目以降は通常起動、又は通常交代します。
*OnBoot >(現在月)月(現在日)日【タブ】(現在年)(現在月)(現在日)!=(イベント年月日) >起動 *OnGhostChanged >(現在月)月(現在日)日【タブ】(現在年)(現在月)(現在日)!=(イベント年月日) >他のゴーストから変更 *起動 :こんにちは。 *他のゴーストから変更 :おつかれさまでした。 :あとは任せな。 *4月1日 $イベント年月日【タブ】(現在年)(現在月)(現在日) :うそつきました。
年も記録しているので、来年になったらちゃんとイベントトークにジャンプします。
起動/終了方法のうち、里々独自の起動/終了イベントです。
里々独自内部イベントで、
栞としての起動処理(セーブデータ読み込みetc)が終わった直後、里々自身が呼びます。
OnBoot/OnGhostChangedより先、起動時には必ず呼ばれますので、OnBoot/OnGhostChangedで同じ初期化が必要な場合、そちらで行わずにOnSatoriBootで行えば一箇所でできてしまうわけです。追加修正も一元管理できるので便利です。
※SSPでキャッシュが発生した場合など、必ずしも呼ばれるとは限りません。一元管理する場合は下記の起動・終了・呼出・交代時に発生するイベントまとめ(SSP調べ)を参照し、漏れがないように充分注意して下さい。
OnSatoriBoot中でトークが書かれた場合、里々はいったんそれを保存しておいて、OnBoot/OnGhostChangedが呼ばれた時、OnBoot/OnGhostChangedを呼ばずに、保存しておいたトークを優先します。
以下の例では、好感度を0にセットし、OnBoot/OnGhostChangedを無視して「こんにちは。」をトークします。
*OnSatoriBoot $好感度=0 :こんにちは。
easyballoonのorusubanなどでは、こちらを使うと便利です。
*OnSatoriBoot (bln,change,ただいま起動中です。)
ロード直後に呼ばれます。
OnSatoriBootとの違いは、ここで何かを返しても一切使用されないという事です。
ここでトークを入力しても、OnBoot/OnGhostChangedのトークは潰されません。
(追記)起動時以外に呼ばれることもあります。
OnSatoriBootと対になるイベントです。
OnSatoriClose中でトークが書かれた場合、里々はいったんそれを保存しておいて、OnClose/OnGhostChangingが呼ばれた時、OnClose/OnGhostChangingを呼ばずに、保存しておいたトークを優先します。
栞としての最終処理の直前、里々自身がコールします。 ここでトークを返しても使われることはありません。
各イベント詳細はリファレンスサイトや当ページ参考にして下さい。
SSPには起動中にゴーストキャッシュという機能が働いており、SSPを終了するまで個別のゴーストの一時データを破棄せずに保管しています。
このゴーストキャッシュが使われた時は通常起動時とイベント発生パターンが異なるので、フェーズ1のイベントを使用する場合注意が必要です。(特に前回終了状況に対して対応トークを正確に行おうとする場合や、終了時間を扱うような場合)
起動指示 ↓ | |||
(キャッシュ有) | (キャッシュ無) | ||
OnCacheRestore | OnSatoriLoad | ||
↓ | |||
OnSatoriBoot | |||
↓ | |||
OnInitialize | |||
↓ | |||
(通常起動) | (初回起動) | (呼出) | (交替) |
OnBoot | OnFirstBoot※1 | OnGhostCalled※1 | OnGhostChanged※1 |
※1記述がない場合はOnBootが呼ばれる
終了指示 ↓ | |||
(\-を実行して終了) | (SSPも同時に終了) | (ゴーストのみ終了) | (ゴースト交替) |
OnCacheSuspend※2 | OnCloseAll | OnSatoriClose | OnSatoriClose |
↓ | ↓ | ↓ | |
OnSatoriClose | OnClose | OnGhostChanging | |
↓ | ↓ | ↓ | |
OnClose | OnCacheSuspend※2 | OnCacheSuspend※2※3 | |
↓ | |||
(SSPも同時に終了) | (ゴーストのみ終了/交替) | ||
OnDestroy | なし | ||
↓ | |||
OnSatoriUnload |
※2ゴーストキャッシュが有効な場合のみ
※3自分自身に交替した場合は発生しない
OnGhostCalling → OnGhostCallComplete