diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 37ece34..e697a86 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -47,7 +47,7 @@ dw !ROM_VERSION_HIGH !SHOP_PURCHASE_COUNTS = "$7EF302" ;$7EF302 - $7EF33F (temporary home) !INVENTORY_SWAP = "$7EF38C" !INVENTORY_SWAP_2 = "$7EF38E" -!BOMB_LEVEL = "$7EF38F" +!WEAPON_LEVEL = "$7EF38F" !ITEM_LIMIT_COUNTS = "$7EF390" ; $7EF390 - ???? !NPC_FLAGS = "$7EF410" !NPC_FLAGS_2 = "$7EF411" diff --git a/darkworldspawn.asm b/darkworldspawn.asm index f15d5bb..8c9d434 100644 --- a/darkworldspawn.asm +++ b/darkworldspawn.asm @@ -148,7 +148,7 @@ SetEscapeAssist: ++ LDA.l SpecialWeapons : CMP #$01 : BNE + - LDA.l !BOMB_LEVEL : BEQ + + LDA.l !WEAPON_LEVEL : BEQ + LDA #$01 : STA !INFINITE_BOMBS + RTL diff --git a/hooks.asm b/hooks.asm index a5d8c90..4dbe931 100755 --- a/hooks.asm +++ b/hooks.asm @@ -2787,7 +2787,7 @@ BRA + : NOP #8 : + org $089EF8 ; ancilla_bomb@1438 (LDA.w #$04 : STA $0B) JSL SetBombSpriteColor ;-------------------------------------------------------------------------------- -; icons with numbers +; bomb icons with numbers org $0DFC51 ; is this being used? I hope not! let's find out if anything breaks! db $F5, $20, $F5, $20, $F5, $20, $F5, $20 db $B2, $3C, $B3, $3C, $C2, $3C, $17, $3C @@ -2796,7 +2796,7 @@ db $B2, $24, $B3, $24, $C2, $24, $19, $24 db $B2, $28, $B3, $28, $C2, $28, $1A, $28 db $B2, $28, $B3, $28, $C2, $28, $1B, $28 -; icons without numbers +; bomb icons without numbers org $0DFC81 db $F5, $20, $F5, $20, $F5, $20, $F5, $20 db $B2, $3C, $B3, $3C, $C2, $3C, $C2, $7C diff --git a/inventory.asm b/inventory.asm index 71effa0..d8be213 100644 --- a/inventory.asm +++ b/inventory.asm @@ -726,9 +726,11 @@ RTS RTL .incrementBossSword - LDA SpecialWeapons : CMP #$01 : BNE + - LDA !BOMB_LEVEL : BRA ++ - + : LDA $7EF359 + LDA SpecialWeapons : CMP #$01 : BEQ + + CMP #$03 : BEQ + + CMP #$04 : BEQ + + LDA $7EF359 : BRA ++ + + : LDA !WEAPON_LEVEL ++ BNE + : - %TopHalf($7EF452) : RTS diff --git a/itemdowngrade.asm b/itemdowngrade.asm index f4e4aac..ec0b097 100644 --- a/itemdowngrade.asm +++ b/itemdowngrade.asm @@ -76,9 +76,9 @@ JMP .done PHA TYA ; load bomb upgrade item !SUB #$B0 ; convert to bomb level - CMP.l !BOMB_LEVEL : !BGE + ; skip if highest is lower (this is an upgrade) - LDA.l !BOMB_LEVEL : !ADD #$B0 ; convert to item id - TAY : PLA : LDA.l !BOMB_LEVEL ; put bomb level into the thing to write + CMP.l !WEAPON_LEVEL : !BGE + ; skip if highest is lower (this is an upgrade) + LDA.l !WEAPON_LEVEL : !ADD #$B0 ; convert to item id + TAY : PLA : LDA.l !WEAPON_LEVEL ; put bomb level into the thing to write JMP .done + PLA diff --git a/newhud.asm b/newhud.asm index f57d7b6..4c3ea64 100644 --- a/newhud.asm +++ b/newhud.asm @@ -9,7 +9,7 @@ SEP #$30 LDA !INFINITE_BOMBS : BNE .infinite_bombs .finite_bombs LDA.l SpecialWeapons : CMP #$01 : BNE .normal - LDA.l !BOMB_LEVEL : BEQ .no_bombs + LDA.l !WEAPON_LEVEL : BEQ .no_bombs .normal LDA.l $7EF343 ; bombs JSR HudHexToDec2Digit ;requires 8 bit registers! diff --git a/newitems.asm b/newitems.asm index edd661c..895c2e5 100755 --- a/newitems.asm +++ b/newitems.asm @@ -46,6 +46,12 @@ ; #$B4 - L-4 Bombs ; #$B5 - L-5 Bombs ; #$B6 - Progressive Bombs +; #$B7 - L-1 Cane +; #$B8 - L-2 Cane +; #$B9 - L-3 Cane +; #$BA - L-4 Cane +; #$BB - L-5 Cane +; #$BC - Progressive Cane ; #$FE - Server Request (Asychronous Chest) ; #$FF - Null Chest ;-------------------------------------------------------------------------------- @@ -401,10 +407,20 @@ AddReceivedItemExpandedGetItem: LDA $7EF36F : INC : STA $7EF36F ++ JMP .done - + CMP.b #$B1 : !BLT + : CMP.b #$B6 : !BGE + ; Bomb Upgrades - LDA.l SpecialWeapons : CMP #$01 : BNE ++ + + CMP.b #$B1 : !BLT + : CMP.b #$B7 : !BGE + ; Bomb Upgrades + LDA.l SpecialWeapons : CMP #$01 : BNE .done LDA #$01 : STA $7F50C9 ; infinite bombs - ++ + JMP .done + + : CMP.b #$B7 : !BLT + : CMP.b #$BD : !BGE + ; Cane Upgrades + LDA.l SpecialWeapons : CMP #$03 : BEQ .blue_cane + CMP #$04 : BEQ .red_cane + BRA .done + .blue_cane + LDA #$01 : STA $7EF351 + BRA .done + .red_cane + LDA #$01 : STA $7EF350 + BRA .done BRA .done + .done @@ -516,7 +532,7 @@ AddReceivedItemExpanded: + : CMP.b #$00 : BNE + ; No Bow LDA.b #$3A : STA $02D8 : JMP .done + ; Any Bow - LDA.b #$3B : STA $02D8 : BRA .done + LDA.b #$3B : STA $02D8 : JMP .done ++ : CMP.b #$65 : BNE ++ ; Progressive Bow 2 LDA.l !INVENTORY_SWAP_2 : ORA #$20 : STA.l !INVENTORY_SWAP_2 BRA -- @@ -527,13 +543,13 @@ AddReceivedItemExpanded: JSL.l GetRNGItemSingle : STA $02D8 XBA : JSR.w MarkRNGItemSingle LDA #$FF : STA !LOCK_IN ; clear lock-in - BRA .done + JMP .done ++ : CMP.b #$63 : BNE ++ ; RNG Item (Multi) JSL.l GetRNGItemMulti : STA $02D8 LDA #$FF : STA !LOCK_IN ; clear lock-in - BRA .done + JMP .done ++ : CMP.b #$B6 : BNE ++ ; Progressive Bombs - LDA !BOMB_LEVEL + LDA !WEAPON_LEVEL CMP.b #$00 : BNE + ; have no Bombs LDA.b #$B1 : STA $02D8 : JMP .done + : CMP.b #$01 : BNE + ; have L-1 Bombs @@ -544,6 +560,18 @@ AddReceivedItemExpanded: LDA.b #$B4 : STA $02D8 : JMP .done + ; Everything Else LDA.b #$B5 : STA $02D8 : JMP .done + ++ : CMP.b #$BC : BNE ++ ; Progressive Cane + LDA !WEAPON_LEVEL + CMP.b #$00 : BNE + ; have no Cane + LDA.b #$B7 : STA $02D8 : JMP .done + + : CMP.b #$01 : BNE + ; have L-1 Cane + LDA.b #$B8 : STA $02D8 : JMP .done + + : CMP.b #$02 : BNE + ; have L-2 Cane + LDA.b #$B9 : STA $02D8 : JMP .done + + : CMP.b #$03 : BNE + ; have L-3 Cane + LDA.b #$BA : STA $02D8 : JMP .done + + ; Everything Else + LDA.b #$BB : STA $02D8 : JMP .done ++ .done PLX : PLA @@ -554,10 +582,6 @@ AddReceivedItemExpanded: ;-------------------------------------------------------------------------------- ;DATA AddReceivedItemExpanded { -; This is a temporary measure for Fish to have consistent addresses -warnpc $A08800 -org $A08800 - .y_offsets db -5, -5, -5, -5, -5, -4, -4, -5 db -5, -4, -4, -4, -2, -4, -4, -4 @@ -594,7 +618,8 @@ org $A08800 db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Free Small Key db -4 ; reserved for bee traps db -4, -4, -4, -4, -4, -4 ; Bomb Upgrades - db -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused + db -4, -4, -4, -4, -4, -4 ; Cane Upgrades + db -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 @@ -635,8 +660,9 @@ org $A08800 ;db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; *EVENT* db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Small Key db 0 ; reserved for bee traps - db 0, 0, 0, 0, 0, 0; Bomb Upgrades - db 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused + db 0, 0, 0, 0, 0, 0 ; Bomb Upgrades + db 4, 4, 4, 4, 4, 4 ; Cane Upgrades + db 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 @@ -682,7 +708,8 @@ org $A08800 ;db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; *EVENT* db $49 ; reserved for bee traps db $13, $13, $13, $13, $13, $13 ; Bomb Upgrades - db $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused + db $07, $07, $07, $07, $07, $07 ; Cane Upgrades + db $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 @@ -722,8 +749,9 @@ org $A08800 db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Free Big Key db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; Free Small Key db $02 ; reserved for bee traps - db $02, $02, $02, $02, $02, $02; Bomb Upgrades - db $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused + db $02, $02, $02, $02, $02, $02 ; Bomb Upgrades + db $00, $00, $00, $00, $00, $00 ; Cane Upgrades + db $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 @@ -765,7 +793,8 @@ org $A08800 db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Small Key db 4 ; reserved for bee traps db 4, 2, 1, 5, 5, 5 ; Bomb Upgrades - db 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused + db 5, 5, 5, 5, 5, 5 ; Cane Upgrades + db 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 @@ -808,7 +837,8 @@ org $A08800 dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Free Small Key dw $F36A ; reserved for bee traps dw $F38F, $F38F, $F38F, $F38F, $F38F, $F38F ; Bomb Upgrades - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused + dw $F38F, $F38F, $F38F, $F38F, $F38F, $F38F ; Cane Upgrades + dw $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 @@ -853,7 +883,8 @@ org $A08800 db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Free Small Key db $FF ; reserved for bee traps db $01, $02, $03, $04, $05, $FF ; Bomb Upgrades - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused + db $01, $02, $03, $04, $05, $FF ; Cane Upgrades + db $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 @@ -941,7 +972,8 @@ Link_ReceiveItemAlternatesExpanded: db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Free Small Key db -1 ; reserved for bee traps db -1, -1, -1, -1, -1, -1 ; Bomb Upgrades - db -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused + db -1, -1, -1, -1, -1, -1 ; Cane Upgrades + db -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 8428df5..69f8020 100644 --- a/special_weapons.asm +++ b/special_weapons.asm @@ -11,16 +11,34 @@ DamageClassCalc: RTL + PLA - CMP #$01 : BEQ .cane - CMP #$2C : BEQ .cane - CMP #$31 : BEQ .cane + CMP #$01 : BEQ .red_cane + CMP #$2C : BEQ .red_cane + CMP #$31 : BEQ .blue_cane CMP #$0C : BEQ .beam BRA .not_cane_or_beam -.cane +.red_cane PHA - LDA SpecialWeapons : CMP #$01 : BNE .normal + LDA SpecialWeapons : CMP #$01 : BEQ .cane_immune + LDA SpecialWeapons : CMP #$03 : BEQ .cane_immune + LDA SpecialWeapons : CMP #$04 : BEQ .special_cane + BRA .normal +.blue_cane + PHA + LDA SpecialWeapons : CMP #$01 : BEQ .cane_immune + LDA SpecialWeapons : CMP #$03 : BEQ .special_cane + LDA SpecialWeapons : CMP #$04 : BEQ .cane_immune + BRA .normal +.cane_immune LDA $0E20, X : CMP.b #$1E : BEQ .normal ; crystal switch PLA + BRA .impervious +.special_cane + LDA !WEAPON_LEVEL + LDA $0E20, X : CMP.b #$D6 : BEQ .unstunned_ganon + CMP.b #$D7 : BEQ .stunned_ganon + CMP.b #$88 : BEQ .mothula + PLA + BRA .special_level .impervious LDA #$FF RTL @@ -35,35 +53,35 @@ DamageClassCalc: .not_cane_or_beam CMP #$07 : BNE .no_change LDA SpecialWeapons : CMP #$01 : BNE .normal_bombs - LDA !BOMB_LEVEL : BEQ .normal_bombs + LDA !WEAPON_LEVEL : BEQ .normal_bombs LDA $0E20, X : CMP.b #$D6 : BEQ .unstunned_ganon CMP.b #$D7 : BEQ .stunned_ganon CMP.b #$88 : BEQ .mothula CMP.b #$91 : BEQ .stalfos_knight CMP.b #$92 : BEQ .helmasaur_king -.bomb_level - LDA !BOMB_LEVEL +.special_level + LDA !WEAPON_LEVEL BRA .done .mothula - LDA !BOMB_LEVEL + LDA !WEAPON_LEVEL CMP #$04 : !BGE .fix_mothula BRA .done .fix_mothula LDA #$03 BRA .done .stalfos_knight - LDA !StalfosBombDamage : BEQ .bomb_level + LDA !StalfosBombDamage : BEQ .special_level LDA #$08 BRA .done .helmasaur_king - LDA $0DB0, X : CMP #$03 : !BGE .bomb_level + LDA $0DB0, X : CMP #$03 : !BGE .special_level LDA #$08 BRA .done .unstunned_ganon LDA $04C5 : CMP.b #$02 : BNE .impervious LDA $0EE0, X : BNE .impervious LDA #$34 : STA $0EE0, X ; give the poor pig some iframes - BRA .bomb_level + BRA .special_level .stunned_ganon LDA $0EE0, X : BNE .impervious LDA #$34 : STA $0EE0, X ; give the poor pig some iframes @@ -109,17 +127,35 @@ Utility_CheckAncillaOverlapWithSprite: CLC RTL .giant_moldorm - LDA $0C4A, X : CMP #$07 : BNE .ignore_collision ; don't collide with non-bombs - LDA.l SpecialWeapons : CMP #$01 : BNE .ignore_collision 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 + BRA .ignore_collision ; don't collide with non-bombs +++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++ + LDA $0C4A, X : CMP #$31 : BEQ .check_collision_moldorm + BRA .ignore_collision ; don't collide with non-byrna +++ : LDA.l SpecialWeapons : CMP #$04 : BNE .ignore_collision + LDA $0C4A, X : CMP #$01 : BEQ .check_collision_moldorm + LDA $0C4A, X : CMP #$2C : BEQ .check_collision_moldorm + BRA .ignore_collision ; don't collide with non-somaria +.check_collision_moldorm JSR SetUpMoldormHitbox JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG RTL .trinexx - LDA $0C4A, X : CMP #$07 : BNE .ignore_collision ; don't collide with non-bombs - LDA.l SpecialWeapons : CMP #$01 : BNE .ignore_collision + LDA.l SpecialWeapons : CMP #$01 : BNE ++ + LDA $0C4A, X : CMP #$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 + BRA .ignore_collision ; don't collide with non-byrna +++ : LDA.l SpecialWeapons : CMP #$04 : BNE .ignore_collision + LDA $0C4A, X : CMP #$01 : BEQ .check_collision_trinexx + LDA $0C4A, X : CMP #$2C : BEQ .check_collision_trinexx + JMP .ignore_collision ; don't collide with non-somaria +.check_collision_trinexx JSR SetUpTrinexxHitbox JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG RTL @@ -193,8 +229,17 @@ SetUpMoldormHitbox: ;-------------------------------------------------------------------------------- ; start with X = ancilla index, Y = sprite index Utility_CheckHelmasaurKingCollision: - LDA $0C4A, X : CMP #$07 : BNE .normal ; normal behavior with non-bombs - LDA.l SpecialWeapons : CMP #$01 : BNE .normal + LDA.l SpecialWeapons : CMP #$01 : BNE ++ + LDA $0C4A, X : CMP #$07 : BEQ .collide + BRA .normal ; normal behavior with non-bombs +++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++ + LDA $0C4A, X : CMP #$31 : BEQ .collide + BRA .normal ; normal behavior with non-byrna +++ : LDA.l SpecialWeapons : CMP #$04 : BNE .normal + LDA $0C4A, X : CMP #$01 : BEQ .collide + LDA $0C4A, X : CMP #$2C : BEQ .collide + BRA .normal ; normal behavior with non-somaria +.collide CLC RTL .normal @@ -211,34 +256,42 @@ Utility_CheckHammerHelmasaurKingMask: RTL ;-------------------------------------------------------------------------------- Utility_CheckImpervious: - LDA $0E20, X : CMP.b #$CB : BEQ .trinexx + LDA $0E20, X : CMP.b #$CB : BNE .normal +.trinexx + LDA SpecialWeapons : CMP #$01 : BEQ + : CMP #$03 : BEQ + : CMP #$04 : BEQ + + BRA .normal ++ + LDA $0301 : AND.b #$0A : BNE .impervious ; impervious to hammer + 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 JSL Ganon_CheckHammerVulnerability : BCS .not_impervious - LDA.l SpecialWeapons : CMP #$01 : BNE .not_impervious + LDA SpecialWeapons : CMP #$01 : BEQ + : CMP #$03 : BEQ + : CMP #$04 : BEQ + + BRA .not_impervious ++ LDA $0E20, X : CMP.b #$1E : BEQ .not_impervious ; crystal switch CMP.b #$40 : BEQ .not_impervious ; aga barrier BRA .impervious -.trinexx - LDA SpecialWeapons : CMP #$01 : BNE .normal - LDA $0301 : AND.b #$0A : BNE .impervious ; impervious to hammer - BRA .not_impervious -.sidenexx - LDA $0CAA, X : AND.b #$04 : BEQ .vulnerable - LDA SpecialWeapons : CMP #$01 : BNE .not_impervious - LDA $0CF2 : CMP #$06 : !BLT .impervious ; swords are ineffective - BRA .not_impervious -.vulnerable - LDA SpecialWeapons : CMP #$01 : BNE .not_impervious - LDA $0CF2 : CMP #$06 : !BGE .impervious ; non-swords are ineffective - BRA .not_impervious .not_impervious LDA #$00 : RTL .impervious LDA #$01 : RTL +.sidenexx + LDA $0CAA, X : AND.b #$04 : BEQ .vulnerable + LDA SpecialWeapons : CMP #$01 : BEQ + : CMP #$03 : BEQ + : CMP #$04 : BEQ + + BRA .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 + + BRA .not_impervious ++ + LDA $0CF2 : CMP #$06 : !BGE .impervious ; non-swords are ineffective + BRA .not_impervious ; returns nonzero A if impervious ;-------------------------------------------------------------------------------- !SPRITE_INITIALIZED_SEGMENTED = "$1DD6D1" @@ -246,6 +299,8 @@ Utility_CheckImpervious: ;-------------------------------------------------------------------------------- AllowBombingMoldorm: LDA SpecialWeapons : CMP #$01 : BEQ .no_disable_projectiles + LDA SpecialWeapons : CMP #$03 : BEQ .no_disable_projectiles + LDA SpecialWeapons : CMP #$04 : BEQ .no_disable_projectiles INC $0BA0, X .no_disable_projectiles JSL !SPRITE_INITIALIZED_SEGMENTED @@ -256,6 +311,8 @@ AllowBombingBarrier: 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 + LDA SpecialWeapons : CMP #$03 : BEQ .no_disable_projectiles + LDA SpecialWeapons : CMP #$04 : BEQ .no_disable_projectiles .disable_projectiles INC $0BA0, X .no_disable_projectiles @@ -264,7 +321,7 @@ AllowBombingBarrier: DrawBombInMenu: JSL LoadBombCount16 : AND.w #$00FF : BEQ .noBombs LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BNE .vanillaBombs - LDA.l !BOMB_LEVEL : AND.w #$00FF : BEQ .noBombs : STA $02 + LDA.l !WEAPON_LEVEL : AND.w #$00FF : BEQ .noBombs : STA $02 LDA.w #$FC81 : STA $04 BRA .done .vanillaBombs @@ -278,7 +335,9 @@ DrawBombInMenu: RTL ;-------------------------------------------------------------------------------- DrawSwordInMenu: - LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BEQ .bombSword + LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BEQ .specialSword + LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0003 : BEQ .specialSword + LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0004 : BEQ .specialSword LDA $7EF359 : AND.w #$00FF : CMP.w #$00FF : BEQ .noSword .hasSword STA $02 @@ -288,15 +347,15 @@ DrawSwordInMenu: LDA.w #$0000 : STA $02 LDA.w #$F859 : STA $04 RTL -.bombSword - LDA !BOMB_LEVEL : AND.w #$00FF : STA $02 +.specialSword + LDA !WEAPON_LEVEL : AND.w #$00FF : STA $02 LDA.w #$FC51 : STA $04 RTL ;-------------------------------------------------------------------------------- DrawBombInYBox: CPX.w #$0004 : BNE .done LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BNE .vanilla - LDA !BOMB_LEVEL : AND.w #$00FF : CLC : ADC.w #$00BD : BRA .done + LDA !WEAPON_LEVEL : AND.w #$00FF : CLC : ADC.w #$00BD : BRA .done .vanilla LDA.w #$0001 .done @@ -313,7 +372,7 @@ DrawBombOnHud: PLB LDA.l SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BNE .regularBombs - LDA.l !BOMB_LEVEL : AND.w #$00FF : ASL #2 : TAX + LDA.l !WEAPON_LEVEL : AND.w #$00FF : ASL #2 : TAX LDA.l BombIcon, X : STA.l $7EC71A LDA.l BombIcon+2, X : STA.l $7EC71C .regularBombs @@ -322,13 +381,17 @@ DrawBombOnHud: BombSpriteColor: db $04, $08, $04, $02, $0A, $0A SetBombSpriteColor: + LDA.l SpecialWeapons : CMP.b #$01 : BNE .normal PHX - LDA.l !BOMB_LEVEL + LDA.l !WEAPON_LEVEL TAX LDA.l BombSpriteColor, X STA $0B PLX RTL +.normal + LDA #$04 : STA $0B + RTL ;-------------------------------------------------------------------------------- StoreSwordDamage: LDA.l SpecialWeapons : CMP #$02 : BEQ + diff --git a/swordswap.asm b/swordswap.asm index 0198059..58b53b0 100644 --- a/swordswap.asm +++ b/swordswap.asm @@ -62,6 +62,8 @@ LookupDamageLevel: + LDA SpecialWeapons : CMP #$01 : BEQ .bomb_table CMP #$02 : BEQ .pseudo_table + CMP #$03 : BEQ .bomb_table + CMP #$04 : BEQ .bomb_table %LookupDamageSubclass(Damage_Table) : RTL .bomb_table %LookupDamageSubclass(Damage_Table_Bombs) : RTL @@ -128,10 +130,14 @@ CheckTabletSword: LDA $7EF34B : BEQ + ; check for hammer LDA.b #$02 : RTL + - LDA.l SpecialWeapons : CMP #$01 : BNE + - LDA !BOMB_LEVEL : CMP #$02 : !BLT + ; check for master bombs + LDA.l SpecialWeapons : CMP #$01 : BEQ .check_special + LDA.l SpecialWeapons : CMP #$03 : BEQ .check_special + LDA.l SpecialWeapons : CMP #$04 : BEQ .check_special + BRA .normal + .check_special + LDA !WEAPON_LEVEL : CMP #$02 : !BLT + ; check for master bombs LDA.b #$02 : RTL - + + .normal LDA $7EF359 ; get actual sword value RTL ;================================================================================ diff --git a/tables.asm b/tables.asm index b6a781c..35f751d 100644 --- a/tables.asm +++ b/tables.asm @@ -1425,6 +1425,11 @@ db $04 ;B4 - L-4 Bombs ;B5 - L-5 Bombs ;B6 - Progressive Bombs +;B7 - L-1 Cane +;B8 - L-2 Cane +;B9 - L-3 Cane +;BA - L-4 Cane +;BB - L-5 Cane ;================================================================================ ;;Residual Portal ;org $0283E0 ; PC 0x103E0 (Bank02.asm:816) (BNE) diff --git a/utilities.asm b/utilities.asm index 0544d7f..d9d31ca 100644 --- a/utilities.asm +++ b/utilities.asm @@ -149,7 +149,8 @@ RTL db $49 ; reserved for bee traps db $13, $13, $13, $13, $13, $13 ; Bomb Upgrades - db $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused + db $07, $07, $07, $07, $07, $07 ; Cane Upgrades + db $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 @@ -233,7 +234,7 @@ RTL + ; Any Bow LDA.b #$02 : RTL ++ : CMP.b #$F7 : BNE ++ ; Progressive Bombs - LDA !BOMB_LEVEL + LDA !WEAPON_LEVEL CMP.b #$00 : BNE + ; No Bombs LDA.b #$08 : RTL + : CMP.b #$01 : BNE + ; L1 Bombs @@ -289,7 +290,8 @@ RTL db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Free Small Key db $08 ; reserved for bee traps db $08, $04, $02, $0A, $0A, $F7 ; Bomb Upgrades - db $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused + db $0A, $0A, $0A, $0A, $0A, $0A ; Cane Upgrades + db $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 @@ -345,12 +347,12 @@ IsNarrowSprite: ++ CMP.b #$63 : BNE ++ ; RNG Item (Multi) JSL.l GetRNGItemMulti ++ CMP.b #$64 : BEQ + ; Progressive Bow - CMP.b #$65 : BNE .continue ; Progressive Bow (alt) - + : LDA $7EF340 : INC : LSR - CMP.l ProgressiveBowLimit : !BLT + + CMP.b #$65 : BNE .continue ; Progressive Bow (alt) + + : LDA $7EF340 : INC : LSR + CMP.l ProgressiveBowLimit : !BLT + LDA.l ProgressiveBowReplacement JSL.l IsNarrowSprite - JMP .done + JMP .done .continue ;-------- diff --git a/zelda.asm b/zelda.asm index 9ce2e44..939874e 100644 --- a/zelda.asm +++ b/zelda.asm @@ -21,7 +21,7 @@ EndRainState: CMP #$10 : BNE + : STA !INFINITE_ARROWS : + LDA.l SpecialWeapons : CMP #$01 : BNE + - LDA.l !BOMB_LEVEL : BEQ + + LDA.l !WEAPON_LEVEL : BEQ + LDA #$01 : STA !INFINITE_BOMBS + LDA.b #$02 : STA $7EF3C5 ; end rain state