DQ6戦闘部分解説10

今回は各コマンド入力の詳細部分です。まずは一番単純な「こうげき」です。

dq6戦闘画面3

  • SR:$0239C8 戦闘コマンド処理1人分_攻撃
0239C8LDA #$0042A=#$0042戦闘行動「こうげき」
0239CBSTA $258D$258D=A
0239CEJSR $3AA5SR: $023AA5行動対象情報セット
0239D1RTSreturn
  • SR:$023AA5 行動対象情報セット
023AA5LDX $258BX=$258B
023AA8LDA $258DA=$258D
023AABJSL $C2F034SR: $02F034 引数:1#$2034 引数:2#$01FF戦闘中キャラクター情報変更 インデックス:X
023AB3TAXX=A
023AB4JSL $C2F0DFSR: $02F0DF 引数:1#$C663 引数:2#$0003戦闘行動アクセス インデックス:X 対象種別を取得
023ABCASLA< <1
023ABDASLA< <1
023ABEPHAPush A
023ABFJSL $C23D46SR: $023D46対象範囲を取得
023AC3CLCc=off
023AC4ADC $01,SA+=(Stack($01)+c)
023AC6ASLA< <1
023AC7TAXX=A
023AC8PLAPull A
023AC9JSR $3B04SR: $($023B04+X)
023ACCBCS #$18if(c==on) goto $023AE6
023ACESTA $2591$2591=A
023AD1JSR $3AE7SR: $023AE7
023AD4LDX $258BX=$258B
023AD7LDA $2591A=$2591
023ADASTA $2591$2591=A
023ADDJSL $C2F034SR: $02F034 引数:1#$2035 引数:2#$00FE
023AE5CLCc=off
023AE6RTSreturn

ここはちょっとわかりにくいですが、対象種別(自分、味方、敵、敵・味方)に対象範囲(敵単体、敵グループ、敵全体、味方全体?)の4*4パターンのうち、どの対象決定SRを呼び出すかを決定しているようです。対象決定SRアドレスの配列は$023B04から16個連続して並んでいるので、どのSRを呼び出すかを$023ABC-C5で計算しているということになります。1例として、「対象:敵、範囲:単体」のSRは以下のようになっています。

  • SR:$023B52 行動対象情報設定SR_0008
023B52JSR $3B8CSR: $023B8C対象が1つだけなら選択不要
023B55BCC #$09if(c==off) goto $023B60
023B57LDA #$0075A=#$0075
023B5AJSL $C37236SR: $037236ウィンドウ描画+ユーザー入力を得る(キャンセルc=on)
023B5EBCS #$15if(c==on) goto $023B75
023B60LDA $3874A=$3874
023B63JSL $C2E939SR: $02E939 引数:1#$02ターゲット情報セット
023B68JSL $C2E966SR: $02E966 引数:1#$00ターゲット情報セット?
023B6DLDX #$0000X=#$0000
023B70JSL $C00F81SR: $000F81乱数発生(0-DP(00+x))
023B74CLCc=off
023B75RTSreturn

まず、対象が1つしかないなら選択は不要なのでウィンドウ表示をスキップしています。次に、ユーザーが選んだグループの生存キャラクターのマスク情報を作成し、そこからランダムで対象選択を行っています。DQ6の最終的な行動対象の選択はコマンド入力時に行われていることがわかります(行動時に対象が死んでいたら対象を選びなおす処理をしていると思いますが)。

コメント

タイトルとURLをコピーしました