114 lines
3.1 KiB
NASM
114 lines
3.1 KiB
NASM
;================================================================================
|
|
; Hard & Masochist Mode
|
|
;================================================================================
|
|
CalculateSpikeFloorDamage:
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA $A0 ; these are all decimal because i got them that way
|
|
CMP.w #279
|
|
SEP #$20 ; set 8-bit accumulator
|
|
BNE +
|
|
LDA.l ByrnaCaveSpikeDamage
|
|
STA $0373
|
|
RTL
|
|
+
|
|
LDA $D055, Y
|
|
STA $0373
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
CalculateByrnaUsage:
|
|
LDA $1B : BEQ ++
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA $A0 ; these are all decimal because i got them that way
|
|
CMP.w #95 : BEQ + ; Ice Palace Spike Room
|
|
CMP.w #172 : BEQ + ; Blind Boss Room
|
|
CMP.w #179 : BEQ + ; Room in Misery Mire
|
|
CMP.w #213 : BEQ + ; Laser Bridge
|
|
CMP.w #279 : BEQ + ; Spike Cave
|
|
SEP #$20 ; set 8-bit accumulator
|
|
BRA ++
|
|
+
|
|
SEP #$20 ; set 8-bit accumulator
|
|
PHX : TYX
|
|
LDA.l HardModeExclusionCaneOfByrnaUsage, X : STA $00
|
|
PLX
|
|
++
|
|
LDA $7EF36E ; thing we wrote over
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
CalculateCapeUsage:
|
|
LDA $1B : BEQ ++
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA $A0 ; these are all decimal because i got them that way
|
|
CMP.w #95 : BEQ + ; Ice Palace Spike Room
|
|
CMP.w #179 : BEQ + ; Room in Misery Mire
|
|
CMP.w #213 : BEQ + ; Laser Bridge
|
|
CMP.w #279 : BEQ + ; Spike Cave
|
|
SEP #$20 ; set 8-bit accumulator
|
|
BRA ++
|
|
+
|
|
SEP #$20 ; set 8-bit accumulator
|
|
PHX : TYX
|
|
LDA.l HardModeExclusionCapeUsage, X : STA $4C ; set cape decrement timer
|
|
PLX
|
|
++
|
|
LDA $7EF36E ; thing we wrote over
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
ActivateInvulnerabilityOrDont:
|
|
LDA $1B : BEQ .nowhere_special
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA $A0 ; these are all decimal because i got them that way
|
|
CMP.w #95 : BEQ .somewhere_cool ; Ice Palace Spike Room
|
|
CMP.w #179 : BEQ .somewhere_cool ; Room in Misery Mire
|
|
CMP.w #213 : BEQ .somewhere_cool ; Laser Bridge
|
|
CMP.w #279 : BEQ .somewhere_cool ; Spike Cave
|
|
|
|
SEP #$20 ; set 8-bit accumulator
|
|
BRA .nowhere_special
|
|
.somewhere_cool
|
|
SEP #$20 ; set 8-bit accumulator
|
|
LDA.b #$01 : STA $037B : RTL
|
|
.nowhere_special
|
|
LDA.l ByrnaInvulnerability : STA $037B
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
GetItemDamageValue:
|
|
CPX.b #$03 : BEQ .boomerang
|
|
CPX.b #$04 : BEQ .boomerang
|
|
CPX.b #$05 : BEQ .boomerang
|
|
CPX.b #$39 : BEQ .hookshot
|
|
CPX.b #$3b : BEQ .hookshot
|
|
CPX.b #$3c : BEQ .hookshot
|
|
CPX.b #$3d : BEQ .hookshot
|
|
|
|
.normal
|
|
lda $0db8f1,x ;what we wrote over
|
|
RTL
|
|
.boomerang
|
|
LDA.l StunItemAction : AND #$01 : BNE .normal
|
|
BRA .noDamage
|
|
.hookshot
|
|
LDA.l StunItemAction : AND #$02 : BNE .normal
|
|
.noDamage
|
|
LDA.b #$00
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
;Argument : A = id we want to find return 00 if none found, 01 if found
|
|
SearchAncilla:
|
|
{
|
|
STA $05
|
|
PHX
|
|
LDX #$00
|
|
.loop
|
|
LDA $0C4A, X
|
|
INX : CPX #$0A : BEQ .notFound
|
|
CMP $05 : BNE .loop
|
|
LDA #$01
|
|
BRA .return
|
|
.notFound
|
|
LDA #$00
|
|
.return
|
|
PLX
|
|
RTS
|
|
}
|