トップページへ戻る


タイムアウト選択肢
 
「んねーねー」

「またそれから入るのか? 前回と同じだな」

「これ見てよねもー」

「どれどれ?」

(前略)

男の左腕に装備された金属製の弓矢。

あれは確か、アーバレストと呼ばれる強力な機械弓だ。

洋弓の中でも速射能力と命中精度がズバ抜けて高く、
近距離なら鋼鉄の板を撃ち抜くことも可能な
拳銃やライフルよりも恐ろしい武器。

唖然としているぼく達にも介せず、
男はこちらにむかって左手を伸ばした。

く、来る!

[delay speed=nowait]\
[locate y=365]\
[link target=*chapter3_scene01]A.[emb exp="f.name2"]を突き飛ばして自分も飛ぶ[endlink]
[link target=*chapter3_scene02]B.荷物を目の前に掲げる[endlink]
[link target=*chapter3_scene03]C.床に伏せる[endlink]\
[delay speed=user]\
[s]
;---------------------------------------------------

(後略)

「画像はもう前に読んであんだけど、これを実行すんと、こんな画面になんの」

「ほう」

「んでもねー、これぢゃ、だめなんだなー」

「何でだ?」

「ほんとーわ、この3この選択肢を選ぶのに制限時間をつけたいんだなー。んでもって、時間内に選べないと、ボウガンの矢が飛んできて、ぐさーーーーっ、とか刺さっちゃうってわけ」

「痛い……」

「あんたが痛がってどーすんのよもー!」

「……つまり、選択肢を選ぶのに制限時間をつけたいわけだな?」

「そーだもん!」

「だが、KAGには『制限時間つき選択肢』という概念はない」

「うそー!?」

「概念はないが、[wait] タグと [jump] タグを組み合わせることで非常に簡単にできる。つまり、こうやるんだ」

「どーやんのよもー!」

(前略)

男の左腕に装備された金属製の弓矢。

あれは確か、アーバレストと呼ばれる強力な機械弓だ。

洋弓の中でも速射能力と命中精度がズバ抜けて高く、
近距離なら鋼鉄の板を撃ち抜くことも可能な
拳銃やライフルよりも恐ろしい武器。

唖然としているぼく達にも介せず、
男はこちらにむかって左手を伸ばした。

く、来る!

[delay speed=nowait]\
[locate y=365]\
[link target=*chapter3_scene01]A.[emb exp="f.name2"]を突き飛ばして自分も飛ぶ[endlink]
[link target=*chapter3_scene02]B.荷物を目の前に掲げる[endlink]
[link target=*chapter3_scene03]C.床に伏せる[endlink]\
[delay speed=user]\
[wait time=制限時間]\
[jump target=*時間切れのページへ]\

[s]
;---------------------------------------------------

(後略)

「今までは、選択肢の終わりには [s] タグをつけて強制的に動きを止めていただろ?」

「うん」

「だが、今回のケースで違うのは、選択肢の次に [wait] タグが来て、ここでスクリプトの処理を時間制限をつけて止めている点だ。この [wait] で指定された時間(単位はミリ秒)内に選択肢を選べばよし。だが、制限時間が経過すると、スクリプトは下の行にある [jump] タグを勝手に実行してしまうわけだ」

「ほんとだー。これだけで制限時間つきの選択肢ができちゃったねー!」

「スリルと臨場感を演出するにはタイムアウト選択肢は是非活用してもらいたい機能だけど、KAGではこんな簡単に設定できちゃうんだ。すごいだろ?」

「んでもなー」

「何だよ、人が盛り上げているのに、一人で盛り下がって」

「何秒待つのかわかんないと、ゲームをやる人が困るんじゃないのかなー?」

「お、すっとこおばかのお前にしちゃ、いい意見だ」

「だってそーでしょもー。時間制限がないと思ってたら、いつの間にかページが変わっちゃってんと、困んもん! だから、爆弾の導火線みたいなやつが画面に出てきたらいーのになー」

「ふっふっふ。ひっひっひ。へらへら」

「なによーなによーなんで笑うのよもー!」

「実はね、おいらも同じことを考えて W.Dee 氏に手紙を書いておいたんだ。そうしたらこんな返事をいただいた」

「どんな返事かなー?」

