DQ6 AI処理の解析6

だいぶ間が空いてしまいました。まずは回復系の効果値の算出について見てみます。

  • SR: $02D8FC AI判断用_SR_0007
02D8FCSTZ $14DP($14)=#$00
02D8FELDA #$0017A=#$0017
02D901STA $258B$258B=A
02D904LDY #$04ACY=#$04AC
02D907LDA $205F,YA=$205F+Y
02D90AAND #$0001A&=#$0001
02D90DBEQ #$34if(z==on) goto $02D943
02D90FLDA $204E,YA=$204E+Y
02D912AND #$0007A&=#$0007
02D915CMP #$0006A>=#$0006?
02D918BCC #$29if(c==off) goto $02D943
02D91ALDA $205E,YA=$205E+Y
02D91DAND #$0004A&=#$0004
02D920BNE #$21if(z==off) goto $02D943
02D922LDA $2050,YA=$2050+Y
02D925AND #$0002A&=#$0002
02D928BNE #$19if(z==off) goto $02D943
02D92ALDA $2059,YA=$2059+Y
02D92DAND #$00C0A&=#$00C0
02D930BNE #$11if(z==off) goto $02D943
02D932JSR $D94FSR: $02D94F回復行動効果値算出
02D935LDA $00A=DP($00)
02D937CMP $14A>=DP($14)?
02D939BCC #$08if(c==off) goto $02D943
02D93BSTA $14DP($14)=A
02D93DLDA $258BA=$258B
02D940STA $2591$2591=A
02D943TYAA=Y
02D944SECc=on
02D945SBC #$0034A-=(#$0034+!c)
02D948TAYY=A
02D949DEC $258B$258B–
02D94CBPL #$B9if(n==off) goto $02D907
02D94ERTSreturn

ここは単に外枠に当たる部分で戦闘に参加しているキャラクターでループしているだけなので取り立てて説明するべきところはありません。

  • SR: $02D94F 回復行動効果値算出
02D94FSTZ $00DP($00)=#$00
02D951LDA $203C,YA=$203C+Y$203Cには最大HPがセットされている
02D954PHAPush A
02D955SECc=on
02D956SBC $2030,YA-=($2030+Y+!c)最大HPと現HPの差(HP減少分)を取得
02D959STA $02DP($02)=AHP減少分をセット
02D95BPLAPull A
02D95CLSRA>>1
02D95DCMP $2030,YA>=$2030+Y?
02D960BCC #$0Cif(c==off) goto $02D96EHPが最大HPの50%以上
02D962LSRA>>1
02D963CMP $2030,YA>=$2030+Y?
02D966BCC #$13if(c==off) goto $02D97BHPが最大HPの25%を切っている
02D968JSR $D988SR: $02D988回復量最小値をHP減少分でクリップ
02D96BASL $00DP($00)<<1ピンチなので効果値を2倍にする
02D96DRTSreturn
02D96EJSR $D988SR: $02D988回復量最小値をHP減少分でクリップ
02D971LDA $0EA=DP($0E)
02D973CMP #$0004A==#$0004?作戦がいのちだいじにでなければ効果値1/2
02D976BEQ #$02if(z==on) goto $02D97A
02D978LSR $00DP($00)>>1
02D97ARTSreturn
02D97BJSR $D988SR: $02D988回復量最小値をHP減少分でクリップ
02D97ELDA $0EA=DP($0E)
02D980CMP #$0000A==#$0000?作戦がガンガンいこうぜなら効果値1/2
02D983BNE #$02if(z==off) goto $02D987
02D985LSR $00DP($00)>>1
02D987RTSreturn

現HPが最大HPの50%以上、25%~50%、25%未満の3パターンで効果値の動作が変わっています。行動種別ごとの作戦毎の補正とは別に特別な処理をしているわけです。

アドレス動作
50%以上$02D96E-7A「いのちだいじに」でなければ効果値1/2(あまり必要性がない)
25%~50%$02D97B-87「ガンガンいこうぜ」であれば効果値1/2
25%未満$02D966-6D作戦にかかわらず効果値2倍(ピンチなので)

  • SR: $02D988 回復量最小値をHP減少分でクリップ
02D988LDA $258BA=$258B
02D98BSTA $2559$2559=A
02D98EPHYPush Y
02D98FJSL $C9291ASR: $09291A回復量の最小値を取得
02D993PLYPull Y
02D994LDA $0CA=DP($0C)
02D996CMP #$8020A==#$8020?山彦による2回発動対象か
02D999BNE #$02if(z==off) goto $02D99D
02D99BASL $00DP($00)<<1山彦発動なら2倍にする
02D99DLDA $02A=DP($02)
02D99FCMP $00A>=DP($00)?
02D9A1BCS #$02if(c==on) goto $02D9A5
02D9A3STA $00DP($00)=A
02D9A5RTSreturn

効果値の算出ですが、最大HP-HPの値と対象の戦闘行動の最小回復値を比較して値の小さいものを効果値として採用しています。これは最大HP30、現HP10のキャラクターに無意味にベホマを使わないようにするためです(ホイミで事足りるのでホイミを使うべき)。次回以降はダメージ系、確率系の効果値の算出を見ていきます。

スポンサーリンク

コメントを書く

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