内容
ステータス・スキル
パッドコード
セーブデータ(スキル)
ステータス・スキル
はじめは最大値検索でステータスMAX
この後はセーブデータを参考にしようとしましたが、暗号化されていて手が出せない状態でした
しかし590◆k85oNvxc62さんから暗号化・復号化のコードを教えて頂いて
セーブデータを参考に出来る様になりました
詳しくはbenaturalさんのMainBBSを参照して下さい
相対アドレス | セーブアドレス | 効果 |
$0038 | $0860 | クラス |
$0044 | $086C | LV |
$0048 | $0870 | EXP |
$004C | $0874 | 現HP |
$0050 | $0878 | 現MP |
$0054 | $087C | AP |
$0058 | $0880 | SP |
$005C | $0884 | 最HP |
$0060 | $0888 | 最MP |
$00D4 | $08FC | サポートSKILL1つ目 |
EXP100の場合
addiu t7,zero,$0064
sw t7,$0048(a0)
APも同じでストアの相対アドレスを変えるだけです
HP・MP全回復の場合
HP
lw t7,$005c(a0)
sw t7,$004c(a0)
MP
lw t7,$0060(a0)
sw t7,$0050(a0)
回復コードは上記の様に最大値をロードし、その数値を現在値にストアする事で出来ます
パッドコード
私はこのソフトに対応したライブラリソフトを所持していなく、padinfoを移植できませんでした
ですので当初は諦めていましたがAP関係のコードが敵にも反映していた為、
パッドコードを使用しなくては意味がありません。その後考えた結果パッド判定をしている箇所を見つけられたら
パッドアドレスが分かるかもしれない…と思い、試しに探してみました
パッド判定はandiと分岐命令で処理している事が多いので、その辺りから探します
パッド情報はプラス形式の場合
0001 | L2 | SELECT |
0002 | R2 | L3 |
0004 | L1 | R3 |
0008 | R1 | START |
0010 | △ | ↑ |
0020 | ○ | → |
0040 | × | ↓ |
0080 | □ | ← |
0100 | SELECT | L2 |
0200 | R2 | L3 |
0400 | R3 | L1 |
0800 | START | R1 |
1000 | ↑ | △ |
2000 | → | ○ |
4000 | ↓ | × |
8000 | ← | □ |
試しに$4000で検索しましたがあまりうまくいきません
上の場合は失敗したので今度は40で検索してみました、するとそれらしいものが多数ありました
その一例として
どうやらハーフワードではなくバイトで判定しているようです
試しに青いバーの箇所と灰色のバーの箇所を次の様に書き換えてみました
すると上、右ボタンの操作が不能になりました
何カ所かで同様の判定をしているのかもしれませんが今回はとりあえず
lbu v1, $0188(a0)
lbu v1, $0189(a0)
でパッド判定している事が分かったので後は(a0)の値さえ分かればパッドコードが出来るはずです
具体的にはこの処理中から空きメモリにジャンプ。
590◆k85oNvxc62さん作成の所持金のワークコードのアドレスを
使用してa0レジスタの値を所持金に表示させます。
↓は実際とは違うアドレスです。
結果
2811200
と表示されましたので16進数に変換
002AE540
そうしてlbu v1, $0188(a0) の188hを足します
002AE6C8
後はこれをDコードに変えて終わりですが
ロードした値をzeroでnorつまり反転させた後andi v1,
v1, $00ff でバイトデータ000000xxへと変換しています
という事はマイナス形式でロードした後、プラス形式の様に変更しています
その為先ほどのコードはマイナス形式のパッドコードであるという事です
セーブデータ(スキル)
セーブアドレス | 効果 |
$0920 | アタックスキルカウント |
$0924 | アタックスキル種類1個目 |
$0928 | アタックスキルフラグ1個目 |
$0A3C | アタックスキル種類36個目 |
$0A40 | アタックスキルフラグ36個目 |
$0A44 | サポートスキルカウント |
$0A48 | サポートスキル種類1個目 |
$0A4C | サポートスキルフラグ1個目 |
$0D10 | サポートスキル種類90個目 |
$0D14 | サポートスキルフラグ90個目 |