シンボルエンカウント総合 -...

Post on 26-Sep-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ドラゴンケイヴ RPGツクールMZ用 JSプラグインシンボルエンカウント総合 1 はじめに

シンボルエンカウント総合蒼竜 (@soryu rpmakermv)∗

1 はじめに現代のコンシューマ機向けRPGでは,シンボルエン

カウント方式を採用するものが主流となっている.シンボルエンカウント方式のゲームでは,敵との戦闘の頻度をプレイヤーが調整することができる.いつどのタイミングで戦闘に突入するか分からないという点からランダムエンカウント方式を支持するユーザーも一定層存在するが,ドラゴンクエストシリーズのような数十年に渡る歴史を持つゲームでさえも徐々にランダムエンカウント方式からシンボルエンカウント方式へと推移してきている.一方,RPGツクールシリーズでは依然として移動歩

数に基づいたランダムエンカウント方式一辺倒である.シンボルエンカウント方式の実装を意図したプラグインも一定数あるが,たいていはプラグイン 1つの導入では完結せず,他プラグインで提供される機能との混合が必要である.結果として,コンシューマ機向けRPGのシステムと比較すると機能的に不十分であったり不自然な挙動を示したりしてしまい,シンボルエンカウント方式を導入する決定的なプラグインは存在しない. 

図 1: RPGツクール上でのシンボルエンカウント方式の実装

本プラグインは,単体でコンシューマ機向けRPGと比較しても遜色のないシンボルエンカウント方式に期待

∗http://dragonflare.dip.jp/dcave/

される一連の機能を提供するために開発した.図 1は,本プラグインを導入したシンボルエンカウント方式のゲーム画面となっており,敵シンボルがプレイヤーキャラクターを発見して追跡を開始しようとする場面である.他のプラグインや,既存の実現方法との差別化を明示

するために本プラグインが果たす主要な機能を以下に列挙する.

� 視認距離,角度の設定によるプレイヤーの検索� 敵シンボル接触による戦闘後の,プレイヤー無敵時間設定

� 壁などの通行不可オブジェクトや,他イベントによる隠匿効果 (障害物に隠れて敵シンボルから見えないようにする)

� エディタの機能を用いた,草むらによる隠匿効果(敵シンボルから見つかりづらくする)

� プレイヤー追跡アルゴリズムの精度調整� 敵シンボルの進入不可エリアの設定� 追跡を行わないシンボルの設定� スイッチ切り替えによるシンボルの挙動切り替え� プレイヤーと敵シンボルの接触方向による,先制・不意打ち状態の発生

� 不意打ち状態での接触時の戦闘 BGMの変更機能� 隊列歩行時の仲間フォロワーとの接触判定他のプラグインは非常に多機能となっているが,プラ

グインの導入難易度を上げてしまっては意味がない.本質的には希望するイベントのメモにタグを挿入し,実行内容の「注釈コマンド」にいくつかの設定を記入するのみで,簡潔にプレイヤーを検知・追跡する敵シンボルを実現できるようにした.また,必要に応じて上記の項目のそれぞれに対応する

多岐にわたる設定を使いこなせば,敵シンボルの挙動をより細かくカスタマイズできる.さらに,既配布物である「イベントループ経路巡回」プラグインとの組み合わせによって,より高度な探索を行う敵シンボルを実装することも可能である.

1

ドラゴンケイヴ RPGツクールMZ用 JSプラグインシンボルエンカウント総合 3 使用法

2 シンボルの基本動作本プラグインでシンボル化されたイベントの挙動は簡

単には以下の 3ステップとなる.

1. 視認範囲内のプレイヤーの検知

2. プレイヤーの追跡

3. 追跡の終了・復帰

各ステップごとのシンボルの挙動のほとんどは,後に示す設定方法により調整することができる.本プラグインではプレイヤーの検出方法に Bresenhamアルゴリズムを導入している.この最たる効果は次に示す図 2のように,プレイヤーが壁や障害物を用いて身を隠すような位置にいると,敵シンボルがプレイヤーを検知できないようになることである. 

