255階の調査結果




「255階」の調査結果について、以下に解説します。

とても長かった旅路のゴールを経て、「すべての謎」を、ついに解き明かすことができたのです!!



「255階」の「ドルアーガの塔」とは、一体、何だったのか?




「255階」のフロア解説のすべての内容が、「ゲームの仕様範囲」を超えているのは明らかであり、
複雑なコマンドを入力することで、呼び出す特殊なモードであったことから、
「デバッグコマンドの不具合を突いた裏技」で、ゲーム製作者の全く意図していない、
「バグの世界」であるという可能性が極めて高いという結論に至りました。



「デバッグコマンド」とは何か?




テレビゲームに限った話ではありませんが、コンピューターソフトが組み込まれている様々な製品には、
しばしば、このような秘密のコマンドが組み込まれていることがあります。

一般的には、サービスコマンドという表現が多く、開発担当者しか知り得ない門外不出の暗号やパスワードで、
製品の保守やメンテナンスに利用する目的が大半です。

今回のケースの場合、「ドルアーガの塔」のバグ潰しに利用されていた「デバッグコマンド」に、
「不具合があった」のにも関わらず、製品に組み込んだまま、市場に出荷したことが根本的な原因と推測されます。



「デバッグコマンド」が製品に組み込まれたまま、なぜ市場に出荷されたのか?




意図したものではなかった場合、品質管理が甘かったとしか表現のしようがありません。

その事例として、1988年に発売された、同社のファミコンソフト、「えりかとさとるの夢冒険」のエンディングに
仕掛けてあった隠しメッセージがとても有名です。

意図していた場合、「裏ドルアーガ」を遥かに超えた、「サプライズなおまけ」となりますが、
「フロア60」を超えて、遊べてしまうという現象を、開発者が把握していたのかどうか?、少々、疑問が残ります・・・。



「デバッグコマンド」の存在が、なぜ分かったのか?




どのような方法で、このような複雑なデバッグコマンドを発見することが出来たのでしょうか?

内部リークは、非常に考えずらいので、恐らくは、リバースエンジニアリングの可能性が非常に高いと思われます。

ファミコン黄金時代には、裏技を追い求めるプロがたくさんおり、様々な解析技術が確立されていたと考えられ、
その筋のプロが「大発見した」のだろうと考えられます。



バグが発動する背景




あくまでも管理人の個人的な見解であり、事実とは、かなり異なっている可能性があります。

  1. プログラムは、現在のフロア数を元に、動作している。恐らくは、常に監視していると考えられる。

  2. 現在のフロア数を元に、マップデータ、敵キャラクタの構成と数、宝物のデータ、パレットパターン、等の
    参照アドレスを計算して、必要なデータを持ってくる。

  3. ところが、デバックコマンドの不具合により、本来、プレイできるはずのないフロアに上がれたため、
    仕様上、参照できないはずのアドレスを読み込むことができてしまった。

  4. 参照されないはずのアドレスには、本来、ゲームをスタートさせるために必要なデータが格納されているわけではないが
    「たまたま使えてしまうデータの組み合わせ」が発生した。これが、「255階」「奇妙なフロア」なのだろう。

  5. この結果、データが使える場合は、「プレイ可能な奇妙なフロア」となり、
    データが使えない場合、「プレイ不可能なフロア」となった。

  6. 「プレイ不可能なフロア」が多い理由として、そもそも、ゲームに必要なデータが予め用意されているわけではないので、
    アドレス参照のズレの発生により、メモリの設計仕様の範囲を超えてしまい、プログラムが暴走した結果、
    異常動作や、リセットが多発したのではないだろうか?

    内部的には、プログラムの仕様を超えた演算をした、0で割り算をした、オーバーフローが発生した、
    永久ループに陥った、有効範囲外のアドレスを参照した、等の異常な状態が頻発した結果だったではないかと推測する。

  7. リセットがかかるのは、ファミコンが保有しているメモリ保護機能が作動した結果と考えられる。


プレイ不可能な面が多いのはなぜか?




「255階」は、ゲームの設計上、仕様範囲内にはなく、製作者の意図しない動作をした結果であるため、
全てのフロアをプレイできる仕様にはなっていないためです。

プレイできるフロアは、偶然の結果であり、プレイできないフロアは、プログラムが暴走し、
ゲームスタートに必要なデータを揃えることができないためだと推測されます。



敵キャラクターの色がおかしいのはなぜか?




プログラムが暴走し、参照すべき、「パレットパターンのアドレス」に、ズレが生じたためだと考えられます。



