「オーバーフローバグ」の編集履歴(バックアップ)一覧はこちら

オーバーフローバグ」(2014/10/26 (日) 17:06:47) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*オーバーフロー クエストモードのダメージ処理や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以上まで回復させるとバグる  *このバグは[[ホテル強制送還バグ]]を参照 ---- *最大体力が65536を超えると0に戻る 最大体力の合計が70000超えてるはずなのに5000とかに減るバグ。 これもオーバーフローの一種。 ゼウス・バッカス・マモン(いずれも×6)だけを付けた装備品4種を揃えればそこそこ早い段階で可能。 総括すると、ステータス画面の最大体力の数値表示は符号なし整数で、内部は符号付整数型で処理されている。 ---- *経験値のオーバーフロー オートレベルアップをしていると、気がついたら総獲得経験値がオーバーフローしてマイナスになっていた。 どの数値を境にマイナスになったのかは分からなかったが、20億まではマイナスではなかったことを確認済み。 おそらく、総経験値が2147483648を超えたのでマイナスになったと思われる。 &color(#d9333f){(32ビットにおける符号付整数型の最大値が2147483647。2147483647に1を足すと-2147483648になる)} というわけで、経験値の数値はHPとは違い32ビットで表現されているらしい。 よって、総数が4294967296を越えたらまた0スタートになる。 そのほか、気づいた点は以下のとおり。 -マイナスでもレベルアップはしていく -マイナスでもレベルアップ頻度は徐々に減少 -このままマイナス分を減らすと0に戻る -マイナス分が2117816を超えると&color(#d9333f){永久レベルアップ}のバグが発生する -0に戻ると、以後一切レベルアップしなくなる(永久レベルアップバグも止まる) 特に4つ目の永久レベルアップバグは、ゲーム進行に支障をきたすほどのバグ   ▲[[永久レベルアップバグ]] ----
*オーバーフロー クエストモードのダメージ処理や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など)などが発生すると割と容易に超えてしまうので、攻撃力の上げ過ぎはほどほどに。 &color(#d9333f){また、ジャンプ攻撃するとたまにダメージが3桁程度に激減した} &color(#d9333f){おそらく65536で1周しているらしい} ---- *最大体力が65536を超えると0に戻る 最大体力の合計が70000超えてるはずなのに5000とかに減るバグ。 これもオーバーフローの一種。 ゼウス・バッカス・マモン(いずれも×6)だけを付けた装備品4種を揃えればそこそこ早い段階で可能。 総括すると、ステータス画面の最大体力の数値表示は符号なし整数で、内部は符号付整数型で処理されている。 ---- *経験値のオーバーフロー オートレベルアップをしていると、気がついたら総獲得経験値がオーバーフローしてマイナスになっていた。 どの数値を境にマイナスになったのかは分からなかったが、20億まではマイナスではなかったことを確認済み。 おそらく、総経験値が2147483648を超えたのでマイナスになったと思われる。 &color(#d9333f){(32ビットにおける符号付整数型の最大値が2147483647。2147483647に1を足すと-2147483648になる)} というわけで、経験値の数値はHPとは違い32ビットで表現されているらしい。 よって、総数が4294967296を越えたらまた0スタートになる。 そのほか、気づいた点は以下のとおり。 -マイナスでもレベルアップはしていく -マイナスでもレベルアップ頻度は徐々に減少 -このままマイナス分を減らすと0に戻る -マイナス分が2117816を超えると&color(#d9333f){永久レベルアップ}のバグが発生する -0に戻ると、以後一切レベルアップしなくなる(永久レベルアップバグも止まる) 特に4つ目の永久レベルアップバグは、ゲーム進行に支障をきたすほどのバグ   ▲[[永久レベルアップバグ]] ----

表示オプション

横に並べて表示:
変化行の前後のみ表示: