Expeirneced 1. はじめに Experienced.ks は、「現在までに通過したラベル」を保存し、後から そのラベルを通過したかどうか、何回通過したかを調査可能にする KAGへの寄生虫である。 通過記録は「現在のセーブデータで」と「今まで全てのセーブデータで」の 二つに分けて記録され、双方利用可能である。 kag.setCurrentLabel()に寄生してラベル情報を保存する。 大量のデータを保存しても読み込み時に遅くならないように、データを 階層化して管理しているのが ExperiencedPlugin.ks と大きく異なる。 2. 使用例 最初に一回だけ、KAGスクリプト(例えばfirst.ks)の頭で以下を実行。 [call storage="Experieced.ks"] そうすると、以下のように各機能が使用可能になる。 ; ラベル"*udetatefuse"を通過したことが無ければ「トゥーバッド!」と表示 [if_not_experienced target="*udetatefuse" storage="xxxx.ks"] トゥーバッド![p] [endif] ; 全セーブデータ中一度でもラベル"*udetatefuse"を通過してれば「グレェト!」と ; 表示する [if_experienced_once target="*udetatefuse"] グレェト![p] [endif] ; ラベル"*udetatefuse"を通過したことがあれば"*fukkin"へジャンプ [jump target="*fukkin" cond="experienced('*udetatefuse')"] ; ラベル"*udetatefuse"の通過回数を表示 ラベル*udetatefuseは[emb exp="experienced('*udetatefuse')"]回通過済。 ; 現在の位置を通過したことがあれば「二回目以降」と表示 [if_experienced] 二回目以降[p] [endif] 3. 注意点 "*|" などで指定された、ラベル名のない通過ラベル(実際には"*xxxx:3" とかになっている)は記録しないので検索できない。多分困らないと思って。 記録容量も案外バカにならないし。 あと、「最初に戻る」で戻るラベルの直後には、[clearvar]を書くこと。 そうしないと「セーブデータごとの通過記録」がクリアされない。どうしても [clearvar]したくない時は、以下で一応綺麗にはできなくもない。 [eval exp="delete f.footmark" cond="f.footmark !== void"] 4. KAGタグリファレンス [if_experienced target= storage=] 説明: ラベルを指定し、そのラベルを「このセーブデータで」通過したか どうかを判断する。[if]タグと同じように使うので、最後に[endif] が必要。ラベルは、全シナリオで一意である必要があり、別 ストレージに同名のラベルがあった場合は、ストレージを指定しないと 片方通過すると両方通過したことになるので注意。 また、複合条件(「*label_aと*label_bを両方通過したとき」など)は 指定できない。後述するtjsを使うこと。 引数: target=ラベル(先頭の'*'を含む) 調査したいラベルを指定。 ラベルが省略された場合、「現在の位置」をあらわし、 初めての通過の時のみ偽になる。 storage=ストレージ(.ks) ラベルが存在するストレージを指定。 省略すると、ストレージに依存せずラベルを探すが、速度的に 不利なので、可能ならストレージを省略せず記述すること 使用例: [if_experienced target="*play_with_akane"] あかねと遊んだことがある。 [endif] [if_not_experienced target= storage=] 説明: if_experiencedの逆。「このセーブデータで通過していなければ」。 引数: target=ラベル(先頭の'*'を含む) 調査したいラベルを指定。 ラベルが省略された場合、「現在の位置」をあらわし、 初めての通過の時のみ真になる。 storage=ストレージ(.ksを含む) ラベルが存在するストレージを指定。 省略すると、ストレージに依存せずラベルを探すが、速度的に 不利なので、可能ならストレージを省略せず記述すること [if_experienced_once target= storage=] 説明: if_experiencedと同じだが、対象は「今までの全てのセーブ データで」。かつて一度でも通過していれば真となる。 引数: target=ラベル(先頭の'*'を含む) 調査したいラベルを指定。 ラベルが省略された場合、「現在の位置」をあらわし、 初めての通過の時のみ偽になる。 storage=ストレージ(.ksを含む) ラベルが存在するストレージを指定。 省略すると、ストレージに依存せずラベルを探すが、速度的に 不利なので、可能ならストレージを省略せず記述すること [if_not_experienced_once target= storage=] 説明: if_not_experiencedの逆。「全てのセーブデータで一度も通過して いなければ」。 引数: target=ラベル(先頭の'*'を含む) 調査したいラベルを指定。 ラベルが省略された場合、「現在の位置」をあらわし、 初めての通過の時のみ真になる。 storage=ストレージ(.ksを含む) ラベルが存在するストレージを指定。 省略すると、ストレージに依存せずラベルを探すが、速度的に 不利なので、可能ならストレージを省略せず記述すること 5. TJS関数リファレンス experienced("*ラベル", "ストレージ.ks") 説明: このセーブデータ中での該当ラベルの通過回数を返す。通過して いなければ0。ストレージは省略可能だが速度的に難があるので 可能なら省略せず指定すること。 ラベルを省略すると、このセーブデータ中での現在の位置の 通過回数を返す。初めての通過なら0(1ではないことに注意)、 次の通過は1、その次は2、のように。 experienced_once("*ラベル", "ストレージ.ks") 説明: 全セーブデータ中での該当ラベルの通過回数を返す。通過して いなければ0。ストレージは省略可能だが速度的に難があるので 可能なら省略せず指定すること。 ラベルを省略すると、全セーブデータ中での現在の位置の通過 回数を返す。初めての通過なら0(1ではないことに注意)、 次の通過は1、その次は2、のように。 6. 複合条件の場合 複合条件("*label_a"と"*label_b"を両方通過したことがあればのような)の 場合、以下のようにTJS式を使えば指定できる。 [if exp="experienced('*label_a') && experienced('*label_b')"] 7. なんで以前の ExperiencedPlugin.ks からわざわざ作り変えたん? ↓これを回避するため。ゲームが大きくなってくると、マヂで切実。 http://www.geocities.co.jp/keep_creating/DojinDOC/kirikiriSmallTips.html#slowboot