【HP無限バグ】

Last-modified: 2023-09-18 (月) 11:24:16

DQ5(SFC版)

敵の残りHPが2047になるとそれ以上減らなくなり、倒すことができなくなる、というとんでもないバグ。
被害の報告自体はDQ5発売当初からされていたと思われるが、原因が知られるようになったのは、【ひとしこのみ】の発見と同様、ネットの時代になって本格的な解析が行われてからである。
 
原因は、MPに無限があるようにHPにも無限を設定しようとしていた事による。
おそらく当初負けイベントなどではHP無限の敵を出すことで勝てなくする予定だったのだろうが、何らかの理由により取りやめになって旧作と同様に自動回復で不死身の敵に挑む構図にした際に、この無限設定だけが消すのを忘れられて残ってしまったものと考えられている。
 
当然システム上では「無限」と言う数字は存在しないので、何らかの方法で死なない処理を施す必要があるわけだが、本作ではその方法が、「戦闘中のHPがこの数値である場合は、ダメージを受けても減算しない」という処理を加えるものとなっている。
こうして擬似的な無限を作る訳だが、本作のHPは「2047」という数字がそれに該当する。
当然だが、最大HPが2046以下の敵は戦闘中にHPが2047になることは無いので、このバグを起こし得るのは元々のHPが2048以上ある敵に限られる。
つまり、HP無限バグ予備軍は、【ブオーン】【ゲマ】(ボブルの塔)、【イブール】【ミルドラース】(変身後)、【エスターク】の5体。
ちなみにエスタークのみHP9000、それ以外はHP4500。この数値については後述。
 
唯一の救いは、HPの無限化は「減らない」ことのみ働くので、回復方向は普通に受け付けるし、したがって2047を超えた時点で無限化状態も解除されるのだが、DQ5では運悪くDQ3やDQ4でできた「敵に【ホイミ】をかける」「【しゅくふくのつえ】で敵を殴る」が不可能なうえ、自動回復・回復呪文持ちが予備軍の中にいないので、この方法で解決できるのは戦闘中に【めいそう】で回復するミルドラース第二形態のみ。
それ以外の敵でHPが無限になってしまうとどうしようもない。
一応、【パルプンテ】の敵味方全回復や、直後のターンに【ときのすな】を使うことでバグを抜け出せることが確認されているが、そもそも通常プレイではバグに引っかかっている事に気づくことが困難である。
いくらダメージを与えても倒せない敵を相手に、最後はジリ貧で全滅することになるだろう。
絶対に回避したいなら与えたダメージを覚えておき、与えたダメージ量が2453(最大HP4500組)か6953(エスターク)に近づいたら一発で危険区間を超えるダメージを叩きこむように調節すること。 
 
なお、HPがキッチリ2047になるなどそうそう起こり得ない事のようにも思えるが、1回の攻撃で100前後のダメージを与えた場合でも、一戦につき単純計算で1/100の確率でHP2047を踏む事になる。
スカラで固くなったブオーンをチマチマ削ったりすると、より危険である。
さらに該当する敵が5体もいるのだから、おそらくはプレイヤー全体の数パーセント、つまり十万人単位のプレイヤーがそれと知らずにこのバグにハマり、涙を飲んだものと思われる。
また、毒針の1ダメージの累積だけでエスタークを倒したと主張するプレイが、この仕様を理由に明確に否定された事例も存在する。
 
【イブールのほん】を持っていると(または、持っていないと)イブールが無敵になって倒せない」などというデマが一部で流れた直接の原因であり、ブオーンが強ボスとして名を馳せたのも、案外このバグにその理由の一端があるのかもしれない。
それでもミルドラースが定期的にめいそうをするよう設定したことは不幸中の幸いであった。
ラスボスが倒せないバグという事であったなら、もっと早くにDQ史上最悪バグとして名を残していたかもしれない。
 
余談だが、DQ5の中ボス戦闘曲の曲名は【不死身の敵に挑む】
このバグにより本当にそうなってしまう事があるのだから皮肉である。

「2047」という数値が選ばれた理由

「2047」という数値、これを16進数に変換すると「7FF」になる。
これは11ビットで扱える最大数。SFC版DQ5では、実はデータ格納だとこの値までしかHPを扱えない。
守備力やMPの511と同じく、ビット上で扱いうる最大値を無限化の対象に選んでいる。
 
ではなぜそれ以上のHPを持つモンスターが登場しているのか。
DQ5ではFC版の時に使えた数値1023のその倍の2046までを使用しており、「モンスター出現時にHP2046だった場合HP4500に変換する」という特殊処理を行っているのだ。
同様に「HP2045の敵はHP9000に変換する」処理もある。また該当モンスターはいないが、HP2044の場合はHP3000に変換される。
これらはモンスター出現時にのみ適用されるので、エスタークのHPを削ったら偶然2045になったのでHP9000に回復された、という事態にはならない。
しかしHP2047の無限設定は現在HPを参照しているのでバグが起きてしまう。
DQ4のデスピサロのようにHP2000程度の形態をいくつも用意するか、あるいは変換設定と同様に出現時点でのHPの数値のみを参照するか、モンスターのコードの方に無敵設定を付加していれば防げた事態であった。
おそらく開発途中でこの方法で擬似的に高HPのモンスターを出せると気が付き実行したのだろうが、HP2047という数値に途中で引っかかってしまう可能性を忘れていたのだろう。
実際HP2046はHP4500、HP2045はHP9000、HP2044はHP3000と、変換するHPの数値が順番通りでなく、またHP3000設定が一切使われていないあたり、途中で思いついて急ごしらえで実装した感がある。
 
ちなみに、幼年期のゲマとイベントボス版【キラーパンサー】はHP1024に設定されている(バリア解除前の【ジャミ】はHP2000)。
どちらも特殊なイベントバトルなので、当初はDQ4と同様HPの最大値が1023で、こちらの数値を無限設定として考えていたのかもしれない。
実際は自動回復100で擬似的に無敵を表現しているだけなので、強引に倒すことが可能(ストーリーは変わらない)。