DQ3戦闘部分解説6

最近モチベーションが低下気味でDQ6インターフェース改良パッチのテストプレイと称したDQ6再プレイぐらいしかしていません。一応本編はエンディングを迎え、一通りイベントアイテムもふくろから使用して問題ないことは確認できました。この後はまとめ買いの取り込みか、DQ4^{-}用に調整ですかね。他にもアレをアレすることも挑戦中なのでやることはいろいろあります。

さて、続きをやります。

  • SR: $025CC0 ターン開始時処理?
025CC0 PHP Push P Flag
025CC1 PHB Push DB
025CC2 REP #$30 m=off(A/M:16b) x=off(X/Y:16b)
025CC4 PEA #$7E7E Push #$7E7E
025CC7 PLB Pull DB
025CC8 PLB Pull DB
025CC9 JSL $C322C6 SR: $0322C6 引数:1#$51 ウィンドウ消去
025CCE LDX #$0017 X=#$0017
025CD1 JSL $C2CAD9 SR: $02CAD9 引数:1#$2050 引数:2#$0002 存在フラグチェック?
025CD9 BEQ #$1F if(z==on) goto $025CFA
025CDB JSL $C2B52D SR: $02B52D
025CDF LDA #$0000 A=#$0000
025CE2 JSL $C2CB70 SR: $02CB70 引数:1#$2050 引数:2#$0080 戦闘中キャラクター情報変更
025CEA JSL $C2CB70 SR: $02CB70 引数:1#$2050 引数:2#$0020 戦闘中キャラクター情報変更
025CF2 JSL $C2CB70 SR: $02CB70 引数:1#$2052 引数:2#$0080 戦闘中キャラクター情報変更
025CFA DEX X–
025CFB BPL #$D4 if(n==off) goto $025CD1
025CFD PEA #$23AC Push #$23AC
025D00 PEA #$0018 Push #$0018
025D03 PEA #$7E00 Push #$7E00
025D06 JSL $C9029E SR: $09029E RAM上情報取得(アストロン残りターン数)
025D0A DEC A–
025D0B BMI #$1D if(n==on) goto $025D2A
025D0D PHP Push P Flag
025D0E PEA #$23AC Push #$23AC
025D11 PEA #$0018 Push #$0018
025D14 PEA #$7E00 Push #$7E00
025D17 JSL $C902E9 SR: $0902E9 RAM上情報変更(アストロン残りターン数)
025D1B PLP Pull P Flag
025D1C BNE #$0C if(z==off) goto $025D2A
025D1E LDA #$0042 A=#$0042 アストロンの戦闘行動ID
025D21 STA $23E4 $23E4=A
025D24 JSL $C1A867 SR: $01A867 引数:1#$006F 戦闘メッセージ表示「アストロンが解けた」
025D2A PEA #$23AC Push #$23AC
025D2D PEA #$0007 Push #$0007
025D30 PEA #$7E00 Push #$7E00
025D33 JSL $C9029E SR: $09029E RAM上情報取得(時間停止残りターン数)
025D37 DEC A–
025D38 BMI #$0D if(n==on) goto $025D47
025D3A PEA #$23AC Push #$23AC
025D3D PEA #$0007 Push #$0007
025D40 PEA #$7E00 Push #$7E00
025D43 JSL $C902E9 SR: $0902E9 RAM上情報変更(時間停止残りターン数)
025D47 STZ $23B0 $23B0=#$00
025D4A STZ $23B2 $23B2=#$00
025D4D STZ $23B4 $23B4=#$00
025D50 STZ $23B6 $23B6=#$00
025D53 PLB Pull DB
025D54 PLP Pull P Flag
025D55 RTL return
  • SR: $025DEE 戦闘コマンド入力処理
