Moldorm stunnable with hookshot/boomerang; only damagable when stunned

This commit is contained in:
2023-03-17 11:16:29 -05:00
parent e2cc059401
commit 0aafee3eae
4 changed files with 82 additions and 16 deletions

Binary file not shown.

View File

@@ -2657,3 +2657,28 @@ org $079DAB
JSL SwordSwingDelay : NOP
org $079DEE
JSL SwordSwingDelay : NOP
org $088E4A
JSL MaybeRecoil
BRA + : NOP #6 : +
org $06EC4D
JSL MaybeRecoil2
BRA + : NOP #10 : +
; make moldorm check head for hitbox instead of tail
org $1DDADD
; BRA + : NOP #22 : +
BRA + : NOP #26 : +
org $1DDAF9
BRA + : NOP : +
org $1DDB01
BRA + : NOP #3 : +
; make moldorm repel sword when not stunned
org $06F354
JSL CheckMoldormRepel
BCC .not_moldorm
NOP
skip 17
.not_moldorm

View File

@@ -126,6 +126,8 @@ Utility_CheckAncillaOverlapWithSprite:
RTL
.giant_moldorm
LDA $0E10, Y : BNE .ignore_collision ; Moldy can have little a I-Frames, as a treat
LDA $0C4A, X : CMP #$1F : BEQ .check_collision_moldorm ; hookshot
CMP #$05 : BEQ .check_collision_moldorm ; boomerang
LDA.l SpecialWeapons : CMP #$01 : BNE ++
LDA $0C4A, X : CMP #$07 : BEQ .check_collision_moldorm
BRA .ignore_collision ; don't collide with non-bombs
@@ -274,29 +276,29 @@ Utility_CheckHammerHelmasaurKingMask:
RTL
;--------------------------------------------------------------------------------
Utility_CheckImpervious:
LDA $0E20, X : CMP.b #$CE : BEQ .blind
CMP.b #$CB : BNE .normal
LDA.w $0E20, X : CMP.b #$CE : BEQ .blind
CMP.b #$CB : BNE .normal
.trinexx
LDA SpecialWeapons : CMP #$01 : BEQ +
LDA.l SpecialWeapons : CMP #$01 : BEQ +
CMP #$03 : BEQ +
CMP #$04 : BEQ +
CMP #$05 : BEQ +
CMP #$06 : BEQ .check_sidenexx
BRA .normal
.blind
LDA $0301 : AND.b #$0A : BNE .impervious ; impervious to hammer
LDA.w $0301 : AND.b #$0A : BNE .impervious ; impervious to hammer
BRA .normal
+
LDA $0301 : AND.b #$0A : BNE .impervious ; impervious to hammer
LDA.w $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
.normal
LDA $0E60, X : AND.b #$40 : BNE .impervious
LDA $0CF2 : CMP #$FF : BEQ .impervious ; special "always-impervious" class
LDA $0E20, X : CMP.b #$CC : BEQ .sidenexx : CMP.b #$CD : BEQ .sidenexx
LDA $0301 : AND.b #$0A : BEQ .not_impervious ; normal behavior if not hammer
LDA.w $0E60, X : AND.b #$40 : BNE .impervious
LDA.w $0CF2 : CMP.b #$FF : BEQ .impervious ; special "always-impervious" class
LDA.w $0E20, X : CMP.b #$CC : BEQ .sidenexx : CMP.b #$CD : BEQ .sidenexx
LDA.w $0301 : AND.b #$0A : BEQ .not_impervious ; normal behavior if not hammer
JSL Ganon_CheckHammerVulnerability : BCS .not_impervious
LDA SpecialWeapons : CMP #$01 : BEQ +
CMP #$03 : BEQ +
@@ -304,7 +306,7 @@ Utility_CheckImpervious:
CMP #$05 : BEQ +
BRA .not_impervious
+
LDA $0E20, X : CMP.b #$1E : BEQ .not_impervious ; crystal switch
LDA.w $0E20, X : CMP.b #$1E : BEQ .not_impervious ; crystal switch
CMP.b #$40 : BEQ .not_impervious ; aga barrier
BRA .impervious
.not_impervious
@@ -336,12 +338,6 @@ Utility_CheckImpervious:
; start with X = sprite index
;--------------------------------------------------------------------------------
AllowBombingMoldorm:
LDA SpecialWeapons : CMP #$01 : BEQ .no_disable_projectiles
CMP #$03 : BEQ .no_disable_projectiles
CMP #$04 : BEQ .no_disable_projectiles
CMP #$05 : BEQ .no_disable_projectiles
CMP #$06 : BEQ .no_disable_projectiles
INC $0BA0, X
.no_disable_projectiles
JSL !SPRITE_INITIALIZED_SEGMENTED
RTL

View File

@@ -118,3 +118,48 @@ SwordSwingDelay:
LDA.l $079CAF, X
STA.b $3D
RTL
MaybeRecoil:
LDA.w $0E20, Y
CMP.b #$09 ; skip recoil on the giant 'dorm
BEQ .done
LDA.l $088E75, X
STA.w $0F40, Y
LDA.l $088E79, X
STA.w $0F30, Y
.done
RTL
MaybeRecoil2:
LDA.w $0E20, X
CMP.b #$09
BEQ .moldorm
LDA.b $00
EOR.b #$FF
INC
STA.w $0F30, X
LDA.b $01
EOR.b #$FF
INC
STA.w $0F40, X
RTL
.moldorm ; skip recoil on the giant 'dorm and unstun
STZ.w $0B58, X
STZ.w $0D90, X
RTL
CheckMoldormRepel:
CMP.b #$09
BNE .not_moldorm
LDA.w $0D90, X
BEQ .repel
LDA.w $0B58, X
BEQ .repel
.no_repel
LDA.b #$01
SEC : RTL
.repel
LDA.b #$00
SEC : RTL
.not_moldorm
CLC : RTL