少尉> ユーザーに選択肢を突きつけて
少尉> 「ほれ! あと5秒だ! 急いで選ばないと地面が陥没するぞ!」
少尉> というようなシーンでは、
少尉> 残時間を示す時計のような画像が表示できたら嬉しいのですが。
少尉> ま、まさか……TJS式を書かないとダメでしょうか……?(TT)

それはKAGの既存タグで対処できます。

ユニバーサルトランジションを用いる方法です。

ユニバーサルトランジションで対応できる範囲であれば
画像を変更すれば、円形やバーメーターのような
いろいろな形で残時間が表せます。

この方法を使った制限時間付き選択肢を添付しましたので
ご覧ください。

「で、お忙しいところ、わざわざ作って送っていただいた W.Dee 氏の見本を簡潔にしてみたのが、下のスクリプトになる」

[title name="タイトル"]\
[image storage="cami" layer=base page=fore]\
[wc time=20]\
*start|スタート
;---------------------------------------------------
[ct]\
[image storage="limit01" layer=1 page=fore visible=true]\
[delay speed=nowait]\
[link target=*sel1]選択肢1[endlink]
[link target=*sel2]選択肢2[endlink]
[delay speed=user]\
[backlay]\
[image layer=1 page=back storage="limit02"]\
[trans rule="circletrans.png" time=10000 vague=8]\
[wt]\
[jump target=*timeout]\

;---------------------------------------------------
; 選択肢ジャンプ先
;---------------------------------------------------
*sel1
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
 選択肢1が選択されました。[l]\
[jump target=*start]

*sel2
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
 選択肢2が選択されました。[l]\
[jump target=*start]

;---------------------------------------------------
; タイムアウト
;---------------------------------------------------
*timeout
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
 タイムアウトになりました。[l]\
[jump target=*start]
;---------------------------------------------------

「すきゃんてぃわかんない」

「まあ、とにかく実行してみようか」

「んきゃー! そーだもん! これがやりたかったんだもん!」

「これは、よくある円形のメーターになっているが、工夫すればどんな形にでもできるし、もちろん色だって変えられる」

「すごいぢゃんよもーもーもー!」

「この派手な赤い円形メーターは、おいらのリクエストを W.Dee 氏にわざわざ作っていただいた物なんだけど、これじゃあまりにも大げさで、もっと控えめにしたいって言うのなら、画面の端に小さなバーメーターをつけて、それが減っていく画面だって作れる。たとえば、こんなの」

(上の画面はW.Dee氏からいただいた見本より拝借しました)

「すごーいすごーいかんどーてきだなー! んでもどーやったらこんなことができんのー? すきゃんてぃスクリプト書けないよー!」

「それじゃ、W.Dee 氏からいただいた見本から大事な部分だけを抜き出して説明しよう。まずは前半から」

[title name="タイトル"]\
[image storage="cami" layer=base page=fore]\
[wc time=20]\
*start|スタート
;---------------------------------------------------
[ct]\
[image storage="limit01" layer=1 page=fore visible=true]\
[delay speed=nowait]\
[link target=*sel1]選択肢1[endlink]
[link target=*sel2]選択肢2[endlink]
[delay speed=user]\
[backlay]\
[image layer=1 page=back storage="limit02"]\
[trans rule="circletrans.png" time=10000 vague=8]\
[wt]\
[jump target=*timeout]\

「ここで注目してほしいのは、上のスクリプトの黄色で示した部分だ」

「あー、[image] のとこに layer=1 なんて書いてあんぢゃんよもー!」

「これはどういうことかというと、背景( base )レイヤーには2行目で "cami" という名前の背景画像がロードされているから、もし残時間メーターをつけるとしたら、背景レイヤーは使えない。だから前景レイヤーの1を使ってメーターを表示させているんだ」

「あんで、[image] に visible=true なんて書いてあんのかなー?」

「これは非常に大切なんだが、前景レイヤーは初期状態では全て非表示になっている。だから使う場面に応じて visible=true で可視状態にしてやる必要があるんだ。それ以外は base(背景)レイヤーと同じ使い方でいい」

「そこまでわ、わかったもん」

「それができたら、次には普通に選択肢を設定して、本来なら [s] または [wait][jump] を組み合わせているところに、[image] タグと [trans] タグを使う」

[ct]\
[image storage="limit01" layer=1 page=fore visible=true]\
[delay speed=nowait]\
[link target=*sel1]選択肢1[endlink]
[link target=*sel2]選択肢2[endlink]
[delay speed=user]\
[backlay]\
[image layer=1 page=back storage="limit02"]\
[trans rule="circletrans.png" time=10000 vague=8]\
[wt]\
[jump target=*timeout]\

