すぐ上で説明しているシリアル再現プログラムですが
一部の要素では逆に使いにくくなってしまいます

三國無双ではフラグと言う事で、数値は01を書き込むだけでしたが
例えば、キャラステータスがフラグのように1つの数値で済まない場合
HPが9999、MPが999、攻撃力などが255などの場合は
それぞれの数値を各レジスタに格納したり
専用のループとストアも入れるとかなりの長さになるので
シリアル再現だけではちょっと面倒な構成と長さになります

こういう場合はテーブル管理を使ってみましょう
シリアル再現を使うより高効率になる可能性が高いです。
テーブル管理については、実際の解析手順の
デビルメイクライ2でも説明しているので余裕があればそちらも見て下さい


今回の題材は「ゼノサーガ エピソード1」です
すでに掲載済みの「特定のキャラステータスMAXコード」
の細かい仕組みを説明します。
まずは実際のコードを命令に直したものを見て下さい

特定キャラのステータスMAX
000F5000 lui t0,$0041
000F5004 ori t0,t0,$d800
000F5008 lui t1,$000f
000F500C lq t2,$5100(t1)
000F5014 sq t2,$0000(t0)
000F5018 sq t2,$0180(t0)
000F501C sq t2,$0300(t0)
000F5020 sq t2,$0600(t0)
000F5024 sq t2,$0780(t0)
000F5028 sq t2,$0900(t0)
000F5030 jr ra
--------------------------------
000F5100 0063270F
000F5104 03E703E7
000F5108 03E703E7
000F510C 00636363

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
各行の細かい説明です
000F5000 lui t0,$0041
キャラステータスの基盤値を格納

000F5004 ori t0,t0,$d800
キャラ一人目(ケイオス)の
ステータスアドレスをt0レジスタへ格納

000F5008 lui t1,$000f
t1レジスタに000F0000を格納

000F500C lq t2,$5100(t1)
アドレス000F5100からt2レジスタへ
クアッドデータ(4行分)をロードする

000F5014〜000F5028
各キャラのステータスアドレスへ
t2レジスタのクアッドデーア値をストアする

000F5030 jr ra
全体的な処理を終了させる

000F5100〜000F510C
キャラのステータス値を書き込んでおく
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜


000F500C lq t2,$5100(t1)
この命令でt2レジスタに000F5100から128bit分
つまり見た目で言えば4行分の数値がロードされますが
その000F5100には普通は空きメモリなので数値は入っていません
しかし、そのアドレスにこういうように数値が入るように
通常の書き込みコードも含まれているので

000F5100 0063270F
000F5104 03E703E7
000F5108 03E703E7
000F510C 00636363
という数値がこのアドレスに格納されています
この4行はワークコードのステータスMAXと同じ数値です
例えば、ケイオスステータスMAXを複合化すると
2041D800 0063270F
2041D804 03E703E7
2041D808 03E703E7
2041D80C 00636363
になります

このステータス値が書き込まれているアドレスから
クアッドデータ(4行分、128bitとも呼ぶ)の数値をt2レジスタにロードしたら
あとはそれをsq命令で各キャラのアドレスへストアします
MAXにしたくないキャラは未入力にすればOKです

この時点で「どうしてそれでMAXになるの?」と感じた方は
酷な言い方ですが、もっとちょっと勉強しましょう(汗)
どちらかと言えば中級者向けな改造法かと・・・
恐らくここまでで分からなかった使いこなせないと思います。



実は、このlqとsqを使った方法は
アライメントの関係で汎用性がちょっと低いのが難点です
アドレスが10h単位(最下位4bitが0)で無ければ使用できない
つまり、16進数でのアドレス末尾が0でなければ使用できません

末尾が0ではない場合は、ld,sdやlw,swに変える必要がありますが
これでも上手くアドレスに合わせられない時もあります
こういう場合はアライメントに沿わなくても使える
ロード&ストア命令を駆使して調整する必要がありますが
これについてはまた今後の機会に。
多分、私は説明下手な方なので分かり難さ倍増だと思うので(汗)
もうちょっとPS2改造界が全体的にレベルアップしたらですね。

ちなみに、ちょっとした専門用語などは簡易用語集参照。


値をテーブルにして管理する方法は
FF10インターナショナルの特定キャラのステータス最大
.hackシリーズの全員ステータスMAX
真・三國無双2猛将伝の全武将ステータスMAX
などでも使っているので、命令に戻して見たりして下さい。