もはやSFCDQ3の改造の定番とも言える「モンスターのダメージ系の呪文の耐性を成功確率からダメージ減少率に変える」を実装します。マップ編集の作業が辛すぎて、ついふらふらと気分転換がてら別の変更に手を出してしまいました(後日作業環境の整備の結果、マップ編集作業はかなり楽になりました)。また、オリジナルでは割合の数値は100%・75%?・30%・0%だったのを、150%(弱点)・100%(耐性なし)・50%(半減)・0%(無効)とし、弱点呪文の場合はダメージが増えるようにも設定できるようにします。150%というのはやりすぎなので125%くらいに調整するかもしれません。かなりのモンスターに弱点が設定されているFFとは違い、DQではあからさまに弱点がありそうなモンスターというのは炎や氷からできているモンスターくらいなのでいまいちそぐわないかもしれません。
- SR: $0291A8 耐性によるダメージ0化処理
0291D3 | JSR $DAF9 | SR: $02DAF9 | 耐性を考慮した呪文等結果処理 |
---|
- SR: $02DAF9 耐性を考慮した呪文等結果処理(新SR)
02DAF9 | JSR $DB02 | SR: $02DB02 | ダメージ系呪文を耐性を考慮してダメージ値調整(調整c=on) |
---|---|---|---|
02DAFC | BCS #$03 | if(c==on) goto $02DB01 | |
02DAFE | JSR $A3EB | SR: $02A3EB | |
02DB01 | RTS | return |
- SR: $02DB02 ダメージ系呪文を耐性を考慮してダメージ値調整(調整c=on)(新SR)
02DB02 | JSR $DB3E | SR: $02DB3E | 戦闘行動がダメージ値調整対象になるか |
---|---|---|---|
02DB05 | BCC #$35 | if(c==off) goto $02DB3C | |
02DB07 | LDA $23E8 | A=$23E8 | |
02DB0A | STA $2428 | $2428=A | |
02DB0D | LDA $23EE | A=$23EE | |
02DB10 | STA $242A | $242A=A | |
02DB13 | JSL $C2C240 | SR: $02C240 引数:1#$16 | |
02DB18 | CMP #$0100 | A==#$0100? | 耐性値0 |
02DB1B | BNE #$0A | if(z==off) goto $02DB27 | |
02DB1D | LDA $00 | A=DP($00) | |
02DB1F | LSR | A>>1 | |
02DB20 | NOP | (125%に抑えたい場合はここを4Aに変更する) | |
02DB21 | ADC $00 | A+=(DP($00)+c) | |
02DB23 | STA $00 | DP($00)=A | ダメージ150%化 |
02DB25 | BRA #$13 | goto $02DB3A | |
02DB27 | CMP #$004C | A==#$004C? | |
02DB2A | BNE #$04 | if(z==off) goto $02DB30 | |
02DB2C | LSR $00 | DP($00)>>1 | ダメージ50%化 |
02DB2E | BRA #$0A | goto $02DB3A | |
02DB30 | CMP #$0000 | A==#$0000? | |
02DB33 | BNE #$05 | if(z==off) goto $02DB3A | |
02DB35 | LDA #$0000 | A=#$0000 | |
02DB38 | STA $00 | DP($00)=A | ダメージ無効化 |
02DB3A | SEC | c=on | |
02DB3B | RTS | return | |
02DB3C | CLC | c=off | |
02DB3D | RTS | return |
(2009-10-06追記)
以下のSR: $02DB3Bは不完全なためhttps://retrogamehackers.net/dq3-battlesystem-mod-012/で修正しています。以下の実装は使用を推奨しません。
- SR: $02DB3B 戦闘行動がダメージ値調整対象になるか(対象c=on)(新SR)
02DB3E | PHX | Push X | |
---|---|---|---|
02DB3F | LDX $23E8 | X=$7E23E8 | |
02DB42 | STX $2428 | $7E2428=X | |
02DB45 | JSL $C2CAD9 | SR: $02CAD9 引数1:#$203C 引数2:#$00FF | ターゲットのグループ番号を取得 |
02DB4D | CMP #$0005 | A>=#$0005? | 味方側か? |
02DB50 | BCS #$30 | if(c==on) goto $02DB82 | |
02DB52 | LDA $23EE | A=$7E23EE | 戦闘行動IDチェック |
02DB55 | CMP #$0006 | A>=#$0006? | メラ未満か? |
02DB58 | BCC #$28 | if(c==off) goto $02DB82 | |
02DB5A | CMP #$0018 | A>=#$0018? | ザキ未満か? |
02DB5D | BCC #$20 | if(c==off) goto $02DB7F | |
02DB5F | CMP #$0057 | A>=#$0057? | ひのいき未満か? |
02DB62 | BCC #$1E | if(c==off) goto $02DB82 | |
02DB64 | CMP #$005D | A>=#$005D? | どくのいき未満か? |
02DB67 | BCC #$16 | if(c==off) goto $02DB7F | |
02DB69 | CMP #$006C | A>=#$006C? | まどうしのつえ未満か? |
02DB6C | BCC #$14 | if(c==off) goto $02DB82 | |
02DB6E | CMP #$0073 | A>=#$0073? | くさなぎのけん未満か? |
02DB71 | BCC #$0C | if(c==off) goto $02DB7F | |
02DB73 | CMP #$010D | A>=#$010D? | しゃくねつ未満か? |
02DB76 | BCC #$0A | if(c==off) goto $02DB82 | |
02DB78 | CMP #$010E | A>=#$010E? | にらみつけ未満か? |
02DB7B | BCC #$02 | if(c==off) goto $02DB7F | |
02DB7D | BRA #$03 | goto $02DB82 | |
02DB7F | SEC | c=on | |
02DB80 | BRA #$01 | goto $02DB83 | |
02DB82 | CLC | c=off | |
02DB83 | PLX | Pull X | |
02DB84 | RTS | return |
この変更に伴い、全モンスターの耐性を見直します。オリジナルでは0%と100%の間には30%、70%と2つ段階があったのに対し、今回の変更では0%と100%の間には50%だけになるので、オリジナルと全く同じ設定をする、というわけにはいきません。炎系呪文の耐性が30%で残りが70%のような場合には耐性を付けたい場合は全部50%を設定するしかないわけでこうした場合の濃淡が付けられないという欠点があります。どっか1ビット余計に使えればいいんですが。テストをして50%耐性のあるモンスターに使ってダメージが半減していればとりあえずOKです。
コメント