 |
今のところは88版のキャラクタで。 FC版のキャラクタ画像を用意すれば、ちゃんと作れる |
ファミコン版ザ・キャッスルのログイン版(最優秀作品じゃない方)のマップが欲しいなぁ、自分自身の説明書き用に…と思ったものの、これを画面キャプチャしてつなげるのも面倒くさい。…ということで、データからハフマン符号を開いて、88版と同じようにプログラムで描いて作ろうかと画策。
バイナリを見ると、ハックの人のメモが書いていたので、ステージデータのスタート位置はとてもよく分かる(笑) C100h~からですね。で、アイテムデータの位置は検索で簡単。レンガ(2B)がX座標9、Y座標Eの位置にあるから「2B 09 0E」で検索したら、これまた一発で引っかかる。ということで、スタート面のアイテムデータは6FC1hから。
ステージデータのスタート位置を示すものがバイナリのどこかにあるとは思うものの、今回の用事には関係ないのでパス。分かれば、キャッスルエクセレントのマップもプログラムで作れますけどね。
ファミコン版キャッスルエクセレントのステージデータはハフマン符号で圧縮されていますので、これを展開するわけですが、2値を扱わなければいけないので、データを読み始める位置が「何番地の何ビット目」かを変数で持たせて(番地とビットをハフマン符号の文字数で足すときは、一旦番地を8倍すると計算しやすいですね)、その都度、符号の必要ビット数を切り出せばいいわけですよね。符号の最長は13個(13ビット)なので、2バイト(16ビット)の数値にでもしておけば。
ただ、一番多い53hの空白は符号が「1」だけですので、まずは符号の1個目が「1」かどうかを先に調べて、「1」ではなかったら残りの符号を展開する…というやり方もいいかも知れません(が、今のところやっていません)。
ハフマン符号を開くのは簡単です。2値を扱うのがちょいと面倒くさいですが、何とかなります。目的の場所から3バイトを2値にして、そこから必要の位置から13ビットを切り出せばいいわけです。
ただ、その都度2値を切り出すと二度手間・三度手間になりますので、あらかじめ必要な範囲全部を2値にしてしまう方が処理は速いでしょう。
そんなこんなで、88版の画像で作れました。あとはファミコン版の画像セットを用意すれば、ファミコン版の全体マップを作れます。まぁ、これでも大体は分かるので、最適な攻略ルートの検証などには使えますな。
~~~~
ルート検証完了。やっぱり、全体マップがあると分かりやすい。本来ならば、手書きでマップを作るのでしょうが。当時は書きましたし、MSXなら説明書の裏にマップを書くようになっていたと思いますし。でも、適当な紙に書いていたけど。
(1)緑鍵を集めて(4つ目は右下の炎部屋)、ついでに紫鍵を取る
(2)青鍵を取りに行く
(3)赤鍵を取る
(4)ゴールへ
こうですね。結構、あっちこっち移動しないといけません。ログイン・最優秀作品ではルートが一本道でしたので、何も考えずに進めればクリアできましたが。
ファミコンのログイン版キャッスル(キャッスルエクセレントのハックロム)、ネットで調べたら差分ファイルが見つかると思います。私は先月、88版を解析してそっちにX1ログイン版のステージデータを移植しましたが。その方が、オリジナルほぼまんまでしょうし。