Add variable ganon vulnerability mode
This commit is contained in:
126
special_weapons.asm
Normal file
126
special_weapons.asm
Normal file
@@ -0,0 +1,126 @@
|
||||
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
|
||||
;--------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user