DQ6戦闘部分解説3

前回からの続きです。まだ戦闘は始まっていません。

  • SR: $02BF22 時の砂使用時処理+戦闘終了判定?
02BF22CLCc=off
02BF23PHPPush P Flag
02BF24REP #$30m=off(A/M:16b) x=off(X/Y:16b)
02BF26PHAPush A
02BF27PHXPush X
02BF28PHYPush Y
02BF29PHBPush DB
02BF2APEA #$7E7EPush #$7E7E
02BF2DPLBPull DB
02BF2EPLBPull DB
02BF2FLDA $255FA=$255F
02BF32CMP #$00CCA==#$00CC?時の砂の戦闘行動ID
02BF35BEQ #$05if(z==on) goto $02BF3C
02BF37CMP #$0143A==#$0143?時の砂の戦闘行動ID
02BF3ABNE #$4Cif(z==off) goto $02BF88
02BF3CLDA #$0007A=#$0007戦闘終了フラグセット(時の砂)
02BF3FPEA #$2514Push #$2514
02BF42PEA #$001EPush #$001E
02BF45PEA #$7E00Push #$7E00
02BF48JSL $C929B0SR: $0929B0RAM上情報変更
02BF4CJSL $C47ABBSR: $047ABB時の砂使用時に戦闘開始時の状態にリストアする
02BF50LDA $255FA=$255F
02BF53CMP #$0143A==#$0143?時の砂の戦闘行動ID
02BF56BNE #$28if(z==off) goto $02BF80
02BF58LDX $2555X=$2555
02BF5BJSL $C2EFA7SR: $02EFA7 引数:1#$204F 引数:2#$01FF戦闘中キャラクター情報取得 インデックス:X
02BF63CMP #$0100A>=#$0100?PC側なら#$100以上
02BF66BCC #$18if(c==off) goto $02BF80
02BF68AND #$00FFA&=#$00FF
02BF6BLDY #$00D9Y=#$00D9時の砂のアイテムID
02BF6EJSL $C45217SR: $045217 引数:1#$FD 引数:2#$07 引数:3#$FF 引数:4#$FEアイテム装備チェック
02BF76BCS #$08if(c==on) goto $02BF80
02BF78JSL $C4535CSR: $04535C 引数:1#$07 引数:2#$FF 引数:3#$FE 引数:4#$40アイテムをPCから削除する
02BF80PLBPull DB
02BF81REP #$30m=off(A/M:16b) x=off(X/Y:16b)
02BF83PLYPull Y
02BF84PLXPull X
02BF85PLAPull A
02BF86PLPPull P Flag
02BF87RTLreturn
02BF88PEA #$2514Push #$2514
02BF8BPEA #$001EPush #$001E
02BF8EPEA #$7E00Push #$7E00
02BF91JSL $C92965SR: $092965RAM上情報取得
02BF95CMP #$0005A==#$0005?
02BF98BEQ #$E6if(z==on) goto $02BF80
02BF9ALDA #$0006A=#$0006
02BF9DJSL $C2E939SR: $02E939 引数:1#$02ターゲット情報セット
02BFA2JSL $C2E966SR: $02E966 引数:1#$04ターゲット情報セット
02BFA7JSL $C2E966SR: $02E966 引数:1#$00ターゲット情報セット
02BFACJSL $C2E9C6SR: $02E9C6 引数:1#$28ターゲット情報セット
02BFB1JSL $C2E9C6SR: $02E9C6 引数:1#$44ターゲット情報セット
02BFB6JSL $C2E9C6SR: $02E9C6 引数:1#$54
02BFBBLDA $00A=DP($00)
02BFBDORA $02Aor=DP($02)
02BFBFBNE #$62if(z==off) goto $02C023
02BFC1JSL $C2E939SR: $02E939 引数:1#$4E
02BFC6LDA $00A=DP($00)
02BFC8ORA $02Aor=DP($02)
02BFCABEQ #$20if(z==on) goto $02BFEC
02BFCCLDA #$0006A=#$0006
02BFCFJSL $C2E939SR: $02E939 引数:1#$02
02BFD4JSL $C2E9C6SR: $02E9C6 引数:1#$28
02BFD9JSL $C2E9C6SR: $02E9C6 引数:1#$44
02BFDEJSL $C2E9C6SR: $02E9C6 引数:1#$54
02BFE3JSL $C252DFSR: $0252DF
02BFE7CMP #$0002A>=#$0002?
02BFEABCS #$65if(c==on) goto $02C051
02BFECJSL $C2E939SR: $02E939 引数:1#$52
02BFF1LDA $00A=DP($00)
02BFF3ORA $02Aor=DP($02)
02BFF5BEQ #$27if(z==on) goto $02C01E
02BFF7LDA #$0006A=#$0006
02BFFAJSL $C2E939SR: $02E939 引数:1#$02
02BFFFJSL $C2E966SR: $02E966 引数:1#$00
02C004JSL $C2E9C6SR: $02E9C6 引数:1#$28
02C009JSL $C2E9C6SR: $02E9C6 引数:1#$44
02C00EJSL $C2E9C6SR: $02E9C6 引数:1#$54
02C013LDA $00A=DP($00)
02C015ORA $02Aor=DP($02)
02C017BEQ #$05if(z==on) goto $02C01E
02C019JSR $C096SR: $02C096戦闘参加キャラクター生存チェック(z=off生存)
02C01CBNE #$33if(z==off) goto $02C051
02C01EJSR $C0A5SR: $02C0A5全滅時馬車メンバー戦闘参加処理(参加不可c=on)
02C021BCS #$4Cif(c==on) goto $02C06F
02C023JSR $C096SR: $02C096戦闘参加キャラクター生存チェック(z=off生存)
02C026BNE #$42if(z==off) goto $02C06A
02C028PEA #$2513Push #$2513
02C02BPEA #$00C0Push #$00C0
02C02EPEA #$7E00Push #$7E00
02C031JSL $C92965SR: $092965RAM上情報取得
02C035BEQ #$3Dif(z==on) goto $02C074
02C037PEA #$2513Push #$2513
02C03APEA #$0030Push #$0030
02C03DPEA #$7E00Push #$7E00
02C040JSL $C92965SR: $092965RAM上情報取得
02C044BEQ #$2Eif(z==on) goto $02C074
02C046DECA–
02C047BEQ #$30if(z==on) goto $02C079
02C049DECA–
02C04ABEQ #$32if(z==on) goto $02C07E
02C04CLDA #$0001A=#$0001
02C04FBRA #$30goto $02C081
02C051STZ $2547$2547=#$00
02C054LDA #$0001A=#$0001
02C057PEA #$2516Push #$2516
02C05APEA #$0010Push #$0010
02C05DPEA #$7E00Push #$7E00
02C060JSL $C929B0SR: $0929B0RAM上情報変更
02C064LDA #$0002A=#$0002戦闘終了フラグ(全消し?)
02C067STA $2545$2545=A
02C06ALDA #$0000A=#$0000戦闘終了フラグ(フリーズ?)
02C06DBRA #$12goto $02C081
02C06FLDA #$0004A=#$0004戦闘終了フラグ(全滅)
02C072BRA #$0Dgoto $02C081
02C074LDA #$0006A=#$0006戦闘終了フラグ(モンスター不在)
02C077BRA #$08goto $02C081
02C079LDA #$0003A=#$0003戦闘終了フラグ(モンスター逃走)
02C07CBRA #$03goto $02C081
02C07ELDA #$0002A=#$0002戦闘終了フラグ(勝利)
02C081PEA #$2514Push #$2514
02C084PEA #$001EPush #$001E
02C087PEA #$7E00Push #$7E00
02C08AJSL $C929B0SR: $0929B0RAM上情報変更
02C08EPLBPull DB
02C08FREP #$30m=off(A/M:16b) x=off(X/Y:16b)
02C091PLYPull Y
02C092PLXPull X
02C093PLAPull A
02C094PLPPull P Flag
02C095RTLreturn