図 2: 障害物を用いたプレイヤーの隠匿

これによって,現実であれば明らかに見えることのない場所から敵シンボルがプレイヤーを検知してしまうRPGツクール製のゲームでありがちな理不尽感が取り除かれる.障害物や入り組んだ道を用いて,プレイヤーがシンボルの追跡を逃れることも可能であり,自作品に一段階上のゲーム性を実現することが期待される.また,プレイヤーを検知したシンボルは,追跡終了条

件を満たすか,プレイヤーと接触するまで追跡を続ける.後に示すように,「戦闘の処理」はRPGツクールのコマンドを明示的に呼び出す形式をとっているが,本プラグインのシンボルとの接触により戦闘を行う場合は,接触した向きに応じて,「先制攻撃」と「不意打ち」を強制的に発生させる仕組みとなっている.プレイヤーがシンボルの背後から接触すれば「先制攻撃」となり,敵シンボルがプレイヤーの背後から接触すれば「不意打ち」となる.

3 使用法本プラグインによる,イベントの敵シンボル化の方法

について述べる.スクリプト側で基本動作の設定は行っているため,基本的にはイベントのメモ欄にタグを付与するのみである.RPGツクールのエディタ機能を極力活かしてカスタ

マイズ性を高めるため,プレイヤー非発見時の挙動は,イベント内の自立移動を参照する.また戦闘突入処理は,「戦闘の処理」コマンドを明示的に実行する.

3.1 最小設定敵シンボルと化したいイベントに対して,そのメモ欄

に次のタグを記述する.

<EnemySymbol>

これだけで基本的な動作は十分である.プレイヤーの監視や追跡は行える状態になっているた

め,あとはイベントの自立移動タイプをランダムにしたり,トリガーを「イベントから接触」にして,戦闘の処理を呼び出しておけばよい.(挙動の初期値は便宜上設定しているものであるため,導入の上,動作確認ができたら下記を参照に明示的に設定を行うこと.)

3.2 注釈コマンドに設定できる挙動コマンド敵シンボルの挙動を詳細に操るためのコマンドを次に

列挙する.これらの設定は全て,「注釈コマンド」内に記述する.全てを設定する必要はなく,必要に応じて記述すれば

よい.具体的な用法については,次節の敵シンボルの設定例も併せて参考にされたい.

� 敵シンボルの視認距離

タグ定義: distance� �distance: [X]

� �[X]は,当該シンボルがプレイヤーを認識できる距離

(整数値)の上限である.RPGツクールの仕様に合わせて,1マスを 1として考える.プレイヤーを検出した敵シンボルは,続いてプレイヤーを追跡するための経路

2

ドラゴンケイヴ RPGツクールMZ用 JSプラグインシンボルエンカウント総合 3 使用法

探索を行うため,あまり長大な距離を指定しないほうがよい.

� 敵シンボルの視野

タグ定義: angle� �angle: [θ]

� �[θ]は,当該シンボルの視野角度 (度数法)である.図 3

に示すように,敵シンボルの向きに直線を引いて,そこから左右両側へ角度 θをつけて引いた赤線で囲まれた領域が実際に敵シンボルが見ることのできる領域である.つまり,実際にプレイヤーの存在を調べる角度としては2θとなため,視野を 45◦としたければ 22.5と指定すればよい.(ここに前述の視認距離を合わせたものが実際の視認範囲となる.)

 

図 3: 敵シンボルの視野 θ

� 追跡中の移動速度

タグ定義: speed� �speed: [X]

� �[X]は,当該シンボルがプレイヤーを追跡する際の速

度であり,RPGツクールのエディタ上での設定方式と対応する.表 1がそれを抜き出したものである.プレイヤーを追

跡することが目的であるため,常識的に考えれば 3以上6以下の数値を設定することが自然である.通常時の速度はイベントの自立移動にて指定されたものとなるため,プレイヤーを発見して追跡している間だけ,このタグを用いて設定した速度で移動することになる.

エディタ上の速度 入力数値1/8倍速 1

1/4倍速 2

1/2倍速 3

