オーバーフロー


クエストモードのダメージ処理やHP数値などは符号付整数型16ビットで管理されているようで、
数値が32768を越えるとオーバーフローし、マイナス領域に入ってしまう。(32767に1を足すと-32768)
例えば、レベルを上げて攻撃力を10000程度に上げ、防御力0の敵に対してジャンプ攻撃を仕掛け、
ダメージが32768を超えると本来なら死ぬはずの敵が死なない…という現象が起こる。
その敵は、あと30000程度のダメージを与えないと倒せなくなってしまう。
おそらくマイナスダメージが減算されたため(すなわちプラス処理されたので)、最大HPが増えたものと思われる。

プレイヤーキャラの最大体力も同じような理由でオーバーフローする。
守護つき武器防具を4つかませれば、素のHPが5000台でも32768まで到達可能。
そういった装備品を装備させ、最大体力を32768以上にした瞬間、画面下のHPバーがカラになってしまう。
だが、データ上では現在HPはそのまま残っているので、カラの状態で敵の攻撃を受けても死ぬことはない。

HPバーは最大体力と現在HPとの割合で長さを決めていると思われるので、
最大体力がマイナスになると割合計算の処理がおかしくなり、描画不能となるのが原因かと思われる。
いわゆる見かけ上カラになっているだけ。


しかし、最大体力オーバーフローには大きな弊害が伴う。
特に2番目はいろいろと面白いことに発展する。

1.HPバーが表示されないので、どの程度HPが残っているかの視認が出来なくなる

2.最大体力をオーバーフローさせた状態で現在HPを32768以上まで回復させるとバグる
 *このバグはホテル強制送還バグを参照




攻撃力上げすぎによる弊害


上記でも軽く触れたが、与えるダメージが32768を超えるとマイナスになってしまうので、敵を一撃で倒せなくなってしまう。
とくに小型敵は総じて防御力が低いので、こいつらを一撃で倒せなくなるとうっとうしくなる。

防御力が高い敵に対してはそう簡単にはオーバーしないが、ジャンプ攻撃やクリティカル倍率(×3など)などが発生すると割と容易に超えてしまうので、攻撃力の上げ過ぎはほどほどに。

また、ジャンプ攻撃するとたまにダメージが3桁程度に激減した
おそらく65536で1周しているらしい




最大体力が65536を超えると0に戻る


最大体力の合計が70000超えてるはずなのに5000とかに減るバグ。
これもオーバーフローの一種。
ゼウス・バッカス・マモン(いずれも×6)だけを付けた装備品4種を揃えればそこそこ早い段階で可能。

総括すると、ステータス画面の最大体力の数値表示は符号なし整数で、内部は符号付整数型で処理されている。




経験値のオーバーフロー


オートレベルアップをしていると、気がついたら総獲得経験値がオーバーフローしてマイナスになっていた。
どの数値を境にマイナスになったのかは分からなかったが、20億まではマイナスではなかったことを確認済み。
おそらく、総経験値が2147483648を超えたのでマイナスになったと思われる。
(32ビットにおける符号付整数型の最大値が2147483647。2147483647に1を足すと-2147483648になる)

というわけで、経験値の数値はHPとは違い32ビットで表現されているらしい。
よって、総数が4294967296を越えたらまた0スタートになる。

そのほか、気づいた点は以下のとおり。

  • マイナスでもレベルアップはしていく
  • マイナスでもレベルアップ頻度は徐々に減少
  • このままマイナス分を減らすと0に戻る
  • マイナス分が2117816を超えると永久レベルアップのバグが発生する
  • 0に戻ると、以後一切レベルアップしなくなる(永久レベルアップバグも止まる)


特に4つ目の永久レベルアップバグは、ゲーム進行に支障をきたすほどのバグ
  ▲永久レベルアップバグ


タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2014年10月26日 17:06