diff --git a/hooks.asm b/hooks.asm index a878eeb..c6cf485 100755 --- a/hooks.asm +++ b/hooks.asm @@ -2992,6 +2992,16 @@ 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 @@ -3018,6 +3028,8 @@ NOP ;-------------------------------------------------------------------------------- org $06ED70 ; Bank06.asm@4842 (LDA $06ED39, X : STA $0CF2) JSL StoreSwordDamage +;-------------------------------------------------------------------------------- + ;================================================================================ ; Fix quadrant glitch org $07A879 diff --git a/inventory.asm b/inventory.asm index 8acedde..7e39834 100644 --- a/inventory.asm +++ b/inventory.asm @@ -548,27 +548,25 @@ AddInventory: CPY.b #$90 : !BGE + JSL MaybeFlagCompassTotalPickup JSR .incrementCompass - JMP .done + BRA .done + CPY.b #$90 : !BLT + ; Items $90 - $9F - Free Big Keys CPY.b #$A0 : !BGE + JSR .incrementBigKey - JMP .done + BRA .done + CPY.b #$A0 : !BLT + ; Items $A0 - $AF - Free Small Keys CPY.b #$B0 : !BGE + JSR .incrementKey - JMP .done - + CPY.b #$B6 : BNE + ; Item $B6 - Bomb Upgrade + BRA .done + + CPY.b #$C0 : BEQ .special_weapon ; Item $C0 - Bomb Upgrade + CPY.b #$C1 : BEQ .special_weapon ; Item $C1 - Cane Upgrade + CPY.b #$C2 : BEQ .special_weapon ; Item $C2 - Bug Net Upgrade + BRA .done + .special_weapon JSR .stampSword ; update "first bomb" timestamp LDA.l SpecialWeaponLevel ; get current bomb level CMP #$05 : !BGE ++ ; check if already maxed INC : STA.l SpecialWeaponLevel - ++ JMP .done - + CPY.b #$B7 : BNE + ; Item $B7 - Cane Upgrade - JSR .stampSword ; update "first cane" timestamp - LDA.l SpecialWeaponLevel ; get current cane level - CMP #$05 : !BGE ++ ; check if already maxed - INC : STA.l SpecialWeaponLevel - ++ JMP .done + ++ BRA .done + .done PLP : PLX : PLA @@ -711,6 +709,7 @@ RTL CMP #$03 : BEQ + CMP #$04 : BEQ + CMP #$05 : BEQ + + CMP #$08 : BEQ + LDA SwordEquipment : BRA ++ + : LDA SpecialWeaponLevel ++ diff --git a/newitems.asm b/newitems.asm index 2fd9e74..a49508e 100755 --- a/newitems.asm +++ b/newitems.asm @@ -45,8 +45,9 @@ ; #$B3 - Chicken ; #$B4 - Big Magic ; #$B5 - Good Bee -; #$B6 - Progressive Bomb -; #$B7 - Progressive Cane +; #$C0 - Progressive Bomb +; #$C1 - Progressive Cane +; #$C2 - Progressive Bug Net ; #$FE - Server Request (Asychronous Chest) ; #$FF - Null Chest ;-------------------------------------------------------------------------------- @@ -465,10 +466,10 @@ AddReceivedItemExpandedGetItem: LDA.b $EE : STA.w $0F20,Y ; spawns on same layer as link JSL GoldBee_SpawnSelf_SetProperties BRA .done - + CMP.b #$B6 : BNE + ; Bomb Upgrade + + CMP.b #$C0 : BNE + ; Bomb Upgrade LDA #$01 : STA InfiniteBombsModifier ; infinite bombs - JMP .done - + : CMP.b #$B7 : BNE + ; Cane Upgrade + BRA .done + + CMP.b #$C1 : BNE + ; Cane Upgrade LDA.l SpecialWeapons : CMP #$03 : BEQ .blue_cane CMP #$04 : BEQ .red_cane BRA .done @@ -478,6 +479,9 @@ AddReceivedItemExpandedGetItem: .red_cane LDA #$01 : STA SomariaEquipment BRA .done + + CMP.b #$C2 : BNE + ; Bug Net Upgrade + LDA.l #$01 : STA BugNetEquipment + BRA .done + .done PLX @@ -673,10 +677,11 @@ AddReceivedItemExpanded: db -4 ; Chicken db -4 ; Big Magic db -4 ; Good Bee + db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused db -4 ; Bomb Upgrade db -4 ; Cane Upgrade - db -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 ; Bug Net Upgrade + db -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 @@ -721,10 +726,11 @@ AddReceivedItemExpanded: db 0 ; Chicken db 4 ; Big Magic db 0 ; Good Bee + db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused db 0 ; Bomb Upgrade db 4 ; Cane Upgrade - db 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 ; Bug Net Upgrade + db 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 @@ -774,10 +780,11 @@ AddReceivedItemExpanded: db $47 ; Chicken db $3B ; Big Magic db $47 ; Good Bee + db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $13 ; Bomb Upgrade db $07 ; Cane Upgrade - db $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 $27 ; Bug Net Upgrade + db $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 @@ -821,10 +828,11 @@ AddReceivedItemExpanded: db $02 ; Chicken db $00 ; Big Magic db $02 ; Good Bee + db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused db $02 ; Bomb Upgrade db $00 ; Cane Upgrade - db $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 ; Bug Net Upgrade + db $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 db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused @@ -869,10 +877,11 @@ AddReceivedItemExpanded: db 1 ; Chicken db 4 ; Big Magic db 1 ; Good Bee + db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused db 5 ; Bomb Upgrade db 5 ; Cane Upgrade - db 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 1 ; Bug Net Upgrade + db 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 db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused @@ -918,10 +927,11 @@ AddReceivedItemExpanded: dw $F36A ; Chicken dw $F373 ; Big Magic dw $F36A ; Good Bee + dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused dw $F38F ; Bomb Upgrade dw $F38F ; Cane Upgrade - dw $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 $F38F ; Bug Net Upgrade + dw $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 dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused @@ -969,10 +979,11 @@ AddReceivedItemExpanded: db $FF ; Chicken db $80 ; Big Magic db $FF ; Good Bee + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused db $FF ; Bomb Upgrade db $FF ; Cane Upgrade - db $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 ; Bug Net Upgrade + db $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 db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused @@ -1062,10 +1073,11 @@ Link_ReceiveItemAlternatesExpanded: db -1 ; Chicken db -1 ; Big Magic db -1 ; Good Bee + db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused db -1 ; Bomb Upgrade db -1 ; Cane Upgrade - db -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 ; Bug Net Upgrade + db -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 db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused @@ -1354,7 +1366,7 @@ MaybeFlagCompassTotalEntrance: RTL ;-------------------------------------------------------------------------------- LoadReceivedItemExpandedProperties: -CPX.b #$B6 : BEQ .bomb_upgrade +CPX.b #$C0 : BEQ .bomb_upgrade LDA.l AddReceivedItemExpanded_properties, X ; load from table RTL .bomb_upgrade diff --git a/special_weapons.asm b/special_weapons.asm index a261901..54da1e2 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 @@ -281,6 +283,7 @@ Utility_CheckImpervious: CMP #$04 : BEQ + CMP #$05 : BEQ + CMP #$06 : BEQ .check_sidenexx + CMP #$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,31 @@ 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 fdc46fe..d0fd7b8 100644 --- a/swordswap.asm +++ b/swordswap.asm @@ -65,6 +65,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 @@ -135,6 +136,7 @@ CheckTabletSword: CMP #$04 : BEQ .check_special CMP #$05 : BEQ .check_special CMP #$06 : BEQ .allow + CMP #$08 : BEQ .check_special BRA .normal .allow LDA.b #$02 : RTL @@ -148,8 +150,10 @@ GetSwordLevelForEvilBarrier: LDA.l AllowHammerEvilBarrierWithFighterSword : BEQ + LDA #$FF : RTL + - LDA 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 417c7cd..f6da3da 100644 --- a/tables.asm +++ b/tables.asm @@ -121,6 +121,7 @@ db #$00 ; $05 = Canes-Only mode ; $06 = Bee mode ; $07 = Hammer on B (for use with swordless) +; $05 = Bugnet mode ;-------------------------------------------------------------------------------- org $308030 ; PC 0x180030 EnableSRAMTrace: @@ -1442,8 +1443,9 @@ db $04 ;B3 - Chicken ;B4 - Big Magic ;B5 - 5 Arrows -;B6 - Progressive Bomb -;B7 - Progressive Cane +;C0 - Progressive Bomb +;C1 - Progressive Cane +;C2 - Progressive Bug Net ;================================================================================ ;;Residual Portal ;org $0283E0 ; PC 0x103E0 (Bank02.asm:816) (BNE) diff --git a/utilities.asm b/utilities.asm index 68cc11b..caad343 100644 --- a/utilities.asm +++ b/utilities.asm @@ -160,10 +160,11 @@ RTL db $4B ; Chicken db $3B ; Big Magic db $4A ; Good Bee + db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $13 ; Bomb Upgrade db $07 ; Cane Upgrade - db $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 $27 ; Bug Net Upgrade + db $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 db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Reserved @@ -307,10 +308,11 @@ RTL db $02 ; Chicken db $08 ; Big Magic db $04 ; Good Bee + db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused db $F7 ; Bomb Upgrade db $0A ; Cane Upgrade - db $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 $02 ; Bug Net Upgrade + db $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 db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused @@ -400,7 +402,7 @@ RTL db $15, $18, $24, $2A, $34, $35, $36, $42 db $43, $45, $59, $A0, $A1, $A2, $A3, $A4 db $A5, $A6, $A7, $A8, $A9, $AA, $AB, $AC - db $AD, $AE, $AF, $B4, $B5, $B7 + db $AD, $AE, $AF, $B4, $B5, $C1 .smallSprites_end } ;--------------------------------------------------------------------------------