ティラノスクリプトを学び始めてからと言うもの、マクロの重要性を噛み締める毎日でございます。どうも、一と書いていちもんじです。Twitterのフォローよろしくね~! (@1monjigame)
さて、四の五の言わずにマクロとサブルーチンの重要性と言うか色々語って行きたいと思います。初心者だからこそ思うこと、躓いたこと、自分には分かります。疑問に思うことはきっと同じはずだ!
ちなみにですが、私はマクロ信者(?)なので、皆様にはマクロをバンバン使っていただきたく、今回の話もマクロを主軸に説明していきます。
マクロとは?
じゃあ、まずマクロって何さ?ってところから始めようと思います。
シナリオを作っていれば、頻繁に必要とされる処理ってありますよね。
例えば、セリフ枠の表示とか。例えば、主人公やヒロインの表情の変化だとか。
そういう処理を、便利なノートにまとめて書いておいて、それに名前をつけておいて、そんで何度も何度も使うたびに名前を呼ぶだけで簡単に処理させることが出来ちゃう!みたいなものですね。
私は、マクロを一度覚えてからというもの、ただひたすらにマクロを作っています。(怖い)
だって便利なんだもの。
2022.06.26追記
キャラクターの登録とか表情の差分の登録も、このマクロにまとめておくと、セーブデータの途中で差分を試したくなった時や追加したくなった時にいつでも反映できるので、マクロにしたためておくように私はしております。おすすめです。
サブルーチンとは
サブルーチンも、基本的にマクロと変わりません。こちらも、頻繁に使う処理をプログラムの下~~~~の方に書いておいて、もしくは別の便利なノートに書いておいて、さ~ぶ~る~~ちん~~~~!と言った風に名前を呼ぶだけで処理が出来ちゃうといった便利なものです。
図にするとこんな感じ
ちなみに、セリフ枠を表示させるマクロの名前があんころもち、そして枠を消すマクロの名前が塩キャラメルです。別に自分が分かれば何でも良いんだから。でも名前には出来るだけローマ字を使った方が良いかも知れません。後々色々問題が出て来るかも知れないので…。例えば、アンドロイドアプリ化するときなど、色々バグが出たりとか…するとかしないとか…。
マクロとサブルーチンの違い
じゃあ、マクロとサブルーチン何で二つあるん?ってなると思います。いや一つで良くね?って。ダメなんですよ一つじゃ。マクロとサブルーチンには決定的な違いがあるんです。
マクロは値を渡すことが出来る!
サブルーチンは、言われた仕事を淡々とこなす、例えるならば職人、昔気質のシゲさんみたいなものです。で、マクロはというと、言われた仕事にプラスアルファの色を付けて返してくれる、ちょっと小洒落た喫茶店のマスターみたいなものです。(えっ?分かりづらい?)
実際に書いたプログラム
scene1.ks(マクロを呼び出したいシナリオ)
; ↓ マクロを書き殴ったシナリオを使用することを最初に宣言しておこう。
[call storage=”macro.ks”]
first.ksで使用するマクロ読み込んでおこう!みたいな記事はよく見ますが、それだとセーブデータの続きからテストプレイするときに上手く行かないので、すべてのシナリオの最初にこの一文を書いておくことをお勧めします。macro.ksの部分は、自分がマクロを書き殴ったシナリオ名を書いてくださいね。
;俺をぴょんと跳ねさせたい マクロ名=pyon
[pyon dare=ore]
ore=キャラクターを宣言した際指定した名前
[chara_new name=”ore” storage=”chara/orenogazou.png” jname=”俺” ]
dareっていうのは変数名。分かりやすけりゃなんだっていいです。
この場合、一体誰がぴょんするんだ!!?って意味でdareにしてます。
macro.ks(マクロを書き殴ったシナリオ)
; ↓ マクロ名はpyon(ぴょん)だよ。という宣言。ジャンプする動作を書いたマクロだよ。
[macro name=”pyon”]
;一体誰を動かすかは、呼び出し元(この場合scene1.ks)の dareという変数へ入れて渡すよ。
;↓ここからは実際にキャラクターを動かす処理だよ。まずは200秒かけて上に50px動かすよ。
[anim name=%dare top=”-=50″ time=200 ]
;↓ここではキャラクターを元の位置に戻しているよ。
[anim name=%dare top=”+=50″ time=200 ]
;↓ここでマクロは終了だよ。という宣言
[endmacro]
; ↓ 呼び出し元に処理の流れをお返ししますよ~という宣言。これはたくさんマクロを書き殴っていても1つ書いておくだけでOK。
;例えばマクロAの下にマクロB、その下にマクロCを書き殴る。最後シナリオの一番下にこれを書いておくだけでOKということ。
[return]
%は、必ず必要なものなので書いておきましょう。
意味は…わかりません(笑)詳しい人誰か教えてください。
ジャンプの動作の参考にさせていただきました!ありがとうございます!
図にするとこんな感じ
マクロの書き方
上で散々書きましたけど、ここでも説明しておきますね。マクロ専用のシナリオページを作らなくても良いんでしょうけど、今後マクロが増えていく可能性が高いと思うので、私は専用のページを設けて損はないと思います。ちなみに、同じシナリオ内でマクロを定義するときは、プログラムの上の方で宣言してくださいね。じゃないと、いざマクロを呼び込もうとしたときに、えっどこ?どこにあんのそのマクロ?となってしまいます。
まず[macro name=”〇〇”]で、ここからマクロ〇〇を定義しますよ~と宣言します。
間にしたい処理を書き、
[endmacro]で締めます。
そんで最後に[return]で返しましょう。
変数で値を渡す場合も同様に [macro name=”〇〇”] で定義を宣言します。
処理を書く際に、どんなデータを渡されるのか書きます。これはあなたがどういったデータをやりとりしたいかによるので、明確にどう書くと説明は出来ません。
例を示すなら[font color=%iro]などでしょうか。で、 [endmacro] で締め、 [return]で返しましょう。
マクロの使い方
[マクロ名]です。簡単ですね。値を渡したい場合は[マクロ名 変数名=渡したい値]です。上の例で行くと、[マクロ名 iro(上の%iroへ繋がる)=0x00ff00(渡したい値によって変化)]などでしょうか。
サブルーチンの書き方
同じシナリオ内で定義する際、マクロは上の方に書いてくださいね~と書きましたが、サブルーチンは逆に下に書いてください。
*サブルーチン名で、ここからサブルーチンを定義しますよ~と宣言します。
続いて処理を書き、
そんで最後に[return]で返しましょう。
*を使うあたりラベルっぽいですが、違うんですね~。
サブルーチンの使い方
サブルーチンは[call target=*サブルーチン名]で処理を呼び起こします。
無限に広がるマクロの可能性…の筈
ここまでマクロについて語ってきましたが、いまいちこのマクロの良さってものが伝わった気がしないんですよね…。本当に便利に便利の極みですから…私が使い切れていないだけで…。