DQ3戦闘部分解説21

前回でダメージ系の解説は終わりです。ラリホーやマホトーンなど確率系については耐性改造のあたりで触れているので省略します。というわけでこれ以外のイレギュラーな戦闘行動(イレギュラーなものは遊び人の遊びに多いですが)についていくつか説明していきます。

  • SR: $029BAE ドラゴラム
029BAE LDX $23E8 X=$7E23E8
029BB1 LDA #$0001 A=#$0001
029BB4 JSL $02CB70 SR: $02CB70 引数:1#$2051 引数:2#$0040 ドラゴラムをON
029BBC LDA #$0000 A=#$0000
029BBF JSL $02CB70 SR: $02CB70 引数:1#$2051 引数:2#$0001 コマンド入力化をOFF?
029BC7 LDA #$007E A=#$007E ドラゴンのモンスターID
029BCA JSL $02CA98 SR: $02CA98 引数:1#$204B
029BD0 TAY Y=A
029BD1 JSL $02CC92 SR: $02CC92 引数:1#$0006 引数:2#$0FFC モンスター情報取得(攻撃力)
029BD9 JSL $02CA98 SR: $02CA98 引数:1#$203F 攻撃力セット
029BDF JSL $02CC92 SR: $02CC92 引数:1#$0007 引数:2#$3FF0 モンスター情報取得(守備力)
029BE7 JSR $99F5 SR: $0299F5 守備力変更
029BEA JSL $02CC92 SR: $02CC92 引数:1#$000A 引数:2#$00FF モンスター情報取得(素早さ)
029BF2 JSL $02CA98 SR: $02CA98 引数:1#$2043 素早さセット
029BF8 LDA #$0000 A=#$0000
029BFB JSL $02CB70 SR: $02CB70 引数:1#$2048 引数:2#$00FF 行動パターン変更
029C03 JSL $01A867 SR: $01A867 引数:1#$0070 戦闘メッセージ表示
029C09 SEC c=on
029C0A RTL return
  • SR: $0299F5 守備力変更
0299F5 PHX Push X
0299F6 PHY Push Y
0299F7 LDX $2428 X=$7E2428
0299FA PHA Push A
0299FB LDA #$0000 A=#$0000
0299FE JSL $02CB70 SR: $02CB70 引数:1#$2052 引数:2#$0008 守備力MAX状態を解除?
029A06 PLA Pull A
029A07 CMP #$03FF A>=#$03FF? 変更後の守備力が1023以上か
029A0A BCC #$0E if(c==off) goto $029A1A
029A0C LDA #$0001 A=#$0001
029A0F JSL $02CB70 SR: $02CB70 引数:1#$2052 引数:2#$0008 守備力MAX状態をセット?
029A17 LDA #$03FF A=#$03FF 1023以上の場合は1023にクリップ
029A1A JSL $02CA98 SR: $02CA98 引数:1#$2041 守備力変更
029A20 PLY Pull Y
029A21 PLX Pull X
029A22 RTS return

これを見ると、ドラゴラムとはドラゴンにモシャスすることとほぼ同値であることがわかります。ドラゴラムしたキャラクターは炎しか吐かないわけで攻撃力は意味がありませんが、守備力、素早さがドラゴンと同じになってしまうことがわかります。

  • SR: $0293E0 メガンテ
0293E0 LDA #$0001 A=#$0001
0293E3 PEA $23AE Push $23AE
0293E6 PEA $0004 Push $0004
0293E9 PEA $7E00 Push $7E00
0293EC JSL $0902E9 SR: $0902E9 メガンテ実行フラグ
0293F0 LDA $23E8 A=$7E23E8
0293F3 STA $2428 $7E2428=A
0293F6 JSR $A3EB SR: $02A3EB 耐性を考慮して成否判定
0293F9 BCS #$08 if(c==on) goto $029403
0293FB JSL $01A867 SR: $01A867 引数:1#$000F 戦闘メッセージ表示:「きかなかった」
029401 CLC c=off
029402 RTL return
029403 JSR $9372 SR: $029372 命の石所持を調べて持っていれば即死回避する
029406 BCS #$2B if(c==on) goto $029433
029408 PEA $23AD Push $23AD
02940B PEA $0040 Push $0040
02940E PEA $7E00 Push $7E00
029411 JSL $09029E SR: $09029E メガンテ結果選択(即死かダメージか)
029415 BNE #$1E if(z==off) goto $029435
029417 LDA #$FFFF A=#$FFFF
02941A STA $00 $000000=A
02941C JSL $02BE8A SR: $02BE8A 引数:1#$06 HP減算処理
029421 JSL $02B977 SR: $02B977 パーティウィンドウ再描画?
029425 JSL $02CFCE SR: $02CFCE 消滅処理?
029429 JSL $01A867 SR: $01A867 引数:1#$0019 戦闘メッセージ表示:「くだけちった」
02942F JSL $02B054 SR: $02B054 行動対象者を戦闘から離脱させる処理メイン
029433 SEC c=on
029434 RTL return
029435 LDA $247C A=$7E247C
029438 CMP #$0158 A>=#$0158? ここからダメージ値の計算?
02943B BCS #$12 if(c==on) goto $02944F
02943D SEC c=on
02943E SBC #$0004 A-=#$0004
029441 BCS #$03 if(c==on) goto $029446
029443 LDA #$0000 A=#$0000
029446 AND #$FFFC A&=#$FFFC
029449 CLC c=off
02944A ADC #$0005 A+=#$0005
02944D BRA #$08 goto $029457
02944F SEC c=on
029450 SBC #$0004 A-=#$0004
029453 AND #$FFFC A&=#$FFFC
029456 INC A++
029457 STA $00 $000000=A
029459 JSR $8E70 SR: $028E70 ダメージ確定メイン
02945C RTL return

