【ティラノスクリプト】マクロでループを使って同じ文字をスピード遅くして複数表示する

ノベルゲーム作っている方なら、使っている文字に差異はあれ、
“……”をよく使っていると思います。
私は、この“……”を、あえてゆっくり表示するなどして、
登場人物が考えている時間などを表現しようと思いました。
ばか正直に[delay speed="xxx"]とタグを打ち続けていましたが、
これってマクロで簡単にできるんじゃね? と考え、マクロにしました。

詳細は続きへ。

※このマクロは、変数などをそれなりに理解している方向けです。


ティラノスクリプトは、forやwhileないんですか、そうですか……。

for・whileを知らない方のために解説しておくと、ループの命令です。
for文で説明すると、
for ( int i = 0 ; i < 10 ; i ++ )
{
(処理)
}
こんな風に書きます。(C言語の場合)
ううう、久々にC打とうと思ったら色々間違えた…。

意味は、intという変数の型iを作ります。初期化(0代入)もしておきます。
そして、iが10より小さい間、{}内の処理をします。
なお、}まで来たら、iは自動的に1加算されます。

ループといいますか、繰り返し処理です。(無限ループも可能)
この処理を〇回繰り返す、という時に使います。


ノベルゲームでは、確かにあまり使いどころもないかもしれません。
私もそう思っていたんですが、
同じ文字を繰り返し何度も表示するような演出がしたい場合、意外と使えるんですよね。

今回の場合、“……”の表示をもっと楽にしたいということで、作りました。


first.ks


; ……表示
[macro name="leader"]

; jumpでループさせるため、ループ最初の位置にラベルをつけておきます。
*leaders_show

; mpは、マクロ内のみ有効な変数の型です。ここでは、leaders(リーダ複数)という名前にしてあります。
; mp.leadersが0より大きい場合、trueになります。
; mp.leadesが0以下であればfalseです。

[if exp="mp.leaders > 0"]

; ここに、複数表示させたい文字を入れます。ここでは、“……”。
……

; mp.leadersを-1します。(--は、-1同様。同じように、++も、+1と同様です。)
[eval exp="mp.leaders --"]

; 最初(*leaders_show)に戻って、mp.leadersの値を見て、同じ処理をするか否か判定します。
[jump storage="first.ks" target="*leaders_show"]

[endif]

[endmacro]


このマクロがあれば、
[leader leaders="10"]
とシナリオに書けば、…が20個出てきてくれます。(……が10個)
手打ちより楽ですし、表示させたい数を間違えません。


しかし、たったそれだけのためにこのマクロを作ったわけではありません。
(それだけでもいいけど。)

私は、…を表示する時、delayをかけることが多いんです。
キャラクターが考えている感、黙っている感が出したくて。

そこで、いちいち[delay speed="100"]……[resetdelay]などと出していると、面倒くさいわけです。
…以外のところでもdelayをかけることはありますが、圧倒的に…の部分が多いです。
あと、waitのtime指定とdelayのspeed指定を間違えて、何度も手直ししたこともありました…。
このようなケースも、マクロにした方が楽でしょう。
プレイしたら一時間分のシナリオができたくらいで、ようやく気づきました。

上のマクロを、少しいじります。


; ……表示方法
[macro name="leader"]

; delayをかける
; speedは、シナリオ上から指定できるようにします。

[delay speed="%speed"]

*leaders_show
[if exp="mp.leaders > 0"]
……
[eval exp="mp.leaders --"]
[jump storage="first.ks" target="*leaders_show"]
[endif]

; delayリセット
; ループ処理とは関係ないので、ifの外で行うこと。

[resetdelay]

[endmacro]


こうすれば、さっきの例は、

[leader speed="100" leaders="10"]

このように表記して、スピードと数を指定できます。


ただし、この方法だと、自動改行を行いません。
なので、大きい数字を入れると、画面の向こう側までいっちゃいます。

そういう時は、以下のようにマクロを変更してください。


; ……表示方法
[macro name="leader"]
[delay speed="%speed"]

; 改行のためのカウント用変数作成
[eval exp="mp.cnt = 0"]

*leaders_show

; 改行判定
; テキストウインドウの一行の文字量を把握し、それに到達したら改行する。
; この場合は、19(38文字)。
; また、&&後の条件は、最後の行の場合、改行させないようにするため。
; &&後の条件を入れていないと、クリック待ちのアイコンが下の行に出てしまう。

[if exp="mp.cnt >= 19 && mp.leaders > 0"]

; 改行
[r]

; 一度改行したらカウントはリセット
[eval exp="mp.cnt = 0"]

[endif]

[if exp="mp.leaders > 0"]

……

; 改行判定用数のカウントアップ
[eval exp="mp.cnt ++"]

; 表示数のカウントダウン
[eval exp="mp.leaders --"]

[jump storage="first.ks" target="*leaders_show"]

[endif]

[resetdelay]
[endmacro]


これで大丈夫のはず……。
※一ページに表示できる最大数は把握して、それ以上の値の指定をしないこと。


長い時間…でメッセージが埋め尽くされる時なんか役に立ちます!
少なくとも、私はこれが思いつけてよかったです。

コメントの投稿

Secret

プロフィール

塗木ちおり

Author:塗木ちおり
★新着情報★
・現在の多忙度・
暇 ◆◇◇◇◇ 忙
このページをチップで応援
1000+(HP版)

塗木ちおり活動場所リンク
カテゴリ
検索フォーム
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
ココナラ
招待コード「3vftk」
【なりきりオラクルカード占い】キャラクターと話してみませんか?【アドバイス】 【なりきりタロット占い】キャラクターと話してみませんか?【Yes・No】 似顔絵をお届けします キャラクター風? それともリアル風? 似顔絵がほしい方へ!
リンク
お世話になっている方やサイト様
彼岸花と無口少女。
Amazon.co.jpアソシエイト