forked from KatDevsGames/z3randomizer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathswordswap.asm
87 lines (86 loc) · 3.46 KB
/
swordswap.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
;================================================================================
; 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
;================================================================================
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:
;LDA $FFFFFF
PHB : PHX : PHY
LDA.l AllowSwordlessEntranceMedallion : BEQ +
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
++
+
PLY : PLX : PLB
LDA $7EF359
RTL
.permit
PLY : PLX : PLB
LDA.b #$02 ; Pretend we have master sword
RTL
.medallion_type
db #$0F, #$10, #$11
;================================================================================