DQ3戦闘部分解説20

  • SR: $02913E PC側耐性計算
02913ELDA $23E8A=$7E23E8
029141STA $2428$7E2428=A
029144JSL $02BE8ASR: $02BE8A 引数:1#$22行動対象の敵味方判定(c=onなら敵)
029149BCS #$2Dif(c==on) goto $029178
02914BTAYY=A
02914CLDA $23EEA=$7E23EE戦闘行動をセット
02914FSTA $242A$7E242A=A
029152LDA $00A=$000000ダメージ値をAレジスタにセット
029154JSL $02BBD5SR: $02BBD5PC側ダメージ系耐性計算
029158STA $00$000000=A
02915ALDA $23F2A=$7E23F2
02915DBNE #$19if(z==off) goto $029178
02915FLDX $08X=$000008
029161LDA $020079,XA=$020079+X
029165AND #$0008A&=#$0008戦闘行動がなげきのたてで転嫁できる行動か
029168BEQ #$0Eif(z==on) goto $029178
02916ALDA #$0069A=#$0069なげきのたてのアイテムID
02916DSTA $242C$7E242C=A
029170JSL $02B87ASR: $02B87Aアイテム装備チェック
029174BVC #$02if(v==off) goto $029178
029176LSR $00$000000>>1なげきのたてのダメージ値 他のPCに転嫁するため1/2する
029178RTSreturn

なげきのたて装備時にはダメージを半減させ、追加処理でPC側の誰かに同じだけ肩代わりさせます。

  • SR: $02BBD5 PC側ダメージ系耐性計算
02BBD5PHPPush P Flag
02BBD6PHBPush DB
02BBD7REP #$30m=off(A/M:16b), x=off(X/Y:16b)
02BBD9PEA $7E7EPush $7E7E
02BBDCPLBPull DB
02BBDDPLBPull DB
02BBDEPHXPush X
02BBDFPHYPush Y
02BBE0STA $2474$7E2474=A
02BBE3LDA #$0000A=#$0000ダメージ系耐性フラグ
02BBE6STA $2476$7E2476=A
02BBE9JSR $BBF4SR: $02BBF4PC側耐性計算メイン
02BBECLDA $2474A=$7E2474
02BBEFPLYPull Y
02BBF0PLXPull X
02BBF1PLBPull DB
02BBF2PLPPull P Flag
02BBF3RTLreturn

耐性値によるダメージ減算処理については以前解説したのでここでは省略します。タグ「耐性変更」で見てください。

  • SR: $029179 フバーハ時のダメージ軽減計算
029179LDX $08X=$000008
02917BLDA $020079,XA=$020079+X
02917FAND #$0001A&=#$0001戦闘行動がフバーハに影響されるか
029182BEQ #$16if(z==on) goto $02919A
029184LDX $0AX=$00000A
029186LDA $2051,XA=$7E2051+X
029189AND #$0020A&=#$0020行動対象がフバーハ中
02918CBEQ #$0Cif(z==on) goto $02919A
02918EASL $00$000000<<1
029190LDX #$0000X=#$0000
029193LDA #$0003A=#$0003
029196JSL $00121CSR: $00121C$00,X(2B)=$00,X(2B)/A(1B) 剰余=Aダメージ値を2/3にする
02919ARTSreturn
  • SR: $02919B 防御時のダメージ軽減計算
02919BLDX $0AX=DP($0A)
02919DLDA $2050,XA=$2050+X
0291A0AND #$0080A&=#$0080行動対象が防御中
0291A3BEQ #$02if(z==on) goto $0291A7
0291A5LSR $00DP($00)>>1ダメージ値を1/2
0291A7RTSreturn
  • SR: $0291A8 耐性によるダメージ調整
