First pass at bugnet mode

This commit is contained in:
2023-09-04 16:13:59 -05:00
parent 25c44cd2bb
commit cd1a1f4288
7 changed files with 111 additions and 43 deletions

View File

@@ -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

View File

@@ -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
++

View File

@@ -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

View File

@@ -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
;--------------------------------------------------------------------------------

View File

@@ -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 +

View File

@@ -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)

View File

@@ -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
}
;--------------------------------------------------------------------------------