敵キャラクターの組み合わせがおかしいのはなぜか?




プログラムが暴走し、参照すべき、「フロアに登場する組み合わせを格納しているデータのアドレス」に、
ズレが生じたためだと考えられます。



敵キャラクターの挙動がおかしいのはなぜか?




敵キャラクターには、プログラム上、識別するための特殊な番号が割り当てられていると推測されます。

そうしないと、キャラクターを制御することが、出来ないと考えられます。

その推測に基づいて、出現位置にファイアーエレメントを残して消えるマジシャンを事例に考えると、
そもそも、プログラム上に、そのような仕様が存在するが、通常のフロアでは、使用されていなかっただけと考えられます。

他にも、出現位置にファイアーエレメントを残すゴーストや、ソーサラーの呪文を出すスライムがいましたが、
これも、同じ考え方になると思います。

つまり、「仕様」として、存在するのです・・・。

従って、これらの特殊な挙動をする敵キャラクターは、「255階」をきっかけに、出現したと考えられます。

もしかすると、「255階」にさえも、出現することのない、「隠された敵キャラクター」が、まだ潜伏しているのかもしれません・・・。

こればっかりは、「製作者」だけしか知りえない、さらに特殊な考え方になるのでしょう・・・。

いわゆる、「没キャラクター」なのかもしれません・・・?



サッカバスは、なぜ石のままなのか?




最初は石の状態で、扉を通過することで、サッカバスになりますが、フロア57以外では発動しないため、
それ以外のパラレルフロアでは、内部的にフラグが成立しないことにより、ずっと石のままの状態となります。



ドルアーガの挙動がおかしいのはなぜか?




一定の討伐順序により、ステップアップしながら敵キャラクターが出現する特殊演出用のプログラムが存在するものと考えられますが、
フロア59以外では発動しないため、それ以外のパラレルフロアでは、キャラクターが最初から出現しているものと考えられます。

データ上では、キャラクターの挙動から、ナイトと同じ扱いになっているものと推測されます。



イシターを通過しても、なぜ何も起きないのか?




イシターを通過することで、宝物を取得した音声が流れ、各種クリスタルロッドを返還する手続きに入りますが、
フロア60以外では発動しないため、それ以外のパラレルフロアでは、内部的にフラグが成立しないことにより、
何も起きない状態となっていると考えられます。しかし、剣で刺すとギルが死んでしまうことから、イシターである扱いは
変わらないようです。また、ギルは死にますが、ZAPにならないことも、プログラムが、常にフロア数を監視している
証拠であると考えられます。

フロア内に石がありますが、この石は、カイであると考えられます。フロア60以外では、カイに戻すための内部フラグは成立しないため、
ずっと石のままの状態となります。最初から出現しているクリスタルロッドは、グリーン、レッド、ブルーの3種類と考えられ、
本来、フラグの成立順序に従い、出現するものですが、キャラクタの出現定義があるため、最初から表示されてしまうのでしょう。

フロア内にある敵キャラの死体は、内部的に、使用されている何らかのキャラクタ定義が化けてしまい表示されている可能性があります。

死体をよく確認すると、左半分はいつも同じ形で、右半分はいつも同じ形ではないようです。ここで、左半分の形に注目してみると、
丸い玉の形状をしています。この特徴をよく確認した上で、フロア60を改めてプレイしてみると、これらの正体がはっきり分かりました。

この正体は、グリーンクリスタルロッドとレッドクリスタルロッドの先が点滅していることから、ロッドの先のパターン定義で、
ロッドの先を点滅する特殊なプログラムにより、使用されているものなのでしょう。

フロア60では、この特殊なプログラムが動作し、左半分だけを使用し、右半分を不要とするようになっており、フロア60以外では、
この条件に該当しないため、右半分がバグった状態で、左半分とセットで表示されていると考えられます。

パラレルフロア内では、ロッドの先を点滅する特殊なプログラムが動作しないため、最初から出現している3つのクリスタルロッドが、
すべて同じ色なのでしょう。

右半分のキャラクターが、ナイトだったり、マジシャンだったりするのは、イシターのいるパラレルフロアに入るまでの間、
どのようなフロアをプレイし、どのような敵キャラクターに遭遇したかによって、決まると考えられます。



宝箱の出し方は存在するのか?




「255階」では、ごく稀に宝箱が出現することがありますが、プログラムの暴走による、単なる偶然の一致により、
出現したものと考えられます。

