こんばんわ!Engineer Travellerです。
今回は全く持って航空会社と関係ありません! でも、今回のGPS問題でふと思い出したことがあり、結局は航空会社のトラブルとドラクエが結び付けることができます。
どうして結びつくのか?中身は情報系の話なのですが、文系でもわかるように解説してみました。ちょっとお付き合いください。
<<<目次>>>
- 有名なドラクエ4のバグ
平成生まれの人はあまり知らないと思いますが、ファミコン版のドラクエには結構いろいろなバグがありました。わかりやすいところだと、ドラクエ4にはこんなバグがありました。
リアルタイムでドラクエ4をやった人には非常に有名な裏技ですね。これがなぜ起きたのか見ていきましょう!
- 逃げる8回をするとどうなる?
まず初めに”逃げる8回をすると会心の一撃が必ず出る”裏技です。これは戦闘状態を記録しているデータに問題がありました。
このデータは8つの0と1から成り立っています(8ビットのデータです。)。そのうち、一番下の2ケタが逃げた回数を記録する部分になっていたようです。そして、4ケタ目には、常に会心の一撃が出るか出ないか判定される部分があって、ここが1だと会心の一撃が常に出るようになります。
ここで逃げた回数が増えていくとどうなるのか見ていきましょう!
こんな感じで、8回逃げるを繰り返すと4ケタ目が1になってしまいます。こうなってしまうと、8回逃げた後に攻撃をすると、常に会心の一撃が出るようになるわけです。
おそらく、普通の戦闘シーンであれば4回目で必ず逃げられるように設計していたので、ソフトの設計者さんは”逃げた回数”は最後の2ケタだけを割り当てたのだと思います。
しかし、ラスボスのような逃げられない相手は4回を超えて逃げるが失敗してしまい、どんどん数が溢れていった結果、4ケタ目などほかの関係ないところまで影響を及ぼしてしまったわけです。
- カジノでコインを838861枚買うと…..
そして、もう一つ。カジノで83万8861枚買うと1枚20ゴールドのはずなのに、4ゴールドで買えてしまう裏技です。これを使えばカジノで遊び放題ですし、重要アイテムと簡単に引き換えられます。さて、これはどうなっているのでしょうか??
コインの購入代金を扱うデータがあるのですが、こちらが24個の0と1(24ビット)で成り立っています。
これで表現できるのは16,777,216種類のデータになります。カウントが0からはじまるので、これがすべて1になる時は16,777,215ゴールド、そこに1ゴールド足すと……
このように、先頭に”1”が繰り上がって16,777,216が表現されるのですが、この代金管理は24個の0と1しか扱えないので、先頭の25個目のデータは無視(というかなくなってしまう)された状況になってしまいます。
ここで、1枚20ゴールドのコインを838,861枚買うといくらになるか?計算してみると……
なんだか見たような数字になってきました(笑)この数字を0と1で表現するとどうなるか???というと…..
このように、下3ケタが100、下25ケタ目に1がある状況になります。ですが、24ケタしか扱わないので、頭の”1”はなくなった状態になっていますので、ファミコン上では4ゴールドとなってしまい、大量のコインが爆安で買えてしまうわけです。
- GPSリセット問題との共通点
こうしてみると、ドラクエ4のバグとGPSリセット問題は非常に似ています。GPSリセット問題のそもそもの原因は……
10個の0と1で”週”を表現しているので、10個で表現しきれない数(1024以上)になるとケタが溢れて思いもしないことが起きることになります。ソフトウェアエンジニアは本来ここまで考えて設計しなければならないのですが、そこは人間ですからやはりどうしてもミスが出てきてしまい、このようにGPSリセットやドラクエ4のバグになって出てくるわけです。
- まとめ
エアラインネタからだいぶ外れてしまいましたが、JALのフライト遅延から見事にドラクエ4のバグまで結びつけることができました。エンジニアもいろいろと想定して設計はしているのですが、このようなミスがあることは寛大な目で見ていただければ嬉しいです。
参考サイト:ニコニコ大百科
8逃げとは? https://dic.nicovideo.jp/a/8%E9%80%83%E3%81%92
838861とは? https://dic.nicovideo.jp/a/838861
コメント