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
|
Route22_Script:
call EnableAutoTextBoxDrawing
ld hl, Route22_ScriptPointers
ld a, [wRoute22CurScript]
jp CallFunctionInTable
Route22_ScriptPointers:
def_script_pointers
dw_const Route22DefaultScript, SCRIPT_ROUTE22_DEFAULT
dw_const Route22Rival1StartBattleScript, SCRIPT_ROUTE22_RIVAL1_START_BATTLE
dw_const Route22Rival1AfterBattleScript, SCRIPT_ROUTE22_RIVAL1_AFTER_BATTLE
dw_const Route22Rival1ExitScript, SCRIPT_ROUTE22_RIVAL1_EXIT
dw_const Route22Rival2StartBattleScript, SCRIPT_ROUTE22_RIVAL2_START_BATTLE
dw_const Route22Rival2AfterBattleScript, SCRIPT_ROUTE22_RIVAL2_AFTER_BATTLE
dw_const Route22Rival2ExitScript, SCRIPT_ROUTE22_RIVAL2_EXIT
dw_const Route22NoopScript, SCRIPT_ROUTE22_NOOP
Route22SetDefaultScript:
xor a ; SCRIPT_ROUTE22_DEFAULT
ld [wJoyIgnore], a
ld [wRoute22CurScript], a
Route22NoopScript:
ret
Route22GetRivalTrainerNoByStarterScript:
ld a, [wRivalStarter]
ld b, a
.next_trainer_no
ld a, [hli]
cp b
jr z, .got_trainer_no
inc hl
jr .next_trainer_no
.got_trainer_no
ld a, [hl]
ld [wTrainerNo], a
ret
Route22MoveRivalRightScript:
ld de, Route22RivalMovementData
ld a, [wSavedCoordIndex]
cp $1
jr z, .skip_first_right
inc de
.skip_first_right
call MoveSprite
ld a, SPRITE_FACING_RIGHT
ldh [hSpriteFacingDirection], a
jp SetSpriteFacingDirectionAndDelay
Route22RivalMovementData:
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db -1 ; end
Route22DefaultScript:
CheckEvent EVENT_ROUTE22_RIVAL_WANTS_BATTLE
ret z
ld hl, .Route22RivalBattleCoords
call ArePlayerCoordsInArray
ret nc
ld a, [wCoordIndex]
ld [wSavedCoordIndex], a
xor a
ldh [hJoyHeld], a
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
ld [wJoyIgnore], a
ld a, PLAYER_DIR_LEFT
ld [wPlayerMovingDirection], a
CheckEvent EVENT_1ST_ROUTE22_RIVAL_BATTLE
jr nz, Route22FirstRivalBattleScript
CheckEventReuseA EVENT_2ND_ROUTE22_RIVAL_BATTLE
jp nz, Route22SecondRivalBattleScript
ret
.Route22RivalBattleCoords
dbmapcoord 29, 4
dbmapcoord 29, 5
db -1 ; end
Route22FirstRivalBattleScript:
ld a, ROUTE22_RIVAL1
ld [wEmotionBubbleSpriteIndex], a
xor a ; EXCLAMATION_BUBBLE
ld [wWhichEmotionBubble], a
predef EmotionBubble
ld a, [wWalkBikeSurfState]
and a
jr z, .walking
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
.walking
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
call PlayMusic
ld a, ROUTE22_RIVAL1
ldh [hSpriteIndex], a
call Route22MoveRivalRightScript
ld a, SCRIPT_ROUTE22_RIVAL1_START_BATTLE
ld [wRoute22CurScript], a
ret
Route22Rival1StartBattleScript:
ld a, [wStatusFlags5]
bit BIT_SCRIPTED_NPC_MOVEMENT, a
ret nz
ld a, [wSavedCoordIndex]
cp 1 ; index of second, lower entry in Route22DefaultScript.Route22RivalBattleCoords
jr nz, .set_rival_facing_right
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_UP
jr .set_rival_facing_direction
.set_rival_facing_right
ld a, SPRITE_FACING_RIGHT
.set_rival_facing_direction
ldh [hSpriteFacingDirection], a
ld a, ROUTE22_RIVAL1
ldh [hSpriteIndex], a
call SetSpriteFacingDirectionAndDelay
xor a
ld [wJoyIgnore], a
ld a, TEXT_ROUTE22_RIVAL1
ldh [hTextID], a
call DisplayTextID
ld hl, wStatusFlags3
set BIT_TALKED_TO_TRAINER, [hl]
set BIT_PRINT_END_BATTLE_TEXT, [hl]
ld hl, Route22Rival1DefeatedText
ld de, Route22Rival1VictoryText
call SaveEndBattleTextPointers
ld a, OPP_RIVAL1
ld [wCurOpponent], a
ld hl, .StarterTable
call Route22GetRivalTrainerNoByStarterScript
ld a, SCRIPT_ROUTE22_RIVAL1_AFTER_BATTLE
ld [wRoute22CurScript], a
ret
.StarterTable:
; starter the rival picked, rival trainer number
db STARTER2, 4
db STARTER3, 5
db STARTER1, 6
Route22Rival1AfterBattleScript:
ld a, [wIsInBattle]
cp $ff
jp z, Route22SetDefaultScript
ld a, [wSpritePlayerStateData1FacingDirection]
and a ; cp SPRITE_FACING_DOWN
jr nz, .not_facing_down
ld a, SPRITE_FACING_UP
jr .set_rival_facing
.not_facing_down
ld a, SPRITE_FACING_RIGHT
.set_rival_facing
ldh [hSpriteFacingDirection], a
ld a, ROUTE22_RIVAL1
ldh [hSpriteIndex], a
call SetSpriteFacingDirectionAndDelay
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_ROUTE22_RIVAL_1ST_BATTLE
ld a, TEXT_ROUTE22_RIVAL1
ldh [hTextID], a
call DisplayTextID
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
farcall Music_RivalAlternateStart
ld a, [wSavedCoordIndex]
cp 1 ; index of second, lower entry in Route22DefaultScript.Route22RivalBattleCoords
jr nz, .exit_movement_2
call .RivalExit1Script
jr .next_script
.exit_movement_2
call .RivalExit2Script
.next_script
ld a, SCRIPT_ROUTE22_RIVAL1_EXIT
ld [wRoute22CurScript], a
ret
.RivalExit1Script:
ld de, Route22Rival1ExitMovementData1
jr Route22MoveRival1
.RivalExit2Script:
ld de, Route22Rival1ExitMovementData2
Route22MoveRival1:
ld a, ROUTE22_RIVAL1
ldh [hSpriteIndex], a
jp MoveSprite
Route22Rival1ExitMovementData1:
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db -1 ; end
Route22Rival1ExitMovementData2:
db NPC_MOVEMENT_UP
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db -1 ; end
Route22Rival1ExitScript:
ld a, [wStatusFlags5]
bit BIT_SCRIPTED_NPC_MOVEMENT, a
ret nz
xor a
ld [wJoyIgnore], a
ld a, HS_ROUTE_22_RIVAL_1
ld [wMissableObjectIndex], a
predef HideObject
call PlayDefaultMusic
ResetEvents EVENT_1ST_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE
ld a, SCRIPT_ROUTE22_DEFAULT
ld [wRoute22CurScript], a
ret
Route22SecondRivalBattleScript:
ld a, ROUTE22_RIVAL2
ld [wEmotionBubbleSpriteIndex], a
xor a ; EXCLAMATION_BUBBLE
ld [wWhichEmotionBubble], a
predef EmotionBubble
ld a, [wWalkBikeSurfState]
and a
jr z, .walking
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
.walking
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
farcall Music_RivalAlternateTempo
ld a, ROUTE22_RIVAL2
ldh [hSpriteIndex], a
call Route22MoveRivalRightScript
ld a, SCRIPT_ROUTE22_RIVAL2_START_BATTLE
ld [wRoute22CurScript], a
ret
Route22Rival2StartBattleScript:
ld a, [wStatusFlags5]
bit BIT_SCRIPTED_NPC_MOVEMENT, a
ret nz
ld a, ROUTE22_RIVAL2
ldh [hSpriteIndex], a
ld a, [wSavedCoordIndex]
cp 1 ; index of second, lower entry in Route22DefaultScript.Route22RivalBattleCoords
jr nz, .set_player_direction_left
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_UP
jr .set_rival_facing_direction
.set_player_direction_left
ld a, PLAYER_DIR_LEFT
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_RIGHT
.set_rival_facing_direction
ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
xor a
ld [wJoyIgnore], a
ld a, TEXT_ROUTE22_RIVAL2
ldh [hTextID], a
call DisplayTextID
ld hl, wStatusFlags3
set BIT_TALKED_TO_TRAINER, [hl]
set BIT_PRINT_END_BATTLE_TEXT, [hl]
ld hl, Route22Rival2DefeatedText
ld de, Route22Rival2VictoryText
call SaveEndBattleTextPointers
ld a, OPP_RIVAL2
ld [wCurOpponent], a
ld hl, .StarterTable
call Route22GetRivalTrainerNoByStarterScript
ld a, SCRIPT_ROUTE22_RIVAL2_AFTER_BATTLE
ld [wRoute22CurScript], a
ret
.StarterTable:
db STARTER2, 10
db STARTER3, 11
db STARTER1, 12
Route22Rival2AfterBattleScript:
ld a, [wIsInBattle]
cp $ff
jp z, Route22SetDefaultScript
ld a, ROUTE22_RIVAL2
ldh [hSpriteIndex], a
ld a, [wSavedCoordIndex]
cp 1 ; index of second, lower entry in Route22DefaultScript.Route22RivalBattleCoords
jr nz, .set_player_direction_left
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_UP
jr .set_rival_facing_direction
.set_player_direction_left
ld a, PLAYER_DIR_LEFT
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_RIGHT
.set_rival_facing_direction
ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_ROUTE22_RIVAL_2ND_BATTLE
ld a, TEXT_ROUTE22_RIVAL2
ldh [hTextID], a
call DisplayTextID
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
farcall Music_RivalAlternateStartAndTempo
ld a, [wSavedCoordIndex]
cp 1 ; index of second, lower entry in Route22DefaultScript.Route22RivalBattleCoords
jr nz, .exit_movement_2
call .RivalExit1Script
jr .next_script
.exit_movement_2
call .RivalExit2Script
.next_script
ld a, SCRIPT_ROUTE22_RIVAL2_EXIT
ld [wRoute22CurScript], a
ret
.RivalExit1Script:
ld de, Route22Rival2ExitMovementData1
jr Route22MoveRival2
.RivalExit2Script:
ld de, Route22Rival2ExitMovementData2
Route22MoveRival2:
ld a, ROUTE22_RIVAL2
ldh [hSpriteIndex], a
jp MoveSprite
Route22Rival2ExitMovementData1:
db NPC_MOVEMENT_LEFT
Route22Rival2ExitMovementData2:
db NPC_MOVEMENT_LEFT
db NPC_MOVEMENT_LEFT
db NPC_MOVEMENT_LEFT
db -1 ; end
Route22Rival2ExitScript:
ld a, [wStatusFlags5]
bit BIT_SCRIPTED_NPC_MOVEMENT, a
ret nz
xor a
ld [wJoyIgnore], a
ld a, HS_ROUTE_22_RIVAL_2
ld [wMissableObjectIndex], a
predef HideObject
call PlayDefaultMusic
ResetEvents EVENT_2ND_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE
ld a, SCRIPT_ROUTE22_NOOP
ld [wRoute22CurScript], a
ret
Route22_TextPointers:
def_text_pointers
dw_const Route22Rival1Text, TEXT_ROUTE22_RIVAL1
dw_const Route22Rival2Text, TEXT_ROUTE22_RIVAL2
dw_const Route22PokemonLeagueSignText, TEXT_ROUTE22_POKEMON_LEAGUE_SIGN
Route22Rival1Text:
text_asm
CheckEvent EVENT_BEAT_ROUTE22_RIVAL_1ST_BATTLE
jr z, .before_battle
ld hl, Route22RivalAfterBattleText1
call PrintText
jr .text_script_end
.before_battle
ld hl, Route22RivalBeforeBattleText1
call PrintText
.text_script_end
jp TextScriptEnd
Route22Rival2Text:
text_asm
CheckEvent EVENT_BEAT_ROUTE22_RIVAL_2ND_BATTLE
jr z, .before_battle
ld hl, Route22RivalAfterBattleText2
call PrintText
jr .text_script_end
.before_battle
ld hl, Route22RivalBeforeBattleText2
call PrintText
.text_script_end
jp TextScriptEnd
Route22RivalBeforeBattleText1:
text_far _Route22RivalBeforeBattleText1
text_end
Route22RivalAfterBattleText1:
text_far _Route22RivalAfterBattleText1
text_end
Route22Rival1DefeatedText:
text_far _Route22Rival1DefeatedText
text_end
Route22Rival1VictoryText:
text_far _Route22Rival1VictoryText
text_end
Route22RivalBeforeBattleText2:
text_far _Route22RivalBeforeBattleText2
text_end
Route22RivalAfterBattleText2:
text_far _Route22RivalAfterBattleText2
text_end
Route22Rival2DefeatedText:
text_far _Route22Rival2DefeatedText
text_end
Route22Rival2VictoryText:
text_far _Route22Rival2VictoryText
text_end
Route22PokemonLeagueSignText:
text_far _Route22PokemonLeagueSignText
text_end
|