SSブログ

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

仕事でも家庭でも個人でも、自分がやると決めたことはやらなきゃいけないのだろうなあ。

自分が逃げると決めたことは逃げればいい。他人とは反りが合わない。他人が求めることを全部やっていたら、こっちが潰れる。仮にそれでも苦心惨憺して全部やったら、その他人はどこ吹く風の当たり前という顔だ。人生は天国じゃないのだから、逃げる時には逃げるのが正しい。

その反面、やると決めたらやらねばならぬ。愛すると決めたら愛し抜かねばならぬ。そうでなければ、自分の生きざまがみじめになってしまうではないか。

そろそろ逆アセンブル解析の話へと収束させよう。

もう何週間も前に、あるルーチンを解析した。それが難物で、いまだに苦労している。解析は、通り一遍は終わった。でも「このコードはこういう動作をする」というのと、「この部分はゲームの中でこう動く」というのはまるで違う。とくに違うのが、メモリに格納されたデータの意味がわかっているかどうかだ。

話が細かすぎると読んでくださる方が退屈するから、おおまかに書こう。サブルーチンAは、パレットを読み込む。サブルーチンBは、絵のビットデータを読み込む。この2つのルーチンが続けて呼び出される場所がいくつもある。私はビットデータ(以下picと称す)のパレットデータ(以下pal)を特定するために、この2つのサブルーチンを解析している。

2つのサブルーチンには共通点がある。どちらも、データセグメントの特定のアドレスにある値をALに入れて、それを条件分岐して値を変更しつつ、読み込むファイルを決める。こうして共通点がわかれば、あるpicのためのpalを特定できそうだ。これが私の考えだ。

たしかにこれでうまく行った場所は多い。サブルーチンBで特定のpicに至るALの値は何かと調べ、次にサブルーチンAでそのALの値ならばpalはどれかと調べる。たとえばこのpicと、それに適用したpalは合っていると思う。
tt44.gif

picとpalが合っていることの確認として、以前にネット上で見つけた小さなゲーム画像と色を比べてみる。
tt45.jpg

でも、実は私のやっていることには穴がある。自分でわかっている。実は条件分岐が複雑で、ALの値だけで分岐するのではない。メモリ上の特定の場所が0かそうでないかでも分岐する。ところが、そのメモリにどこでどういう理由で書き込まれるのかがまだ解析できていない。サブルーチンの呼び出し元、さらにその呼び出し元まで遡って調査するのが、この場合「本腰を入れないと無理」だと予感したから。それで後回しにした。

もうお気づきだと思うが、上のpicだって、ひょっとしたらpalが違っているかもしれない。それがはっきりするのは、いつの日か、「メモリの特定の場所」とやらの解析を終わらせた時だ。いつか・・・いつか必ずやってやる・・・。今はまた息切れがしてきたから、今すぐは無理だが。

で、これがpicの適用を間違った例。
tt46.gif

こういうのを見てきた人ならピンとくる。わかるんじゃないだろうか、「これは違う」と。「こういうのを見てきた人」とは、パレットを必要とする画像データがパレットと無関係に置かれた時、似たようなパレットを適用した経験のある人だ。髪の色や肌の色はこれでいい。だから人によっては、「ああ、これでいいや」と思うかもしれない。でもちょっと待ってほしい。水着の色を見る。グリーンの水着、それ自体はありうる。でも水着の皺や縫い目を描いた線がピンクだ。こんな色遣いをするだろうか。私は、これと同じ絵がハードディスクのどこかにないかと探した。そうしたら
tt47.jpg

ガビーン!! 赤・・・水着は、赤だった・・・。

そういえば、このルーチンとは別にイベントの1枚絵を表示するルーチンがあって、こんなんだった。・・・すっかり忘れていた。
tt48.gif

とにかく、私は思った。上に書いた「メモリ上の特定の場所が0か」云々のコードを私は追っかけねばならない。

でもそれが成功した頃には、私はこのゲームの「シナリオモード」のしくみが全部理解できちゃうぞ。「どこのデータがいくら未満」なら女の子が病気になるとか。そんなこと私にはどうでもいいが、そこまで解析できなければ正しいパレットが見つけられない。

ああ、なんか声が聞こえる気がする。このソフトを作った人たちの声が。「僕たちは必死の思いでこのゲームソフトを作ったんだよ。本当に大変だったんだ。君がそれを解析するというのなら、君にはそれなりの根性を出してもらわないとね。そうでなければ成功なんてありえないよ。もしも僕たちの必死の努力と同じだけの体力と気力と知力と時間を費やして解析に成功したならば、その時『だけ』、僕たちは君を認めてあげるよ。」

・・・先は長い。でも最初に書いたとおり、やると決めたらやらねばならぬ。

コメント(0) 

コメント 0

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