関数
FE改造で使えそうな関数があったら追記してください。
0x080B9DEC 売り値を求める関数 †
引数 †
引数 r0 に、個数 << 8 + アイテムID、として渡す。
例:レイピア60個 0x3c09 3c=60 09=レイピアのアイテムID
戻り値 †
売値が r0 で返ってくる。
sample †
mov r0,0x09 ;レイピア mov r1,0x3c ;60個 lsl r1,#0x8 ;個数 << 8 + アイテムID add r0,r1 ; ldr r1,=$080B9DEC mov lr, r1 @dcw $F800 ;r0に売値が返ってくる.
0x0800d340 イベント命令を動作させる関数 †
引数 †
引数 r0 に、呼び出したいイベント命令のポインタを設定する。
引数 r1 に、謎の引数を設定する1-3まであるらしい。とりあえず1推奨。
注意: ポインタは mov ではなく、ldr でセットしないと値が消えて null になるよ。
戻り値 †
不明
sample †
;093AA9B0 においてあるイベントを呼び出す場合 ldr r0, =$093AA9B0 ;呼びだしたいイベント命令 mov r1,#0x1 ;とりあえず1 ldr r2,=$0800d340 ;イベント呼び出し mov lr, r2 @dcw $F800
注意点 †
この命令を呼ぶと、イベントキューみたいなものに情報が詰まれ、
メニュー等を閉じた時にイベントが発動するらしい?
この命令を連続して呼ぶと、呼んだ数だけイベントが動作する。
戦闘準備などのwindowsでいうモーダルダイアログのようなものを実行している間はイベントが発動しない。(閉じれば発動する)
0x080860A8 フラグを立てる関数 †
引数 †
引数 r0 に、立てたいフラグを番号を書く。
戻り値 †
不明
sample †
;フラグ1番を立てる場合 mov r0,#0x1 ; 立てたいフラグ番号 ldr r1, =$080860A8 mov r14, r1 @dcw $F800
0x080860D0 フラグ状態確認関数 †
引数 †
引数 r0 にチェックしたいフラグIDを入れる
戻り値 †
r0=0 フラグがオフの状態
r0=1 フラグがオンの状態
sample †
;フラグ1番の状態を確認する場合 mov r0,#0x1 ; チェックしたいフラグ番号 ldr r1, =$080860D0 mov r14, r1 @dcw $F800
0x0800D548 文字列番号の会話を表示する関数 †
引数 †
引数 r0 に、文字列番号を入れる
戻り値 †
不明
sample †
;オニールの死亡台詞 8D7 を出す mov r0,#0x8D7 ;多分これでいい。ダメならldrで。 ldr r1, =$0800D548 mov r14, r1 @dcw $F800
注意 †
この関数はくせがあるらしく、あとの処理でwaitがかからないと、@0003が複数あるとおかしくなることがある?
0x080d4ef4 効果音を鳴らす関数 †
引数 †
引数 r0 に、文字列番号を入れる
戻り値 †
不明
sample †
;効果音 0x6a番を鳴らす mov r0,#0x6a ldr r2,=$080d4ef4 ;効果音を鳴らす mov lr, r2 @dcw $F800
ただし、この関数は、必ず効果音を鳴らしてしまうので、設定の是非を確認する必要がある。
ldr r0,=$0202bcec ;設定で効果音がONかどうか add r0,#0x41 ldrb r0,[r0] lsl r0,r0,#0x1e cmp r0,#0x0 beq sound_skip mov r0,#0x6a ldr r2,=$080d4ef4 ;効果音を鳴らす mov lr, r2 @dcw $F800 sound_skip
0x0802cb70 経験値+10する関数 †
引数 †
引数 r0 に、経験値をあげたいキャラクタへのポインタが入る(多分)
戻り値 †
不明
sample †
ldr r0, [経験値をあげたいキャラクタへのポインタ] ldr r2, =$0802cb70 ;;+10 経験値取得関数へ mov r14, r2 @dcw $F800
注意 †
もし、任意の経験値をあげたい場合は、怪盗パッチのasmの kaihou_ex.asm を参考にしてください。
0x08034520 マップ番号から、マップ設定のポインタを返す関数 †
引数 †
引数 r0 に、マップIDを入れる
戻り値 †
r0に、マップ設定のポインタが返ってくる
sample †
mov r0, #0x01 #1章のマップ設定が見たい ldr r2, =$08034520 ;; mov r14, r2 @dcw $F800
;;r0 にマップ設定のポインタが返ってくる
080a8d94 クリアターンを書き込む関数 †
引数 †
引数 r0 に、202bcecを入れる(固定?)
戻り値 †
なし
sample †
;引数 r0 ldr r0,=$202bcec ;ターン数書込関数呼び出し ldr r1,=$080a8d94 mov lr, r1 @dcw $F800
0203ECF0- からの領域に、クリアターンを書き込みます。 これを使ったあとは、 #0x03フラグを降ろさないと、2度書きすることがあるので注意
08002c30 6C Structスクリプトロード †
引数 †
引数 r0 に、スクリプトアドレス
引数 r1 は不明
戻り値 †
不明
08000d68 パレット読込 †
引数 †
引数 r0 に、パレットアドレス
引数 r1 は不明
引数 r2 は不明
戻り値 †
不明
08013008 圧縮されているデータの解凍 †
引数 †
引数 r0 に、読み込む lz77圧縮されている画像やデータ
引数 r1 に、解凍後に配置するBGアドレスorメモリアドレス
戻り値 †
不明
080dc0dc 無圧縮TSA読込? †
引数 †
引数 r0 は不明
引数 r1 は無圧縮TSAアドレス
引数 r2 は不明
引数 r3 は不明
08008914 会話@0080@0005で参照できるところに数字を書く †
引数 r0 に表示したい数字
sample †
ldr r0,=$00123456 ;表示したい数字 ldr r1,=$08008914 mov lr, r1 @dcw $F800
注意点:@0080@0005は吹きだしの会話でしか取れない。システムメッセージでは読めない。
08002424 BGMを切り替える †
BGM入りかえの最上位関数?
引数 †
引数 r0 がBGM番号
引数 r1 は謎、下位の080023C8のr2として渡される.
080023C8 BGMを切り替える †
現在のBGMなどを加味して、必要なら曲切り替え命令を発行する。
引数 †
引数 r0 がBGM番号
引数 r1 は謎
引数 r2 は謎
08002398 BGMを切り替える †
メモリにBGM番号を書き込みをして、BGMを切り替える。
引数 †
引数 r0 がBGM番号
0808941c ステータス画面1のレイアウト処理 †
文字表示、ゲージ表示、数値表示、属性アイコン表示、勝敗数表示などの処理が含まれている。
抜粋 †
00089554 68e8 ldr r0, [r5, #12] 00089556 f78f fd05 bl $00018f64=補正込み守備読み込み 0008955a 68e9 ldr r1, [r5, #12] 0008955c 2317 mov r3, #23 0008955e 56cb ldsb r3, [r1, r3] //守備読み込み 00089560 9000 str r0, [sp, #0] //補正込み守備書き込み 00089562 6848 ldr r0, [r1, #4] 00089564 7dc0 ldrb r0, [r0, #23] //守備上限読み込み 00089566 0600 lsl r0, r0, #24 00089568 1600 asr r0, r0, #24 0008956a 9001 str r0, [sp, #4] //守備上限書き込み 0008956c 2004 mov r0, #4 0008956e 2105 mov r1, #5 //ゲージx座標 00089570 2209 mov r2, #9 //ゲージy座標 00089572 f7ff feef bl $00089354 //ゲージ表示処理
08088830 エイリーク編(ヴェルニ出現後)に切り替え †
主人公がエイリーク($01)になる
400d0000 31880808
上記のようにすれば、イベント命令として章イベント中に実行できるが、本来は章分岐の関数を無理矢理呼んでいるだけなので、副作用があるかもしれない
0808884c エフラム編に切り替え †
主人公がエフラム($0F)になる
400d0000 4d880808
上記のようにすれば、イベント命令として章イベント中に実行できるが、本来は章分岐の関数を無理矢理呼んでいるだけなので、副作用があるかもしれない