DQ3 まんたん処理の仕組み2

今回から実装を見ていきます。

  • SR: $091F27 まんたん処理メイン
091F27 JSL $C1D832 SR: $01D832 呪文無効環境チェック(無効c=on)
091F2B BCS #$23 if(c==on) goto $091F50
091F2D JSR $1F59 SR: $091F59 回復呪文習得状態・ステータス異常チェック
091F30 JSR $204D SR: $09204D キアリク詠唱
091F33 JSR $20E4 SR: $0920E4 キアリー詠唱
091F36 JSR $214F SR: $09214F 必要HP回復量取得(回復不要c=on)
091F39 BCS #$05 if(c==on) goto $091F40
091F3B JSR $21AC SR: $0921AC まんたんHP回復処理
091F3E BCS #$F6 if(c==on) goto $091F36
091F40 LDA $2BBA A=$2BBA
091F43 BNE #$06 if(z==off) goto $091F4B $7E2BBAが0なら回復行動が実行された回数は0
091F45 JSL $C1A8D4 SR: $01A8D4 引数:1#$004D メッセージ表示 「しかし何も起こらなかった」
091F4B JSL $C340F7 SR: $0340F7 ウィンドウでのキー入力結果取得(キャンセルc=on)
091F4F RTL return
091F50 JSL $C1A8D4 SR: $01A8D4 引数:1#$005A メッセージ表示 「しかし呪文はかき消された」
091F56 JMP $1F4B ($091F4B) goto $091F4B

メインの処理はかなりスッキリした構成になっています。その分各SRは結構長いのですが。

  • SR: $091F27 回復呪文習得状態・ステータス異常チェック
