diff --git a/darkworldspawn.asm b/darkworldspawn.asm index 97dbc2b..6d91a24 100644 --- a/darkworldspawn.asm +++ b/darkworldspawn.asm @@ -171,7 +171,7 @@ SetEscapeAssist: BIT.b #$10 : BEQ + : STA InfiniteArrowsModifier : + ++ - LDA.l SpecialWeapons : CMP #$01 : BNE + + LDA.l SpecialWeapons : AND.b #$7F : CMP #$01 : BNE + LDA.l SpecialWeaponLevel : BEQ + LDA #$01 : STA InfiniteBombsModifier + diff --git a/dialog.asm b/dialog.asm index 73abf86..fc1b743 100644 --- a/dialog.asm +++ b/dialog.asm @@ -306,7 +306,7 @@ DialogGanon2: LDA.w #$018D : JMP .done + LDA.l GanonVulnerabilityItem : AND #$00FF : BNE .special_item - LDA.l SpecialWeapons : AND.w #$00FF + LDA.l SpecialWeapons : AND.w #$007F CMP.w #$0001 : BEQ .bombs ; bombs if special bomb mode .silver_arrows LDA.l BowTracking diff --git a/fileselect.asm b/fileselect.asm index 4d35ad0..105f0d6 100644 --- a/fileselect.asm +++ b/fileselect.asm @@ -268,7 +268,7 @@ DrawPlayerFileShared: %fs_drawBottle(EquipmentSRAM+$1F,9,23) ; Sword - LDA.l SpecialWeapons : AND.w #$00FF : CMP #$0001 : BEQ .bombSword + LDA.l SpecialWeapons : AND.w #$007F : CMP #$0001 : BEQ .bombSword LDA.l EquipmentSRAM+$19 : AND.w #$00FF : BNE + %fs_drawItemGray(3,26,FileSelectItems_fighters_sword) JMP ++ @@ -602,7 +602,7 @@ FileSelectDrawHudBar: LDA $7F5006 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,11) LDA $7F5007 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,12) - LDA SpecialWeapons : AND.w #$00FF : CMP #$0001 : BEQ .colorBombs + LDA SpecialWeapons : AND.w #$007F : CMP #$0001 : BEQ .colorBombs LDA #$028B|!FS_COLOR_BLUE : %fs_draw16x8(0,14) LDA EquipmentSRAM+$03 : AND.w #$00FF JSL.l HexToDec diff --git a/hardmode.asm b/hardmode.asm index 03348fd..af1300a 100644 --- a/hardmode.asm +++ b/hardmode.asm @@ -80,14 +80,14 @@ GetItemDamageValue: CPX.b #$3C : BEQ .hookshot CPX.b #$3D : BEQ .hookshot - LDA.l SpecialWeapons : CMP #$02 : BNE .normal - TXA : AND #$78 : CMP #$28 : BNE .normal - LDA $0DB8F1, X : BEQ .noDamage - LDA #$01 + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$02 : BNE .normal + TXA : AND.b #$78 : CMP.b #$28 : BNE .normal + LDA.l $8DB8F1, X : BEQ .noDamage + LDA.b #$01 RTL .normal - LDA $0DB8F1, X ; what we wrote over + LDA.l $0DB8F1, X ; what we wrote over RTL .boomerang LDA.l StunItemAction : AND #$01 : BNE .normal diff --git a/hooks.asm b/hooks.asm index f962f8c..07d1fb9 100755 --- a/hooks.asm +++ b/hooks.asm @@ -2912,10 +2912,6 @@ org $0882E8 ; Bank08.asm@456 (LDA $0DB0, Y : CMP.b #$03) JSL Utility_CheckHelmasaurKingCollision NOP ;-------------------------------------------------------------------------------- -org $1E838C ; sprite_helmasaur_king.asm@522 (LDA $0301 : AND.b #$0A) -JSL Utility_CheckHammerHelmasaurKingMask -NOP -;-------------------------------------------------------------------------------- org $06ED94 ; Bank06.asm@4866 (LDA $0E60, X : AND.b #$40) JSL Utility_CheckImpervious NOP diff --git a/inventory.asm b/inventory.asm index 1a9defd..e3698aa 100644 --- a/inventory.asm +++ b/inventory.asm @@ -739,11 +739,11 @@ RTS RTL .incrementBossSword - LDA SpecialWeapons : CMP #$01 : BEQ + - CMP #$03 : BEQ + - CMP #$04 : BEQ + - CMP #$05 : BEQ + - CMP #$08 : BEQ + + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ + + CMP.b #$03 : BEQ + + CMP.b #$04 : BEQ + + CMP.b #$05 : BEQ + + CMP.b #$08 : BEQ + LDA SwordEquipment : BRA ++ + : LDA SpecialWeaponLevel ++ diff --git a/newhud.asm b/newhud.asm index f9915eb..4a3bd16 100644 --- a/newhud.asm +++ b/newhud.asm @@ -7,7 +7,7 @@ NewDrawHud: LDA InfiniteBombsModifier : BNE .infinite_bombs .finite_bombs - LDA.l SpecialWeapons : CMP #$01 : BNE .normal + LDA.l SpecialWeapons : AND.b #$7F : CMP #$01 : BNE .normal LDA.l SpecialWeaponLevel : BEQ .no_bombs .normal LDA.l BombsEquipment ; bombs diff --git a/newitems.asm b/newitems.asm index a49508e..d75900e 100755 --- a/newitems.asm +++ b/newitems.asm @@ -470,8 +470,8 @@ AddReceivedItemExpandedGetItem: LDA #$01 : STA InfiniteBombsModifier ; infinite bombs BRA .done + CMP.b #$C1 : BNE + ; Cane Upgrade - LDA.l SpecialWeapons : CMP #$03 : BEQ .blue_cane - CMP #$04 : BEQ .red_cane + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$03 : BEQ .blue_cane + CMP.b #$04 : BEQ .red_cane BRA .done .blue_cane LDA #$01 : STA ByrnaEquipment diff --git a/special_weapons.asm b/special_weapons.asm index b9a24eb..c4e51b8 100644 --- a/special_weapons.asm +++ b/special_weapons.asm @@ -10,7 +10,7 @@ DamageClassCalc: JSL Ganon_CheckAncillaVulnerability RTL + - LDA SpecialWeapons : CMP #$06 : BEQ .cane_immune ; only crystal switches in bee mode + LDA SpecialWeapons : AND.b #$7F : CMP #$06 : BEQ .cane_immune ; only crystal switches in bee mode PLA CMP #$01 : BEQ .red_cane CMP #$2C : BEQ .red_cane @@ -19,19 +19,15 @@ DamageClassCalc: BRA .not_cane_or_beam .red_cane PHA - LDA SpecialWeapons : CMP #$01 : BEQ .cane_immune - CMP #$03 : BEQ .cane_immune - CMP #$04 : BEQ .special_cane - CMP #$05 : BEQ .special_cane - CMP #$08 : BEQ .cane_immune + LDA SpecialWeapons : AND.b #$7F : CMP.b #$04 : BEQ .special_cane + CMP.b #$05 : BEQ .special_cane + LDA SpecialWeapons : AND.b #$80 : BNE .cane_immune BRA .normal .blue_cane PHA - LDA SpecialWeapons : CMP #$01 : BEQ .cane_immune - CMP #$03 : BEQ .special_cane - CMP #$04 : BEQ .cane_immune - CMP #$05 : BEQ .special_cane - CMP #$08 : BEQ .cane_immune + LDA SpecialWeapons : AND.b #$7F : CMP.b #$03 : BEQ .special_cane + CMP.b #$05 : BEQ .special_cane + LDA SpecialWeapons : AND.b #$80 : BNE .cane_immune BRA .normal .cane_immune LDA $0E20, X : CMP.b #$1E : BEQ .normal ; crystal switch @@ -47,7 +43,7 @@ DamageClassCalc: RTL .beam PHA - LDA SpecialWeapons : CMP #$02 : BNE .normal + LDA SpecialWeapons : AND.b #$7F : CMP.b #$02 : BNE .normal PLA LDA #$05 RTL @@ -55,7 +51,7 @@ DamageClassCalc: PLA .not_cane_or_beam CMP #$07 : BNE .no_change - LDA SpecialWeapons : CMP #$01 : BNE .normal_bombs + LDA SpecialWeapons : AND.b #$7F : CMP #$01 : BNE .normal_bombs LDA SpecialWeaponLevel : BEQ .normal_bombs LDA $0E20, X : CMP.b #$D6 : BEQ .unstunned_ganon CMP.b #$D7 : BEQ .stunned_ganon @@ -105,7 +101,7 @@ DamageClassCalc: RTL .actual_silver_arrows LDA $0E20, X : CMP.b #$D7 : BNE + - LDA SpecialWeapons : CMP #$01 : BEQ .normal_arrows + LDA SpecialWeapons : AND.b #$7F : CMP #$01 : BEQ .normal_arrows LDA #$20 : STA $0F10, X + LDA #$09 @@ -127,21 +123,21 @@ Utility_CheckAncillaOverlapWithSprite: JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG RTL .giant_moldorm - LDA $0E10, Y : BNE .ignore_collision ; Moldy can have little a I-Frames, as a treat - LDA.l SpecialWeapons : CMP #$01 : BNE ++ - LDA $0C4A, X : CMP #$07 : BEQ .check_collision_moldorm + LDA.w $0E10, Y : BNE .ignore_collision ; Moldy can have little a I-Frames, as a treat + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE ++ + LDA.w $0C4A, X : CMP.b #$07 : BEQ .check_collision_moldorm BRA .ignore_collision ; don't collide with non-bombs -++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++ - LDA $0C4A, X : CMP #$31 : BEQ .check_collision_moldorm +++ : CMP.b #$03 : BNE ++ + LDA.w $0C4A, X : CMP.b #$31 : BEQ .check_collision_moldorm BRA .ignore_collision ; don't collide with non-byrna -++ : LDA.l SpecialWeapons : CMP #$04 : BNE ++ - LDA $0C4A, X : CMP #$01 : BEQ .check_collision_moldorm - CMP #$2C : BEQ .check_collision_moldorm +++ : CMP.b #$04 : BNE ++ + LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_moldorm + CMP.b #$2C : BEQ .check_collision_moldorm BRA .ignore_collision ; don't collide with non-somaria -++ : LDA.l SpecialWeapons : CMP #$05 : BNE .ignore_collision - LDA $0C4A, X : CMP #$01 : BEQ .check_collision_moldorm - CMP #$2C : BEQ .check_collision_moldorm - CMP #$31 : BEQ .check_collision_moldorm +++ : CMP.b #$05 : BNE .ignore_collision + LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_moldorm + CMP.b #$2C : BEQ .check_collision_moldorm + CMP.b #$31 : BEQ .check_collision_moldorm BRA .ignore_collision ; don't collide with non-canes .check_collision_moldorm @@ -154,20 +150,20 @@ Utility_CheckAncillaOverlapWithSprite: RTL .trinexx - LDA.l SpecialWeapons : CMP #$01 : BNE ++ - LDA $0C4A, X : CMP #$07 : BEQ .check_collision_trinexx + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE ++ + LDA.w $0C4A, X : CMP.b #$07 : BEQ .check_collision_trinexx BRA .ignore_collision ; don't collide with non-bombs -++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++ - LDA $0C4A, X : CMP #$31 : BEQ .check_collision_trinexx +++ : CMP.b #$03 : BNE ++ + LDA.w $0C4A, X : CMP.b #$31 : BEQ .check_collision_trinexx JMP .ignore_collision ; don't collide with non-byrna -++ : LDA.l SpecialWeapons : CMP #$04 : BNE ++ - LDA $0C4A, X : CMP #$01 : BEQ .check_collision_trinexx - CMP #$2C : BEQ .check_collision_trinexx +++ : CMP.b #$04 : BNE ++ + LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_trinexx + CMP.b #$2C : BEQ .check_collision_trinexx JMP .ignore_collision ; don't collide with non-somaria -++ : LDA.l SpecialWeapons : CMP #$05 : BNE .ignore_collision - LDA $0C4A, X : CMP #$01 : BEQ .check_collision_trinexx - CMP #$2C : BEQ .check_collision_trinexx - CMP #$31 : BEQ .check_collision_trinexx +++ : CMP #$05 : BNE .ignore_collision + LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_trinexx + CMP.b #$2C : BEQ .check_collision_trinexx + CMP.b #$31 : BEQ .check_collision_trinexx JMP .ignore_collision ; don't collide with non-canes .check_collision_trinexx @@ -244,46 +240,34 @@ SetUpMoldormHitbox: ;-------------------------------------------------------------------------------- ; start with X = ancilla index, Y = sprite index Utility_CheckHelmasaurKingCollision: - LDA.l SpecialWeapons : CMP #$01 : BNE ++ - LDA $0C4A, X : CMP #$07 : BEQ .collide + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE ++ + LDA.w $0C4A, X : CMP.b #$07 : BEQ .collide BRA .normal ; normal behavior with non-bombs -++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++ - LDA $0C4A, X : CMP #$31 : BEQ .collide +++ : CMP.b #$03 : BNE ++ + LDA.w $0C4A, X : CMP.b #$31 : BEQ .collide BRA .normal ; normal behavior with non-byrna -++ : LDA.l SpecialWeapons : CMP #$04 : BNE ++ - LDA $0C4A, X : CMP #$01 : BEQ .collide - CMP #$2C : BEQ .collide +++ : CMP.b #$04 : BNE ++ + LDA.w $0C4A, X : CMP.b #$01 : BEQ .collide + CMP.b #$2C : BEQ .collide BRA .normal ; normal behavior with non-somaria -++ : LDA.l SpecialWeapons : CMP #$05 : BNE .normal - LDA $0C4A, X : CMP #$01 : BEQ .collide - CMP #$2C : BEQ .collide - CMP #$31 : BEQ .collide +++ : CMP.b #$05 : BNE .normal + LDA.w $0C4A, X : CMP.b #$01 : BEQ .collide + CMP.b #$2C : BEQ .collide + CMP.b #$31 : BEQ .collide BRA .normal ; normal behavior with non-canes .collide CLC RTL .normal - LDA $0DB0, Y : CMP.b #$03 + LDA.w $0DB0, Y : CMP.b #$03 RTL ; returns carry set if there is collision immunity ;-------------------------------------------------------------------------------- -Utility_CheckHammerHelmasaurKingMask: - LDA.l SpecialWeapons : CMP #$01 : BEQ .no_effect - LDA $0301 : AND #$0A - RTL -.no_effect - LDA #$00 - RTL -;-------------------------------------------------------------------------------- Utility_CheckImpervious: LDA $0E20, X : CMP.b #$CB : BNE .normal .trinexx - LDA SpecialWeapons : CMP #$01 : BEQ + - CMP #$03 : BEQ + - CMP #$04 : BEQ + - CMP #$05 : BEQ + - CMP #$06 : BEQ .check_sidenexx - CMP #$08 : BEQ + + LDA SpecialWeapons : AND.b #$7F : CMP.b #$06 : BEQ .check_sidenexx + LDA SpecialWeapons : AND.b #$80 : BNE + BRA .normal + LDA $0301 : AND.b #$0A : BNE .impervious ; impervious to hammer @@ -297,13 +281,7 @@ Utility_CheckImpervious: 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 JSL Ganon_CheckHammerVulnerability : BCS .not_impervious - LDA SpecialWeapons : CMP #$01 : BEQ + - CMP #$03 : BEQ + - CMP #$04 : BEQ + - CMP #$05 : BEQ + - CMP #$08 : BEQ + - BRA .not_impervious -+ + LDA SpecialWeapons : AND.b #$80 : BEQ .not_impervious LDA $0E20, X : CMP.b #$1E : BEQ .not_impervious ; crystal switch CMP.b #$40 : BEQ .not_impervious ; aga barrier BRA .impervious @@ -313,23 +291,11 @@ Utility_CheckImpervious: LDA #$01 : RTL .sidenexx LDA $0CAA, X : AND.b #$04 : BEQ .vulnerable - LDA SpecialWeapons : CMP #$01 : BEQ + - CMP #$03 : BEQ + - CMP #$04 : BEQ + - CMP #$05 : BEQ + - CMP #$08 : BEQ + - BRA .not_impervious -+ + LDA.l SpecialWeapons : AND.b #$80 : BEQ .not_impervious LDA $0CF2 : CMP #$06 : !BLT .impervious ; swords are ineffective BRA .not_impervious .vulnerable - LDA SpecialWeapons : CMP #$01 : BEQ + - CMP #$03 : BEQ + - CMP #$04 : BEQ + - CMP #$05 : BEQ + - CMP #$08 : BEQ + - BRA .not_impervious -+ + LDA.l SpecialWeapons : AND.b #$80 : BEQ .not_impervious LDA $0CF2 : CMP #$06 : !BGE .impervious ; non-swords are ineffective BRA .not_impervious ; returns nonzero A if impervious @@ -338,11 +304,11 @@ 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 + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .no_disable_projectiles + CMP.b #$03 : BEQ .no_disable_projectiles + CMP.b #$04 : BEQ .no_disable_projectiles + CMP.b #$05 : BEQ .no_disable_projectiles + CMP.b #$06 : BEQ .no_disable_projectiles INC $0BA0, X .no_disable_projectiles JSL !SPRITE_INITIALIZED_SEGMENTED @@ -352,11 +318,11 @@ AllowBombingBarrier: ; what we wrote over LDA $0D00, X : !SUB.b #$0C : STA $0D00, X LDA $0E20, X : CMP #$40 : BNE .disable_projectiles - 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 + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .no_disable_projectiles + CMP.b #$03 : BEQ .no_disable_projectiles + CMP.b #$04 : BEQ .no_disable_projectiles + CMP.b #$05 : BEQ .no_disable_projectiles + CMP.b #$06 : BEQ .no_disable_projectiles .disable_projectiles INC $0BA0, X .no_disable_projectiles @@ -364,7 +330,7 @@ AllowBombingBarrier: ;-------------------------------------------------------------------------------- DrawBombInMenu: JSL LoadBombCount16 : AND.w #$00FF : BEQ .noBombs - LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BNE .vanillaBombs + LDA SpecialWeapons : AND.w #$007F : CMP.w #$0001 : BNE .vanillaBombs LDA.l SpecialWeaponLevel : AND.w #$00FF : BEQ .noBombs : STA $02 LDA.w #$FC81 : STA $04 BRA .done @@ -379,7 +345,7 @@ DrawBombInMenu: RTL ;-------------------------------------------------------------------------------- DrawSwordInMenu: - LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BEQ .specialSword + LDA SpecialWeapons : AND.w #$007F : CMP.w #$0001 : BEQ .specialSword CMP.w #$0003 : BEQ .specialSword CMP.w #$0004 : BEQ .specialSword CMP.w #$0005 : BEQ .specialSword @@ -400,7 +366,7 @@ DrawSwordInMenu: ;-------------------------------------------------------------------------------- DrawBombInYBox: CPX.w #$0004 : BNE .done - LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BNE .vanilla + LDA SpecialWeapons : AND.w #$007F : CMP.w #$0001 : BNE .vanilla LDA SpecialWeaponLevel : AND.w #$00FF : CLC : ADC.w #$00BD : BRA .done .vanilla LDA.w #$0001 @@ -417,7 +383,7 @@ DrawBombOnHud: MVN $7E, $21 PLB - LDA.l SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BNE .regularBombs + LDA.l SpecialWeapons : AND.w #$007F : CMP.w #$0001 : BNE .regularBombs LDA.l SpecialWeaponLevel : AND.w #$00FF : ASL #2 : TAX LDA.l BombIcon, X : STA.l $7EC71A LDA.l BombIcon+2, X : STA.l $7EC71C @@ -427,7 +393,7 @@ DrawBombOnHud: BombSpriteColor: db $04, $08, $04, $02, $0A, $0A SetBombSpriteColor: - LDA.l SpecialWeapons : CMP.b #$01 : BNE .normal + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE .normal PHX LDA.l SpecialWeaponLevel TAX @@ -440,7 +406,7 @@ SetBombSpriteColor: RTL ;-------------------------------------------------------------------------------- StoreSwordDamage: - LDA.l SpecialWeapons : CMP #$02 : BEQ + + LDA.l SpecialWeapons : AND.b #$7F : CMP #$02 : BEQ + LDA.l $06ED39, X : RTL + LDA #$05 @@ -454,8 +420,8 @@ BeeDamageClass: db $FF, $01, $01, $FF, $FF ;-------------------------------------------------------------------------------- CheckDetonateBomb: - LDA.l SpecialWeapons : CMP.b #$01 : BEQ .detonate_bombs - CMP.b #$06 : BEQ .release_bee + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .detonate_bombs + CMP.b #$06 : BEQ .release_bee CLC : RTL .detonate_bombs LDX.b #09 @@ -496,7 +462,7 @@ CheckDetonateBomb: RTL ;-------------------------------------------------------------------------------- SetBeeType: - LDA.l SpecialWeapons : CMP.b #$06 : BEQ .bee_mode + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$06 : BEQ .bee_mode LDX.w $0202 .check_bee_type LDA.l $7EF33F, X @@ -516,7 +482,7 @@ SetBeeType: BRA .regular_bee ;-------------------------------------------------------------------------------- ArrghusBoing: - LDA.l SpecialWeapons : CMP.b #$06 : BNE .done + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$06 : BNE .done LDA.w $0F60, X : AND.b #$BF : STA.w $0F60, X .done ; what we wrote over @@ -536,7 +502,7 @@ 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 + +LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$06 : BNE + JSR BeeCheckDamage CMP.b #$00 : BEQ .unsuitable_target + @@ -551,7 +517,7 @@ BNE .unsuitable_target LDA.w $0F60,Y AND.b #$40 BEQ + -LDA.l SpecialWeapons : CMP.b #$06 : BNE .unsuitable_target +LDA.l SpecialWeapons : AND.b #$7F : 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 @@ -596,7 +562,7 @@ RTS CheckBugNet: LDA.w $037A : AND.b #$10 : BEQ .done ; normal behavior if not bugnet PHP ; we want to preserve the carry bit -LDA.l SpecialWeapons : CMP.b #$08 : BNE .return_10 ; normal behavior if not bugnet mode +LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$08 : BNE .return_10 ; normal behavior if not bugnet mode .bugnet_mode LDA.w $0E20, X : CMP.b #$E3 : BEQ .return_10 ; normal behavior if fairy CMP.b #$79 : BEQ .return_10 ; normal behavior if bee @@ -608,7 +574,7 @@ PLP : LDA.b #$10 RTL ;-------------------------------------------------------------------------------- SetHammerClass: -LDA.l SpecialWeapons : CMP.b #$08 : BNE .normal ; normal behavior if not bugnet mode +LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$08 : BNE .normal ; normal behavior if not bugnet mode LDA.w $037A : AND.b #$10 : BEQ .normal ; normal behavior if not bugnet LDA 4, S : TAX ; get sprite index off of stack LDA.w $0E20, X : CMP.b #$88 : BNE .not_mothula diff --git a/swordswap.asm b/swordswap.asm index d0fd7b8..11e1ac7 100644 --- a/swordswap.asm +++ b/swordswap.asm @@ -60,12 +60,8 @@ LookupDamageLevel: LDA.l !StalfosBombDamage RTL + - LDA SpecialWeapons : CMP #$01 : BEQ .bomb_table - CMP #$02 : BEQ .pseudo_table - CMP #$03 : BEQ .bomb_table - CMP #$04 : BEQ .bomb_table - CMP #$05 : BEQ .bomb_table - CMP #$08 : BEQ .bomb_table + LDA SpecialWeapons : AND.b #$7F : CMP.b #$02 : BEQ .pseudo_table + LDA SpecialWeapons : AND.b #$80 : BNE .bomb_table %LookupDamageSubclass(Damage_Table) : RTL .bomb_table %LookupDamageSubclass(Damage_Table_Bombs) : RTL @@ -131,12 +127,12 @@ CheckTabletSword: LDA.l AllowHammerTablets : BEQ + LDA HammerEquipment : BNE .allow ; check for hammer + - LDA.l SpecialWeapons : CMP #$01 : BEQ .check_special - CMP #$03 : BEQ .check_special - CMP #$04 : BEQ .check_special - CMP #$05 : BEQ .check_special - CMP #$06 : BEQ .allow - CMP #$08 : BEQ .check_special + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .check_special + CMP.b #$03 : BEQ .check_special + CMP.b #$04 : BEQ .check_special + CMP.b #$05 : BEQ .check_special + CMP.b #$06 : BEQ .allow + CMP.b #$08 : BEQ .check_special BRA .normal .allow LDA.b #$02 : RTL @@ -150,7 +146,7 @@ GetSwordLevelForEvilBarrier: LDA.l AllowHammerEvilBarrierWithFighterSword : BEQ + LDA #$FF : RTL + - LDA.l SpecialWeapons : CMP.b #$08 : BEQ + + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$08 : BEQ + LDA.l SwordEquipment : RTL + LDA.l SpecialWeaponLevel : RTL diff --git a/tables.asm b/tables.asm index f60e6e5..27f812e 100644 --- a/tables.asm +++ b/tables.asm @@ -120,15 +120,18 @@ db #$00 ; #$00 = Default behavior (silver arrows) org $30802F ; PC 0x18002F SpecialWeapons: db #$00 +; s - - - m m m m (bitfield) +; s - only swords damage can hurt enemies +; m - special weapon mode ; $00 = Off (default) -; $01 = Bomb-Only mode +; $01 = Bomb mode ; $02 = Pseudosword -; $03 = Byrna-Only mode -; $04 = Somaria-Only mode -; $05 = Canes-Only mode +; $03 = Byrna mode +; $04 = Somaria mode +; $05 = Canes mode ; $06 = Bee mode -; $07 = Hammer on B (for use with swordless) -; $05 = Bugnet mode +; $07 = Unused +; $08 = Bugnet mode ;-------------------------------------------------------------------------------- org $308030 ; PC 0x180030 EnableSRAMTrace: diff --git a/variable_ganon_vulnerability.asm b/variable_ganon_vulnerability.asm index e2a7a4d..4cb29b0 100644 --- a/variable_ganon_vulnerability.asm +++ b/variable_ganon_vulnerability.asm @@ -79,7 +79,7 @@ Ganon_CheckBeeVulnerability: ; we know it's a bee LDA #$09 BRA .done .normal - LDA.l SpecialWeapons : CMP.b #$06 : BNE .regular_bee + LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$06 : BNE .regular_bee LDA.w $0ED0, X BRA .done .regular_bee @@ -115,7 +115,7 @@ Ganon_CheckHammerVulnerability: ; we know it's hammer ;-------------------------------------------------------------------------------- CheckBeeBoss: ; Y is sprite index - LDA.l SpecialWeapons : CMP #$06 : BNE .not_bee_mode + LDA.l SpecialWeapons : AND.b #$7F : CMP #$06 : BNE .not_bee_mode LDA #$00 : RTL .not_bee_mode LDA.l GanonVulnerabilityItem : CMP #$10 : BNE .normal ; ganon not vulnerable to bee