171 lines
6.5 KiB
NASM
171 lines
6.5 KiB
NASM
;================================================================================
|
|
; Master / Tempered / Golden Sword Swap
|
|
;================================================================================
|
|
;$03348E: smith sword check (to see if uprade-able)
|
|
;================================================================================
|
|
;GetFairySword:
|
|
; CMP.b #$49 : BNE + : LDA.b #$00 : + ; convert single fighter sword to low id one
|
|
; CMP.b #$50 : BNE + : LDA.b #$01 : + ; convert safe master sword to normal one
|
|
; CMP #$04 : !BLT + : JMP.l PyramidFairy_BRANCH_IOTA : + ; for any sword, incl newer
|
|
; JSL ItemCheck_FairySword : BEQ + : JMP.l PyramidFairy_BRANCH_IOTA : + ; skip if we already flagged getting this
|
|
; JSL ItemSet_FairySword ; mark as got
|
|
; LDA FairySword : STA $0DC0, X ; whichever sword
|
|
; LDA.b #$05 : STA $0EB0, X ; something we overwrote, documentation unclear on purpose
|
|
;
|
|
;JMP.l PyramidFairy_BRANCH_GAMMA
|
|
;================================================================================
|
|
;GetSmithSword:
|
|
; JSL ItemCheck_SmithSword : BEQ + : JMP.l Smithy_AlreadyGotSword : + ; check if we're not already done
|
|
; ;JSL ItemSet_SmithSword - too early
|
|
;JMP.l Smithy_DoesntHaveSword
|
|
;================================================================================
|
|
;LoadSwordForDamage:
|
|
; LDA $7EF359 : CMP #$04 : BNE .done ; skip if not gold sword
|
|
; LDA $1B : BEQ + ; skip if outdoors
|
|
; LDA $A0 : CMP #41 : BNE + ; decimal 41 ; skip if not in the mothula room
|
|
; LDA #$03 ; pretend we're using tempered
|
|
; BRA .done
|
|
; +
|
|
; LDA #$04 ; nvm gold sword is fine
|
|
; .done
|
|
;RTL
|
|
;================================================================================
|
|
LoadSwordForDamage:
|
|
LDA $0E20, X : CMP.b #$88 : BNE .notMoth
|
|
JSR.w LoadModifiedSwordLevel ; load normal sword value
|
|
CMP.b #$04 : !BLT + : DEC : + ; if it's gold sword, change it to tempered
|
|
RTL
|
|
.notMoth
|
|
JSR.w LoadModifiedSwordLevel ; load normal sword value
|
|
RTL
|
|
;================================================================================
|
|
; $7F50C0 - Sword Modifier
|
|
LoadModifiedSwordLevel: ; returns short
|
|
LDA $7F50C0 : BEQ +
|
|
!ADD $7EF359 ; add normal sword value to modifier
|
|
BNE ++ : LDA.b #$01 : RTS : ++
|
|
CMP.b #$05 : !BLT ++ : LDA.b #$04 : RTS : ++
|
|
RTS
|
|
+
|
|
LDA $7EF359 ; load normal sword value
|
|
RTS
|
|
;================================================================================
|
|
; $7EF35B - Armor Inventory
|
|
; $7F50C2 - Armor Modifier
|
|
; $7F5020 - Scratch Space (Caller Preserved)
|
|
LoadModifiedArmorLevel:
|
|
PHA
|
|
LDA $7EF35B : !ADD $7F50C2
|
|
CMP.b #$FF : BNE + : LDA.b #$00 : +
|
|
CMP.b #$03 : !BLT + : LDA.b #$02 : +
|
|
STA $7F5020
|
|
PLA
|
|
!ADD $7F5020
|
|
RTL
|
|
;================================================================================
|
|
; $7EF37B - Magic Inventory
|
|
; $7F50C3 - Magic Modifier
|
|
LoadModifiedMagicLevel:
|
|
LDA $7F50C3 : BEQ +
|
|
!ADD $7EF37B ; add normal magic value to modifier
|
|
CMP.b #$FF : BNE ++ : LDA.b #$00 : RTL : ++
|
|
CMP.b #$03 : !BLT ++ : LDA.b #$02 : ++
|
|
RTL
|
|
+
|
|
LDA $7EF37B ; load normal magic value
|
|
RTL
|
|
;================================================================================
|
|
; $7E0348 - Ice Value
|
|
; $7F50C7 - Ice Modifier
|
|
LoadModifiedIceFloorValue_a11:
|
|
LDA $5D : CMP #$01 : BEQ + : CMP #$17 : BEQ + : CMP #$1C : BEQ +
|
|
LDA $5E : CMP #$02 : BEQ +
|
|
LDA $5B : BNE +
|
|
LDA.w $0348 : ORA $7F50C7 : AND.b #$11 : RTL
|
|
+ : LDA.w $0348 : AND.b #$11
|
|
RTL
|
|
LoadModifiedIceFloorValue_a01:
|
|
LDA $5D : CMP #$01 : BEQ + : CMP #$17 : BEQ + : CMP #$1C : BEQ +
|
|
LDA $5E : CMP #$02 : BEQ +
|
|
LDA $5B : BNE +
|
|
LDA.w $0348 : ORA $7F50C7 : AND.b #$01 : RTL
|
|
+ : LDA.w $0348 : AND.b #$01
|
|
RTL
|
|
;================================================================================
|
|
CheckTabletSword:
|
|
LDA.l AllowHammerTablets : BEQ +
|
|
LDA $7EF34B : BEQ + ; check for hammer
|
|
LDA.b #$02 : RTL
|
|
+
|
|
LDA $7EF359 ; get actual sword value
|
|
RTL
|
|
;================================================================================
|
|
CheckGanonHammerDamage:
|
|
LDA.l HammerableGanon : BEQ +
|
|
LDA $0E20, X : CMP.b #$D8 ; original behavior except ganon
|
|
RTL
|
|
+
|
|
LDA $0E20, X : CMP.b #$D6 ; original behavior
|
|
RTL
|
|
;================================================================================
|
|
GetSmithSword:
|
|
JSL ItemCheck_SmithSword : BEQ + : JMP.l Smithy_AlreadyGotSword : +
|
|
LDA.l SmithItemMode : BNE +
|
|
JMP.l Smithy_DoesntHaveSword ; Classic Smithy
|
|
+
|
|
LDA.l SmithItem : TAY
|
|
STZ $02E9 ; Item from NPC
|
|
PHX : JSL Link_ReceiveItem : PLX
|
|
REP #$20 : LDA $7EF360 : !SUB.w #$000A : STA $7EF360 : SEP #$20 ; Take 10 rupees
|
|
JSL ItemSet_SmithSword
|
|
JMP.l Smithy_AlreadyGotSword
|
|
;================================================================================
|
|
CheckMedallionSword:
|
|
PHB : PHX : PHY
|
|
LDA.l AllowSwordlessMedallionUse : BNE +++ : BRL + : +++
|
|
LDA $1B : BEQ .outdoors
|
|
.indoors
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA $A0 ; load room ID
|
|
CMP.w #$000E : BNE ++ : .freezor1
|
|
LDA $22 : AND.w #$01FF : CMP #368-8 : !BLT .normal : CMP #368+32-8 : !BGE .normal ; check x-coord
|
|
LDA $20 : AND.w #$01FF : CMP #400-22 : !BLT .normal : CMP #400+32-22 : !BGE .normal ; check y-coord
|
|
BRL .permit
|
|
++ : CMP.w #$007E : BNE ++ : .freezor2
|
|
LDA $22 : AND.w #$01FF : CMP #112-8 : !BLT .normal : CMP #112+32-8 : !BGE .normal ; check x-coord
|
|
LDA $20 : AND.w #$01FF : CMP #400-22 : !BLT .normal : CMP #400+32-22 : !BGE .normal ; check y-coord
|
|
BRL .permit
|
|
++ : CMP.w #$00DE : BNE ++ : .kholdstare
|
|
LDA $22 : AND.w #$01FF : CMP #368-8 : !BLT .normal : CMP #368+32-8 : !BGE .normal ; check x-coord
|
|
LDA $20 : AND.w #$01FF : CMP #144-22 : !BLT .normal : CMP #144+32-22 : !BGE .normal ; check y-coord
|
|
BRA .permit
|
|
++ : .normal
|
|
SEP #$20 ; set 8-bit accumulator
|
|
BRA .done
|
|
.outdoors
|
|
LDA $8A : CMP.b #$70 : BNE ++
|
|
LDA.l MireRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE +
|
|
LDA $7EF2F0 : AND.b #$20 : BNE +
|
|
LDA.b #$08 : PHA : PLB ; set data bank to $08
|
|
LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; misery mire
|
|
BRA +
|
|
++ : CMP.b #$47 : BNE ++
|
|
LDA.l TRockRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE +
|
|
LDA $7EF2C7 : AND.b #$20 : BNE +
|
|
LDA.b #$08 : PHA : PLB ; set data bank to $08
|
|
LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; turtle rock
|
|
++
|
|
.done
|
|
+
|
|
PLY : PLX : PLB
|
|
LDA $7EF359
|
|
RTL
|
|
.permit
|
|
SEP #$20 ; set 8-bit accumulator
|
|
PLY : PLX : PLB
|
|
LDA.b #$02 ; Pretend we have master sword
|
|
RTL
|
|
.medallion_type
|
|
db #$0F, #$10, #$11
|
|
;================================================================================
|