Move non-swords not damaging enemies to high bit of special weapons

This commit is contained in:
2023-09-04 14:46:34 -05:00
parent 52c3033282
commit 826f6f6795
12 changed files with 116 additions and 155 deletions

View File

@@ -144,7 +144,7 @@ SetEscapeAssist:
LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA.l InfiniteArrows : + LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA.l InfiniteArrows : +
++ ++
LDA.l SpecialWeapons : CMP #$01 : BNE + LDA.l SpecialWeapons : AND.b #$7F : CMP #$01 : BNE +
LDA.l SpecialWeaponLevel : BEQ + LDA.l SpecialWeaponLevel : BEQ +
LDA #$01 : STA InfiniteBombs LDA #$01 : STA InfiniteBombs
+ +

View File

@@ -290,7 +290,7 @@ DialogGanon2:
LDA.w #$018D : JMP .done LDA.w #$018D : JMP .done
+ +
LDA.l GanonVulnerabilityItem : AND #$00FF : BNE .special_item 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 CMP.w #$0001 : BEQ .bombs ; bombs if special bomb mode
.silver_arrows .silver_arrows
LDA.l BowTracking LDA.l BowTracking

View File

@@ -308,7 +308,7 @@ DrawPlayerFileShared:
%fs_drawBottle(EquipmentSRAM+$1F,9,23) %fs_drawBottle(EquipmentSRAM+$1F,9,23)
; Sword ; 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 + LDA.l EquipmentSRAM+$19 : AND.w #$00FF : BNE +
%fs_drawItemGray(3,26,FileSelectItems_fighters_sword) %fs_drawItemGray(3,26,FileSelectItems_fighters_sword)
JMP ++ JMP ++
@@ -650,7 +650,7 @@ FileSelectDrawHudBar:
LDA.b Scrap06 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,11) LDA.b Scrap06 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,11)
LDA.b Scrap07 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,12) LDA.b Scrap07 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,12)
LDA.l SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BEQ .colorBombs LDA.l SpecialWeapons : AND.w #$007F : CMP.w #$0001 : BEQ .colorBombs
LDA.w #$02CB|!FS_COLOR_BLUE : %fs_draw16x8(0,14) LDA.w #$02CB|!FS_COLOR_BLUE : %fs_draw16x8(0,14)
LDA.l BombsEquipmentSRAM : AND.w #$00FF LDA.l BombsEquipmentSRAM : AND.w #$00FF
JSL.l HUDHex2Digit_Long JSL.l HUDHex2Digit_Long

View File

@@ -80,14 +80,14 @@ GetItemDamageValue:
CPX.b #$3C : BEQ .hookshot CPX.b #$3C : BEQ .hookshot
CPX.b #$3D : BEQ .hookshot CPX.b #$3D : BEQ .hookshot
LDA.l SpecialWeapons : CMP #$02 : BNE .normal LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$02 : BNE .normal
TXA : AND #$78 : CMP #$28 : BNE .normal TXA : AND.b #$78 : CMP.b #$28 : BNE .normal
LDA $0DB8F1, X : BEQ .noDamage LDA.l $8DB8F1, X : BEQ .noDamage
LDA #$01 LDA.b #$01
RTL RTL
.normal .normal
LDA.l $0DB8F1, X ; what we wrote over LDA.l $8DB8F1, X ; what we wrote over
RTL RTL
.boomerang .boomerang
LDA.l StunItemAction : AND.b #$01 : BNE .normal LDA.l StunItemAction : AND.b #$01 : BNE .normal

View File

