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

次に幽霊船追加イベント中に傭兵が仲間に参加している場合の全滅判定です。傭兵を除いた3人、傭兵のみでの全滅判定をそれぞれ行い、該当していれば全滅扱いとする、という方針で作業します。ここで、$SR: $02C766の引数で指定できるアドレスの配列を拡張し、「傭兵のビットも生死にかかわらずOFFにする」「傭兵以外のビットも生死にかかわらずOFFにする」というSRを作れば従来の仕組みの中で対応出来ます。

  • SR: $05D8A0 幽霊船追加イベント中PC側全滅判定(新SR)
05D8A0JSL $C2C739SR: $02C739 引数:1#$08行動可能チェック用マスクデータ作成
05D8A5JSL $C2C766SR: $02C766 引数:1#$2C行動可能フラグセット(傭兵以外の生存チェック)
05D8AALDA $00A=DP($00)
05D8ACORA $02Aor=DP($02)
05D8AEBNE #$01if(z==off) goto $05D8B1
05D8B0RTSreturn
05D8B1JSL $C2C739SR: $02C739 引数:1#$08行動可能チェック用マスクデータ作成
05D8B6JSL $C2C766SR: $02C766 引数:1#$2E行動可能フラグセット(傭兵生存チェック)
05D8BBLDA $00A=DP($00)このSRを出た後で判定するので不要
05D8BDORA $02Aor=DP($02)このSRを出た後で判定するので不要
05D8BFRTSreturn

  • SR: $02C7FB 呼び出し元の後の1バイトを引数として取得し行動可能フラグセット
省略
02C84DJSR $C866SR: $($02C866+X)コールするSRの配列のアドレスを空き領域に移動
省略

  • SR: $02F3F5 傭兵以外生存フラグセット(新SR)
02F3F5JSL $C2BE8ASR: $02BE8A 引数:1#$24職業ID取得
02F3FACMP #$000CA==#$000C?職業IDが傭兵ならビットをOFFにする
02F3FDBEQ #$09if(z==on) goto $02F408
02F3FFJSL $C2BE8ASR: $02BE8A 引数:1#$1C生死判定
02F404BCS #$02if(c==on) goto $02F408死んでいたらビットをOFFにする
02F406SECc=on
02F407RTSreturn
02F408CLCc=off
02F409RTSreturn

  • SR: $02F40A 傭兵生存フラグセット(新SR)
02F40AJSL $C2BE8ASR: $02BE8A 引数:1#$24職業ID取得
02F40FCMP #$000CA==#$000C?職業IDが傭兵以外ならビットをOFFにする
02F412BNE #$09if(z==off) goto $02F41D
02F414JSL $C2BE8ASR: $02BE8A 引数:1#$1C生死判定
02F419BCS #$02if(c==on) goto $02F41D死んでいたらビットをOFFにする
02F41BSECc=on
02F41CRTSreturn
02F41DCLCc=off
02F41ERTSreturn

もっと大変だろうと思ったのですが仕組みを理解出来れば意外と簡単に実装できてしまいました。というわけで次回からはより大変かつ危険な移動中メニューにゲストの概念を導入していきます。

スポンサーリンク

コメントを書く

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