025DEE PHP Push P Flag
025DEF REP #$30 m=off(A/M:16b) x=off(X/Y:16b)
025DF1 PHA Push A
025DF2 PHX Push X
025DF3 PHY Push Y
025DF4 PHB Push DB
025DF5 PEA #$7E7E Push #$7E7E
025DF8 PLB Pull DB
025DF9 PLB Pull DB
025DFA PEA #$23AB Push #$23AB
025DFD PEA #$0030 Push #$0030
025E00 PEA #$7E00 Push #$7E00
025E03 JSL $C9029E SR: $09029E RAM上情報取得(先制強襲情報取得)
025E07 CMP #$0002 A>=#$0002? 強襲だったらコマンド入力スキップ
025E0A BCS #$44 if(c==on) goto $025E50
025E0C JSL $C2B9A6 SR: $02B9A6 パーティ人数取得
025E10 TAX X=A
025E11 LDY #$0000 Y=#$0000
025E14 DEX X–
025E15 BMI #$39 if(n==on) goto $025E50
025E17 JSR $5E63 SR: $025E63 コマンド入力可能かチェック
025E1A BCS #$2E if(c==on) goto $025E4A
025E1C JSL $C2B931 SR: $02B931
025E20 PHX Push X
025E21 LDX $2428 X=$2428
025E24 JSL $C2B52D SR: $02B52D 戦闘中キャラクター行動情報初期化
025E28 PLX Pull X
025E29 STY $33B8 $33B8=Y
025E2C JSL $C32251 SR: $032251 引数:1#$2C ウィンドウ表示(AにリターンメニューIDセット)
025E31 BCS #$25 if(c==on) goto $025E58
025E33 PHX Push X
025E34 LDX #$000A X=#$000A
025E37 CMP $C25EAB,X A==$025EAB+X? メニューID配列と比較
025E3B BEQ #$07 if(z==on) goto $025E44
025E3D DEX X–
025E3E DEX X–
025E3F BPL #$F6 if(n==off) goto $025E37
025E41 LDX #$0000 X=#$0000
025E44 JSR $5EB7 SR: $($025EB7+X) 各コマンド処理SRを呼び出し
025E47 PLX Pull X
025E48 BCS #$D6 if(c==on) goto $025E20
025E4A INY Y++
025E4B CPY #$0004 Y>=#$0004?
025E4E BCC #$C4 if(c==off) goto $025E14
025E50 PLB Pull DB
025E51 REP #$30 m=off(A/M:16b) x=off(X/Y:16b)
025E53 PLY Pull Y
025E54 PLX Pull X
025E55 PLA Pull A
025E56 PLP Pull P Flag
025E57 RTL return
025E58 DEY Y–
025E59 BMI #$B1 if(n==on) goto $025E0C
025E5B INX X++
025E5C JSR $5E63 SR: $025E63 コマンド入力可能かチェック
025E5F BCS #$F7 if(c==on) goto $025E58
025E61 BRA #$B9 goto $025E1C
  • SR: $025E63 コマンド入力可能かチェック(不能c=on)
025E63 PHX Push X
025E64 JSL $C2AF66 SR: $02AF66 対象者の戦闘中キャラクタインデックスをXに取得
025E68 STX $2428 $2428=X
025E6B JSL $C2B416 SR: $02B416 行動主体者が味方かつドラゴラム中かチェック
025E6F BCS #$37 if(c==on) goto $025EA8
025E71 JSL $C2BE8A SR: $02BE8A 引数:1#$1C 生死判定(死亡c=on)
025E76 BCS #$30 if(c==on) goto $025EA8
025E78 JSL $C2BE8A SR: $02BE8A 引数:1#$20 アストロン残りターンがあるか?(該当c=on)
025E7D BCS #$29 if(c==on) goto $025EA8
025E7F JSL $C2BE8A SR: $02BE8A 引数:1#$16 麻痺判定(麻痺c=on)
025E84 BCS #$1E if(c==on) goto $025EA4
025E86 JSL $C2CAD9 SR: $02CAD9 引数:1#$2047 引数:2#$00FF 眠りの深さ取得
025E8E BNE #$14 if(z==off) goto $025EA4
025E90 JSL $C2CAD9 SR: $02CAD9 引数:1#$2052 引数:2#$0002 ?
025E98 BNE #$0A if(z==off) goto $025EA4
025E9A JSL $C2BE8A SR: $02BE8A 引数:1#$26 時間を止めたキャラクターでない(該当c=on)
025E9F BCS #$03 if(c==on) goto $025EA4
025EA1 PLX Pull X
025EA2 CLC c=off
025EA3 RTS return
025EA4 JSL $C2B4F1 SR: $02B4F1
025EA8 PLX Pull X
025EA9 SEC c=on
025EAA RTS return

ただ分量が多いだけで、まあ「こうなんじゃない?」という感じです。以前あげた前知識と付き合わせればやってることは理解できるはず。長いのでとりあえずここまで。しかしまだ戦闘は開始していません。