計算式を設定する
スキルの効果量(ダメージ量や回復量のこと)を設定するには、基本的に「計算式」を設定しないといけません。そこで、ここでは「計算式」の設定方法を中心に効果量の設定方法について解説していきます。
計算式の設定項目について
スキルによる効果量は、[ダメージ]の設定項目で設定します。
- タイプ
- 効果量の種類を決定します。[HP ダメージ]と[MP ダメージ]は、それぞれ対象にダメージを与えます。[HP 回復]と[MP 回復]は、それぞれ対象を回復します。[HP 吸収]と[MP 吸収]は、それぞれ対象にダメージを与えると共に、使用者を回復します。効果量を設定しない場合は[なし]のままにしておいてください。
- 属性
- スキルの属性を設定します。[なし]以外の場合、対象の属性有効度によって最終的な効果量が変動します。また、[通常攻撃]を選ぶと装備中の武器に設定されている属性がそのまま反映されます。
- 計算式
- 効果量を決定する計算式を入力して設定します。詳しくは、後で解説します。
- 分散度
- 効果量のばらつきの度合いを設定します。設定した数値のパーセント分、最終的な効果量は上下に幅が出ることとなります。
- 会心
- 会心の一撃を発生させるかどうかを設定します。
計算式設定の基本
計算式では数値や、使用者と対象の能力値を参照することが出来ます。
atk | 攻撃力 | mhp | 最大 HP |
def | 防御力 | mmp | 最大 MP |
mat | 魔法力 | hp | 現在の HP |
mdf | 魔法防御 | mp | 現在の MP |
agi | 敏捷性 | tp | 現在の TP |
luk | 運 | level | レベル |
- 頭に「a.」を付ければ使用者の能力値となります。(例)「a.mhp」……「使用者の最大 HP」
- 頭に「b.」を付ければ対象の能力値となります。 (例)「b.agi」……「対象の敏捷性」
また、「v[n]」の形式で、変数を指定することも可能です。例えば、v[10]なら 10 番の変数の数値が参照されます。《→変数について》
計算式を設定する
さて、本題である計算式の設定を行いましょう。
四則演算と計算の基礎について
計算式の基本は、+、-、*、/ からなる、四則演算です。* は掛け算、 / は割り算になります。
計算の順番は、掛け算と割り算が先で、足し算と引き算が後になります。このため、「a.atk + a.def * 2」という式の場合、「a.def * 2」が先に計算されます。足し算を先に計算したい場合は、「(a.atk + a.def) * 2」括弧でくくります。
また、計算式は、整数で計算されるため、割り算を行った場合、余りは切り捨てられます。例えば「3 / 2 * 2」という式の場合、結果は 2 になります。これは、「3 / 2」の商が 1 で、余りの 1 が切り捨てられるからです。「a.atk / 2」などの場合も、小数点は切り捨てられていることに気を付けてください。
ただし、「a.atk * 0.5」のように、式の中に小数点が出てきた場合は、小数点を含めた計算になります。この場合、実際のダメージは整数に変換されます(小数点以下は切り捨てられます)。
上記の値に、分散度がかけられて、実際のダメージ(または回復)値になります。
設定アドバイス・攻撃魔法編
サンプルデータの「ファイア」の計算式を見てみましょう。
「a.mat」は「使用者の魔法力」、「b.mdf」は「対象の魔法防御」を意味しますので、設定された計算式は、基本効果量の 100 に「使用者の魔法力の 2 倍 - 対象の魔法防御の 2 倍」が加算されているわけです。
ですので、これを参考にして、魔法を作成する場合は基本効果量の値だけを変更するようにすると、設定するのが楽な上に、それぞれの魔法の強弱関係も分かりやすくなります。あとは、[分散度]の数値をいじって、効果量にばらつきのある魔法や、ばらつきの少ない魔法などといった違いを出すのも良いでしょう。
設定アドバイス・回復魔法編
サンプルデータの「ヒール」の計算式を見てみましょう。
「a.mat」は「使用者の魔法力」のため、基本効果量の 200 に「使用者の魔法力」を加算したものになっています。回復魔法の場合、味方の魔法防御で回復量が減ってしまうのも変ですから、「b.mdf」を引くのはおかしいですよね。
使用者の魔法力が上がると共に回復量も大きく上がるようにしたければ、「a.mat * 2」のように、掛ける数値を大きく設定すると良いでしょう。強力な回復魔法を作成する場合は、参考にしてください。
設定アドバイス・打撃スキル編
サンプルデータの「攻撃」の計算式を見てみましょう。
「a.atk」は「使用者の攻撃力」、「b.def」は「対象の防御力」を意味しますので、設定された計算式は、「使用者の攻撃力の 4 倍 - 対象の防御力の 2 倍」を意味します。
このスキルは、通常攻撃の際に使用されるスキルですので、この設定がすべての打撃系スキルの基準となります。
打撃系スキルを作成する場合、一般的には通常攻撃よりも強くすると思いますので、「a.atk」に掛ける数値を大きくすれば、通常攻撃の時よりもその数値分だけ与えるダメージが大きくなりますし、さらに基本効果量として、値を加算すれば、それだけダメージが大きくなります。
サンプルスキルの「ブレイクダウン」は、敵の HP にダメージを与えるスキルなので[タイプ]は[HP ダメージ]を選択し、装備中の武器の属性が反映されるように[属性]は[通常攻撃]にし、[分散度]は 20 のまま、[会心]は[なし]です。
●使用者の攻撃力の10倍、対象の防御力は無視してダメージを与える
これで、サンプルスキル「ブレイクダウン」は完成です。
計算式設定の応用(1)
計算式を利用した応用例をいくつか示します。
●対象の HP を最大値まで回復する([タイプ]は[HP 回復]、[分散度]は 0 に設定しておく)
●与えるダメージは、使用者の敏捷性が大きく影響する
●対象の残りHPを問答無用で 1 にする
一から設定するのは大変ですが、計算式にこだわりたい人はサンプルデータや、サンプルゲームなどに設定されている計算式を参考にして、オリジナルの計算式を設定してみてください。
計算式設定の応用(2)
さて、余裕があればもう一歩踏み込んでみましょう。若干上級編になるため、難しいと思われる方は読み飛ばされて結構です。
計算式には、「計算式設定の基本」で述べた以外に、JavaScript で使われている式を使うことも可能です。また、MV はゲームの実行部分が JavaScript で書かれていますが、それらの数値を参照することも可能です。いくつか例を示します。
最低でも必ず 1 ダメージ与える攻撃
スキル 1 番の通常攻撃では、攻撃力が小さいと、ダメージが 0 になります。最低でも確実に 1 のダメージを与える計算式に変更してみましょう。
●元の計算式は「a.atk * 4 - b.def * 2」だった
ここで、JavaScript の Math.max(○, △) という関数を使用しています。これは○と△のどちらか大きい方が結果の値になる関数です。
ここで○は 通常の攻撃計算式で、△は 1 です。よって、通常攻撃の式で 1 以上の場合は、その値が、0 以下の場合は、1 がダメージ採用されるため、最低でも 1 ダメージが与えられます。
特定の間の数値をランダムで与える攻撃
例えば、「敵の防御に関係なく、1 から 攻撃力の 4 倍 の間の値でランダムにダメージを与える技」を考えてみましょう。以下のように実現できます。
●1から a.atk * 4 までの間でランダムなダメージ
ここでは JavaScript Math.random() という関数を使用しています。これは 0 以上 1 未満のランダムな値になる関数です。これに特定の値 a をかければ、0 から (a - 1) までのランダムな値を取得できます。
上記の例では、「(a.atk * 4) * Math.random()」 とすることで、「0 から、((攻撃力の 4 倍) - 1) まで」の値を取得できます。これに 1 を足すことで、「1 から (攻撃力の 4 倍) まで」のダメージを与えることが出来ます。
「Math.random()」を使うと、小数点でダメージが求められるのですが、小数点以下は切り捨てられるため、問題ありません。
上記の値を変形して、「○ * Math.random() + △」の形式で、○と△の値を書きかえることで、任意の範囲のランダムな数値をダメージとして与えることが出来るようになります。
戦闘参加メンバーの数でダメージが変わる攻撃
仲間全員の力を合わせてかける技を考えます。戦闘に参加しているアクターが 1 人の時は、通常ダメージですが、2 人、3 人となることで、2 倍、3 倍となり、最大 4 倍になる技です。
まずは、以下のような式を考えます。ここで、「$gameParty.size()」というのが、戦闘に参加している人数です。
●100 × 仲間の戦闘参加人数 が基本ダメージ
しかし、これでは、戦闘不能や、眠りなどで行動不能な仲間も数に入ってしまいます。これが不都合な場合もあるでしょう。
そこでまず、パーティーメンバーの数について、戦闘で役に立ちそうな式の一部を以下に示します。
$gameParty.members().length | メンバーの数(メンバーとは、戦闘中は戦闘参加人数、移動中はパーティーの人数) |
$gameParty.size() | $gameParty.members().length と同じ |
$gameParty.battleMembers().length | 戦闘参加人数 |
$gameParty.allMembers().length | 戦闘不参加も含めた、パーティーの人数 |
$gameParty.aliveMembers().length | 生きているメンバーの数 |
$gameParty.movableMembers().length | 眠りなどにかかっていない(動ける)メンバーの数 |
「$gameParty.movableMembers().length」を使って、次のように書きなおしてみました。
●100 × 動ける仲間の人数 が基本ダメージになる
これで、動ける仲間の数だけ、ダメージが増えるようになりました。以上で、この技は完成です。
しかし、この技は敵キャラが使うと、こちらのパーティーの数に応じてダメージを与えてくるという、少しおかしなことになってしまいます。そこで、同じようなスタイルで、敵の技を作る時のために、敵の数を取得する式もいくつか紹介しましょう。
$gameTroop.members().length | 敵キャラ総数(まだ出現していない敵キャラは含まない) |
$gameTroop.aliveMembers().length | 生きている敵キャラの数 |
$gameTroop.deadMembers().length | 倒された敵キャラの数 |
$gameTroop.movableMembers().length | 眠りなどにかかっていない(動ける)敵キャラの数 |
敵の技を作る時はこれらも参考にしてください。