見出し画像

システム変数をビルダー上で扱う際の注意点/ティラノビルダー備忘録

※ティラノビルダー初心者向けのお話です※



「システム変数」とは?


システム変数とは、ゲーム全体で共有される変数です。
変数を定義するときに「システム変数」にチェックを入れているとその変数はゲーム全体で共有されます。
これは、ゲームを一度でもクリアしたかどうかといった判定で利用できます。


ティラノビルダーの左上のメニュー「変数管理」から普通に変数を作ると、セーブデータをロードするたびに上書きされる「ゲーム変数」というものが作成されます。
例えばどの選択肢を選んだかとか、今ある好感度とか、今持ってるアイテムとか、そういうのを変数に入れて保存しておくと便利なやつですね。

しかしセーブデータのロードに左右されない、ゲーム全体で保持される(ゲームを閉じても残る)変数があれば「このゲームを一度でもクリアしたかどうか」という記録を変数に入れられて便利!
それが「システム変数」なのです〜

システム変数は変数管理で変数を作る際に"システム変数"のボックスへチェックを入れるだけで作成できます。
が、ゲーム変数よりやや落とし穴がある気がするので……気をつける点を備忘録として残します!



初期値が入力できない


普通に変数を作る(ゲーム変数)と、最初に変数へ入れておく数字か文字(初期値)を入力することができますが、システム変数はそれができません。

入力欄がグレーになって入力できない

じゃあ空っぽなん?

実は代わりに「undefined」という特殊なものが格納されております。
これ、ただundefinedっていう文字が入っている訳ではなく虚無みたいなもんなので、自分でこのundefinedを別の数字か文字で上書き(=代入)しないと正しく使い始めることができません。

その証拠に、このundefinedの状態で変数設定コンポーネントを使い何かを足し算したり引き算したりすると「NaN」(=不正なオペランドを与えられたために生じた計算結果の印)になって機能しなくなっちゃいます。
(デバッグで変数ウォッチするとその様子が分かりますよ〜)

よってシステム変数の使い方によっては少し注意が必要になります。



使い道が「代入」の場合(問題なし)


繰り返しになってしまいますが、システム変数を使う際には必ず最初に「代入」をする必要があります。

おまけページを作ってクリア後に解放したい、等に使う場合、つまり「ゲームをクリアしたかどうか」の印として使う場合なら、クリア画面のシナリオとかでシステム変数に「クリア」とか「true」という文字を代入してあげればいいだけなので、特に問題はないと思われます。

わたくしはよく「済」って入れがち

例)
変数名「epilogue」/クリア時に代入する文字「クリア」
変数名「clear」/クリア時に代入する文字「true」

まあ要するに分かれば自由。
ただし数字から始まる名前の変数は×


※ついでにタイトル画面におまけページへ行くためのボタンを置くやり方はこちら!

(おまけページへ行くためのボタンをクリア前には見えないように隠さなくてはいけませんが、そのためのジャンプコンポーネントの実行条件も「true」の時に反応するので最初のundefinedが入ったままでも大丈夫っちゃ大丈夫なんですよね)



使い道が「代入」以外の場合(注意)


問題はシステム変数を「代入」以外で使いたい時。

私が困ったのは「パラメータをオートセーブにしたい!」と思って強さとか体力とかMPとかのパラメータ用に10個くらいシステム変数を作った時でした。

パラメータだから変数の使い方はもちろん「足し算」や「引き算」などになります。で、その頃はundefinedのこととか全く知らなかったので初手足し算して見えないところでNaNが生まれるわけですよ(地獄)

そういう時は……の答えは既に下記のwiki様に載っているのですが
(真ん中のあたりにあるスクリプトコード)

よくわからんけど魔法の呪文だと思ってコピペするぜ……!!という方は使ってみて頂いて、とりあえずこちらではコンポーネントを使ってどうにかする方法を紹介しますね(意味あるんか)


考え方としては
「ゲームを初めて起動した時だけ初期値を代入で上書き、以降はその処理をすっ飛ばしてもらう」って感じです。
そしてティラノビルダーの力だけでどうにかします(??)


①ゲームに使うシステム変数を作る

私の場合はLv.とか攻撃力とか作りました


②「初めてゲームを起動した」ことを記録するためのシステム変数を作る

resetって名前にしてみた
※何でも良いです


③初期値を代入する変数設定コンポーネントを置く

resetは「起動した」という意味で「true」を
※ここも分かればなんでも良いです
その他はそれぞれゲームスタート時に必要なものを代入


④2回目以降はこの処理をすっ飛ばすためのジャンプを置く

これで初回だけシステム変数の「undefined」を任意の初期値に上書き!


これ以降はシステム変数で四則演算しても大丈夫です!

なお今回はこのコンポーネントのセットをtitle_screen.ksに置きましたが、実際は作っているゲームに合わせて本編の下準備シナリオに置くなどなど自由です。

ただビルダー内だけでやる時の注意としましては
初期値の上書きが済んでいない状態でプレビュー機能を使う際、このセットを置いたシナリオ(今回はtitle_screen.ks)を通らずに変数の四則演算をするとNaNになります(悲)

プレビュー時に読み込まれるのはfirst.ks(およびそこでコールされるシナリオファイル)なのですがビルダーでは編集できないのだーーーさらにビルダーのfirst.ksは編集しても自動的に最初の状態へ書き直される一切ブレない強キャラなので、もしエディタソフトを使うならplugin.ksへスクリプトコードを打てばよいのだと思います、はい……



システム変数その他もろもろ


・最初の状態に戻したい場合

システム変数ってプレビューを閉じても中身が保持されます。
なのでよ~し完成だデバッグするぞー!ってプレビュー開いたらタイトル画面が既にクリア済の状態で出てきちゃったりとか。

最初の状態に戻したい場合はここ!

「セーブデータを初期化する」をポチ!

その名の通りセーブデータも消えるんでデバッグにロードを使っている場合は注意~


・ブラウザのキャッシュ削除で消える

(ゲームを公開してからの話ですが)ダウンロード版であればゲームを閉じても中身が保持されたままなので安心なのですが、ブラウザ版の場合はプレイヤーの方でブラウザのキャッシュを削除すると消え去ります。
もちろんキャッシュ削除したらセーブデータも消えるので、同じようなものですが念のため……


・undefinedはエンティティれない

先ほどのシステム変数を使ってエンティティ(変数の中身を画面に表示できるやつ)をする時の注意点でございますな

初期値を上書きする前に画面表示しようとすると
システム変数のundefinedは出てこない
代入が済んだらテキスト配置で画面表示できる!

ゲーム変数と同じノリでエンティティろうとしたら出てこなくてびっくりしたので念のため……


※使用ソフト:ティラノビルダーv202




余談


パラメータをオートセーブにしたゲームは何かっていうとコレです

キングヒヨコ(とは)
このゲームは私と夫のパソコンの中にしか存在しません……笑