トップページに戻る 趣味語りに戻る その2へ


≪RPGの計算式案、その1≫



*レベルアップに必要な経験値*(実用性:低めだが応用範囲は非常に広い)

 小数による “べき乗” がどんな値になるのか気になって、Excelを使って色々な計算をしていたら、0.5乗の結果が見覚えのある値になりました。

 2^0.5=1.4142135…
 3^0.5=1.7320508…
 4^0.5=2
 0.5乗って、平方根なんですね。

 この少数のべき乗をうまく使えば、「経験値獲得 => 一定の値になればレベルアップ」というRPGでよく使われる手法ではなく、「レベル=累積経験値^定数」という直接的でシンプルなシステムが作れるのではないでしょうか。レベルの部分を能力値に置き換えることも可能ですが…能力ごとに成長していくシステムでの能力値計算、あるいは技能レベル計算に使うのがいいのかな?
 能力値を求める計算式に利用するという前提で、ちょっと考えてみます。能力値の初期値は10で最大値は255、経験値は最大で1000万としてみましょう。もっともこの方法を使えば、際限なく成長させることも可能なんですが。…というよりも、成長限界をもうけたくない部分に使うのがベストかもしれません。

 能力値=(累積経験値+1)^0.3415621565+9
 (計算結果の小数点以下は切り捨て)
 …がいい感じでしょうか。最初の能力上昇が経験値7の時。2度目が24の時で、以後57、111、189…となり、累積経験値1000万ピッタリで255に到達。序盤ほど少ない経験値で能力値がアップするというRPGらしい曲線になるので、バランスと美しさを兼ね備えた良いアイデアだと思います。成長力などの違いによって計算式を変える必要があるとはいえ、それでも通常の方法と比べるとプログラムやデータ量が少なくシンプルになると思うし、CPUへの負担も少ないんじゃないでしょうか。
 もっとも、ここまでこだわる必要なんてないでしょうけどね。

能力値 必要累積経験値   能力値 必要累積経験値
10 0   100 543,918
11 7   101 561,604
12 24      
13 57   150 1,960,298
14 111   151 2,001,280
15 189      
      200 4,766,921
50 52,697   201 4,840,359
51 56,549       
      254 9,881,453
      255 10,000,000



*複数の耐性*(実用性:非常に高い)

 RPGには特殊能力が付き物ですが、それに対抗するために耐性(抵抗力)というものが存在します。例えばこの鎧を身につけていれば炎属性のダメージが30%減るとか、この魔法を使えば電撃属性のダメージが5ポイント減るとかいうものです。
 でもこの耐性というもの、複数の効果が同時に発動する場合(装備品の中に炎耐性30%と20%と15%が存在する場合など)の判定方法で、うまさを感じるものがありません。私が知る限りでは、単純に合計するゲームと、最も良いもの1つのみを採用するゲームがあるのですが、前者は1つでも十分という値に設定すると、複数の効果を同時に受けた時にバランスが崩壊しますし、複数同時使用を前提とすると1つではほとんど役に立たなくなります。また後者は強力な耐性を持つアイテムが1つあれば、それよりも弱いアイテムはすべて無駄ということになり、アイテム入手やキャラクター強化の楽しさが損なわれますし、特定の耐性を徹底的に強化するという戦略をとることもできなくなります。

 でも、こうすれば全て解決できます。
 1.全ての耐性の数値を2乗する。
 2.それをすべて合計する。
 3.その平方根を最終的な耐性として扱う。

例1)
 耐性が30%,20%,15%の場合、数値を2乗して(900,400,225)、合計し(1525)、平方根を求める(39%)となります。

例2)端数は切り捨てています。
耐性ボーナス等 計算結果
10,10 14
10,10,10 17
10,10,10,10,10 22
20,25,30 43
50,50 70
50,50,50 86

 単純ですが良い方法ではないでしょうか。今の例では耐性を%表記にしましたが、「ダメージを5ポイント減少する」というような場合にも使えます。もちろん耐性以外にも使えます。



 *確率を自然数(0を含む)に変換する方法*(実用性:非常に高い)

 コマンド選択式RPGの戦闘システムは、大雑把に考えるとターン制とリアルタイム制の2つに分かれます。
 ターン制とは「一定の時間内にどれだけの行動を行えるか」という考えを基準にしたものですが、一般的には「1ターンにつき行動1つ」という単純なものになっています。システムや考え方が単純なためか、初期のRPGは私が知る限りすべてターン制になっています。
 一方リアルタイム制というのは、「1つの行動にどれだけの時間がかかるのか」という考えを基準にしたものですが、実際のゲームを見てみると、「キャラクターの速度が速いほど行動間隔が短くなるが、行動そのものにかかる時間や隙の大きさなどは無視している」となっており、本来目指すべき形とは大きく異なるシステムであることが多いです。ターン制よりも複雑なためか、より後になってから生まれたシステムだと思います。

 この2つの戦闘システムは一長一短であり、どちらが優れているのかを断定することはできません・・・という結論にすればこの文章はここで終わることができ、私としてはとっても楽なのですが、どう考えてもそうは思えません。結論から書くと、私はターン制はリアルタイム制よりも明らかに優れたシステムであると考えています。

 理由は2つ。
 1つはリアルタイム制の戦闘システムで、よくできていると感じる作品に出合ったことがないこと。ではどこをどう修正すれば素晴らしいものになるかを考えても、いまだに結論が出ないのです。
 既存のリアルタイム制戦闘は、どれも「行動順番が回ってきた時に、その時の状況だけを考えての最良の行動を選択すれば良い」というだけの単純なものになっており、「行動にかかる時間や隙の大きさなども考慮して、戦闘の流れを考えながらコマンドを選択する」という面白さを持っているものには出会ったことがありません(一応ファイナルファンタジー4には、この考え方が少しだけ含まれていた)。しかもこのような面白さが味わえるシステムにしてしまうと、今度は複雑すぎて大半の人がついていけないものになるでしょうし、待ち時間が長くてイライラさせられるようにもなるでしょう。
 そしてターン制を推す2つ目の理由。それが今回の文章のメインである、「確率を自然数に変換する方法」を生かした戦闘システムが、ターン制でしか使えないことです。
 要するに、優れたリアルタイム制の戦闘システムは実現不可能かもしれないが、優れたターン制の戦闘システムならば実現可能なはずだから、私はターン制の方が明らかに優れていると考えているのです。

 では「確率を自然数に変換する方法」の紹介です。

 必要なパラメータは「成功率」「成功率修正」「爆発抑制力」の3つです。このままでは理解しにくいので戦闘システム用に言葉を置き換えると、「攻撃命中力」「(攻撃目標の)回避力」「連撃ペナルティ(以下連ぺ、武器の重さを表す)」となります。そして攻撃をする場合、「攻撃者の攻撃命中力から目標の回避力を引いた値」が1撃目の攻撃命中率となり、命中率50ならばちょうど半分の確率で命中します。ここまではさほど珍しくないシステムだと思いますが、これ自体も優れたシステムです。

 ちょっと脱線しますが、ドラゴンクエストシリーズなどで使われている回避判定は、攻撃者の存在を無視して行われているため、攻撃者がどんなに優れていても、目標の回避率が10%に設定されていれば必ず10%の確率で回避が成功します(攻撃命中率でまず判定し、それに成功した場合は攻撃目標の回避判定を行う)。命中率が150%あろうが、200%あろうが、100を超えていればそれ以上は無意味なので、勇者クラスのキャラクターがザコ敵への攻撃でミスを連発して、理不尽な結果とテンポの悪さにイライラさせられることだってあるわけです。でも先ほど書いた引き算のシステムであれば、きちんと実力通りの結果になります。もっともある程度以上の実力差は意味がないという欠点は残りますけれど。

 話を戻して、1撃目が命中した場合の話です。この場合、1撃目の実際の命中率(ここでは50%)から連ぺを引きます。連ぺが30であれば20%になります。この20%を2撃目の命中率として扱い、連続攻撃を行います。2撃目も命中すればさらに連ぺを引いて3撃目・・・。この場合は0%以下になってしまいますが、攻撃者が達人で攻撃目標が動きの鈍いザコ敵ならば、4撃目、5撃目と繰り出すことも可能です。逆に攻撃が外れた場合には、そこで攻撃が終了します。ようするに、成功率によって判定の成功回数が確率的に決定され、その成功回数が攻撃の命中回数になるということです。
 実際のゲームにおいては、スタート直後なら主人公側の1撃目の命中率を60〜70%、連ぺを20〜30くらいに設定することで、平均命中回数が1程度になり、「攻撃が当たればうれしい。外れても仕方がない。連続攻撃が出ればすごくうれしい」と思えるバランスにすることが可能になります(戦闘のテンポも重要ですが)。さらに確率をきちんと考慮しているため、一撃あたりのダメージも現実的な値になります。ついでにあらゆるパラメータをイメージ通りに設定することが可能になります(数値のインフレが起こらない)。

 なおRPGの場合、主人公はザコ敵よりも強い状態でプレイするものなので、敵の1撃目の命中率は20〜40%くらいになるでしょう。結果として、戦闘のたびにHPを回復させなければならない煩わしさはなくなりますし、「回避できることが多い => 1撃あたりのダメージを高めに設定できる => 集中攻撃や連続攻撃で思わぬ大ダメージを受けることがある」ことから、甘めのバランスでもプレイヤーに緊張感を持たせることが可能になります。つまりライトユーザーからゲーマーまで幅広いプレイヤーに喜んでもらえるバランスにできるということです。

 この判定方法は、「一定の時間内にどれだけの行動が行えるか」というターン制の特徴を十二分に生かした手法であると思います。ちなみに使用パラメータを「魔法攻撃力、魔法抵抗力、爆発抑制力」にすれば魔法にも使えますし、状態異常を引き起こす行動の成功判定に使えば、判定の成功回数を状態異常の持続ターンとして使うことができます。

 どうですか?
 古臭いと思われがちなオーソドックスなターン制も、工夫次第で化けるでしょ?


トップページに戻る 趣味語りに戻る その2へ