ペルソナ3フェスの後日談でのコードサーチ記事です。
本編では異なるかもしれません。
今回取り上げるのは、バストアップ画像変更コードです。
ペルソナ3ではバストアップ画像がdisc上では
bustup/i_b_xxxx.binというファイルにあります。
画像を抜き出した方はご存知だと思います。
それを踏まえたうえで、ps2disで実行ファイルを開き
ラベルを眺めていくと
"bustup/i_b_%02d%x%1d.bin"
といういかにもバストアップ画像を指していると
思わられるラベルが見つかります。
そのラベルの参照元を調べると
アドレス00106b90、00106be8の2箇所から参照されている
ことがわかります。
今回は2箇所しかないので、特定のアドレスに意図的にフリーズする命令を
書き込みどちらが使われているか調べました。
どうやら後日談のラウンジでは00106be8のほうが使われているようです。

そこで、アドレス00106be8周辺の処理をみてみます。
するとa1に文字列"bustup/i_b_%02d%x%1d.bin"のアドレスを入れ
a2,a3,t0の値で番号を指定していることがなんとなくわかるかと思います。
試しに、a2,a3,t0の値をプログラムコードを作るなりして調べると
メティスに話しかけバストアップ画像を表示させたときは
a2=1D、a3=0A、t0=01
となっています。
これを"/i_b_%02d%x%1d.bin"に当てはめると
%dが10進数表示
%xが16進数表示なので
"/i_b_29a1.bin"となります。
C言語のprintf関数のフォーマットらしいです。詳しくはぐぐって下さい。
実際に抜き出した"/i_b_29A1.bin"の画像を確認すると同じ画像でした。
さてa2,a3,t0の値で画像を指定し
その値は、抜き出した画像ファイルの番号に対応していることが分ったので
実際に画像を任意の物に変更してみます。
今回表示させたいエリザベスの画像番号は16a2なので
a2=10、a3=0a、t0=02
となります。
これをコードにすると(復号化状態)
20106bec 64060010
20106bf0 6407000a
20106bf4 64080002
実際に確認してみると

無事変更され、ダンジョンでも使えるようです。
ただこのコードではどのメンバーに話しかけても
変更した画像になってしまいます。
特定のキャラにのみ反映させるには
空き領域にプログラムコードを作るなどして
処理をわける必要があります。
これでこの記事は終わりとなりますが
分りづらい点などありましたら、コメント下さい。
本編では異なるかもしれません。
今回取り上げるのは、バストアップ画像変更コードです。
ペルソナ3ではバストアップ画像がdisc上では
bustup/i_b_xxxx.binというファイルにあります。
画像を抜き出した方はご存知だと思います。
それを踏まえたうえで、ps2disで実行ファイルを開き
ラベルを眺めていくと
"bustup/i_b_%02d%x%1d.bin"
といういかにもバストアップ画像を指していると
思わられるラベルが見つかります。
そのラベルの参照元を調べると
アドレス00106b90、00106be8の2箇所から参照されている
ことがわかります。
今回は2箇所しかないので、特定のアドレスに意図的にフリーズする命令を
書き込みどちらが使われているか調べました。
どうやら後日談のラウンジでは00106be8のほうが使われているようです。

そこで、アドレス00106be8周辺の処理をみてみます。
するとa1に文字列"bustup/i_b_%02d%x%1d.bin"のアドレスを入れ
a2,a3,t0の値で番号を指定していることがなんとなくわかるかと思います。
試しに、a2,a3,t0の値をプログラムコードを作るなりして調べると
メティスに話しかけバストアップ画像を表示させたときは
a2=1D、a3=0A、t0=01
となっています。
これを"/i_b_%02d%x%1d.bin"に当てはめると
%dが10進数表示
%xが16進数表示なので
"/i_b_29a1.bin"となります。
C言語のprintf関数のフォーマットらしいです。詳しくはぐぐって下さい。
実際に抜き出した"/i_b_29A1.bin"の画像を確認すると同じ画像でした。
さてa2,a3,t0の値で画像を指定し
その値は、抜き出した画像ファイルの番号に対応していることが分ったので
実際に画像を任意の物に変更してみます。
今回表示させたいエリザベスの画像番号は16a2なので
a2=10、a3=0a、t0=02
となります。
これをコードにすると(復号化状態)
20106bec 64060010
20106bf0 6407000a
20106bf4 64080002
実際に確認してみると

無事変更され、ダンジョンでも使えるようです。
ただこのコードではどのメンバーに話しかけても
変更した画像になってしまいます。
特定のキャラにのみ反映させるには
空き領域にプログラムコードを作るなどして
処理をわける必要があります。
これでこの記事は終わりとなりますが
分りづらい点などありましたら、コメント下さい。
この記事のトラックバックURL
http://hiscode.blog56.fc2.com/tb.php/225-8acec9b3
この記事にトラックバックする(FC2ブログユーザー)
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック