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
|
ResetMapBufferEventFlags::
xor a
ld hl, wEventFlags
ld [hli], a
ret
ResetBikeFlags::
xor a
ld hl, wBikeFlags
ld [hli], a
ld [hl], a
ret
ResetFlashIfOutOfCave::
ld a, [wEnvironment]
cp ROUTE
jr z, .outdoors
cp TOWN
jr z, .outdoors
ret
.outdoors
ld hl, wStatusFlags
res STATUSFLAGS_FLASH_F, [hl]
ret
EventFlagAction::
ld hl, wEventFlags
call FlagAction
ret
FlagAction::
; Perform action b on bit de in flag array hl.
; inputs:
; b: function
; 0 RESET_FLAG clear bit
; 1 SET_FLAG set bit
; 2 CHECK_FLAG check bit
; de: bit number
; hl: pointer to the flag array
; get index within the byte
ld a, e
and 7
; shift de right by three bits (get the index within memory)
rept 3
srl d
rr e
endr
add hl, de
; implement a decoder
ld c, 1
rrca
jr nc, .one
rlc c
.one
rrca
jr nc, .two
rlc c
rlc c
.two
rrca
jr nc, .three
swap c
.three
; check b's value: 0, 1, 2
ld a, b
cp SET_FLAG
jr c, .clearbit ; RESET_FLAG
jr z, .setbit ; SET_FLAG
; check bit
ld a, [hl]
and c
ld c, a
ret
.setbit
; set bit
ld a, [hl]
or c
ld [hl], a
ret
.clearbit
; clear bit
ld a, c
cpl
and [hl]
ld [hl], a
ret
CheckReceivedDex::
ld de, ENGINE_POKEDEX
ld b, CHECK_FLAG
farcall EngineFlagAction
ld a, c
and a
ret
CheckBPressedDebug:: ; unreferenced
; Used in debug ROMs to walk through walls and avoid encounters.
ld a, [wDebugFlags]
bit DEBUG_FIELD_F, a
ret z
ldh a, [hJoyDown]
bit B_BUTTON_F, a
ret
xor_a::
xor a
ret
xor_a_dec_a::
xor a
dec a
ret
CheckFieldDebug:: ; unreferenced
push hl
ld hl, wDebugFlags
bit DEBUG_FIELD_F, [hl]
pop hl
ret
|