標準速 4

2倍速 5

4倍速 6

表 1: RPGツクールのエディタにおけるイベントの移動速度とそれに対応する数値

� 追跡の継続時間

タグ定義: duration� �duration: [X]

� �[X]は追跡を継続する歩数である.時間とは述べたも

のの,RPGツクールの仕様では移動処理実行とタイマー処理が両立しづらいためこの方式を採っている (事細は「イベントループ経路巡回」のドキュメントにて述べた).敵シンボルが追跡を開始した後,[X]歩移動してもプ

レイヤーを捕まえられない場合は追跡を断念することになる.先述の移動速度の設定に併せて設定することが望ましい (speedの値の 10倍以内にしておくと良い).

� 追跡断念後の待機時間

タグ定義: wait� �wait: [F]

� �[F]は,その場で待機するフレーム数となる.シンボ

ルが追跡を断念して,次の行動へ移るまでの余韻のような演出となる.

� 追跡終了後の初期位置への回帰

タグ定義: return� �return

� �このタグを設定されたイベントが,プレイヤーの追跡

に断念すると,前述の waitの時間が経過した後,元いた場所へ移動し始める.これをつけていないシンボル

3

ドラゴンケイヴ RPGツクールMZ用 JSプラグインシンボルエンカウント総合 3 使用法

は,その場で自立移動を再開するため,敵シンボルが混み合って邪魔にならないように returnを付けた方がよいと考えられる.

� 「茂み」属性を利用した視認性の減少効果

タグ定義: bush rate� �bush_rate: [X]

� �[X]は 0.0から 1.0の範囲で設定することが想定され

ている.RPGツクールの各マップチップに対する設定で「茂み」属性が設定されているマップチップ上にプレイヤーがいるとき,敵シンボルの視認距離 (distance)に補正がかかる.[X]を小さくしておけば,それだけ敵に見つかりづらくなる (認識できる距離が短くなる).

� プレイヤー発見後,追跡開始するまでの時間

タグ定義: alert time� �alert_time: [X]

� �類似のプラグイン等を利用していると,プレイヤーを

発見した途端,直ちにシンボルが最適なルートでプレイヤーを追尾する現象が多々見られる.このタグを用いると,プレイヤーを発見した敵シンボ

ルが追跡行動を開始するまでの行動準備を演出することができる.ただし,[X]が大きすぎると逆に不自然な挙動になってしまうため,おおよそ 10以内の整数で好みの挙動に調整した方がよい.

� プレイヤー追跡中の,経路探索頻度

タグ定義: route search� �route_search: [X]

� �alert time タグと同様に,敵シンボルが常に最適な

ルートでプレイヤーを追尾する現象を回避するためのタグである.このタグを用いると,プレイヤーを発見した敵シンボ

ルが [X]歩ごとにプレイヤーを追跡するためのルートを再計算する.標準の RPGツクールの仕様のままでは 1

歩ずつになっており,ルート探索にかかる計算コストも決して馬鹿にはできない.

[X]を大きくすると,シンボルの追跡行動に遊びをもたせることができ,それに併せてゲーム処理の負荷も和らげることができる.

� 乗り物使用中のプレイヤーの追跡

タグ定義: chase vehicle� �chase_vehicle

� �デフォルトでは,プレイヤーが乗り物に乗っている場

合はシンボルはプレイヤーに干渉しないようになっている.もし何らかの理由で,乗り物使用中のプレイヤーをシンボルに追跡させたい場合は,これを挿入しておく.

� 追跡開始時のコモンイベント呼び出し

タグ定義: common event� �common_event: [X]

� �もし,シンボルがプレイヤーへの追跡を開始する際に

何らかの追加の演出を行いたい場合は,コモンイベントを呼び出すことができる.[X]は呼び出すコモンイベントの番号となる.

� 追跡行動をとらない

タグ定義: ignore� �ignore

� �このタグがつけられたシンボルは,「シンボル」とし

て機能するがプレイヤーの探索・追跡機能を持たないという特殊な設定を受ける.例えば,複数ページでタグのある注釈を置き,あるス

