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
|
HandleMenuInputDuplicate: ; unreferenced
xor a
ld [wPartyMenuAnimMonEnabled], a
HandleMenuInputPokemonSelectionDuplicate: ; unreferenced
ldh a, [hDownArrowBlinkCount1]
push af
ldh a, [hDownArrowBlinkCount2]
push af ; save existing values on stack
xor a
ldh [hDownArrowBlinkCount1], a ; blinking down arrow timing value 1
ld a, 6
ldh [hDownArrowBlinkCount2], a ; blinking down arrow timing value 2
.loop1
xor a
ld [wAnimCounter], a ; counter for pokemon shaking animation
call PlaceMenuCursorDuplicate
call JoypadLowSensitivity
ldh a, [hJoy5]
and a ; was a key pressed?
jr nz, .keyPressed
pop af
ldh [hDownArrowBlinkCount2], a
pop af
ldh [hDownArrowBlinkCount1], a ; restore previous values
xor a
ld [wMenuWrappingEnabled], a ; disable menu wrapping
ret
.keyPressed
xor a
ld [wCheckFor180DegreeTurn], a
ldh a, [hJoy5]
ld b, a
bit BIT_D_UP, a
jr z, .checkIfDownPressed
.upPressed
ld a, [wCurrentMenuItem] ; selected menu item
and a ; already at the top of the menu?
jr z, .checkOtherKeys
.notAtTop
dec a
ld [wCurrentMenuItem], a ; move selected menu item up one space
jr .checkOtherKeys
.checkIfDownPressed
bit 7, a
jr z, .checkOtherKeys
.downPressed
ld a, [wCurrentMenuItem]
inc a
ld c, a
ld a, [wMaxMenuItem]
cp c
jr c, .checkOtherKeys
ld a, c
ld [wCurrentMenuItem], a
.checkOtherKeys
ld a, [wMenuWatchedKeys]
and b ; does the menu care about any of the pressed keys?
jp z, .loop1
.checkIfAButtonOrBButtonPressed
ldh a, [hJoy5]
and A_BUTTON | B_BUTTON
jr z, .skipPlayingSound
.AButtonOrBButtonPressed
ld a, SFX_PRESS_AB
call PlaySound ; play sound
.skipPlayingSound
pop af
ldh [hDownArrowBlinkCount2], a
pop af
ldh [hDownArrowBlinkCount1], a ; restore previous values
ldh a, [hJoy5]
ret
PlaceMenuCursorDuplicate:
ld a, [wTopMenuItemY]
and a
jr z, .asm_f5ac0
hlcoord 0, 0
ld bc, SCREEN_WIDTH
.loop
add hl, bc
dec a
jr nz, .loop
.asm_f5ac0
ld a, [wTopMenuItemX]
ld b, $0
ld c, a
add hl, bc
push hl
ld a, [wLastMenuItem]
and a
jr z, .asm_f5ad5
ld bc, $28
.loop2
add hl, bc
dec a
jr nz, .loop2
.asm_f5ad5
ld a, [hl]
cp "▶"
jr nz, .asm_f5ade
ld a, [wTileBehindCursor]
ld [hl], a
.asm_f5ade
pop hl
ld a, [wCurrentMenuItem]
and a
jr z, .asm_f5aec
ld bc, $28
.loop3
add hl, bc
dec a
jr nz, .loop3
.asm_f5aec
ld a, [hl]
cp "▶"
jr z, .asm_f5af4
ld [wTileBehindCursor], a
.asm_f5af4
ld a, "▶"
ld [hl], a
ld a, l
ld [wMenuCursorLocation], a
ld a, h
ld [wMenuCursorLocation + 1], a
ld a, [wCurrentMenuItem]
ld [wLastMenuItem], a
ret
|