術者が死亡する処理は「戦闘後追加処理を行う戦闘行動群」で実行されるので、ここではメガンテの対象に対する処理のみです。(このブログの最初期のあたりに記事を書いていますね。覚えてますか?)

  • SR: $029372 命の石所持を調べて持っていれば即死回避する
029372 LDA #$00A8 A=#$00A8 命の石のアイテムID
029375 STA $242C $7E242C=A
029378 JSL $02B87A SR: $02B87A アイテム装備チェック(保持のみならc=on)
02937C BCC #$10 if(c==off) goto $02938E
02937E JSL $02B904 SR: $02B904 戦闘中アイテム消費
029382 BCC #$0A if(c==off) goto $02938E
029384 JSL $01A867 SR: $01A867 引数:1#$0153 戦闘メッセージ:「いのちのいしは くだけちった」
02938A JSR $938F SR: $02938F
02938D SEC c=on
02938E RTS return
  • SR: $02938F 使用するアイテムが命の石の場合の処理?
02938F LDX $2428 X=$7E2428
029392 JSL $02CAD9 SR: $02CAD9 引数:1#$2052 引数:2#$0020 コマンド実行済み?
02939A BEQ #$21 if(z==on) goto $0293BD
02939C JSL $02CAD9 SR: $02CAD9 引数:1#$203D 引数:2#$00FF 使用するアイテムID取得
0293A4 CMP #$00A8 A==#$00A8? 使用するアイテムが命の石か
0293A7 BNE #$14 if(z==off) goto $0293BD
0293A9 STA $242C $7E242C=A
0293AC JSL $02B87A SR: $02B87A アイテム装備チェック(保持のみならc=on)
0293B0 BCC #$0C if(c==off) goto $0293BE
0293B2 LDA $242E A=$7E242E
0293B5 JSL $02CB70 SR: $02CB70 引数:1#$203E 引数:2#$00FF
0293BD RTS return
0293BE LDA #$0000 A=#$0000 コマンドを実行済みにする?
0293C1 JSL $02CB70 SR: $02CB70 引数:1#$2052 引数:2#$0020
0293C9 LDA #$00AB A=#$00AB 戦闘行動をいのちのいしにする
0293CC JSL $02CB70 SR: $02CB70 引数:1#$2034 引数:2#$01FF
0293D4 LDA #$0040 A=#$0040 ターゲット情報セット
0293D7 JSL $02CB70 SR: $02CB70 引数:1#$2035 引数:2#$00FE
0293DF RTS return

いまいち意味がわかりませんが、行動対象キャラクターの行動が命の石使用である場合、すでに命の石が砕けてしまっているので、持っていない場合にも「命の石を使った!」というメッセージが表示されるという矛盾をなくすための処理であるようです。

  • SR: $029E44 凍てつく波動
