RPG等の戦闘の計算に関する考察
情報工学科2年 佐々木 祐輔
・はじめに
まず、ここで言うRPGという言葉は、「ドラゴンクエスト」や「エストポリス伝記」などのような、いわゆる「電源の要るRPG」のことを指します。これらより先に存在し、これらの基になったというTRPG、いわゆる「電源の要らないRPG」には触れません(そもそも私は、こちらについては全く経験がありません。)。「電源の要るRPG」は、「電源の要らないRPG」とは、大きく異なってしまっているらしいですし、RPG(ロールプレイングゲーム)という言葉通りの存在とも言いづらいかもしれません。そのため、「電源の要るRPG」の一部または全部に対して、RPGという呼び方を用いることに不快感を持たれる方もいらっしゃるかもしれませんが、現在、この呼び方が広く浸透しており、また、他に、これらをまとめる適切な言葉が見当たらないので、このRPGという呼び方を用いさせて頂きます。ご容赦ください。
RPGには、重要な要素が沢山あります。そして、その中の一つが戦闘です。そのシステムにもいろいろありますが、多くのものは、アクションが苦手な人でも、作戦を考えたり、戦闘を繰り返してキャラの能力を高めたり、強い装備を整えたりすることで勝利できるように(また、アクションが得意でもそれだけでは突破できないように)、味方と敵の、数値化された能力を用いることを中核としています。この数値と、それらを用いて行われる計算が、戦闘の勝敗を決める、つまり、ゲームをクリアできるかどうかを決めるわけです(ゲームをクリアできるかを決める戦闘以外の要素は、「謎解き」の他にはほとんど無いでしょう)。
そうであるにも関わらず、パラメータと計算は、あまりにも軽視されている気がしてなりません。市販されているゲームは、シナリオやグラフィックや音楽などは、私のような素人では絶対に真似できないクオリティになっていますが、戦闘のパラメータと計算に関しては、そう思えません。また、それらについて深く考察した文書はほとんど見受けられませんし、優れたそれらを創った人が注目されたと言う話も聞きません。
このような状況なので、文書をうまくまとめることもできない素人である私でありますが、素人なりに書いてみようと決心するに至ったわけです(会誌に文書を寄せなかった時に下される制裁が怖かったということも、決心に至った大きな要因であることも否定しませんが。)。
・ダメージ計算について
戦闘計算の、中心とも言える部分でしょう。多くのRPGと同様に、全てのキャラにHPというパラメータが存在し、攻撃を受けることでそれが減少し、0以下になるとそのキャラは戦闘不能となるという前提で考察を行います。
まず、多くのRPGで用いられている、「引き算方式」について、考察してみたいと思います。「引き算方式」とは、
攻撃側のパラメータX − 防御側のパラメータY
の形で得られた値、あるいはそれに乱数や、属性の相性などのインフレしない(その条件により大小があるが、ゲームが終盤に向かうに従って、ほとんど一方的に大きくなっていくわけではない)値をかけた値がダメージ値となるものを指すことにします。わかりやすい例がファイアーエムブレム(攻撃力 − 守備力)でしょう。また、
[ 攻撃力 − (守備力 ÷ 2) ] なども、 [守備力 ÷ 2]をYと考えられるので、同じ分類とします。
RPGの戦闘において重要なこととして、キャラが成長することによって今まで勝てなかった相手に勝てるようになり、だからこそ新たに相手にしなければならない敵も、以前の敵より強くなっており、それを繰り返すために、パラメータがゲームの進行と共にインフレしていくということがあります。このことを念頭において、以降の文をお読みください。
まず、パラメータがインフレしても、攻撃する側とされる側が同じように成長していれば、同じような関係(ここでは、とどめを刺すのに必要な攻撃回数)を保てるということが重要なのですが(ゲーム序盤から終盤まで、数字だけが大きくなって全く同じバランスであると、単調なゲームとなる恐れがありますが、基本は一定に保つことだと思います。そこに刺激を加えることはできます。一定でないと、最初から最後までのインフレの度合いを限定する必要性などが生じるでしょう。)、例えば、「XがA倍になる頃にはYもA倍程度になっていて、するとダメージもA倍程度になるが、最大HPもA倍程度になっているので、とどめを刺すのに必要な攻撃回数は一定になる」という形にすれば、達成できるでしょう。
上記の式のXとYに関して、一般的に Y/X が小さいと、Yの価値が希薄になってしまうということが言えます。例えば、Yの値が、丈夫なキャラは20で、か弱いキャラは10であるとしましょう。Xが1000の攻撃を受けると、ダメージはそれぞれ980と990で、ほとんど差がありません。逆に、Y/Xが大きいと、少しYが大きすぎるだけ、少しXが小さすぎるだけで、ダメージ0という状態になってしまいます。しかし、これらの現象は、前者ならインフレやキャラによる格差を大きくし、後者ならその逆にすることで、ある程度は補えます(その調整具合が難しく、うまくいっていない市販のゲームも多いのですが)。また、上記のことから、Xが高いほど、Yによるダメージの差の割合が小さくなるということが言え、結果として、キャラに相性が生まれます。これは、うまく使えれば長所と言えるでしょう。以下に、その例を示します。
剣士 X:10 Y:5 HP:75
重騎士 X:10 Y:9 HP:33
山賊 X:20 Y:0 HP:40
問題点としては、Xが一定の攻撃を受け続ける場合に、Yが一定の値上昇することによるダメージ減少が一定であるため、Yが高いキャラほど、それによるダメージ減少の割合が大きくなってしまうということが挙げられます。例えば、Xが100の敵を相手にしているとしましょう。丈夫な味方のYが60から70、か弱い味方のYが40から50になったとします。丈夫な味方が受けるダメージの軽減率は、か弱い味方のそれの1.5倍です。しかも、これは両者のYの成長量を同じにしていますが、実際は、両者のYの関係を維持するために、丈夫な味方の方がYの上昇量が大きくなるようにしなければならなくなるでしょう(最大HPが増えるにつれ、ダメージ差も増えなくてはバランスが取れません。)。そうなれば、格差は一層広がります。最悪の場合、Yの高いキャラは、初めて戦う強敵の攻撃すらノーダメージなのに、Yの低いキャラは、弱い敵から受けるダメージがなかなか減らないなどといった事態に陥ります。対策はYのキャラごとの格差を小さくすることですが、それはすなわち、キャラの個性を、Yに当たるパラメータでは出せなくなってしまうということですし、それでも、ダメージの軽減率の格差が、好ましくない方向に現れてしまうということには変わらないので、引き算方式の大きな短所と言えるのではないかと思っております。
また、ここの直前で説明した問題点は、「丈夫な味方」を「味方のレベルが敵に対して高めの時」、「か弱い味方」を「味方のレベルが敵に対して低めの時」と置き換えても、同じことが言えます。レベルアップ時のYの成長量を、レベルが上がるほど小さくなるようにしてしまうと、ゲームが進むほどHPも上がって、一撃で受けるダメージが大きくなることと逆行して、ゲームが進行するほど、Yの成長のありがたみが著しく小さくなってしまいます。解決方法として、レベルアップに必要な経験値と敵がくれる経験値のインフレを大きくして、レベルが低めのうちはどんどんレベルが上がり、高くなってきたら、ほとんど上がらないようにするということが挙げられますが、これをやりすぎると、ある時点でがんばってキャラを育てたことが、少し進んだだけでほとんど意味の無いことになってしまうことになり、常にレベルを高めに保ちたいプレイヤーにとっては、非常に苦しくなります。
気付かれた方も多いと思いますが、ここまで挙げてきた事柄(特に問題点)の多くは、色々な要因が絡んではいるものの、「Xの大小によるYの重みの違い」とでも言える部分が原因と言えると思います。
そこで、以降では、その要素が無くなると言える、割り算方式について考察してみようと思います(なお、私はこの方式でシステムを創ろうと企てております。)。
この文中における割り算方式とは、
攻撃側のパラメータX ÷ 守備側のパラメータY
が、ダメージの基本(これに乱数やインフレしない値をかけることは可能)となる形のことです。
なお、少し脱線してしまいますが、XとYが、比率を一定に保ちながら成長していくと、ダメージが一定になってしまうため、HPを成長させることができず、それだけなら、HPをインフレしない能力とし、耐久力は専らYの方で育てるという考えができますが、回復魔法などの成長をさせられないという問題が生じます。そのため、全てのパラメータの成長の比率を等しくして、XをパラメータN個の積、YをパラメータN−1個の積とするとよいでしょう。こうすることで、どこまで値がインフレしても、バランスを保つことができます。
この方法の特徴は、対戦相手のパラメータの大きさに関係なく、XがA倍になれば、同じ相手に与えられるダメージはA倍になり、YがA倍になれば、同じ攻撃から受けるダメージは1/Aになるということです。
上記の特長により、例えば、丈夫な味方とか弱い味方のYが、同じだけ成長すれば、か弱い味方の方がダメージ軽減率は高くなりますし、両者のYの値の比率を保ったまま成長すれば、ダメージ軽減率は等しくなり、ダメージの減少値で見れば、か弱い味方の方が大きいという、理想的な形になります。
例えば、敵のXを1200とし、丈夫な味方のYが50から60、か弱い味方のYが30から40になったとしましょう。すると、丈夫な味方が受けるダメージは24から20、か弱い味方のそれは40から30になるわけです。また、丈夫な味方のYが60から80になったとしても、ダメージの変化は20から15です。このようなバランスになることによって、か弱い味方のYを高めることを重要なことにできます。
また、ノーダメージ(あるいは1)になりにくいという特徴もあります。現在Nのダメージを受けてしまう攻撃のダメージを1にするには、YをN倍に高めなくてはいけないのですから。これは、特に成長の自由度が高いゲームにおいてはありがたいことだと思います。しかし、「ドラゴンクエスト」シリーズの「メタルスライム」のような敵を用意したり、強力な武器を揃えていかないと、ここから先の敵には全く歯が立たないというような状況を用意したりすることが困難になるという問題点もあります。この辺りは逆に、引き算方式が持つ魅力とも捉えられるでしょう。
もう一つ重要なこととして、上記の「特徴」が示すように、引き算方式のところで説明したような「相性」が全く生まれないということがあります。相性がある方が、一般的に面白くなると言えるでしょう。従って、この点では、このままでは引き算方式より劣っていると言えそうです。しかし、相性は、別のところから付加することが可能です。むしろ、引き算方式だと、XとYだけで、好ましくない方向に相性が生まれてしまう可能性があるので、短所であるとも言えると思います(例えば、上記の剣士と重騎士に関して言えば、剣士が氷の剣を持っていて、炎の鎧を着ている重騎士に対して、本来の1.5倍のダメージを与えられるとしても、負けてしまうことには変わりは無いということになります。)。
・おわりに
本文に相当するセクションが一つしかなく、しかも内容も、思いついたことをだらだらと並べているだけのような、拙い文書であるにも関わらず、最後まで読んでくださった方、どうもありがとうございました。
これを読んで下さった方々の中に、少しでも(程度においても、人数においても)、戦闘の計算に興味を持たれた方がいらっしゃれば大変嬉しいですし、私よりも数学的及び論理的思考力と文書を作成する能力に優れ、達成感などの人間の感覚に関する教養もお持ちで、そしてRPG等の戦闘への関心も高いような方が、この文書の拙さを嘆き、そしてこの分野について、本を一冊執筆して下さったりしたら、なおのこと嬉しいです。