解析した情報をもとに、今度は逆に自作の(今回は雑誌掲載の)マップデータを圧縮していく。1階10部屋分5120バイトのデータを39.5%、2026バイトに収まるようにする。
現在、ステージのオブジェクトまで。これから 16 × 16 のキャラクタを変換するところ。
のんびりやりますわ。
16 x 16 のキャラクタデータも変換し、製品版に書き込むための圧縮データを作成。
もう少しでしょう。
思ったことをチマチマと。こんな駄文が、いくらかでも暇つぶしになってもらえれば幸いです。 ★ここ最近、何もする気になれないので、更新が滞ると思います。半休眠中です。
現在、ステージのオブジェクトまで。これから 16 × 16 のキャラクタを変換するところ。
のんびりやりますわ。
16 x 16 のキャラクタデータも変換し、製品版に書き込むための圧縮データを作成。
もう少しでしょう。
全ての解析を完了し、ザ・キャッスル、キャッスルエクセレント全面の表示もOK。
ランレングスで2個以上のものが並ぶ場合は、オブジェクト番号に 80h を足して、その次にその個数を付けるのですが、圧縮効率を高めるために、数の多い壁、空白、水については、2個から8個の場合、1バイトで表せるようにしていると。ここを正しく処理すれば、キチンと表示できます。
これで、すてーじめーかー(自作の面データを製品版の圧縮データに変換して書き込む)を作成できるように。
やることは、こんな感じでしょうか。
★必ず1階10部屋単位で変換 でないとデータを作れない
1部屋ごとに打ったバイナリデータを1階10部屋くっつけて1つのデータに
(バッチファイルを作ると便利 copy /b stage00.dat+stage01.dat+… 階7.dat)
これを変換して書き込む
★オブジェクトの番号を調べる⇒同じものが幾つ連続している?
1個ならそのままの番号になる
2個以上⇒00~05、16、53以外なら
オブジェクト番号+80h、その次に個数を指定
00~05、16、53なら専用処理
9個以上⇒オブジェクト番号+80h、その次に個数を指定
2~8個⇒オブジェクトにより番号を決定
★最後まで部屋を描いたら16ドットキャラを配置
⇒トータルのバイト数からデータの終了+1番地をインデックスに付加する
⇒これを10部屋分処理して変換したものを製品データに書き込む
X1ログイン版キャッスル最優秀作品、現在こんな感じでステージ0~19まで入力。
画像をくっつけて、全体マップを作るとこう。あと10面。
8とBが見分けづらいです。これはドットインパクトプリンタのフォントが悪い。印刷がかすれていたら判別不能。チェックサムで辛うじて分かるという。
ここまで、どちらかといえばパズルよりもアクション重視の面ですな。
~~~~~~~~~~~~~~~~~~~~~~~~~~
帳票の紙(128×297ミリ)にリストを大きく打って、そこから 53 以外のものを蛍光ペンの黄色でチェック。そして、あらかじめ 18Fh まで 53( 190h 以降のアイテム欄は FF )で埋め尽くしたバイナリに上書きで入力。いちいち 53 を打たなくていいのと、まず紙の上で作業して、そこからあまり画面を見ずに打てるので、ものすごく楽に。そして、チェックサムで正しく打てているかを確認していきます。
印字が汚過ぎて OCR できませんし、もう打った方が修正とかも楽かと。
8ドット(背景)のデータ。X1ログイン版キャッスルのPCG定義プログラムを実行すると、各文字フォントにこんな感じで登録されるはず。88版のデータもこの通りの番号。
自分はこれを昔、MSX2で打ってみて再現させた。
![]() |
| ここまで展開できるように。 2つ以上赤ブロックが続く場合はD9~になる |
部屋を(階数・号室で)指定したら、その部屋を描けるように。ちょっとずつですね。
こんなに簡単に解析できたのなら、もっと早くに88版を解析するべきだったなぁ。というか、まさか88版のステージデータを解析できようとは…って自分でも驚いています。
同じ階を10部屋単位でデータが作られているので、コピー部屋も10部屋作られています。昔のゲームのプロテクトには遊び心がありますよね。ここまでは体験版っぽく遊べますし。
88ザ・キャッスル、プログラム内に「KAI 0」から「KAI 9」なんて文字列が見えていた…ということで、各階ごとにまとまっている? と思ったら、ステージデータ開始番地のインデックスが101号室のデータの直前に1階10フロア分ありますわ。これで、好きにいらえますね。
88のフロッピーのデータには、いらないセクタ情報が一定ごとにあるので注意(マイルドライナーのグレーで消してある部分)。
データをいらったり、アドレスを計算する際にはココを飛ばさないといけない。
デジカメの方が綺麗に画像になる? なら、A4取るのに2分かかる23年前のスキャナ使わないよ。
基本的には、80hを足すと複数個の指定(その次で個数を指定)なのだが、空白と壁は多いため、それらで少ない個数の場合は専用の指定方法もあるよと。
空白;53(d3 nn)⇒df+n
白壁;偶数行は00(80 nn)⇒57+n
奇数行は01(81 nn)⇒5F+n
まだ全然解析できていませんが、とりあえずキャラを変えることはできます。
最初の黄鍵をマルガリータ姫にすることで、玄関開けたら5秒でちゃんとクリアできますw
いろいろバイナリをいらってみた結果、88版もランレングスですわ。
ただしMSX版とは作りが違います。プログラマーが違うからでしょうか。
なので、他のステージも見ていけば、バイナリの意味は分かるかと思います。
でも、アイテムや敵は別データですな。それらはどこにあるのか、どのように入っているのかは、これから調べないといけません。
コンストラクション機能、欲しかったですよね。X1ログイン版キャッスルにコンストラクションあったから、なおさら。
でも、他の人はそう考えなかったのでしょうか、解析している人はいませんな。MSX版ならアメリカでステージを作るソフトを作った人が昔いたみたいですが。