装備している刀の性能コード

侍道2は刀が重要なゲームです
やっぱり最強ステータスの刀が欲しいですね
画像だらけで縦長でちょっと見難いレイアウトのページですが(汗)
紹介する方法は汎用性の高い方法でもあるので
是非、身に付けて頂きたいと思います。


まず、刀の能力の最大であろう数値で検索しました
270Fで検索して、分岐命令を潰して確認していたら
00243F78の分岐命令を潰した状態で
チンピラなどを1人斬ると惨殺数が9999になりました

惨殺数も刀のステータスの1つなので
ここを元に攻撃力と防御力を探します

sw a0, $0048(v1)
のv1+0048hが惨殺数のアドレスなのは分かりましたが
肝心のアドレス自体はここでは表示されていません
そこで、このv1の数値を他の方法で調べてワークコードを探し
それを元に攻撃などを探そうと思います

v1レジスタに格納されている数値を調べる方法はいくつかあり
1つは「プログラムを遡って数値の格納状況を調べる方法」
もう1つは「レジスタの中身をゲーム中の目に見える場所へ表示させる」
という方法ですが前者はプログラム知識が豊富で無いと難しいです
後者は聞くだけでは難しく感じますが
実は前者ほど難しいものではありません。

どう表示させるかと言うと
sw v1, $0048(v1)
に書き換えてしまえば、斬殺数の数値部分に
そのまま斬殺数のアドレスが書き込まれるので
画面に表示されている斬殺数を16進数にして
48h足せばそれだけでワークコードを求める事が出来るのです

しかし斬殺数のアドレスは、最大値チェックを見る限り
通常は最大でも9999までしか表示されない項目です
それ程大きい数値は表示出来ないと考えられるので
sw v1, $0048(v1)
に書き換えるだけでは確実性が低いです

そこで、シフト命令とsh命令を組み合わせて
v1レジスタの数値を2回に分けて確認する事にします
まずはv1レジスタの下4ケタを確認する為に
sw a0, $0048(v1)
sh v1, $0048(v1)
に書き換えてコード化
(9CB3C0B0 B873E75D)
コード入力状態で一人斬って見ます。
すると、惨殺数が11728になっています
これを16進数化してメモします(2DD0)



次に、v1レジスタの最下位ワードデータの上4ケタを調べます
シフト命令でv1レジスタの数値を16bit右にシフトさせると
12345678という数値が格納されていた場合
00001234と、16進数で4ケタずらす事が可能なので
画像1のプログラムをこのように書き換えます

これをコード化して、一人斬ってもう一度数値を見ます
9CB3C0A0 0836E7A6
9CB3C0A8 14530BA7
9CB3C0B0 B87AE75D

今度は、数値が155、16進数で009Bです


次に先ほど見つけた数値と組み合わせます
009B2DD0、これに48hを足して009B2E18
ここが本当に惨殺数のアドレスなのか確認します

109B2E18 0000270F
〜暗号化〜
4C0EB140 1456089C

マスターコードと一緒に使ってみると
惨殺数が9999になっています、ビンゴです
アドレスが分かったらあとの手順はお決まりの物
セーブデータ比較で探したり
周辺の数値を適当に書き換えて探します
その結果、帯刀1本目のコードが見つかりました

攻撃力9999
1C0EAE10 1456089C
防御力9999
1C0EAE14 1456089C
硬度5
3C0EAE18 1456E7A2
質8/8
1C0EAE1C 144EE79D