イッチがONの時だけ探索・追跡を行うといったシンボルを作成する用途がある.あるいは,接触した時だけ処理(戦闘など)を発生させるといった特殊なシンボルの表現も可能にする.

4

ドラゴンケイヴ RPGツクールMZ用 JSプラグインシンボルエンカウント総合 4 プラグインパラメータによる全般設定

3.3 敵シンボル基本例ここでいくつかのシンボル作成例を示す. 

図 4: 敵シンボルの設定例 1

図 4は,常に下を向いて待機した状態でプレイヤーを検知するシンボルとなる. 距離 4マスの視野 30度であるため,あまり広くないが,一度見つかると最高速度で追いかけられることが分かる.

図 5: 敵シンボルの設定例 2

図 5は,一定時間おきに監視する角度を変更しながら前方のプレイヤーを検知するシンボルである.距離も視野も先ほどよりも範囲が広くなっている.図 6は,ランダムに移動をしながらプレイヤーを検

知するシンボルとなる.ランダム移動時の移動速度や頻度は,エディタの機能で設定された値が用いられる.もし見つかっても,追跡時間があまり長くないのと,追跡ルート更新の間隔が大きいため振り切れる可能性もある.

図 6: 敵シンボルの設定例 3

4 プラグインパラメータによる全般設定前節のタグは,各シンボルごとの設定を行うもので

あったが,シンボルエンカウントシステム全般に対して行う設定はプラグインのパラメータを通して行うようになっている.基本的に新たな設定の必要はないが,細かい調整をし

たい場合は参考にするとよい.(ver.1.10以降変更になっている項目があるので,ver.1.07以前のスクリプトからバージョンアップする場合は注意すること.)

� AutoDisable DefaultEncounter

– trueにすると,スクリプト側でニューゲーム時にデフォルトのエンカウントの無効化を行う.

– イベントコマンド「エンカウント禁止の変更」を代行するものである.

– 特殊なデザイン (ランダム/シンボルの混ざったゲーム等)でなければ trueにしておいて問題ないと思われる.

� FollowerAttack

– 旧 IsFollowerAttacked (v1.10よりプラグインパラメータ仕様変更)

–  パーティーキャラクターの隊列歩行に関する設定 (隊列不使用時は初期値 0のままでよい)

– 設定した数値に応じて、隊列歩行時のシンボルエンカウント (特に敵シンボル)の挙動全般が変わる

– 各設定番号と反映される挙動 (項目 1,2,3)の組み合わせは表 4の通り

5

ドラゴンケイヴ RPGツクールMZ用 JSプラグインシンボルエンカウント総合 4 プラグインパラメータによる全般設定

番号 \ 挙動 項目 1 項目 2 項目 3

0 × × ×1 ○ × ×2 × ○ ×3 × × ○4 ○ × ○5 × ○ ○

表 2: FollowerAttackの設定値とシンボル挙動

– 項目 1: 先頭キャラクター以外の接触判定* 敵シンボルとの接触判定を先頭キャラクター以外でも行うか否か

– 項目 2: シンボルのフォロワーすり抜け* 先頭キャラクター以外の接触判定をしないときに,敵シンボルがフォロワーをすり抜けて先頭キャラクターを追跡できるか否か

– 項目 3: シンボルのフォロワー検知* 敵シンボルがプレイヤー検知アルゴリズム実行時に、隊列歩行するフォロワーも検知の対象とするか否か

� InvincibleTime AfterBattle

– 戦闘後の無敵時間– 敵シンボルが密集していると連続戦闘が発生し,プレイヤーにとって非常にストレスとなる.

– プレイヤーを点滅表示し,一定時間シンボルとの接触を無効にする

� EnemySearchRange scale

– 敵シンボル移動経路探索量倍率– 視認距離を元に追跡ルートの探索量を決定するための倍率定数

– 大きくしすぎると,ゲーム動作が重くなる

� SymbolKeepOut RegionID

– 敵シンボル通行不可リージョン ID