091F59 STZ $2BBA $2BBA=#$00
091F5C JSL $C4297C SR: $04297C 引数:1#$01 引数:2#$FF パーティ人数取得
091F62 STA $2BB2 $2BB2=A
091F65 ASL A<<1
091F66 STA $2BB4 $2BB4=A
091F69 LDX #$0028 X=#$0028 ベホマラーの戦闘行動ID
091F6C JSR $24ED SR: $0924ED 回復最小量取得
091F6F STA $2BCA $2BCA=A
091F72 LDX #$002B X=#$002B ベホマズンの戦闘行動ID
091F75 JSR $24ED SR: $0924ED 回復最小量取得
091F78 STA $2BCC $2BCC=A
091F7B LDX #$0000 X=#$0000
091F7E STZ $2BB6 $2BB6=#$00
091F81 JSL $C43F87 SR: $043F87 引数:1#$01 引数:2#$FE 引数:3#$FF ステータス取得(健全c=off?)
091F88 TAY Y=A
091F89 AND #$0010 A&=#$0010 死亡判定
091F8C BEQ #$09 if(z==on) goto $091F97
091F8E LDA #$4000 A=#$4000 死亡フラグと行動不能フラグON
091F91 ORA #$8000 Aor=#$8000
091F94 TSB $2BB6 A or $2BB6
091F97 TYA A=Y
091F98 AND #$0002 A&=#$0002 麻痺判定
091F9B BEQ #$09 if(z==on) goto $091FA6
091F9D LDA #$2000 A=#$2000 麻痺フラグと行動不能フラグON
091FA0 ORA #$8000 Aor=#$8000
091FA3 TSB $2BB6 A or $2BB6
091FA6 TYA A=Y
091FA7 AND #$0001 A&=#$0001 毒判定
091FAA BEQ #$06 if(z==on) goto $091FB2
091FAC LDA #$1000 A=#$1000 毒フラグON
091FAF TSB $2BB6 A or $2BB6
091FB2 TXA A=X
091FB3 JSL $C3AEE8 SR: $03AEE8 般若の面を装備しているか調べる(装備しているc=on)
091FB7 BCC #$09 if(c==off) goto $091FC2
091FB9 LDA #$0400 A=#$0400 般若装備中と行動不能フラグON
091FBC ORA #$8000 Aor=#$8000
091FBF TSB $2BB6 A or $2BB6
091FC2 JSL $C455FD SR: $0455FD 引数:1#$01 引数:2#$FE 移動呪文情報取得
091FC8 LDA #$001F A=#$001F ホイミの戦闘行動ID
091FCB JSR $203D SR: $09203D 指定呪文を覚えているか(該当c=on)
091FCE BCC #$06 if(c==off) goto $091FD6
091FD0 LDA #$0004 A=#$0004 ホイミ習得フラグON
091FD3 TSB $2BB6 A or $2BB6
091FD6 LDA #$0022 A=#$0022 ベホイミの戦闘行動ID
091FD9 JSR $203D SR: $09203D 指定呪文を覚えているか(該当c=on)
091FDC BCC #$06 if(c==off) goto $091FE4
091FDE LDA #$0008 A=#$0008 ベホイミ習得フラグON
091FE1 TSB $2BB6 A or $2BB6
091FE4 LDA #$0025 A=#$0025 ベホマの戦闘行動ID
091FE7 JSR $203D SR: $09203D 指定呪文を覚えているか(該当c=on)
091FEA BCC #$06 if(c==off) goto $091FF2
091FEC LDA #$0010 A=#$0010 ベホマ習得フラグON
091FEF TSB $2BB6 A or $2BB6
091FF2 LDA #$0028 A=#$0028 ベホマラーの戦闘行動ID
091FF5 JSR $203D SR: $09203D 指定呪文を覚えているか(該当c=on)
091FF8 BCC #$06 if(c==off) goto $092000
091FFA LDA #$0020 A=#$0020 ベホマラー習得フラグON
091FFD TSB $2BB6 A or $2BB6
092000 LDA #$002B A=#$002B ベホマズンの戦闘行動ID
092003 JSR $203D SR: $09203D 指定呪文を覚えているか(該当c=on)
092006 BCC #$06 if(c==off) goto $09200E
092008 LDA #$0040 A=#$0040 ベホマズン習得フラグON
09200B TSB $2BB6 A or $2BB6
09200E LDA #$0046 A=#$0046 キアリーの戦闘行動ID
092011 JSR $203D SR: $09203D 指定呪文を覚えているか(該当c=on)
092014 BCC #$06 if(c==off) goto $09201C
092016 LDA #$0002 A=#$0002 キアリー習得フラグON
092019 TSB $2BB6 A or $2BB6
09201C LDA #$0047 A=#$0047 キアリクの戦闘行動ID
09201F JSR $203D SR: $09203D 指定呪文を覚えているか(該当c=on)
092022 BCC #$06 if(c==off) goto $09202A
092024 LDA #$0001 A=#$0001 キアリク習得フラグON
092027 TSB $2BB6 A or $2BB6
09202A TXA A=X
09202B ASL A<<1
09202C TAY Y=A
09202D LDA $2BB6 A=$2BB6
092030 STA $2BE8,Y $2BE8+Y=A
092033 INX X++
092034 CPX $2BB2 X>=$2BB2? 人数分だけループ
092037 BCS #$03 if(c==on) goto $09203C
092039 JMP $1F7E ($091F7E) goto $091F7E
09203C RTS return

ここではまず各キャラクターについてステータス及び各回復呪文の習得状態のチェックを行なってその結果をメモリにセットしています。このチェック結果に基づいて回復呪文の実行を決定していきます。単純にまんたんの時にベホマラー・ベホマズンを使わせたくない場合は、$091FF8、$092006のBCCをBRAに変えればベホマラー・ベホマズンを習得していても習得フラグが立たずに実行されなくなります。

コメント

  1. AKV より:

    3の「まんたん」は、ベホマラーを使ってオトクな場合が、全員にベホイミを使う場合だけなので(多分)、「まんたん」で使う呪文からベホマラー・ベホマズンをつぶして、使わなくすることで対処しちゃいました。
    ただそれだけだと、492さんの「専門職以外の回復魔法弱体化」が影響されていないようで、例えばベホマは一発で全快しちゃってます。Lv50賢者の消費MP3/4は有効でした。

    管理者より返信:

    その問題は認識していて現在リリースしている1.4.4で修正済みです。ベホマラー・ベホマズンを使わないことを前提にすればかなり処理が簡単になります。ベホイミ4回とベホマラー1回の消費MPの差は20と18で2しか違わないので習得レベルを考えるとこの際目をつぶってももあまり問題ないかと思います。