summaryrefslogtreecommitdiff
path: root/engine/engine_flags.asm
blob: 9fa5f8c06e006128c9718d1556eca0d2a05826a3 (plain)
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