大きな数字を扱う

先の記事の言及先では、『ヴァルキリープロファイル』というRPGが紹介されていた。私はこのゲームを遊んだことがないのだが、なかなか派手な数値の飛び交うゲームのようだ。

どうでもいいことだが、大きな数値の飛び交うゲームのことを巷では、数値インフレゲームとか呼ぶらしい。インフレと呼ばれているからには、あまりいいイメージを抱かれていないのだろうが、大きな数値を扱うゲームだからといって、そのままクソゲー化するわけではないだろう。

数値は道具である。使い方次第。ということで、Desigeonでは数値の制限を緩くしている。わざわざ倍精度の浮動小数点数をメインの変数に選択したのだから、幅の広さを利用しない手はない。

(…といっても無論、私が巨大数値ゲームの制作を推奨しているわけではない)


そんなわけで、Desigeonサンプルゲームにある「ロングソード」のダメージを強くしてみた。元はウィザードリィと同じ設定なので、本来のダメージは、1〜8+ストレングスボーナスであります。

確かに素晴らしいインフレぶり。パン一個が一兆ライヒスマルクだった時代がかすみますな。

このとてつもないロングソードでモンスターを攻撃してみると、以下のようになる。

このままだと、爽快感もへったくれもない。読み方さえぴんと来ない数値が並んでいる。とにかく数値がでかすぎる。読み取れない数値が出現すると、人間は読むのをやめてしまう。ゲームの中で、理解できない数値を連続して表示することは、プレイヤーの脳を飽きさせる原因になるかもしれない。

しかし、どうにかして、数値の大きいゲームを遊べるようにできないだろうか。

以下のように、表示上の工夫を施してみてはどうだろう。

ををっ、これなら一目瞭然!

どうせ我々は普段から、「ベギラゴンは100くらいのダメージ」とか「ティルトウェイトは平均60」とかその程度のアバウトな会話をかわしているのだ。表示を人間の脳みそに合わせたところでそれほど問題は起きまい。

で、概数で表現するとき、我々の口から漏れ出る数値はせいぜい二桁ぶん程度で、残りの細かいケタは、脳内でゼロで埋められる運命にある。だからこの改造においても、最初の二桁以外はゼロで埋めて表示している。

この方法を用いると、「メラのダメージはなぜ10なのか?」(http://tkido.blog43.fc2.com/blog-entry-104.html)にさらに応用を利かせることができるかもしれない(想像だけど)。たとえば、ダメージ9999までは細かい数値を表示して、1万を超えるといきなり「1万超のダメージ!」みたいに概数で表示される。すると、「ああオレのキャラって成長したんだなぁ」とプレイヤーが実感してくれるかもしれない。

パラメータ欄のダメージも、以下のように表示される。

最低を10として、最大で1京のダメージ。この幅の広さたるや恐るべし。この設定で10ダメージとやらを一度でいいから見てみたい。ニンジャのクリティカルヒットより価値のある10ダメージ。

さらに、以下のようにダメージが小さいと………

ああっ!たったの1800兆しか与えられない!

ダメージが小さいと以下のように、たとえコボルドのようなザコモンスターといえど生き残ってしまい、ヒットポイントが480兆くらいは残ってしまう。

あと一撃で倒せる!


一応補足しておくと、480や2300という数値に「兆」をつけているわけではなくて、ちゃんと一の位までダメージの計算は行っている。ただ、表示上略しているだけで。

ただし1無量大数(10の68乗)の10000倍に達すると、「巨大すぎ」みたいな文字列を返すようになっているので、実質的に役に立たなくなる。それ以上は面倒くさいから、単位を乱発するのをやめている。

あと、だいたい16桁を超えると、倍精度浮動小数点数は精度が失われてしまうので、一の位、十の位………と徐々に値が切り捨てられ、正しい計算が行われなくなっていく。

しかし、一の位や十の位の計算が行われないことはこの場合、たいした問題にはならない。巨大数は、使いたければ積極的に使っていくべきだろう。

…もちろん、面白いゲームができるかどうかは、また別の要素が絡んでくるだろうからなんとも言えない。そこまで責任は持てない。


さて……、これで数字のマジシャンに1兆歩くらいは近づけたでしょうかねぇ。