127 lines
2.9 KiB
NASM
127 lines
2.9 KiB
NASM
DamageClassCalc:
|
|
PHA
|
|
LDA.l GanonVulnerabilityItem : BEQ +
|
|
LDA.w SpriteTypeTable, X : CMP.b #$D7 : BNE +
|
|
PLA
|
|
JSL Ganon_CheckAncillaVulnerability
|
|
RTL
|
|
+
|
|
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$06 : BEQ .cane_immune
|
|
PLA
|
|
CMP.b #$01 : BEQ .red_cane
|
|
CMP.b #$2C : BEQ .red_cane
|
|
CMP.b #$31 : BEQ .blue_cane
|
|
CMP.b #$0C : BEQ .beam
|
|
BRA .not_cane_or_beam
|
|
|
|
.red_cane
|
|
PHA
|
|
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$04 : BEQ .special_cane
|
|
CMP.b #$05 : BEQ .special_cane
|
|
LDA.l SpecialWeapons : BIT.b #$80 : BNE .cane_immune
|
|
BRA .normal
|
|
|
|
.blue_cane
|
|
PHA
|
|
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$03 : BEQ .special_cane
|
|
CMP.b #$05 : BEQ .special_cane
|
|
LDA.l SpecialWeapons : BIT.b #$80 : BNE .cane_immune
|
|
BRA .normal
|
|
|
|
.cane_immune
|
|
LDA.w SpriteTypeTable, X : CMP.b #$1E : BEQ .normal ; crystal switch
|
|
PLA
|
|
BRA .impervious
|
|
|
|
.special_cane
|
|
PLA
|
|
LDA.w SpriteTypeTable, X : CMP.b #$D6 : BEQ .unstunned_ganon
|
|
CMP.b #$88 : BEQ .mothula
|
|
BRA .special_level
|
|
|
|
.impervious
|
|
LDA.b #$FF
|
|
RTL
|
|
|
|
.beam
|
|
PHA
|
|
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$02 : BNE .normal
|
|
PLA
|
|
LDA.b #$05
|
|
RTL
|
|
|
|
.normal
|
|
PLA
|
|
|
|
.not_cane_or_beam
|
|
CMP.b #$07 : BNE .no_change
|
|
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE .normal_bombs
|
|
LDA.l SpecialWeaponLevel : BEQ .normal_bombs
|
|
LDA.w SpriteTypeTable, X : CMP.b #$D6 : BEQ .unstunned_ganon
|
|
CMP.b #$88 : BEQ .mothula
|
|
CMP.b #$91 : BEQ .stalfos_knight
|
|
CMP.b #$92 : BEQ .helmasaur_king
|
|
|
|
.special_level
|
|
LDA.l SpecialWeaponLevel
|
|
BRA .done
|
|
|
|
.mothula
|
|
LDA.l SpecialWeaponLevel
|
|
CMP.b #$04 : BCS .fix_mothula
|
|
BRA .done
|
|
|
|
.fix_mothula
|
|
LDA.b #$03
|
|
BRA .done
|
|
|
|
.stalfos_knight
|
|
LDA.l StalfosBombDamage : BEQ .special_level
|
|
LDA.b #$08
|
|
BRA .done
|
|
|
|
.helmasaur_king
|
|
LDA.w $0DB0, X : CMP.b #$03 : BCS .special_level
|
|
LDA.b #$08
|
|
BRA .done
|
|
|
|
.unstunned_ganon
|
|
LDA.w $04C5 : CMP.b #$02 : BNE .impervious
|
|
LDA.w $0EE0, X : BNE .impervious
|
|
LDA.b #$34 : STA.w $0EE0, X ; give the poor pig some i-frames
|
|
BRA .special_level
|
|
|
|
.normal_bombs
|
|
LDA.b #$07
|
|
|
|
.no_change
|
|
PHX : TAX
|
|
LDA.l $86EC84, X
|
|
PLX
|
|
CMP.b #$06 : BNE .done
|
|
LDA.l BowEquipment : CMP.b #$03 : BCS .actual_silver_arrows
|
|
|
|
.normal_arrows
|
|
LDA.b #$06
|
|
|
|
.done
|
|
RTL
|
|
|
|
.actual_silver_arrows
|
|
LDA.w SpriteTypeTable, X : CMP.b #$D7 : BNE +
|
|
LDA.b #$20 : STA.w SpriteTimerE, X
|
|
+ LDA.b #$09
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
Utility_CheckImpervious:
|
|
LDA.w SpriteControl, X : AND.b #$40 : BNE .impervious
|
|
LDA.w $0CF2 : CMP.b #$FF : BEQ .impervious
|
|
LDA.w UseY1 : AND.b #$0A : BEQ .not_impervious ; normal behavior if not hammering
|
|
JSL Ganon_CheckHammerVulnerability : BCS .not_impervious
|
|
|
|
.not_impervious
|
|
LDA.b #$00 : RTL
|
|
.impervious
|
|
LDA.b #$01 : RTL
|
|
;--------------------------------------------------------------------------------
|