フワフワソが「ソラとピヨちゃん」や「宮本県」を作るブログ(フワフワソ・ラウンジnew!)

ラノベとテクノを愛するふわふわがノベルゲームを作っています。あと日常のことやイベントの告知なども。スクリプト関連の記事は自分用の備忘録です

ティラノスクリプトを触る(ラベルに変数を使う、for文で繰り返し処理、配列など)

miyamotoken.tumblr.com

宮本県の移植でティラノスクリプトの仕様を調べていました。

nscripterに比べて簡単にできるところもあれば面倒になったところもありました。

●簡単になったところ

 とにかくすべてが高機能。普通のノベルゲームを作るなら簡単だし演出も多彩

 画面サイズもいろんなモニタに自在に合わせてくれる印象

 html5javascriptをベースにして、吉里吉里のkagを実装してるらしい

 スタックが破棄できる(nscripterはできなかった)のでサブルーチンからreturnせずに別なところへ行ける

●面倒になったところ

 基本的にはkagライクなティラノスクリプトで組むのですが、ちょっと改造しようとするとティラノスクリプト以外の知識も必要になります

・サンプルのメニュー画面をカスタマイズするにはhtmlの知識がいる

(フルスクリーンとウインドウの切り替えがなくて、メニューに付けようとしたら意外とめんどくさかった)

・ボタンにホバーで複数の画像をつけるなどするには、javascriptの知識がいる

(素のティラノスクリプトだと、ホバーの座標変えたり複数画像出したりできない)

・for文がない

 こんな面倒さを感じましたが、いずれもやり方を公開してくださってる方がいましたので、なんとかなりそうです。とても助かります、ありがとうございます。

【プラグイン】for文追加 - てんぷらたべたい

【ティラノスクリプト】マウスカーソルが載ったときに何かする - memo

 https://rimane-novels.net/tyrano-menu-screen_full-981/

 

 

ーー以下個人的備忘録のようなものです。

●仕様を調べてみた例など

・ラベルには変数が使える

 &(エンティティ)を使う

[eval exp="f.label = '*jumpsaki'"]
[call target=&f.label]

成功の表示の後に表示される文。[p]

*jumpsaki
成功[p]
[return]

 

・ラベルは変数や文字列を合体させて作ることができる

 f.label という変数にjumpsakiという文字列を代入

 それを*という文字列と合体させて、さらに_1という文字列も合体させて、f.label2に代入

 f.label2に&(エンティティ)を付けると、それが*jumpsaki_1 として使えます

[eval exp="f.label = 'jumpsaki' "]
[eval exp="f.label2 = '*'+ f.label+'_1' "]
[call target=&f.label2]

成功の表示の後に表示される文。[p]
*jumpsaki_1
成功[p]
[return]

 こうやってラベル名を操作できると、同じ処理をさせるサブルーチンが作りやすくなります。処理は同じだけどジャンプ先だけ違う、みたいなことが可能になります。

nscripterではたぶんできなかった)

 

 ・for文プラグインはとても便利

【プラグイン】for文追加 - てんぷらたべたい

たとえば、前景レイヤー1~9まで表示する処理は次のようになります

[for name=f.i from=1 to=9]
[layopt layer=&f.i visible="true"]
[nextfor]

これくらいなら以下のように繰り返しコピペしていって9個並べてもいいのですが、

[layopt layer=1 visible="true"]

[layopt layer=2 visible="true"]

[layopt layer=3 visible="true"]

[layopt layer=4 visible="true"]

 こういうことを沢山やっていると、コピペして数字を直してる途中で間違えたりしてしまいます。特に長いゲームを作ってると疲れたり、忘れたり、どうしてもミスが発生するので、なるべくコピペはしない方向でやっていきたいと考えています。

★ちなみに上記の例で、ホントは前景レイヤー0番からfor文でやりたかったのですが、
レイヤー0はなぜか変数だとエラーになります。仕方がないのでこれだけは直接書きます。


[layopt layer=0 visible="true"]

 

 ・for文と配列を組み合わせるとさらに便利

配列には宣言が必要なので、まず最初にfirst.ksなどでこれをやる

[eval exp="f.chara=[]"]

たとえばキャラが5人いてそれぞれに好感度などがある場合

普通にやると、キャラ1~5の好感度を変数 f.chara1~f.chara5などと定義するわけですが、ここに配列を使って

キャラ1~5の好感度を変数 f.chara[1]~f.chara[5]と定義

すると、for文で一気に5人分の好感度を0にしたりできる

[for name=f.i from=1 to=5]
[eval exp="f.chara[f.i] = 0"]
[nextfor]

同様に、好感度が10以上になったらジャンプ、みたいな判定をするときも、判定のためのサブルーチンを5人分まとめてやることができます

[for name=f.i from=1 to=5]
[if exp="f.chara[f.i] >= 10"][jump target=*jumpsaki][endif]
[nextfor]

 

・&(エンティティ)がいるときといらないとき

変数の中身を他のタグで参照するときには&を付けるわけですが、いるときといらないときがあります。

・配列の要素(添え字)には&いらない

f.chara[f.i] 正解 

f.chara[&f.i] まちがい

・変数の中身を評価したりするタグには&いらない(もとから変数を使うようにできているタグ)

[eval exp="tf.flag1 = f.flag2"] 正解 

[eval exp="tf.flag1 = &f.flag2"] まちがい

・何らかの命令のタグで、通常、変数を使わないところに変数を使うときには&がいる

[call target=&f.label2] 正解 

[call target=f.label2] まちがい

 

ティラノとは全然関係ないのですが、制作にはこのマウスを使っています。

fpsゲーマーではないのでゲーミングマウスとかいらないだろと思ってたのですが、

ボタンが9個あって自由にショートカットを割り当てる機能があり、すごく便利です