DQ4-6でおなじみのきせきのつるぎを導入します。効果は与えたダメージの1/4を回復するというものです。まず、アイテムにきせきのつるぎを追加します。アイテムID#$E5に追加します。攻撃力はオリジナル(100)よりちょっと落として90にしました(後で調整するかもしれません)。勇者、戦士、賢者、商人を装備可能にしました。
次は攻撃時の効果の実装です。ダメージが確定したときに刃の鎧の反射やもろはの剣の反射などを実装している部分に紛れ込ませたいのですが、例によって空きがありません。というわけで別の部分に処理を飛ばすことにします。
- SR: $027D53 戦闘行動実行処理メイン
略 | |||
---|---|---|---|
027DB1 | JSR $D580 | SR: $02D580 | |
027DB4-9 | NOP | ||
略 |
- SR: $02D580 直接攻撃反射ダメージ計算等(新SR)
02D580 | JSR $896D | SR: $02896D | |
---|---|---|---|
02D583 | JSR $89C5 | SR: $0289C5 | |
02D586 | JSR $8A2C | SR: $028A2C | |
02D589 | JSR $D385 | SR: $02D385 | |
02D58A | RTS | return |
$02D580-88までのSRはもともと$027DB1-B9にあったものをそのまま移動しただけです。まとめて移動する必要は特にないのですが、プログラム上の意味としてひとまとめにしたほうがいいと思いまとめて移動させました。
- SR: $02D385 きせきのつるぎ装備時の回復処理(新SR)
02D385 | LDA $23F2 | A=$23F2 | |
---|---|---|---|
02D388 | BNE #$4B | if(z==off) goto $02D3D5 | |
02D38A | LDX $23EE | X=$23EE | |
02D38D | JSL $C2CC25 | SR: $02CC25 引数:1#$0079 引数:2#$0008 | |
02D395 | BEQ #$3E | if(z==on) goto $02D3D5 | |
02D397 | LDX $23E4 | X=$23E4 | |
02D39A | STX $2428 | $2428=X | |
02D39D | JSL $C2CB2B | SR: $02CB2B 引数:1#$2050 引数:2#$0002 | |
02D3A5 | BEQ #$2E | if(z==on) goto $02D3D5 | |
02D3A7 | LDA #$00E5 | A=#$00E5 | |
02D3AA | STA $242C | $242C=A | |
02D3AD | JSL $C2B87A | SR: $02B87A | アイテム装備チェック |
02D3B1 | BVC #$22 | if(v==off) goto $02D3D5 | |
02D3B3 | LDA $23FA | A=$23FA | ダメージが0なら回復処理はなし |
02D3B6 | BEQ #$1D | if(z==on) goto $02D3D5 | |
02D3B8 | JSR $DF94 | SR: $02DF94 | |
02D3BB | JSL $C2BE8A | SR: $02BE8A 引数:1#$04 | HP加算処理 |
02D3C0 | JSL $C2BE8A | SR: $02BE8A 引数:1#$00 | 不要? |
02D3C5 | JSL $C1E32E | SR: $01E32E 引数:1#$00C4 | BGM再生 |
02D3CB | JSL $C2B977 | SR: $02B977 | パーティウィンドウ再描画 |
02D3CF | JSL $C1A867 | SR: $01A867 引数:1#$01AA | 戦闘メッセージ |
02D3D5 | RTS | return |
実装は特に目新しいところはありません。$02D38Dの処理は戦闘行動のもろはのつるぎ・なげきのたて・やいばのよろいで反応するか(25バイト目4ビット)がOFFのときは回復処理を飛ばすためのものです。$02D39Dの処理は行動主体者($7E23E4)が敵であれば回復処理を飛ばすためのものです。一点気をつけるのは$02D3C7のあたりの処理です。行動主体者($7E23E4)が回復処理の行動対象となるように行動対象者($7E23E8)にセットする必要があるのですが、回復処理を終えた後にこれらの情報を元の情報に戻すためにスタックを使っています。スタックはSRに入る前と出る直前で基本同じ状態に戻しておく必要があるので分岐命令等でスタックをPULLする部分の処理を飛ばさないようにしてください。こういったバグを入れるとゲームはすぐフリーズします。
さて、きせきのつるぎはしっぷうのバンダナのかわりにメダル80枚の賞品に設定しました。もともと80枚の賞品だったドラゴンクロウは70枚の賞品に移動しました。
コメント
既存の武器に上記機能を実装する場合ですが、
02D3A7 LDA #$00E5 A=#$00E5
のE5を実装させたい武器のIDに変更すれば良いのでしょうか?
その通りです。