【「ツクールフォーラムアドベントカレンダー2020」特別投稿】『自作ゲーム第4弾「Maid vs Vampire」公開告知と制作秘話』

3. テクニック紹介

【ご案内】
 本記事は、「ツクールフォーラムアドベントカレンダー2020」24日目の記事です。

 今回、「Maid vs Vampire」を制作する上でも、私は多数のフリー素材を使用させていただきました。

 そのすべてを紹介することは出来ませんが、本作を特徴付けることとなったものを中心にいくつかのテクニックを紹介させていただきます。

視界切替の仕組み

視界切替

 「2. 制作秘話」でも述べておりました視界の切替は、敵の追跡を表現するためにマップを1枚の大きなものにし、なおかつ廊下から部屋の中をむやみに見せたくない本作にとっては必要不可欠なものでした。

 当初の実装予定については「2. 制作秘話」でも触れていますが、結局その方針は泣く泣く没にして、大まかに述べると次のようにして視界切替を実現させました。

  1. 当初使用するはずだった「Community Lighting」と同じ記事からダウンロード可能な軽量版プラグイン「Ultra Mini Community Lighting」を採用する。
  2. マップ上の至る所に照明のイベントを配置し、メモ欄には「Ultra Mini Community Lighting」の仕様に則ったタグと、視界切替対象判別のための独自タグを記述する。
    • イベントへのタグの記述例。「#Light 80 #ff8000」の箇所が照明の設定。実際には、スクリプトで先頭の「#」を除去することではじめて照明が有効になる。後ろの「<L1>」はプラグインとは無関係に、スクリプトを用いて視界切替の影響を受けることを識別するための記述。
      (イベントへのタグの記述例)
  3. RPGツクールMZの準公式プラグインである「CommonEventStepRegion.js」を用いて、リージョンに足を踏み入れるごとに次の処理を実行するようにする。
    1. マップ内に配置しているすべてのイベントから、先述の「視界切替対象判別の独自タグ」を記載したものを走査する。スクリプトを用いて、該当するすべてのイベントのメモ欄の中身を書き換え、照明が灯らないよう、「Ultra Mini Community Lighting」の書式に合致しない形式にする。
      • スクリプトの例
        (対象イベントのメモ欄を強制的に書き換え、照明を機能しないようにする)
    2. マップ内に配置しているすべてのイベントから、先述の「視界切替対象判別の独自タグ」を記載したものを走査する。記載した独自タグの中身が視界切替対象と一致したら、スクリプトを用いて、「Ultra Mini Community Lighting」の書式に合致するように再度イベントのメモ欄を書き換え、照明を灯す。
      必要な照明をすべて灯す準備をしたら、スクリプトを呼び出して照明の状態をリロードする。
      • スクリプトの例
        (イベントのメモ欄を強制的に書き換える例)

 この方法の欠点は、本来見せたくない、自分がいる空間の隣の空間が一部見えてしまうことです。「Ultra Mini Community Lighting」が軽量化のために最低限の機能しか実装していないことによるものですが、ゲームのパフォーマンスを優先させるためにはやむを得ません。

「扉を閉める」アクションの仕組み

 「Maid vs Vampire」では、プレイヤーが廊下から部屋に移動したり、逆に部屋から廊下や別の部屋に移動した場合でも、敵はプレイヤーを認識している限り、追跡を続けます。

 敵がプレイヤーを追跡するための仕組みについては、「ドラゴンケイヴ」で公開されているプラグイン「シンボルエンカウント総合」を用いて実現しております。しかし、こちらについての説明は割愛致します。

操作方法

 「Maid vs Vampire」では、追跡してくる敵を足止めしたり、小部屋に入ってきた敵を閉じ込めたりするために、「扉を閉める」アクションが追加されています。

 ゲームパッドでプレイしている場合は「RB」または「R1」ボタン、キーボードでプレイしている場合は「PageDown」キーを押下しながら扉を通過することで、通過した扉を閉めることが出来ます。

 この仕組みはプラグインではなく、「RPGツクールMZ」の標準機能である、ボタンが押されている状態を判別することでおこなっています。大まかな流れは次のようになります。

  1. プレイヤーが扉を通過したときに先述のボタンが押されている場合に、特定のスイッチをONにする(外部イベントによって初めからスイッチがONになっていることもある)。
  2. スイッチがONになっているときに限り、扉を閉めるアクションを実行する。
  3. 最後に、扉を通過するすべての処理が終わったときに、先ほどのスイッチをOFFにする。

扉通過時にボタンが押されているときだけスイッチオン 扉を通過するすべての処理が終わったらスイッチオフ

テロップの仕組み

テロップの例(必要な鍵を持っていない)

 「Maid vs Vampire」では、極力ゲームの流れを止めないために、登場人物との会話の発生しないイベントの多くで、通常のメッセージウインドウではなくテロップを表示することで、プレイヤーに情報を提供する仕組みを作っています。

 今回は、これを実現するために、「RPGツクールMZ」公式プラグイン「TextPicture.js」を用いています。使い方はこのような感じです。

  1. テロップを表示させたいイベントで、テロップ表示用のスイッチをONにする。
  2. TextPicture.js」のコマンド「テキストピクチャの設定」を呼び出して、表示させたいメッセージを記述する。
  3. メッセージを表示させるため、ピクチャを表示する。
  4. プレイヤーが接触することで発生するイベントで、短時間にイベントが連続で呼び出されることを抑止するために、ある程度(15フレームほど)足止めする。
  5. 最初のテロップ表示用のスイッチをトリガーとした並列処理コモンイベントにおいて、一定時間(本作では120フレーム=2秒間)経過したのちに、テロップ表示用のピクチャを消去し、スイッチもOFFにする。

(テロップを表示させるイベントの例) (テロップ表示後の消去を制御するコモンイベント)

 ほかにもいくつかの仕掛けを入れています。それらについては、ゲーム本編でお確かめください。