こがしぱんです。
新年あけましておめでとうございます。
2025年もプログラミングの勉強がんばります!!
前回は「変数と演算を理解する」をやってみました。
今回は「サブルーチンとマクロ」です!
サブルーチンとマクロってなんぞや!?
公式によると、
ティラノスクリプトでは、何度も繰り返し利用する処理などをライブラリ化して、繰り返し利用する機能があります。
それが、今回利用する「サブルーチン」と「マクロ」です。
この2つは「他のまとまった機能を呼び出す」というところは一緒なのですが、使い方や用途がちがいます。
つまり、繰り返し利用する機能ってことですね!
「サブルーチン」と「マクロ」はそれぞれどう違うのか。
■サブルーチンの主な用途
・シナリオが大きく分岐する場合など、シナリオファイルを分けて作成しておき、サブルーチンで処理を移動させることでシナリオを分岐させる。
■マクロの主な用途
・何度も繰り返し利用するスクリプトをマクロにすることで、タグを記述するだけで繰り返し利用することができるようにする。
うーん、文章だけじゃ理解度がイマイチなので、公式に沿って使用方法を確認していきます。
■サブルーチンの使い方
サブルーチンは[call]タグを使って呼び出します。また、サブルーチンから呼び出し元に戻る場合は[return]タグを使います。
以下、コード例(公式より引用)
このように、ラベルを起点にサブルーチンを呼び出すことができます。
別ファイルのサブルーチンを呼び出したい場合は、storage属性でファイル名を指定して下さい。
例えば、AシナリオからBシナリオに飛んでAシナリオに戻ってくるような感じ...?
実際に何かノベルゲーム作る時にスクリプト打ってみて体験してみないと、イマイチ理解できないかも。まだ、ふわっとした理解度な気がする...。
■マクロの使い方
マクロとは、ある処理をまとめたものを1つのタグで呼び出せるようにできる機能。
つまり、既存のタグや文章を組み合わせて自由に新しいタグを定義することができる、便利機能です。
何度も使用するタグはマクロ化しておけば、他のゲームを作る際にも再利用可能。
マクロは一度定義しておけば、そのマクロをどこからでも利用することができるようになります。
なので、必ずゲーム起動時に実行される必要があるため、first.ksの最初に記述しておくのが良いとのこと!
それでは、実際のコード例を確認。
シナリオを進める場合、クリック待ちの[l]と[r]を一緒に使う事が多いです。
ただ、2つタグを入力するのは面倒なので一個のタグで済むように、以下のようなマクロを定義。
以下、コード例(公式より引用)
このようにマクロを最初に定義しておけば、[lr]とタグを入力するだけで定義した処理を実行してくれます。便利!!
・マクロに数値を渡す
ティラノスクリプトでは、定義したマクロを呼び出す際に好きな値を渡すことができます。
以下コード例(公式より引用)
この例では定義した[newtag]というタグを呼び出す際にiroという属性と値を渡しています。
それを受け取った側は、%iroとすることで、値を渡しています。
このマクロの場合は、[newtag iro=任意の色コード]を入力することで、都度色を変更することができます。
さらに、マクロの中の属性に[*(アスタリスク)]を指定すると、マクロに渡された属性を全て渡すことができます。
例えば、transタグのあとにwtタグをつけたマクロを作りたい場合、
以下コード例(公式より引用)
としておくことで、transwaitマクロに渡した属性をすべて、transタグに渡すことができます。
さらに、値が省略されたときに、デフォルトの値を指定したい場合は、% 付きの属性に、 | ( 縦棒 ) を書き、そのあとに省略された場合の値を指定します。
以下コード例(公式より引用)
この場合、マクロ呼び出し時にcolorという属性が指定されていなかった場合、|の後の数値がデフォルト値として採用されます。
また、マクロに渡された属性は、変数として利用することもできます。
以下コード例(公式より引用)
以上のコードを実行すると、
マクロにわたされた値は「[emb exp="mp.your_name"]」です。
と表示されます。
マクロの中ではmp.your_nameというローカル変数が利用できます。
・ローカル変数とは
限られた場所でのみ有効(この変数はひとつのマクロの中だけで有効)な変数
※この変数はマクロの中だけで有効なのでご注意下さい
ということで、今回はここまで!
今回は「サブルーチンとマクロ」をやってみました。
マクロってすごい!めちゃくちゃ便利!!
最初にタグを定義しておけば、後はそのタグを記述すればいいので、コードもごちゃごちゃせずにすっきりして見やすくなりそう。
サブルーチンはふわっとした感じですが、マクロは何となく掴めた気がします!
次回もティラノスクリプトやっていきます!