DQ3 毒による戦闘中ダメージ+勇者自動回復実装2

実装を開始します。文字で解説することはあまりありません。多くのターン終了時の処理はストーリー変更(ラスボス編3)ですでに載せているので必須の部分以外は省略します。

まず毒のダメージ部分を実装します。

  • SR: $02D8E8 ターン終了時処理(再掲のため一部のみ)
02D8F3JSR $DB85SR: $02DB85ターン終了時処理(毒ダメージ)
02D8F6BCS #$03if(c==on) goto $02D8FB
02D8F8JSR $A44ESR: $02A44Eターン終了時処理(各キャラクターごと)
  • SR: $02DB85 ターン終了時処理(毒ダメージ)
02DB85JSL $C28375SR: $0283751キャラクター行動開始時変数初期化処理
02DB89LDY #$0000Y=#$0000
02DB8CLDA $243E,YA=$243E+Y
02DB8FAND #$00FFA&=#$00FF
02DB92CMP #$0018A>=#$0018?
02DB95BCS #$1Aif(c==on) goto $02DBB1
02DB97STA $2428$2428=A
02DB9ATAXX=A
02DB9BJSL $C2CAD9SR: $02CAD9 引数:1#$2050 引数:2#$0002存在判定?
02DBA3BEQ #$0Cif(z==on) goto $02DBB1
02DBA5JSL $C2BE8ASR: $02BE8A 引数:1#$1C死亡判定
02DBAABCS #$05if(c==on) goto $02DBB1
02DBACJSR $DC3CSR: $02DC3C毒によるダメージ処理
02DBAFBCS #$07if(c==on) goto $02DBB8
02DBB1INYY++
02DBB2CPY #$0018Y>=#$0018?
02DBB5BCC #$D5if(c==off) goto $02DB8C
02DBB7CLCc=off
02DBB8RTSreturn

  • SR: $02DC3C 毒によるダメージ処理(新SR)
02DC3CSTX $2428$2428=X
02DC3FJSL $C2BE8ASR: $02BE8A 引数:1#$1C死亡判定(不要かも)
02DC44BCS #$07if(c==on) goto $02DC4D
02DC46JSL $C2BE8ASR: $02BE8A 引数:1#$10毒判定
02DC4BBCS #$02if(c==on) goto $02DC4F
02DC4DCLCc=off
02DC4ERTSreturn
02DC4FJSL $C2C240SR: $02C240 引数:1#$00最大HP取得
02DC54STA $00DP($00)=A
02DC56PHXPush X
02DC57NOP
02DC58NOP
02DC59NOP
02DC5ANOP
02DC5BNOP
02DC5CNOP
02DC5DNOP
02DC5ENOP
02DC5FJSL $C5DEF0SR: $05DEF0
02DC63STA $23FA$23FA=A
02DC66PLXPull X
02DC67TXAA=X
02DC68STA $23E8$23E8=A
02DC6BJSL $C1A867SR: $01A867 引数:1#$018B戦闘メッセージ表示
02DC71LDA $23FAA=$23FA
02DC74STZ $BE83$BE83=#$00ダメージ表示バッファの上位2バイトを初期化
02DC77STA $BE81$BE81=A
02DC7AJSL $C1A867SR: $01A867 引数:1#$018C戦闘メッセージ表示
02DC80LDA $23FAA=$23FA
02DC83STA $00DP($00)=A
02DC85JSL $C2BE8ASR: $02BE8A 引数:1#$06HP減算
02DC8APHPPush P Flag
02DC8BJSL $C2B977SR: $02B977パーティウィンドウ再描画?
02DC8FPLPPull P Flag
02DC90BCC #$BBif(c==off) goto $02DC4D
02DC92JSL $C1A867SR: $01A867 引数:1#$018D戦闘メッセージ表示
02DC98JSL $C2CFCESR: $02CFCE消滅処理?
02DC9CJSL $C2B054SR: $02B054行動対象者を戦闘から離脱させる処理メイン
02DCA0JSL $C2B32FSR: $02B32F戦闘終了時フラグセット?
02DCA4BCC #$A7if(c==off) goto $02DC4D
02DCA6SECc=on
02DCA7RTSreturn
  • SR $05DEF0 毒によるダメージ計算(新SR)
05DEF0LDX #$0000X=#$0000
05DEF3LDA #$000DA=#$000D1/13の分母
05DEF6JSL $C0121CSR: $00121C$00,X(2B)=$00,X(2B)/A(1B) 剰余=A
05DEFALDA $00A=DP($00)
05DEFCBNE #$01if(z==off) goto $05DEFF
05DEFEINCA++ダメージが0なら1を加算
05DEFFRTLreturn

(4/28追記)
1点注意する点を忘れていました。毒によるダメージ値をメッセージの表示用バッファ($7EBE81-4)にセットする場合に、上位2バイトをあらかじめ0で初期化しておく必要があります。これをやらないと直前のメッセージ内容によっては上位2バイトにゴミが残っていると、ダメージ値の表示が6xxxxなどととんでもない数値になります。実際のダメージ値は正しいため実害が無いのと、必ず起きるわけではないので見つけにくいですが、注意しておきたいところです。(追記ここまで)

次に勇者の自動回復部分を実装します。

  • SR: $02A44E ターン終了時処理(各キャラクターごと)(再掲のため一部のみ)
02A475JSR $DB7BSR: $02DB7Bターン終了時各キャラクター処理(自動回復+モンスターID切り替え)

  • SR: $02DB7B ターン終了時各キャラクター処理(自動回復+モンスターID切り替え)(再掲のため一部のみ)
02DB7BJSR $DCA8SR: $02DCA8勇者自動回復処理
  • SR: $02DCA8 勇者自動回復処理(新SR)
02DCA8STX $2428$2428=X
02DCABJSL $C2CAD9SR: $02CAD9 引数:1#$203C 引数:2#$00FF戦闘中グループ取得
02DCB3CMP #$0005A>=#$0005?
02DCB6BCC #$47if(c==off) goto $02DCFF
02DCB8JSL $C2BE8ASR: $02BE8A 引数:1#$1C死亡判定
02DCBDBCS #$40if(c==on) goto $02DCFF
02DCBFJSL $C2BE8ASR: $02BE8A 引数:1#$24職業ID取得
02DCC4CMP #$0008A==#$0008?職業が勇者か
02DCC7BNE #$36if(z==off) goto $02DCFF
02DCC9JSL $C2C240SR: $02C240 引数:1#$0Aレベル取得
02DCCECMP #$0028A>=#$0028?Lv40以上か
02DCD1BCC #$2Cif(c==off) goto $02DCFF
02DCD3SBC #$0028A-=(#$0028 +c)Lv-40
02DCD6CMP #$0014A>=#$0014?Lv-40>=20か
02DCD9BCS #$06if(c==on) goto $02DCE1
02DCDBASLA<<1回復量可変部分計算
02DCDCADC #$000AA+=(#$000A+c)回復量ベース部分を足す
02DCDFBRA #$03goto $02DCE4
02DCE1LDA #$0032A=#$0032回復量最大(50)
02DCE4STA $00DP($00)=A
02DCE6JSL $C2BE8ASR: $02BE8A 引数:1#$04HP加算処理
02DCEBJSL $C1E32ESR: $01E32E 引数:1#$00C4BGM再生
02DCF1JSL $C2B977SR: $02B977パーティウィンドウ再描画?
02DCF5TXAA=X
02DCF6STA $23E8$23E8=A
02DCF9JSL $C1A867SR: $01A867 引数:1#$018A戦闘メッセージ表示
02DCFFRTSreturn

コメント

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