Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pret
GitHub Repository: pret/pokered
Path: blob/master/scripts/CinnabarGym.asm
1270 views
1
CinnabarGym_Script:
2
call CinnabarGymSetMapAndTiles
3
call EnableAutoTextBoxDrawing
4
ld hl, CinnabarGym_ScriptPointers
5
ld a, [wCinnabarGymCurScript]
6
jp CallFunctionInTable
7
8
CinnabarGymSetMapAndTiles:
9
ld hl, wCurrentMapScriptFlags
10
bit BIT_CUR_MAP_LOADED_2, [hl]
11
res BIT_CUR_MAP_LOADED_2, [hl]
12
push hl
13
call nz, .LoadNames
14
pop hl
15
bit BIT_CUR_MAP_LOADED_1, [hl]
16
res BIT_CUR_MAP_LOADED_1, [hl]
17
call nz, UpdateCinnabarGymGateTileBlocks
18
ResetEvent EVENT_2A7
19
ret
20
21
.LoadNames:
22
ld hl, .CityName
23
ld de, .LeaderName
24
jp LoadGymLeaderAndCityName
25
26
.CityName:
27
db "CINNABAR ISLAND@"
28
29
.LeaderName:
30
db "BLAINE@"
31
32
CinnabarGymResetScripts:
33
xor a ; SCRIPT_CINNABARGYM_DEFAULT
34
ld [wJoyIgnore], a
35
ld [wCinnabarGymCurScript], a
36
ld [wCurMapScript], a
37
ld [wOpponentAfterWrongAnswer], a
38
ret
39
40
CinnabarGymSetTrainerHeader:
41
ldh a, [hTextID]
42
ld [wTrainerHeaderFlagBit], a
43
ret
44
45
CinnabarGym_ScriptPointers:
46
def_script_pointers
47
dw_const CinnabarGymDefaultScript, SCRIPT_CINNABARGYM_DEFAULT
48
dw_const CinnabarGymGetOpponentTextScript, SCRIPT_CINNABARGYM_GET_OPPONENT_TEXT
49
dw_const CinnabarGymOpenGateScript, SCRIPT_CINNABARGYM_OPEN_GATE
50
dw_const CinnabarGymBlainePostBattleScript, SCRIPT_CINNABARGYM_BLAINE_POST_BATTLE
51
52
CinnabarGymDefaultScript:
53
ld a, [wOpponentAfterWrongAnswer]
54
and a
55
ret z
56
ldh [hSpriteIndex], a
57
cp CINNABARGYM_SUPER_NERD3
58
jr nz, .not_super_nerd3
59
ld a, PLAYER_DIR_DOWN
60
ld [wPlayerMovingDirection], a
61
ld de, MovementNpcToLeftAndUp
62
jr .MoveSprite
63
.not_super_nerd3
64
ld de, MovementNpcToLeft
65
ld a, PLAYER_DIR_RIGHT
66
ld [wPlayerMovingDirection], a
67
.MoveSprite
68
call MoveSprite
69
ld a, SCRIPT_CINNABARGYM_GET_OPPONENT_TEXT
70
ld [wCinnabarGymCurScript], a
71
ld [wCurMapScript], a
72
ret
73
74
MovementNpcToLeftAndUp:
75
db NPC_MOVEMENT_LEFT
76
db NPC_MOVEMENT_UP
77
db -1 ; end
78
79
MovementNpcToLeft:
80
db NPC_MOVEMENT_LEFT
81
db -1 ; end
82
83
CinnabarGymGetOpponentTextScript:
84
ld a, [wStatusFlags5]
85
bit BIT_SCRIPTED_NPC_MOVEMENT, a
86
ret nz
87
xor a
88
ld [wJoyIgnore], a
89
ld a, [wOpponentAfterWrongAnswer]
90
ld [wTrainerHeaderFlagBit], a
91
ldh [hTextID], a
92
jp DisplayTextID
93
94
CinnabarGymFlagAction:
95
predef_jump FlagActionPredef
96
97
CinnabarGymOpenGateScript:
98
ld a, [wIsInBattle]
99
cp $ff
100
jp z, CinnabarGymResetScripts
101
ld a, [wTrainerHeaderFlagBit]
102
ldh [hGymGateIndex], a
103
AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2
104
ld c, a
105
ld b, FLAG_TEST
106
EventFlagAddress hl, EVENT_BEAT_CINNABAR_GYM_TRAINER_0
107
call CinnabarGymFlagAction
108
ld a, c
109
and a
110
jr nz, .no_sound
111
call WaitForSoundToFinish
112
ld a, SFX_GO_INSIDE
113
call PlaySound
114
call WaitForSoundToFinish
115
.no_sound
116
ld a, [wTrainerHeaderFlagBit]
117
ldh [hGymGateIndex], a
118
AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2
119
ld c, a
120
ld b, FLAG_SET
121
EventFlagAddress hl, EVENT_BEAT_CINNABAR_GYM_TRAINER_0
122
call CinnabarGymFlagAction
123
ld a, [wTrainerHeaderFlagBit]
124
sub $2
125
AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0
126
ld c, a
127
ld b, FLAG_SET
128
EventFlagAddress hl, EVENT_CINNABAR_GYM_GATE0_UNLOCKED
129
call CinnabarGymFlagAction
130
call UpdateCinnabarGymGateTileBlocks
131
xor a
132
ld [wJoyIgnore], a
133
ld [wOpponentAfterWrongAnswer], a
134
ld a, SCRIPT_CINNABARGYM_DEFAULT
135
ld [wCinnabarGymCurScript], a
136
ld [wCurMapScript], a
137
ret
138
139
CinnabarGymBlainePostBattleScript:
140
ld a, [wIsInBattle]
141
cp $ff
142
jp z, CinnabarGymResetScripts
143
ld a, PAD_CTRL_PAD
144
ld [wJoyIgnore], a
145
; fallthrough
146
CinnabarGymReceiveTM38:
147
ld a, TEXT_CINNABARGYM_BLAINE_VOLCANO_BADGE_INFO
148
ldh [hTextID], a
149
call DisplayTextID
150
SetEvent EVENT_BEAT_BLAINE
151
lb bc, TM_FIRE_BLAST, 1
152
call GiveItem
153
jr nc, .BagFull
154
ld a, TEXT_CINNABARGYM_BLAINE_RECEIVED_TM38
155
ldh [hTextID], a
156
call DisplayTextID
157
SetEvent EVENT_GOT_TM38
158
jr .gymVictory
159
.BagFull
160
ld a, TEXT_CINNABARGYM_BLAINE_TM38_NO_ROOM
161
ldh [hTextID], a
162
call DisplayTextID
163
.gymVictory
164
ld hl, wObtainedBadges
165
set BIT_VOLCANOBADGE, [hl]
166
ld hl, wBeatGymFlags
167
set BIT_VOLCANOBADGE, [hl]
168
169
; deactivate gym trainers
170
SetEventRange EVENT_BEAT_CINNABAR_GYM_TRAINER_0, EVENT_BEAT_CINNABAR_GYM_TRAINER_6
171
172
ld hl, wCurrentMapScriptFlags
173
set BIT_CUR_MAP_LOADED_1, [hl]
174
175
jp CinnabarGymResetScripts
176
177
CinnabarGym_TextPointers:
178
def_text_pointers
179
dw_const CinnabarGymBlaineText, TEXT_CINNABARGYM_BLAINE
180
dw_const CinnabarGymSuperNerd1, TEXT_CINNABARGYM_SUPER_NERD1
181
dw_const CinnabarGymSuperNerd2, TEXT_CINNABARGYM_SUPER_NERD2
182
dw_const CinnabarGymSuperNerd3, TEXT_CINNABARGYM_SUPER_NERD3
183
dw_const CinnabarGymSuperNerd4, TEXT_CINNABARGYM_SUPER_NERD4
184
dw_const CinnabarGymSuperNerd5, TEXT_CINNABARGYM_SUPER_NERD5
185
dw_const CinnabarGymSuperNerd6, TEXT_CINNABARGYM_SUPER_NERD6
186
dw_const CinnabarGymSuperNerd7, TEXT_CINNABARGYM_SUPER_NERD7
187
dw_const CinnabarGymGymGuideText, TEXT_CINNABARGYM_GYM_GUIDE
188
dw_const CinnabarGymBlaineVolcanoBadgeInfoText, TEXT_CINNABARGYM_BLAINE_VOLCANO_BADGE_INFO
189
dw_const CinnabarGymBlaineReceivedTM38Text, TEXT_CINNABARGYM_BLAINE_RECEIVED_TM38
190
dw_const CinnabarGymBlaineTM38NoRoomText, TEXT_CINNABARGYM_BLAINE_TM38_NO_ROOM
191
192
CinnabarGymStartBattleScript:
193
ldh a, [hSpriteIndex]
194
ld [wSpriteIndex], a
195
call EngageMapTrainer
196
call InitBattleEnemyParameters
197
ld hl, wStatusFlags3
198
set BIT_TALKED_TO_TRAINER, [hl]
199
set BIT_PRINT_END_BATTLE_TEXT, [hl]
200
ld a, [wSpriteIndex]
201
cp CINNABARGYM_BLAINE
202
jr z, .blaine
203
ld a, SCRIPT_CINNABARGYM_OPEN_GATE
204
jr .not_blaine
205
.blaine
206
ld a, SCRIPT_CINNABARGYM_BLAINE_POST_BATTLE
207
.not_blaine
208
ld [wCinnabarGymCurScript], a
209
ld [wCurMapScript], a
210
jp TextScriptEnd
211
212
CinnabarGymBlaineText:
213
text_asm
214
CheckEvent EVENT_BEAT_BLAINE
215
jr z, .beforeBeat
216
CheckEventReuseA EVENT_GOT_TM38
217
jr nz, .afterBeat
218
call z, CinnabarGymReceiveTM38
219
call DisableWaitingAfterTextDisplay
220
jp TextScriptEnd
221
.afterBeat
222
ld hl, .PostBattleAdviceText
223
call PrintText
224
jp TextScriptEnd
225
.beforeBeat
226
ld hl, .PreBattleText
227
call PrintText
228
ld hl, .ReceivedVolcanoBadgeText
229
ld de, .ReceivedVolcanoBadgeText
230
call SaveEndBattleTextPointers
231
ld a, $7
232
ld [wGymLeaderNo], a
233
jp CinnabarGymStartBattleScript
234
235
.PreBattleText:
236
text_far _CinnabarGymBlainePreBattleText
237
text_end
238
239
.ReceivedVolcanoBadgeText:
240
text_far _CinnabarGymBlaineReceivedVolcanoBadgeText
241
sound_get_key_item ; actually plays the second channel of SFX_BALL_POOF due to the wrong music bank being loaded
242
text_waitbutton
243
text_end
244
245
.PostBattleAdviceText:
246
text_far _CinnabarGymBlainePostBattleAdviceText
247
text_end
248
249
CinnabarGymBlaineVolcanoBadgeInfoText:
250
text_far _CinnabarGymBlaineVolcanoBadgeInfoText
251
text_end
252
253
CinnabarGymBlaineReceivedTM38Text:
254
text_far _CinnabarGymBlaineReceivedTM38Text
255
sound_get_item_1
256
text_far _CinnabarGymBlaineTM38ExplanationText
257
text_end
258
259
CinnabarGymBlaineTM38NoRoomText:
260
text_far _CinnabarGymBlaineTM38NoRoomText
261
text_end
262
263
CinnabarGymSuperNerd1:
264
text_asm
265
call CinnabarGymSetTrainerHeader
266
CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_0
267
jr nz, .defeated
268
ld hl, .BattleText
269
call PrintText
270
ld hl, .EndBattleText
271
ld de, .EndBattleText
272
call SaveEndBattleTextPointers
273
jp CinnabarGymStartBattleScript
274
.defeated
275
ld hl, .AfterBattleText
276
call PrintText
277
jp TextScriptEnd
278
279
.BattleText:
280
text_far _CinnabarGymSuperNerd1BattleText
281
text_end
282
283
.EndBattleText:
284
text_far _CinnabarGymSuperNerd1EndBattleText
285
text_end
286
287
.AfterBattleText:
288
text_far _CinnabarGymSuperNerd1AfterBattleText
289
text_end
290
291
CinnabarGymSuperNerd2:
292
text_asm
293
call CinnabarGymSetTrainerHeader
294
CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_1
295
jr nz, .defeated
296
ld hl, .BattleText
297
call PrintText
298
ld hl, .EndBattleText
299
ld de, .EndBattleText
300
call SaveEndBattleTextPointers
301
jp CinnabarGymStartBattleScript
302
.defeated
303
ld hl, .AfterBattleText
304
call PrintText
305
jp TextScriptEnd
306
307
.BattleText:
308
text_far _CinnabarGymSuperNerd2BattleText
309
text_end
310
311
.EndBattleText:
312
text_far _CinnabarGymSuperNerd2EndBattleText
313
text_end
314
315
.AfterBattleText:
316
text_far _CinnabarGymSuperNerd2AfterBattleText
317
text_end
318
319
CinnabarGymSuperNerd3:
320
text_asm
321
call CinnabarGymSetTrainerHeader
322
CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_2
323
jr nz, .defeated
324
ld hl, .BattleText
325
call PrintText
326
ld hl, .EndBattleText
327
ld de, .EndBattleText
328
call SaveEndBattleTextPointers
329
jp CinnabarGymStartBattleScript
330
.defeated
331
ld hl, .AfterBattleText
332
call PrintText
333
jp TextScriptEnd
334
335
.BattleText:
336
text_far _CinnabarGymSuperNerd3BattleText
337
text_end
338
339
.EndBattleText:
340
text_far _CinnabarGymSuperNerd3EndBattleText
341
text_end
342
343
.AfterBattleText:
344
text_far _CinnabarGymSuperNerd3AfterBattleText
345
text_end
346
347
CinnabarGymSuperNerd4:
348
text_asm
349
call CinnabarGymSetTrainerHeader
350
CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_3
351
jr nz, .defeated
352
ld hl, .BattleText
353
call PrintText
354
ld hl, .EndBattleText
355
ld de, .EndBattleText
356
call SaveEndBattleTextPointers
357
jp CinnabarGymStartBattleScript
358
.defeated
359
ld hl, .AfterBattleText
360
call PrintText
361
jp TextScriptEnd
362
363
.BattleText:
364
text_far _CinnabarGymSuperNerd4BattleText
365
text_end
366
367
.EndBattleText:
368
text_far _CinnabarGymSuperNerd4EndBattleText
369
text_end
370
371
.AfterBattleText:
372
text_far _CinnabarGymSuperNerd4AfterBattleText
373
text_end
374
375
CinnabarGymSuperNerd5:
376
text_asm
377
call CinnabarGymSetTrainerHeader
378
CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_4
379
jr nz, .defeated
380
ld hl, .BattleText
381
call PrintText
382
ld hl, .EndBattleText
383
ld de, .EndBattleText
384
call SaveEndBattleTextPointers
385
jp CinnabarGymStartBattleScript
386
.defeated
387
ld hl, .AfterBattleText
388
call PrintText
389
jp TextScriptEnd
390
391
.BattleText:
392
text_far _CinnabarGymSuperNerd5BattleText
393
text_end
394
395
.EndBattleText:
396
text_far _CinnabarGymSuperNerd5EndBattleText
397
text_end
398
399
.AfterBattleText:
400
text_far _CinnabarGymSuperNerd5AfterBattleText
401
text_end
402
403
CinnabarGymSuperNerd6:
404
text_asm
405
call CinnabarGymSetTrainerHeader
406
CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_5
407
jr nz, .defeated
408
ld hl, .BattleText
409
call PrintText
410
ld hl, .EndBattleText
411
ld de, .EndBattleText
412
call SaveEndBattleTextPointers
413
jp CinnabarGymStartBattleScript
414
.defeated
415
ld hl, .AfterBattleText
416
call PrintText
417
jp TextScriptEnd
418
419
.BattleText:
420
text_far _CinnabarGymSuperNerd6BattleText
421
text_end
422
423
.EndBattleText:
424
text_far _CinnabarGymSuperNerd6EndBattleText
425
text_end
426
427
.AfterBattleText:
428
text_far _CinnabarGymSuperNerd6AfterBattleText
429
text_end
430
431
CinnabarGymSuperNerd7:
432
text_asm
433
call CinnabarGymSetTrainerHeader
434
CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_6
435
jr nz, .defeated
436
ld hl, .BattleText
437
call PrintText
438
ld hl, .EndBattleText
439
ld de, .EndBattleText
440
call SaveEndBattleTextPointers
441
jp CinnabarGymStartBattleScript
442
.defeated
443
ld hl, .AfterBattleText
444
call PrintText
445
jp TextScriptEnd
446
447
.BattleText:
448
text_far _CinnabarGymSuperNerd7BattleText
449
text_end
450
451
.EndBattleText:
452
text_far _CinnabarGymSuperNerd7EndBattleText
453
text_end
454
455
.AfterBattleText:
456
text_far _CinnabarGymSuperNerd7AfterBattleText
457
text_end
458
459
CinnabarGymGymGuideText:
460
text_asm
461
CheckEvent EVENT_BEAT_BLAINE
462
jr nz, .afterBeat
463
ld hl, .ChampInMakingText
464
jr .done
465
.afterBeat
466
ld hl, .BeatBlaineText
467
.done
468
call PrintText
469
jp TextScriptEnd
470
471
.ChampInMakingText:
472
text_far _CinnabarGymGymGuideChampInMakingText
473
text_end
474
475
.BeatBlaineText:
476
text_far _CinnabarGymGymGuideBeatBlaineText
477
text_end
478
479