オーバーフローによる不具合の例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/25 06:58 UTC 版)
「カウンターストップ」の記事における「オーバーフローによる不具合の例」の解説
先述した「特定の値を超えた場合にその特定の値に再設定する」という処理を行わないことによって不具合が発生する例。 『スーパーマリオブラザーズ』の無限増殖 残機数が127(=27-1=11111112)人を超えると残機がマイナスとみなされ、ミスをすると即座にゲームオーバーになってしまう(この現象は多くのFC版残機制ゲームで発生するため他にもゼビウスやグラディウスなど周回プレイできるゲームでは注意が必要である)。 リメイク版の『スーパーマリオコレクション』では残機上限が128人となり、1ミスで即ゲームオーバーということがなくなった。 『グラディウスII -GOFERの野望-』 残機がカンストし、内部的に「-1」になると(ミスしていなくても)即座にゲームオーバーになる。 このような不具合の防止のため、忍者くんシリーズや『レインボーアイランド』などのように、表示可能な残機数以上には増えないように制限している場合もある。 『ドラゴンクエストIV 導かれし者たち』 ファミコン版には以下の2つの不具合が知られている。「838861」 カジノのコインの購入金額を計算する領域が24ビットで確保されており、購入金額が24ビットの上限である16,777,216ゴールドを超える値の場合にオーバーフローを起こして値が切り捨てられる。このため第3章(1枚200ゴールド)ではコイン83887枚を184ゴールド(83,887×200-16,777,216=184)、第5章(1枚20ゴールド)ではコイン838861枚を4ゴールド(838,861×20-16,777,216=4)で購入できる。なお2章では、コイン1枚の金額が10ゴールドと安いためオーバーフローは発生しない。 なお、リメイク版ではこのバグは修正されているが移民の街のカジノに登場する移民のセリフで言及されている。 「8逃げ」 一つの戦闘で逃げることに3回失敗した場合、4回目で必ず逃げられるようになっている。このために「にげる」コマンドを使用した回数を記録したフラグが内部でカウントされているのだが、ボスキャラクターなど逃げられない敵に対して4回以上「にげる」コマンドを使用した場合にオーバーフローを起こし、戦闘中の各種の状態に影響を及ぼす。 一例として「8回逃げた時点で呪文『パルプンテ』の『力がみなぎってきた』のフラグとなる23のビットがONとなってしまい、バイキルトがかかっていないキャラクターの攻撃がすべて会心の一撃となる」という物があり、そのためこのオーバーフローによるバトル中の状態の変化現象の総称として「8逃げ」が使われることもある。 この他にも、「アイテム『時の砂』を使用済みの状態でボス戦を開始して4回逃げれば使用可能な状態に戻るとともに会心の一撃が乱発される状態に移行する(2進数で0111→1000となり、22のビットがOFF、23のビットがONになるため)」「128回逃げると『ふしぎなきり』が発生し呪文が全てかき消されるようになる(27のビットで『ふしぎなきり』の発生状態を管理しているため)」といった物もある。 『シムシティ』 人口が居住しないユニット(警察、消防、港、空港)は、【一つ以上置いてある】ことがCAPITAL以上の人口において需要がプラスになる必要条件の一つである。 例えば警察が256ユニット存在していると、(存在数が8ビット符号なし整数値で管理されており0となるため)存在していないものと判断されて街が一気に衰退してしまう。更にもう1ユニット建てたとき、元に戻る。
※この「オーバーフローによる不具合の例」の解説は、「カウンターストップ」の解説の一部です。
「オーバーフローによる不具合の例」を含む「カウンターストップ」の記事については、「カウンターストップ」の概要を参照ください。
- オーバーフローによる不具合の例のページへのリンク