SSブログ

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

ビットデータであるpicファイルとパレットデータであるpalファイルを関連付ける作業は、ここまで来た。
tt31.gif

細かい文字が見えてもどうせサブルーチンの先頭アドレスばかりだから、むしろ何が言いたいのかが一目でわかるように縮小した。色でわかる。緑色の部分は、今までの解析ですでに出てきたcallだ。赤色の部分は、その解析によって判明したpicファイルまたはpalファイルの名前だ。ただしゲームオーバールーチンなど、複数の場所で同じpicやpalを呼び出している場合があるから、判明したpicやpalの数は赤色の数よりも少ない。マゼンタ色の部分は、これから解析しなければならないcallだ。画像左半分の短いマゼンタ色は、最初からわかっていた解析予定。右半分にある、数は少ないが長いマゼンタ色は、解析途中で新たに出てきた「難物」だ。

私のようなのを、きっとプログラミング馬鹿という。「駄目かもしれん」とか「足が悪くなった」とか「気力がない」とか言いながら、ほんの少しでも状態が良くなると、ふと気がつくとコード解析をやっている自分がいる。これを世間では馬鹿と呼ぶ。

いまさら、「めざせトッププレイヤー テニス・テニス2」と叫んだところで一体誰が振り向くだろう。でも、偶然が私に味方してくれたおかげで、私は面白い。どんな偶然かというと、私が解析しようと思い立ったこのゲームプログラムは間違いなくアセンブラで書かれている。高級言語だったら、もっと無駄なコードが出るはずだ。たとえばC系ならばスタックにまとわりつくようなコードになっているはずだ。もちろんスタックにまとわりついても悪いことはない。ただ私という人間が、アセンブラを十分に学ばないうちに終わってしまった人間で、しかも学んだ部分すら長い年月の間に忘れた人間だ。そういう私には無駄なコードがないほうが解析しやすいし、学びやすい。

さて、今までにおおよそどんな絵のパレットがわかったかというと、ストーリーモードでのイベント関連の絵だ。これにはたぶん理由がある。イベント以外の絵は、ゲームの動きと密接に関連している。たとえばテニス大会の対戦相手が決まった時点で、その相手を意味するデータがデータセグメントかコードセグメントのどこかに格納される。それ以後、選手の絵(初回)、試合中のちびキャラによる絵、勝った時の選手、負けた時の選手を表示する時には、その格納されたデータが参照されてそこから「絵のファイル名等を格納したアドレス」が算出される。この場合、ファイル読み出しルーチンには即値が渡されない。どっかのアドレスから値を取ってきて、しかも(実際に解析中だが)もうひとつ別のアドレスも参照し、それから条件分岐が始まり、分岐先で場合によってはまた別のアドレスも参照して、やっと目的のアドレスが決まる。早い話が、大変すぎてその先がまだわからない。それで、目的のアドレスが即値で記されているものから先に判明したというわけだ。

ストーリーモードのイベントの絵はどれも同じキャラクターが出てくるので、私は同じパレットを使っても何とかなるんじゃないかと思った。でも実際には使うパレットが違う。では何が違うのか。背景の色が違った。

tt32.gif
どうして大会で優勝を目指す選手に優勝前にコーチが酒を飲ませるのかは謎だが(ストイックな健康管理なしでは優勝できないだろうに)、とにかくこのイベントではこの背景。

tt33.gif
露天風呂ではこの背景。

tt34.gif
エアロビクス(ではなく、マニュアルを読むとどうやらこれはトレーニングジムらしい)の最中はこの背景。

tt35.gif
水泳での背景は、最初の旅館でお酒を飲んでる絵と似ている色だけど少し違う。

どうやらイベントそれぞれの雰囲気や色使いを考慮して、背景色を少し変えたらしい。

私が一番見たい絵は、実はイベントではない。理由は簡単、何度かプレイすればイベントの絵は全部見られるから。でも、キャラクターが総勢16人もいるこのゲームで、各キャラクターが勝った時のバストショットと負けた時のバストショットを全部見ようと思ったら、それは大変な作業だ。つまり私が一番見たいのは、試合前と試合後のキャラクターの絵だ。

最後にひとつ、気づいたことを書きたい。マニュアルを読んでいて思い出したが、このゲームには私が解析したもの以外にもイベント絵があった。ポップコーンを持って観戦している絵が。でもpicファイルの中にはそれがない。私は何か見落としている。作業がまた増えた。

コメント(0) 

コメント 0

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