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すればいいということなのだと思います。

コメント

  1. タカオ より:

     色々探しているうちにやっとこのページまでたどり着きました。
     実は暫くぶり新しい遊び方を試みてみようと、ver1.8.0時点で勇者抜いて平均レベル60前後の例えば賢僧呪魔の魔法中心のパーティで「フルオート対ボス戦」を目指したところ、賢者を「いのちだいじに」にいくら指定しても、他の二人以上が黄色表示の瀕死状態でも構わずベホマズンせずに僧侶にバイキルトをかけようとしてしまいます。
     これさえ避けられれば、かなりいい所まで行けるような気がしますが。
     何とかならないものでしょうか…(^^;

    管理者より返信:

    AI導入時のエントリでも書きましたが、現象発生時のSnes9x 1.51でのステートセーブを送ってください。

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