DQ3戦闘部分解説12

ようやく次回からターンが開始します。前置きが長過ぎる。

  • SR: $0263A2 行動順序補正メイン
0263A2 PHP Push P Flag
0263A3 PHB Push DB
0263A4 REP #$30 m=off(A/M:16b) x=off(X/Y:16b)
0263A6 PEA #$7E7E Push #$7E7E
0263A9 PLB Pull DB
0263AA PLB Pull DB
0263AB LDX #$0000 X=#$0000
0263AE TXY Y=X
0263AF JSR $63C0 SR: $0263C0 行動順序補正等
0263B2 INY Y++
0263B3 INY Y++
0263B4 INX X++
0263B5 CPX #$0018 X>=#$0018? 最大キャラクター数分ループ
0263B8 BCC #$F5 if(c==off) goto $0263AF
0263BA JSR $5DAC SR: $025DAC ターン中の行動順序設定
0263BD PLB Pull DB
0263BE PLP Pull P Flag
0263BF RTL return
  • SR: $0263C0 行動順序補正等
0263C0 LDA #$0000 A=#$0000
0263C3 STA $2484,Y $2484+Y=A
0263C6 JSL $C2CAD9 SR: $02CAD9 引数:1#$2050 引数:2#$0002 生死判定?
0263CE BEQ #$65 if(z==on) goto $026435
0263D0 STX $2428 $2428=X
0263D3 JSL $C2BE8A SR: $02BE8A 引数:1#$1C 生死判定?
0263D8 BCS #$5B if(c==on) goto $026435
0263DA JSL $C2CAD9 SR: $02CAD9 引数:1#$2034 引数:2#$01FF 戦闘行動ID取得
0263E2 STA $242A $242A=A
0263E5 JSL $C2CAD9 SR: $02CAD9 引数:1#$2035 引数:2#$00FE ターゲット情報取得
0263ED STA $2430 $2430=A
0263F0 JSR $6436 SR: $026436 アストロン詠唱ならターンの最初にする
0263F3 JSL $C2CA5B SR: $02CA5B 引数:1#$2045 ターン中の素早さ取得
0263F9 CLC c=off
0263FA ADC $00 A+=(DP($00)+c)
0263FC INC A++
0263FD STA $2484,Y $2484+Y=A
026400 JSR $6446 SR: $026446 般若の面装備してなければ防御を有効にする
026403 JSL $C2CAD9 SR: $02CAD9 引数:1#$2036 引数:2#$01FF 戦闘行動ID取得
02640B STA $242A $242A=A
02640E JSL $C2CAD9 SR: $02CAD9 引数:1#$2037 引数:2#$00FE ターゲット情報取得
026416 STA $2430 $2430=A
026419 JSR $6446 SR: $026446
02641C JSL $C2CAD9 SR: $02CAD9 引数:1#$2038 引数:2#$01FF 戦闘行動ID取得
026424 STA $242A $242A=A
026427 JSL $C2CAD9 SR: $02CAD9 引数:1#$2039 引数:2#$00FE ターゲット情報取得
02642F STA $2430 $2430=A
026432 JSR $6446 SR: $026446 般若の面装備してなければ防御を有効にする
026435 RTS return
  • SR: $025DAC ターン中の行動順決定
025DAC LDX #$0016 X=#$0016
025DAF LDA #$FFFF A=#$FFFF 初期化処理
025DB2 STA $23B8,X $23B8+X=A
025DB5 DEX X–
025DB6 DEX X–
025DB7 BPL #$F9 if(n==off) goto $025DB2
025DB9 LDY #$0000 Y=#$0000
025DBC LDA #$FFFF A=#$FFFF
025DBF STA $00 DP($00)=A
025DC1 INC A++
025DC2 TAX X=A
025DC3 CMP $2484,X A>=$2484+X?
025DC6 BCS #$05 if(c==on) goto $025DCD
025DC8 LDA $2484,X A=$2484+X
025DCB STX $00 DP($00)=X
025DCD INX X++
025DCE INX X++
025DCF CPX #$0030 X>=#$0030?
025DD2 BCC #$EF if(c==off) goto $025DC3
025DD4 LDX $00 X=DP($00)
025DD6 CPX #$FFFF X==#$FFFF?
025DD9 BEQ #$12 if(z==on) goto $025DED
025DDB STZ $2484,X $2484+X=#$00
025DDE TXA A=X
025DDF LSR A>>1
025DE0 SEP #$20 m=on(A/M:8b)
025DE2 STA $23B8,Y $23B8+Y=A
025DE5 REP #$20 m=off(A/M:16b)
025DE7 INY Y++
025DE8 CPY #$0018 Y>=#$0018?
025DEB BCC #$CF if(c==off) goto $025DBC
025DED RTS return

大雑把に言うと補正後ターン中の素早さの早い順から行動順を並べ替えているだけ、だったはず。