DQ3 特定のアイテムを装備している場合に盗むが発動するようにする

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

DQ3で特定のアイテムを装備している場合に戦闘終了時に盗むが発動するようにする

というものです。質問者の方は「盗賊を廃止して代わりに特定のアイテムを装備していたら盗むが発動するようにする」という実装をしようとしていたようです。実装の情報をもらったので見てみましたがほとんど正解にたどり着いていたのでパパっと添削して終わりにします。

  • SR: $02A910 アイテム取得処理(盗賊)
02A962JSR $FE40SR: $02FE40アイテム装備チェック
02A965NOP
02A966NOP

  • SR: $02FE40 アイテム装備チェック(新SR)
02FE40LDA $242CA=$242C盗むアイテム情報をスタックに退避
02FE43PHAPush A
02FE44LDA #$00FDA=#$00FD
02FE47STA $242C$242C=A
02FE4AJSL $C2B87ASR: $02B87A
02FE4EBVC #$08if(v==off) goto $02FE58
02FE50PLAPull A
02FE51STA $242C$242C=A盗むアイテム情報に戻す
02FE54LDA #$0006A=#$0006盗賊の職業IDにする
02FE57RTSreturn
02FE58PLAPull A
02FE59STA $242C$242C=A盗むアイテム情報に戻す
02FE5CLDA #$0000A=#$0000戦士の職業IDにする
02FE5FRTSreturn

SR: $02A962のあたりはもともとは職業IDを取得して盗賊であるかどうかを判断する箇所になっています。これを特定のアイテムの装備をチェックして装備していれば盗賊(職業ID:6)、そうでなければ6以外の値の適当な値にして返す、という実装にしています。ポイントはこの時点で$242Cには盗むアイテムがセットされているので装備品チェックの際に使用するメモリが使われているのでスタックに一旦退避する必要があるということです。ださいコードですがこれなら確実に動くはず。自分もこの実装をした後デバッガで動きを見たら$02FE5Cの行が抜けていたので、自戒の意味も込めて「とにかくデバッガ使っとけ」という言葉でこのエントリを〆ようと思います。

コメント

  1. ks より:

    迅速な回感謝いたします。
    スタックを使う方法も考えていたのですが、盗む発動アイテムを装備していなかった時のPULL Aを忘れていました(^_^;)

    今までデバックを使わずにやってきましたので、考えを改めたいと思います。

  2. DD より:

    盗賊は初期設定(盗むが発動する)のままで、特定のアイテムを装備したら盗むを発動させるにはどのようにしたらよいでしょうか?

    管理者より返信:

    Aレジスタにはもともと職業IDが入っているので6(盗賊の職業ID)だったらなにもしないでリターンすればいいのではないでしょうか。

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