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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
|
include "constants.asm"
SECTION "Menu Window Functions", ROM0 [$1bf4]
PushWindow:: ; 00:1bf4
ld hl, PlaceWaitingText
ld a, $9
jp FarCall_hl
ExitMenu:: ; 00:1bfc
push af
callab _ExitMenu
call Function1c0a
pop af
ret
Function1c0a:: ; 00:1c0a
ld a, [wVramState]
bit 0, a
ret z
xor a
call OpenSRAM
hlcoord 0, 0
ld de, sSpriteBuffer0
ld bc, $168
call CopyBytes
call CloseSRAM
call OverworldTextModeSwitch
xor a
call OpenSRAM
ld hl, sSpriteBuffer0
decoord 0, 0
ld bc, $168
.asm_1c33: ; 00:1c33
ld a, [hl]
cp $61
jr c, .asm_1c39
ld [de], a
.asm_1c39: ; 00:1c39
inc hl
inc de
dec bc
ld a, c
or b
jr nz, .asm_1c33
call CloseSRAM
ret
InitVerticalMenuCursor:: ; 00:1c44
jpab _InitVerticalMenuCursor
CloseWindow:: ; 00:1c4c
push af
call ExitMenu
call WaitBGMap
call UpdateSprites
pop af
ret
Function1c58::
jpab Function24185
RestoreTileBackup:: ; 00:1c60
call MenuBoxCoord2Tile
call GetMenuBoxDims
inc b
inc c
.asm_1c68: ; 00:1c68
push bc
push hl
.asm_1c6a: ; 00:1c6a
ld a, [de]
ld [hli], a
dec de
dec c
jr nz, .asm_1c6a
pop hl
ld bc, SCREEN_WIDTH
add hl, bc
pop bc
dec b
jr nz, .asm_1c68
ret
PopWindow:: ; 00:1c7a
ld b, $10
ld de, wMenuDataHeader
.asm_1c7f: ; 00:1c7f
ld a, [hld]
ld [de], a
inc de
dec b
jr nz, .asm_1c7f
ret
GetMenuBoxDims:: ; 00:1c86
push hl
ld hl, wMenuBorderTopCoord
ld a, [hli]
ld b, a
ld a, [hli]
ld c, a
ld a, [hli]
sub b
ld b, a
ld a, [hli]
sub c
ld c, a
pop hl
ret
CopyMenuData:: ; 00:1c96
push hl
push de
push bc
push af
ld hl, wMenuDataPointer
ld a, [hli]
ld h, [hl]
ld l, a
ld de, wMenuDataFlags
ld bc, $10
call CopyBytes
pop af
pop bc
pop de
pop hl
ret
GetWindowStackTop:: ; 00:1cae
ld hl, wWindowStackPointer
ld a, [hli]
ld h, [hl]
ld l, a
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
ret
PlaceVerticalMenuItems:: ; 00:1cb9
call CopyMenuData
ld hl, wMenuDataPointer
ld e, [hl]
inc hl
ld d, [hl]
call GetMenuTextStartCoord
call Coord2Tile ; hl now contains the tilemap address where we will start printing text.
inc de
ld a, [de]
inc de
ld b, a
.asm_1ccc: ; 00:1ccc
push bc
call PlaceString
inc de
ld bc, 2 * SCREEN_WIDTH
add hl, bc
pop bc
dec b
jr nz, .asm_1ccc
ld a, [wMenuDataFlags]
bit 4, a
ret z
call MenuBoxCoord2Tile
ld a, [de]
ld c, a
inc de
ld b, $0
add hl, bc
jp PlaceString
MenuBox:: ; 00:1ceb
call MenuBoxCoord2Tile
call GetMenuBoxDims
dec b
dec c
jp DrawTextBox
GetMenuTextStartCoord:: ; 00:1cf6
ld a, [wMenuBorderTopCoord]
ld b, a
inc b
ld a, [wMenuBorderLeftCoord]
ld c, a
inc c
ld a, [wMenuDataFlags]
bit 6, a
jr nz, .asm_1d08
inc b
.asm_1d08: ; 00:1d08
ld a, [wMenuDataFlags]
bit 7, a
jr z, .asm_1d10
inc c
.asm_1d10: ; 00:1d10
ret
ClearMenuBoxInterior::
call MenuBoxCoord2Tile
ld bc, SCREEN_WIDTH + 1
add hl, bc
call GetMenuBoxDims
dec b
dec c
call ClearBox
ret
ClearWholeMenuBox::
call MenuBoxCoord2Tile
call GetMenuBoxDims
inc c
inc b
call ClearBox
ret
MenuBoxCoord2Tile:: ; 00:1d2d
ld a, [wMenuBorderLeftCoord]
ld c, a
ld a, [wMenuBorderTopCoord]
ld b, a
Coord2Tile:: ; 00:1d35
xor a
ld h, a
ld l, b
ld a, c
ld b, h
ld c, l
add hl, hl
add hl, hl
add hl, bc
add hl, hl
add hl, hl
ld c, a
xor a
ld b, a
add hl, bc
bccoord 0, 0
add hl, bc
ret
|