スコア(内部データ)


スコア(内部データ)

 妖々夢のスコアは1の位と10の位以降は別個にデータ保管されているようで、内部的なスコアのデータ(4バイト)×10+「コンティニュー回数」が普段見る「スコア」として表示されているようです。 紅魔郷はそのまま4バイトのスコアが置かれているようです。永夜抄以降はリプレイデータの最後尾にべた書きで(メモ帳でも見れます)リザルトの内容全てが書いてあるのでリプレイを解析しなくともプレーデータを取得することができます。 なので永夜抄以降のスコアデータの扱いはわかりませんが、これに関連してそうな星蓮船のスコアバグのお話。

 星蓮船のスコアが約21.4億を超えた付近から表示バグが起こるのはスコアに携わる人なら知っているでしょう。 紅や妖でわかっている4バイト分のスコアデータの領域、4バイトは一般的に -2147483648 ~ +2147483647 の数字を表せます。 4バイトは32ビットです、32ビットOSだの64ビットOSだのはシステムが使う数字の範囲はこれが基本ですよ的なやつです、 扱うデータ量が増えてきて性能も上がったので64ビットが主流になりましたね。突っ込んで書くとガチ勢の人から怒られそうなので適当にggってください。
 話が逸れましたが星蓮船のスコアバグの基点はこの+2147483647点です。この次の+2147483648点は32ビット数値では-2147483648として認識されます。 よって星蓮船のスコアバグで数字が減りだす、のではなくプラスからマイナスに飛んでプラスに増えていく、が正しいことになります。 数字左上の×印はマイナスを表していそうですね。このためスコアバグが起こると本来コンテニューでしか動かない1の値がずれることになります。

 妖でこれが発生しないのは妖のスコアデータが10の値までしか保存されていないから、 つまり -21474836480 ~ +21474836470(214億) まで管理できるからです。もしこの値を超えれば星のようなスコアバグかエラー落ちかカンストかの現象が見られるのかもしれませんが、 妖のスコア表記は9999999990(99億)でカンストするようなので真偽は不明です。内部的には計測されている場合もありますから。 紅は1倍でスコアが入っているので+2147483648以上でなんらかのバグが見られるかもしれませんがこちらも表記は10億手前で止まるようです。 地まではこの現状が起こらないところをみると星蓮船から仕組みを変えちゃったのかなと推測できますね、神以降はもとの10倍格納に戻したのか、 32ビットではなく64ビット(8バイト)分のデータを格納できるようにしたのかは定かではありませんが対策されています。

 星蓮船のリプレイ上のデータはバグらないのでこちらは最初から4バイトよりも広い値を確保していたのか、ここは10倍格納でプレー画面の表示だけを1倍にしてみましたなのか、 とりあえずこちらは30億でもきちんと30億と表示されます。


   
written by pndsng   2015/01/22