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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
_SwitchPartyMons:
ld a, [wSwitchMon]
dec a
ld [wSwitchMonFrom], a
ld b, a
ld a, [wMenuCursorY]
dec a
ld [wSwitchMonTo], a
cp b
jr z, .skip
call .SwapMonAndMail
ld a, [wSwitchMonFrom]
call .ClearSprite
ld a, [wSwitchMonTo]
call .ClearSprite
.skip
ret
.ClearSprite:
push af
hlcoord 0, 1
ld bc, 2 * SCREEN_WIDTH
call AddNTimes
ld bc, 2 * SCREEN_WIDTH
ld a, " "
call ByteFill
pop af
ld hl, wVirtualOAMSprite00
ld bc, 4 * SPRITEOAMSTRUCT_LENGTH
call AddNTimes
ld de, SPRITEOAMSTRUCT_LENGTH
ld c, 4
.gfx_loop
ld [hl], SCREEN_WIDTH_PX ; y (off-screen)
add hl, de
dec c
jr nz, .gfx_loop
ld de, SFX_SWITCH_POKEMON
call WaitPlaySFX
ret
.SwapMonAndMail:
push hl
push de
push bc
ld bc, wPartySpecies
ld a, [wSwitchMonTo]
ld l, a
ld h, 0
add hl, bc
ld d, h
ld e, l
ld a, [wSwitchMonFrom]
ld l, a
ld h, 0
add hl, bc
ld a, [hl]
push af
ld a, [de]
ld [hl], a
pop af
ld [de], a
ld a, [wSwitchMonTo]
ld hl, wPartyMon1Species
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
push hl
ld de, wSwitchMonBuffer
ld bc, PARTYMON_STRUCT_LENGTH
call CopyBytes
ld a, [wSwitchMonFrom]
ld hl, wPartyMon1
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
pop de
push hl
ld bc, PARTYMON_STRUCT_LENGTH
call CopyBytes
pop de
ld hl, wSwitchMonBuffer
ld bc, PARTYMON_STRUCT_LENGTH
call CopyBytes
ld a, [wSwitchMonTo]
ld hl, wPartyMonOTs
call SkipNames
push hl
call .CopyNameToSwitchMonBuffer
ld a, [wSwitchMonFrom]
ld hl, wPartyMonOTs
call SkipNames
pop de
push hl
call .CopyName
pop de
ld hl, wSwitchMonBuffer
call .CopyName
ld hl, wPartyMonNicknames
ld a, [wSwitchMonTo]
call SkipNames
push hl
call .CopyNameToSwitchMonBuffer
ld hl, wPartyMonNicknames
ld a, [wSwitchMonFrom]
call SkipNames
pop de
push hl
call .CopyName
pop de
ld hl, wSwitchMonBuffer
call .CopyName
ld hl, sPartyMail
ld a, [wSwitchMonTo]
ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
push hl
ld de, wSwitchMonBuffer
ld bc, MAIL_STRUCT_LENGTH
ld a, BANK(sPartyMail)
call OpenSRAM
call CopyBytes
ld hl, sPartyMail
ld a, [wSwitchMonFrom]
ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
pop de
push hl
ld bc, MAIL_STRUCT_LENGTH
call CopyBytes
pop de
ld hl, wSwitchMonBuffer
ld bc, MAIL_STRUCT_LENGTH
call CopyBytes
call CloseSRAM
pop bc
pop de
pop hl
ret
.CopyNameToSwitchMonBuffer:
ld de, wSwitchMonBuffer
.CopyName:
ld bc, NAME_LENGTH
call CopyBytes
ret
|