0291A8LDA $23EEA=$23EE
0291ABCMP #$001AA==#$001A?戦闘行動がメガンテなら調整しない
0291AEBEQ #$2Aif(z==on) goto $0291DA
0291B0CMP #$0003A==#$0003?戦闘行動が眠り攻撃なら調整しない
0291B3BEQ #$25if(z==on) goto $0291DAなら調整しない
0291B5CMP #$0004A==#$0004?戦闘行動が毒攻撃か
0291B8BEQ #$20if(z==on) goto $0291DAなら調整しない
0291BACMP #$0005A==#$0005?戦闘行動が麻痺攻撃かなら調整しない
0291BDBEQ #$1Bif(z==on) goto $0291DA
0291BFCMP #$00AAA==#$00AA?戦闘行動がドラゴラムの炎なら固定の耐性計算をする
0291C2BEQ #$17if(z==on) goto $0291DB
0291C4CMP #$0085A==#$0085?戦闘行動が聖水なら固定の耐性計算をする
0291C7BEQ #$12if(z==on) goto $0291DB
0291C9CMP #$00CEA==#$00CE?戦闘行動が王様ごっこなら調整しない
0291CCBEQ #$0Cif(z==on) goto $0291DA
0291CECMP #$00CFA==#$00CF?戦闘行動が女王様ごっこなら調整しない
0291D1BEQ #$07if(z==on) goto $0291DA
0291D3JSR $A3EBSR: $02A3EB耐性を考慮して成否判定+PC側確率系耐性計算?
0291D6BCS #$02if(c==on) goto $0291DA
0291D8STZ $00DP($00)=#$00
0291DARTSreturn
0291DBJSR $A3CESR: $02A3CE確率に依存しない耐性計算?
0291DERTSreturn

  • SR: $0291DF 毒針装備時の一撃必殺失敗(1ダメージ)
0291DFLDA $23F2A=$23F2
0291E2BNE #$1Bif(z==off) goto $0291FF
0291E4LDX $08X=DP($08)
0291E6LDA $02007A,XA=$02007A+X
0291EAAND #$0020A&=#$0020毒針装備時に1ダメージが発生する戦闘行動か
0291EDBEQ #$10if(z==on) goto $0291FF
0291EFLDA $245CA=$245C?
0291F2AND #$00FFA&=#$00FF
0291F5CMP #$0009A==#$0009?
0291F8BNE #$05if(z==off) goto $0291FF
0291FALDA #$0001A=#$0001ダメージ1を設定
0291FDSTA $00DP($00)=A
0291FFRTSreturn

このSRを抜けると最終的なダメージが確定するので、確定したダメージ値を使って後処理を行います。

  • SR: $029200 ダメージ確定後の処理メイン
029200PHPPush P Flag
029201REP #$30m=off(A/M:16b), x=off(X/Y:16b)
029203PHAPush A
029204PHXPush X
029205PHYPush Y
029206PHBPush DB
029207PEA $7E7EPush $7E7E
02920APLBPull DB
02920BPLBPull DB
02920CLDA $23E8A=$23E8
02920FSTA $2428$2428=A
029212STZ $BE83$7EBE83=#$00ダメージ用バッファ上2バイト初期化
029215LDA $23FAA=$7E23FA
029218STA $BE81$7EBE81=Aダメージ用バッファにダメージ値をセット
02921BBNE #$0Cif(z==off) goto $029229
02921DJSR $92CESR: $0292CEダメージ0時メッセージ表示
029220PLBPull DB
029221REP #$30m=off(A/M:16b), x=off(X/Y:16b)
029223PLYPull Y
029224PLXPull X
029225PLAPull A
029226PLPPull P Flag
029227CLCc=off
029228RTLreturn
029229JSR $9312SR: $029312ダメージ発生時エフェクト処理?
02922CLDA $23FAA=$23FA
02922FSTA $00DP($00)=A
029231JSL $02BE8ASR: $02BE8A 引数:1#$06HP減算処理
029236PHPPush P Flag
029237JSR $925CSR: $02925Cダメージメッセージ表示
02923AJSR $927BSR: $02927B
02923DJSL $02B977SR: $02B977パーティウィンドウ再描画?
029241JSL $031394SR: $031394
029245PLPPull P Flag
029246BCC #$0Bif(c==off) goto $029253
029248JSL $02CFCESR: $02CFCE消滅処理?
02924CJSR $92ACSR: $0292ACHP0時メッセージ表示
02924FJSL $02B054SR: $02B054行動対象者を戦闘から離脱させる処理メイン
029253PLBPull DB
029254REP #$30m=off(A/M:16b), x=off(X/Y:16b)
029256PLYPull Y
029257PLXPull X
029258PLAPull A
029259PLPPull P Flag
02925ASECc=on
02925BRTLreturn

ダメージが発生する戦闘行動はこのSRを呼ぶ必要があります(逆に言うとダメージ確定してこのSRを呼ぶだけでOK)。

スポンサーリンク

コメントを書く

メールアドレスが公開されることはありません。コメントは管理者の承認後表示されます。