113 lines
3.3 KiB
NASM
113 lines
3.3 KiB
NASM
;================================================================================
|
|
; Hard & Masochist Mode
|
|
;================================================================================
|
|
CalculateSpikeFloorDamage:
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA.b RoomIndex ; these are all decimal because i got them that way
|
|
CMP.w #279
|
|
SEP #$20 ; set 8-bit accumulator
|
|
BNE +
|
|
LDA.l ByrnaCaveSpikeDamage
|
|
STA.w DamageReceived
|
|
RTL
|
|
+
|
|
LDA.w $D055, Y
|
|
STA.w DamageReceived
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
CalculateByrnaUsage:
|
|
LDA.b IndoorsFlag : BEQ ++
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA.b RoomIndex ; 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.b Scrap00
|
|
PLX
|
|
++
|
|
LDA.l CurrentMagic ; thing we wrote over
|
|
JML IncrementMagicUseCounterByrna
|
|
;--------------------------------------------------------------------------------
|
|
CalculateCapeUsage:
|
|
LDA.b IndoorsFlag : BEQ ++
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA.b RoomIndex ; 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.b CapeTimer ; set cape decrement timer
|
|
PLX
|
|
++
|
|
JML IncrementMagicUseCounterOne
|
|
;--------------------------------------------------------------------------------
|
|
ActivateInvulnerabilityOrDont:
|
|
LDA.b IndoorsFlag : BEQ .nowhere_special
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA.b RoomIndex ; 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.w NoDamage : RTL
|
|
.nowhere_special
|
|
LDA.l ByrnaInvulnerability : STA.w NoDamage
|
|
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.l DamageSubclassValue,x ;what we wrote over
|
|
RTL
|
|
.boomerang
|
|
LDA.l StunItemAction : AND.b #$01 : BNE .normal
|
|
BRA .noDamage
|
|
.hookshot
|
|
LDA.l StunItemAction : AND.b #$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.b Scrap05
|
|
PHX
|
|
LDX.b #$00
|
|
.loop
|
|
LDA.w AncillaID, X
|
|
INX : CPX.b #$0A : BEQ .notFound
|
|
CMP.b Scrap05 : BNE .loop
|
|
LDA.b #$01
|
|
BRA .return
|
|
.notFound
|
|
LDA.b #$00
|
|
.return
|
|
PLX
|
|
RTS
|
|
}
|