ティラノビルダーで作るもぐら叩きゲーム覚え書き ~[wait_cancel]の重要性~
皆さんこんにちは!
バニラ最中です!
今回は、前に作ったADVゲーム「お分かり頂けただろうか」の
もぐら叩き(時間制限つき画像ボタン)についてのちょっとしたメモです。
バニラ最中はプログラミングはまったくわからないので、
もしかしたらもっと楽にもぐら叩きを作る方法はあるかもしれませんが、
ティラノビルダーでゲームにもぐら叩きシステムを導入したいと
思っている方の参考になれば幸いです。
『このお分かり頂けただろうか』は心霊投稿動画風のADVゲームで、
テキストを読み進めていくうちに途中で画面に霊が映り込むので、
それをクリックするとリプレイが始まり、
全部の霊をクリックすると後半パートに進めるというシステムになっています。
↑画面に映り込む霊をクリック(クリックしないと一定時間で消滅し、自動的に次に進む)
この前半パートの早押しクリック機能は、ティラノビルダー上でも
画像ボタンとウェイトのコンポーネントを組み合わせることで簡単にできます。
この目玉の幽霊の正体は、ティラノビルダー上では「画像ボタン」ということになります。
画像ボタンの幽霊をクリックするとクリック成功時の処理である「*success」ラベルに飛びます。
ですが、画像ボタンコンポーネントの直後に「ウェイト(2000ミリ秒)」のコンポーネントがあり、
その後に「改ページ」のコンポーネントがあります。
そして、その後成功処理を飛ばすために合流ラベル(*goryu)へと飛ぶジャンプのコンポーネントがあります。
つまり、この幽霊の目玉は「ウェイト2秒間の間にクリックすると、クリック成功時の処理にジャンプし、クリックしないでいると消滅してそのままゲームが進行する画像ボタン」というわけです。
これだけで簡単な早押しゲームなら作れますね。
ただし、ゲーム後半にあるボス戦パートのもぐら叩きゲームを作ろうとすると、
ちょっとだけ複雑になります。
まずボス戦パートについて簡単に説明すると、
ボスの幽霊が画面のさまざまな位置にランダムで出現するので、
それを消滅するまでにクリックするとダメージを与えられる(damage変数をプラス1)、
消滅するとミス(miss変数がプラス1)で、
与えたダメージが一定値に達すると勝利、ミスが一定値に達するとゲームオーバー
というルールのもぐら叩きミニゲームパートです。
バニラ最中が実際に作った
ティラノビルダー上でのコンポーネントの並びを見てみましょう。
↑まず上の方は初期化処理ですね。。
用意しておいたdamage(成功回数)とmiss(失敗回数)の変数に0を代入したり、キャラクターを退場させたりしてます。
その後の「*battlestart」ラベルは文字通りバトルの最初の処理で、
ここでrandomという変数にランダムに1~4までの乱数を代入して、
「ジャンプ」コンポーネントでrandomの値によって
幽霊を画面上の別々の4か所に出現させる処理(ラベル*if1~*if4)へと飛ばしてます。
(今から思うと4か所はもぐら叩きゲームとしてちょっと少ないですが……)
ちなみにその処理の前に
・変数damageが一定値を超えたら「*success」ラベルに飛ぶ「ジャンプ」コンポーネント
・変数missが一定値を超えたら「gameover.ks」に飛ぶ「ジャンプ」コンポーネント
をそれぞれ置いてます。
これは攻撃の成功処理、失敗処理の後に
毎回この「*battlestart」に戻って勝利判定orゲームオーバー判定をするためです。
*if1~*if4はボスの幽霊が現れる画面上の位置が違うだけで、
全部同じ処理です。その中のラベル「*if1」が↑です。
「コール」コンポーネントはゲーム中で多用してるノイズ演出を予め「noize.ks」というシナリオファイルとして作っておいてそれをサブルーチンで呼び出してるだけなので気にしないでください。
また、なぜか「画像ボタン」じゃなくて「キャラクター登場」と「クリッカブルマップ」のコンポーネントを使って、幽霊ボスのキャラクター画像を登場させたのと同じ座標にクリッカブルマップを置く、というめんどくさいことをしてます。
これは用意したフリー画像の余白(透明)部分が大きくて、画像ボタンとして使うとかなり当たり判定が広くなっているからですが、
よく考えたら普通に余白部分の小さい画像を別途作成すればよかっただけですね。
で、この処理自体は早押しボタンを作る時の処理と完全に同じです。
クリッカブルな画像が表示され、「ウェイト」コンポーネントの時間制限内にクリックすれば攻撃成功処理へとジャンプ、押せなければウェイト後の失敗処理に進むわけです。
↓攻撃が当たった時の処理(*hitラベル)
※「キャラクター登場」と「ウェイト」が繰り返されてますが、
これはクリックに成功したときに
ボス幽霊がババババッってなるダメージ演出です(アバウト)
↓攻撃が外れた時の処理(*missラベル)
こんな感じでクリックが成功した時、失敗した時のそれぞれの処理(演出とか変数の増減とか)を終えて、
どちらの場合にも最後に「ジャンプ」コンポーネントを置き「*battlestart」ラベルに戻るようにすれば、
「クリック成功または失敗の数が一定値に達するまで繰り返される幽霊もぐら叩きゲーム」の土台は完成です。
ですが、この時注意しなければいけないことがあります。
それは成功処理ラベル「*hit」、失敗処理ラベル「*miss」に飛んだ時、それぞれのラベルの直後に置かれている「ティラノスクリプト」コンポーネントです。
↑この「ティラノスクリプト」の中身は「[wait_cancel]」というティラノスクリプトタグです。
ティラノビルダーのコンポーネントとしては標準搭載されてないので、
「ティラノスクリプト」コンポーネントを置いて直接タグを入力する必要があります。
これはウェイトで待ち状態のスタックをキャンセルするためのタグです。
前半の単なる早押しのような一回だけ画像ボタンとウェイトによる早押しボタンを作る分には不要なのですが、
もぐら叩きゲームのように短い時間でウェイトやジャンプが繰り返される場合は、
ジャンプした先のラベルでスタックをキャンセルしておかないと意図せぬ挙動が発生します。
バニラ最中も公式タグリファレンスでこのタグの存在を調べるまでは、
もぐら叩きゲームが途中で必ず停止してしまうので四苦八苦していました。
もぐら叩きゲームを作る場合は、必ずジャンプした先で「[wait_cancel]」でスタックをキャンセルしましょう。
以上、ティラノビルダーによるもぐら叩きゲームの制作メモでした。
ゲーム製作の助けになれば幸いです。
それでは!