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
|
INCLUDE "constants.asm"
SECTION "home/overworld.asm@Startmenu and Select Button Check", ROM0
OverworldStartButtonCheck::
ldh a, [hJoyState]
bit START_F, a
ret z
and (START | B_BUTTON)
cp (START | B_BUTTON)
jr nz, .regularMenu
ld a, [wDebugFlags]
bit DEBUG_FIELD_F, a
ret z ; debug disabled
callba FieldDebugMenu
jr CheckStartmenuSelectHook
.regularMenu
callba DisplayStartMenu
jr CheckStartmenuSelectHook
SelectButtonFunction::
callab CheckRegisteredItem
CheckStartmenuSelectHook:
ldh a, [hStartmenuCloseAndSelectHookEnable]
and a
ret z ; hook is disabled
ld hl, wQueuedScriptAddr
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wQueuedScriptBank]
call FarCall_hl
ld hl, hStartmenuCloseAndSelectHookEnable
xor a
ld [hli], a ; clear hook enable and ???
ld [hl], a
dec a
ret
Function2c4a:
; copy of Function2ba8
; calling Functiond4e6 instead of Functiond6e4
.loop
call Function2c5a
and a
ld a, [$cb6e]
bit 5, a
ret z
bit 6, a
jr z, .loop
scf
ret
Function2c5a:
ldh a, [hROMBank]
push af
ld a, BANK(Function50b9)
call Bankswitch
call Function50b9
call Function18a0
ld a, BANK(Functiond4e6)
call Bankswitch
call Functiond4e6
ld a, BANK(_UpdateSprites)
call Bankswitch
call _UpdateSprites
call DelayFrame
call UpdateToolgear
ld hl, wToolgearFlags
set 2, [hl]
call DelayFrame
pop af
call Bankswitch
ret
UpdateAndTransferToolgear:
call DelayFrame
call UpdateToolgear
ld hl, wToolgearFlags
set 2, [hl] ; ; transfer toolgear to window
call DelayFrame
ret
ScheduleNorthRowRedraw:
coord hl, 0, 0
call CopyToRedrawRowOrColumnSrcTiles
ld a, [wBGMapAnchor]
ldh [hRedrawRowOrColumnDest], a
ld a, [wBGMapAnchor + 1]
ldh [hRedrawRowOrColumnDest + 1], a
ld a, REDRAW_ROW
ldh [hRedrawRowOrColumnMode], a
ret
ScheduleSouthRowRedraw:
coord hl, 0, SCREEN_HEIGHT - 2
call CopyToRedrawRowOrColumnSrcTiles
ld a, [wBGMapAnchor]
ld l, a
ld a, [wBGMapAnchor + 1]
ld h, a
ld bc, BG_MAP_WIDTH * (SCREEN_HEIGHT - 2)
add hl, bc
; the following 4 lines wrap us from bottom to top if necessary
ld a, h
and HIGH(vBGMap1 - vBGMap0 - $01)
or HIGH(vBGMap0)
ldh [hRedrawRowOrColumnDest + 1], a
ld a, l
ldh [hRedrawRowOrColumnDest], a
ld a, REDRAW_ROW
ldh [hRedrawRowOrColumnMode], a
ret
ScheduleEastColumnRedraw:
coord hl, SCREEN_WIDTH - 2, 0
call ScheduleColumnRedrawHelper
ld a, [wBGMapAnchor]
ld c, a
and ($FF ^ (BG_MAP_WIDTH - 1)) ; mask upper address bits
ld b, a
ld a, c
add SCREEN_WIDTH - 2
and BG_MAP_WIDTH - 1 ; mask lower address bits
or b
ldh [hRedrawRowOrColumnDest], a
ld a, [wBGMapAnchor + 1]
ldh [hRedrawRowOrColumnDest + 1], a
ld a, REDRAW_COL
ldh [hRedrawRowOrColumnMode], a
ret
ScheduleWestColumnRedraw:
coord hl, 0, 0
call ScheduleColumnRedrawHelper
ld a, [wBGMapAnchor]
ldh [hRedrawRowOrColumnDest], a
ld a, [wBGMapAnchor + 1]
ldh [hRedrawRowOrColumnDest + 1], a
ld a, REDRAW_COL
ldh [hRedrawRowOrColumnMode], a
ret
CopyToRedrawRowOrColumnSrcTiles:
ld de, wRedrawRowOrColumnSrcTiles
ld c, 2 * SCREEN_WIDTH
.loop
ld a, [hli]
ld [de], a
inc de
dec c
jr nz, .loop
ret
ScheduleColumnRedrawHelper:
ld de, wRedrawRowOrColumnSrcTiles
ld c, SCREEN_HEIGHT
.loop
ld a, [hli]
ld [de], a
inc de
ld a, [hl]
ld [de], a
inc de
ld a, SCREEN_WIDTH - 1
add l
ld l, a
jr nc, .noCarry
inc h
.noCarry
dec c
jr nz, .loop
ret
SECTION "home/overworld.asm@QueueScript", ROM0
QueueScript::
; Install a function that is called as soon as
; the start menu is closed or directly after
; the select button function ran
ld [wQueuedScriptBank], a
ld a, l
ld [wQueuedScriptAddr], a
ld a, h
ld [wQueuedScriptAddr + 1], a
ret
|