そもそも、「255階」の宝箱の出し方は、データが存在せず、プログラムもされていないと推測されます。



宝物がバグっているのはなぜか?




プログラムが暴走し、参照すべき、「宝物のアドレス」に、ズレが生じたためだと考えられます。

その原因により、表示内容が完全に狂ってしまったものと推測されます。

しかし、ごく稀に、ゲーム本編と全く同じものが出てきますが、単なる偶然と思われます。



宝物に効果はあるのか?




「255階」の宝物に、ゲーム本編のような効果があるとは、非常に考えにくいです。

宝物の効果は、ゲーム本編の範囲内までで、「255階」の宝物には、何ら効果のない可能性が非常に高いと考えられます。

宝物を取得したことで、成立するフラグを参照して、条件分岐するプログラムがされていないためです。

考えられることは、本来、存在しない宝物の取得により、想定していないアドレスのデータを改ざんしてしまい、
ゲーム進行上の大切なフラグやデータがクリアされることで、これまで発動していた宝物の効果が消滅したり、
プレイする上で、重大な問題が発生する可能性があることです。



銀色のフロアは何なのか?




プログラムが暴走し、参照すべき、「ギルと背景を構成しているパレットパターンのアドレス」に、ズレが生じたためだと考えられます。



音楽がおかしいフロアは何なのか?




プログラムが暴走し、参照すべき、「音階やテンポのアドレス」に、ズレが生じたためだと考えられます。

音楽がおかしい現象は、銀色のフロアと一体となって発生する不具合であることから、「ギルと背景を構成しているパレットパターン」と
「音楽」が、格納されているアドレスには、何か深い関係があるのかもしれません。



迷路がバグらないのはなぜか?




「255階」は、ゲームの設計上、仕様範囲内にはなく、製作者の意図しない動作をした結果であるはずなのに、
通常のフロア内には存在しない迷路が、しっかりと生成されています。この理由として考えられるのは、アーケード版の開発者である
遠藤氏の公式な発言にあるように、「ドルアーガの塔」では、フロアのマップ情報をデータの数列としてもっているのではなく、
たった1バイトのデータから、特殊なアルゴリズムを用いて、迷路を生成しており、このプログラムの仕様が、大きく影響していると考えられます。

これは、アーケード版の話でしたが、ファミコン版でも同じ仕様であるとの話なので、現在のフロア数をベースにして、
迷路を生成していることは間違いなく、参照すべき、「迷路情報のアドレス」が、ズレていたとしても、1バイトの情報から、
迷路を生成できるため、バグらなかったと考えられます。

この仕様で、ファミコン版が開発されていなければ、「255階」は、存在することはできなかったことでしょう。

例外として、「フロア60」だけは、あのような特殊な迷路を生成するように、特別なパラメータを与えているようです。



敵キャラクターの組み合わせも、もしかすると・・・?




迷路を生成するために必要な情報量は、たったの1バイトでした。迷路に次いで、情報量が大きいものと言えば、
やはり、敵キャラクターの組み合わせではないでしょうか?

「255階」では、通常のフロア内で出現しない敵の組み合わせが、何通りもありました。これらの情報を
プログラムの構造上、データの数列として持っていると仮定した際、「255階」の各フロアの敵キャラクターの
組み合わせ情報は、かなり膨大な量となってしまい、ファミコンのカセットとしての許容量を超えてしまうのではないでしょうか・・・?

「255階」では、敵の組み合わせとして、ハードウェアリセットのかかる「フロア65」の系列を除外し、
「フロア41」から「フロア60」のパラレルフロアの20種類を入れると、合計、36種類のフロアをループしている構造となっていました。

これらのループしたフロアに出てくる敵キャラクターに注目すると、色の組み合わせの差異がありました。

色の組み合わせの違いは、「現在のフロア数」の違いしかありません・・・。

・・・あくまでも推測ですが、迷路を生成するアルゴリズムと同様に、「現在のフロア数」をパラメータとして与えると、
そのフロアに出現する敵の組み合わせを計算して、結果を返す仕組みになっているのではないでしょうか・・・?

恐らくは、内部的にデータが圧縮されていて、特殊なアルゴリズムにより、適切なデータを取り出すという類のものと
考えられますが、「ゲームの仕様範囲外」である、「255階」であっても、偶然にも、問題のないデータが取り出せれば、
ゲームとして、正常に動作するというものではないかと推測されます。

恐らくは、このような経緯により、不可解な敵キャラクターの組み合わせが生成できたのでしょう・・・。

