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
|
EngineFlagAction:: ; c01b
; Do action b on engine flag de
;
; b = 0: reset flag
; = 1: set flag
; > 1: check flag, result in c
;
; Setting/resetting does not return a result.
; 16-bit flag ids are considered invalid, but it's nice
; to know that the infrastructure is there.
ld a, d
cp 0
jr z, .ceiling
jr c, .read ; cp 0 can't set carry!
jr .invalid
; There are only $a2 engine flags, so
; anything beyond that is invalid too.
.ceiling
ld a, e
cp NUM_ENGINE_FLAGS
jr c, .read
; Invalid flags are treated as flag 00.
.invalid
xor a
ld e, a
ld d, a
; Get this flag's location.
.read
ld hl, EngineFlags
; location
add hl, de
add hl, de
; bit
add hl, de
; location
ld e, [hl]
inc hl
ld d, [hl]
inc hl
; bit
ld c, [hl]
; What are we doing with this flag?
ld a, b
cp 1
jr c, .reset ; b = 0
jr z, .set ; b = 1
; Return the given flag in c.
.check
ld a, [de]
and c
ld c, a
ret
; Set the given flag.
.set
ld a, [de]
or c
ld [de], a
ret
; Reset the given flag.
.reset
ld a, c
cpl ; AND all bits except the one in question
ld c, a
ld a, [de]
and c
ld [de], a
ret
; 404d
EngineFlags:
; All locations are in WRAM bank 1.
; location, bit
engine_flag ENGINE_RADIO_CARD
engine_flag ENGINE_MAP_CARD
engine_flag ENGINE_PHONE_CARD
engine_flag ENGINE_EXPN_CARD
engine_flag ENGINE_POKEGEAR
engine_flag ENGINE_DAY_CARE_MAN_HAS_EGG
engine_flag ENGINE_DAY_CARE_MAN_HAS_MON
engine_flag ENGINE_DAY_CARE_LADY_HAS_MON
engine_flag ENGINE_MOM_SAVING_MONEY
engine_flag ENGINE_DST
engine_flag ENGINE_0A
engine_flag ENGINE_POKEDEX
engine_flag ENGINE_UNOWN_DEX
engine_flag ENGINE_POKERUS
engine_flag ENGINE_ROCKET_SIGNAL_ON_CH20
engine_flag ENGINE_CREDITS_SKIP
engine_flag ENGINE_BUG_CONTEST_TIMER
engine_flag ENGINE_SAFARI_ZONE
engine_flag ENGINE_ROCKETS_IN_RADIO_TOWER
engine_flag ENGINE_BIKE_SHOP_CALL_ENABLED
engine_flag ENGINE_GIVE_POKERUS
engine_flag ENGINE_REACHED_GOLDENROD
engine_flag ENGINE_ROCKETS_IN_MAHOGANY
engine_flag ENGINE_STRENGTH_ACTIVE
engine_flag ENGINE_ALWAYS_ON_BIKE
engine_flag ENGINE_DOWNHILL
engine_flag ENGINE_ZEPHYRBADGE
engine_flag ENGINE_HIVEBADGE
engine_flag ENGINE_PLAINBADGE
engine_flag ENGINE_FOGBADGE
engine_flag ENGINE_MINERALBADGE
engine_flag ENGINE_STORMBADGE
engine_flag ENGINE_GLACIERBADGE
engine_flag ENGINE_RISINGBADGE
engine_flag ENGINE_BOULDERBADGE
engine_flag ENGINE_CASCADEBADGE
engine_flag ENGINE_THUNDERBADGE
engine_flag ENGINE_RAINBOWBADGE
engine_flag ENGINE_SOULBADGE
engine_flag ENGINE_MARSHBADGE
engine_flag ENGINE_VOLCANOBADGE
engine_flag ENGINE_EARTHBADGE
engine_flag ENGINE_UNLOCKED_UNOWNS_A_TO_K
engine_flag ENGINE_UNLOCKED_UNOWNS_L_TO_R
engine_flag ENGINE_UNLOCKED_UNOWNS_S_TO_W
engine_flag ENGINE_UNLOCKED_UNOWNS_X_TO_Z
engine_flag ENGINE_UNLOCKED_UNOWNS_UNUSED_4
engine_flag ENGINE_UNLOCKED_UNOWNS_UNUSED_5
engine_flag ENGINE_UNLOCKED_UNOWNS_UNUSED_6
engine_flag ENGINE_UNLOCKED_UNOWNS_UNUSED_7
engine_flag ENGINE_FLYPOINT_PLAYERS_HOUSE
engine_flag ENGINE_FLYPOINT_VIRIDIAN_POKECENTER
engine_flag ENGINE_FLYPOINT_PALLET
engine_flag ENGINE_FLYPOINT_VIRIDIAN
engine_flag ENGINE_FLYPOINT_PEWTER
engine_flag ENGINE_FLYPOINT_CERULEAN
engine_flag ENGINE_FLYPOINT_ROCK_TUNNEL
engine_flag ENGINE_FLYPOINT_VERMILION
engine_flag ENGINE_FLYPOINT_LAVENDER
engine_flag ENGINE_FLYPOINT_SAFFRON
engine_flag ENGINE_FLYPOINT_CELADON
engine_flag ENGINE_FLYPOINT_FUCHSIA
engine_flag ENGINE_FLYPOINT_CINNABAR
engine_flag ENGINE_FLYPOINT_INDIGO_PLATEAU
engine_flag ENGINE_FLYPOINT_NEW_BARK
engine_flag ENGINE_FLYPOINT_CHERRYGROVE
engine_flag ENGINE_FLYPOINT_VIOLET
engine_flag ENGINE_FLYPOINT_AZALEA
engine_flag ENGINE_FLYPOINT_CIANWOOD
engine_flag ENGINE_FLYPOINT_GOLDENROD
engine_flag ENGINE_FLYPOINT_OLIVINE
engine_flag ENGINE_FLYPOINT_ECRUTEAK
engine_flag ENGINE_FLYPOINT_MAHOGANY
engine_flag ENGINE_FLYPOINT_LAKE_OF_RAGE
engine_flag ENGINE_FLYPOINT_BLACKTHORN
engine_flag ENGINE_FLYPOINT_SILVER_CAVE
engine_flag ENGINE_FLYPOINT_UNUSED
engine_flag ENGINE_LUCKY_NUMBER_SHOW
engine_flag ENGINE_4E
engine_flag ENGINE_KURT_MAKING_BALLS
engine_flag ENGINE_DAILY_BUG_CONTEST
engine_flag ENGINE_SPECIAL_WILDDATA
engine_flag ENGINE_TIME_CAPSULE
engine_flag ENGINE_ALL_FRUIT_TREES
engine_flag ENGINE_GOT_SHUCKIE_TODAY
engine_flag ENGINE_GOLDENROD_UNDERGROUND_MERCHANT_CLOSED
engine_flag ENGINE_FOUGHT_IN_TRAINER_HALL_TODAY
engine_flag ENGINE_MT_MOON_SQUARE_CLEFAIRY
engine_flag ENGINE_UNION_CAVE_LAPRAS
engine_flag ENGINE_GOLDENROD_UNDERGROUND_GOT_HAIRCUT
engine_flag ENGINE_GOLDENROD_DEPT_STORE_TM27_RETURN
engine_flag ENGINE_DAISYS_GROOMING
engine_flag ENGINE_INDIGO_PLATEAU_RIVAL_FIGHT
|