- SR: $02913E PC側耐性計算
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側の誰かに同じだけ肩代わりさせます。
- SR: $02BBD5 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 |
- SR: $02919B 防御時のダメージ軽減計算
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 |
- SR: $0291A8 耐性によるダメージ調整
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)。
コメント