ファミコン版ザ・キャッスルのログイン版(最優秀作品じゃない方)のマップが欲しいなぁ、自分自身の説明書き用に…と思ったものの、これを画面キャプチャしてつなげるのも面倒くさい。…ということで、データからハフマン符号を開いて、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ビットを切り出せばいいわけです。
そんなこんなで、開くところまではできました。あとは、これに16×16ドットのオブジェクトを配置して、全体画像にすればいいわけですよね。



0 件のコメント:
コメントを投稿