| 02913E |
LDA $23E8 |
A=$7E23E8 |
|
| 029141 |
STA $2428 |
$7E2428=A |
|
| 029144 |
JSL $02BE8A |
SR: $02BE8A 引数:1#$22 |
行動対象の敵味方判定(c=onなら敵) |
| 029149 |
BCS #$2D |
if(c==on) goto $029178 |
|
| 02914B |
TAY |
Y=A |
|
| 02914C |
LDA $23EE |
A=$7E23EE |
戦闘行動をセット |
| 02914F |
STA $242A |
$7E242A=A |
|
| 029152 |
LDA $00 |
A=$000000 |
ダメージ値をAレジスタにセット |
| 029154 |
JSL $02BBD5 |
SR: $02BBD5 |
PC側ダメージ系耐性計算 |
| 029158 |
STA $00 |
$000000=A |
|
| 02915A |
LDA $23F2 |
A=$7E23F2 |
|
| 02915D |
BNE #$19 |
if(z==off) goto $029178 |
|
| 02915F |
LDX $08 |
X=$000008 |
|
| 029161 |
LDA $020079,X |
A=$020079+X |
|
| 029165 |
AND #$0008 |
A&=#$0008 |
戦闘行動がなげきのたてで転嫁できる行動か |
| 029168 |
BEQ #$0E |
if(z==on) goto $029178 |
|
| 02916A |
LDA #$0069 |
A=#$0069 |
なげきのたてのアイテムID |
| 02916D |
STA $242C |
$7E242C=A |
|
| 029170 |
JSL $02B87A |
SR: $02B87A |
アイテム装備チェック |
| 029174 |
BVC #$02 |
if(v==off) goto $029178 |
|
| 029176 |
LSR $00 |
$000000>>1 |
なげきのたてのダメージ値 他のPCに転嫁するため1/2する |
| 029178 |
RTS |
return |
|
なげきのたて装備時にはダメージを半減させ、追加処理でPC側の誰かに同じだけ肩代わりさせます。
| 02BBD5 |
PHP |
Push P Flag |
|
| 02BBD6 |
PHB |
Push DB |
|
| 02BBD7 |
REP #$30 |
m=off(A/M:16b), x=off(X/Y:16b) |
|
| 02BBD9 |
PEA $7E7E |
Push $7E7E |
|
| 02BBDC |
PLB |
Pull DB |
|
| 02BBDD |
PLB |
Pull DB |
|
| 02BBDE |
PHX |
Push X |
|
| 02BBDF |
PHY |
Push Y |
|
| 02BBE0 |
STA $2474 |
$7E2474=A |
|
| 02BBE3 |
LDA #$0000 |
A=#$0000 |
ダメージ系耐性フラグ |
| 02BBE6 |
STA $2476 |
$7E2476=A |
|
| 02BBE9 |
JSR $BBF4 |
SR: $02BBF4 |
PC側耐性計算メイン |
| 02BBEC |
LDA $2474 |
A=$7E2474 |
|
| 02BBEF |
PLY |
Pull Y |
|
| 02BBF0 |
PLX |
Pull X |
|
| 02BBF1 |
PLB |
Pull DB |
|
| 02BBF2 |
PLP |
Pull P Flag |
|
| 02BBF3 |
RTL |
return |
|
耐性値によるダメージ減算処理については以前解説したのでここでは省略します。タグ「耐性変更」で見てください。
- SR: $029179 フバーハ時のダメージ軽減計算
| 029179 |
LDX $08 |
X=$000008 |
|
| 02917B |
LDA $020079,X |
A=$020079+X |
|
| 02917F |
AND #$0001 |
A&=#$0001 |
戦闘行動がフバーハに影響されるか |
| 029182 |
BEQ #$16 |
if(z==on) goto $02919A |
|
| 029184 |
LDX $0A |
X=$00000A |
|
| 029186 |
LDA $2051,X |
A=$7E2051+X |
|
| 029189 |
AND #$0020 |
A&=#$0020 |
行動対象がフバーハ中 |
| 02918C |
BEQ #$0C |
if(z==on) goto $02919A |
|
| 02918E |
ASL $00 |
$000000<<1 |
|
| 029190 |
LDX #$0000 |
X=#$0000 |
|
| 029193 |
LDA #$0003 |
A=#$0003 |
|
| 029196 |
JSL $00121C |
SR: $00121C |
$00,X(2B)=$00,X(2B)/A(1B) 剰余=A |
ダメージ値を2/3にする |
| 02919A |
RTS |
return |
|
| 02919B |
LDX $0A |
X=DP($0A) |
|
| 02919D |
LDA $2050,X |
A=$2050+X |
|
| 0291A0 |
AND #$0080 |
A&=#$0080 |
行動対象が防御中 |
| 0291A3 |
BEQ #$02 |
if(z==on) goto $0291A7 |
|
| 0291A5 |
LSR $00 |
DP($00)>>1 |
ダメージ値を1/2 |
| 0291A7 |
RTS |
return |
|
| 0291A8 |
LDA $23EE |
A=$23EE |
|
| 0291AB |
CMP #$001A |
A==#$001A? |
戦闘行動がメガンテなら調整しない |
| 0291AE |
BEQ #$2A |
if(z==on) goto $0291DA |
|
| 0291B0 |
CMP #$0003 |
A==#$0003? |
戦闘行動が眠り攻撃なら調整しない |
| 0291B3 |
BEQ #$25 |
if(z==on) goto $0291DAなら調整しない |
|
| 0291B5 |
CMP #$0004 |
A==#$0004? |
戦闘行動が毒攻撃か |
| 0291B8 |
BEQ #$20 |
if(z==on) goto $0291DAなら調整しない |
|
| 0291BA |
CMP #$0005 |
A==#$0005? |
戦闘行動が麻痺攻撃かなら調整しない |
| 0291BD |
BEQ #$1B |
if(z==on) goto $0291DA |
|
| 0291BF |
CMP #$00AA |
A==#$00AA? |
戦闘行動がドラゴラムの炎なら固定の耐性計算をする |
| 0291C2 |
BEQ #$17 |
if(z==on) goto $0291DB |
|
| 0291C4 |
CMP #$0085 |
A==#$0085? |
戦闘行動が聖水なら固定の耐性計算をする |
| 0291C7 |
BEQ #$12 |
if(z==on) goto $0291DB |
|
| 0291C9 |
CMP #$00CE |
A==#$00CE? |
戦闘行動が王様ごっこなら調整しない |
| 0291CC |
BEQ #$0C |
if(z==on) goto $0291DA |
|
| 0291CE |
CMP #$00CF |
A==#$00CF? |
戦闘行動が女王様ごっこなら調整しない |
| 0291D1 |
BEQ #$07 |
if(z==on) goto $0291DA |
|
| 0291D3 |
JSR $A3EB |
SR: $02A3EB |
耐性を考慮して成否判定+PC側確率系耐性計算? |
| 0291D6 |
BCS #$02 |
if(c==on) goto $0291DA |
|
| 0291D8 |
STZ $00 |
DP($00)=#$00 |
|
| 0291DA |
RTS |
return |
|
| 0291DB |
JSR $A3CE |
SR: $02A3CE |
確率に依存しない耐性計算? |
| 0291DE |
RTS |
return |
|
- SR: $0291DF 毒針装備時の一撃必殺失敗(1ダメージ)
| 0291DF |
LDA $23F2 |
A=$23F2 |
|
| 0291E2 |
BNE #$1B |
if(z==off) goto $0291FF |
|
| 0291E4 |
LDX $08 |
X=DP($08) |
|
| 0291E6 |
LDA $02007A,X |
A=$02007A+X |
|
| 0291EA |
AND #$0020 |
A&=#$0020 |
毒針装備時に1ダメージが発生する戦闘行動か |
| 0291ED |
BEQ #$10 |
if(z==on) goto $0291FF |
|
| 0291EF |
LDA $245C |
A=$245C |
? |
| 0291F2 |
AND #$00FF |
A&=#$00FF |
|
| 0291F5 |
CMP #$0009 |
A==#$0009? |
|
| 0291F8 |
BNE #$05 |
if(z==off) goto $0291FF |
|
| 0291FA |
LDA #$0001 |
A=#$0001 |
ダメージ1を設定 |
| 0291FD |
STA $00 |
DP($00)=A |
|
| 0291FF |
RTS |
return |
|
このSRを抜けると最終的なダメージが確定するので、確定したダメージ値を使って後処理を行います。
- SR: $029200 ダメージ確定後の処理メイン
| 029200 |
PHP |
Push P Flag |
|
| 029201 |
REP #$30 |
m=off(A/M:16b), x=off(X/Y:16b) |
|
| 029203 |
PHA |
Push A |
|
| 029204 |
PHX |
Push X |
|
| 029205 |
PHY |
Push Y |
|
| 029206 |
PHB |
Push DB |
|
| 029207 |
PEA $7E7E |
Push $7E7E |
|
| 02920A |
PLB |
Pull DB |
|
| 02920B |
PLB |
Pull DB |
|
| 02920C |
LDA $23E8 |
A=$23E8 |
|
| 02920F |
STA $2428 |
$2428=A |
|
| 029212 |
STZ $BE83 |
$7EBE83=#$00 |
ダメージ用バッファ上2バイト初期化 |
| 029215 |
LDA $23FA |
A=$7E23FA |
|
| 029218 |
STA $BE81 |
$7EBE81=A |
ダメージ用バッファにダメージ値をセット |
| 02921B |
BNE #$0C |
if(z==off) goto $029229 |
|
| 02921D |
JSR $92CE |
SR: $0292CE |
ダメージ0時メッセージ表示 |
| 029220 |
PLB |
Pull DB |
|
| 029221 |
REP #$30 |
m=off(A/M:16b), x=off(X/Y:16b) |
|
| 029223 |
PLY |
Pull Y |
|
| 029224 |
PLX |
Pull X |
|
| 029225 |
PLA |
Pull A |
|
| 029226 |
PLP |
Pull P Flag |
|
| 029227 |
CLC |
c=off |
|
| 029228 |
RTL |
return |
|
| 029229 |
JSR $9312 |
SR: $029312 |
ダメージ発生時エフェクト処理? |
| 02922C |
LDA $23FA |
A=$23FA |
|
| 02922F |
STA $00 |
DP($00)=A |
|
| 029231 |
JSL $02BE8A |
SR: $02BE8A 引数:1#$06 |
HP減算処理 |
| 029236 |
PHP |
Push P Flag |
|
| 029237 |
JSR $925C |
SR: $02925C |
ダメージメッセージ表示 |
| 02923A |
JSR $927B |
SR: $02927B |
|
| 02923D |
JSL $02B977 |
SR: $02B977 |
パーティウィンドウ再描画? |
| 029241 |
JSL $031394 |
SR: $031394 |
|
| 029245 |
PLP |
Pull P Flag |
|
| 029246 |
BCC #$0B |
if(c==off) goto $029253 |
|
| 029248 |
JSL $02CFCE |
SR: $02CFCE |
消滅処理? |
| 02924C |
JSR $92AC |
SR: $0292AC |
HP0時メッセージ表示 |
| 02924F |
JSL $02B054 |
SR: $02B054 |
行動対象者を戦闘から離脱させる処理メイン |
| 029253 |
PLB |
Pull DB |
|
| 029254 |
REP #$30 |
m=off(A/M:16b), x=off(X/Y:16b) |
|
| 029256 |
PLY |
Pull Y |
|
| 029257 |
PLX |
Pull X |
|
| 029258 |
PLA |
Pull A |
|
| 029259 |
PLP |
Pull P Flag |
|
| 02925A |
SEC |
c=on |
|
| 02925B |
RTL |
return |
|
ダメージが発生する戦闘行動はこのSRを呼ぶ必要があります(逆に言うとダメージ確定してこのSRを呼ぶだけでOK)。
コメント