DQ3 盗賊に切り返し(カウンター)を実装する2

今回から実装に移ります。ダメージが発生する前に切り返し判定を行い、発生する場合には行動対象へのダメージ処理をスキップします。

  • SR: $028E70 ダメージ確定メイン
省略
028E8DJSL $CFAF00SR: $0FAF00ダメージ確定後の処理メイン(含盗賊の切り返し)
省略

  • SR: $0FAF00 ダメージ確定後の処理メイン(含盗賊の切り返し)(新SR)
0FAF00JSL $CFADDFSR: $0FADDF盗賊切り返し発生判定
0FAF04LDA $2602A=$2602
0FAF07AND #$0004A&=#$0004切り返しが発生していたらスキップ
0FAF0ABEQ #$05if(z==on) goto $0FAF11
0FAF0CLDA $23FAA=$23FAダメージが0ならスキップ
0FAF0FBEQ #$04if(z==on) goto $0FAF15
0FAF11JSL $C29200SR: $029200ダメージ確定後の処理メイン
0FAF15RTLreturn

  • SR: $0FADDF 盗賊切り返し発生判定(新SR)
0FADDFLDA #$0004A=#$0004
0FADE2TRB $2602A ^ $2602
0FADE5STZ $2603$2603=#$00
0FADE8LDA $23FAA=$23FA受けるダメージが0なら発生しない
0FADEBBNE #$01if(z==off) goto $0FADEE
0FADEDRTLreturn
0FADEELDA $2602A=$2602
0FADF1AND #$0010A&=#$0010
0FADF4BNE #$72if(z==off) goto $0FAE68
0FADF6LDA $23ADA=$23AD
0FADF9AND #$0020A&=#$0020会心痛恨判定なら発生しない
0FADFCBEQ #$01if(z==on) goto $0FADFF
0FADFERTLreturn
0FADFFLDX $23EEX=$23EE
0FAE02JSL $C2CC47SR: $02CC47 引数:1#$006B 引数:2#$0080切り返しが発生する戦闘行動か
0FAE0ABNE #$01if(z==off) goto $0FAE0D
0FAE0CRTLreturn
0FAE0DLDA $CFADDDA=$0FADDD
0FAE11CMP #$0100A>=#$0100?
0FAE14BCC #$01if(c==off) goto $0FAE17
0FAE16RTLreturn
0FAE17LDX $23E4X=$23E4
0FAE1ASTX $2428$2428=X
0FAE1DJSL $C2CAD9SR: $02CAD9 引数:1#$203C 引数:2#$00FF
0FAE25CMP #$0005A>=#$0005?行動対象がPC側か
0FAE28BCC #$01if(c==off) goto $0FAE2B
0FAE2ARTLreturn
0FAE2BLDX $23E8X=$23E8
0FAE2ESTX $2428$2428=X
0FAE31JSL $C2BE8ASR: $02BE8A 引数:1#$30
0FAE36CMP #$0006A==#$0006?職業が盗賊か
0FAE39BEQ #$01if(z==on) goto $0FAE3C
0FAE3BRTLreturn
0FAE3CJSL $C2CAD9SR: $02CAD9 引数:1#$2047 引数:2#$000F睡眠中か
0FAE44BEQ #$01if(z==on) goto $0FAE47
0FAE46RTLreturn
0FAE47JSL $C2BE8ASR: $02BE8A 引数:1#$1C生死判定
0FAE4CBCC #$01if(c==off) goto $0FAE4F
0FAE4ERTLreturn
0FAE4FJSL $C2BE8ASR: $02BE8A 引数:1#$16麻痺判定
0FAE54BCC #$01if(c==off) goto $0FAE57
0FAE56RTLreturn
0FAE57JSL $C2C240SR: $02C240 引数:1#$1Aレベル取得
0FAE5CCMP #$0014A>=#$0014?レベル20未満なら発生しない
0FAE5FBCS #$01if(c==on) goto $0FAE62
0FAE61RTLreturn
0FAE62JSR $AE82SR: $0FAE82盗賊の切り返し発生判定(発生c=on)
0FAE65BCS #$01if(c==on) goto $0FAE68
0FAE67RTLreturn
0FAE68JSR $AF82SR: $0FAF82切り返しダメージ計算
0FAE6BLDA #$0004A=#$0004
0FAE6ETSB $2602A or $2602切り返し発生フラグON
0FAE71RTLreturn

  • SR: $0FAE82 盗賊の切り返し発生判定(発生c=on)(新SR)
0FAE82JSR $AF50SR: $0FAF50切り返し判定用閾値セット
0FAE85NOP
0FAE86LDA $23E8A=$23E8
0FAE89STA $2428$2428=A
0FAE8CLDA #$009EA=#$009E盗賊の短刀のアイテムID
0FAE8FSTA $242C$242C=A
0FAE92JSL $C2B87ASR: $02B87Aアイテム装備チェック
0FAE96BVC #$05if(v==off) goto $0FAE9D
0FAE98LDA #$0200A=#$0200
0FAE9BBRA #$03goto $0FAEA0
0FAE9DLDA #$0100A=#$0100
0FAEA0LDX #$0000X=#$0000
0FAEA3JSL $C011E1SR: $0011E1$00,X(4B)=$00,X(2B)*A(2B)(符号込み)
0FAEA7LDA $01A=DP($01)
0FAEA9PHAPush A
0FAEAAJSL $C012D1SR: $0012D1乱数発生 $00-FF
0FAEAECMP $01,SA>=Stack($01)?
0FAEB0BCC #$03if(c==off) goto $0FAEB5
0FAEB2PLAPull A
0FAEB3CLCc=off
0FAEB4RTSreturn
0FAEB5PLAPull A
0FAEB6SECc=on
0FAEB7RTSreturn

$0FAE98のあたりは盗賊の短刀装備時に切り返しの発生率を2倍にするというものですが、今見なおしたら単純に2倍にするだけならASLでいいじゃんと思ったのですが、1.5倍にするとかいろいろ試行錯誤していたためにこのような実装にしていたのを思い出しました。

  • SR: $0FAE82 切り返し判定用閾値セット(新SR)(省略)

レベルに応じて閾値をセットするだけなので省略

コメント

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