【ティラノスクリプト】システム変数についてのメモ

 【ティラノスクリプト】システム変数についてのメモ

システム変数というものに馴染みがなくスタートしたので、どんなものでどう使うのが良いのかなど理解するのに苦労したのでメモ

ティラノスクリプトで使える変数

ティラノスクリプトには3種類の変数が用意してあります。

・f.から始まる、セーブデータに保存され、一番よく使うと思われる変数
・tf.から始まる、セーブデータには保存されない、一時的な変数
・sf.から始まる、個別のセーブデータとは別で保存される、システム変数

この中で個人的にいまいち仕様がわからなかったのがシステム変数でした

システム変数の仕様

・自動でセーブされる(通過=セーブ)
・個別のセーブデータとは別の領域にセーブされているので、個別のデータを消してもシステム変数がリセットされない
(例:プロジェクトIDを変更してもシステム変数の状況は変わらない)

システム変数の使い処

実際にゲームを作ってみて、なんとなくこういうものかな? と現状で理解したのが以下になります

・セーブデータとは関係のない進行度の更新
・セーブデータを選ぶ前に変化がつけられる
例:タイトル画面から確認できる、CGギャラリー、リプレイ機能

CGギャラリーとリプレイ機能は、タイトルに初期設定でついています。
これらは個別のセーブデータに関係なく、常に最新の状況に更新されていきます。
この2つが代表的なシステム変数の使い道で、当初はこれ以外ではどう使うんだろう? が思いつかなくて苦手意識があったんですが、言い換えるとセーブデータを選ぶ前、タイトル画面以外で使うことはほぼない? って分かってきました。

個人的にややこしかったこと

システム変数で一番最初につまづいたのが、よくある「エンディングを見たセーブデータに印をつける」でした。
これ、ちょっと愚痴になってしまいますけど、公式の例も悪いんですよねw
システム変数の使用例に「エンディングを見たことがあるか否か」って書いてあるんです。

エンディングを見たことをシステム変数に保存して、それを参照してマークを出せばいいんだな、でやってみると、まだエンディングを見てないセーブデータにもマークが出ました。
この時、「なにこれ! 使いにく!!」となって苦手意識が芽生えました。

私がやりたかったことは、「エンディングを見たデータにだけ、印をつけたかった」のでそれって「個別の情報」なんですよね。
公式の文言のイメージだけにつられてしまいましたw

やりたいことは、普通のf.変数で、エンディングを見た後に保存させないといけない。

システム変数の特徴が、「通過しただけでセーブされる」があるので、一見「オートセーブ」寄りの便利さが目立ち、それにも惑わされました。

なのでシステム変数は、「セーブデータとは関係ない進行度の更新」だと考えるようになって理解ができた気がします。

使用例

・スチル・ギャラリー(ティラノスクリプトで用意されている)
・リプレイ・ギャラリー(ティラノスクリプトで用意されている)
・コレクション・ギャラリー
など

上記であっても、例えば「セーブデータごとに管理したい」とするならシステム変数ではなく通常の変数を使う必要があります。
その場合、タイトル画面からセーブデータのロードを挟まずに直接飛ぶことはできず、ゲーム内だけのギャラリーになりますが、それはそれでありだと思います。

システム変数を使うかどうかは、「セーブデータを選ぶ前に見せたいものがある」かどうかだと考えるとわかりやすくなりました。

システム変数の初期化

システム変数に限らないですが、セーブデータを選ぶ前、タイトル画面が呼ばれる前に初期化等準備をする必要があります。

・一番最初に呼ばれるfirst.ksで初期化しておく
・何度も通ることがないようundefinedで分岐させる(変数の初期値がundefined)

[if exp ="sf.hensu == undefined"]
;初期化
sf.hensu = 0;
[endif]

さらに自分的にややこしかったのが、システム変数に配列を入れて使おうとした時

[if exp ="sf.hensu[0] == undefined"]
;初期化
sf.hensu[0] = 0;
[endif]

これでいけるって思ってしまうんですけど、ダメなんですね。

[if exp ="sf.hensu == undefined"]
;初期化
    sf.hensu= [0] ;
[endif]

慣れてる人なら当たり前なんでしょうけど、この辺がシステム変数に慣れないと気づかずあれ?なんで通らないの?って躓きました

デバッグ

セーブデータを初期化しても、システム変数には影響がないので、はじめからなのにギャラリーはコンプしてる、もあり得ます。
なのでデバッグ用に、「システム変数の初期化」は自分で用意しないといけません。

変数そのものを削除するには以下のタグ

◆個別

[eval exp="delete.sf.hensu"]

◆全削除
[clearsysvar]

おわりに

分かる人には何を今更というか、何を言ってるのってくらい何も言ってないように見えると思いますが、分からない人にはほんとに分かりにくいんですw
どうやらシステム変数って「ノベルゲーム界」では当たり前のもののようですね。
私はティラノスクリプトでゲームを作ってみようと思って初めて知りました。
ノベルゲームに馴染みがないと分かりにくいんじゃないかな~と思うんですけど、私だけかもしれませんw

「あ、こういうこと?」ってなったきっかけは、「セーブ領域が違う」って理解できた時だと思います。
プロジェクトIDを変更して、セーブデータがまるっと消えた時にでもタイトルから見られるギャラリーはそのまま残ってたんですね。
その時、一瞬で「は? 意味わかんない!」「あ! そういうことか!」が同時に来ましたw

今後も何か気づいたことなどあったら追加していきます


Previous Post
No Comment
Add Comment
comment url