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
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
|
include "constants.asm"
SECTION "engine/intro.asm", ROMX
DemoStart:: ; 558D
ld de, OakPic
lb bc, BANK(OakPic), $00
call IntroDisplayPicCenteredOrUpperRight
call FadeInIntroPic
ld hl, OakSpeechDemo
call PrintText
call GBFadeOutToWhite
call ClearTileMap
ld de, ProtagonistPic
lb bc, BANK(ProtagonistPic), $00
call IntroDisplayPicCenteredOrUpperRight
call MovePicLeft
ld a, %11010000
ldh [rOBP0], a
call DemoSetUpPlayer
jp IntroCleanup
GameStart:: ; 55BB
ld de, OakPic
lb bc, BANK(OakPic), $00
call IntroDisplayPicCenteredOrUpperRight
call FadeInIntroPic
ld hl, OakSpeech1
call PrintText
call GBFadeOutToWhite
call ClearTileMap
ld a, DEX_YADOKING
ld [wCurSpecies], a
ld [wMonDexIndex], a
call GetMonHeader
hlcoord 6, 4
hlcoord 6, 4
call PrepMonFrontpic
call MovePicLeft
ld hl, OakSpeech2
call PrintText
ld a, DEX_YADOKING
call PlayCry
ld hl, OakSpeech3
call PrintText
call GBFadeOutToWhite
call ClearTileMap
ld de, ProtagonistPic
lb bc, BANK(ProtagonistPic), $00
call IntroDisplayPicCenteredOrUpperRight
call MovePicLeft
ld hl, OakSpeech4
call PrintText
call ChoosePlayerName
call GBFadeOutToWhite
call ClearTileMap
ld de, RivalPic
lb bc, BANK(RivalPic), $00
call IntroDisplayPicCenteredOrUpperRight
call FadeInIntroPic
ld hl, OakSpeech5
call PrintText
call ChooseRivalName
call GBFadeOutToWhite
call ClearTileMap
ld de, OakPic
lb bc, BANK(OakPic), $00
call IntroDisplayPicCenteredOrUpperRight
call FadeInIntroPic
ld hl, OakSpeech6
call PrintText
callba SetClockDialog
call Function04ac
call GBFadeOutToWhite
call ClearTileMap
ld de, ProtagonistPic
lb bc, BANK(ProtagonistPic), $00
call IntroDisplayPicCenteredOrUpperRight
call GBFadeInFromWhite
ld hl, OakSpeech7
call PrintText
ldh a, [hROMBank]
push af
ld a, $20
ld [wMusicFade], a
ld de, MUSIC_NONE
ld a, e
ld [wMusicFadeIDLow], a
ld a, d
ld [wMusicFadeIDHigh], a
ld de, $000B ; should be a constant - shrink noise?
call PlaySFX
pop af
call Bankswitch
ld c, $04
call DelayFrames
IntroCleanup:: ; 568E
ld de, ShrinkPic1
lb bc, BANK(ShrinkPic1), $00
call IntroDisplayPicCenteredOrUpperRight
ld c, $04
call DelayFrames
ld de, ShrinkPic2
lb bc, BANK(ShrinkPic2), $00
call IntroDisplayPicCenteredOrUpperRight
ld c, $14
call DelayFrames
hlcoord 6, 5
ld b, $07
ld c, $07
call ClearBox
ld c, $14
call DelayFrames
call LoadStartingSprites
call LoadFontExtra
ld c, $32
call DelayFrames
call GBFadeOutToWhite
call ClearTileMap
call Function0502
ld a, $00
ld [wd638], a
ld [wd637], a
OverworldStart::
call SetUpGameEntry
ld hl, wDebugFlags
bit CONTINUED_F, [hl]
call z, Function15b5
ld hl, wd4a9
set 0, [hl]
jp Function2a85
SetUpGameEntry:: ; 56E8
ld a, $04
ld [wd65e], a
ld a, $F2
ldh [hMapEntryMethod], a
ld hl, wDebugFlags
bit CONTINUED_F, [hl] ; if we loaded a game
ret nz
ld a, $F1
ldh [hMapEntryMethod], a
ld a, $00
ld [wDefaultSpawnPoint], a
ld hl, GameStartPlacement
ld de, wMapGroup
ld bc, wd65e - wMapGroup
call CopyBytes
ret
GameStartPlacement:: ; 570D
db $01 ; map group
db MAP_PLAYER_HOUSE_2F ; map
dwcoord 15, 45 ; screen anchor
db $04 ; metatile x
db $04 ; metatile y
db $00 ; in-metatile x
db $01 ; in-metatile y
DebugSetUpPlayer:: ; 5715
call SetPlayerNamesDebug
ld a, $0F
ld [wd15d], a
ld a, $42
ld [wd15e], a
ld a, $3F
ld [wd15f], a
ld a, $FF
ld [wd163], a
ld [wd164], a
call GiveRandomJohto
ld a, $03
call AddRandomPokemonToBox
call FillTMs
ld de, DebugBagItems
call FillBagWithList
ld hl, wPokedexOwned
call DebugFillPokedex
ld hl, wPokedexSeen
call DebugFillPokedex
ld hl, wAnnonDex
ld [hl], $01
call Function40fd
ret
DebugFillPokedex:: ; 5755
ld b, $1F
ld a, $FF
.loop
ld [hl+], a
dec b
jr nz, .loop
ld [hl], $07
ret
FillBagWithList:: ; 5760
ld hl, wNumBagItems
.loop
ld a, [de]
cp $FF
jr z, .yump
ld [wCurItem], a
inc de
ld a, [de]
inc de
ld [wItemQuantity], a
call ReceiveItem
jr .loop
.yump
ret
DebugBagItems:: ; 5777
db ITEM_IMPORTANT_BAG, $01
db ITEM_BAG, $01
db ITEM_TM_HOLDER, $01
db ITEM_BALL_HOLDER, $01
db ITEM_BICYCLE, $01
db ITEM_MAIL, $06
db ITEM_ULTRA_BALL, $1E
db ITEM_POKE_BALL, $63
db ITEM_POTION, $1E
db ITEM_RARE_CANDY, $14
db ITEM_MOON_STONE, $63
db ITEM_FULL_HEAL, $63
db ITEM_PROTEIN, $63
db ITEM_QUICK_NEEDLE, $63
db ITEM_SNAKESKIN, $63
db ITEM_KINGS_ROCK, $63
db ITEM_FLEE_FEATHER, $63
db ITEM_FOCUS_ORB, $63
db ITEM_SHARP_SCYTHE, $63
db ITEM_DETECT_ORB, $63
db $FF
GiveRandomPokemon:: ; 57A0
and a
ret z
.loop
push af
call RandomUnder246
ld b, $0A
call GivePokemon
pop af
dec a
jr nz, .loop
ret
GiveRandomJohto:: ; 57B0
.loop
call Random
and $03
jr z, .loop
dec a
ld b, a
add a, a
add a, b
add a, $98 ; maybe should be a constant - 152, aka the number of kanto pokes
ld b, $08
call GivePokemon
ld a, $8D
ld [wPartyMon1 + 1], a
ret
GiveKantoStarters:: ; 57C8
ld a, $03
ld b, $20
call GivePokemon
ld a, $06
ld b, $24
call GivePokemon
ld a, $09
ld b, $24
call GivePokemon
ret
GivePokemon:: ; 57DE
ld [wMonDexIndex], a
ld a, b
ld [wCurPartyLevel], a
ld a, $10
call Predef
ret
AddRandomPokemonToBox: ; 57EB
and a
ret z
.loop
push af
xor a
ld [wca44], a
call RandomUnder246
ld [wcdd7], a
ld a, $05
ld [wCurPartyLevel], a
callab AddPokemonToBox
ld a, [wcdd7]
ld [wMonDexIndex], a
callab Functiondd5c
pop af
dec a
jr nz, .loop
ret
RandomUnder246:: ; 5818
.loop
call Random
and a
jr z, .loop
cp $F6
jr nc, .loop
ret
FillTMs:: ; 5823
ld b, $39
ld a, $01
ld hl, wTMsHMs
.loop
ld [hl+], a
dec b
jr nz, .loop
ret
DebugGiveKeyItems:: ; 582F
ld hl, DebugKeyItemsList
ld de, wKeyItems
ld c, $FF
.loop
inc c
ld a, [hl+]
ld [de], a
inc de
cp $FF
jr nz, .loop
ld a, c
ld [wNumKeyItems], a
ret
DebugKeyItemsList:: ; 5844
db ITEM_TM_HOLDER
db ITEM_BALL_HOLDER
db ITEM_BAG
db ITEM_BICYCLE
db $FF
DemoSetUpPlayer:: ; 5849
ld hl, wPlayerName
ld de, DemoPlayerName
call CopyString
ld hl, wRivalName
ld de, DemoRivalName
call CopyString
call Function40fd
ld de, DemoItemList
call FillBagWithList
call GiveRandomJohto
ret
DemoItemList:: ; 5868
db ITEM_POKE_BALL, $05
db ITEM_POTION, $0A
db ITEM_FULL_HEAL, $0A
db ITEM_STIMULUS_ORB, $01
db ITEM_FOCUS_ORB, $01
db $FF
DemoPlayerName:: ; 5873
db "サトシ@"
DemoRivalName:: ; 5877
db "シゲル@"
OakSpeechDemo:: ; 587B
text "ようこそ"
line "ポケット モンスターの せかいへ!"
cont "ごぞんじ わしが オーキドじゃ!"
para "きょう きみに きてもらったのは"
line "ほかでもない"
cont "あたらしい ずかんづくりを"
cont "てつだって ほしいのじゃ!"
para "もちろん"
line "きみの パートナーとなる ポケモンと"
cont "りュックは ようい しておる"
para "りュックの なかには"
line "キズぐすりと"
cont "モンスターボールが"
cont "はいっておるから あんしんじゃ!"
para "すでに きみの ライバルは"
line "しゅっぱつ しとる"
para "まけないよう がんばって くれい!"
prompt
OakSpeech1:: ; 5956
text "いやあ またせた!"
para "ポケット モンスターの せかいへ"
line "ようこそ!"
para "わたしの なまえは オーキド"
para "みんなからは # はかせと"
line "したわれて おるよ"
prompt
OakSpeech2:: ; 599F
text "きみも もちろん"
line "しっているとは おもうが"
para "この せかいには"
line "ポケット モンスターと よばれる"
cont "いきもの たちが"
cont "いたるところに すんでいる!"
prompt
OakSpeech3:: ; 59E8
text "その # という いきものを"
line "ひとは ぺットに したり"
cont "しょうぶに つかったり"
cont "そして・・・"
para "わたしは この #の"
line "けんきゅうを してる というわけだ"
prompt
OakSpeech4:: ; 5A35
text "では はじめに きみの なまえを"
line "おしえて もらおう!"
prompt
OakSpeech5:: ; 5A52
text "そして この しょうねんは"
line "きみの おさななじみであり"
cont"ライバルである"
para "・・・えーと?"
line "なまえは なんて いったかな?"
prompt
OakSpeech6:: ; 5A8F
text "さて きみの きねんすべき"
line "たびだちのひを"
cont "きろくしておこう!"
para "じかんも なるべく せいかくにな!"
prompt
OakSpeech7:: ; 5AC2
text "<PLAYER>!"
para "いよいよ これから"
line "きみの ものがたりの はじまりだ!"
para "ゆめと ぼうけんと!"
line "ポケット モンスターの せかいへ!"
para "レッツ ゴー!"
done
SetPlayerNamesDebug:: ; 5B07
ld hl, DebugPlayerName
ld de, wPlayerName
call CopyNameDebug
ld hl, DebugRivalName
ld de, wRivalName
CopyNameDebug:
ld bc, PLAYER_NAME_LENGTH
call CopyBytes
ret
DebugPlayerName: ; 5B1D
db "コージ@"
DebugRivalName: ; 5B21
db "レッド@"
ChoosePlayerName:: ; 5B25
call PanPortraitRight
ld hl, PlayerNameMenuHeader
call NamingWindow
ld a, [wMenuCursorY]
dec a
jr z, .loop
ld de, wPlayerName
call SaveCustomName
jr .farjump
.loop
ld b, $01
ld de, wPlayerName
callba NamingScreen
ld a, [wPlayerName]
cp "@"
jr z, .loop
call GBFadeOutToWhite
call ClearTileMap
call LoadFontExtra
call WaitBGMap
ld de, $4D10
ld bc, $1200
call IntroDisplayPicCenteredOrUpperRight
call GBFadeInFromWhite
.farjump
ld hl, ChoosePlayerNameEndText
call PrintText
ret
ChoosePlayerNameEndText: ; 5B6F
text "ふむ・・・"
line "<PLAYER> と いうんだな!"
prompt
PlayerNameMenuHeader: ; 5B81
db MENU_BACKUP_TILES ; flags
menu_coords 00, 00, 10, 11
dw PlayerNameMenuData
db 01 ; initial selection
PlayerNameMenuData; 5B89
db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B
db 04 ; items
db "じぶんできめる@"
db "ゴールド@"
db "サトシ@"
db "ジャック@"
db 3 ; x offset for the title string
db "なまえこうほ@"
ChooseRivalName:: ; 5BA9
call PanPortraitRight
ld hl, RivalNameMenuHeader
call NamingWindow
ld a, [wMenuCursorY]
dec a
jr z, .loop
ld de, wRivalName
call SaveCustomName
jr .farjump
.loop
ld b, $02
ld de, wRivalName
callba NamingScreen
ld a, [wRivalName]
cp "@"
jr z, .loop
call GBFadeOutToWhite
call ClearTileMap
call LoadFontExtra
call WaitBGMap
ld de, $4BD4
ld bc, $1200
call IntroDisplayPicCenteredOrUpperRight
call GBFadeInFromWhite
.farjump
ld hl, ChooseRivalNameEndText
call PrintText
ret
ChooseRivalNameEndText: ; 5BF3
text "そうか そうだったな"
line "<RIVAL> という なまえだ"
prompt
RivalNameMenuHeader: ; 5C0A
db MENU_BACKUP_TILES ; flags
menu_coords 00, 00, 10, 11
dw RivalNameMenuData
db 01 ; initial selection
RivalNameMenuData: ; 5C12
db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B
db 04 ; items
db "じぶんできめる@"
db "シルバー@"
db "シゲル@"
db "ジョン@"
db 3
db "なまえこうほ@"
MomNamePrompt:: ; 5C31
ld hl, MomNameMenuHeader
call NamingWindow
ld a, [wMenuCursorY]
dec a
jr z, .loop
ld de, wMomsName
call SaveCustomName
jr .escape
.loop
ld b, $03
ld de, wMomsName
callba NamingScreen
ld a, [wMomsName]
cp "@"
jr z, .loop
call ClearPalettes
call ClearTileMap
callab Function140d9
call LoadFontExtra
call GetMemSGBLayout
call WaitBGMap
.escape
ret
MomNameMenuHeader: ; 5C71
db MENU_BACKUP_TILES ; flags
menu_coords 00, 00, 10, 11
dw .MomNameMenuData
db 01 ; initial selection
.MomNameMenuData: ; 5C79
db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B
db 04 ; items
db "じぶんで きめる@"
db "おかあさん@"
db "ママ@"
db "かあちゃん@"
db 3
db "なまえこうほ@"
NamingWindow:: ; 5C9B
; loads the menu header put into hl
call LoadMenuHeader
call VerticalMenu
ld a, [wMenuCursorY]
dec a
call CopyNameFromMenu
call CloseWindow
ret
SaveCustomName:: ; 5CAC
ld hl, wStringBuffer2
ld bc, PLAYER_NAME_LENGTH
call CopyBytes
ret
PanPortraitRight:: ; 5CB6
hlcoord 5, 4
ld d, $06
ld e, $7E
ld b, d
ld c, e
ld d, $00
add hl, de
.loop
xor a
ldh [hBGMapMode], a
push hl
push bc
.innerLoop
;pans all the tiles onscreen to the right one
ld a, [hl+]
ld [hl-], a
dec hl
dec c
jr nz, .innerLoop
call WaitBGMap
pop bc
pop hl
inc hl
dec b ; passed c - how many tiles right to pan?
jr nz, .loop
ret
PanPortraitLeft:: ; 5CD7
hlcoord 12, 4
ld b, $06
ld c, $7E
.loop
xor a
ldh [hBGMapMode], a
push hl
push bc
.innerloop
ld a, [hl-]
ld [hl+], a
inc hl
dec c
jr nz, .innerloop
call WaitBGMap
pop bc
pop hl
inc hl
dec b
jr nz, .loop
ret
MenuCallSettings:: ; 5CF3
call SettingsScreen
ret
FadeInIntroPic: ; 5CF7
ld hl, IntroFadePalettes
ld b, 6
.next
ld a, [hl+]
ldh [rBGP], a
ld c, 10
call DelayFrames
dec b
jr nz, .next
ret
IntroFadePalettes:
db %01010100
db %10101000
db %11111100
db %11111000
db %11110100
db %11100100
MovePicLeft: ; 5D0E
ld a, 119
ldh [hWX], a
call DelayFrame
ld a, %11100100
ldh [rBGP], a
.next
call DelayFrame
ldh a, [hWX]
sub 8
cp $FF
ret z
ldh [hWX], a
jr .next
IntroDisplayPicCenteredOrUpperRight:: ; 5D27
; b = bank
; de = address of compressed pic
; c: 0 = centred, non-zero = upper-right
ld a, c
and a
hlcoord 13, 4
jr nz, .skip
hlcoord 6, 4
.skip
push hl
ld a, b
call UncompressSpriteFromDE
ld a, $00
call OpenSRAM
ld hl, sSpriteBuffer1
ld de, sSpriteBuffer0
ld bc, DOUBLESPRITEBUFFERSIZE
call CopyBytes
call CloseSRAM
ld de, VRAM_Begin + $1000
call InterlaceMergeSpriteBuffers
pop hl
xor a
ldh [hGraphicStartTile], a
ld bc, $0707
predef PlaceGraphic
ret
LoadStartingSprites: ; 5D5D
ld de, GoldSpriteGFX
lb bc, BANK(GoldSpriteGFX), $0C
ld hl, VRAM_Begin
call Request2bpp
ld hl, wVirtualOAM
ld de, GameStartSprites
ld c, $04
.loop
ld a, [de]
inc de
ld [hl+], a
ld a, [de]
inc de
ld [hl+], a
ld a, [de]
inc de
ld [hl+], a
xor a
ld [hl+], a
dec c
jr nz, .loop
ret
GameStartSprites: ; 5D80
db $50, $48, $00
db $50, $50, $01
db $58, $48, $02
db $58, $50, $03
; 5D8C
|