diff --git a/hooks.asm b/hooks.asm index 3645958..360a0ed 100644 --- a/hooks.asm +++ b/hooks.asm @@ -2552,6 +2552,15 @@ Link_UseHammerLong: JSR Link_UseHammer : RTL warnpc $07F890 ;-------------------------------------------------------------------------------- +org $06F2DC ; bank_06.asm@22763 (LDA.w $037A : AND.b #$10) +JSL CheckBugNet : NOP + +org $06EB91 ; bank_06.asm@21178 (LDA.w $037A : AND.b #$10) +JSL CheckBugNet : NOP +;-------------------------------------------------------------------------------- +org $06ED77 ; bank_06.asm@21597 (LDA.w $0301 : AND.b #$0A : ...) +JSL SetHammerClass +BRA + : NOP #7 : + ;================================================================================ ; Variable Ganon Vulnerability diff --git a/inventory.asm b/inventory.asm index 927d17b..0c0fa24 100644 --- a/inventory.asm +++ b/inventory.asm @@ -521,6 +521,12 @@ AddInventory: CMP #$05 : !BGE ++ ; check if already maxed INC : STA.l SpecialWeaponLevel ++ JMP .done + + CPY.b #$B8 : BNE + ; Item $B8 - Bug Net Upgrade + JSR .stampSword ; update "first bug net" timestamp + LDA.l SpecialWeaponLevel ; get current bug net level + CMP #$05 : !BGE ++ ; check if already maxed + INC : STA.l SpecialWeaponLevel + ++ JMP .done + .done PLP : PLX : PLA @@ -667,6 +673,7 @@ RTL CMP.b #$03 : BEQ + CMP.b #$04 : BEQ + CMP.b #$05 : BEQ + + CMP.b #$08 : BEQ + LDA.l SwordEquipment : BRA ++ + : LDA.l SpecialWeaponLevel ++ diff --git a/newitems.asm b/newitems.asm index f43117e..7fbf687 100755 --- a/newitems.asm +++ b/newitems.asm @@ -47,6 +47,7 @@ ; #$B5 - reserved for bonk shuffle ; #$B6 - Progressive Bomb ; #$B7 - Progressive Cane +; #$B8 - Progressive Bug Net ; #$FE - Server Request (Asychronous Chest) ; #$FF - Null Chest ;-------------------------------------------------------------------------------- @@ -385,6 +386,9 @@ AddReceivedItemExpandedGetItem: LDA #$01 : STA SomariaEquipment BRA .done BRA .done + + : CMP.b #$B8 : BNE + ; Cane Upgrade + LDA #$01 : STA BugNetEquipment + BRA .done + .done PLX @@ -547,7 +551,8 @@ AddReceivedItemExpanded: db -4, -4, -4, -4, -4 ; reserved for bonk shuffle db -4 ; Bomb Upgrade db -4 ; Cane Upgrade - db -4, -4, -4, -4, -4, -4, -4, -4 ; Unused + db -4 ; Bug Net Upgrade + db -4, -4, -4, -4, -4, -4, -4 ; Unused db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused @@ -591,7 +596,8 @@ AddReceivedItemExpanded: db 0, 0, 0, 0, 0 ; reserved for bonk shuffle db 0 ; Bomb Upgrade db 4 ; Cane Upgrade - db 0, 0, 0, 0, 0, 0, 0, 0 ; Unused + db 0 ; Bug Net Upgrade + db 0, 0, 0, 0, 0, 0, 0 ; Unused db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused @@ -639,7 +645,8 @@ AddReceivedItemExpanded: db $49, $49, $49, $49, $49 ; reserved for bonk shuffle db $13 ; Bomb Upgrade db $07 ; Cane Upgrade - db $49, $49, $49, $49, $49, $49, $49, $49 ; Unused + db $27 ; Bug Net Upgrade + db $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused @@ -682,7 +689,8 @@ AddReceivedItemExpanded: db $02, $02, $02, $02, $02 ; reserved for bonk shuffle db $02 ; Bomb Upgrade db $00 ; Cane Upgrade - db $02, $02, $02, $02, $02, $02, $02, $02 ; Unused + db $02 ; Bug Net Upgrade + db $02, $02, $02, $02, $02, $02, $02 ; Unused db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused @@ -726,7 +734,8 @@ AddReceivedItemExpanded: db 4, 4, 4, 4, 4 ; reserved for bonk shuffle db 5 ; Bomb Upgrade db 5 ; Cane Upgrade - db 4, 4, 4, 4, 4, 4, 4, 4 ; Unused + db 1 ; Bug Net Upgrade + db 4, 4, 4, 4, 4, 4, 4 ; Unused db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused @@ -771,7 +780,8 @@ AddReceivedItemExpanded: dw $F36A, $F36A, $F36A, $F36A, $F36A ; reserved for bonk shuffle dw $F38F ; Bomb Upgrade dw $F38F ; Cane Upgrade - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused + dw $F38F ; Bug Net Upgrade + dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused @@ -818,7 +828,8 @@ AddReceivedItemExpanded: db $FF, $FF, $FF, $FF, $FF ; reserved for bonk shuffle db $FF ; Bomb Upgrade db $FF ; Cane Upgrade - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused + db $FF ; Bug Net Upgrade + db $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused @@ -907,7 +918,8 @@ Link_ReceiveItemAlternatesExpanded: db -1, -1, -1, -1, -1 ; reserved for bonk shuffle db -1 ; Bomb Upgrade db -1 ; Cane Upgrade - db -1, -1, -1, -1, -1, -1, -1, -1 ; Unused + db -1 ; Bug Net Upgrade + db -1, -1, -1, -1, -1, -1, -1 ; Unused db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused diff --git a/special_weapons.asm b/special_weapons.asm index d46184b..7795459 100644 --- a/special_weapons.asm +++ b/special_weapons.asm @@ -23,6 +23,7 @@ DamageClassCalc: CMP #$03 : BEQ .cane_immune CMP #$04 : BEQ .special_cane CMP #$05 : BEQ .special_cane + CMP #$08 : BEQ .cane_immune BRA .normal .blue_cane PHA @@ -30,6 +31,7 @@ DamageClassCalc: CMP #$03 : BEQ .special_cane CMP #$04 : BEQ .cane_immune CMP #$05 : BEQ .special_cane + CMP #$08 : BEQ .cane_immune BRA .normal .cane_immune LDA $0E20, X : CMP.b #$1E : BEQ .normal ; crystal switch @@ -276,11 +278,12 @@ Utility_CheckHammerHelmasaurKingMask: 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 + LDA SpecialWeapons : CMP.b #$01 : BEQ + + CMP.b #$03 : BEQ + + CMP.b #$04 : BEQ + + CMP.b #$05 : BEQ + + CMP.b #$06 : BEQ .check_sidenexx + CMP.b #$08 : BEQ + BRA .normal + LDA $0301 : AND.b #$0A : BNE .impervious ; impervious to hammer @@ -298,6 +301,7 @@ Utility_CheckImpervious: CMP #$03 : BEQ + CMP #$04 : BEQ + CMP #$05 : BEQ + + CMP #$08 : BEQ + BRA .not_impervious + LDA $0E20, X : CMP.b #$1E : BEQ .not_impervious ; crystal switch @@ -313,6 +317,7 @@ Utility_CheckImpervious: CMP #$03 : BEQ + CMP #$04 : BEQ + CMP #$05 : BEQ + + CMP #$08 : BEQ + BRA .not_impervious + LDA $0CF2 : CMP #$06 : !BLT .impervious ; swords are ineffective @@ -322,6 +327,7 @@ Utility_CheckImpervious: CMP #$03 : BEQ + CMP #$04 : BEQ + CMP #$05 : BEQ + + CMP #$08 : BEQ + BRA .not_impervious + LDA $0CF2 : CMP #$06 : !BGE .impervious ; non-swords are ineffective @@ -377,6 +383,7 @@ DrawSwordInMenu: CMP.w #$0003 : BEQ .specialSword CMP.w #$0004 : BEQ .specialSword CMP.w #$0005 : BEQ .specialSword + CMP.w #$0008 : BEQ .specialSword LDA SwordEquipment : AND.w #$00FF : CMP.w #$00FF : BEQ .noSword .hasSword STA $02 @@ -462,7 +469,9 @@ CheckDetonateBomb: BRA .done .not_bomb_mode LDA.l SpecialWeapons : CMP.b #$06 : BEQ .release_bee - CMP.b #$07 : BNE .done + CMP.b #$07 : BEQ .hammer + BRA .done +.hammer LDA.l HammerEquipment : BEQ .done LDA.b $3A : ORA.b #$40 : STA.b $3A LDA.b #$04 : STA.w $0304 @@ -603,3 +612,30 @@ INC.b $3C LDA.b $3C CMP.b #$09 RTL +;-------------------------------------------------------------------------------- +CheckBugNet: +LDA.w $037A : AND.b #$10 : BEQ .done ; normal behavior if not bugnet +LDA.l SpecialWeapons : 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 + CMP.b #$B2 : BEQ .return_10 ; normal behavior if bee +LDA.b #$00 : BRA .done +.return_10 +LDA.b #$10 +.done +RTL +;-------------------------------------------------------------------------------- +SetHammerClass: +LDA.l SpecialWeapons : 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.l SpecialWeaponLevel : STA.w $0CF2 +RTL +.normal +LDA.w $0301 +AND.b #$0A +BEQ .not_hammer +LDA.b #$03 +STA.w $0CF2 +.not_hammer +RTL diff --git a/swordswap.asm b/swordswap.asm index 6875ffe..415b064 100644 --- a/swordswap.asm +++ b/swordswap.asm @@ -37,6 +37,7 @@ LookupDamageLevel: CMP #$03 : BEQ .bomb_table CMP #$04 : BEQ .bomb_table CMP #$05 : BEQ .bomb_table + CMP #$08 : BEQ .bomb_table %LookupDamageSubclass(Damage_Table) : RTL .bomb_table %LookupDamageSubclass(Damage_Table_Bombs) : RTL @@ -101,6 +102,7 @@ CheckTabletSword: 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 @@ -114,8 +116,10 @@ GetSwordLevelForEvilBarrier: LDA.l AllowHammerEvilBarrierWithFighterSword : BEQ + LDA.b #$FF : RTL + - LDA.l SwordEquipment -RTL + LDA.l SpecialWeapons : CMP.b #$08 : BEQ + + LDA.l SwordEquipment : RTL + + + LDA.l SpecialWeaponLevel : RTL ;================================================================================ CheckGanonHammerDamage: LDA.l HammerableGanon : BEQ + diff --git a/tables.asm b/tables.asm index ac2c9cd..72972a3 100644 --- a/tables.asm +++ b/tables.asm @@ -119,6 +119,7 @@ db #$00 ; $05 = Canes-Only mode ; $06 = Bee mode ; $07 = Hammer on B (for use with swordless) +; $08 = Bugnet mode ;-------------------------------------------------------------------------------- org $308030 ; PC 0x180030 EnableSRAMTrace: @@ -1425,6 +1426,7 @@ db $04 ;B5 - reserved for bonk shuffle ;B6 - Progressive Bomb ;B7 - Progressive Cane +;B8 - Progressive Bug Net ;================================================================================ ;;Residual Portal ;org $0283E0 ; PC 0x103E0 (Bank02.asm:816) (BNE) diff --git a/utilities.asm b/utilities.asm index df02e61..0ac8f41 100644 --- a/utilities.asm +++ b/utilities.asm @@ -148,7 +148,8 @@ RTL db $13, $13, $13, $13, $13 ; reserved for bonk shuffle db $13 ; Bomb Upgrade db $07 ; Cane Upgrade - db $49, $49, $49, $49, $49, $49, $49, $49 ; Unused + db $27 ; Bug Net Upgrade + db $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused @@ -211,7 +212,7 @@ RTL LDA.b #$08 : RTL ++ : CMP.b #$FF : BNE ++ ; Progressive Armor LDA.l HighestMail - CMP.l ProgressiveArmorLimit : !BLT + ; Progressive Armor Limit + CMP.l ProgressiveArmorLimit : !BLT + ; Progressive Armor Limit LDA.l ProgressiveArmorReplacement JMP GetSpritePalette + : CMP.b #$00 : BNE + ; Green Tunic @@ -291,7 +292,8 @@ GfxPalettes: db $08, $08, $08, $08, $08 ; reserved for bonk shuffle db $F7 ; Bomb Upgrade db $0A ; Cane Upgrade - db $08, $08, $08, $08, $08, $08, $08, $08 ; Unused + db $02 ; Bug Net Upgrade + db $08, $08, $08, $08, $08, $08, $08 ; Unused db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused