新作スカーレット・バイオレットが発売したポケモンシリーズですが、今回は少し視点を変えて、ポケモンバトルのゲームデザインについて見ていきたいと思います。
ポケモンというゲームは、通常のストーリーからランクバトルのネット対戦まで全て同じ計算式・ほとんど同じプール(使用ポケモン)でゲームが成り立っています。ストーリープレイとネット対戦では重要になる要素やバトルの進め方が大きく変わってくるので、実はそのどちらにも対応できているポケモンのゲームデザインはとんでもなく優秀なのです。
ということで今回は、ダメージ計算式について詳しく見ていくことで、ポケモンのゲームデザインの裏側を推測してみようという記事になります!
お時間よろしければご一読ください。
ポケモンのダメージ計算式
今回の話題の中心であるポケモンのダメージ計算式は、以下のような形をしています。
各変数が積の形で関係しあっているのが特徴ですね。
この式は一見難解すぎるようにも思えますが、実はこんな形をしているからこそ生まれる他のゲームにはない様々な利点があるのです。
ダメージが感覚的にとらえやすい
見た目は大変複雑なのですが、この式には式自体を意識しなくてもダメージを感覚的に捉えやすいという利点があります。
ポケモンをプレイしたことがある人なら、威力が2倍になればダメージが2倍になる、攻撃力が半分になればダメージが半分になる、といったダメージの感覚を漠然と持っていると思います。この漠然としたダメージ比率の計算を可能にするのが積の形のダメージ計算式なのです。
ダメージが「攻撃力-防御力」などの差の形で表されているゲームではそうはいきません。ポケモンの計算式が積の形であるからこそ、子供でもダメージが感覚的にとらえやすくなっているのです。
ダメージがインフレしにくい
ソシャゲなどではダメージが何億にまでインフレしているゲームが多くありますが、ポケモンではそういったダメージのインフレが起きにくいようになっています。
式中の変数を見てみると、レベルは1~100の範囲に収まり、攻撃力・防御力比を表す部分も近いレベルであればせいぜい一桁に収まる範囲でしか大きくなりません。そのため、計算結果のダメージが何万などの値になることがほとんどないのです。
この「ダメージがインフレしない」という特徴は、そのまま「HPをインフレさせなくてもゲームが成り立つ」ということに繋がります。これにより、ダメージからHPまで全ての値が子供でも理解しやすい範囲内に収まっているのです。
レベルとダメージ計算式の関係
さて、冒頭で紹介したダメージ計算式をもう一度見てみましょう。不思議なことに、この式には「攻撃側のレベル」はあっても「被弾側のレベル」がないのです。
攻撃側のレベルを参照するなら、同様に被弾側のレベルを参照しても良い気がしますが、なぜ攻撃側のレベルしか参照しないのでしょうか?
その理由は、こうすることでレベルによらず攻撃側/被弾側の有利不利が一定になるためです。
ポケモンというゲームは、同じレベルどうしであればどれだけレベルが上がっても攻撃側/被弾側の有利不利がほとんど変わらないように設計されています。Lv.15ピカチュウのかみなりがLv.15バタフリーをちょうど倒せる程度のダメージであれば、Lv.80ピカチュウのかみなりもまた、Lv.80バタフリーをちょうど倒せる程度のダメージになるというわけですね。
この一見当たり前のように思えるゲームシステムを成り立たせるためには、ダメージ計算式に「攻撃側のレベル」のみを登場させる必要があるのです。
なぜ有利不利を一定にできるのか?
ではなぜ、ダメージ計算式に攻撃側のレベルだけが現れることでレベルによらず攻守の有利不利が一定になるのでしょうか?
これには、ポケモンの実数値(=能力値)の計算式が関係してきます。
ポケモンの「攻撃」や「HP」などの実数値は、以下のような式で表されます。
( 種族値×2+個体値+努力値×14 )×レベル100+レベル+10
HP以外の実数値:
{ ( 種族値×2+個体値+努力値×14 )×レベル100+5 }×性格補正
この式を定数などを無視して簡単に整理すると、以下のように大体レベルとの積とみなせるようになります。
( 種族値etc+50 )×150×レベル
HP以外の実数値:
種族値etc×150×レベル
また冒頭で紹介したダメージ計算式も、小さな定数などに目を瞑ると以下のようにレベルとの積の形で表すことができます。
ここで、与えるダメージについて「被弾側のHPバーが何%削れるか」という観点を導入します。実際のバトルの勝敗には、相手に与えるダメージではなく相手のHPバーが何%削れるかが直接影響してくるため、この観点はより実際のゲームデザインに迫った観点であると言えるでしょう。
そのためには、ダメージ計算式を被弾側のHP実数値で割ることになります。
最後に、先述した攻撃やHPの実数値の計算式をこの式に当てはめて整理します。
すると御覧の通り、分子に攻撃側のレベルの2乗、分母に被弾側のレベルの2乗が現れました。
このように式に現れるレベルの指数が一致しているため、同じレベルどうしであればレベルが上がっても攻撃側/被弾側の有利不利が変わらないようなゲームデザインが成立しているのです。
もしダメージ計算式に攻撃側のレベルが掛かっていなければ、分母には防御とHPの実数値からくるレベルの2乗がかるのに対し、分子には攻撃の実数値からくるレベルの1乗のみがかかることになり、レベルが上がれば上がるほど被弾側が有利でダメージが通りにくいゲームになってしまうでしょう。それを防止するために、ダメージ計算式には攻撃側のレベルのみが登場するというわけですね。
レベルが高い方が大きく有利なゲーム設計
さて、先ほどの式変形でダメージの計算にはレベルの2乗が影響しているということがわかったわけですが、これはポケモンがレベルの高さが強さに大きく影響するゲームデザインになっていることのあらわれだと言えます。
ポケモンには努力値や性格など様々な育成要素がありますが、ストーリー中は主にレベルを上げることでポケモンを育成し、レベルの低いポケモンを圧倒するゲームになります。このゲームデザインを実現しているのが、ダメージ計算式に現れるレベルの2乗なのです。
単純計算、相手の1.4倍(≒√2倍)のレベルがあれば与えるダメージは2倍になり、受けるダメージは半分になることになります。これは、タイプ相性なんて軽く覆してしまうほど大きな優位です。
ポケモンのストーリー中で実感する「レベルの優位」は、こんな形で実現されていたんですね。
所々にある小さな定数の効果
ここまでひたすら無視してきた、計算式に現れる小さな定数についてです。
冒頭に示した計算式はよく見ると完全な積の形をしておらず、所々に2や5などの小さな定数があります。一見大きな効果がないように見えるこれらの定数ですが、実は重要な役割があるのです。
これらの定数は、主に低レベルどうしの戦闘でのレベル差の優位が極端になってしまわないように設定されていると思われます。
先ほど説明したとおり、ポケモンの有利不利はレベルの”比”によって決まります。つまり同じレベル5の差であっても、Lv.90とLv.85(約1.06倍)、Lv.10とLv.5(2倍)では後者の方がレベルによる優位が圧倒的に大きくなるのです。
ただでさえレベルの上がりやすい低レベル帯で、5程度の小さなレベル差が覆しようのない大きな有利/不利を生んでしまってはゲーム性が崩れてしまいます。
それを防ぐために、定数を挟んでレベルの比を小さくしているのです。
その他にも、小さな定数には「0」という数字を発生さないようにする効果もあります。途中で0が入ってきてしまうと掛け算や割り算での計算は大きく狂ってしまうので、それを防止するためにも定数が必要なんですね。
ポケモンの成長との関係
ここまでポケモンのレベルとダメージ計算式の関係について見てきましたが、ポケモンの成長はレベルだけではありません。
進化することで種族値が変化し、新技を習得することで技威力が高くなり、戦闘を重ねることで努力値を得て、ポケモンは成長していきます。
これらの成長要素がどのようにダメージに影響してくるのか、ダメージ計算式をHP実数値で割った式を参考に改めて見ていきましょう。
式を見てみると、まず攻撃と防御が対の関係になっていることが見て取れます。これらの部分は種族値・個体値・努力値などから同じ計算式を用いて算出されているため、ここで攻撃側/被弾側の有利不利が乱れることはないでしょう。
さらに見ていくと、攻撃側の「技威力」と被弾側の「HP種族値etc(=種族値+個体値/2+努力値/8)」が成長要素として対になっていることがわかります。つまりポケモンでは、進化や努力値の獲得によって上昇していくHP実数値に対し、新技を習得して技の威力が上昇することで、攻撃側/被弾側のバランスが取られているのです。
ポケモンをプレイしていて何気なく体験していた「レベルアップで威力の高い強力な技を覚えていく仕様」は、実はゲームデザインを整える上で非常に重要な役割を担っていたんですね。
ストレスなく、緊張感のある絶妙なゲーム設定
前項で説明した通り、ダメージ計算において技威力には被弾側のHP実数値が対応しています。そのため他の値さえ固定してしまえば、被弾側のHP種族値からそのポケモンを倒すのに必要な技の威力を計算することも可能です。
例えば、攻撃側と被弾側のレベルや攻撃・防御実数値が同じであったとすると、そのポケモンを倒すのに必要な技威力は以下のような式で概算できます。
50~100の部分は定数や個体値・努力値による誤差で、努力値を考慮しなければ平均60前後になるでしょう。
そしてこの式に現れる5/2という部分が本当に絶妙で、先述したレベル差の2乗がダメージ計算式に現れる部分と並んでポケモンの絶妙なゲームデザインを構成している大きな要素の一つだと言えるのです。
例として、これらの関係を元に正確な式で計算した「相手のポケモンを一撃で倒すために必要な技威力」を以下にまとめてみました。
攻撃・防御実数値は同じとみなして、最左列が被弾側のHP種族値、中列が同じレベルの相手を倒すのに必要な技の威力、最右列がストーリー中の野生戦相当のレベル差がある相手を倒すのに必要な技の威力を示しています。
HP種族値 | レベル差なし | レベル差あり |
---|---|---|
40 | 240 | 90(Lv.15→Lv.7) |
55 | 275 | 150(Lv.25→Lv.17) |
70 | 315 | 195(Lv.35→Lv.27) |
85 | 350 | 240(Lv.45→Lv.37) |
まずは野生戦のモデルとなる最右列について見てみます。すると、初期では不一致威力40技×2発程度で野生のポケモンが倒せ、中盤は一致威力50~60技×2発程度、終盤では一致威力90技×2発程度でポケモンを倒せる程度になっていることが分かります。
こう見ると、野生のポケモンを難なく倒すために必要な技威力が、レベルアップで覚える技の威力と対応しているようにも見えてきませんか…?
ここからさらにレベル差が開いたり、累積努力値や技範囲による弱点攻撃まで考慮に入れれば、野生のポケモンを一撃で倒すのはもう少し容易になるでしょう。プレイヤーは野生のポケモン一匹一匹に大きく手間取ることなく、ストレスフリーに冒険を続けることができるのです。
次に、中央列の「同じレベルのポケモンを倒すのに必要な威力」について見てみましょう。
それらの値を見ると、初期でも一致威力40技×4発程度、終盤では一致威力80技×3発程度と、倒せないことはなくとも押し切るにはかなり手間取るほどの値になっていることがわかります。
それもそのはず、これらはプレイヤーと近いレベルのポケモンを使用してくる強力なボスやジムリーダーなどとの戦闘モデルであるためです。
ストレスフリーな野生戦に対して、重要な戦闘では簡単には突破できない緊張感が生まれています。かといって全く勝てない程ではなく、戦略を練ったりしっかりレベル上げをしていれば難なくクリアすることも可能です。
そんな絶妙なゲームデザインを成立させているのが、ダメージ計算式に現れる2/5なのです。
総括
今回は、ダメージ計算式からポケモンのゲームデザインの奥深さについて様々な推測してみました。しかし、当然ながら今回紹介した要素はポケモンというゲームのほんの一部に過ぎません。
実際のゲームデザイン設計では、これらの前提条件をもとにポケモンの種族値や覚える技、野生のポケモンやトレーナーのレベル設定、ストーリー構成などが綿密に練られています。そこからさらにランクバトルの対戦環境のバランスまで考えているのですから、多少粗はあれどここまでの完成度に仕上げるまでの公式の苦労には頭が下がる思いです。
ということで今回は、対戦以外の要素を中心にポケモンのダメージ計算式とゲームデザインの関係について見てきました。こまごまとしていて伝わりにくい部分もあったかと思いますが、少しでも楽しんでいただけていれば幸いです。
以上です、最後まで読んでいただきありがとうございました。