DQ3 専門職以外の呪文の効果を3/4にする2(戦闘中回復呪文編)

前回に引き続き、今回は戦闘中の回復呪文の回復値の調整をすることにします。戦闘中の回復処理は全てSR: $029610で行っています。このSRの前半ではターゲットが光ゾーマ(#$0088)であればダメージを与える処理を行っています。今回は空き領域の都合もあり、この部分も一緒に削り光ゾーマに回復行動でダメージを与えられないようにもしてしまいます。今回も回復行動の素値を取得した直後に調整用のSRをはさんで回復量を調整します。

  • SR: $029610 回復系処理(戦闘中)
029610LDA $23F2A=$23F2
029613BEQ #$27if(z==on) goto $02963C
029615LDX $23E8X=$23E8
029618JSL $C2CAD9SR: $02CAD9 引数:1#$2050 引数:2#$0001
029620BNE #$1Aif(z==off) goto $02963C
029622NOP
02963CLDA $23E8A=$23E8
02963FSTA $2428$2428=A
029642JSL $C2BE8ASR: $02BE8A 引数:1#$00
029647STA $02DP($02)=A
029649JSL $C90AF7SR: $090AF7
02964DSTA $00DP($00)=A
02964FJSR $D2BESR: $02D2BE職業別回復呪文回復量調整

略の部分は全て$EA(NOP)で埋めています。さて、今回ちょっと違うのが、$029642で取得した現在HPを$02にセットしています。これは後で回復時に加算するもとのHPとして使うようです。従ってこの部分には手を触れてはいけません。回復量は攻撃呪文同様$00にセットされるのでその直後に新規に定義した調整用のSRをコールして$00の値を変えることにします。

  • SR: $02D2BE 職業別回復呪文回復量調整(新SR)
02D2BEPHAPush A
02D2BFPHXPush X
02D2C0PHPPush P Flag
02D2C1LDA $2428A=$2428
02D2C4PHAPush A
02D2C5LDX $23E4X=$23E4
02D2C8STX $2428$2428=X
02D2CBJSL $C2CAD9SR: $02CAD9 引数:1#$203C 引数:2#$00FF
02D2D3CMP #$0005A>=#$0005?行動主体がPC側か
02D2D6BCC #$40if(c==off) goto $02D318
02D2D8JSL $C2BE8ASR: $02BE8A 引数:1#$24職業IDを取得する
02D2DDCMP #$0008A==#$0008?勇者か
02D2E0BEQ #$36if(z==on) goto $02D318
02D2E2CMP #$0007A==#$0007?賢者か
02D2E5BEQ #$31if(z==on) goto $02D318
02D2E7CMP #$0003A==#$0003?僧侶か
02D2EABEQ #$2Cif(z==on) goto $02D318
02D2ECLDA $23EEA=$23EE
02D2EFCMP #$001FA==#$001F?戦闘行動がホイミ(味方)か
02D2F2BEQ #$1Cif(z==on) goto $02D310
02D2F4CMP #$0022A==#$0022?戦闘行動がべホイミ(味方)か
02D2F7BEQ #$17if(z==on) goto $02D310
02D2F9CMP #$0028A==#$0028?戦闘行動がベホマラー(味方)か
02D2FCBEQ #$12if(z==on) goto $02D310
02D2FECMP #$0025A==#$0025?戦闘行動がベホマ(味方)か
02D301BEQ #$03if(z==on) goto $02D306
02D303JMP $D318 ($02D318)goto $02D318
02D306JSL $C2C240SR: $02C240 引数:1#$18行動主体の賢さを取得
02D30BSTA $00DP($00)=A本業以外はベホマの回復量は術者の賢さの値になる
02D30DJMP $D318 ($02D318)goto $02D318
02D310LDA $00A=DP($00)
02D312LSRA>>1
02D313ADC $00A+=(DP($00)+c)
02D315LSRA>>1
02D316STA $00DP($00)=A回復量を3/4にする
02D318PLAPull A
02D319STA $2428$2428=A
02D31CPLPPull P Flag
02D31DPLXPull X
02D31EPLAPull A
02D31FRTSreturn

前回にまして長いです。さて、やることは基本的に変わりません。行動主体($7E23E4)が敵か味方かSR: $02CAD9で調べて、敵であれば(A<5)、調整はしないので処理を飛ばします。次に職業IDをSR: $02BE8Aで取得して勇者か(#$08)賢者か(#$07)僧侶(#$03)であれば調整はしないので処理を飛ばします。次に戦闘行動を調べてホイミ(#$001F9)かべホイミ(#$0022)かベホマラー(#$0028)であれば効果を3/4にする処理をおこないます。さらにベホマ(#$0025)であれば、行動主体の賢さを取得してその値を$00にセットします。しかし、この記事をみればわかるとおり、賢さを取得するSRがありません。というわけで追加することにします。

  • SR: $02C240の拡張

$02C240は、引数(1バイト)をオフセットにしてSRアドレスの配列から指定個所のアドレスのSRを呼ぶ、というものです。具体的には$FC(JML (addr,x))を使っています。今回のケースでは$02C2A0から24バイト(2バイトx12)を敵用の情報を取得するSRアドレス群として、$02C2B8から24バイト(2バイトx12)を味方用の情報を取得するSRアドレス群として使用しています。本当はよくないのですが、事実上敵の賢さを取得する意味がないので味方側のアドレス群のみ拡張することにします。まず、空きがないのでアドレス群の場所を$02D320に移動します。そして、その最後に対象の賢さを取得する新SRのアドレスを追加します。追加後には以下のようになります。

アドレス
02D320C2D7
02D322C2F0
02D324C301
02D326C312
02D328C323
02D32AC334
02D32CC345
02D32EC352
02D330C37E
02D332C3AE
02D334C3BB
02D336C4EC
02D338D33A

そして$02D33Aに賢さを取得するSRを実装します。

  • $02D33A PC(Player Character)の賢さを取得する
02D33AJSL $C437C1SR: $0437C1 引数:1#$06 引数:2#$FD 引数:3#$FF
02D341RTSreturn

これでベホマ時の回復量が術者の賢さと等しくなるはずです。この一連の変更で専門職以外のベホマラーの効果がとたんに低くなります。これにあわせて賢者の石の回復量も抑えれば本職のベホマラーの価値がぐっと高まると思われます。ためしに勇者+戦士+盗賊+ぶとうかのほぼLv99のパーティでしんりゅうに挑んでみたところ、勇者のベホマズン以外はほとんど役立たずでした。通しでプレイしてないのでまだわかりませんが、ある程度職業間のバランスがとれているような感触を得ました。

コメント

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