-
Notifications
You must be signed in to change notification settings - Fork 202
/
specials.asm
486 lines (421 loc) · 8.09 KB
/
specials.asm
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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
Special::
; Run script special de.
ld hl, SpecialsPointers
add hl, de
add hl, de
add hl, de
ld b, [hl]
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
ld a, b
jmp FarCall_hl
INCLUDE "data/events/special_pointers.asm"
Special_SetPlayerPalette:
ldh a, [hScriptVar]
ld d, a
farjp SetPlayerPalette
Special_SetCopycatPalette:
ldh a, [hScriptVar]
ld d, a
farjp SetCopycatPalette
Special_GameCornerPrizeMonCheckDex:
ldh a, [hScriptVar]
dec a
call CheckCaughtMon
ret nz
ldh a, [hScriptVar]
dec a
call SetSeenAndCaughtMon
call FadeToMenu
ldh a, [hScriptVar]
ld [wNamedObjectIndex], a
farcall NewPokedexEntry
jmp ExitAllMenus
SpecialSeenMon:
ldh a, [hScriptVar]
dec a
jmp SetSeenMon
Special_FindThatSpecies:
ldh a, [hScriptVar]
ld b, a
farcall _FindThatSpecies
jr z, FoundNone
jr FoundOne
Special_FindThatSpeciesYourTrainerID:
ldh a, [hScriptVar]
ld b, a
farcall _FindThatSpeciesYourTrainerID
jr z, FoundNone
; fallthrough
FoundOne:
ld a, TRUE
ldh [hScriptVar], a
ret
FoundNone:
xor a
ldh [hScriptVar], a
ret
SpecialNameRival:
ld b, $2 ; rival
ld de, wRivalName
farcall _NamingScreen
; default to "Silver"
ld hl, wRivalName
ld de, .DefaultRivalName
jmp InitName
.DefaultRivalName:
db "Silver@"
SpecialTrendyPhrase:
ld b, $3 ; trendy phrase
ld de, wTrendyPhrase
farcall _NamingScreen
; default to "Nothing"
ld hl, wTrendyPhrase
ld de, .DefaultTrendyPhrase
jmp InitName
.DefaultTrendyPhrase:
db "Nothing@"
SpecialNameRater:
farjp NameRater
Special_TownMap:
call FadeToMenu
farcall _TownMap
jmp ExitAllMenus
Special_DisplayLinkRecord:
call FadeToMenu
farcall DisplayLinkRecord
jmp ExitAllMenus
Special_PlayersHousePC:
xor a
ldh [hScriptVar], a
farcall _PlayersHousePC
ld a, c
ldh [hScriptVar], a
ret
BugContestJudging:
farcall _BugContestJudging
ld a, b
ldh [hScriptVar], a
dec a
jr z, .firstplace
dec a
jr z, .secondplace
dec a
jr z, .thirdplace
ld a, SHED_SHELL
jr .finish
.firstplace
ld hl, .FirstPlacePrizes
call GetHourIntervalValue
jr .finish
.secondplace
ld a, EVERSTONE
jr .finish
.thirdplace
ld a, SITRUS_BERRY
.finish
ld [wBugContestOfficerPrize], a
ret
.FirstPlacePrizes:
db MORN_HOUR, MOON_STONE
db DAY_HOUR, DAWN_STONE
db EVE_HOUR, SUN_STONE
db NITE_HOUR, DUSK_STONE
db -1, MOON_STONE
MapRadio:
ldh a, [hScriptVar]
ld e, a
farjp PlayRadio
Special_UnownPuzzle:
call FadeToMenu
farcall UnownPuzzle
ld a, [wSolvedUnownPuzzle]
ldh [hScriptVar], a
jmp ExitAllMenus
Special_SlotMachine:
call Special_CheckCoins
ret c
ld a, BANK(_SlotMachine)
ld hl, _SlotMachine
jr Special_StartGameCornerGame
Special_CardFlip:
call Special_CheckCoins
ret c
ld a, BANK(_CardFlip)
ld hl, _CardFlip
; fallthrough
;Special_UnusedMemoryGame:
; call Special_CheckCoins
; ret c
; ld a, BANK(_MemoryGame)
; ld hl, _MemoryGame
; call Special_StartGameCornerGame
; ret
Special_StartGameCornerGame:
call FarQueueScript
call FadeToMenu
ld hl, wQueuedScriptBank
ld a, [hli]
push af
ld a, [hli]
ld h, [hl]
ld l, a
pop af
call FarCall_hl
jmp ExitAllMenus
Special_CheckCoins:
ld hl, wCoins
ld a, [hli]
or [hl]
jr z, .no_coins
ld a, COIN_CASE
ld [wCurKeyItem], a
call CheckKeyItem
jr nc, .no_coin_case
and a
ret
.no_coins
ld hl, .NoCoinsText
jr .print
.no_coin_case
ld hl, .NoCoinCaseText
.print
call PrintText
scf
ret
.NoCoinsText:
; You have no coins.
text_far _NoCoinsText
text_end
.NoCoinCaseText:
; You don't have a COIN CASE.
text_far _NoCoinCaseText
text_end
SpecialCheckPokerus:
; Check if a monster in your party has Pokerus
farcall CheckPokerus
jr ScriptReturnCarry
Special_CheckLuckyNumberShowFlag:
farcall CheckLuckyNumberShowFlag
; fallthrough
ScriptReturnCarry:
jr c, .carry
xor a
ldh [hScriptVar], a
ret
.carry
ld a, 1
ldh [hScriptVar], a
ret
Special_ActivateFishingSwarm:
ldh a, [hScriptVar]
ld [wFishingSwarmFlag], a
ret
StoreSwarmMapIndices::
ld a, c
and a
jr nz, .yanma
; swarm dark cave violet entrance
ld a, d
ld [wDunsparceMapGroup], a
ld a, e
ld [wDunsparceMapNumber], a
ret
.yanma
ld a, d
ld [wYanmaMapGroup], a
ld a, e
ld [wYanmaMapNumber], a
ret
Special_ResetLuckyNumberShowFlag:
farcall RestartLuckyNumberCountdown
ld hl, wLuckyNumberShowFlag
res 0, [hl]
farjp LoadOrRegenerateLuckyIDNumber
SpecialSnorlaxAwake:
; Check if the Poké Flute channel is playing.
; outputs:
; hScriptVar is 1 if the conditions are met, otherwise 0.
; check background music
ld a, [wMapMusic]
cp MUSIC_POKE_FLUTE_CHANNEL
ld a, TRUE
jr z, .done
xor a ; ld a, FALSE
.done
ldh [hScriptVar], a
ret
PlayCurMonCry:
ld a, [wCurPartySpecies]
jmp PlayCry
Special_FadeOutMusic:
xor a ; MUSIC_NONE
ld [wMusicFadeIDLo], a
ld [wMusicFadeIDHi], a
ld a, $2
ld [wMusicFade], a
ret
Diploma:
call FadeToMenu
farcall _Diploma
jmp ExitAllMenus
Special_GetOvercastIndex::
call GetOvercastIndex
ldh [hScriptVar], a
ret
CheckIfTrendyPhraseIsLucky:
xor a
ldh [hScriptVar], a
ld hl, wTrendyPhrase
ld bc, .KeyPhrase
ld d, 6
.loop
ld a, [bc]
ld e, a
ld a, [hli]
cp e
ret nz
inc bc
dec d
jr nz, .loop
ld a, 1
ldh [hScriptVar], a
ret
.KeyPhrase:
db "Lucky@"
RespawnOneOffs:
eventflagreset EVENT_BEAT_LAWRENCE
eventflagreset EVENT_BEAT_FLANNERY
eventflagreset EVENT_BEAT_MAYLENE
eventflagreset EVENT_BEAT_SKYLA_AGAIN
eventflagreset EVENT_BEAT_KUKUI
eventflagcheck EVENT_GOT_MUSCLE_BAND_FROM_STEVEN
jr z, .SkipSteven
eventflagset EVENT_EMBEDDED_TOWER_STEVEN_1
eventflagreset EVENT_EMBEDDED_TOWER_STEVEN_2
eventflagreset EVENT_BEAT_STEVEN
.SkipSteven
eventflagcheck EVENT_GOT_WISE_GLASSES_FROM_CYNTHIA
jr z, .SkipCynthia
eventflagset EVENT_MYSTRI_STAGE_CYNTHIA
eventflagreset EVENT_SINJOH_RUINS_HOUSE_CYNTHIA
eventflagreset EVENT_BEAT_CYNTHIA
.SkipCynthia
ld a, SUDOWOODO - 1
call CheckCaughtMon
jr nz, .CaughtSudowoodo
eventflagreset EVENT_ROUTE_36_SUDOWOODO
.CaughtSudowoodo
ld a, ARTICUNO - 1
call CheckCaughtMon
jr nz, .CaughtArticuno
eventflagreset EVENT_SEAFOAM_ISLANDS_ARTICUNO
.CaughtArticuno
ld a, ZAPDOS - 1
call CheckCaughtMon
jr nz, .CaughtZapdos
eventflagreset EVENT_ROUTE_10_ZAPDOS
eventflagreset EVENT_ZAPDOS_GONE
.CaughtZapdos
ld a, MOLTRES - 1
call CheckCaughtMon
jr nz, .CaughtMoltres
eventflagreset EVENT_CINNABAR_VOLCANO_MOLTRES
.CaughtMoltres
ld a, MEWTWO - 1
call CheckCaughtMon
jr nz, .CaughtMewtwo
eventflagreset EVENT_CERULEAN_CAVE_MEWTWO
.CaughtMewtwo
ld a, MEW - 1
call CheckCaughtMon
jr nz, .CaughtMew
eventflagreset EVENT_FARAWAY_JUNGLE_MEW
.CaughtMew
ld a, RAIKOU - 1
call CheckCaughtMon
jr nz, .CaughtRaikou
ld hl, wRoamMon1Species
ld a, [hl]
and a
call z, RespawnRoamingRaikou
.CaughtRaikou
ld a, ENTEI - 1
call CheckCaughtMon
jr nz, .CaughtEntei
ld hl, wRoamMon2Species
ld a, [hl]
and a
call z, RespawnRoamingEntei
.CaughtEntei
eventflagcheck EVENT_FOUGHT_SUICUNE
jr z, .CaughtSuicune
ld a, SUICUNE - 1
call CheckCaughtMon
jr nz, .CaughtSuicune
ld hl, wRoamMon3Species
ld a, [hl]
and a
call z, RespawnRoamingSuicune
.CaughtSuicune
ld a, LUGIA - 1
call CheckCaughtMon
jr nz, .CaughtLugia
eventflagreset EVENT_WHIRL_ISLAND_LUGIA_CHAMBER_LUGIA
eventflagreset EVENT_FOUGHT_LUGIA
.CaughtLugia
ld a, HO_OH - 1
call CheckCaughtMon
ret nz
eventflagreset EVENT_TIN_TOWER_ROOF_HO_OH
eventflagreset EVENT_FOUGHT_HO_OH
ret
RespawnRoamingRaikou:
ld a, RAIKOU
ld [wRoamMon1Species], a
ld a, 50
ld [wRoamMon1Level], a
ld a, GROUP_ROUTE_42
ld [wRoamMon1MapGroup], a
ld a, MAP_ROUTE_42
ld [wRoamMon1MapNumber], a
xor a ; generate new stats
ld [wRoamMon1HP], a
ret
RespawnRoamingEntei:
ld a, ENTEI
ld [wRoamMon2Species], a
ld a, 50
ld [wRoamMon2Level], a
ld a, GROUP_ROUTE_37
ld [wRoamMon2MapGroup], a
ld a, MAP_ROUTE_37
ld [wRoamMon2MapNumber], a
xor a ; generate new stats
ld [wRoamMon2HP], a
ret
RespawnRoamingSuicune:
ld a, SUICUNE
ld [wRoamMon3Species], a
ld a, 50
ld [wRoamMon3Level], a
ld a, GROUP_ROUTE_38
ld [wRoamMon3MapGroup], a
ld a, MAP_ROUTE_38
ld [wRoamMon3MapNumber], a
xor a ; generate new stats
ld [wRoamMon3HP], a
ret
BillBoxSwitchCheck:
; Returns 0 if our storage system box-wise is completely full, 1 otherwise.
farcall NewStorageBoxPointer
ld b, 1
jr nc, .ok
jr nz, .ok
dec b
.ok
ld a, b
ldh [hScriptVar], a
ret