From 9f441108e03ecd6729d886720b406707c5d41f31 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Fri, 17 Mar 2023 11:16:29 -0500 Subject: [PATCH] Moldorm stunnable with hookshot/boomerang; only damagable when stunned --- damage_table.bin | Bin 2048 -> 2048 bytes hooks.asm | 25 ++++++++++++++++++++++++ special_weapons.asm | 28 ++++++++++++--------------- trolls.asm | 45 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 16 deletions(-) diff --git a/damage_table.bin b/damage_table.bin index 5860da15baa6b6c32d409b4825dcfa97406eff3f..41e3c4aa55a470309e172ed87e125557462b7fce 100644 GIT binary patch delta 15 WcmZn=Xb_m-!4ha}EV9vO3p)TKZ3KV- delta 15 WcmZn=Xb_m-!NO>4EV$8U3p)TH-UKZG diff --git a/hooks.asm b/hooks.asm index 717fb07..dae1e88 100755 --- a/hooks.asm +++ b/hooks.asm @@ -3106,3 +3106,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 diff --git a/special_weapons.asm b/special_weapons.asm index d7313cd..d62202c 100644 --- a/special_weapons.asm +++ b/special_weapons.asm @@ -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 diff --git a/trolls.asm b/trolls.asm index e595699..a1a1799 100644 --- a/trolls.asm +++ b/trolls.asm @@ -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