029E44 JSL $02BAE8 SR: $02BAE8 倒したモンスターがあやしいかげの場合の処理
029E48 LDX $23E8 X=$7E23E8 行動対象者のIDセット
029E4B STX $2428 $7E2428=X
029E4E JSL $02CAD9 SR: $02CAD9 引数:1#$2051 引数:2#$0080 行動対象がモシャス中か
029E56 BNE #$0A if(z==off) goto $029E62
029E58 JSL $02CAD9 SR: $02CAD9 引数:1#$2051 引数:2#$0040 行動対象がドラゴラム中か
029E60 BEQ #$04 if(z==on) goto $029E66
029E62 JSL $02B52D SR: $02B52D 戦闘中キャラクター行動情報初期化
029E66 LDY $23E4 Y=$7E23E4 行動主体者のIDセット
029E69 JSL $02CAE0 SR: $02CAE0 引数:1#$203C 引数:2#$00FF 行動主体のグループID取得
029E71 CMP #$0004 A>=#$0004? PCor格闘場で賭けたモンスターか
029E74 BCS #$12 if(c==on) goto $029E88
029E76 JSL $02CAD9 SR: $02CAD9 引数:1#$203C 引数:2#$00FF 行動対象のグループID取得
029E7E CMP #$0004 A>=#$0004? PCor格闘場で賭けたモンスターか
029E81 BCS #$12 if(c==on) goto $029E95
029E83 JSR $9E9E SR: $029E9E 凍てつく波動による不利ステータスリセット処理
029E86 BRA #$10 goto $029E98
029E88 JSL $02CAD9 SR: $02CAD9 引数:1#$203C 引数:2#$00FF 行動対象のグループID取得
029E90 CMP #$0004 A>=#$0004? PCor格闘場で賭けたモンスターか
029E93 BCS #$EE if(c==on) goto $029E83
029E95 JSR $9EE8 SR: $029EE8 凍てつく波動による有利ステータスリセット処理
029E98 JSL $02B977 SR: $02B977 パーティウィンドウ再描画?
029E9C SEC c=on
029E9D RTL return

ちょっとややこしいですが、A)PCor格闘場で賭けたモンスター、B)それ以外とすると、

行動主体 行動対象 リセットするステータス
A A 不利ステータス
A B 有利ステータス
B A 有利ステータス
B B 不利ステータス

ということです。

  • SR: $029E9E 凍てつく波動による不利ステータスリセット処理
029E9E LDA #$0000 A=#$0000
029EA1 JSL $02CB70 SR: $02CB70 引数:1#$2051 引数:2#$0002 マホトーン状態リセット
029EA9 JSL $02CB70 SR: $02CB70 引数:1#$2051 引数:2#$0004 マヌーサ状態リセット
029EB1 JSL $02C240 SR: $02C240 引数:1#$04 (素の)攻撃力取得
029EB6 JSL $02CA98 SR: $02CA98 引数:1#$203F 攻撃力変更
029EBC JSL $02C240 SR: $02C240 引数:1#$06 (素の)守備力取得
029EC1 JSR $99F5 SR: $0299F5 守備力変更
029EC4 JSL $02C240 SR: $02C240 引数:1#$08 (素の)すばやさ取得
029EC9 JSL $02CA98 SR: $02CA98 引数:1#$2043 すばやさ変更
029ECF JSL $02BE8A SR: $02BE8A 引数:1#$00 現HP取得
029ED4 STA $00 $000000=A
029ED6 JSL $02BE8A SR: $02BE8A 引数:1#$02 現HP変更
029EDB JSL $02BE8A SR: $02BE8A 引数:1#$08 現MP取得
029EE0 STA $00 $000000=A
029EE2 JSL $02BE8A SR: $02BE8A 引数:1#$0A 現MP変更
029EE7 RTS return

眠り状態はリセットされないようです。オリジナルでは使用するのはゾーマ、神龍だけなので、使用時に他の仲間の不利ステータスをリセットする必要はない、ということのようです。

  • SR: $029EE8 凍てつく波動による有利ステータスリセット処理
029EE8 LDA #$0000 A=#$0000
029EEB JSL $02CB70 SR: $02CB70 引数:1#$2051 引数:2#$0010 マホカンタ状態リセット
029EF3 JSL $02CB70 SR: $02CB70 引数:1#$2051 引数:2#$0020 フバーハ状態リセット
029EFB JSL $02CB70 SR: $02CB70 引数:1#$2051 引数:2#$0008 バイキルト状態リセット
029F03 JSL $02CB70 SR: $02CB70 引数:1#$2051 引数:2#$0040 ドラゴラム状態リセット
029F0B JSL $02CB70 SR: $02CB70 引数:1#$2051 引数:2#$0080 モシャス状態リセット
029F13 JSL $02C240 SR: $02C240 引数:1#$04 (素の)攻撃力取得
029F18 JSL $02CA98 SR: $02CA98 引数:1#$203F 攻撃力変更
029F1E JSL $02C240 SR: $02C240 引数:1#$06 (素の)守備力取得
029F23 JSR $99F5 SR: $0299F5 守備力変更
029F26 JSL $02C240 SR: $02C240 引数:1#$08 (素の)すばやさ取得
029F2B JSL $02CA98 SR: $02CA98 引数:1#$2043 すばやさ変更
029F31 JSL $02BE8A SR: $02BE8A 引数:1#$00 現HP取得
029F36 STA $00 DP($00)=A
029F38 JSL $02BE8A SR: $02BE8A 引数:1#$02 現HP変更
029F3D JSL $02BE8A SR: $02BE8A 引数:1#$08 現MP取得
029F42 STA $00 DP($00)=A
029F44 JSL $02BE8A SR: $02BE8A 引数:1#$0A 現MP変更
029F49 RTS return