トップ  コード  リンク



解析資料 新紀幻想 〜SSII アンリミテッドサイド〜

−簡易リンク−

EXP入手するとレベルMAXのサーチ

ディスクアクセス表示消去のサーチ

SP増えるとMAXのサーチ

アイテムテーブル

キャラ初期データテーブル


EXP入手するとレベルMAXのサーチ

このコードはサーチの基本である最大値検索でサーチしました。

1.最大値検索をする

まず解析さんを起動します。これはサーチに必要な機能です。
編集→32bit値を検索→16進数に03E7 16bitにチェックを入れてOKを押す。
F4キーを何回か押しているとsltiが出てくるのでアドレスをメモします。
候補がこれだけあります。
000905a4
00090680
000b7b88
000bbd2c
000bbe1c
000c9930
000e3194

2.候補の近くにあるbeqおよびbneを潰してみる。

一つずつテストしていくとEXPが999になる部分が出てきます。
000bbd30
000bbe20
この2つのアドレス周辺を見てみると000bbe20の近くにもう一つ比較命令があったので分岐を潰してみると大量にレベルが上がりました。
000bbe54 00000000 nop

これだけでもいいですが、テストをしているとだんだんレベルが上がりにくくなってきたのでプログラムを見てみます。

新紀幻想 〜SSII アンリミテッドサイド〜

プログラムの流れはこんな感じです。

1.レベルを読み込んで999だったらEXPに999を書き込んで終了。
2.レベルが999でなければ入手EXPの数だけ現在EXP+1→レベルアップ判定を繰り返す。
3.(レベルアップ判定)現在EXPが1000以上だったら現在EXP−1000→現在EXP書き込み
 レベルを読み込んでレベル+1→レベル書き込み

3.入手EXPの数だけレベルアップしているので、入手EXPを999に固定する
000bbe28 240203e7 addiu v0, zero, $03e7

4.現在EXP−1000も邪魔しているのでEXPを999に固定
000bbe5c 240203e7 addiu v0, zero, $03e7
ここは24020000 addiu v0, zero, $0000でも問題ないです。

これをコード化して完成です。

ディスクアクセス表示消去のサーチ

このコードはラベル検索でサーチしました。
今回は画像なしです。

1.ラベル検索をする

まず解析さんを起動します。これはサーチに必要な機能です。
編集→ラベルを選び移動を押す。
色々出てくるのでしばらく下へ見ていくと
"DISC ACCESS"
が見つかるのでそれ選びます。
アドレス000fb968に移動するのでそのままスペースキーを押してからF3キーを何回か押してみます。
00015e38
00015e50
00015e68
00015e80
00015e98
00015eb0
00015ec8
00015ee0
00015f00
でループするのでプログラムを見てみます。

2.プログラム参照をする

jal $000043cc
が近くに何箇所も存在するのでjal $000043ccの所で右カーソルキーを押して移動します。
移動したらスペースキーを押してからF3キーを何回か押してみます。
2箇所のサブルーチン(サブプログラム)内をループしているので下の方にあるjr ra付近を見てみます。
サブルーチン開始場所は::か、FNC_xxxxxxxx(xはアドレス )で表示されている場所です。命令はaddiu sp, sp, $fxxxになります。
jr raから上に移動していくと見つかると思います。
jr raはサブルーチン終了命令です。
jal $xxxxxxxxがサブルーチンに移動する命令です。
サブルーチンは開始場所からjr raまでです。

00015f14 00015d48 の2つがありますが、00015f14の方は近くに分岐命令がないので00015d48 をみます。
00015d44が参照されているのでスペースキー→F3キーで参照先に移動します。
00015c28に移動しました。
00015c28 10000046 beq zero, zero, $00015d44
これは必ず分岐する命令でjal $000043ccがある場所を飛ばしてjr raに移動しているので
ここに来ないようにする命令が近くにないか見てみます。
00015c28から少し上を見ると
00015c10 10200007 beq at, zero, $00015c30
があるのでここをnopで潰してみます。
00015c10 00000000 nop

テストしてみるとディスクアクセスの表示が消えました。
これをコード化して完成です。

SP増えるとMAXのサーチ

このコードは他のコードを参考にしてサーチしました。

解説しているのは旧バージョンです。

