前回からの続きです。
- SR: $09204D キアリク詠唱
09204D | LDY #$0000 | Y=#$0000 | |
---|---|---|---|
092050 | LDA $2BE8,Y | A=$2BE8+Y | |
092053 | AND #$2000 | A&=#$2000 | 麻痺していなければスキップ |
092056 | BEQ #$62 | if(z==on) goto $0920BA | |
092058 | TYA | A=Y | |
092059 | LSR | A>>1 | |
09205A | STA $7A | DP($7A)=A | |
09205C | STA $BE7F | $BE7F=A | |
09205F | LDX $2BB4 | X=$2BB4 | 詠唱可能者をパーティの後ろから探す |
092062 | DEX | X– | |
092063 | DEX | X– | |
092064 | BMI #$54 | if(n==on) goto $0920BA | |
092066 | LDA $2BE8,X | A=$2BE8+X | |
092069 | BMI #$F7 | if(n==on) goto $092062 | 行動不能フラグが立っていたらスキップ |
09206B | AND #$0001 | A&=#$0001 | キアリクを覚えていなければスキップ |
09206E | BEQ #$F2 | if(z==on) goto $092062 | |
092070 | TXA | A=X | |
092071 | LSR | A>>1 | |
092072 | STA $78 | DP($78)=A | |
092074 | STA $BE7D | $BE7D=A | |
092077 | LDA #$0047 | A=#$0047 | |
09207A | JSR $20C5 | SR: $0920C5 | 消費MP計算+減 |
09207D | BCC #$E3 | if(c==off) goto $092062 | |
09207F | JSL $C44129 | SR: $044129 引数:1#$01 引数:2#$7A | 麻痺回復 |
092085 | JSL $C1E32E | SR: $01E32E 引数:1#$0065 | 再生BGM設定? |
09208B | JSL $C1A8D4 | SR: $01A8D4 引数:1#$0002 | メッセージ表示 |
092091 | JSL $C1A8D4 | SR: $01A8D4 引数:1#$001F | メッセージ表示 |
092097 | LDA #$4000 | A=#$4000 | |
09209A | ORA #$0400 | Aor=#$0400 | 死亡・般若装備中か調べる |
09209D | AND $2BE8,Y | A&=$2BE8+Y | |
0920A0 | BNE #$06 | if(z==off) goto $0920A8 | |
0920A2 | LDA #$8000 | A=#$8000 | 死亡・般若装備中でなければ行動不能フラグもOFFにする |
0920A5 | JMP $20AB ($0920AB) | goto $0920AB | |
0920A8 | LDA #$0000 | A=#$0000 | |
0920AB | ORA #$2000 | Aor=#$2000 | 麻痺フラグをOFF |
0920AE | EOR #$FFFF | A^=#$FFFF | |
0920B1 | AND $2BE8,Y | A&=$2BE8+Y | |
0920B4 | STA $2BE8,Y | $2BE8+Y=A | |
0920B7 | INC $2BBA | $2BBA++ | |
0920BA | INY | Y++ | |
0920BB | INY | Y++ | |
0920BC | CPY $2BB4 | Y>=$2BB4? | |
0920BF | BCS #$03 | if(c==on) goto $0920C4 | |
0920C1 | JMP $2050 ($092050) | goto $092050 | |
0920C4 | RTS | return |
- SR: $0920E4 キアリー詠唱 省略
見ての通り、という感じの処理ですが、オリジナルのまんたん処理は後ろにいるキャラクターから優先に呪文使用者を選択しています。パーティの後ろにいる=呪文職であるという前提に立っているからでしょう。毒回復はともかく、麻痺回復はその後の回復行動に影響を与えるため(以降の回復処理の詠唱者に復帰できる)、一番最初に実行され、毒回復と比べて若干処理が複雑になっています($092097-B7)。ここでは、他の行動不能の要素(死亡・般若の面装備中)があるかを調べて該当しない場合のみ、麻痺の回復とともに行動不能フラグをクリアしています。
- SR: $09214F 必要HP回復量取得(回復不要c=on)
09214F | STZ $2BB6 | $2BB6=#$00 | |
---|---|---|---|
092152 | LDY $2BB4 | Y=$2BB4 | |
092155 | DEY | Y– | |
092156 | DEY | Y– | |
092157 | BMI #$4A | if(n==on) goto $0921A3 | |
092159 | LDA #$0800 | A=#$0800 | |
09215C | EOR #$FFFF | A^=#$FFFF | |
09215F | AND $2BE8,Y | A&=$2BE8+Y | HP要回復フラグを一度クリア |
092162 | STA $2BE8,Y | $2BE8+Y=A | |
092165 | AND #$4000 | A&=#$4000 | 死亡フラグがONなら対象外 |
092168 | BNE #$EB | if(z==off) goto $092155 | |
09216A | TYA | A=Y | |
09216B | LSR | A>>1 | |
09216C | PHA | Push A | |
09216D | JSL $C43041 | SR: $043041 引数:1#$01 引数:2#$FF 引数:3#$70 | 最大HP取得 |
092174 | LDA #$0100 | A=#$0100 | |
092177 | LDX #$0070 | X=#$0070 | |
09217A | JSL $C01146 | SR: $001146 | DP($00+X)=A(1Byte)*DP($00+X) |
09217E | PLA | Pull A | |
09217F | JSL $C43115 | SR: $043115 引数:1#$01 引数:2#$FF 引数:3#$FF | 現在HP取得 |
092186 | CMP $71 | A>=DP($71)? | |
092188 | BCS #$CB | if(c==on) goto $092155 | |
09218A | PHA | Push A | |
09218B | LDA $71 | A=DP($71) | |
09218D | SEC | c=on | |
09218E | SBC $01,S | A-=(Stack($01)+!c) | 必要HP回復量を取得 |
092190 | STA $2BCE,Y | $2BCE+Y=A | |
092193 | PLA | Pull A | |
092194 | LDA #$0800 | A=#$0800 | HP要回復フラグをON |
092197 | ORA $2BE8,Y | Aor=$2BE8+Y | |
09219A | STA $2BE8,Y | $2BE8+Y=A | |
09219D | INC $2BB6 | $2BB6++ | HP要回復 |
0921A0 | JMP $2155 ($092155) | goto $092155 | |
0921A3 | LDA $2BB6 | A=$2BB6 | |
0921A6 | BEQ #$02 | if(z==on) goto $0921AA | |
0921A8 | CLC | c=off | |
0921A9 | RTS | return | |
0921AA | SEC | c=on | 誰もHP回復する必要なし |
0921AB | RTS | return |
この処理はHPを回復する必要があるかを調べています。$09216D-8Fのあたりはなぜ1バイトずらす必要があるのか意味不明ですが(単に比較してzを見ればいいと思う)、最大HPと現在HPを比較して同じでなければ回復の必要ありと判断して最大HPから現在HPを引いた数を回復必要HPとしてメモリにセットしています。
コメント