Bee Mode
This commit is contained in:
19
hooks.asm
19
hooks.asm
@@ -2829,6 +2829,22 @@ db $B2, $28, $B3, $28, $C2, $28, $C2, $68
|
|||||||
org $079CE6 ; Bank07.asm@4632 (LDA #$80 : TSB $3A)
|
org $079CE6 ; Bank07.asm@4632 (LDA #$80 : TSB $3A)
|
||||||
JSL CheckDetonateBomb
|
JSL CheckDetonateBomb
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
org $1EDCF8 ; bank_1E.asm@16086 (LDX $0202 : ...)
|
||||||
|
JSL SetBeeType
|
||||||
|
BRA + : NOP #15 : +
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
org $1EB5E8 ; bank_1E.asm@9387 (LDA #$03 : STA $0D80, X)
|
||||||
|
JSL ArrghusBoing
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
org $1EDFAF ; bank_1E.asm@16607 (.next_sprite)
|
||||||
|
JSL BeeCheckTarget
|
||||||
|
BCS .bee_valid_target
|
||||||
|
BRA .bee_unsuitable_target
|
||||||
|
NOP #48
|
||||||
|
.bee_unsuitable_target
|
||||||
|
skip 11
|
||||||
|
.bee_valid_target
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
; Variable Ganon Vulnerability
|
; Variable Ganon Vulnerability
|
||||||
@@ -2845,8 +2861,9 @@ org $0DD628 ; Bank0D.asm@1266 (LDA $0B6B, Y : AND #$02)
|
|||||||
JSL CheckBeeBoss
|
JSL CheckBeeBoss
|
||||||
NOP
|
NOP
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $0DD677 ; Bank0D.asm@1303 (JSL Ancilla_CheckSpriteDamage.preset_class)
|
org $0DD676 ; Bank0D.asm@1303 (TYX : JSL Ancilla_CheckSpriteDamage.preset_class)
|
||||||
JSL Ganon_CheckBeeVulnerability
|
JSL Ganon_CheckBeeVulnerability
|
||||||
|
NOP
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ DamageClassCalc:
|
|||||||
JSL Ganon_CheckAncillaVulnerability
|
JSL Ganon_CheckAncillaVulnerability
|
||||||
RTL
|
RTL
|
||||||
+
|
+
|
||||||
|
LDA SpecialWeapons : CMP #$06 : BEQ .cane_immune ; only crystal switches in bee mode
|
||||||
PLA
|
PLA
|
||||||
CMP #$01 : BEQ .red_cane
|
CMP #$01 : BEQ .red_cane
|
||||||
CMP #$2C : BEQ .red_cane
|
CMP #$2C : BEQ .red_cane
|
||||||
@@ -279,9 +280,13 @@ Utility_CheckImpervious:
|
|||||||
CMP #$03 : BEQ +
|
CMP #$03 : BEQ +
|
||||||
CMP #$04 : BEQ +
|
CMP #$04 : BEQ +
|
||||||
CMP #$05 : BEQ +
|
CMP #$05 : BEQ +
|
||||||
|
CMP #$06 : BEQ .check_sidenexx
|
||||||
BRA .normal
|
BRA .normal
|
||||||
+
|
+
|
||||||
LDA $0301 : AND.b #$0A : BNE .impervious ; impervious to hammer
|
LDA $0301 : AND.b #$0A : BNE .impervious ; impervious to hammer
|
||||||
|
.check_sidenexx
|
||||||
|
LDA.w $0DD1 : ORA.w $0DD2 : BNE .impervious ; at least one sidenexx alive
|
||||||
|
LDA.w $0D80, X : CMP.b #$02 : BCS .impervious ; at least one sidenexx alive
|
||||||
BRA .not_impervious
|
BRA .not_impervious
|
||||||
.normal
|
.normal
|
||||||
LDA $0E60, X : AND.b #$40 : BNE .impervious
|
LDA $0E60, X : AND.b #$40 : BNE .impervious
|
||||||
@@ -331,6 +336,7 @@ AllowBombingMoldorm:
|
|||||||
CMP #$03 : BEQ .no_disable_projectiles
|
CMP #$03 : BEQ .no_disable_projectiles
|
||||||
CMP #$04 : BEQ .no_disable_projectiles
|
CMP #$04 : BEQ .no_disable_projectiles
|
||||||
CMP #$05 : BEQ .no_disable_projectiles
|
CMP #$05 : BEQ .no_disable_projectiles
|
||||||
|
CMP #$06 : BEQ .no_disable_projectiles
|
||||||
INC $0BA0, X
|
INC $0BA0, X
|
||||||
.no_disable_projectiles
|
.no_disable_projectiles
|
||||||
JSL !SPRITE_INITIALIZED_SEGMENTED
|
JSL !SPRITE_INITIALIZED_SEGMENTED
|
||||||
@@ -344,6 +350,7 @@ AllowBombingBarrier:
|
|||||||
CMP #$03 : BEQ .no_disable_projectiles
|
CMP #$03 : BEQ .no_disable_projectiles
|
||||||
CMP #$04 : BEQ .no_disable_projectiles
|
CMP #$04 : BEQ .no_disable_projectiles
|
||||||
CMP #$05 : BEQ .no_disable_projectiles
|
CMP #$05 : BEQ .no_disable_projectiles
|
||||||
|
CMP #$06 : BEQ .no_disable_projectiles
|
||||||
.disable_projectiles
|
.disable_projectiles
|
||||||
INC $0BA0, X
|
INC $0BA0, X
|
||||||
.no_disable_projectiles
|
.no_disable_projectiles
|
||||||
@@ -432,6 +439,12 @@ StoreSwordDamage:
|
|||||||
LDA #$05
|
LDA #$05
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
BeeDamageClass:
|
||||||
|
db $FF
|
||||||
|
db $06, $00, $07, $08, $0A
|
||||||
|
db $0B, $0C, $0D, $0E, $0F
|
||||||
|
db $FF, $03, $FF, $FF, $FF
|
||||||
|
db $FF, $01, $01, $FF, $FF
|
||||||
CheckDetonateBomb:
|
CheckDetonateBomb:
|
||||||
LDA.l SpecialWeapons : CMP.b #$01 : BNE .not_bomb_mode
|
LDA.l SpecialWeapons : CMP.b #$01 : BNE .not_bomb_mode
|
||||||
.detonate_bombs
|
.detonate_bombs
|
||||||
@@ -445,9 +458,130 @@ CheckDetonateBomb:
|
|||||||
.next_ancilla
|
.next_ancilla
|
||||||
DEX
|
DEX
|
||||||
BPL .check_ancilla
|
BPL .check_ancilla
|
||||||
|
BRA .done
|
||||||
.not_bomb_mode
|
.not_bomb_mode
|
||||||
|
LDA.l SpecialWeapons : CMP.b #$06 : BNE .done
|
||||||
|
LDX.w $0202
|
||||||
|
LDA.l BeeDamageClass, X : CMP.b #$FF : BEQ .nope
|
||||||
|
JSL $1EDCC9
|
||||||
|
BMI .nope
|
||||||
|
LDX.w $0202
|
||||||
|
LDA.l BeeDamageClass, X
|
||||||
|
CMP.b #$06 : BNE .set_bee_class
|
||||||
|
LDA.l $7EF340 : CMP.b #$03 : !BGE .silver_arrows
|
||||||
|
LDA.b #$06
|
||||||
|
BRA .set_bee_class
|
||||||
|
.silver_arrows
|
||||||
|
LDA.b #$09
|
||||||
|
.set_bee_class
|
||||||
|
STA.w $0ED0, Y
|
||||||
|
BRA .done
|
||||||
|
.nope
|
||||||
|
LDA.b #$3C
|
||||||
|
STA.w $0CF8
|
||||||
|
JSL $0DBB67
|
||||||
|
ORA.w $0CF8
|
||||||
|
STA.w $012E
|
||||||
|
.done
|
||||||
; what we wrote over
|
; what we wrote over
|
||||||
LDA.b #$80
|
LDA.b #$80
|
||||||
TSB.b $3A
|
TSB.b $3A
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
SetBeeType:
|
||||||
|
LDA.l SpecialWeapons : CMP.b #$06 : BEQ .bee_mode
|
||||||
|
LDX.w $0202
|
||||||
|
.check_bee_type
|
||||||
|
LDA.l $7EF33F, X
|
||||||
|
TAX
|
||||||
|
LDA.l $7EF35B, X
|
||||||
|
CMP.b #$08
|
||||||
|
BNE .regular_bee
|
||||||
|
LDA.b #$01
|
||||||
|
STA.w $0EB0, Y
|
||||||
|
.regular_bee
|
||||||
|
LDA.b #$01
|
||||||
|
STA.w $0ED0, Y
|
||||||
|
RTL
|
||||||
|
.bee_mode
|
||||||
|
LDX.w $0202
|
||||||
|
CPX.b #$10 : BEQ .check_bee_type
|
||||||
|
BRA .regular_bee
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
ArrghusBoing:
|
||||||
|
LDA.l SpecialWeapons : CMP.b #$06 : BNE .done
|
||||||
|
LDA.w $0F60, X : AND.b #$BF : STA.w $0F60, X
|
||||||
|
.done
|
||||||
|
; what we wrote over
|
||||||
|
LDA.b #$03
|
||||||
|
STA.w $0D80, X
|
||||||
|
RTL
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
BeeCheckTarget:
|
||||||
|
CPY.w $0FA0
|
||||||
|
BEQ .unsuitable_target
|
||||||
|
|
||||||
|
LDA.w $0DD0,Y
|
||||||
|
CMP.b #$09
|
||||||
|
BCC .unsuitable_target
|
||||||
|
|
||||||
|
LDA.w $0F00,Y
|
||||||
|
BNE .unsuitable_target
|
||||||
|
|
||||||
|
; in bee-mode skip targets that the bee can't hurt
|
||||||
|
LDA.l SpecialWeapons : CMP.b #$06 : BNE +
|
||||||
|
JSR BeeCheckDamage
|
||||||
|
CMP.b #$00 : BEQ .unsuitable_target
|
||||||
|
+
|
||||||
|
|
||||||
|
LDA.w $0E40,Y
|
||||||
|
BMI .potential_target
|
||||||
|
|
||||||
|
LDA.w $0F20,Y
|
||||||
|
CMP.w $0F20,X
|
||||||
|
BNE .unsuitable_target
|
||||||
|
|
||||||
|
LDA.w $0F60,Y
|
||||||
|
AND.b #$40
|
||||||
|
BEQ +
|
||||||
|
LDA.l SpecialWeapons : CMP.b #$06 : BNE .unsuitable_target
|
||||||
|
; in bee mode, allow targetting anti-fairies, bunny beams, and keese
|
||||||
|
LDA.w $0E20,Y
|
||||||
|
CMP.b #$15 : BEQ + ; anti-fairy
|
||||||
|
CMP.b #$6F : BEQ + ; keese
|
||||||
|
CMP.b #$D1 : BEQ + ; bunny beam
|
||||||
|
BRA .unsuitable_target
|
||||||
|
+
|
||||||
|
|
||||||
|
LDA.w $0BA0,Y
|
||||||
|
BEQ .valid_target
|
||||||
|
BRA .unsuitable_target
|
||||||
|
|
||||||
|
.potential_target
|
||||||
|
LDA.w $0EB0,X
|
||||||
|
BEQ .unsuitable_target
|
||||||
|
|
||||||
|
LDA.w $0CD2,Y
|
||||||
|
AND.b #$40
|
||||||
|
BNE .valid_target
|
||||||
|
|
||||||
|
.unsuitable_target
|
||||||
|
CLC : RTL
|
||||||
|
|
||||||
|
.valid_target
|
||||||
|
SEC : RTL
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
BeeCheckDamage:
|
||||||
|
PHX : PHP
|
||||||
|
REP #$20
|
||||||
|
LDA.w $0E20,Y : AND.w #$00FF
|
||||||
|
ASL #4
|
||||||
|
SEP #$20
|
||||||
|
ORA.w $0ED0,X
|
||||||
|
REP #$30
|
||||||
|
TAX
|
||||||
|
SEP #$20
|
||||||
|
JSL LookupDamageLevel
|
||||||
|
SEP #$10
|
||||||
|
PLP : PLX
|
||||||
|
RTS
|
||||||
|
|||||||
@@ -128,17 +128,18 @@ LoadModifiedIceFloorValue_a01:
|
|||||||
;================================================================================
|
;================================================================================
|
||||||
CheckTabletSword:
|
CheckTabletSword:
|
||||||
LDA.l AllowHammerTablets : BEQ +
|
LDA.l AllowHammerTablets : BEQ +
|
||||||
LDA $7EF34B : BEQ + ; check for hammer
|
LDA $7EF34B : BNE .allow ; check for hammer
|
||||||
LDA.b #$02 : RTL
|
|
||||||
+
|
+
|
||||||
LDA.l SpecialWeapons : CMP #$01 : BEQ .check_special
|
LDA.l SpecialWeapons : CMP #$01 : BEQ .check_special
|
||||||
CMP #$03 : BEQ .check_special
|
CMP #$03 : BEQ .check_special
|
||||||
CMP #$04 : BEQ .check_special
|
CMP #$04 : BEQ .check_special
|
||||||
CMP #$05 : BEQ .check_special
|
CMP #$05 : BEQ .check_special
|
||||||
|
CMP #$06 : BEQ .allow
|
||||||
BRA .normal
|
BRA .normal
|
||||||
.check_special
|
.allow
|
||||||
LDA !WEAPON_LEVEL : CMP #$02 : !BLT + ; check for master bombs
|
|
||||||
LDA.b #$02 : RTL
|
LDA.b #$02 : RTL
|
||||||
|
.check_special
|
||||||
|
LDA !WEAPON_LEVEL : CMP #$02 : !BGE .allow ; check for master bombs
|
||||||
.normal
|
.normal
|
||||||
LDA $7EF359 ; get actual sword value
|
LDA $7EF359 ; get actual sword value
|
||||||
RTL
|
RTL
|
||||||
|
|||||||
@@ -112,7 +112,14 @@ db #$00 ; #$00 = Default behavior (silver arrows)
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $30802F ; PC 0x18003F
|
org $30802F ; PC 0x18003F
|
||||||
SpecialWeapons:
|
SpecialWeapons:
|
||||||
db #$00 ; #$00 = Off (default) - #$01 = Bomb-Only mode - #$02 = Pseudosword mode - #$03 = Byrna-Only mode - #$04 = Somaria-Only mode - #$05 = Canes-Only mode
|
db #$00
|
||||||
|
; $00 = Off (default)
|
||||||
|
; $01 = Bomb-Only mode
|
||||||
|
; $02 = Pseudosword
|
||||||
|
; $03 = Byrna-Only mode
|
||||||
|
; $04 = Somaria-Only mode
|
||||||
|
; $05 = Canes-Only mode
|
||||||
|
; $06 = Bee mode
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $308030 ; PC 0x180030
|
org $308030 ; PC 0x180030
|
||||||
EnableSRAMTrace:
|
EnableSRAMTrace:
|
||||||
|
|||||||
@@ -68,17 +68,24 @@ Ganon_CheckPowderVulnerability: ; we know it's powder
|
|||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
Ganon_CheckBeeVulnerability: ; we know it's a bee
|
Ganon_CheckBeeVulnerability: ; we know it's a bee
|
||||||
|
; X is bee sprite index
|
||||||
|
; Y is target sprite index
|
||||||
LDA.l GanonVulnerabilityItem : CMP #$10 : BNE .normal ; ganon not vulnerable to bee
|
LDA.l GanonVulnerabilityItem : CMP #$10 : BNE .normal ; ganon not vulnerable to bee
|
||||||
LDA $0E20, X : CMP #$D7 : BNE .normal ; not stunned ganon
|
LDA $0E20, Y : CMP #$D7 : BNE .normal ; not stunned ganon
|
||||||
LDA $0EE0, X : BNE .normal ; ganon has iframes
|
LDA $0EE0, Y : BNE .normal ; ganon has iframes
|
||||||
LDA.l Ganon_IFrameDuration+$10
|
LDA.l Ganon_IFrameDuration+$10
|
||||||
STA $0EE0, X ; give the poor pig some iframes
|
STA $0EE0, Y ; give the poor pig some iframes
|
||||||
LDA #$20 : STA $0F10, X
|
LDA #$20 : STA $0F10, Y
|
||||||
LDA #$09
|
LDA #$09
|
||||||
BRA .done
|
BRA .done
|
||||||
.normal
|
.normal
|
||||||
|
LDA.l SpecialWeapons : CMP.b #$06 : BNE .regular_bee
|
||||||
|
LDA.w $0ED0, X
|
||||||
|
BRA .done
|
||||||
|
.regular_bee
|
||||||
LDA.b #$01
|
LDA.b #$01
|
||||||
.done
|
.done
|
||||||
|
TYX
|
||||||
JSL.l !ANCILLA_CHECK_SPRITE_DAMAGE_PRESET_CLASS
|
JSL.l !ANCILLA_CHECK_SPRITE_DAMAGE_PRESET_CLASS
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -108,6 +115,9 @@ Ganon_CheckHammerVulnerability: ; we know it's hammer
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
CheckBeeBoss:
|
CheckBeeBoss:
|
||||||
; Y is sprite index
|
; Y is sprite index
|
||||||
|
LDA.l SpecialWeapons : CMP #$06 : BNE .not_bee_mode
|
||||||
|
LDA #$00 : RTL
|
||||||
|
.not_bee_mode
|
||||||
LDA.l GanonVulnerabilityItem : CMP #$10 : BNE .normal ; ganon not vulnerable to bee
|
LDA.l GanonVulnerabilityItem : CMP #$10 : BNE .normal ; ganon not vulnerable to bee
|
||||||
LDA $0E20, Y : CMP #$D7 : BNE .normal ; not stunned ganon
|
LDA $0E20, Y : CMP #$D7 : BNE .normal ; not stunned ganon
|
||||||
LDA #$00 : RTL
|
LDA #$00 : RTL
|
||||||
|
|||||||
Reference in New Issue
Block a user