DQ6戦闘部分解説11

各コマンド入力の詳細部分の続きです。今回は「とくぎ」「じゅもん」の表面部分まで。

  • SR:$0239D2 戦闘コマンド処理1人分_特技
0239D2 JSL $C5F503 SR: $05F503 戦闘中特技選択画面を表示するか(c=onしない)
0239D6 BCS #$15 if(c==on) goto $0239ED
0239D8 STZ $3AC4 $3AC4=#$00
0239DB STY $386E $386E=Y
0239DE LDA #$00D7 A=#$00D7
0239E1 JSL $C37236 SR: $037236 ウィンドウ描画+ユーザー入力を得る(キャンセルc=on)
0239E5 BCS #$06 if(c==on) goto $0239ED
0239E7 JSR $3A0A SR: $023A0A 呪文特技対象選択処理
0239EA BVS #$F9 if(v==on) goto $0239E5
0239EC CLC c=off
0239ED RTS return

メインの処理自体は非常にシンプルで「習得している特技がなければメッセージを表示して終わり。習得していれば選択画面を出して対象選択処理をして終わり」というものです。ちなみに呪文も同じような構成です。

  • SR:$05F503 戦闘中特技選択画面を表示するか(c=onしない)
05F503 PHP Push P Flag
05F504 REP #$30 m=off(A/M:16b) x=off(X/Y:16b)
05F506 PHA Push A
05F507 PHX Push X
05F508 PHY Push Y
05F509 PHB Push DB
05F50A LDX $386E X=$386E
05F50D JSL $C45BD1 SR: $045BD1 引数:1#$02 引数:2#$FE 引数:3#$FF 特技習得数取得
05F514 CMP #$0000 A==#$0000?
05F517 BNE #$22 if(z==off) goto $05F53B
05F519 LDA #$0061 A=#$0061
05F51C JSL $C37236 SR: $037236 ウィンドウ描画+ユーザー入力を得る(キャンセルc=on)
05F520 JSL $C02A16 SR: $002A16 引数:1#$01B6 戦闘メッセージ表示「せんとうちゅうの とくぎを おぼえていない!」
05F526 JSL $C31BD0 SR: $031BD0 キー入力を待つ(R,Y入力無視)
05F52A LDA $38B0 A=$38B0
05F52D DEC A–
05F52E JSL $C3B4F9 SR: $03B4F9 指定ページ以上の深さのバッファクリア
05F532 PLB Pull DB
05F533 REP #$30 m=off(A/M:16b) x=off(X/Y:16b)
05F535 PLY Pull Y
05F536 PLX Pull X
05F537 PLA Pull A
05F538 PLP Pull P Flag
05F539 SEC c=on
05F53A RTL return
05F53B STA $3BB3 $3BB3=A
05F53E PLB Pull DB
05F53F REP #$30 m=off(A/M:16b) x=off(X/Y:16b)
05F541 PLY Pull Y
05F542 PLX Pull X
05F543 PLA Pull A
05F544 PLP Pull P Flag
05F545 CLC c=off
05F546 RTL return

このSRについても特に解説することもなく特技習得数を取得して0でないかを調べているだけです。呪文もほぼ同じ構造です。セットしているウィンドウIDが違うだけ(呪文:#$D6、特技:#$D7)です。

  • SR:$0239EE 戦闘コマンド処理1人分_呪文
0239EE JSL $C5F547 SR: $05F547
0239F2 BCS #$15 if(c==on) goto $023A09
0239F4 STZ $3AC4 $3AC4=#$00
0239F7 STY $386E $386E=Y
0239FA LDA #$00D6 A=#$00D6
0239FD JSL $C37236 SR: $037236
023A01 BCS #$06 if(c==on) goto $023A09
023A03 JSR $3A0A SR: $023A0A 呪文特技対象選択処理
023A06 BVS #$F9 if(v==on) goto $023A01
023A08 CLC c=off
023A09 RTS return

どちらも実行する特技・呪文を選択させた後、その対象を選択させるSR:$023A03 呪文特技対象選択処理をコールしているのですが、この中身が結構奥が深そうなのでちょっと中途半端ですが次回に回します。