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

前回からの続きです。

  • SR: $09204D キアリク詠唱
09204DLDY #$0000Y=#$0000
092050LDA $2BE8,YA=$2BE8+Y
092053AND #$2000A&=#$2000麻痺していなければスキップ
092056BEQ #$62if(z==on) goto $0920BA
092058TYAA=Y
092059LSRA>>1
09205ASTA $7ADP($7A)=A
09205CSTA $BE7F$BE7F=A
09205FLDX $2BB4X=$2BB4詠唱可能者をパーティの後ろから探す
092062DEXX–
092063DEXX–
092064BMI #$54if(n==on) goto $0920BA
092066LDA $2BE8,XA=$2BE8+X
092069BMI #$F7if(n==on) goto $092062行動不能フラグが立っていたらスキップ
09206BAND #$0001A&=#$0001キアリクを覚えていなければスキップ
09206EBEQ #$F2if(z==on) goto $092062
092070TXAA=X
092071LSRA>>1
092072STA $78DP($78)=A
092074STA $BE7D$BE7D=A
092077LDA #$0047A=#$0047
09207AJSR $20C5SR: $0920C5消費MP計算+減
09207DBCC #$E3if(c==off) goto $092062
09207FJSL $C44129SR: $044129 引数:1#$01 引数:2#$7A麻痺回復
092085JSL $C1E32ESR: $01E32E 引数:1#$0065再生BGM設定?
09208BJSL $C1A8D4SR: $01A8D4 引数:1#$0002メッセージ表示
092091JSL $C1A8D4SR: $01A8D4 引数:1#$001Fメッセージ表示
092097LDA #$4000A=#$4000
09209AORA #$0400Aor=#$0400死亡・般若装備中か調べる
09209DAND $2BE8,YA&=$2BE8+Y
0920A0BNE #$06if(z==off) goto $0920A8
0920A2LDA #$8000A=#$8000死亡・般若装備中でなければ行動不能フラグもOFFにする
0920A5JMP $20AB ($0920AB)goto $0920AB
0920A8LDA #$0000A=#$0000
0920ABORA #$2000Aor=#$2000麻痺フラグをOFF
0920AEEOR #$FFFFA^=#$FFFF
0920B1AND $2BE8,YA&=$2BE8+Y
0920B4STA $2BE8,Y$2BE8+Y=A
0920B7INC $2BBA$2BBA++
0920BAINYY++
0920BBINYY++
0920BCCPY $2BB4Y>=$2BB4?
0920BFBCS #$03if(c==on) goto $0920C4
0920C1JMP $2050 ($092050)goto $092050
0920C4RTSreturn
  • SR: $0920E4 キアリー詠唱 省略

見ての通り、という感じの処理ですが、オリジナルのまんたん処理は後ろにいるキャラクターから優先に呪文使用者を選択しています。パーティの後ろにいる=呪文職であるという前提に立っているからでしょう。毒回復はともかく、麻痺回復はその後の回復行動に影響を与えるため(以降の回復処理の詠唱者に復帰できる)、一番最初に実行され、毒回復と比べて若干処理が複雑になっています($092097-B7)。ここでは、他の行動不能の要素(死亡・般若の面装備中)があるかを調べて該当しない場合のみ、麻痺の回復とともに行動不能フラグをクリアしています。

  • SR: $09214F 必要HP回復量取得(回復不要c=on)
09214FSTZ $2BB6$2BB6=#$00
092152LDY $2BB4Y=$2BB4
092155DEYY–
092156DEYY–
092157BMI #$4Aif(n==on) goto $0921A3
092159LDA #$0800A=#$0800
09215CEOR #$FFFFA^=#$FFFF
09215FAND $2BE8,YA&=$2BE8+YHP要回復フラグを一度クリア
092162STA $2BE8,Y$2BE8+Y=A
092165AND #$4000A&=#$4000死亡フラグがONなら対象外
092168BNE #$EBif(z==off) goto $092155
09216ATYAA=Y
09216BLSRA>>1
09216CPHAPush A
09216DJSL $C43041SR: $043041 引数:1#$01 引数:2#$FF 引数:3#$70最大HP取得
092174LDA #$0100A=#$0100
092177LDX #$0070X=#$0070
09217AJSL $C01146SR: $001146DP($00+X)=A(1Byte)*DP($00+X)
09217EPLAPull A
09217FJSL $C43115SR: $043115 引数:1#$01 引数:2#$FF 引数:3#$FF現在HP取得
092186CMP $71A>=DP($71)?
092188BCS #$CBif(c==on) goto $092155
09218APHAPush A
09218BLDA $71A=DP($71)
09218DSECc=on
09218ESBC $01,SA-=(Stack($01)+!c)必要HP回復量を取得
092190STA $2BCE,Y$2BCE+Y=A
092193PLAPull A
092194LDA #$0800A=#$0800HP要回復フラグをON
092197ORA $2BE8,YAor=$2BE8+Y
09219ASTA $2BE8,Y$2BE8+Y=A
09219DINC $2BB6$2BB6++HP要回復
0921A0JMP $2155 ($092155)goto $092155
0921A3LDA $2BB6A=$2BB6
0921A6BEQ #$02if(z==on) goto $0921AA
0921A8CLCc=off
0921A9RTSreturn
0921AASECc=on誰もHP回復する必要なし
0921ABRTSreturn

この処理はHPを回復する必要があるかを調べています。$09216D-8Fのあたりはなぜ1バイトずらす必要があるのか意味不明ですが(単に比較してzを見ればいいと思う)、最大HPと現在HPを比較して同じでなければ回復の必要ありと判断して最大HPから現在HPを引いた数を回復必要HPとしてメモリにセットしています。

コメント

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