まず、int
の大きさが何だったのかという所から考える必要があります。一般的なビットとデータモデルそれぞれのint
とlong
を見てみましょう。
ビット | モデル | int サイズ | long サイズ |
---|
16 | - | 16 | 32 |
32 | LP32 | 16 | 32 |
32 | ILP32 | 32 | 32 |
64 | LLP64 | 32 | 32 |
64 | LP64 | 32 | 64 |
64 | ILP64 | 64 | 64 |
int
からlong
へ変更することで修正できたいと言うことは、この二つが異なるサイズである必要があり、この中でそうなっているのはLP32とLP64のみです。一般的なx86(32ビット)環境でのよくあるOS(WindowsやLinux)ではILP32なので、LP32はちょっと考えにくいです。そうなるとLP64となりますが、これはx86_64(64ビット)環境のLinuxやMacでのデータモデルですので、十分あり得ます。また、今時のゲーム機(スマホ含む)はARM64なので、この場合でもLP64でおかしくないです。
さてint
は32ビット符号付き整数だろうということですが、2の補数でない環境はほぼないので、その大きさは -2,147,483,647 ~ 2,147,483,647 です。20億ぐらいまではオーバーフローしません。ゲームで数が大きいステータスと言えばHPやダメージ量ですが、20億とか普通にたたき出すゲームってディスガイアぐらいでしょうか?いやいや、最近のソシャゲはインフレーション(インフレ)が激しいと聞きます(とあるガンダムのやつとか)ので、すぐに億、兆、京、富岳と大きくなっていくんでしょう。
あ、ここまで来たら気づきましたね。所詮、64ビットにしたところで -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 しか扱えません。たったの900京ぐらいまでしか扱えないのです。ソシャゲじゃないディスガイア6ですら9999京ダメージ出せるようになるそうですから、インフレしないと課金されないようなソシャゲでは京なんて単位では全然足りません。long
にしたら全て解決とかちゃんちゃらおかしいです。そんなこというやつは日本一ソフトウェアにでも出向させて、プリニーからやり直しさせるべきですね。
ここは発想を変えるべきです。かつて、ドラクエでは力とかの最大値が255でした。そう、ステータスなど8ビットで十分だったのです。ダメージだって32,767を越えると逆に回復するのが普通だったのです。それでも十分遊べたのです。つまり、(ディスガイアのようなとち狂ったゲームシステムでもない限り)int
の大きさはゲームとしては十分であり、それ以上必要になること自体、ゲーム設計のどこかがおかしいといえるのです。
さて、今時のゲーム業界で儲けるにはソシャゲしかありません。ソシャゲにはインフレがつきものです。そう、廃課金者達から金を巻き上げるには、以前よりちょっと強いやつをガチャに出し続けるしかないのです。毎週倍強い奴を出し続けると一年50週で2の50乗倍にステータスは跳ね上がります。long
の限界まであと13週しかありません。結局、long
で作っても1年とちょっとしか持たないのです。いや、1年ぐらいで消えていくこと前提のソシャゲならlong
で十分とも言えます。
しかし、やはりパズドラのように長く続く物を作りたいです。そこで、私が提案するのがステータスのデノミネーション(デノミ)です。
ソシャゲにおいてインフレは止められません。例えば、曲芸士で7倍なんて数字をだしたら、次はより大きい数の倍率のキャラを用意しないとガチャは引いてくれません。そうやっていくと数はどんどん大きくなっていきます。そこで、大きすぎる値はデノミにすればいいのです。それは弱体化だ、ナーフだ、と炎上するのではと思ってませんか?違います。敵もデノミになるので、相対的に強さが変わりません。ただ、単位が変わるだけです。例えば、日本の円について100分の1のデノミをしたとしましょう。1万円札を明日から100円札と呼びことになりますが、その価値はかわりません。買えるパンの数も変わりません。ただ、見た目の数値だけが変わるのがデノミです。
ユーザーには何も影響しませんが、ゲームの内部は劇的に違います。いままでギリギリint
で計算できていて、いつおーばーフローしてもおかしくないといった物が余裕で計算できるようになります。わざわざlong
に直すなんていらなかったのです。そう、最初に言っていたオーバーフローの対応も、long
にするのではなく、ステータスをデノミすることで対応できたということです。
ということで私の提案です。オーバーフローを気にする前に、デノミネーション可能な設計にすべきです。デノミこそが、ソシャゲにおけるインフレを解決する画期的な方法になるに違いありません。そのことに気づかないA君は、とりあえずアイテム神2から最強装備を盗んでから、ゲームにおけるデータサイズについて語ってください。
そうそう、最後にint
ではなくlong
にした場合ですが、今の私の環境は64ビットのWindowsであり、LLP64なので、「何も変わらない」とだけ言っておきます。