「んーと、まづわ、上の2行目で、前景レイヤー1の表画面に limit01 ってゆーメーター用のはいるを表示すんだね?」

「そう」

「んでもって、選択肢を表示したあとに、今度わ limit02 ってゆーメーターの色が消えていく画像はいるを前景レイヤー1の裏画面に読み込んで、それを circletrans ってゆー『るるるーはいる』で10秒でトランジションさせてんだねー」

「その通り」

「んでも、それぞれのはいるは、どんな感じになってんのかなー?」

「こんな感じだ」

limit01.png (フルカラー)

(KAGで使う上記の画像は本来は枠がありませんが、
 ここでは黒地なので便宜上1ピクセルの白い枠をつけてあります)

limit02.png (グレースケール)

(これも同様、1ピクセルの白い枠をつけてあります)

circletrans.png (グレースケール)

「上の二枚が前景レイヤー1の表裏に読み込まれてトランジションするタイマー用の画像、下の一枚はトランジションのためのルールファイルだ。実際にダウンロードして試してみたい人はここからどうぞ。サイズは31KBです」

「んでも、変だなー」

「何がだ?」

「あんな真っ黒なメーターの絵を前景レイヤー1に読みこんだら、下の背景画像が見えなくなるはずなのに、何で見えたのかなー?」

「いい質問だ。これはPNGファイルだから可能なんだが、上の二枚のメーターの画像の黒い部分は無視されるようになっているんだ」

「どーしてー?」

「簡単に言えば、PNGファイルは指定した範囲だけを有効にして保存することができるんだ。だからあの二枚のメーター画像は、メーターとして使われる部分以外は選択されていないことになる」

「ぜんっぜんっわかんない!」

「多分そうだと思う。でも、これについてはまた別の場所で詳しく話をするから、ここではそれ以上突っ込まないでくれ」

「んぢゃー、もーいっこ質問だもん」

「何だ?」

「ひょっとして、『るるるーはいる』の白い部分も、それとおんなじで、有効に保存されてないのかなー?」

「いや。ルールファイルについてはそうじゃない。黒い部分から白い部分へトランジションが掛かるわけだから、メーター以外の場所は白くしておけばトランジションが終了するまでは何も起こらないだけの話だ」

「よくわかんないけど、まーいーやー」

「細かいことは後にして、とにかくこんな画像を準備すればタイムアウト選択肢のメーターが作れちゃうってことは、わかってもらえたかな?」

「うん! 意外に簡単ぢゃんよもー!」

「だろ? トランジションがマスターできていれば、それほど難しいことじゃない」

「んぢゃ、『だぶるでー』さんの見本の、後半わ?」

「後半はかつてはTJS式が必要だったが、W.Dee 氏の鋭意開発により、今では [stoptrans] というトランジションを強制停止させるタグで簡単に処理できるようになったんだ」

;---------------------------------------------------
; 選択肢ジャンプ先
;---------------------------------------------------
*sel1
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
 選択肢1が選択されました。[l]\
[jump target=*start]

*sel2
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
 選択肢2が選択されました。[l]\
[jump target=*start]

;---------------------------------------------------
; タイムアウト
;---------------------------------------------------
*timeout
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
 タイムアウトになりました。[l]\
[jump target=*start]
;---------------------------------------------------

「三つとも同じ処理をしているから、実質的に覚えるのはたった二行だけだ。まず、大切な方から言うと、[stoptran] タグ」

「これわ何をしてんのかなー?」

「前半の選択肢の部分で、時間内に選択肢が選ばれた時にトランジション中の画面を強制的に終了させるコマンドだよ。これがないと選択肢を選んでもメーターが動きっぱなしになっちゃうからね」

「なるほどねー。トランジションを途中で止めるタグなんだねー」