SP増えるとMAX 旧ver.2  2005/11/9UP
アドレス データ
E0F9C
xx yy 05 3C
E0FA0
zz ss A5 34
E0FA4
2B 08 85 00
E0FA8
01 00 20 54
E0FB0
79 00 61 28
E0FB4
01 00 20 50
E0FB8
78 00 03 24
変更前
アドレス データ
E0F9C
6C 01 83 AC
E0FA0
6C 01 83 8C
E0FA4
79 00 61 28
E0FA8
03 00 20 50
E0FB0
03 00 00 10
E0FB4
00 00 00 00
E0FB8
FD FF 00 10
人数 xx yy zz ss
1人 1E 09 A0 E6
2人 1E 09 60 F9
3人 1F 09 20 0C
4人 1F 09 E0 1E
5人 1F 09 A0 31
6人 1F 09 60 44

戦闘参加味方メンバー数によってコードが変わります。
SP増えるとMAX ver.1とは併用できません。
戦闘によっては効果が出ないかもしれないです。

1.他のコードを利用する

このゲームは移植ゲームなので元となっているPS2版のコードを参考にします。
AR紙VOL.35の71ページのバトルパート1人目コードを複号化して数値をみてみると、
SPのMAXは78(10進で120)ということがわかります。
この78で最大値検索をしてすぐ見つかりました。
ただ、このサブルーチンは敵も利用しているので敵もMAXになってしまいます。
これはプログラムコードの欠点になります。

2.味方と敵を判別する

敵を判別するにはアドレスが必要なのでとりあえずプログラムをみます。
新紀幻想 〜SSII アンリミテッドサイド〜
000e0f9c ac83016c sw v1, $016c(a0)

でSPをストアしているので、a0レジスタの中身が分かればアドレスを
特定できます。
残念ながらこのサブルーチンはどこから参照しているのか分からないので
他の方法を使います。
sw v1, $016c(a0)

はa0+016cのアドレスにストアするという意味なので
PS2版のコードを参考にして見ます。
1人目のコードのSPのアドレスを見ると6Cがあっているので
HPは0164/0170にあると思われるので
少し書き換えてみます。
000e0f9c ac830164 sw v1, $0164(a0)

にするとHPにSPがストアされるようになります。
このゲームはHP99999がMAXなのでハーフワードまでなら
ストア出来るのでa0レジスタをハーフワードでストアして見ます。
000e0f9c a4840164 sh a0, $0164(a0)

これでa0の下位2バイトが分かるのでテストしてみます。

テスト用データ

ナイヅで攻撃するとHPが54240になります。これは10進の数字なので
16進にします。D3E0になります。
他のキャラは
コルウィンE6A0
マークスF960
偵察兵左0C20
偵察兵中1EE0
偵察兵右31A0
隊長4460
です。これをメモしておきます。
a0レジスタの下半分が分かったので上半分を調べます。
000e0f98 00041c02 srl v1, a0, 16
000e0f9c a4830164 sh v1, $0164(a0)
srl v1, a0, 16でa0の上位2バイトを下位2バイトにシフトさせてv1レジスタに入れます。
(12345678がアドレスだと00001234がv1に入ります。
1つ前でメモしたのは、00005678がHPに入った数値です。)
これを実行するとこうなります。
ナイヅ091E
コルウィン091E
マークス091E
偵察兵左091F
偵察兵中091F
偵察兵右091F
隊長091F
メモしたものと組み合わせるとワークアドレスが分かります。
ナイヅ091ED3E0
コルウィン091EE6A0
マークス091EF960
偵察兵左091F0C20
偵察兵中091F1EE0
偵察兵右091F31A0
隊長091F4460
これを参考にしてプログラムを書き換えます。

書き換え前
新紀幻想 〜SSII アンリミテッドサイド〜
書き換え後
新紀幻想 〜SSII アンリミテッドサイド〜
これは自作プログラムの1例です。
他の書き換え方もあるので自分なりのプログラムを作ってください。
これをコード化してテストしたのですが、このゲームはメンバーによってアドレスが変わるので
差分を計算してからアドレス設定を変更して完成です。
キャラ差分は+12C0hで味方のあとにすぐ敵が入ります。
コルウィン091EE6A0−ナイヅ091ED3E0=12C0

これが分かるようになれば大体のコードは解析できると思います。
このゲームの解析資料はこれで終了です。
アイテムテーブル

新紀幻想 〜SSII アンリミテッドサイド〜

次のアイテムは+E4hです。

キャラ初期データテーブル

新紀幻想 〜SSII アンリミテッドサイド〜

アウドライドは−11Chで、次のキャラは+11Chです。
ここを参照しているのはそのキャラが始めてバトルに参加する時だけです。

inserted by FC2 system