DQ6 AI処理の解析10

今回はスカラ系を見てみます。バイキルト同様数値化が難しいものの、AIの選択肢から外すということは考えられないので解析は避けて通れません。

  • SR: $02DBB2 AI判断用_SR_0014(スカラ)
02DBB2LDA $0EA=DP($0E)
02DBB4CMP #$0002A==#$0002?作戦が俺に任せろか
02DBB7BEQ #$21if(z==on) goto $02DBDA
02DBB9JSR $DBF1SR: $02DBF1モンスターの攻撃力最大値取得
02DBBCSTZ $14DP($14)=#$00
02DBBELDX #$0017X=#$0017
02DBC1LDY #$04ACY=#$04AC
02DBC4JSR $DC10SR: $02DC10モンスターの攻撃力最大値取得
02DBC7CMP $14A>=DP($14)?
02DBC9BCC #$05if(c==off) goto $02DBD0
02DBCBSTA $14DP($14)=A
02DBCDSTX $2591$2591=X
02DBD0TYAA=Y
02DBD1SECc=on
02DBD2SBC #$0034A-=(#$0034+!c)
02DBD5TAYY=A
02DBD6DEXX–
02DBD7BPL #$EBif(n==off) goto $02DBC4
02DBD9RTSreturn
02DBDAJSR $DBF1SR: $02DBF1元の守備力の1/8を取得
02DBDDSTZ $14DP($14)=#$00
02DBDFLDA #$0001A=#$0001
02DBE2JSL $C2C3BASR: $02C3BA主人公が戦闘に参加しているか(該当c=off)
02DBE6BCS #$08if(c==on) goto $02DBF0
02DBE8STX $2591$2591=X
02DBEBJSR $DC10SR: $02DC10モンスターの攻撃力最大値取得
02DBEESTA $14DP($14)=A
02DBF0RTSreturn
  • SR: $02DBF1 モンスターの攻撃力最大値取得
02DBF1STZ $00DP($00)=#$00
02DBF3LDY #$04ACY=#$04AC
02DBF6LDA $2046,YA=$2046+Y打撃攻撃脅威値が0ならスキップ(味方なら0?)
02DBF9BEQ #$0Cif(z==on) goto $02DC07
02DBFBLDA $205A,YA=$205A+Y
02DBFEAND #$03FFA&=#$03FF攻撃力取得
02DC01CMP $00A>=DP($00)?
02DC03BCC #$02if(c==off) goto $02DC07
02DC05STA $00DP($00)=A
02DC07TYAA=Y
02DC08SECc=on
02DC09SBC #$0034A-=(#$0034+!c)
02DC0CTAYY=A
02DC0DBPL #$E7if(n==off) goto $02DBF6
02DC0FRTSreturn
  • SR: $02DC10 元の守備力の1/8を取得
02DC10LDA $205F,YA=$205F+Y
02DC13AND #$0001A&=#$0001戦闘に参加していなければスキップ
02DC16BEQ #$44if(z==on) goto $02DC5C
02DC18LDA $204E,YA=$204E+Y
02DC1BAND #$0007A&=#$0007
02DC1ECMP #$0006A>=#$0006?グループIDが味方でなければスキップ
02DC21BCC #$39if(c==off) goto $02DC5C
02DC23LDA $205E,YA=$205E+Y
02DC26AND #$0004A&=#$0004不明?
02DC29BNE #$31if(z==off) goto $02DC5C
02DC2BLDA $2050,YA=$2050+Y
02DC2EAND #$0002A&=#$0002生死判定
02DC31BNE #$29if(z==off) goto $02DC5C
02DC33LDA $2059,YA=$2059+Y
02DC36AND #$00C0A&=#$00C0マホカンタ・マホターンならスキップ
02DC39BNE #$21if(z==off) goto $02DC5C
02DC3BLDA $204E,YA=$204E+Y
02DC3EAND #$0008A&=#$0008守備力が最大ならスキップ
02DC41BNE #$19if(z==off) goto $02DC5C
02DC43LDA $2058,YA=$2058+Y現守備力取得
02DC46LSRA>>1
02DC47CMP $00A>=DP($00)?現守備力の1/2とバッファ中の最大値を比較
02DC49BCS #$11if(c==on) goto $02DC5C
02DC4BLDA $204F,YA=$204F+Y
02DC4EAND #$00FFA&=#$00FF
02DC51JSL $C45124SR: $045124 引数:1#$07 引数:2#$FF 引数:3#$FF元の守備力取得
02DC58LSRA>>1
02DC59LSRA>>1
02DC5ALSRA>>1
02DC5BRTSreturn
02DC5CLDA #$0000A=#$0000
02DC5FRTSreturn

要は「スカラを実行することでどれだけダメージを抑えられるか」ということを算出しているようです。DQ6でのダメージ算出式は守備力は1/4されてさらに期待値50%前後の値だったはずなのでモデルとして1/8すればいいということなのだと思います。

スポンサーリンク

コメントを書く

メールアドレスが公開されることはありません。コメントは管理者の承認後表示されます。