DQ3戦闘部分解説5

前回に続いてメインループを見ていきます。こんだけ書いてるのにまだ入り口。ネタがまだ続くという意味ではいいのですが、よく調べないといけないので時間も取られるという諸刃の剣。

  • SR: $025B8B モンスター関連戦闘開始時処理
025B8BPHPPush P Flag
025B8CPHBPush DB
025B8DREP #$30m=off(A/M:16b) x=off(X/Y:16b)
025B8FPEA #$7E7EPush #$7E7E
025B92PLBPull DB
025B93PLBPull DB
025B94JSR $5BCESR: $025BCEモンスターが現れたメッセージ表示
025B97JSR $5C61SR: $025C61格闘場で自分が賭けたモンスターにグループID4をセット
025B9AJSR $5C02SR: $025C02戦闘基礎情報をコピー
025B9DJSR $5C3CSR: $025C3C先制・強襲メッセージ表示
025BA0JSR $5BA6SR: $025BA6デバッグモンスター用ウィンドウ表示
025BA3PLBPull DB
025BA4PLPPull P Flag
025BA5RTLreturn

  • SR: $025C61 格闘場で自分が賭けたモンスターにグループID4をセット
025C61PEA #$2011Push #$2011
025C64PEA #$0040Push #$0040
025C67PEA #$7E00Push #$7E00
025C6AJSL $C9029ESR: $09029ERAM上情報取得
025C6EBEQ #$4Fif(z==on) goto $025CBF格闘場で無ければスキップ
025C70PEA #$2011Push #$2011
025C73PEA #$000CPush #$000C
025C76PEA #$7E00Push #$7E00
025C79JSL $C9029ESR: $09029ERAM上情報取得
025C7DSTA $2426$2426=A格闘場で自分がかけたグループID取得?
025C80ASLA<<1
025C81TAXX=A
025C82LDY #$0008Y=#$0008
025C85LDA $23FE,XA=$23FE+X
025C88STZ $23FE,X$23FE+X=#$00
025C8BSTA $23FE,Y$23FE+Y=A
025C8ELDA $240E,XA=$240E+X
025C91STZ $240E,X$240E+X=#$00
025C94STA $240E,Y$240E+Y=A
025C97LDX #$0017X=#$0017
025C9AJSL $C2CAD9SR: $02CAD9 引数:1#$2050 引数:2#$0002存在フラグ取得?
025CA2BEQ #$18if(z==on) goto $025CBC
025CA4JSL $C2CAD9SR: $02CAD9 引数:1#$203C 引数:2#$00FFグループID取得
025CACCMP $2426A==$2426?
025CAFBNE #$0Bif(z==off) goto $025CBC
025CB1LDA #$0004A=#$0004
025CB4JSL $C2CB70SR: $02CB70 引数:1#$203C 引数:2#$00FFグループID変更
025CBCDEXX–
025CBDBPL #$DBif(n==off) goto $025C9A
025CBFRTSreturn

  • SR: $025C02 戦闘基礎情報をコピー
025C02LDA #$0000A=#$0000
025C05PEA #$23ABPush #$23AB
025C08PEA #$0030Push #$0030
025C0BPEA #$7E00Push #$7E00
025C0EJSL $C902E9SR: $0902E9戦闘中先制強襲フラグ変更
025C12PEA #$2011Push #$2011
025C15PEA #$0020Push #$0020
025C18PEA #$7E00Push #$7E00
025C1BJSL $C9029ESR: $09029Eイベント戦闘フラグ取得
025C1FBNE #$1Aif(z==off) goto $025C3B
025C21PEA #$2011Push #$2011
025C24PEA #$0003Push #$0003
025C27PEA #$7E00Push #$7E00
025C2AJSL $C9029ESR: $09029E先制強襲フラグ取得
025C2EPEA #$23ABPush #$23AB
025C31PEA #$0030Push #$0030
025C34PEA #$7E00Push #$7E00
025C37JSL $C902E9SR: $0902E9先制強襲フラグ変更
025C3BRTSreturn

ここでは先制・強襲情報を戦闘中使用領域にコピーします。イベント戦闘の場合は先制・強襲フラグはコピーしません。つまり、ボス戦では先制・強襲は発生しないということですね。

またメインループに戻って次のSRを見ます。

  • SR: $02B32F 戦闘終了時フラグセット?
02B32FCLCc=off
02B330PHPPush P Flag
02B331PHBPush DB
02B332REP #$30m=off(A/M:16b) x=off(X/Y:16b)
02B334PEA #$7E7EPush #$7E7E
02B337PLBPull DB
02B338PLBPull DB
02B339PHXPush X
02B33APHYPush Y
02B33BPHAPush A
02B33CPEA #$23ABPush #$23AB
02B33FPEA #$000FPush #$000F
02B342PEA #$7E00Push #$7E00
02B345JSL $C9029ESR: $09029ERAM上情報取得
02B349CMP #$0000A==#$0000?
02B34CBEQ #$05if(z==on) goto $02B353
02B34ECMP #$0006A==#$0006?
02B351BNE #$61if(z==off) goto $02B3B4
02B353LDX #$0000X=#$0000
02B356JSR $B3C5SR: $02B3C5
02B359BEQ #$07if(z==on) goto $02B362
02B35BINXX++
02B35CINXX++
02B35DJSR $B3E8SR: $02B3E8
02B360BNE #$59if(z==off) goto $02B3BB
02B362PEA #$2011Push #$2011
02B365PEA #$0040Push #$0040
02B368PEA #$7E00Push #$7E00
02B36BJSL $C9029ESR: $09029E
02B36FBEQ #$01if(z==on) goto $02B372
02B371INXX++
02B372LDA $C2B3C1,XA=$02B3C1+X
02B376PEA #$23ABPush #$23AB
02B379PEA #$000FPush #$000F
02B37CPEA #$7E00Push #$7E00
02B37FJSL $C902E9SR: $0902E9
02B383PEA #$2011Push #$2011
02B386PEA #$0040Push #$0040
02B389PEA #$7E00Push #$7E00
02B38CJSL $C9029ESR: $09029E
02B390BEQ #$22if(z==on) goto $02B3B4
02B392JSL $C2C739SR: $02C739 引数:1#$00生存者ビットを残す
02B397JSL $C270E1SR: $0270E1対象数カウント
02B39BBNE #$12if(z==off) goto $02B3AF
02B39DLDA #$0007A=#$0007
02B3A0PEA #$23ABPush #$23AB
02B3A3PEA #$000FPush #$000F
02B3A6PEA #$7E00Push #$7E00
02B3A9JSL $C902E9SR: $0902E9
02B3ADBRA #$05goto $02B3B4
02B3AFCMP #$0002A>=#$0002?
02B3B2BCS #$07if(c==on) goto $02B3BB
02B3B4LDA $08,SA=Stack($08)
02B3B6ORA #$0001Aor=#$0001
02B3B9STA $08,SStack($08)=A
02B3BBPLAPull A
02B3BCPLYPull Y
02B3BDPLXPull X
02B3BEPLBPull DB
02B3BFPLPPull P Flag
02B3C0RTLreturn

このSRはいまいち詳細が不明ですが、おそらく戦闘参加者が(片側全部)死亡orマヒしていたら戦闘終了フラグを立てる、ということをしているんでしょうかね。格闘場かどうかで立てるフラグが若干変わるようです。

コメント

タイトルとURLをコピーしました