– 敵シンボルが,カットシーン等のイベントが発生する場所へ割り込まないようにするための機能

– このリージョン IDが指定されたエリアを越えて,シンボルはプレイヤーを追跡できない

� BalloonID PlayerDetected

� SE PlayerDetected

– 敵シンボルがプレイヤーを発見したときに,頭上に表示させるふきだしアイコン及び効果音

� BalloonID PlayerFled

� SE PlayerFled

– 敵シンボルがプレイヤー追跡を断念したときに,頭上に表示させるふきだしアイコン及び効果音

� BattleBGM surprised

– 不意打ちの条件を満たした状態で再生 (変更)

される戦闘 BGM

– 空欄ならば変更なし– あくまでこのプラグインで作成したシンボルとの接触で戦闘に入るときのみ有効

� Use MenuSubCommandMap

– MenuSubCommand.js(トリアコンタン氏)のマップメニュー機能との共存設定

– 必要な者のみ,trueにすればよい– ver.1.03追加

次の InvincibleStyle 系統のプラグインパラメータ(ver1.04で追加)は,シンボルエンカウント発生後のプレイヤーの描画処理の方式を変更するためのものである.デフォルト設定としては,ver.1.03以前を踏襲するものが与えられている.それぞれのON/OFFの設定は重複することが可能であるが,本来は他プラグインとの表現方法による避けられない競合を回避することを目的にしたものであるため,全ての任意の組み合わせがゲーム上の表現を美しく自然に行うかどうかの保証はない.

� InvincibleStyle Flash

– シンボルエンカウント後の無敵時間中のプレイヤー描画処理 (点滅、従来方式)

– ver.1.04追加

� InvincibleStyle Opaque

6

ドラゴンケイヴ RPGツクールMZ用 JSプラグインシンボルエンカウント総合 5 その他応用例

– シンボルエンカウント後の無敵時間プレイヤー描画処理 (透明度導入)

– ver.1.04追加

� InvincibleStyle Blend

– シンボルエンカウント後の無敵時間プレイヤー描画処理 (合成方法変更導入)

– ver.1.04追加

5 その他応用例5.1 SoR NPC LoopRouteMakerとの併用既発表の「イベントループ経路巡回」と組み合わせる

とさらに高度な敵シンボルを作成できる.

図 7: 巡回移動する敵シンボルの設定例

図 7は,SoR NPC LoopRouteMakerのタグと本プラグインのタグを組み合わせて作成した敵シンボルである.索敵時の移動は SoR NPC LoopRouteMakerが担当

し,プレイヤーの検知や追跡は本プラグインが担当する.この敵シンボルがプレイヤーを追跡しきれなくなった場合は,巡回ルート内へ戻って,ループ移動を再開する.

5.2 TemplateEventとの併用トリアコンタン氏が作成した「テンプレートイベン

ト」1)との併用は非常に強力な効果をもたらす.シンボルエンカウントとして使用される敵シンボルは,似たり寄ったりのイベントをマップ上に量産することになるた

1)https://triacontane.blogspot.jp/

め,該当プラグインによってゲームプロジェクトの軽量化やシンボル配置作業の高速化を図るのに最適である.用法は,それの基本に準ずるので配布先のドキュメン

トを参照されたい.

5.3 戦闘するトループの変更このプラグインは,シンボルエンカウントに必要な機

能を提供するためのもので,戦闘突入コマンド自体は内包しておらず,これまで示した例にあったように RPG

ツクールの「戦闘の処理」コマンドを明示的に呼び出す必要がある.「戦闘の処理」でエンカウントする敵グループ(ト

ループ)は,ゲーム内の変数による指定が可能であるため以下のようなスクリプトを,「戦闘の処理」呼び出し前に実行すれば戦闘する敵グループに幅を持たせることができる.

1 let value=1;2 const rnd = Math.rand(1,4);3 if(rnd==1) value=15;4 else if(rnd==2) value=16;5 else if (rnd==3) value=17;6 else if (rnd==4) value=19;7 $gameVariables.setValue(27, value);

