DQ6 AI処理の解析11

今回はルカニ系の処理を見てみます。基本的にはやってることはスカラの逆です。

  • SR: $02DC86 AI判断用_SR_001C(ルカニ)
02DC86JSR $DCBBSR: $02DCBBPC側の攻撃力最小値取得
02DC89STZ $14DP($14)=#$00
02DC8BLDA #$0017A=#$0017
02DC8ESTA $258B$258B=A
02DC91LDY #$04ACY=#$04AC
02DC94LDA $203E,YA=$203E+Y現HP+脅威値合計が0ならスキップ
02DC97BEQ #$16if(z==on) goto $02DCAF
02DC99JSR $D4B1SR: $02D4B1対象のステータスを調べる(無効c=on 反射v=on)
02DC9CBCS #$11if(c==on) goto $02DCAF
02DC9EJSR $DD00SR: $02DD00モンスター側の現守備力最大値取得
02DCA1LDA $00A=DP($00)
02DCA3CMP $14A>=DP($14)?
02DCA5BCC #$08if(c==off) goto $02DCAF
02DCA7STA $14DP($14)=A
02DCA9LDA $258BA=$258B
02DCACSTA $2591$2591=A
02DCAFDEC $258B$258B–
02DCB2TYAA=Y
02DCB3SECc=on
02DCB4SBC #$0034A-=(#$0034+!c)
02DCB7TAYY=A
02DCB8BPL #$DAif(n==off) goto $02DC94
02DCBARTSreturn
  • SR: $02DCBB PC側の攻撃力最小値取得
02DCBBLDY #$04ACY=#$04AC
02DCBESTZ $08DP($08)=#$00
02DCC0LDA $205F,YA=$205F+Y
02DCC3AND #$0001A&=#$0001戦闘に参加していなければスキップ
02DCC6BEQ #$2Fif(z==on) goto $02DCF7
02DCC8LDA $204E,YA=$204E+Y
02DCCBAND #$0007A&=#$0007
02DCCECMP #$0006A>=#$0006?グループIDが味方でなければスキップ
02DCD1BCC #$24if(c==off) goto $02DCF7
02DCD3LDA $205E,YA=$205E+Y
02DCD6AND #$0004A&=#$0004不明?
02DCD9BNE #$1Cif(z==off) goto $02DCF7
02DCDBLDA $2050,YA=$2050+Y
02DCDEAND #$0002A&=#$0002生死判定
02DCE1BNE #$14if(z==off) goto $02DCF7
02DCE3LDA $2050,YA=$2050+Y
02DCE6AND #$0008A&=#$0008麻痺ならスキップ
02DCE9BNE #$0Cif(z==off) goto $02DCF7
02DCEBLDA $205A,YA=$205A+Y
02DCEEAND #$03FFA&=#$03FF攻撃力取得
02DCF1CMP $08A>=DP($08)?
02DCF3BCC #$02if(c==off) goto $02DCF7
02DCF5STA $08DP($08)=A
02DCF7TYAA=Y
02DCF8SECc=on
02DCF9SBC #$0034A-=(#$0034+!c)
02DCFCTAYY=A
02DCFDBPL #$C1if(n==off) goto $02DCC0
02DCFFRTSreturn
  • SR: $02DD00 モンスター側の現守備力の1/8を取得
02DD00LDA $2058,YA=$2058+Y
02DD03AND #$03FFA&=#$03FF守備力取得
02DD06ASLA <<1
02DD07SECc=on
02DD08SBC $08A-=(DP($08)+!c)
02DD0ABCC #$15if(c==off) goto $02DD21
02DD0CSTA $00DP($00)=A
02DD0ELDA $258BA=$258B
02DD11STA $2559$2559=A
02DD14PHYPush Y
02DD15JSL $C2A656SR: $02A656耐性を考慮した閾値取得
02DD19PLYPull Y
02DD1ALSR $00DP($00)>>1
02DD1CLSR $00DP($00)>>1
02DD1ELSR $00DP($00)>>1
02DD20RTSreturn
02DD21STZ $00DP($00)=#$00
02DD23RTSreturn

基本的には「ルカニを実行することでどれだけダメージが増えるか」を効果値として算出しているようです。当たり前といえば当たり前の話です。他にもメダパニなどは脅威値合計に成功率を書けたたもの(期待値?)を半減させるといった実装になっています。

というわけでざっくりとですがDQ6のAI実装を見てきました。基本的にはこの実装をベースに多少のアレンジを加えたものをDQ3に移植したわけですが、DQ6には存在しないピオリム、ボミオスについてはさじ加減がわからなかったので結局実装していません。素早さの上昇or低下がどれくらい効果値に変換できるのかというのが不明なため(明らかにスカラ・ルカニよりは低いでしょう)、実装したところで実際にAIが選択する局面はかなり限られると思ったのでとりあえず飛ばしました。次回総括のようなものをしてAIに関しては終わりにしようと思います。

コメント

  1. より:

    DQ6や3で特技会心・呪文会心ってプログラム的に可能ですか?

    管理者より返信:

    「やれば出来るんじゃないんですか」という感じですね。ダメージ加算周辺は前回の回答を参考にしてください。エフェクトやら発生時のメッセージを変える必要があるのでもうちょっと面倒だと思いますが。

  2. より:

    回答ありがとうございます!

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