DQ6 勇者の転職条件を変える

久しぶりの質問回答コーナーです。お題は

DQ6の主人公の勇者転職条件に魔法戦士、パラディンマスターを加える

です。

DQ6の主人公の転職条件はぼんやり「どれか上級職1つ」と認識していたりしたので、パラディンをマスターしただけでは勇者に転職できなかったなあと今更ながら思い出しました。オリジナルでは「主人公はバトルマスター・賢者・スーパースター・レンジャーのどれか1つ」「それ以外のキャラクターは4職業全部マスター」が勇者への転職条件です。ダーマでの転職処理をたまたま見つけたので中を見ていたらそれほど難しもなさそうだったのでちゃちゃっとやってしまいます。まずはオリジナルの実装。

  • SR:$043674 職業熟練度一覧情報作成
043806 LDA $4928 A=$4928
043809 CMP #$0001 A==#$0001? キャラクターIDが主人公か?
04380C BEQ #$1C if(z==on) goto $04382A
04380E LDA $493C A=$493C
043811 BEQ #$15 if(z==on) goto $043828 バトルマスターをマスター状態か
043813 LDA $4942 A=$4942
043816 BEQ #$10 if(z==on) goto $043828 賢者をマスター状態か
043818 LDA $4944 A=$4944
04381B BEQ #$0B if(z==on) goto $043828 スーパースターをマスター状態か
04381D LDA $4946 A=$4946
043820 BEQ #$06 if(z==on) goto $043828 レンジャーをマスター状態か
043822 LDA #$0011 A=#$0011 勇者の職業ID
043825 JSR $3891 SR: $043891 指定職業IDをリストに加える
043828 BRA #$14 goto $04383E
04382A LDA $493C A=$493C バトルマスターをマスター状態か
04382D BNE #$F3 if(z==off) goto $043822
04382F LDA $4942 A=$4942 賢者をマスター状態か
043832 BNE #$EE if(z==off) goto $043822
043834 LDA $4944 A=$4944 スーパースターをマスター状態か
043837 BNE #$E9 if(z==off) goto $043822
043839 LDA $4946 A=$4946 レンジャーをマスター状態か
04383C BNE #$E4 if(z==off) goto $043822

ここより前で下級職を含めたマスター状態をテンポラリの変数にセットしています(戦士:$7E492A、武闘家:$7E492C…)。上記のプログラムの前半は主人公以外、後半は主人公になっているので前半は4つの上級職が全てマスターになっている時のみ勇者をリストに追加、後半はどれかがマスターになっていれば勇者をリストに追加、という実装になっているのがわかります。というわけでここまでくれば後はやることはだいたい見えてきました。魔法戦士のマスター状態は$7E493E、パラディンのマスター状態は$7E3940に保持されているのでそれを追加でチェックすればいいということになります。

  • SR:$043674 職業熟練度一覧情報作成
043839 JSR $FFD1 SR: $04FFD1 レンジャー・魔法戦士・パラディンのどれかがマスターか(該当c=on)
04383C BCS #$E4 if(c==on) goto $043822
  • SR:$04FFD1 レンジャー・魔法戦士・パラディンのどれかがマスターか(該当c=on)(新SR)
04FFD1 LDA $4946 A=$4946 レンジャーがマスター状態か
04FFD4 BNE #$0C if(z==off) goto $04FFE2
04FFD6 LDA $493E A=$493E 魔法戦士がマスター状態か
04FFD9 BNE #$07 if(z==off) goto $04FFE2
04FFDB LDA $4940 A=$4940 パラディンがマスター状態か
04FFDE BNE #$02 if(z==off) goto $04FFE2
04FFE0 CLC c=off
04FFE1 RTS return
04FFE2 SEC c=on
04FFE3 RTS return

お手軽にやるならこんな感じ。個人的には判定SRは分けないで1ヶ所に書いたほうがいいと思いますが。証拠画像は↓のようになります。

転職時の職業選択画面

転職後の職業熟練度画面。パラディンしかマスターしてないのに勇者になっていることがわかります。

コメント

  1. 匿名 より:

    質問したものです。詳細ありがとうございます( ^^)
    なるほど、すごい技術ですね。ちなみに、制作主の開発環境はどのようなものでしょうか??
    どんなツールを使っているか簡単に教えていただきたいです。

    管理者より返信:

    開発環境は自作のSFCGENEditorです。