- 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)。

  
  
  
  

コメント