Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pret
GitHub Repository: pret/pokered
Path: blob/master/engine/movie/title.asm
1271 views
1
CopyDebugName:
2
ld bc, NAME_LENGTH
3
jp CopyData
4
5
PrepareTitleScreen::
6
; These debug names are already copied later in PrepareOakSpeech.
7
; Removing the unused copies below has no apparent impact.
8
; CopyDebugName can also be safely deleted afterwards.
9
ld hl, DebugNewGamePlayerName
10
ld de, wPlayerName
11
call CopyDebugName
12
ld hl, DebugNewGameRivalName
13
ld de, wRivalName
14
call CopyDebugName
15
xor a
16
ldh [hWY], a
17
ld [wLetterPrintingDelayFlags], a
18
ld hl, wStatusFlags6
19
ld [hli], a
20
ASSERT wStatusFlags6 + 1 == wStatusFlags7
21
ld [hli], a
22
ASSERT wStatusFlags7 + 1 == wElite4Flags
23
ld [hl], a
24
ld a, BANK(Music_TitleScreen)
25
ld [wAudioROMBank], a
26
ld [wAudioSavedROMBank], a
27
28
DisplayTitleScreen:
29
call GBPalWhiteOut
30
ld a, $1
31
ldh [hAutoBGTransferEnabled], a
32
xor a
33
ldh [hTileAnimations], a
34
ldh [hSCX], a
35
ld a, $40
36
ldh [hSCY], a
37
ld a, $90
38
ldh [hWY], a
39
call ClearScreen
40
call DisableLCD
41
call LoadFontTilePatterns
42
ld hl, NintendoCopyrightLogoGraphics
43
ld de, vTitleLogo2 tile 16
44
ld bc, 5 tiles
45
ld a, BANK(NintendoCopyrightLogoGraphics)
46
call FarCopyData2
47
ld hl, GameFreakLogoGraphics
48
ld de, vTitleLogo2 tile (16 + 5)
49
ld bc, 9 tiles
50
ld a, BANK(GameFreakLogoGraphics)
51
call FarCopyData2
52
ld hl, PokemonLogoGraphics
53
ld de, vTitleLogo
54
ld bc, $60 tiles
55
ld a, BANK(PokemonLogoGraphics)
56
call FarCopyData2 ; first chunk
57
ld hl, PokemonLogoGraphics tile $60
58
ld de, vTitleLogo2
59
ld bc, $10 tiles
60
ld a, BANK(PokemonLogoGraphics)
61
call FarCopyData2 ; second chunk
62
ld hl, Version_GFX
63
ld de, vChars2 tile $60 + (10 tiles - (Version_GFXEnd - Version_GFX) * 2) / 2
64
ld bc, Version_GFXEnd - Version_GFX
65
ld a, BANK(Version_GFX)
66
call FarCopyDataDouble
67
call ClearBothBGMaps
68
69
; place tiles for pokemon logo (except for the last row)
70
hlcoord 2, 1
71
ld a, $80
72
ld de, SCREEN_WIDTH
73
ld c, 6
74
.pokemonLogoTileLoop
75
ld b, $10
76
push hl
77
.pokemonLogoTileRowLoop ; place tiles for one row
78
ld [hli], a
79
inc a
80
dec b
81
jr nz, .pokemonLogoTileRowLoop
82
pop hl
83
add hl, de
84
dec c
85
jr nz, .pokemonLogoTileLoop
86
87
; place tiles for the last row of the pokemon logo
88
hlcoord 2, 7
89
ld a, $31
90
ld b, $10
91
.pokemonLogoLastTileRowLoop
92
ld [hli], a
93
inc a
94
dec b
95
jr nz, .pokemonLogoLastTileRowLoop
96
97
call DrawPlayerCharacter
98
99
; put a pokeball in the player's hand
100
ld hl, wShadowOAMSprite10
101
ld a, $74
102
ld [hl], a
103
104
; place tiles for title screen copyright
105
hlcoord 2, 17
106
ld de, .tileScreenCopyrightTiles
107
ld b, $10
108
.tileScreenCopyrightTilesLoop
109
ld a, [de]
110
ld [hli], a
111
inc de
112
dec b
113
jr nz, .tileScreenCopyrightTilesLoop
114
115
jr .next
116
117
.tileScreenCopyrightTiles
118
db $41,$42,$43,$42,$44,$42,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E ; ©'95.'96.'98 GAME FREAK inc.
119
120
.next
121
call SaveScreenTilesToBuffer2
122
call LoadScreenTilesFromBuffer2
123
call EnableLCD
124
125
IF DEF(_RED)
126
ld a, STARTER1 ; which Pokemon to show first on the title screen
127
ENDC
128
IF DEF(_BLUE)
129
ld a, STARTER2 ; which Pokemon to show first on the title screen
130
ENDC
131
ld [wTitleMonSpecies], a
132
call LoadTitleMonSprite
133
134
ld a, HIGH(vBGMap0 + $300)
135
call TitleScreenCopyTileMapToVRAM
136
call SaveScreenTilesToBuffer1
137
ld a, $40
138
ldh [hWY], a
139
call LoadScreenTilesFromBuffer2
140
ld a, HIGH(vBGMap0)
141
call TitleScreenCopyTileMapToVRAM
142
ld b, SET_PAL_TITLE_SCREEN
143
call RunPaletteCommand
144
call GBPalNormal
145
ld a, %11100100
146
ldh [rOBP0], a
147
148
; make pokemon logo bounce up and down
149
ld bc, hSCY ; background scroll Y
150
ld hl, .TitleScreenPokemonLogoYScrolls
151
.bouncePokemonLogoLoop
152
ld a, [hli]
153
and a
154
jr z, .finishedBouncingPokemonLogo
155
ld d, a
156
cp -3
157
jr nz, .skipPlayingSound
158
ld a, SFX_INTRO_CRASH
159
call PlaySound
160
.skipPlayingSound
161
ld a, [hli]
162
ld e, a
163
call .ScrollTitleScreenPokemonLogo
164
jr .bouncePokemonLogoLoop
165
166
.TitleScreenPokemonLogoYScrolls:
167
; Controls the bouncing effect of the Pokemon logo on the title screen
168
db -4,16 ; y scroll amount, number of times to scroll
169
db 3,4
170
db -3,4
171
db 2,2
172
db -2,2
173
db 1,2
174
db -1,2
175
db 0 ; terminate list with 0
176
177
.ScrollTitleScreenPokemonLogo:
178
; Scrolls the Pokemon logo on the title screen to create the bouncing effect
179
; Scrolls d pixels e times
180
call DelayFrame
181
ld a, [bc] ; background scroll Y
182
add d
183
ld [bc], a
184
dec e
185
jr nz, .ScrollTitleScreenPokemonLogo
186
ret
187
188
.finishedBouncingPokemonLogo
189
call LoadScreenTilesFromBuffer1
190
ld c, 36
191
call DelayFrames
192
ld a, SFX_INTRO_WHOOSH
193
call PlaySound
194
195
; scroll game version in from the right
196
call PrintGameVersionOnTitleScreen
197
ld a, SCREEN_HEIGHT_PX
198
ldh [hWY], a
199
ld d, 144
200
.scrollTitleScreenGameVersionLoop
201
ld h, d
202
ld l, 64
203
call ScrollTitleScreenGameVersion
204
ld h, 0
205
ld l, 80
206
call ScrollTitleScreenGameVersion
207
ld a, d
208
add 4
209
ld d, a
210
and a
211
jr nz, .scrollTitleScreenGameVersionLoop
212
213
ld a, HIGH(vBGMap1)
214
call TitleScreenCopyTileMapToVRAM
215
call LoadScreenTilesFromBuffer2
216
call PrintGameVersionOnTitleScreen
217
call Delay3
218
call WaitForSoundToFinish
219
ld a, MUSIC_TITLE_SCREEN
220
ld [wNewSoundID], a
221
call PlaySound
222
xor a
223
ld [wUnusedFlag], a
224
225
; Keep scrolling in new mons indefinitely until the user performs input.
226
.awaitUserInterruptionLoop
227
ld c, 200
228
call CheckForUserInterruption
229
jr c, .finishedWaiting
230
call TitleScreenScrollInMon
231
ld c, 1
232
call CheckForUserInterruption
233
jr c, .finishedWaiting
234
farcall TitleScreenAnimateBallIfStarterOut
235
call TitleScreenPickNewMon
236
jr .awaitUserInterruptionLoop
237
238
.finishedWaiting
239
ld a, [wTitleMonSpecies]
240
call PlayCry
241
call WaitForSoundToFinish
242
call GBPalWhiteOutWithDelay3
243
call ClearSprites
244
xor a
245
ldh [hWY], a
246
inc a
247
ldh [hAutoBGTransferEnabled], a
248
call ClearScreen
249
ld a, HIGH(vBGMap0)
250
call TitleScreenCopyTileMapToVRAM
251
ld a, HIGH(vBGMap1)
252
call TitleScreenCopyTileMapToVRAM
253
call Delay3
254
call LoadGBPal
255
ldh a, [hJoyHeld]
256
ld b, a
257
and PAD_UP | PAD_SELECT | PAD_B
258
cp PAD_UP | PAD_SELECT | PAD_B
259
jp z, .doClearSaveDialogue
260
IF DEF(_DEBUG)
261
ld a, b
262
bit B_PAD_SELECT, a
263
jp nz, DebugMenu
264
ENDC
265
jp MainMenu
266
267
.doClearSaveDialogue
268
farjp DoClearSaveDialogue
269
270
TitleScreenPickNewMon:
271
ld a, HIGH(vBGMap0)
272
call TitleScreenCopyTileMapToVRAM
273
274
.loop
275
; Keep looping until a mon different from the current one is picked.
276
call Random
277
and $f
278
ld c, a
279
ld b, 0
280
ld hl, TitleMons
281
add hl, bc
282
ld a, [hl]
283
ld hl, wTitleMonSpecies
284
285
; Can't be the same as before.
286
cp [hl]
287
jr z, .loop
288
289
ld [hl], a
290
call LoadTitleMonSprite
291
292
ld a, $90
293
ldh [hWY], a
294
ld d, 1 ; scroll out
295
farcall TitleScroll
296
ret
297
298
TitleScreenScrollInMon:
299
ld d, 0 ; scroll in
300
farcall TitleScroll
301
xor a
302
ldh [hWY], a
303
ret
304
305
ScrollTitleScreenGameVersion:
306
.wait
307
ldh a, [rLY]
308
cp l
309
jr nz, .wait
310
311
ld a, h
312
ldh [rSCX], a
313
314
.wait2
315
ldh a, [rLY]
316
cp h
317
jr z, .wait2
318
ret
319
320
DrawPlayerCharacter:
321
ld hl, PlayerCharacterTitleGraphics
322
ld de, vSprites
323
ld bc, PlayerCharacterTitleGraphicsEnd - PlayerCharacterTitleGraphics
324
ld a, BANK(PlayerCharacterTitleGraphics)
325
call FarCopyData2
326
call ClearSprites
327
xor a
328
ld [wPlayerCharacterOAMTile], a
329
ld hl, wShadowOAM
330
lb de, $60, $5a
331
ld b, 7
332
.loop
333
push de
334
ld c, 5
335
.innerLoop
336
ld a, d
337
ld [hli], a ; Y
338
ld a, e
339
ld [hli], a ; X
340
add 8
341
ld e, a
342
ld a, [wPlayerCharacterOAMTile]
343
ld [hli], a ; tile
344
inc a
345
ld [wPlayerCharacterOAMTile], a
346
inc hl
347
dec c
348
jr nz, .innerLoop
349
pop de
350
ld a, 8
351
add d
352
ld d, a
353
dec b
354
jr nz, .loop
355
ret
356
357
ClearBothBGMaps:
358
ld hl, vBGMap0
359
ld bc, 2 * TILEMAP_AREA
360
ld a, " "
361
jp FillMemory
362
363
LoadTitleMonSprite:
364
ld [wCurPartySpecies], a
365
ld [wCurSpecies], a
366
hlcoord 5, 10
367
call GetMonHeader
368
jp LoadFrontSpriteByMonIndex
369
370
TitleScreenCopyTileMapToVRAM:
371
ldh [hAutoBGTransferDest + 1], a
372
jp Delay3
373
374
LoadCopyrightAndTextBoxTiles:
375
xor a
376
ldh [hWY], a
377
call ClearScreen
378
call LoadTextBoxTilePatterns
379
380
LoadCopyrightTiles:
381
ld de, NintendoCopyrightLogoGraphics
382
ld hl, vChars2 tile $60
383
lb bc, BANK(NintendoCopyrightLogoGraphics), (GameFreakLogoGraphicsEnd - NintendoCopyrightLogoGraphics) / $10
384
call CopyVideoData
385
hlcoord 2, 7
386
ld de, CopyrightTextString
387
jp PlaceString
388
389
CopyrightTextString:
390
db $60,$61,$62,$61,$63,$61,$64,$7F,$65,$66,$67,$68,$69,$6A ; ©'95.'96.'98 Nintendo
391
next $60,$61,$62,$61,$63,$61,$64,$7F,$6B,$6C,$6D,$6E,$6F,$70,$71,$72 ; ©'95.'96.'98 Creatures inc.
392
next $60,$61,$62,$61,$63,$61,$64,$7F,$73,$74,$75,$76,$77,$78,$79,$7A,$7B ; ©'95.'96.'98 GAME FREAK inc.
393
db "@"
394
395
INCLUDE "data/pokemon/title_mons.asm"
396
397
; prints version text (red, blue)
398
PrintGameVersionOnTitleScreen:
399
hlcoord 7, 8
400
ld de, VersionOnTitleScreenText
401
jp PlaceString
402
403
; these point to special tiles specifically loaded for that purpose and are not usual text
404
VersionOnTitleScreenText:
405
IF DEF(_RED)
406
db $60,$61,$7F,$65,$66,$67,$68,$69,"@" ; "Red Version"
407
ENDC
408
IF DEF(_BLUE)
409
db $61,$62,$63,$64,$65,$66,$67,$68,"@" ; "Blue Version"
410
ENDC
411
412
DebugNewGamePlayerName:
413
db "NINTEN@"
414
415
DebugNewGameRivalName:
416
db "SONY@"
417
418