DQ6戦闘部分解説15

前回までは戦闘コマンド入力の中を掘り進んでいたのですが、この後は多少の調整を経た後ようやく戦闘が開始するところまでいきます。

DQ6戦闘画面9

  • SR:$0233B7 戦闘メインループ
0233EBJSL $C23803SR: $023803戦闘コマンド入力
0233EFJSL $C2BF22SR: $02BF22時の砂使用時処理+戦闘終了状態チェック
0233F3PEA #$2514Push #$2514
0233F6PEA #$001EPush #$001E
0233F9PEA #$7E00Push #$7E00
0233FCJSL $C92965SR: $092965RAM上情報取得
023400BNE #$24if(z==off) goto $023426戦闘終了状態なら行動処理をスキップ
023402JSL $C2375DSR: $02375D1ターン中の素早さ値決定
  • SR:$02375D 1ターン中の素早さ値決定
02375DPHPPush P Flag
02375EPHBPush DB
02375FREP #$30m=off(A/M:16b) x=off(X/Y:16b)
023761PEA #$7E7EPush #$7E7E
023764PLBPull DB
023765PLBPull DB
023766LDX #$0017X=#$0017
023769LDY #$002EY=#$002E
02376CJSL $C2EFA7SR: $02EFA7 引数:1#$205F 引数:2#$0001戦闘中キャラクター情報取得 インデックス:X
023774BEQ #$35if(z==on) goto $0237AB先頭に参加していなければスキップ
023776STX $258B$258B=X
023779JSL $C2E4DCSR: $02E4DC 引数:1#$18ステータス取得
02377ELDA #$0000A=#$0000死人ならスキップ
023781BCS #$28if(c==on) goto $0237AB
023783JSL $C2E4DCSR: $02E4DC 引数:1#$1A
023788LDA #$0000A=#$0000
02378BBCS #$1Eif(c==on) goto $0237AB
02378DJSL $C2EFA7SR: $02EFA7 引数:1#$205B 引数:2#$0FFC素早さ取得
023795CLCc=off
023796ADC #$0014A+=(#$0014+c)20を加算
023799STA $00DP($00)=A
02379BLDA #$0032A=#$003250%
02379ESTA $02DP($02)=A
0237A0LDA #$0064A=#$0064100%
0237A3STA $04DP($04)=A
0237A5JSL $C928DBSR: $0928DB指定した幅(%)でランダム倍化
0237A9LDA $00A=DP($00)
0237ABSTA $265F,Y$265F+Y=Aバッファにセット
0237AEJSL $C2F034SR: $02F034 引数:1#$205C 引数:2#$3FF0戦闘中キャラクター情報変更 インデックス:X
0237B6DEYY–
0237B7DEYY–
0237B8DEXX–
0237B9BPL #$B1if(n==off) goto $02376Cターン中行動順並べ替え
0237BBJSR $37C1SR: $0237C1
0237BEPLBPull DB
0237BFPLPPull P Flag
0237C0RTLreturn

ここでは各キャラクターの現在の素早さに20を足した値の50%-100%の幅でのランダム値を作成し、そのターン中の素早さを決定します。20という固定値を足しているので最低でも10にはなります。

  • SR:$0237C1 ターン中行動順並べ替え
0237C1LDX #$0016X=#$0016
0237C4LDA #$FFFFA=#$FFFF
0237C7STA $2529,X$2529+X=A
0237CADEXX–
0237CBDEXX–
0237CCBPL #$F9if(n==off) goto $0237C7
0237CELDY #$0000Y=#$0000
0237D1LDA #$FFFFA=#$FFFF
0237D4STA $00DP($00)=A
0237D6INCA++
0237D7TAXX=A
0237D8CMP $265F,XA>=$265F+X?
0237DBBCS #$05if(c==on) goto $0237E2
0237DDLDA $265F,XA=$265F+X
0237E0STX $00DP($00)=X
0237E2INXX++
0237E3INXX++
0237E4CPX #$0030X>=#$0030?
0237E7BCC #$EFif(c==off) goto $0237D8
0237E9LDX $00X=DP($00)
0237EBCPX #$FFFFX==#$FFFF?
0237EEBEQ #$12if(z==on) goto $023802
0237F0STZ $265F,X$265F+X=#$00
0237F3TXAA=X
0237F4LSRA>>1
0237F5SEP #$20m=on(A/M:8b)
0237F7STA $2529,Y$2529+Y=A
0237FAREP #$20m=off(A/M:16b)
0237FCINYY++
0237FDCPY #$0018Y>=#$0018?
023800BCC #$CFif(c==off) goto $0237D1
023802RTSreturn

ここでは直前に決定したターン中の素早さに基づき、行動順を値の大きい順に$7E2529-に戦闘中キャラクターIDを並べていきます。$7E265Fでセットした素早さはこのSRを出ると全部0になります。

スポンサーリンク

コメント

  1. 匿名 より:

    ドラクエ6 で、呪文の名前を変えたいと思っています。例えばマジックバリアをドラクエらしく真言に沿って、マホバーハなど、自分色に染め上げたいです。どのような方法が考えられますか?

    管理者より返信:

    「マジックバリア」に相当する文字列を変えれば可能です。「固定文字列」の中を探してください。

コメントを書く

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