「そう。それからもう一つ、[layopt layer=1 で始まる行だ。この行がやっている仕事は、残時間メーターが二度と表示されないように [layopt] タグで前景レイヤー1を不可視にすることだ。使い終わった前景レイヤーは見えなくしておけば後々困ることもない」

「それぢゃーすきゃんてぃ、自分のスクリプトに書いてみんもん」

「やってごらん」


(前略)

男の左腕に装備された金属製の弓矢。

あれは確か、アーバレストと呼ばれる強力な機械弓だ。

洋弓の中でも速射能力と命中精度がズバ抜けて高く、
近距離なら鋼鉄の板を撃ち抜くことも可能な
拳銃やライフルよりも恐ろしい武器。

唖然としているぼく達にも介せず、
男はこちらにむかって左手を伸ばした。

く、来る!

[image storage="limit01" layer=1 page=fore visible=true]\
[delay speed=nowait]\
[locate y=365]\
[link target=*chapter3_scene01]A.[emb exp="f.name2"]を突き飛ばして自分も飛ぶ[endlink]
[link target=*chapter3_scene02]B.荷物を目の前に掲げる[endlink]
[link target=*chapter3_scene03]C.床に伏せる[endlink]\
[delay speed=user]\
[image layer=1 page=back storage="limit02"]\
[trans rule="circletrans.png" time=10000 vague=8]\
[wt]\
[jump target=chapter3_*刺さった!]\

;---------------------------------------------------
*chapter3_scene01
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
ぼくは[emb exp="f.name2"]を突き飛ばして思い切り横へ飛んだ。

(中略)

;---------------------------------------------------
*chapter3_scene02
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
ぼくはとっさに荷物を拾い上げると目の前に掲げた。

(中略)

;---------------------------------------------------
*chapter3_scene03
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
ぼくはとっさに床に伏せた。

(中略)

;---------------------------------------------------
*chapter3_*刺さった!
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
ぐっ!

唸りを上げて飛来したボウガンの矢がぼくの肩に突き刺さった。

(以下略)

「実行ー! いけー!」

「あ、おい……!」

「んきゃー!? あんで字が消えちゃうのよもー!?」

「お前、スクリプトを書き間違えてるぞ。[backlay] を書き忘れてる」

「あー、ほんとだ」

「 W.Dee 氏の見本にもあるけど、トランジションをする前には [backlay] タグで必ず表画面の文字や背景画像を裏画面にコピーしておかないとだめだ。そういえばお前、この間、スクロールトランジションの所で真っ黒な画像が出てきて失敗しただろ? あれと同じ理由だ」

「そーだねー、それぢゃ直すもん」


(前略)

男の左腕に装備された金属製の弓矢。

あれは確か、アーバレストと呼ばれる強力な機械弓だ。

洋弓の中でも速射能力と命中精度がズバ抜けて高く、
近距離なら鋼鉄の板を撃ち抜くことも可能な
拳銃やライフルよりも恐ろしい武器。

唖然としているぼく達にも介せず、
男はこちらにむかって左手を伸ばした。

く、来る!

[image storage="limit01" layer=1 page=fore visible=true]\
[delay speed=nowait]\
[locate y=365]\
[link target=*chapter3_scene01]A.[emb exp="f.name2"]を突き飛ばして自分も飛ぶ[endlink]
[link target=*chapter3_scene02]B.荷物を目の前に掲げる[endlink]
[link target=*chapter3_scene03]C.床に伏せる[endlink]\
[backlay]\
[delay speed=user]\
[image layer=1 page=back storage="limit02"]\
[trans rule="circletrans.png" time=10000 vague=8]\
[wt]\
[jump target=chapter3_*刺さった!]\<
;---------------------------------------------------
*chapter3_scene01
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
ぼくは[emb exp="f.name2"]を突き飛ばして思い切り横へ飛んだ。

(中略)

;---------------------------------------------------
*chapter3_scene02
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
ぼくはとっさに荷物を拾い上げると目の前に掲げた。

(中略)

;---------------------------------------------------
*chapter3_scene03
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
ぼくはとっさに床に伏せた。

(中略)

;---------------------------------------------------
*chapter3_*刺さった!
[stoptrans]\
[ct]\
[layopt layer=1 page=fore visible=false]\
ぐっ!

唸りを上げて飛来したボウガンの矢がぼくの肩に突き刺さった。

(以下略)

「できるかなー?」

「すごーいすごーい! かんどーてきだなー!」

「と言うわけだ。慣れてきたら limit01、limit02、そして circletrans のファイルを加工して、いろんなタイムアウト用メーターを作ってみるといいよ。もちろんそれぞれのファイル名も好きにつけていい」

「すきゃんてぃすぐにやりたいもん! でやー!」

「わかった。それじゃ次はタイムアウト用のメーターファイルを作ってみよう」

「やったー!」

練習日記 5日目 次へ


トップページへ戻る