追憶・蒼天のモブスキルの仕組み

Last-modified: 2021-07-26 (月) 23:53:02

前提知識

TheLow一般向けシートのmagicspell,monsterskill のシート TheLow運営向けシートのmobのシートの使い方を理解していること。

処理の仕組み

現在実装されているほとんどのモブスキルと言うのは、基本1体のモブ、monsterskillシート1行分の処理で完結します。
ですが、追憶や蒼天で見るクリーパーを用いたモブスキルは特殊で、複数のモブとモブスキルを使用しています

スキルに用意するモブは一つにつき(基本)3種類です。

一つ目は、スキルを実行するモブ。プレイヤーが実際に戦うボスと言ったほうがイメージしやすいかも。ここではこの類のモブの呼び名を『実行者』とします。
二つ目は、攻撃のカウントダウンをするモブ。演出としては、"攻撃が来るぞ!"っていう予兆の役割を持つ。ここではこの類のモブの呼び名を『トリガー』とします。
三つ目は、プレイヤーにダメージを与えるモブ。実行された瞬間、または一定時間後に消滅するモブが望ましい。ここではこの類のモブの呼び名を『攻撃者』とします。

なぜあえて複雑なつくりにしているかは後述を参照。

一つ目のモブ 『実行者』の役割

順序的には一番最初に実行されるスキル。このスキルを持つモブは雑魚やボスなど任意のモブで良い。

magicspellの処理:

基本としてaction:動作の列には『トリガー』を召喚するものを記入する必要がある。
例:3.Playerの場所にモブを{1}体召喚(モブ名:{0})

monsterskillの処理:

特に制約は無し。スキル全体の発動確率 発動条件等はここで設定する。プレイヤーが実際に戦うモブが使うスキルなので、難易度調整に関わる部分の一つである

二つ目のモブ『トリガー』の役割

『実行者』によって召喚されるモブ。攻撃の予兆を示し、一定時間後に『攻撃者』を自身に召喚する。攻撃者を召喚した後は自ら消滅する
このモブが持つスキルは、召喚された瞬間に必ず実行されなければならない

モブ(エンティティ)の制約

追憶や蒼天では帯電クリーパーを使用しているが、ゾンビやスケルトン、シルバーフィッシュでも可能。エンダーマンやエンダードラゴン、アーマースタンド等は無理。
必ずNoAIに設定する。
このモブはスキル発動後に消滅するモブなので、HPを低く設定しておくとよい。
スキルを確実に発動させたい場合は、全武器の耐性を100に設定すると良い。プレイヤーが攻撃をすることでスキル発動を阻止できるようにしたい場合はあえてなくすのもあり

magicspellの処理:

最低3つ用意して、それぞれを順にchainさせる必要がある。
一つ目は何でも良い。基本[0.何もしない]でok。この列で、円状のパーティクルやサウンド等を設定するとプレイヤーが認識できる予兆ができる。そこは製作者のセンス。
二つ目は必ず[4.モンスターの場所にモブを{1}体召喚(モブ名:{0})]を実行する。モブ名には『攻撃者』となるモブの名前を書く。数は1で良い。
また、発動遅延時間を記入する。この時間の長さ次第でプレイヤーが予兆を認識し、攻撃から回避できるまでの猶予が決まる。とどのつまり、難易度調整に関わる部分の一つ
三つ目は処理としては、『トリガー』が消滅する部分となる。要は何かしらの方法でHPを0にするか、どこか遠方へ飛ばさなければならない。(これがないと永遠にこいつだけ残留する。)
例:19.指定したコマンドをモブが実行する(コマンド:{0}) command: /tp ~ ~-300

例:0.何もしない buff列をダメージ(アンデッドの場合は即時回復) レベルと時間を10に設定 対象をモンスターに設定
…等

monsterskillの処理:

