前回からの続きです。
- 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としてメモリにセットしています。


コメント