地下の本質

キー操作バグやスイッチで地下がかわることがわかり、ロボットの挙動が説明できるようになりました。
じゃあそれらが起こる時ロボットが「実際に」みている「データ」は何なのでしょうか。

それを調べるためにゲーム中にメインメモリを覗いてみます。

メモリの中身を見られるエミュとしてnnnesterJ(0.22c)を使っています。
持っている人はメニューから「Ext→拡張ウィンドウ→メインメモリビューワー」をクリックしてください。
ud00.PNG
心ときめく数字の羅列が出現しました。ここからは数字は16進数で話します。
どうやら000000から0007ffまでがメインメモリといわれるようです。
このどこかにマップを数字化したものがあるはず。


ud01.PNG
どうやらここ(000200)から始まっているような気がします。(図は1面)
通常面なので横幅は(10進数で)28マスと考えると1段目が00021Bまで。横向きに並んでいるみたいで、00がブランク、07が金塊、01がレンガ、03がハシゴのようです。

オブジェクトの番号はエディットでAを押した時の順番とピタリと合いそうです。
ブランク=00
レンガ=01
コンクリ=02
はしご=03
バー=04
落とし穴=05
脱出ハシゴ=06
金塊=07
ロボット=08
ランナー=09
こんな感じと予想しますが、脱出ハシゴだけは200〜には書かれていないようです。
┌────────────────────────────┐
│××××▲×××××××××××××××××××××××│×:00
│田田田田田田田#田田田田田田田×××××××××××××│田:01
│×××××××#−−−−−−−−−−×××××▲××××│■:02
│×××××××#××××田田#×××田田田田田田田#田田│#:03
│×××××員×#××××田田#×××××××▲員××××│−:04
│田田#田田田田田××××田田田田田田田田#田田田田田田田│凹:05
│××#×××××××××××員×××××#×××××××│己:06?
│田田田田田田田田田#田田田田田田田田田田#×××××××│▲:07
│×××××××××#××××××××××#×××××××│員:08
│×××××××▲×#−−−−−−−−−−#×××▲×××│♀:09
│××××#田田田田田田×××××××××田田田田田田田#│
│××××#×××××♀××××××▲×××××××××#│
│田田田田田田田田田田田田田田田田田田田田田田田田田田田田│
└────────────────────────────┘
ud02.PNG
↑200〜380の列が1面なのが素人目にもはっきりとわかる。

000387が1面のいちばん右下のレンガにあたるようです。その下の段はコンクリ(02)かとおもったらなんと00が並んでいます。画面左右のコンクリもメモリのこの付近にはありません。
最下段のコンクリの変わりに000388以降を14段目オブジェクトとしてみなすとすると、ロボットが床を見ないのもうなずける。エディットではここに何かデータが入って今まで考えた地下になる。そう考えました。

全然違いました。

388からはエディット画面で配置したオブジェクトが入るのです。
エディット画面で左上にバーを配置すると04になりました。
これでは地下がキー操作バグなどで変化する説明になりません。
別のところに地下が描かれていると考えるべきでしょう。

では逆に、キー操作の情報はどこにあるのでしょうか。

探すとすぐ見つかりました。000006。1行目です。
十字キー上=08
十字キー下=04
十字キー左=02
十字キー右=01
Aボタン=80
Bボタン=40
セレクトボタン=20
スタートボタン=10
1ビットにキーがひとつ割り当てられています。んで同時押しは加算される、と。



ではこれがどう地下とかかわっているのでしょうか。
実験。
エディット画面に入り、いきなりスタートを押し、メモリビューワーを開きます。
そして地下とメモリを見比べます。地下のAがキー操作バグで、メモリの000006がキー入力で…

地下1階 × × × × × × × ×

ud03.PNG
覚えていますか、Cの初期状態とDの初期状態。
C=コンクリ、D=バーです。

ここで気づいた方もいるでしょうか?



エディット画面に戻り、左下にちょろっと配置します。

│♀▲×
│田田×
└───

スタートし、金塊を取ります。右スイッチはコンクリに、中央スイッチはバーになる位置でグラフィック変化が起きました。ではメモリをみます。
ud04.PNG

地下1階 × × × × × × × × × × ×