先ほども書いた通り、このスキルは確実に発動されなければならないため、
必ず発動条件を[モンスターがスポーンされる時]に設定する。
必ず発動確率を100%にする。
必ず対象を[モブの周囲のプレイヤー] 範囲を99 もしくはそれ以上の大きな数値にする。
必ず plugin値にmaxPlayer:1を設定する。(これ忘れると結構とんでもないことになるし、事実EXや蒼天はそうなった)

なお、ダメージは設定しなくてよい。というかここでダメージ設定すると確実にプレイヤーがダメージを食らう。

三つ目のモブ『攻撃者』の役割

このモブは召喚された瞬間に一定範囲内のプレイヤーにダメージを与え、即時消滅する。
一番処理が楽なのはfuseが0(=即時爆発する)のクリーパー※を使用すること。召喚された瞬間消えるので後処理が楽。ただし、爆発範囲は狭めておくこと。
必須ではないが念のため、全武器の耐性を100に設定すると良い。

(0※)

magicspellの処理:

何でも構わない。お好みでプレイヤーにデバフをかけてもよし。上に吹き飛ばしてもよし。
複数の妨害をかけたいならmagicspellをもう一つ作ってchainさせればよい

monsterskillの処理:

必ず発動条件を[モンスターがスポーンされる時]に設定する。
必ず発動確率を100%にする。
対象を[モブの円内のプレイヤー]または[モブの周囲のプレイヤー]にする。[モブの周囲のプレイヤー]はモブを中心とした正方形の範囲内のプレイヤーを対象とする。
なお、[発動条件に当てはまるプレイヤー]を設定してしまうとそもそも攻撃スキルが発動しなくなる。

ダメージや範囲は製作者次第であり、難易度調整に関わる部分の一つである。

この構造に至った理由 (読まなくてもいい)

追憶や蒼天で使用されているの処理を言語化すると

『ボスがプレイヤーのいる座標に予兆を設置。数秒後、予兆を中心とした一定範囲内にいるプレイヤーに対してダメージを与える』

『一定範囲内から離脱したプレイヤーはダメージを回避できる』

となります。

これを一つのmobskill monsterskillで作ろうとしてもできません。それは、magicspell単位で範囲やダメージを指定できないこと、monsterskillはchainさせることができないためです。
(なお、運営シートのmobskillシートにはchainが存在するが、不具合が多々あるため実用に向かない。)
ですが、monsterskillを無理やりchainさせる方法があります。それが『モブが別のスキルを持ったモブを召喚する』です。上記でいう、『トリガー』を召喚するのです。
『実行者』がmonsterskillでプレイヤー直下にモブ(トリガー)を召喚。トリガーがスポーンした瞬間に別のmonsterskillを発動する。こういう仕組みでmonsterskillをchain、連動させています。

しかし、『トリガー』だけでは攻撃処理がうまくいきません。『トリガー』が持つmonsterskillにダメージを設定してしまうと、発動遅延やmagicspellのchainをいくら設定しようと、プレイヤー直下に『トリガー』が召喚された時点で確定で攻撃が飛んでいきます。
仮にプレイヤーから離れた場所に召喚され、範囲内にプレイヤーがいなかった場合、プレイヤーは攻撃を回避できますが、『トリガー』はスキルを発動することができず、何もせずそこにずっと居残り続けます。

要件定義として『トリガー』は、『一定範囲内から離脱したプレイヤーはダメージを回避可能』且つ、『スキルを確実に発動させる必要がある』でなければなりません。
そこで登場するのが3体目のモブ『攻撃者』です。

『攻撃者』は、一定範囲内にいるプレイヤーにダメージを与えるだけのモブです。スキルが発動するしないに関わらず、召喚されてから勝手に消える必要があります。(上記の通り、発動しなければ居残り続けてしまうため)
召喚されて勝手に消えるモブとして最適なのは、即時爆発するクリーパーやエンダーマイトです。(クリーパーの爆発は攻撃演出としても優秀で一石二鳥である!)

そんな感じでExを開発していた頃から滅茶苦茶試行錯誤をくりかえし、最適化した形がこのwikiになります。備忘録として