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
|
IntroSequence: ; 6241 (1:6241)
callfar Copyright_GFPresents
jr c, StartTitleScreen
callfar GoldSilverIntro
StartTitleScreen:
call InitTitleScreen
call DelayFrame
.asm_6255
call TitleScreenFrame
jr nc, .asm_6255
call ClearSprites
call ClearBGPalettes
ld hl, rLCDC
res 2, [hl]
call ClearTileMap
xor a
ld [hLCDCPointer], a
ld b, $8
call GetSGBLayout
call UpdateTimePals
ld a, [wce64]
cp $5
jr c, .asm_627b
xor a
.asm_627b
ld e, a
ld d, $0
ld hl, .Jumptable
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
.Jumptable
dw MainMenu_
dw DeleteSaveData
dw IntroSequence
dw IntroSequence
dw ResetClock
InitTitleScreen: ; 6291 (1:6291)
call ClearBGPalettes
xor a
ld [wTimeOfDayPal], a
ld de, MUSIC_NONE
call PlayMusic
call ClearTileMap
call DisableLCD
call ClearSprites
xor a
ld [hBGMapMode], a
ld [hMapAnims], a
ld [hSCY], a
ld [hSCX], a
ld hl, $8000
ld bc, $2000
xor a
call ByteFill
farcall ClearAnimatedObjectBuffer
ld hl, TitleScreenGFX1
ld de, $9000
ld a, BANK(TitleScreenGFX1)
call FarDecompress
ld hl, TitleScreenGFX2
ld de, $8800
ld a, BANK(TitleScreenGFX2)
call FarDecompress
ld hl, TitleScreenGFX4
ld de, $8000
ld a, BANK(TitleScreenGFX4)
call FarDecompress
ld hl, TitleScreenGFX3
ld de, $8f80
ld bc, $80
ld a, BANK(TitleScreenGFX3)
call FarCopyBytes
call Function636e
call Function63b6
ld hl, wAnimatedObjectDynamicVTileOffsets
xor a
ld [hli], a
ld [hl], a
ld hl, rLCDC
set 2, [hl]
call EnableLCD
xor a
ld hl, wce63
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
ld de, $6058
ld a, $2c ; HO-OH
call InitAnimatedObjectStruct
ld hl, wAnimatedObjectStruct1
ld de, wAnimatedObjectStruct10
ld bc, $a
call CopyBytes
ld hl, wAnimatedObjectStruct1
ld [hl], $0
ld hl, wc700
ld bc, $90
xor a
call ByteFill
ld a, $43
ld [hLCDCPointer], a
ld b, $c
call GetSGBLayout
call Function6341
ld de, MUSIC_TITLE
call PlayMusic
ret
Function6341: ; 6341 (1:6341)
ld a, [hCGB]
and a
jr nz, .asm_6365
ld a, [hSGB]
and a
jr nz, .asm_6358
ld a, $d8
ld [rBGP], a
IF DEF(GOLD)
ld a, $ff
ld [rOBP0], a
ld a, $f8
ENDC
IF DEF(SILVER)
ld a, $f0
ld [rOBP0], a
ld a, $f0
ENDC
ld [rOBP1], a
ret
.asm_6358
ld a, $e4
ld [rBGP], a
IF DEF(GOLD)
ld a, $ff
ld [rOBP0], a
ld a, $e4
ENDC
IF DEF(SILVER)
ld a, $f0
ld [rOBP0], a
ld a, $e0
ENDC
ld [rOBP1], a
ret
.asm_6365
ld a, $e4
call DmgToCgbBGPals
IF DEF(SILVER)
ld a, $e0
ENDC
call DmgToCgbObjPal0
ret
Function636e: ; 636e (1:636e)
ld a, [hCGB]
and a
ret z
ld a, $1
ld [rVBK], a
ld hl, $9800
ld bc, $240
xor a
call ByteFill
ld hl, $9800
ld bc, $714
ld a, $1
call Function63a6
ld hl, $98c5
ld bc, $10a
ld a, $3
call Function63a6
ld hl, $9980
ld bc, $a0
ld a, $4
call ByteFill
ld a, $0
ld [rVBK], a
ret
Function63a6: ; 63a6 (1:63a6)
push bc
push hl
.asm_63a8
ld [hli], a
dec c
jr nz, .asm_63a8
pop hl
ld bc, $20
add hl, bc
pop bc
dec b
jr nz, Function63a6
ret
Function63b6: ; 63b6 (1:63b6)
ld hl, GSIntroTilemap ; $4616
ld de, $9800
.asm_63bc
ld a, BANK(GSIntroTilemap) ; $26
call GetFarByte
cp $ff
jr z, .asm_63ca
inc hl
ld [de], a
inc de
jr .asm_63bc
.asm_63ca
ld a, [hCGB]
and a
ret nz
ld hl, $9960
ld bc, $20
ld a, $50
call ByteFill
ret
TitleScreenFrame: ; 63da (1:63da)
call Function63fe
ld a, [wce63]
bit 7, a
jr nz, .asm_63fc
call Function640f
ld a, $1
ld [hOAMUpdate], a
farcall AnimatedObjects_PlayFrame
xor a
ld [hOAMUpdate], a
call Function64b1
call DelayFrame
and a
ret
.asm_63fc
scf
ret
Function63fe: ; 63fe (1:63fe)
IF DEF(GOLD)
ld a, [hVBlankCounter]
and $7
ret nz
ENDC
ld hl, wc75f
ld a, [hl]
dec a
ld bc, $28
call ByteFill
ret
Function640f: ; 640f (1:640f)
ld e, a
ld d, $0
ld hl, .Jumptable ; $641b
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
.Jumptable
dw Function6426
dw Function6434
dw Function648b
Function6421:
ld hl, wce63
inc [hl]
ret
Function6426:
ld hl, wce63
inc [hl]
ld hl, wce65
IF DEF(GOLD)
ld de, $13c0
ENDC
IF DEF(SILVER)
ld de, $1140
ENDC
ld [hl], e
inc hl
ld [hl], d
ret
Function6434:
ld hl, wce65
ld e, [hl]
inc hl
ld d, [hl]
ld a, e
or d
jr z, .asm_646b
dec de
ld [hl], d
dec hl
ld [hl], e
call GetJoypad
ld hl, hJoyDown
ld a, [hl]
and D_UP + B_BUTTON + SELECT
cp D_UP + B_BUTTON + SELECT
jr z, .asm_6460
ld a, [hl]
and D_DOWN + B_BUTTON + SELECT
cp D_DOWN + B_BUTTON + SELECT
jr z, .asm_6480
ld a, [hl]
and START | A_BUTTON
jr nz, .asm_645c
ret
.asm_645c
ld a, $0
jr .asm_6462
.asm_6460
ld a, $1
.asm_6462
ld [wce64], a
ld hl, wce63
set 7, [hl]
ret
.asm_646b
ld hl, wce63
inc [hl]
xor a
ld [wMusicFadeID], a
ld [wMusicFadeID + 1], a
ld hl, wMusicFade
ld [hl], $8
ld hl, wce65
inc [hl]
ret
.asm_6480
ld a, $4
ld [wce64], a
ld hl, wce63
set 7, [hl]
ret
Function648b:
ld hl, wce65
inc [hl]
ld a, [wMusicFade]
and a
ret nz
ld a, $2
ld [wce64], a
ld hl, wce63
set 7, [hl]
ret
DeleteSaveData:
farcall DeleteSaveData_
jp Init
ResetClock:
farcall ResetClock_
jp Init
Function64b1: ; 64b1 (1:64b1)
ld a, [wce65]
and $3
ret nz
IF DEF(GOLD)
ld bc, wAnimatedObjectStruct10Index
ld hl, $a
add hl, bc
ld l, [hl]
ld h, $0
add hl, hl
add hl, hl
ld de, .Data_64e0
add hl, de
ld a, [wce65]
and $4
srl a
srl a
ld e, a
ld d, $0
add hl, de
add hl, de
ld a, [hli]
and a
ret z
ld e, a
ld d, [hl]
ENDC
IF DEF(SILVER)
ld de, $7c58
ENDC
ld a, $f
call InitAnimatedObjectStruct
ret
IF DEF(GOLD)
.Data_64e0:
db $5c, $50, $00, $00
db $5c, $68, $5c, $58
db $5c, $68, $5c, $78
db $5c, $88, $5c, $78
db $00, $00, $5c, $78
db $00, $00, $5c, $58
ENDC
Copyright:
call ClearTileMap
call LoadFontsExtra
ld de, CopyrightGFX
ld hl, vTiles2 tile $60
lb bc, BANK(CopyrightGFX), 30
call Request2bpp
hlcoord 2, 7
ld de, CopyrightString
jp PlaceString
CopyrightString:
db $60, $61, $62, $63, $7a, $7b, $7c, $7d
db $65, $66, $67, $68, $69, $6a
next $60, $61, $62, $63, $7a, $7b, $7c, $7d
db $6b, $6c, $6d, $6e, $6f, $70, $71, $72
next $60, $61, $62, $63, $7a, $7b, $7c, $7d
db $73, $74, $75, $76, $77, $78, $79, $71, $72
db "@"
GameInit:: ; 6545 (1:6545)
call ClearWindowData
ld a, $5
ld hl, $4f60
rst FarCall
jp IntroSequence
|