前回に続いてメインループを見ていきます。こんだけ書いてるのにまだ入り口。ネタがまだ続くという意味ではいいのですが、よく調べないといけないので時間も取られるという諸刃の剣。
- SR: $025B8B モンスター関連戦闘開始時処理
025B8B | PHP | Push P Flag | |
---|---|---|---|
025B8C | PHB | Push DB | |
025B8D | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
025B8F | PEA #$7E7E | Push #$7E7E | |
025B92 | PLB | Pull DB | |
025B93 | PLB | Pull DB | |
025B94 | JSR $5BCE | SR: $025BCE | モンスターが現れたメッセージ表示 |
025B97 | JSR $5C61 | SR: $025C61 | 格闘場で自分が賭けたモンスターにグループID4をセット |
025B9A | JSR $5C02 | SR: $025C02 | 戦闘基礎情報をコピー |
025B9D | JSR $5C3C | SR: $025C3C | 先制・強襲メッセージ表示 |
025BA0 | JSR $5BA6 | SR: $025BA6 | デバッグモンスター用ウィンドウ表示 |
025BA3 | PLB | Pull DB | |
025BA4 | PLP | Pull P Flag | |
025BA5 | RTL | return |
- SR: $025C61 格闘場で自分が賭けたモンスターにグループID4をセット
025C61 | PEA #$2011 | Push #$2011 | |
---|---|---|---|
025C64 | PEA #$0040 | Push #$0040 | |
025C67 | PEA #$7E00 | Push #$7E00 | |
025C6A | JSL $C9029E | SR: $09029E | RAM上情報取得 |
025C6E | BEQ #$4F | if(z==on) goto $025CBF | 格闘場で無ければスキップ |
025C70 | PEA #$2011 | Push #$2011 | |
025C73 | PEA #$000C | Push #$000C | |
025C76 | PEA #$7E00 | Push #$7E00 | |
025C79 | JSL $C9029E | SR: $09029E | RAM上情報取得 |
025C7D | STA $2426 | $2426=A | 格闘場で自分がかけたグループID取得? |
025C80 | ASL | A<<1 | |
025C81 | TAX | X=A | |
025C82 | LDY #$0008 | Y=#$0008 | |
025C85 | LDA $23FE,X | A=$23FE+X | |
025C88 | STZ $23FE,X | $23FE+X=#$00 | |
025C8B | STA $23FE,Y | $23FE+Y=A | |
025C8E | LDA $240E,X | A=$240E+X | |
025C91 | STZ $240E,X | $240E+X=#$00 | |
025C94 | STA $240E,Y | $240E+Y=A | |
025C97 | LDX #$0017 | X=#$0017 | |
025C9A | JSL $C2CAD9 | SR: $02CAD9 引数:1#$2050 引数:2#$0002 | 存在フラグ取得? |
025CA2 | BEQ #$18 | if(z==on) goto $025CBC | |
025CA4 | JSL $C2CAD9 | SR: $02CAD9 引数:1#$203C 引数:2#$00FF | グループID取得 |
025CAC | CMP $2426 | A==$2426? | |
025CAF | BNE #$0B | if(z==off) goto $025CBC | |
025CB1 | LDA #$0004 | A=#$0004 | |
025CB4 | JSL $C2CB70 | SR: $02CB70 引数:1#$203C 引数:2#$00FF | グループID変更 |
025CBC | DEX | X– | |
025CBD | BPL #$DB | if(n==off) goto $025C9A | |
025CBF | RTS | return |
- SR: $025C02 戦闘基礎情報をコピー
025C02 | LDA #$0000 | A=#$0000 | |
---|---|---|---|
025C05 | PEA #$23AB | Push #$23AB | |
025C08 | PEA #$0030 | Push #$0030 | |
025C0B | PEA #$7E00 | Push #$7E00 | |
025C0E | JSL $C902E9 | SR: $0902E9 | 戦闘中先制強襲フラグ変更 |
025C12 | PEA #$2011 | Push #$2011 | |
025C15 | PEA #$0020 | Push #$0020 | |
025C18 | PEA #$7E00 | Push #$7E00 | |
025C1B | JSL $C9029E | SR: $09029E | イベント戦闘フラグ取得 |
025C1F | BNE #$1A | if(z==off) goto $025C3B | |
025C21 | PEA #$2011 | Push #$2011 | |
025C24 | PEA #$0003 | Push #$0003 | |
025C27 | PEA #$7E00 | Push #$7E00 | |
025C2A | JSL $C9029E | SR: $09029E | 先制強襲フラグ取得 |
025C2E | PEA #$23AB | Push #$23AB | |
025C31 | PEA #$0030 | Push #$0030 | |
025C34 | PEA #$7E00 | Push #$7E00 | |
025C37 | JSL $C902E9 | SR: $0902E9 | 先制強襲フラグ変更 |
025C3B | RTS | return |
ここでは先制・強襲情報を戦闘中使用領域にコピーします。イベント戦闘の場合は先制・強襲フラグはコピーしません。つまり、ボス戦では先制・強襲は発生しないということですね。
またメインループに戻って次のSRを見ます。
- SR: $02B32F 戦闘終了時フラグセット?
02B32F | CLC | c=off | |
---|---|---|---|
02B330 | PHP | Push P Flag | |
02B331 | PHB | Push DB | |
02B332 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
02B334 | PEA #$7E7E | Push #$7E7E | |
02B337 | PLB | Pull DB | |
02B338 | PLB | Pull DB | |
02B339 | PHX | Push X | |
02B33A | PHY | Push Y | |
02B33B | PHA | Push A | |
02B33C | PEA #$23AB | Push #$23AB | |
02B33F | PEA #$000F | Push #$000F | |
02B342 | PEA #$7E00 | Push #$7E00 | |
02B345 | JSL $C9029E | SR: $09029E | RAM上情報取得 |
02B349 | CMP #$0000 | A==#$0000? | |
02B34C | BEQ #$05 | if(z==on) goto $02B353 | |
02B34E | CMP #$0006 | A==#$0006? | |
02B351 | BNE #$61 | if(z==off) goto $02B3B4 | |
02B353 | LDX #$0000 | X=#$0000 | |
02B356 | JSR $B3C5 | SR: $02B3C5 | |
02B359 | BEQ #$07 | if(z==on) goto $02B362 | |
02B35B | INX | X++ | |
02B35C | INX | X++ | |
02B35D | JSR $B3E8 | SR: $02B3E8 | |
02B360 | BNE #$59 | if(z==off) goto $02B3BB | |
02B362 | PEA #$2011 | Push #$2011 | |
02B365 | PEA #$0040 | Push #$0040 | |
02B368 | PEA #$7E00 | Push #$7E00 | |
02B36B | JSL $C9029E | SR: $09029E | |
02B36F | BEQ #$01 | if(z==on) goto $02B372 | |
02B371 | INX | X++ | |
02B372 | LDA $C2B3C1,X | A=$02B3C1+X | |
02B376 | PEA #$23AB | Push #$23AB | |
02B379 | PEA #$000F | Push #$000F | |
02B37C | PEA #$7E00 | Push #$7E00 | |
02B37F | JSL $C902E9 | SR: $0902E9 | |
02B383 | PEA #$2011 | Push #$2011 | |
02B386 | PEA #$0040 | Push #$0040 | |
02B389 | PEA #$7E00 | Push #$7E00 | |
02B38C | JSL $C9029E | SR: $09029E | |
02B390 | BEQ #$22 | if(z==on) goto $02B3B4 | |
02B392 | JSL $C2C739 | SR: $02C739 引数:1#$00 | 生存者ビットを残す |
02B397 | JSL $C270E1 | SR: $0270E1 | 対象数カウント |
02B39B | BNE #$12 | if(z==off) goto $02B3AF | |
02B39D | LDA #$0007 | A=#$0007 | |
02B3A0 | PEA #$23AB | Push #$23AB | |
02B3A3 | PEA #$000F | Push #$000F | |
02B3A6 | PEA #$7E00 | Push #$7E00 | |
02B3A9 | JSL $C902E9 | SR: $0902E9 | |
02B3AD | BRA #$05 | goto $02B3B4 | |
02B3AF | CMP #$0002 | A>=#$0002? | |
02B3B2 | BCS #$07 | if(c==on) goto $02B3BB | |
02B3B4 | LDA $08,S | A=Stack($08) | |
02B3B6 | ORA #$0001 | Aor=#$0001 | |
02B3B9 | STA $08,S | Stack($08)=A | |
02B3BB | PLA | Pull A | |
02B3BC | PLY | Pull Y | |
02B3BD | PLX | Pull X | |
02B3BE | PLB | Pull DB | |
02B3BF | PLP | Pull P Flag | |
02B3C0 | RTL | return |
このSRはいまいち詳細が不明ですが、おそらく戦闘参加者が(片側全部)死亡orマヒしていたら戦闘終了フラグを立てる、ということをしているんでしょうかね。格闘場かどうかで立てるフラグが若干変わるようです。
コメント