このスクリプトを実行すると,27番の変数に戦闘する敵グループの IDが代入される.「戦闘の処理」を呼び出す際にこの変数を指定すれば,スクリプトが決定した敵グループとの戦闘になる.これを用いると,ゲーム上で敵シンボルとして表示される敵が出現するグループの中からエンカウントするグループを選ぶという表現が可能になる.

5.4 プレイヤーに接触しイベントを発生させるシンボル

「戦闘の処理」はイベントコマンドで明示的に呼び出す方式を採っているので,何の設定もしなければシンボルがプレイヤーと接触しても何も起こらないということになる.特殊な利用例として,「監視に見つからないようにど

こかの部屋に潜入する」といったイベントを作成するということを考える.このようなイベントにも本シンボルは有用である.実行される内容を,「文章の表示」や「場所移動」などにしておけば,シンボルに見つかった場合に潜入をやり直しさせるといったイベントが容易に実現できる.

7

ドラゴンケイヴ RPGツクールMZ用 JSプラグインシンボルエンカウント総合 8 バージョン情報

「シンボルエンカウント総合」と名乗っているものの,何も戦闘突入に関する処理だけでなくプレイヤーを検知・追尾することが必要なあらゆるイベントの実現を容易にしてくれる.

6 サンプルゲーム (MV版のみ)

本プラグインは導入するだけであれば,3.1.節の最小設定を行うだけで簡単に済ませることができるが,より高度な表現を実現しようとすると様々な機能の用法を確認しておく必要がある.4,5章に具体例・応用例もいくつか示したが,手早く

本プラグインの効力を知ってもらうためにサンプルゲームを用意した.ゲームは RPGアツマール上に公開し,プロジェクト本体は当サイトでダウンロードできるようになっている.サンプルゲームは「敵シンボルに見つからないように

用意されたステージを進む」というステルスアクション風のゲームになっており,さまざまなタグを用いて挙動が与えられた敵シンボルを各々確認することができる.ゲーム性というよりも,RPGツクールを用いたゲームの表現力の可能性に着目してもらいたい.また,SoR NPC LoopRouteMakerをはじめとする過

去配布プラグインのサンプルプロジェクトも兼ね合わせている.

7 実装(競合)情報7.1 上書き定義 

� Game Event.prototype.lock

シンボルとプレイヤーの接触時のイベント制御の割り込みのため

7.2 処理継ぎ足しシンボル化のための定義および,シンボル接触時のイ

ベント駆動処理

� BattleManager.onEncounter

� Scene Battle.prototype.terminate

� Spriteset Map.prototype.update

� Game Event.prototype.start

� Game Map.prototype.setup

� Game Event.prototype.setupPage

� Game Event.prototype.updateSelfMovement

� Game Event.prototype.update

� Game Player.prototype.startMapEvent

� Game Player.prototype.updateVehicleGetOn

� Game Event.prototype.checkEventTriggerTouch

フォロワーすり抜け処理

� Game Event.prototype.isCollidedWithPlayerCharacters

8 バージョン情報� ver 1.11 (Sep. 17, 2020) ニューゲーム時に標準エンカウントを自動で無効にする機能の追加

� ver 1.10 (Sep. 13, 2020) フォロワー追従 (隊列歩行あり)時の探索・追跡挙動の細分化、関連設定の仕様変更

� ver 1.07 (Sep. 11, 2020) 透明化に関するデフォルト仕様との競合緩和策の導入

� ver 1.06 (Sep. 4, 2020) プレイヤー検出アルゴリズムの調整 (異なる 2つの通行領域をまたぐ場合のケースに正しく対応)

� ver 1.05 (Aug. 26, 2020) MZ依存不具合/無条件起動ページのないイベントが動作しない不具合を修正

� ver 1.04 (Aug. 25, 2020) 追跡挙動変更/シンボルエンカウント発生後のプレイヤーの無敵時間の描画方式を追加

� ver 1.03 (Aug. 22, 2020) MenuSubCommand.jsのマップメニューとの共存オプションを追加

� ver 1.02 (Aug. 20, 2020) MZバージョン初版

8

top related