Fix moldorm/somaria issue and add both-canes mode
This commit is contained in:
@@ -2748,6 +2748,10 @@ org $088DB1 ; Bank08.asm@1207 (PHY : PHX : TYX : ... )
|
|||||||
JSL Utility_CheckAncillaOverlapWithSprite
|
JSL Utility_CheckAncillaOverlapWithSprite
|
||||||
BRA + : NOP #7 : +
|
BRA + : NOP #7 : +
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
org $08E252 ; Bank08.asm@1770 (PHY : PHX : TYX : ... )
|
||||||
|
JSL Utility_CheckAncillaOverlapWithSprite
|
||||||
|
BRA + : NOP #7 : +
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
org $0882E8 ; Bank08.asm@456 (LDA $0DB0, Y : CMP.b #$03)
|
org $0882E8 ; Bank08.asm@456 (LDA $0DB0, Y : CMP.b #$03)
|
||||||
JSL Utility_CheckHelmasaurKingCollision
|
JSL Utility_CheckHelmasaurKingCollision
|
||||||
NOP
|
NOP
|
||||||
|
|||||||
@@ -557,6 +557,10 @@ AddInventory:
|
|||||||
CPY.b #$B7 : !BGE +
|
CPY.b #$B7 : !BGE +
|
||||||
JSR .incrementBombLevel
|
JSR .incrementBombLevel
|
||||||
JMP .done
|
JMP .done
|
||||||
|
+ CPY.b #$B7 : !BLT + ; Items $B7 - $BC - Cane Upgrades
|
||||||
|
CPY.b #$BD : !BGE +
|
||||||
|
JSR .incrementCaneLevel
|
||||||
|
JMP .done
|
||||||
+
|
+
|
||||||
.done
|
.done
|
||||||
PLP : PLX : PLA
|
PLP : PLX : PLA
|
||||||
@@ -630,6 +634,10 @@ RTS
|
|||||||
JSR .stampSword ; update "first bomb" timestamp
|
JSR .stampSword ; update "first bomb" timestamp
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
.incrementCaneLevel
|
||||||
|
JSR .stampSword ; update "first cane" timestamp
|
||||||
|
RTS
|
||||||
|
|
||||||
.incrementShield
|
.incrementShield
|
||||||
; CHECK FOR DUPLICATE SHIELDS
|
; CHECK FOR DUPLICATE SHIELDS
|
||||||
LDA $7EF422 : !ADD #$08 : AND #$18 : TAX
|
LDA $7EF422 : !ADD #$08 : AND #$18 : TAX
|
||||||
@@ -729,6 +737,7 @@ RTL
|
|||||||
LDA SpecialWeapons : CMP #$01 : BEQ +
|
LDA SpecialWeapons : CMP #$01 : BEQ +
|
||||||
CMP #$03 : BEQ +
|
CMP #$03 : BEQ +
|
||||||
CMP #$04 : BEQ +
|
CMP #$04 : BEQ +
|
||||||
|
CMP #$05 : BEQ +
|
||||||
LDA $7EF359 : BRA ++
|
LDA $7EF359 : BRA ++
|
||||||
+ : LDA !WEAPON_LEVEL
|
+ : LDA !WEAPON_LEVEL
|
||||||
++
|
++
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ ItemDowngradeFixMain:
|
|||||||
CPY.b #$29 : BEQ .isMushroom ; Mushroom
|
CPY.b #$29 : BEQ .isMushroom ; Mushroom
|
||||||
|
|
||||||
CPY.b #$B1 : !BLT + : CPY.b #$B6 : !BLT .isBombUpgrade : +
|
CPY.b #$B1 : !BLT + : CPY.b #$B6 : !BLT .isBombUpgrade : +
|
||||||
|
CPY.b #$B7 : !BLT + : CPY.b #$BC : !BLT .isCaneUpgrade : +
|
||||||
|
|
||||||
.done
|
.done
|
||||||
STA [$00] ; thing we wrote over part 2
|
STA [$00] ; thing we wrote over part 2
|
||||||
@@ -82,5 +83,16 @@ JMP .done
|
|||||||
JMP .done
|
JMP .done
|
||||||
+
|
+
|
||||||
PLA
|
PLA
|
||||||
|
JMP .done
|
||||||
|
.isCaneUpgrade
|
||||||
|
PHA
|
||||||
|
TYA ; load cane upgrade item
|
||||||
|
!SUB #$B6 ; convert to cane level
|
||||||
|
CMP.l !WEAPON_LEVEL : !BGE + ; skip if highest is lower (this is an upgrade)
|
||||||
|
LDA.l !WEAPON_LEVEL : !ADD #$B6 ; convert to item id
|
||||||
|
TAY : PLA : LDA.l !WEAPON_LEVEL ; put cane level into the thing to write
|
||||||
|
JMP .done
|
||||||
|
+
|
||||||
|
PLA
|
||||||
JMP .done
|
JMP .done
|
||||||
;================================================================================
|
;================================================================================
|
||||||
|
|||||||
@@ -19,14 +19,16 @@ DamageClassCalc:
|
|||||||
.red_cane
|
.red_cane
|
||||||
PHA
|
PHA
|
||||||
LDA SpecialWeapons : CMP #$01 : BEQ .cane_immune
|
LDA SpecialWeapons : CMP #$01 : BEQ .cane_immune
|
||||||
LDA SpecialWeapons : CMP #$03 : BEQ .cane_immune
|
CMP #$03 : BEQ .cane_immune
|
||||||
LDA SpecialWeapons : CMP #$04 : BEQ .special_cane
|
CMP #$04 : BEQ .special_cane
|
||||||
|
CMP #$05 : BEQ .special_cane
|
||||||
BRA .normal
|
BRA .normal
|
||||||
.blue_cane
|
.blue_cane
|
||||||
PHA
|
PHA
|
||||||
LDA SpecialWeapons : CMP #$01 : BEQ .cane_immune
|
LDA SpecialWeapons : CMP #$01 : BEQ .cane_immune
|
||||||
LDA SpecialWeapons : CMP #$03 : BEQ .special_cane
|
CMP #$03 : BEQ .special_cane
|
||||||
LDA SpecialWeapons : CMP #$04 : BEQ .cane_immune
|
CMP #$04 : BEQ .cane_immune
|
||||||
|
CMP #$05 : BEQ .special_cane
|
||||||
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
|
||||||
@@ -121,9 +123,6 @@ Utility_CheckAncillaOverlapWithSprite:
|
|||||||
PLX : PLY
|
PLX : PLY
|
||||||
JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG
|
JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG
|
||||||
RTL
|
RTL
|
||||||
.ignore_collision
|
|
||||||
CLC
|
|
||||||
RTL
|
|
||||||
.giant_moldorm
|
.giant_moldorm
|
||||||
LDA $0E10, Y : BNE .ignore_collision ; Moldy can have little a I-Frames, as a treat
|
LDA $0E10, Y : BNE .ignore_collision ; Moldy can have little a I-Frames, as a treat
|
||||||
LDA.l SpecialWeapons : CMP #$01 : BNE ++
|
LDA.l SpecialWeapons : CMP #$01 : BNE ++
|
||||||
@@ -132,26 +131,41 @@ Utility_CheckAncillaOverlapWithSprite:
|
|||||||
++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++
|
++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++
|
||||||
LDA $0C4A, X : CMP #$31 : BEQ .check_collision_moldorm
|
LDA $0C4A, X : CMP #$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 .ignore_collision
|
++ : LDA.l SpecialWeapons : CMP #$04 : BNE ++
|
||||||
LDA $0C4A, X : CMP #$01 : BEQ .check_collision_moldorm
|
LDA $0C4A, X : CMP #$01 : BEQ .check_collision_moldorm
|
||||||
LDA $0C4A, X : CMP #$2C : BEQ .check_collision_moldorm
|
CMP #$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
|
||||||
|
LDA $0C4A, X : CMP #$01 : BEQ .check_collision_moldorm
|
||||||
|
CMP #$2C : BEQ .check_collision_moldorm
|
||||||
|
CMP #$31 : BEQ .check_collision_moldorm
|
||||||
|
BRA .ignore_collision ; don't collide with non-canes
|
||||||
|
|
||||||
.check_collision_moldorm
|
.check_collision_moldorm
|
||||||
JSR SetUpMoldormHitbox
|
JSR SetUpMoldormHitbox
|
||||||
JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG
|
JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
.ignore_collision
|
||||||
|
CLC
|
||||||
|
RTL
|
||||||
|
|
||||||
.trinexx
|
.trinexx
|
||||||
LDA.l SpecialWeapons : CMP #$01 : BNE ++
|
LDA.l SpecialWeapons : CMP #$01 : BNE ++
|
||||||
LDA $0C4A, X : CMP #$07 : BEQ .check_collision_trinexx
|
LDA $0C4A, X : CMP #$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 ++
|
++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++
|
||||||
LDA $0C4A, X : CMP #$31 : BEQ .check_collision_trinexx
|
LDA $0C4A, X : CMP #$31 : BEQ .check_collision_trinexx
|
||||||
BRA .ignore_collision ; don't collide with non-byrna
|
JMP .ignore_collision ; don't collide with non-byrna
|
||||||
++ : LDA.l SpecialWeapons : CMP #$04 : BNE .ignore_collision
|
++ : LDA.l SpecialWeapons : CMP #$04 : BNE ++
|
||||||
LDA $0C4A, X : CMP #$01 : BEQ .check_collision_trinexx
|
LDA $0C4A, X : CMP #$01 : BEQ .check_collision_trinexx
|
||||||
LDA $0C4A, X : CMP #$2C : BEQ .check_collision_trinexx
|
CMP #$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
|
||||||
|
LDA $0C4A, X : CMP #$01 : BEQ .check_collision_trinexx
|
||||||
|
CMP #$2C : BEQ .check_collision_trinexx
|
||||||
|
CMP #$31 : BEQ .check_collision_trinexx
|
||||||
|
JMP .ignore_collision ; don't collide with non-canes
|
||||||
|
|
||||||
.check_collision_trinexx
|
.check_collision_trinexx
|
||||||
JSR SetUpTrinexxHitbox
|
JSR SetUpTrinexxHitbox
|
||||||
@@ -233,10 +247,15 @@ Utility_CheckHelmasaurKingCollision:
|
|||||||
++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++
|
++ : LDA.l SpecialWeapons : CMP #$03 : BNE ++
|
||||||
LDA $0C4A, X : CMP #$31 : BEQ .collide
|
LDA $0C4A, X : CMP #$31 : BEQ .collide
|
||||||
BRA .normal ; normal behavior with non-byrna
|
BRA .normal ; normal behavior with non-byrna
|
||||||
++ : LDA.l SpecialWeapons : CMP #$04 : BNE .normal
|
++ : LDA.l SpecialWeapons : CMP #$04 : BNE ++
|
||||||
LDA $0C4A, X : CMP #$01 : BEQ .collide
|
LDA $0C4A, X : CMP #$01 : BEQ .collide
|
||||||
LDA $0C4A, X : CMP #$2C : BEQ .collide
|
CMP #$2C : BEQ .collide
|
||||||
BRA .normal ; normal behavior with non-somaria
|
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
|
||||||
|
BRA .normal ; normal behavior with non-canes
|
||||||
.collide
|
.collide
|
||||||
CLC
|
CLC
|
||||||
RTL
|
RTL
|
||||||
@@ -256,7 +275,10 @@ Utility_CheckHammerHelmasaurKingMask:
|
|||||||
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 #$01 : BEQ + : CMP #$03 : BEQ + : CMP #$04 : BEQ +
|
LDA SpecialWeapons : CMP #$01 : BEQ +
|
||||||
|
CMP #$03 : BEQ +
|
||||||
|
CMP #$04 : BEQ +
|
||||||
|
CMP #$05 : 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
|
||||||
@@ -267,7 +289,10 @@ 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 + : CMP #$03 : BEQ + : CMP #$04 : BEQ +
|
LDA SpecialWeapons : CMP #$01 : BEQ +
|
||||||
|
CMP #$03 : BEQ +
|
||||||
|
CMP #$04 : BEQ +
|
||||||
|
CMP #$05 : BEQ +
|
||||||
BRA .not_impervious
|
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
|
||||||
@@ -279,13 +304,19 @@ 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 + : CMP #$03 : BEQ + : CMP #$04 : BEQ +
|
LDA SpecialWeapons : CMP #$01 : BEQ +
|
||||||
|
CMP #$03 : BEQ +
|
||||||
|
CMP #$04 : BEQ +
|
||||||
|
CMP #$05 : BEQ +
|
||||||
BRA .not_impervious
|
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 + : CMP #$03 : BEQ + : CMP #$04 : BEQ +
|
LDA SpecialWeapons : CMP #$01 : BEQ +
|
||||||
|
CMP #$03 : BEQ +
|
||||||
|
CMP #$04 : BEQ +
|
||||||
|
CMP #$05 : BEQ +
|
||||||
BRA .not_impervious
|
BRA .not_impervious
|
||||||
+
|
+
|
||||||
LDA $0CF2 : CMP #$06 : !BGE .impervious ; non-swords are ineffective
|
LDA $0CF2 : CMP #$06 : !BGE .impervious ; non-swords are ineffective
|
||||||
@@ -297,8 +328,9 @@ Utility_CheckImpervious:
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
AllowBombingMoldorm:
|
AllowBombingMoldorm:
|
||||||
LDA SpecialWeapons : CMP #$01 : BEQ .no_disable_projectiles
|
LDA SpecialWeapons : CMP #$01 : BEQ .no_disable_projectiles
|
||||||
LDA SpecialWeapons : CMP #$03 : BEQ .no_disable_projectiles
|
CMP #$03 : BEQ .no_disable_projectiles
|
||||||
LDA SpecialWeapons : CMP #$04 : BEQ .no_disable_projectiles
|
CMP #$04 : BEQ .no_disable_projectiles
|
||||||
|
CMP #$05 : BEQ .no_disable_projectiles
|
||||||
INC $0BA0, X
|
INC $0BA0, X
|
||||||
.no_disable_projectiles
|
.no_disable_projectiles
|
||||||
JSL !SPRITE_INITIALIZED_SEGMENTED
|
JSL !SPRITE_INITIALIZED_SEGMENTED
|
||||||
@@ -309,8 +341,9 @@ AllowBombingBarrier:
|
|||||||
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 SpecialWeapons : CMP #$01 : BEQ .no_disable_projectiles
|
||||||
LDA SpecialWeapons : CMP #$03 : BEQ .no_disable_projectiles
|
CMP #$03 : BEQ .no_disable_projectiles
|
||||||
LDA SpecialWeapons : CMP #$04 : BEQ .no_disable_projectiles
|
CMP #$04 : BEQ .no_disable_projectiles
|
||||||
|
CMP #$05 : BEQ .no_disable_projectiles
|
||||||
.disable_projectiles
|
.disable_projectiles
|
||||||
INC $0BA0, X
|
INC $0BA0, X
|
||||||
.no_disable_projectiles
|
.no_disable_projectiles
|
||||||
@@ -334,8 +367,9 @@ DrawBombInMenu:
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
DrawSwordInMenu:
|
DrawSwordInMenu:
|
||||||
LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BEQ .specialSword
|
LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BEQ .specialSword
|
||||||
LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0003 : BEQ .specialSword
|
CMP.w #$0003 : BEQ .specialSword
|
||||||
LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0004 : BEQ .specialSword
|
CMP.w #$0004 : BEQ .specialSword
|
||||||
|
CMP.w #$0005 : BEQ .specialSword
|
||||||
LDA $7EF359 : AND.w #$00FF : CMP.w #$00FF : BEQ .noSword
|
LDA $7EF359 : AND.w #$00FF : CMP.w #$00FF : BEQ .noSword
|
||||||
.hasSword
|
.hasSword
|
||||||
STA $02
|
STA $02
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ LookupDamageLevel:
|
|||||||
CMP #$02 : BEQ .pseudo_table
|
CMP #$02 : BEQ .pseudo_table
|
||||||
CMP #$03 : BEQ .bomb_table
|
CMP #$03 : BEQ .bomb_table
|
||||||
CMP #$04 : BEQ .bomb_table
|
CMP #$04 : BEQ .bomb_table
|
||||||
|
CMP #$05 : 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
|
||||||
@@ -131,8 +132,9 @@ CheckTabletSword:
|
|||||||
LDA.b #$02 : RTL
|
LDA.b #$02 : RTL
|
||||||
+
|
+
|
||||||
LDA.l SpecialWeapons : CMP #$01 : BEQ .check_special
|
LDA.l SpecialWeapons : CMP #$01 : BEQ .check_special
|
||||||
LDA.l SpecialWeapons : CMP #$03 : BEQ .check_special
|
CMP #$03 : BEQ .check_special
|
||||||
LDA.l SpecialWeapons : CMP #$04 : BEQ .check_special
|
CMP #$04 : BEQ .check_special
|
||||||
|
CMP #$05 : BEQ .check_special
|
||||||
BRA .normal
|
BRA .normal
|
||||||
.check_special
|
.check_special
|
||||||
LDA !WEAPON_LEVEL : CMP #$02 : !BLT + ; check for master bombs
|
LDA !WEAPON_LEVEL : CMP #$02 : !BLT + ; check for master bombs
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ db #$00 ; #$00 = Default behavior (silver arrows)
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $30802F ; PC 0x18003F
|
org $30802F ; PC 0x18003F
|
||||||
SpecialWeapons:
|
SpecialWeapons:
|
||||||
db #$00 ; #$00 = Off (default) - #$01 = Bomb-Only mode - #$02 = Pseudosword mode
|
db #$00 ; #$00 = Off (default) - #$01 = Bomb-Only mode - #$02 = Pseudosword mode - #$03 = Byrna-Only mode - #$04 = Somaria-Only mode - #$05 = Canes-Only mode
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $308030 ; PC 0x180030
|
org $308030 ; PC 0x180030
|
||||||
EnableSRAMTrace:
|
EnableSRAMTrace:
|
||||||
|
|||||||
Reference in New Issue
Block a user