これは愉快。
たくさん笑わせてもらいました。
グラフィックの座標指定やなにかをオブジェクトとして捕らえてます。
どうやら05以上(ffまで)はすべて落とし穴として計算されることもわかりました。

☆十字キーの同時押しは加算なので右下=5、右上=9。そして計算上は左+右=3、左+右+下=7であることも追記しておきます。(nnnesterJでは左右あるいは上下の同時押しは00になりますが、エミュによっては左右同時押しを認識します。また、キーボードによっては3つ同時押しを認識できないものがあります)



じゃあ次は地下2階と5段目オブジェクトの関係です。
左8マスは5段目のコピーで、その右からはコンクリでしたね。

× × × × × × ←下から5段目
× × × × × × × × × × × × × ×
× × × × × × × × × × × × × ×
× × × × × × × × × × × × × ×
× × × × × × × × × × × × × ×
× × × × × × × × ←地下1階
←地下2階

なぜ8の右は全部コンクリなんでしょう。
…そういえば通常面とエディット面ではヨコ幅が違いますね。
先にエディット面をスタートした時のメモリの様子からチェックしてみましょう。
適当にエディットしてメモリをみます。

┌──────────────┐
│#×××××××××××#−│
│#××××××××××■#−│
│#×××××××××■×#−│
│#××××××××■××#−│
│#×××××××■×××#−│
│#××××××■××××#−│
│#×××××■×××××#−│
│#××××■×♀××××#−│
│#×××■××田田田田田#−│
│#××■×××田田田田田#−│
│#×■×××××××××#−│
│#■××××××××××#−│
│■×××××××××××#−│
└──────────────┘
ud05.PNG
000300あたりが5段目です。
画面外が02で埋め尽くされているのがわかるでしょうか。
どうやらメモリ上ではこうなっているようです。
┌────────────────────────────┐
│#×××××××××××#−■■■■■■■■■■■■■■│
│#××××××××××■#−■■■■■■■■■■■■■■│
│#×××××××××■×#−■■■■■■■■■■■■■■│
│#××××××××■××#−■■■■■■■■■■■■■■│
│#×××××××■×××#−■■■■■■■■■■■■■■│
│#××××××■××××#−■■■■■■■■■■■■■■│
│#×××××■×××××#−■■■■■■■■■■■■■■│
│#××××■×♀××××#−■■■■■■■■■■■■■■│
│#×××■××田田田田田#−■■■■■■■■■■■■■■│
│#××■×××田田田田田#−■■■■■■■■■■■■■■│
│#×■×××××××××#−■■■■■■■■■■■■■■│
│#■××××××××××#−■■■■■■■■■■■■■■│
│■×××××××××××#−■■■■■■■■■■■■■■│
└────────────────────────────┘

┌────────────────────────────┐
│#×××××××××××#−■■■■■■■■■■■■■■│
│#××××××××××■#−■■■■■■■■■■■■■■│
│#×××××××××■×#−■■■■■■■■■■■■■■│
│#××××××××■××#−■■■■■■■■■■■■■■│
│#×××××××■×××#−■■■■■■■■■■■■■■│
│#××××××■××××#−■■■■■■■■■■■■■■│
│#×××××■×××××#−■■■■■■■■■■■■■■│
│#××××■×♀××××#−■■■■■■■■■■■■■■│
│#×××■××田田田田田#−■■■■■■■■■■■■■■│
│#××■×××田田田田田#−■■■■■■■■■■■■■■│
│#×■×××××××××#−■■■■■■■■■■■■■■│
│#■××××××××××#−■■■■■■■■■■■■■■│
│■×××××××××××#−■■■■■■■■■■■■■■│
└────────────────────────────┘
×田田田田田#−■■■■■■──────────────┘←地下2階
└■■■■■■■■■■■■■■──────────────┘
この部分が地下2階として活躍するようです。
ちなみにレンガを掘るとそこは00になります。
ud06.PNG


※2003年4月7日追記
アドレスの書き方ですが、メインメモリは4ケタで書くのが正しいのかも。
ところにより数え間違い(一番左を1と間違った)を修正したつもり。


地下帝国説の目次に戻る
トップに戻る