今回から実装を見ていきます。
- 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に変えればベホマラー・ベホマズンを習得していても習得フラグが立たずに実行されなくなります。
コメント
3の「まんたん」は、ベホマラーを使ってオトクな場合が、全員にベホイミを使う場合だけなので(多分)、「まんたん」で使う呪文からベホマラー・ベホマズンをつぶして、使わなくすることで対処しちゃいました。
ただそれだけだと、492さんの「専門職以外の回復魔法弱体化」が影響されていないようで、例えばベホマは一発で全快しちゃってます。Lv50賢者の消費MP3/4は有効でした。
その問題は認識していて現在リリースしている1.4.4で修正済みです。ベホマラー・ベホマズンを使わないことを前提にすればかなり処理が簡単になります。ベホイミ4回とベホマラー1回の消費MPの差は20と18で2しか違わないので習得レベルを考えるとこの際目をつぶってももあまり問題ないかと思います。