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 5ad699f731
commit 256f0fa270
12 changed files with 111 additions and 150 deletions

View File

@@ -171,7 +171,7 @@ SetEscapeAssist:
BIT.b #$10 : BEQ + : STA InfiniteArrowsModifier : +
++
LDA.l SpecialWeapons : CMP #$01 : BNE +
LDA.l SpecialWeapons : AND.b #$7F : CMP #$01 : BNE +
LDA.l SpecialWeaponLevel : BEQ +
LDA #$01 : STA InfiniteBombsModifier
+

View File

@@ -306,7 +306,7 @@ DialogGanon2:
LDA.w #$018D : JMP .done
+
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
.silver_arrows
LDA.l BowTracking

View File

@@ -268,7 +268,7 @@ DrawPlayerFileShared:
%fs_drawBottle(EquipmentSRAM+$1F,9,23)
; 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 +
%fs_drawItemGray(3,26,FileSelectItems_fighters_sword)
JMP ++
@@ -602,7 +602,7 @@ FileSelectDrawHudBar:
LDA $7F5006 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,11)
LDA $7F5007 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,12)
LDA SpecialWeapons : AND.w #$00FF : CMP #$0001 : BEQ .colorBombs
LDA SpecialWeapons : AND.w #$007F : CMP #$0001 : BEQ .colorBombs
LDA #$028B|!FS_COLOR_BLUE : %fs_draw16x8(0,14)
LDA EquipmentSRAM+$03 : AND.w #$00FF
JSL.l HexToDec

View File

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

View File

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

View File

@@ -739,11 +739,11 @@ RTS
RTL
.incrementBossSword
LDA SpecialWeapons : CMP #$01 : BEQ +
CMP #$03 : BEQ +
CMP #$04 : BEQ +
CMP #$05 : BEQ +
CMP #$08 : BEQ +
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ +
CMP.b #$03 : BEQ +
CMP.b #$04 : BEQ +
CMP.b #$05 : BEQ +
CMP.b #$08 : BEQ +
LDA SwordEquipment : BRA ++
+ : LDA SpecialWeaponLevel
++

View File

@@ -7,7 +7,7 @@ NewDrawHud:
LDA InfiniteBombsModifier : BNE .infinite_bombs
.finite_bombs
LDA.l SpecialWeapons : CMP #$01 : BNE .normal
LDA.l SpecialWeapons : AND.b #$7F : CMP #$01 : BNE .normal
LDA.l SpecialWeaponLevel : BEQ .no_bombs
.normal
LDA.l BombsEquipment ; bombs

View File

@@ -470,8 +470,8 @@ AddReceivedItemExpandedGetItem:
LDA #$01 : STA InfiniteBombsModifier ; infinite bombs
BRA .done
+ CMP.b #$C1 : BNE + ; Cane Upgrade
LDA.l SpecialWeapons : CMP #$03 : BEQ .blue_cane
CMP #$04 : BEQ .red_cane
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$03 : BEQ .blue_cane
CMP.b #$04 : BEQ .red_cane
BRA .done
.blue_cane
LDA #$01 : STA ByrnaEquipment

View File

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

View File

@@ -60,12 +60,8 @@ LookupDamageLevel:
LDA.l !StalfosBombDamage
RTL
+
LDA SpecialWeapons : CMP #$01 : BEQ .bomb_table
CMP #$02 : BEQ .pseudo_table
CMP #$03 : BEQ .bomb_table
CMP #$04 : BEQ .bomb_table
CMP #$05 : BEQ .bomb_table
CMP #$08 : BEQ .bomb_table
LDA SpecialWeapons : AND.b #$7F : CMP.b #$02 : BEQ .pseudo_table
LDA SpecialWeapons : AND.b #$80 : BNE .bomb_table
%LookupDamageSubclass(Damage_Table) : RTL
.bomb_table
%LookupDamageSubclass(Damage_Table_Bombs) : RTL
@@ -131,12 +127,12 @@ CheckTabletSword:
LDA.l AllowHammerTablets : BEQ +
LDA HammerEquipment : BNE .allow ; check for hammer
+
LDA.l SpecialWeapons : CMP #$01 : BEQ .check_special
CMP #$03 : BEQ .check_special
CMP #$04 : BEQ .check_special
CMP #$05 : BEQ .check_special
CMP #$06 : BEQ .allow
CMP #$08 : BEQ .check_special
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .check_special
CMP.b #$03 : BEQ .check_special
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
@@ -150,7 +146,7 @@ GetSwordLevelForEvilBarrier:
LDA.l AllowHammerEvilBarrierWithFighterSword : BEQ +
LDA #$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 SpecialWeaponLevel : RTL

View File

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

View File

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