SSブログ

孤独へ向って突っ走れ (48) [  PC-98x1(補完計画)]

「テニス・テニス2」の全PICファイルにパレットを適用してGIFファイルとして書き出す作業は、きょう最大の難関を突破した。

テキストで書くよりも見てもらったほうが私以外の人にはわかりやすいので、例の小さなアイコンの形で見てほしい。(以前の記事を見てない方のために説明すると、パレットを適用して正しい色合いになった絵を全部出す時は、自分で努力してゲームを制覇したい人の意欲を削がないように、とても小さく縮小して出すことにしている。)
tt64.jpg
tt65.jpg

赤い絵が2つだけある。赤い絵は、まだそれ用のパレットファイルが指定されていない絵だ。そのうちのひとつTITLE3は、調べたところPICファイルはフロッピーにあるが、ゲーム内でそれが使われていない。だからそれのためのパレットは存在しない。「使われないファイルがフロッピー内にあるなんて、本当かなぁ」と思う方は、「テニス・テニス2」をお持ちの方ならば、次の方法で確認できる。このゲームのEXEファイルには、読み込むファイルごとに「ファイル読み込み用データ」が入っている。そのデータの中にファイルのパスも記されている。そこで、Aディスクの中にあるT.EXEをWindows上にコピーし、それをWindowsの「メモ帳」で開く。メニューの「編集」をクリックし、「検索」をクリックする。"TITLE3"を検索する。すると、EXEファイル内に"TITLE3"はひとつもない。他のPICファイルの名前を検索すると、それは出てくる。そういうわけで、TITLE3は赤い絵のままでいい。

残るはただひとつ。CCC.PICという絵だ。この絵は、スケジュール画面にキャラクターが表示されない時のための「透明データ」で、全面がパレット番号0で埋め尽くされている。だから適当にそのへんのパレットを適用しても結果は同じなのだが、そういういい加減なことはしたくないので、私は実際にCCC.PICに適用されるパレットを調べるつもりだ。これが、最後に残った作業だ。ここまで来たらチェックメイトと宣言しても良いかもしれない。

これで今日のご報告は終わりだ。この作業も残りわずかなので、記念に今日の解析記録を出しておきたい。でも、このゲームや解析に興味のない方にとってはただのチンプンカンプンな言葉の羅列だから、お読みになる必要はない。私が勝手に出したいと思っているだけなので。





追っかけ7-4
残っている解析は:
CCC.PIC
A07.PIC, B02.PIC, C12.PIC, T02.PIC

CCC.PICはキャラクターがいない時のための透明データなので全面パレット番号0で、適用するパレットはどれでも同じようなものだが、ここまで来たらしっかり解析したい。

A07.PIC, B02.PICは初日の大会セレモニーで表示され、その時のキャラクター絵がC12.PICであり、パットが話しかけてくるのがT02.PICなので、これらは初日のパレットがわかれば一気に全部解決するだろう。

初日のパレットを知るには、初日の分岐条件を知ることだ。初日はスケジュールが決まっていてゲームプレーヤーが変更できないから、データセグメントの初期状態で値が入っている可能性が高い。
分岐条件はDS:77B6から2バイトに入っている値をベースアドレスとして、それにDS:12DCから2バイトに入っている値を4倍してオフセットとして加算する。そのアドレスに入っている1バイトが分岐条件だ。
word ptr DS:[77B6]はA71CH。今回は初日を調べたいので、ゲーム内の日付をあらわすword ptr DS:[12DC]は0とする。byte ptr DS:[A71C]はFDH。
ちなみに、それ以後の4バイトごとの値はたいていFFH。ごくたまにFEHがある。FFHが"日程がありませんので今日は休みにします"だということは調査済み。つまりこれはゲームプレーヤーが選手のスケジュールを決める前の状態だ。FEHが初めて出るのは、初日を0として27、つまり28番目の日。ゲームを起動してカレンダーを28番目の日までスクロールすると、「藤井絵麻☆ 夏木 の試合」。つまりFEHは自分が試合の日だ。
FDHが分岐条件の時にサブルーチンBF96H(スケジュール画面右半分のキャラクター絵を読み込み、描画するサブルーチン)が読み込むファイルを調べてみよう。それが大会セレモニーの時の絵C12.PICならばすべて順調ということになる。追っかけ5-1cのサブルーチンBF96Hを見る。解析の
①ALがFDHならば、AXを10Hに変更。
が当てはまる。この条件分岐の先は
⑭ここに来るのは上記条件分岐のうち①②③④⑩⑪⑫⑬。これらの場合、ALはまだ最終的なものでない。DS:47CCからデータ配列がある。ALはその添え字として使い、そこから1バイトを読み出す。これをAXの値とする。
データ配列の内容は、追っかけ7-1にある。byte ptr DS:[47CC+10]は0BH。その先の処理は
⑮AXに1FHを掛け、それに31C2Hを足す。これが最終的なSI。
SI=3317H。DS:3317が「ファイル読み込み用データ」の先頭アドレス。調べてみると読み込むファイルはb:\tennis\pic4\c12.pic。すべて順調。
ここまで理解が深まればひとまず十分だろう。パレットファイル読み込み用サブルーチンBD57Hで、分岐条件がFDHの時にどのパレットを読み込むか調べよう。追っかけ5-1cのサブルーチンBD57Hを見る。解析の
①ALがFDHならば、AXは11Hに変更。
が当てはまる。この条件分岐の先はもう単純で
読み込むファイルのデータはAXを18H倍してそれに2049Hを足したアドレスにある。
パレットファイルはa:\pal\pa18.pal。

コメント(0) 

コメント 0

コメントの受付は締め切りました