前回に続いてメインループを見ていきます。こんだけ書いてるのにまだ入り口。ネタがまだ続くという意味ではいいのですが、よく調べないといけないので時間も取られるという諸刃の剣。
- 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マヒしていたら戦闘終了フラグを立てる、ということをしているんでしょうかね。格闘場かどうかで立てるフラグが若干変わるようです。


コメント