-
Notifications
You must be signed in to change notification settings - Fork 53
/
Copy pathspriteswap.asm
82 lines (62 loc) · 1.58 KB
/
spriteswap.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
org $008A01 ; 0xA01 - Bank00.asm (LDA.b #$10 : STA $4304 : STA $4314 : STA $4324)
LDA.b PlayerSpriteBank
org $1BEDF9
JSL SpriteSwap_Palette_ArmorAndGloves ; 4bytes
RTL ; 1byte
NOP
org $1BEE1B
JSL SpriteSwap_Palette_ArmorAndGloves_part_two
RTL
!BANK_BASE = $A9
org $BF8000
SwapSpriteIfNecessary:
PHP
SEP #$20 ; set 8-bit accumulator
LDA.l SpriteSwapper : BEQ + : CLC : ADC.b #!BANK_BASE : CMP.b PlayerSpriteBank : BEQ +
STA.b PlayerSpriteBank
STZ.w SkipOAM ; Set Normal Sprite NMI
JSL.l SpriteSwap_Palette_ArmorAndGloves_part_two
+
PLP
RTL
SpriteSwap_Palette_ArmorAndGloves:
{
; DEDF9
LDA.l SpriteSwapper : BNE .continue
LDA.b #$10 : STA.b PlayerSpriteBank ; Load Original Sprite Location
REP #$21
LDA.l ArmorEquipment
JSL $9BEDFF ; Read Original Palette Code
RTL
.part_two
SEP #$30
LDA.l SpriteSwapper : BNE .continue
REP #$30
LDA.l GloveEquipment
JSL $9BEE21 ; Read Original Palette Code
RTL
.continue
PHX : PHY : PHA
; Load armor palette
PHB : PHK : PLB
REP #$20 ; set 16-bit accumulator
; Check what Link's armor value is.
LDA.l ArmorEquipment : AND.w #$00FF : TAX
LDA.l $9BEC06, X : AND.w #$00FF : ASL A : ADC.w #$F000 : STA.b Scrap00
; replace D308 by 7000 and search
REP #$10 ; set 16-bit index registers
LDA.w #$01E2 ; Target SP-7 (sprite palette 6)
LDX.w #$000E ; Palette has 15 colors
TXY : TAX
LDA.b PlayerSpriteBank : AND.w #$00FF : STA.b Scrap02
.loop
LDA.b [Scrap00] : STA.l PaletteBufferAux, X : STA.l PaletteBuffer, X
INC.b Scrap00 : INC.b Scrap00
INX #2
DEY : BPL .loop
SEP #$30
PLB
INC.b NMICGRAM
PLA : PLY : PLX
RTL
}