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

    管理者より返信:

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

  2. 匿名 より:

    いつか時間が空いた時にaiが道具を使わないことについても解説していただきたいです。

    管理者より返信:

    単に道具を使う系の戦闘行動がAIの選択対象になっていないからです。選択対象フラグ以外にもAIの判断用SRの設定が一切されていないので単にONにしただけで動くという話でもなさそうです。

  3. 匿名 より:

    返信有難うございます。
    DQ3K.MixではAIを組み込んでいるということなので、プレイしたら道具を使わないか確かめてみたいと思います。

    管理者より返信:

    DQ3 K.MixではAIは道具を使うように設定してあります(使わないのはムカつくので)。ご確認ください。

  4. 匿名 より:

    DQ3K.Mixで道具を使用することを確認しました。
    ベースはDQ6だそうですが改良されたのですね。凄すぎます。
    DQ3K.MixのゾーマのモーションやグラディウスⅢなどのすべての作業が済んだ後からでもよいのでDQ6のAIも道具を使用できるようになるパッチの作成を検討していただけると幸いです。

    管理者より返信:

    AIに道具を使わせるだけのパッチは作らないと思います。作るならDQ3 K.Mixのような全体パッチの一部として実装します。

  5. 匿名 より:

    >作るならDQ3 K.Mixのような全体パッチの一部として実装します。
    いつかDQ6k.mixがリリースされるのを楽しみしています。
    また、その際は漢字が増えているとうれしいです。これからも頑張ってください。

  6. さばお より:

    お忙しい中失礼します

    DQ6の剣技なのですが正拳突き等が強力すぎて、火炎斬りや真空斬りなどの魔法剣の倍率か通常攻撃より大体1.3倍ダメ程度で扱いづらく不遇なので威力を1.5〜1.7倍程に強化したいと思ってますが、強化には何処を弄ればよろしいのでしょうか?

    管理者より返信:

    $028C68~が倍率になっているようです。

  7. さばお より:

    忙しい中、返信ありがとうございます

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