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
|
VermilionGym_Script:
ld hl, wCurrentMapScriptFlags
bit BIT_CUR_MAP_LOADED_1, [hl]
res BIT_CUR_MAP_LOADED_1, [hl]
push hl
call nz, .LoadNames
pop hl
bit BIT_CUR_MAP_LOADED_2, [hl]
res BIT_CUR_MAP_LOADED_2, [hl]
call nz, VermilionGymSetDoorTile
call EnableAutoTextBoxDrawing
ld hl, VermilionGymTrainerHeaders
ld de, VermilionGym_ScriptPointers
ld a, [wVermilionGymCurScript]
call ExecuteCurMapScriptInTable
ld [wVermilionGymCurScript], a
ret
.LoadNames:
ld hl, .CityName
ld de, .LeaderName
jp LoadGymLeaderAndCityName
.CityName:
db "VERMILION CITY@"
.LeaderName:
db "LT.SURGE@"
VermilionGymSetDoorTile:
CheckEvent EVENT_2ND_LOCK_OPENED
jr nz, .doorsOpen
ld a, $24 ; double door tile ID
jr .replaceTile
.doorsOpen
ld a, SFX_GO_INSIDE
call PlaySound
ld a, $5 ; clear floor tile ID
.replaceTile
ld [wNewTileBlockID], a
lb bc, 2, 2
predef_jump ReplaceTileBlock
VermilionGymResetScripts:
xor a
ld [wJoyIgnore], a
ld [wVermilionGymCurScript], a
ld [wCurMapScript], a
ret
VermilionGym_ScriptPointers:
def_script_pointers
dw_const CheckFightingMapTrainers, SCRIPT_VERMILIONGYM_DEFAULT
dw_const DisplayEnemyTrainerTextAndStartBattle, SCRIPT_VERMILIONGYM_START_BATTLE
dw_const EndTrainerBattle, SCRIPT_VERMILIONGYM_END_BATTLE
dw_const VermilionGymLTSurgeAfterBattleScript, SCRIPT_VERMILIONGYM_LT_SURGE_AFTER_BATTLE
VermilionGymLTSurgeAfterBattleScript:
ld a, [wIsInBattle]
cp $ff ; did we lose?
jp z, VermilionGymResetScripts
ld a, PAD_CTRL_PAD
ld [wJoyIgnore], a
VermilionGymLTSurgeReceiveTM24Script:
ld a, TEXT_VERMILIONGYM_LT_SURGE_THUNDER_BADGE_INFO
ldh [hTextID], a
call DisplayTextID
SetEvent EVENT_BEAT_LT_SURGE
lb bc, TM_THUNDERBOLT, 1
call GiveItem
jr nc, .bag_full
ld a, TEXT_VERMILIONGYM_LT_SURGE_RECEIVED_TM24
ldh [hTextID], a
call DisplayTextID
SetEvent EVENT_GOT_TM24
jr .gym_victory
.bag_full
ld a, TEXT_VERMILIONGYM_LT_SURGE_TM24_NO_ROOM
ldh [hTextID], a
call DisplayTextID
.gym_victory
ld hl, wObtainedBadges
set BIT_THUNDERBADGE, [hl]
ld hl, wBeatGymFlags
set BIT_THUNDERBADGE, [hl]
; deactivate gym trainers
SetEventRange EVENT_BEAT_VERMILION_GYM_TRAINER_0, EVENT_BEAT_VERMILION_GYM_TRAINER_2
jp VermilionGymResetScripts
VermilionGym_TextPointers:
def_text_pointers
dw_const VermilionGymLTSurgeText, TEXT_VERMILIONGYM_LT_SURGE
dw_const VermilionGymGentlemanText, TEXT_VERMILIONGYM_GENTLEMAN
dw_const VermilionGymSuperNerdText, TEXT_VERMILIONGYM_SUPER_NERD
dw_const VermilionGymSailorText, TEXT_VERMILIONGYM_SAILOR
dw_const VermilionGymGymGuideText, TEXT_VERMILIONGYM_GYM_GUIDE
dw_const VermilionGymLTSurgeThunderBadgeInfoText, TEXT_VERMILIONGYM_LT_SURGE_THUNDER_BADGE_INFO
dw_const VermilionGymLTSurgeReceivedTM24Text, TEXT_VERMILIONGYM_LT_SURGE_RECEIVED_TM24
dw_const VermilionGymLTSurgeTM24NoRoomText, TEXT_VERMILIONGYM_LT_SURGE_TM24_NO_ROOM
VermilionGymTrainerHeaders:
def_trainers 2
VermilionGymTrainerHeader0:
trainer EVENT_BEAT_VERMILION_GYM_TRAINER_0, 3, VermilionGymGentlemanBattleText, VermilionGymGentlemanEndBattleText, VermilionGymGentlemanAfterBattleText
VermilionGymTrainerHeader1:
trainer EVENT_BEAT_VERMILION_GYM_TRAINER_1, 2, VermilionGymSuperNerdBattleText, VermilionGymSuperNerdEndBattleText, VermilionGymSuperNerdAfterBattleText
VermilionGymTrainerHeader2:
trainer EVENT_BEAT_VERMILION_GYM_TRAINER_2, 3, VermilionGymSailorBattleText, VermilionGymSailorEndBattleText, VermilionGymSailorAfterBattleText
db -1 ; end
VermilionGymLTSurgeText:
text_asm
CheckEvent EVENT_BEAT_LT_SURGE
jr z, .before_beat
CheckEventReuseA EVENT_GOT_TM24
jr nz, .got_tm24_already
call z, VermilionGymLTSurgeReceiveTM24Script
call DisableWaitingAfterTextDisplay
jr .text_script_end
.got_tm24_already
ld hl, .PostBattleAdviceText
call PrintText
jr .text_script_end
.before_beat
ld hl, .PreBattleText
call PrintText
ld hl, wStatusFlags3
set BIT_TALKED_TO_TRAINER, [hl]
set BIT_PRINT_END_BATTLE_TEXT, [hl]
ld hl, VermilionGymLTSurgeReceivedThunderBadgeText
ld de, VermilionGymLTSurgeReceivedThunderBadgeText
call SaveEndBattleTextPointers
ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
ld a, $3
ld [wGymLeaderNo], a
xor a
ldh [hJoyHeld], a
ld a, SCRIPT_VERMILIONGYM_LT_SURGE_AFTER_BATTLE
ld [wVermilionGymCurScript], a
ld [wCurMapScript], a
.text_script_end
jp TextScriptEnd
.PreBattleText:
text_far _VermilionGymLTSurgePreBattleText
text_end
.PostBattleAdviceText:
text_far _VermilionGymLTSurgePostBattleAdviceText
text_end
VermilionGymLTSurgeThunderBadgeInfoText:
text_far _VermilionGymLTSurgeThunderBadgeInfoText
text_end
VermilionGymLTSurgeReceivedTM24Text:
text_far _VermilionGymLTSurgeReceivedTM24Text
sound_get_key_item
text_far _TM24ExplanationText
text_end
VermilionGymLTSurgeTM24NoRoomText:
text_far _VermilionGymLTSurgeTM24NoRoomText
text_end
VermilionGymLTSurgeReceivedThunderBadgeText:
text_far _VermilionGymLTSurgeReceivedThunderBadgeText
text_end
VermilionGymGentlemanText:
text_asm
ld hl, VermilionGymTrainerHeader0
call TalkToTrainer
jp TextScriptEnd
VermilionGymGentlemanBattleText:
text_far _VermilionGymGentlemanBattleText
text_end
VermilionGymGentlemanEndBattleText:
text_far _VermilionGymGentlemanEndBattleText
text_end
VermilionGymGentlemanAfterBattleText:
text_far _VermilionGymGentlemanAfterBattleText
text_end
VermilionGymSuperNerdText:
text_asm
ld hl, VermilionGymTrainerHeader1
call TalkToTrainer
jp TextScriptEnd
VermilionGymSuperNerdBattleText:
text_far _VermilionGymSuperNerdBattleText
text_end
VermilionGymSuperNerdEndBattleText:
text_far _VermilionGymSuperNerdEndBattleText
text_end
VermilionGymSuperNerdAfterBattleText:
text_far _VermilionGymSuperNerdAfterBattleText
text_end
VermilionGymSailorText:
text_asm
ld hl, VermilionGymTrainerHeader2
call TalkToTrainer
jp TextScriptEnd
VermilionGymSailorBattleText:
text_far _VermilionGymSailorBattleText
text_end
VermilionGymSailorEndBattleText:
text_far _VermilionGymSailorEndBattleText
text_end
VermilionGymSailorAfterBattleText:
text_far _VermilionGymSailorAfterBattleText
text_end
VermilionGymGymGuideText:
text_asm
ld a, [wBeatGymFlags]
bit BIT_THUNDERBADGE, a
jr nz, .got_thunderbadge
ld hl, .ChampInMakingText
call PrintText
jr .text_script_end
.got_thunderbadge
ld hl, .BeatLTSurgeText
call PrintText
.text_script_end
jp TextScriptEnd
.ChampInMakingText:
text_far _VermilionGymGymGuideChampInMakingText
text_end
.BeatLTSurgeText:
text_far _VermilionGymGymGuideBeatLTSurgeText
text_end
|