DQ3 ゲストキャラクター概念の追加2(戦闘中編2)

前回の解析結果を踏まえると、どうすればいいかという方向性が見えてきます。通常の全滅判定をした後、全滅していなければ特定条件下でのみ発動する追加の全滅判定を行えばいい、ということになります。というわけで今回はまず過去テドン編。「誰か一人が死んでいても全滅扱い」という条件を追加することにします。

  • SR: $02B32F 戦闘終了時フラグセット?
02B356 JSR $F320 SR: $02F320 PC側行動可能チェック
  • SR: $02F230 PC側行動可能チェック(新SR)
02F320 JSR $B3C5 SR: $02B3C5 PC側行動可能チェック
02F323 BNE #$01 if(z==off) goto $02F326
02F325 RTS return
02F326 JSL $C5D85F SR: $05D85F PC側行動可能チェック(特殊)
02F32A RTS return
  • SR: $05D85F PC側行動可能チェック(特殊)(新SR)
05D85F LDA $7E35B6 A=$7E35B6
05D863 AND #$0080 A&=#$0080 過去テドンイベント中か
05D866 BEQ #$05 if(z==on) goto $05D86D
05D868 JSR $D87B SR: $05D87B 過去テドンイベント中PC側全滅判定
05D86B BRA #$09 goto $05D876
05D86D JSL $C5E17F SR: $05E17F 傭兵がゲスト扱いか(該当c=on)
05D871 BCC #$03 if(c==off) goto $05D876
05D873 JSR $D8A0 SR: $05D8A0 幽霊船追加イベント中PC側全滅判定
05D876 LDA $00 A=DP($00)
05D878 ORA $02 Aor=DP($02)
05D87A RTL return
  • SR: $05D87B 過去テドンイベント中PC側全滅判定(新SR)
05D87B JSL $C2C739 SR: $02C739 引数:1#$08 行動可能チェック用マスクデータ作成
05D880 LDA $02 A=DP($02) PC側のビット情報をスタックにプッシュ
05D882 PHA Push A
05D883 LDA $00 A=DP($00) PC側のビット情報をスタックにプッシュ
05D885 PHA Push A
05D886 JSL $C2C766 SR: $02C766 引数:1#$00 行動可能フラグセット・死亡キャラクターはフラグをOFFにする
05D88B LDA $02 A=DP($02)
05D88D CMP $03,S A==Stack($03)? PC側のビット情報と比較する
05D88F BNE #$08 if(z==off) goto $05D899 一致していない(誰か死んでいる)場合は全滅扱い
05D891 LDA $00 A=DP($00)
05D893 CMP $01,S A==Stack($01)? PC側のビット情報と比較する
05D895 BNE #$02 if(z==off) goto $05D899 一致していない(誰か死んでいる)場合は全滅扱い
05D897 BRA #$04 goto $05D89D
05D899 STZ $00 DP($00)=#$00
05D89B STZ $02 DP($02)=#$00
05D89D PLA Pull A
05D89E PLA Pull A
05D89F RTS return

「誰か一人でも死んだら全滅」ということなので、戦闘に参加しているキャラクターのビット情報とそれを元に死人はビットをOFFにしたビット情報を比較して一致していなければ誰かが死んでいるということになるので全滅とする、とすればいいということになります。