前回までは戦闘コマンド入力の中を掘り進んでいたのですが、この後は多少の調整を経た後ようやく戦闘が開始するところまでいきます。
- SR:$0233B7 戦闘メインループ
略 | |||
---|---|---|---|
0233EB | JSL $C23803 | SR: $023803 | 戦闘コマンド入力 |
0233EF | JSL $C2BF22 | SR: $02BF22 | 時の砂使用時処理+戦闘終了状態チェック |
0233F3 | PEA #$2514 | Push #$2514 | |
0233F6 | PEA #$001E | Push #$001E | |
0233F9 | PEA #$7E00 | Push #$7E00 | |
0233FC | JSL $C92965 | SR: $092965 | RAM上情報取得 |
023400 | BNE #$24 | if(z==off) goto $023426 | 戦闘終了状態なら行動処理をスキップ |
023402 | JSL $C2375D | SR: $02375D | 1ターン中の素早さ値決定 |
略 |
- SR:$02375D 1ターン中の素早さ値決定
02375D | PHP | Push P Flag | |
---|---|---|---|
02375E | PHB | Push DB | |
02375F | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
023761 | PEA #$7E7E | Push #$7E7E | |
023764 | PLB | Pull DB | |
023765 | PLB | Pull DB | |
023766 | LDX #$0017 | X=#$0017 | |
023769 | LDY #$002E | Y=#$002E | |
02376C | JSL $C2EFA7 | SR: $02EFA7 引数:1#$205F 引数:2#$0001 | 戦闘中キャラクター情報取得 インデックス:X |
023774 | BEQ #$35 | if(z==on) goto $0237AB | 先頭に参加していなければスキップ |
023776 | STX $258B | $258B=X | |
023779 | JSL $C2E4DC | SR: $02E4DC 引数:1#$18 | ステータス取得 |
02377E | LDA #$0000 | A=#$0000 | 死人ならスキップ |
023781 | BCS #$28 | if(c==on) goto $0237AB | |
023783 | JSL $C2E4DC | SR: $02E4DC 引数:1#$1A | |
023788 | LDA #$0000 | A=#$0000 | |
02378B | BCS #$1E | if(c==on) goto $0237AB | |
02378D | JSL $C2EFA7 | SR: $02EFA7 引数:1#$205B 引数:2#$0FFC | 素早さ取得 |
023795 | CLC | c=off | |
023796 | ADC #$0014 | A+=(#$0014+c) | 20を加算 |
023799 | STA $00 | DP($00)=A | |
02379B | LDA #$0032 | A=#$0032 | 50% |
02379E | STA $02 | DP($02)=A | |
0237A0 | LDA #$0064 | A=#$0064 | 100% |
0237A3 | STA $04 | DP($04)=A | |
0237A5 | JSL $C928DB | SR: $0928DB | 指定した幅(%)でランダム倍化 |
0237A9 | LDA $00 | A=DP($00) | |
0237AB | STA $265F,Y | $265F+Y=A | バッファにセット |
0237AE | JSL $C2F034 | SR: $02F034 引数:1#$205C 引数:2#$3FF0 | 戦闘中キャラクター情報変更 インデックス:X |
0237B6 | DEY | Y– | |
0237B7 | DEY | Y– | |
0237B8 | DEX | X– | |
0237B9 | BPL #$B1 | if(n==off) goto $02376C | ターン中行動順並べ替え |
0237BB | JSR $37C1 | SR: $0237C1 | |
0237BE | PLB | Pull DB | |
0237BF | PLP | Pull P Flag | |
0237C0 | RTL | return |
ここでは各キャラクターの現在の素早さに20を足した値の50%-100%の幅でのランダム値を作成し、そのターン中の素早さを決定します。20という固定値を足しているので最低でも10にはなります。
- SR:$0237C1 ターン中行動順並べ替え
0237C1 | LDX #$0016 | X=#$0016 | |
---|---|---|---|
0237C4 | LDA #$FFFF | A=#$FFFF | |
0237C7 | STA $2529,X | $2529+X=A | |
0237CA | DEX | X– | |
0237CB | DEX | X– | |
0237CC | BPL #$F9 | if(n==off) goto $0237C7 | |
0237CE | LDY #$0000 | Y=#$0000 | |
0237D1 | LDA #$FFFF | A=#$FFFF | |
0237D4 | STA $00 | DP($00)=A | |
0237D6 | INC | A++ | |
0237D7 | TAX | X=A | |
0237D8 | CMP $265F,X | A>=$265F+X? | |
0237DB | BCS #$05 | if(c==on) goto $0237E2 | |
0237DD | LDA $265F,X | A=$265F+X | |
0237E0 | STX $00 | DP($00)=X | |
0237E2 | INX | X++ | |
0237E3 | INX | X++ | |
0237E4 | CPX #$0030 | X>=#$0030? | |
0237E7 | BCC #$EF | if(c==off) goto $0237D8 | |
0237E9 | LDX $00 | X=DP($00) | |
0237EB | CPX #$FFFF | X==#$FFFF? | |
0237EE | BEQ #$12 | if(z==on) goto $023802 | |
0237F0 | STZ $265F,X | $265F+X=#$00 | |
0237F3 | TXA | A=X | |
0237F4 | LSR | A>>1 | |
0237F5 | SEP #$20 | m=on(A/M:8b) | |
0237F7 | STA $2529,Y | $2529+Y=A | |
0237FA | REP #$20 | m=off(A/M:16b) | |
0237FC | INY | Y++ | |
0237FD | CPY #$0018 | Y>=#$0018? | |
023800 | BCC #$CF | if(c==off) goto $0237D1 | |
023802 | RTS | return |
ここでは直前に決定したターン中の素早さに基づき、行動順を値の大きい順に$7E2529-に戦闘中キャラクターIDを並べていきます。$7E265Fでセットした素早さはこのSRを出ると全部0になります。
コメント
ドラクエ6 で、呪文の名前を変えたいと思っています。例えばマジックバリアをドラクエらしく真言に沿って、マホバーハなど、自分色に染め上げたいです。どのような方法が考えられますか?
「マジックバリア」に相当する文字列を変えれば可能です。「固定文字列」の中を探してください。
いつか時間が空いた時にaiが道具を使わないことについても解説していただきたいです。
単に道具を使う系の戦闘行動がAIの選択対象になっていないからです。選択対象フラグ以外にもAIの判断用SRの設定が一切されていないので単にONにしただけで動くという話でもなさそうです。
返信有難うございます。
DQ3K.MixではAIを組み込んでいるということなので、プレイしたら道具を使わないか確かめてみたいと思います。
DQ3 K.MixではAIは道具を使うように設定してあります(使わないのはムカつくので)。ご確認ください。
DQ3K.Mixで道具を使用することを確認しました。
ベースはDQ6だそうですが改良されたのですね。凄すぎます。
DQ3K.MixのゾーマのモーションやグラディウスⅢなどのすべての作業が済んだ後からでもよいのでDQ6のAIも道具を使用できるようになるパッチの作成を検討していただけると幸いです。
AIに道具を使わせるだけのパッチは作らないと思います。作るならDQ3 K.Mixのような全体パッチの一部として実装します。
>作るならDQ3 K.Mixのような全体パッチの一部として実装します。
いつかDQ6k.mixがリリースされるのを楽しみしています。
また、その際は漢字が増えているとうれしいです。これからも頑張ってください。
お忙しい中失礼します
DQ6の剣技なのですが正拳突き等が強力すぎて、火炎斬りや真空斬りなどの魔法剣の倍率か通常攻撃より大体1.3倍ダメ程度で扱いづらく不遇なので威力を1.5〜1.7倍程に強化したいと思ってますが、強化には何処を弄ればよろしいのでしょうか?
$028C68~が倍率になっているようです。
忙しい中、返信ありがとうございます