ステラデウス
キーワード
相対アドレス
パッドコード
ワークコード
内容
ステータス・スキル
パッドコード
セーブデータ(スキル)
ステータス・スキル
はじめは最大値検索でステータス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つ目 |
SP最大の処理の復帰(jr ra)をジャンプ(j)に変えて空き領域へ。
参考として私の場合よく$000f7000を使用しています
あとは相対アドレスを利用してEXP,HP,MP,APを追加してEXP,100,HP・MP全回復,
AP100,サポートSKILL1つ目連係『轟』装備を作りました
SPのストアはsw v1, $0058(a0)ですので空き領域には
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)
回復コードは上記の様に最大値をロードし、その数値を現在値にストアする事で出来ます
サポートSKILL1つ目連係『轟』装備の場合
addiu t3,zero,$00de
sw t3,$00d4(a0)
セーブデータから轟の数値が$00deであると分かったので$00deをストア。
パッドコード
私はこのソフトに対応したライブラリソフトを所持していなく、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 |
← |
□ |
ですからこの中から検索してもヒットしにくそうな数値を16bit検索します
試しに$4000で検索しましたがあまりうまくいきません
上の場合は失敗したので今度は40で検索してみました、するとそれらしいものが多数ありました
その一例として
00106f80 lbu v1, $0188(a0)
00106f84 nor v1, v1, zero
00106f88 andi v1, v1, $00ff
00106f8c andi a1, v1, $0001
00106f90 bne a1, zero, $00107068
00106f94 nop
00106f98 andi a1, v1, $0002
00106f9c bne a1, zero, $00107078
00106fa0 nop
00106fa4 andi a1, v1, $0004
00106fa8 bne a1, zero, $00107088
00106fac nop
00106fb0 andi a1, v1, $0008
00106fb4 bne a1, zero, $00107098
00106fb8 nop
00106fbc andi a1, v1, $0010
00106fc0 bne a1, zero, $001070a8
00106fc4 nop
00106fc8 andi a1, v1, $0020
00106fcc bne a1, zero, $001070b8
00106fd0 nop
00106fd4 andi a1, v1, $0040
00106fd8 bne a1, zero, $001070c8
00106fdc nop
00106fe0 andi v1, v1, $0080
00106fe4 bne v1, zero, $001070d8
00106fe8 nop
00106fec lbu v1, $0189(a0)
00106ff0 nor v1, v1, zero
00106ff4 andi a2, v1, $00ff
00106ff8 andi v1, a2, $0001
00106ffc bne v1, zero, $001070e8
00107000 nop
00107004 andi v1, a2, $0002
00107008 bne v1, zero, $001070f8
どうやらハーフワードではなくバイトで判定しているようです
試しに青いバーの箇所と灰色のバーの箇所を次の様に書き換えてみました
00106fbc andi a1, v1, $0020
00106fc0 bne a1, zero, $001070a8
00106fc4 nop
00106fc8 andi a1, v1, $0010
00106fcc bne a1, zero, $001070b8
すると上、右ボタンの操作が不能になりました
何カ所かで同様の判定をしているのかもしれませんが今回はとりあえず
lbu v1, $0188(a0)
lbu v1, $0189(a0)
でパッド判定している事が分かったので後は(a0)の値さえ分かればパッドコードが出来るはずです
具体的にはこの処理中から空きメモリにジャンプ。
00106f80 jal $000f7000
00106f84 lbu v1, $0188(a0)
00106f88 andi v1, v1, $00ff
00106f8c andi a1, v1, $0001
00106f90 bne a1, zero, $00107068
590◆k85oNvxc62さん作成の所持金のワークコードのアドレスを
使用してa0レジスタの値を所持金に表示させます。
↓は実際とは違うアドレスです。
000f7000 nor v1, v1, zero
000f7004 lui t0, $0079 t0=$00790000
000f7008 sw a0, $9abc(t0) [00789abc]
000f700c jr ra
結果
2811200
と表示されましたので16進数に変換
002AE540
そうしてlbu v1, $0188(a0) の188hを足します
002AE6C8
後はこれをDコードに変えて終わりですが
00106f80 lbu v1, $0188(a0)
00106f84 nor v1, v1, zero
00106f88 andi v1, v1, $00ff
00106f8c andi a1, v1, $0001
00106f90 bne a1, zero, $00107068
ロードした値をzeroでnorつまり反転させた後andi v1,
v1, $00ff でバイトデータ000000xxへと変換しています
という事はマイナス形式でロードした後、プラス形式の様に変更しています
その為先ほどのコードはマイナス形式のパッドコードであるという事です
結果パッドコードマイナス形式(復号化状態)は
D02AE6C8
である事が分かりました。
セーブデータ(スキル)
| セーブアドレス |
効果 |
| $0920 |
アタックスキルカウント |
| $0924 |
アタックスキル種類1個目 |
| $0928 |
アタックスキルフラグ1個目 |
| $0A3C |
アタックスキル種類36個目 |
| $0A40 |
アタックスキルフラグ36個目 |
| $0A44 |
サポートスキルカウント |
| $0A48 |
サポートスキル種類1個目 |
| $0A4C |
サポートスキルフラグ1個目 |
| $0D10 |
サポートスキル種類90個目 |
| $0D14 |
サポートスキルフラグ90個目 |
Ezスキルは省略します。
これは主人公のものですが、スキルを習得させるコードを作るのはかなり面倒です
まずカウントで習得する種類の数を設定し、スキルの種類を設定してそのスキルのフラグ$0001を
入力しなければなりません
スキルの数値も調べなくてはいけませんし、アタック・サポートスキルの全種類の個数が36・90を
超えているのであれば自分で種類を選ばなければなりません
没データもあるでしょうから恐らく超えていると思われます
コードを作っても説明をし難い為、コードを作る事は諦めました
戻る