@@ -2467,10 +2467,6 @@ org $8882E8 ; Bank08.asm@456 (LDA $0DB0, Y : CMP.b #$03)
JSL Utility_CheckHelmasaurKingCollision JSL Utility_CheckHelmasaurKingCollision
NOP NOP
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $9E838C ; sprite_helmasaur_king.asm@522 (LDA $0301 : AND.b #$0A)
JSL Utility_CheckHammerHelmasaurKingMask
NOP
;--------------------------------------------------------------------------------
org $86ED94 ; Bank06.asm@4866 (LDA $0E60, X : AND.b #$40) org $86ED94 ; Bank06.asm@4866 (LDA $0E60, X : AND.b #$40)
JSL Utility_CheckImpervious JSL Utility_CheckImpervious
NOP NOP

View File

@@ -315,11 +315,11 @@ IncrementBossSword:
LDA.l StatsLocked : BNE .done LDA.l StatsLocked : BNE .done
.start .start
LDA.l SpecialWeapons : CMP.b #$01 : BEQ .check_special_weapon LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .check_special_weapon
CMP.b #$03 : BEQ .check_special_weapon CMP.b #$03 : BEQ .check_special_weapon
CMP.b #$04 : BEQ .check_special_weapon CMP.b #$04 : BEQ .check_special_weapon
CMP.b #$05 : BEQ .check_special_weapon CMP.b #$05 : BEQ .check_special_weapon
CMP.b #$08 : BEQ .check_special_weapon CMP.b #$08 : BEQ .check_special_weapon
.check_sword .check_sword
LDA.l SwordEquipment : CMP.b #$FF : BNE + LDA.l SwordEquipment : CMP.b #$FF : BNE +

View File

@@ -16,7 +16,7 @@ NewDrawHud:
;================================================================================ ;================================================================================
NewHUD_DrawBombs: NewHUD_DrawBombs:
LDA.l InfiniteBombs : BNE .infinite LDA.l InfiniteBombs : BNE .infinite
LDA.l SpecialWeapons : CMP #$01 : BNE .normal LDA.l SpecialWeapons : AND.b #$7F : CMP #$01 : BNE .normal
LDA.l SpecialWeaponLevel : BEQ .no_bombs LDA.l SpecialWeaponLevel : BEQ .no_bombs
.infinite .infinite

View File

@@ -664,20 +664,20 @@ ItemBehavior:
.prog_weapon .prog_weapon
LDA.l SpecialWeaponLevel : INC : STA.l SpecialWeaponLevel LDA.l SpecialWeaponLevel : INC : STA.l SpecialWeaponLevel
LDA.l SpecialWeapons : CMP #$01 : BEQ ..bombs LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ ..bombs
CMP #$03 : BEQ ..byrna CMP.b #$03 : BEQ ..byrna
CMP #$04 : BEQ ..somaria CMP.b #$04 : BEQ ..somaria
CMP #$08 : BEQ ..bug_net CMP.b #$08 : BEQ ..bug_net
RTS RTS
..bombs ..bombs
LDA #$01 : STA.l InfiniteBombs : RTS LDA.b #$01 : STA.l InfiniteBombs : RTS
INC.w UpdateHUD INC.w UpdateHUD
..byrna ..byrna
LDA #$01 : STA.l ByrnaEquipment : RTS LDA.b #$01 : STA.l ByrnaEquipment : RTS
..somaria ..somaria
LDA #$01 : STA.l SomariaEquipment : RTS LDA.b #$01 : STA.l SomariaEquipment : RTS
..bug_net ..bug_net
LDA #$01 : STA.l BugNetEquipment : RTS LDA.b #$01 : STA.l BugNetEquipment : RTS
ResolveReceipt: ResolveReceipt:
PHA : PHX PHA : PHX

View File

@@ -10,7 +10,7 @@ DamageClassCalc:
JSL Ganon_CheckAncillaVulnerability JSL Ganon_CheckAncillaVulnerability
RTL 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 PLA
CMP #$01 : BEQ .red_cane CMP #$01 : BEQ .red_cane
CMP #$2C : BEQ .red_cane CMP #$2C : BEQ .red_cane
@@ -19,19 +19,15 @@ DamageClassCalc:
BRA .not_cane_or_beam BRA .not_cane_or_beam
.red_cane .red_cane
PHA PHA
LDA SpecialWeapons : CMP #$01 : BEQ .cane_immune LDA SpecialWeapons : AND.b #$7F : CMP.b #$04 : BEQ .special_cane
CMP #$03 : BEQ .cane_immune CMP.b #$05 : BEQ .special_cane
CMP #$04 : BEQ .special_cane LDA SpecialWeapons : AND.b #$80 : BNE .cane_immune
CMP #$05 : BEQ .special_cane
CMP #$08 : BEQ .cane_immune
BRA .normal BRA .normal
.blue_cane .blue_cane
PHA PHA
LDA SpecialWeapons : CMP #$01 : BEQ .cane_immune LDA SpecialWeapons : AND.b #$7F : CMP.b #$03 : BEQ .special_cane
CMP #$03 : BEQ .special_cane CMP.b #$05 : BEQ .special_cane
CMP #$04 : BEQ .cane_immune LDA SpecialWeapons : AND.b #$80 : BNE .cane_immune
CMP #$05 : BEQ .special_cane
CMP #$08 : BEQ .cane_immune
BRA .normal BRA .normal
.cane_immune .cane_immune
LDA $0E20, X : CMP.b #$1E : BEQ .normal ; crystal switch LDA $0E20, X : CMP.b #$1E : BEQ .normal ; crystal switch
@@ -47,7 +43,7 @@ DamageClassCalc:
RTL RTL
.beam .beam
PHA PHA
LDA SpecialWeapons : CMP #$02 : BNE .normal LDA SpecialWeapons : AND.b #$7F : CMP.b #$02 : BNE .normal
PLA PLA
LDA #$05 LDA #$05
RTL RTL
@@ -55,7 +51,7 @@ DamageClassCalc:
PLA PLA
.not_cane_or_beam .not_cane_or_beam
CMP #$07 : BNE .no_change 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 SpecialWeaponLevel : BEQ .normal_bombs
LDA $0E20, X : CMP.b #$D6 : BEQ .unstunned_ganon LDA $0E20, X : CMP.b #$D6 : BEQ .unstunned_ganon
CMP.b #$D7 : BEQ .stunned_ganon CMP.b #$D7 : BEQ .stunned_ganon
@@ -105,7 +101,7 @@ DamageClassCalc:
RTL RTL
.actual_silver_arrows .actual_silver_arrows
LDA $0E20, X : CMP.b #$D7 : BNE + 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 #$20 : STA $0F10, X
+ +
LDA #$09 LDA #$09
@@ -127,21 +123,21 @@ Utility_CheckAncillaOverlapWithSprite:
JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG
RTL RTL
.giant_moldorm .giant_moldorm
LDA $0E10, Y : BNE .ignore_collision ; Moldy can have little a I-Frames, as a treat LDA.w $0E10, Y : BNE .ignore_collision ; Moldy can have little a I-Frames, as a treat
LDA.l SpecialWeapons : CMP #$01 : BNE ++ LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE ++
LDA $0C4A, X : CMP #$07 : BEQ .check_collision_moldorm LDA.w $0C4A, X : CMP.b #$07 : BEQ .check_collision_moldorm
BRA .ignore_collision ; don't collide with non-bombs BRA .ignore_collision ; don't collide with non-bombs
++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++ ++ : CMP.b #$03 : BNE ++
LDA $0C4A, X : CMP #$31 : BEQ .check_collision_moldorm LDA.w $0C4A, X : CMP.b #$31 : BEQ .check_collision_moldorm
BRA .ignore_collision ; don't collide with non-byrna BRA .ignore_collision ; don't collide with non-byrna
++ : LDA.l SpecialWeapons : CMP #$04 : BNE ++ ++ : CMP.b #$04 : BNE ++
LDA $0C4A, X : CMP #$01 : BEQ .check_collision_moldorm LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_moldorm
CMP #$2C : BEQ .check_collision_moldorm CMP.b #$2C : BEQ .check_collision_moldorm
BRA .ignore_collision ; don't collide with non-somaria BRA .ignore_collision ; don't collide with non-somaria
++ : LDA.l SpecialWeapons : CMP #$05 : BNE .ignore_collision ++ : CMP.b #$05 : BNE .ignore_collision
LDA $0C4A, X : CMP #$01 : BEQ .check_collision_moldorm LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_moldorm
CMP #$2C : BEQ .check_collision_moldorm CMP.b #$2C : BEQ .check_collision_moldorm
CMP #$31 : BEQ .check_collision_moldorm CMP.b #$31 : BEQ .check_collision_moldorm
BRA .ignore_collision ; don't collide with non-canes BRA .ignore_collision ; don't collide with non-canes
.check_collision_moldorm .check_collision_moldorm
@@ -154,20 +150,20 @@ Utility_CheckAncillaOverlapWithSprite:
RTL RTL
.trinexx .trinexx
LDA.l SpecialWeapons : CMP #$01 : BNE ++ LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE ++
LDA $0C4A, X : CMP #$07 : BEQ .check_collision_trinexx LDA.w $0C4A, X : CMP.b #$07 : BEQ .check_collision_trinexx
BRA .ignore_collision ; don't collide with non-bombs BRA .ignore_collision ; don't collide with non-bombs
++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++ ++ : CMP.b #$03 : BNE ++
LDA $0C4A, X : CMP #$31 : BEQ .check_collision_trinexx LDA.w $0C4A, X : CMP.b #$31 : BEQ .check_collision_trinexx
JMP .ignore_collision ; don't collide with non-byrna JMP .ignore_collision ; don't collide with non-byrna
++ : LDA.l SpecialWeapons : CMP #$04 : BNE ++ ++ : CMP.b #$04 : BNE ++
LDA $0C4A, X : CMP #$01 : BEQ .check_collision_trinexx LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_trinexx
CMP #$2C : BEQ .check_collision_trinexx CMP.b #$2C : BEQ .check_collision_trinexx
JMP .ignore_collision ; don't collide with non-somaria JMP .ignore_collision ; don't collide with non-somaria
++ : LDA.l SpecialWeapons : CMP #$05 : BNE .ignore_collision ++ : CMP #$05 : BNE .ignore_collision
LDA $0C4A, X : CMP #$01 : BEQ .check_collision_trinexx LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_trinexx
CMP #$2C : BEQ .check_collision_trinexx CMP.b #$2C : BEQ .check_collision_trinexx
CMP #$31 : BEQ .check_collision_trinexx CMP.b #$31 : BEQ .check_collision_trinexx
JMP .ignore_collision ; don't collide with non-canes JMP .ignore_collision ; don't collide with non-canes
.check_collision_trinexx .check_collision_trinexx
@@ -244,46 +240,34 @@ SetUpMoldormHitbox:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; start with X = ancilla index, Y = sprite index ; start with X = ancilla index, Y = sprite index
Utility_CheckHelmasaurKingCollision: Utility_CheckHelmasaurKingCollision:
LDA.l SpecialWeapons : CMP #$01 : BNE ++ LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE ++
LDA $0C4A, X : CMP #$07 : BEQ .collide LDA.w $0C4A, X : CMP.b #$07 : BEQ .collide
BRA .normal ; normal behavior with non-bombs BRA .normal ; normal behavior with non-bombs
++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++ ++ : CMP.b #$03 : BNE ++
LDA $0C4A, X : CMP #$31 : BEQ .collide LDA.w $0C4A, X : CMP.b #$31 : BEQ .collide
BRA .normal ; normal behavior with non-byrna BRA .normal ; normal behavior with non-byrna
++ : LDA.l SpecialWeapons : CMP #$04 : BNE ++ ++ : CMP.b #$04 : BNE ++
LDA $0C4A, X : CMP #$01 : BEQ .collide LDA.w $0C4A, X : CMP.b #$01 : BEQ .collide
CMP #$2C : BEQ .collide CMP.b #$2C : BEQ .collide
BRA .normal ; normal behavior with non-somaria BRA .normal ; normal behavior with non-somaria
++ : LDA.l SpecialWeapons : CMP #$05 : BNE .normal ++ : CMP.b #$05 : BNE .normal
LDA $0C4A, X : CMP #$01 : BEQ .collide LDA.w $0C4A, X : CMP.b #$01 : BEQ .collide
CMP #$2C : BEQ .collide CMP.b #$2C : BEQ .collide
CMP #$31 : BEQ .collide CMP.b #$31 : BEQ .collide
BRA .normal ; normal behavior with non-canes BRA .normal ; normal behavior with non-canes
.collide .collide
CLC CLC
RTL RTL
.normal .normal
LDA $0DB0, Y : CMP.b #$03 LDA.w $0DB0, Y : CMP.b #$03
RTL RTL
; returns carry set if there is collision immunity ; 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: Utility_CheckImpervious:
LDA $0E20, X : CMP.b #$CB : BNE .normal LDA $0E20, X : CMP.b #$CB : BNE .normal
.trinexx .trinexx
LDA SpecialWeapons : CMP.b #$01 : BEQ + LDA SpecialWeapons : AND.b #$7F : CMP.b #$06 : BEQ .check_sidenexx
CMP.b #$03 : BEQ + LDA SpecialWeapons : AND.b #$80 : BNE +
CMP.b #$04 : BEQ +
CMP.b #$05 : BEQ +
CMP.b #$06 : BEQ .check_sidenexx
CMP.b #$08 : BEQ +
BRA .normal BRA .normal
+ +
LDA $0301 : AND.b #$0A : BNE .impervious ; impervious to hammer 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 $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 LDA $0301 : AND.b #$0A : BEQ .not_impervious ; normal behavior if not hammer
JSL Ganon_CheckHammerVulnerability : BCS .not_impervious JSL Ganon_CheckHammerVulnerability : BCS .not_impervious
LDA SpecialWeapons : CMP #$01 : BEQ + LDA SpecialWeapons : AND.b #$80 : BEQ .not_impervious
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 LDA $0E20, X : CMP.b #$1E : BEQ .not_impervious ; crystal switch
CMP.b #$40 : BEQ .not_impervious ; aga barrier CMP.b #$40 : BEQ .not_impervious ; aga barrier
BRA .impervious BRA .impervious
@@ -313,23 +291,11 @@ Utility_CheckImpervious:
LDA #$01 : RTL LDA #$01 : RTL
.sidenexx .sidenexx
LDA $0CAA, X : AND.b #$04 : BEQ .vulnerable LDA $0CAA, X : AND.b #$04 : BEQ .vulnerable
LDA SpecialWeapons : CMP #$01 : BEQ + LDA.l SpecialWeapons : AND.b #$80 : BEQ .not_impervious
CMP #$03 : BEQ +
CMP #$04 : BEQ +
CMP #$05 : BEQ +
CMP #$08 : BEQ +
BRA .not_impervious
+
LDA $0CF2 : CMP #$06 : !BLT .impervious ; swords are ineffective LDA $0CF2 : CMP #$06 : !BLT .impervious ; swords are ineffective
BRA .not_impervious BRA .not_impervious
.vulnerable .vulnerable
LDA SpecialWeapons : CMP #$01 : BEQ + LDA.l SpecialWeapons : AND.b #$80 : BEQ .not_impervious
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 LDA $0CF2 : CMP #$06 : !BGE .impervious ; non-swords are ineffective
BRA .not_impervious BRA .not_impervious
; returns nonzero A if impervious ; returns nonzero A if impervious
@@ -338,11 +304,11 @@ Utility_CheckImpervious:
; start with X = sprite index ; start with X = sprite index
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
AllowBombingMoldorm: AllowBombingMoldorm:
LDA SpecialWeapons : CMP #$01 : BEQ .no_disable_projectiles LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .no_disable_projectiles
CMP #$03 : BEQ .no_disable_projectiles CMP.b #$03 : BEQ .no_disable_projectiles
CMP #$04 : BEQ .no_disable_projectiles CMP.b #$04 : BEQ .no_disable_projectiles
CMP #$05 : BEQ .no_disable_projectiles CMP.b #$05 : BEQ .no_disable_projectiles
CMP #$06 : BEQ .no_disable_projectiles CMP.b #$06 : BEQ .no_disable_projectiles
INC $0BA0, X INC $0BA0, X
.no_disable_projectiles .no_disable_projectiles
JSL !SPRITE_INITIALIZED_SEGMENTED JSL !SPRITE_INITIALIZED_SEGMENTED
@@ -352,11 +318,11 @@ AllowBombingBarrier:
; what we wrote over ; what we wrote over
LDA $0D00, X : !SUB.b #$0C : STA $0D00, X LDA $0D00, X : !SUB.b #$0C : STA $0D00, X
LDA $0E20, X : CMP #$40 : BNE .disable_projectiles LDA $0E20, X : CMP #$40 : BNE .disable_projectiles
LDA SpecialWeapons : CMP #$01 : BEQ .no_disable_projectiles LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .no_disable_projectiles
CMP #$03 : BEQ .no_disable_projectiles CMP.b #$03 : BEQ .no_disable_projectiles
CMP #$04 : BEQ .no_disable_projectiles CMP.b #$04 : BEQ .no_disable_projectiles
CMP #$05 : BEQ .no_disable_projectiles CMP.b #$05 : BEQ .no_disable_projectiles
CMP #$06 : BEQ .no_disable_projectiles CMP.b #$06 : BEQ .no_disable_projectiles
.disable_projectiles .disable_projectiles
INC $0BA0, X INC $0BA0, X
.no_disable_projectiles .no_disable_projectiles
@@ -364,7 +330,7 @@ AllowBombingBarrier:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DrawBombInMenu: DrawBombInMenu:
JSL LoadBombCount16 : AND.w #$00FF : BEQ .noBombs 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.l SpecialWeaponLevel : AND.w #$00FF : BEQ .noBombs : STA $02
LDA.w #$FC81 : STA $04 LDA.w #$FC81 : STA $04
BRA .done BRA .done
@@ -379,7 +345,7 @@ DrawBombInMenu:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DrawSwordInMenu: 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 #$0003 : BEQ .specialSword
CMP.w #$0004 : BEQ .specialSword CMP.w #$0004 : BEQ .specialSword
CMP.w #$0005 : BEQ .specialSword CMP.w #$0005 : BEQ .specialSword
@@ -400,7 +366,7 @@ DrawSwordInMenu:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DrawBombInYBox: DrawBombInYBox:
CPX.w #$0004 : BNE .done 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 LDA SpecialWeaponLevel : AND.w #$00FF : CLC : ADC.w #$00BD : BRA .done
.vanilla .vanilla
LDA.w #$0001 LDA.w #$0001
@@ -417,7 +383,7 @@ DrawBombOnHud:
MVN $A17E MVN $A17E
PLB 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 SpecialWeaponLevel : AND.w #$00FF : ASL #2 : TAX
LDA.l BombIcon, X : STA.l $7EC71A LDA.l BombIcon, X : STA.l $7EC71A
LDA.l BombIcon+2, X : STA.l $7EC71C LDA.l BombIcon+2, X : STA.l $7EC71C
@@ -427,7 +393,7 @@ DrawBombOnHud:
BombSpriteColor: BombSpriteColor:
db $04, $08, $04, $02, $0A, $0A db $04, $08, $04, $02, $0A, $0A
SetBombSpriteColor: SetBombSpriteColor:
LDA.l SpecialWeapons : CMP.b #$01 : BNE .normal LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE .normal
PHX PHX
LDA.l SpecialWeaponLevel LDA.l SpecialWeaponLevel
TAX TAX
@@ -440,7 +406,7 @@ LDA.l SpecialWeaponLevel
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
StoreSwordDamage: StoreSwordDamage:
LDA.l SpecialWeapons : CMP #$02 : BEQ + LDA.l SpecialWeapons : AND.b #$7F : CMP #$02 : BEQ +
LDA.l $06ED39, X : RTL LDA.l $06ED39, X : RTL
+ +
LDA #$05 LDA #$05
@@ -454,8 +420,8 @@ BeeDamageClass:
db $FF, $01, $01, $FF, $FF db $FF, $01, $01, $FF, $FF
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CheckDetonateBomb: CheckDetonateBomb:
LDA.l SpecialWeapons : CMP.b #$01 : BEQ .detonate_bombs LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .detonate_bombs
CMP.b #$06 : BEQ .release_bee CMP.b #$06 : BEQ .release_bee
CLC : RTL CLC : RTL
.detonate_bombs .detonate_bombs
LDX.b #09 LDX.b #09
@@ -496,7 +462,7 @@ CheckDetonateBomb:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
SetBeeType: 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 LDX.w $0202
.check_bee_type .check_bee_type
LDA.l EquipmentWRAM-1, X LDA.l EquipmentWRAM-1, X
@@ -516,7 +482,7 @@ SetBeeType:
BRA .regular_bee BRA .regular_bee
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
ArrghusBoing: 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 LDA.w $0F60, X : AND.b #$BF : STA.w $0F60, X
.done .done
; what we wrote over ; what we wrote over
@@ -536,7 +502,7 @@ LDA.w $0F00,Y
BNE .unsuitable_target BNE .unsuitable_target
; in bee-mode skip targets that the bee can't hurt ; 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 JSR BeeCheckDamage
CMP.b #$00 : BEQ .unsuitable_target CMP.b #$00 : BEQ .unsuitable_target
+ +
@@ -551,7 +517,7 @@ BNE .unsuitable_target
LDA.w $0F60,Y LDA.w $0F60,Y
AND.b #$40 AND.b #$40
BEQ + 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 ; in bee mode, allow targetting anti-fairies, bunny beams, and keese
LDA.w $0E20,Y LDA.w $0E20,Y
CMP.b #$15 : BEQ + ; anti-fairy CMP.b #$15 : BEQ + ; anti-fairy
@@ -596,7 +562,7 @@ RTS
CheckBugNet: CheckBugNet:
LDA.w $037A : AND.b #$10 : BEQ .done ; normal behavior if not bugnet LDA.w $037A : AND.b #$10 : BEQ .done ; normal behavior if not bugnet
PHP ; we want to preserve the carry bit 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 .bugnet_mode
LDA.w $0E20, X : CMP.b #$E3 : BEQ .return_10 ; normal behavior if fairy 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 #$79 : BEQ .return_10 ; normal behavior if bee
@@ -608,7 +574,7 @@ PLP : LDA.b #$10
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
SetHammerClass: 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.w $037A : AND.b #$10 : BEQ .normal ; normal behavior if not bugnet
LDA 4, S : TAX ; get sprite index off of stack LDA 4, S : TAX ; get sprite index off of stack
LDA.w $0E20, X : CMP.b #$88 : BNE .not_mothula LDA.w $0E20, X : CMP.b #$88 : BNE .not_mothula

View File

@@ -32,12 +32,8 @@ LookupDamageLevel:
LDA.l StalfosBombDamage LDA.l StalfosBombDamage
RTL RTL
+ +
LDA SpecialWeapons : CMP #$01 : BEQ .bomb_table LDA SpecialWeapons : AND.b #$7F : CMP.b #$02 : BEQ .pseudo_table
CMP #$02 : BEQ .pseudo_table LDA SpecialWeapons : AND.b #$80 : BNE .bomb_table
CMP #$03 : BEQ .bomb_table
CMP #$04 : BEQ .bomb_table
CMP #$05 : BEQ .bomb_table
CMP #$08 : BEQ .bomb_table
%LookupDamageSubclass(Damage_Table) : RTL %LookupDamageSubclass(Damage_Table) : RTL
.bomb_table .bomb_table
%LookupDamageSubclass(Damage_Table_Bombs) : RTL %LookupDamageSubclass(Damage_Table_Bombs) : RTL
@@ -97,12 +93,12 @@ CheckTabletSword:
LDA.l AllowHammerTablets : BEQ + LDA.l AllowHammerTablets : BEQ +
LDA.l HammerEquipment : BNE .allow ; check for hammer LDA.l HammerEquipment : BNE .allow ; check for hammer
+ +
LDA.l SpecialWeapons : CMP.b #$01 : BEQ .check_special LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .check_special
CMP.b #$03 : BEQ .check_special CMP.b #$03 : BEQ .check_special
CMP.b #$04 : BEQ .check_special CMP.b #$04 : BEQ .check_special
CMP.b #$05 : BEQ .check_special CMP.b #$05 : BEQ .check_special
CMP.b #$06 : BEQ .allow CMP.b #$06 : BEQ .allow
CMP.b #$08 : BEQ .check_special CMP.b #$08 : BEQ .check_special
BRA .normal BRA .normal
.allow .allow
LDA.b #$02 : RTL LDA.b #$02 : RTL
@@ -116,7 +112,7 @@ GetSwordLevelForEvilBarrier:
LDA.l AllowHammerEvilBarrierWithFighterSword : BEQ + LDA.l AllowHammerEvilBarrierWithFighterSword : BEQ +
LDA.b #$FF : RTL LDA.b #$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 SwordEquipment : RTL
+ +
LDA.l SpecialWeaponLevel : RTL LDA.l SpecialWeaponLevel : RTL

View File

@@ -114,14 +114,17 @@ db #$00 ; #$00 = Default behavior (silver arrows)
org $30802F ; PC 0x18002F org $30802F ; PC 0x18002F
SpecialWeapons: SpecialWeapons:
db #$00 db #$00
; s - - - m m m m (bitfield)
; s - only swords damage can hurt enemies
; m - special weapon mode
; $00 = Off (default) ; $00 = Off (default)
; $01 = Bomb-Only mode ; $01 = Bomb mode
; $02 = Pseudosword ; $02 = Pseudosword
; $03 = Byrna-Only mode ; $03 = Byrna mode
; $04 = Somaria-Only mode ; $04 = Somaria mode
; $05 = Canes-Only mode ; $05 = Canes mode
; $06 = Bee mode ; $06 = Bee mode
; $07 = Hammer on B (for use with swordless) ; $07 = Unused
; $08 = Bugnet mode ; $08 = Bugnet mode
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $308030 ; PC 0x180030 org $308030 ; PC 0x180030

View File

@@ -79,7 +79,7 @@ Ganon_CheckBeeVulnerability: ; we know it's a bee
LDA #$09 LDA #$09
BRA .done BRA .done
.normal .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 LDA.w $0ED0, X
BRA .done BRA .done
.regular_bee .regular_bee
@@ -115,7 +115,7 @@ Ganon_CheckHammerVulnerability: ; we know it's hammer
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CheckBeeBoss: CheckBeeBoss:
; Y is sprite index ; 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 LDA #$00 : RTL
.not_bee_mode .not_bee_mode
LDA.l GanonVulnerabilityItem : CMP #$10 : BNE .normal ; ganon not vulnerable to bee LDA.l GanonVulnerabilityItem : CMP #$10 : BNE .normal ; ganon not vulnerable to bee