前回の解析結果を踏まえると、どうすればいいかという方向性が見えてきます。通常の全滅判定をした後、全滅していなければ特定条件下でのみ発動する追加の全滅判定を行えばいい、ということになります。というわけで今回はまず過去テドン編。「誰か一人が死んでいても全滅扱い」という条件を追加することにします。
| 略 |
|
|
|
| 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にしたビット情報を比較して一致していなければ誰かが死んでいるということになるので全滅とする、とすればいいということになります。
コメント