推測の域でしかありませんが、限られたカセット容量の中に、必要な情報を詰め込むには、このような手段しか考えられません…。



フロア65の系列は、なぜプレイできないのか?




敵の組み合わせを決める仕組みが、迷路の生成と同様の方法であると仮定して、話を進めます。

「フロア 65」、「フロア A2 (102階)」、「フロア D9 (139階)」、「フロア H6 (176階)」、「フロア L3 (213階)」、「フロア P0 (250階)」の
6種類のフロアについては、ドラゴンの音楽が流れたまま、画面が停止して、プレイすることができませんでした。

停止した画面をよく確認すると、迷路は生成されており、タイマーもセットされていますが、作動せず、初期値の「20000」のままで停止しており、
ギルや扉、鍵がない状態で、ドラゴンの音楽が流れたままです。

この系列のフロアに、ドラゴンが出現するのは間違いないのでしょう。

しかし、ゲームがスタートできないということは、ドラゴンが登場するところまでは決めることができたものの、
このフロアに登場する敵キャラクターの組み合わせの最終的な計算結果に重大な問題が発生したものと考えられます。

推測の域でしかありませんが、結果として返された敵キャラクターの種類が非常に多く、内部的にオーバーフローを
起こしてしまったのではないでしょうか・・・?

この系列のフロアは、全て、ハードウェアリセットが発生しています。

リセットがかかって、ゲームのタイトル画面に戻ってしまうというレベルのエラーとは、全く異なります。

この現象は、ファミコンのカセットを本体に挿してから、電源を投入した直後と全く同じ扱いです。

つまり、ファミコンにとって、かなり深刻なエラーが発生していることを意味します。

ファミコンが保有しているメモリ保護機能が作動しているという解釈をするならば、
演算上の深刻なエラーが発生したと考えられ、この観点から考えても、
敵キャラクターの組み合わせを決める仕組みは、何らかのアルゴリズムにより、計算をしているものと推測しても、
ほぼ間違いないのではないでしょうか・・・?

単純に、データの数列を参照しているとは、非常に考えにくいです…。



パラレルフロアは、なぜ、フロア41から、フロア60までなのか?




通常のフロアは、「フロア1」から、「フロア60」までの60種類がありますが、「255階」に出てくるパラレルフロアが、
なぜ、「フロア41」から、「フロア60」までの20種類の範囲なのでしょうか?

他の事例として、「フロア21」から、「フロア40」までの20種類ということは、なぜ起こりえないのでしょうか?

これもまた、敵の組み合わせを決める仕組みが、迷路の生成と同様の方法であると仮定して、話を進めます。

恐らくは、開発者が準備した各フロアに登場する敵の組み合わせパターンを計算するために必要な「鍵」が、
一定の何らかの数値になっており、これが、大きく影響していると考えられます。

その「鍵」が別の数値になってしまうと、正しい敵の組み合わせパターンが出てこなくなる仕組みになっているのではないでしょうか・・・?

この「鍵」は、恐らく、複数の種類が存在し、アルゴリズムの中に、複雑に組み込まれていると考えられます。

「鍵」の内容としては、敵の組み合わせ、敵の種類、敵の数などが存在すると思われます。

このアルゴリズムに対して、「255階」のフロア数で、計算をさせると、「フロア41」から、「フロア60」までの範囲で
パラレルフロアが出現するパターンに、偶然にも、収まったのでしょう・・・。

とても不思議なのですが、これが、アルゴリズムの「妙」であり、「解」であったのではないでしょうか・・・。



すべての謎は解き明かされた!!




「255階」は、ゲームの設計上、仕様範囲内にはなく、製作者の意図しない動作をした結果ではありましたが、
開発上の設計思想の良さと、完成度の高いアルゴリズムの採用、一部の没キャラの出現が組み合わさって誕生したのでしょう・・・。

「偶然だった」のか、それとも、「意図したもの」だったのかは、今となっては、定かではありませんが、
「255階」に夢中になったプレイヤーを数多く誕生させた、ナムコの開発スタッフの技術力の高さは、本当に素晴らしいものだと思います。


・・・こうして、とても長かった旅路は、「感動のゴール」を迎えました。

ついに、「255階」「完全制覇」したのです!!


・・・本当に、長い長い旅路でした・・・。

ここまでお読み下さった皆様とも、お別れの時間がやって参りました・・・。

今回のお話は、「エピローグ」で、いよいよ最後となります・・・。




メインページに戻る




inserted by FC2 system