ロボット少女は夢を見る - 制作記その39- ダメージ計算
ロボット少女は夢を見る の39回目の記事はダメージ計算についてです。
戦闘のあるゲームとダメージ計算は切っても切れません。
攻撃力や防御力、技やスキルなどゲームならではの要素をいくつも併せて
ダメージが計算されます。
今回はそんなダメージ計算についてです。
まずダメージと言ってもゲームによって色々あります。
ライサント島やそのリスペクト元のマリオストーリーのように
単純計算で1~2桁ほどの計算しやすいもの
ポケモンのような乱数や急所でダメージが変動するもの
リアル調なゲームではダメージの数字は表示されずに
出血量やヒット音である程度のダメージ量を把握するものもあります。
表現は様々ですがこの辺りは製作者の好みで、
私は乱数などの運要素が少ない、計算結果が分かりやすいものが好みです。
では、今作っているロボット少女はどのようなダメージ計算をしているか?
簡単に説明すると敵を攻撃する「技」に
(基礎ダメージ) と (パラメータの参照値) が設定されています。
例えば腕力が100で
威力: 30 + [腕力 50%] の技を使用すると
30 + 100 x 50% = 80ダメージ を相手に与えます。
しかし実際のダメージはこれだけではなく、
威力を上げたり下げたりするスキルによってダメージが変わります。
その計算は複雑になりやすく、
正直、開発している側ですらよく分からなくこともあります。
自分が過去に複数人で開発をしたときには
この計算を深く考えずに設計してしまい、
細かい計算が分かりにくくて
ゲームバランスを調整する企画の方に迷惑をかけてしまったこともあります。
そこでロボット少女では
ダメージ計算にマウスオーバーすると
そのダメージがそのように計算されたかを確認できるようにしました。
細かい計算を常に画面に表示すると画面がうるさくなりますが、
マウスオーバーならその心配もありません。
たとえゲーム中に表示しなくても
デバッグやバランス調整に便利なので
ゲームを作る人はこうした表示ができるように作るのがオススメです。
↑私は DamageCalc クラスを作成して
ダメージ計算のすべてやその途中式の出力を出来るようにしています。
またこの計算クラスは戦闘以外でも使えて
装備画面で今使える技がどのくらいの威力が出るのか仮計算結果を出したりもしています。
ゲームを開発するときは
最初にこの辺りをきちんと整備しておくと後々楽になるかもしれません。
さて、ダメージの計算式を可視化して
数値に間違いがないかを確認しやすくしましたが、
ゲームを作っているとそれでも計算がうまく合わなくなることがあります。
今回起こったのは「多段ヒットの技」でした。
回転切りで相手を5回切りつけるのですが、
微妙な割り切れないダメージ…例えば 136ダメージとすると
ヒットするたびに 136 / 5 = 27.2ダメージ を与えると
微妙な誤差が出てしまいます。
しかも少数を画面に表示すると
見にくくなってしまうためあまりしたくない…
というわけでプログラム上では先ほどの DamageCalc クラスに
・ダメージ計算結果のn%の四捨五入した値を出す処理
・ダメージ計算結果からnの値を引いた値を出す処理
を実装し
1~4ヒット目→ (136 x 20%) =四捨五入=> 27
5ヒット目 → (136 - 27 x 4 ) => 28
のダメージが発生するようにしました。
これなら計算結果に少数が出てこないので
計算がズレる心配もありません。
プログラムをかじった人なら分かるかもしれませんが
この少数はすごく面倒なんですよね…
ダメージ計算のお話、いかがでしたか?
ちょっと開発者目線の話が多かったかもしれませんが
数字の不具合は気付きにくいので
開発者としてはとても気になってしまうんですよね。
もし、ゲーム開発者の方が見ていましたら参考になれば幸いです。
それでは、また次回!