前半は時の砂を使った時の処理です。時の砂を手持ちのアイテムから削除し、退避しておいた戦闘開始直後の状態をりすとあしています。後半はどうやらパーティの状態に応じて戦闘終了フラグをセットしているようです。また、パーティが全滅していたら馬車待機中のキャラクターを戦闘に参加させたりしているようです。

  • 全滅時馬車メンバー戦闘参加処理(参加する仲間がいないc=on)
02C0A5PHXPush X
02C0A6PHYPush Y
02C0A7JSL $C2E939SR: $02E939 引数:1#$00
02C0ACJSL $C2E9C6SR: $02E9C6 引数:1#$04
02C0B1JSL $C2E9C6SR: $02E9C6 引数:1#$28
02C0B6JSL $C2E9C6SR: $02E9C6 引数:1#$44
02C0BBJSL $C2E9C6SR: $02E9C6 引数:1#$54
02C0C0LDA $00A=DP($00)
02C0C2ORA $02Aor=DP($02)馬車にいる仲間がいないor全員死んでいる
02C0C4BEQ #$06if(z==on) goto $02C0CC
02C0C6JSL $C2C6B1SR: $02C6B1馬車が使える状態か(使えるz=on)
02C0CABEQ #$04if(z==on) goto $02C0D0
02C0CCPLYPull Y
02C0CDPLXPull X
02C0CESECc=on
02C0CFRTSreturn
02C0D0JSL $C2CA59SR: $02CA59
02C0D4JSL $C0268FSR: $00268F
02C0D8SEP #$20m=on(A/M:8b)
02C0DALDA #$00A=#$00
02C0DCSTA $04DP($04)=A
02C0DESTA $05DP($05)=A
02C0E0STA $06DP($06)=A
02C0E2STA $07DP($07)=A
02C0E4REP #$20m=off(A/M:16b)
02C0E6JSL $C42B1CSR: $042B1C 引数:1#$05 引数:2#$08パーティ人数取得?
02C0ECLDX #$0000X=#$0000
02C0EFLDY #$0000Y=#$0000
02C0F2JSL $C42C26SR: $042C26 引数:1#$05 引数:2#$FD 引数:3#$FFキャラクターインデックス取得?
02C0F9STA $2587$2587=A
02C0FCPHXPush X
02C0FDPHYPush Y
02C0FEJSL $C2C3BASR: $02C3BA主人公が戦闘に参加しているか(該当c=off)
02C102STX $258B$258B=X
02C105PLYPull Y
02C106PLXPull X
02C107BCS #$20if(c==on) goto $02C129
02C109JSR $C14DSR: $02C14D指定したキャラクターが戦闘に参加できるか(不可c=on)
02C10CBCS #$1Bif(c==on) goto $02C129
02C10ESEP #$20m=on(A/M:8b)
02C110LDA $2587A=$2587
02C113STA $04,XDP($04)+X=A
02C115REP #$20m=off(A/M:16b)
02C117AND #$00FFA&=#$00FF
02C11ASTA $5A24$5A24=Aキャラクター名をセット
02C11DJSL $C02A16SR: $002A16 引数:1#$0173戦闘メッセージ表示「馬車から飛び出した」
02C123INXX++
02C124CPX #$0004X>=#$0004?
02C127BCS #$0Aif(c==on) goto $02C133
02C129INYY++
02C12ACPY $08Y>=DP($08)?
02C12CBCC #$C4if(c==off) goto $02C0F2
02C12ECPX #$0001X>=#$0001?
02C131BCC #$99if(c==off) goto $02C0CC
02C133JSL $C42FDCSR: $042FDC 引数:1#$04
02C138JSL $C2C631SR: $02C631パーティウィンドウ再描画
02C13CJSL $C0268FSR: $00268F
02C140LDA #$0000A=#$0000
02C143STA $255B$255B=A
02C146STA $255D$255D=A
02C149PLYPull Y
02C14APLXPull X
02C14BCLCc=off
02C14CRTSreturn

ここでは馬車が使える状態で生存者がいれば4人まで駆り出すという処理をしているようです。

コメント

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