Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pret
GitHub Repository: pret/pokered
Path: blob/master/engine/movie/title.asm
2024 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, .tileScreenCopyrightTilesEnd - .tileScreenCopyrightTiles
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
.tileScreenCopyrightTilesEnd
120
121
.next
122
call SaveScreenTilesToBuffer2
123
call LoadScreenTilesFromBuffer2
124
call EnableLCD
125
126
IF DEF(_RED)
127
ld a, STARTER1 ; which Pokemon to show first on the title screen
128
ENDC
129
IF DEF(_BLUE)
130
ld a, STARTER2 ; which Pokemon to show first on the title screen
131
ENDC
132
ld [wTitleMonSpecies], a
133
call LoadTitleMonSprite
134
135
ld a, HIGH(vBGMap0 + $300)
136
call TitleScreenCopyTileMapToVRAM
137
call SaveScreenTilesToBuffer1
138
ld a, $40
139
ldh [hWY], a
140
call LoadScreenTilesFromBuffer2
141
ld a, HIGH(vBGMap0)
142
call TitleScreenCopyTileMapToVRAM
143
ld b, SET_PAL_TITLE_SCREEN
144
call RunPaletteCommand
145
call GBPalNormal
146
ld a, %11100100
147
ldh [rOBP0], a
148
149
; make pokemon logo bounce up and down
150
ld bc, hSCY ; background scroll Y
151
ld hl, .TitleScreenPokemonLogoYScrolls
152
.bouncePokemonLogoLoop
153
ld a, [hli]
154
and a
155
jr z, .finishedBouncingPokemonLogo
156
ld d, a
157
cp -3
158
jr nz, .skipPlayingSound
159
ld a, SFX_INTRO_CRASH
160
call PlaySound
161
.skipPlayingSound
162
ld a, [hli]
163
ld e, a
164
call .ScrollTitleScreenPokemonLogo
165
jr .bouncePokemonLogoLoop
166
167
.TitleScreenPokemonLogoYScrolls:
168
; Controls the bouncing effect of the Pokemon logo on the title screen
169
db -4,16 ; y scroll amount, number of times to scroll
170
db 3,4
171
db -3,4
172
db 2,2
173
db -2,2
174
db 1,2
175
db -1,2
176
db 0 ; terminate list with 0
177
178
.ScrollTitleScreenPokemonLogo:
179
; Scrolls the Pokemon logo on the title screen to create the bouncing effect
180
; Scrolls d pixels e times
181
call DelayFrame
182
ld a, [bc] ; background scroll Y
183
add d
184
ld [bc], a
185
dec e
186
jr nz, .ScrollTitleScreenPokemonLogo
187
ret
188
189
.finishedBouncingPokemonLogo
190
call LoadScreenTilesFromBuffer1
191
ld c, 36
192
call DelayFrames
193
ld a, SFX_INTRO_WHOOSH
194
call PlaySound
195
196
; scroll game version in from the right
197
call PrintGameVersionOnTitleScreen
198
ld a, SCREEN_HEIGHT_PX
199
ldh [hWY], a
200
ld d, 144
201
.scrollTitleScreenGameVersionLoop
202
ld h, d
203
ld l, 64
204
call ScrollTitleScreenGameVersion
205
ld h, 0
206
ld l, 80
207
call ScrollTitleScreenGameVersion
208
ld a, d
209
add 4
210
ld d, a
211
and a
212
jr nz, .scrollTitleScreenGameVersionLoop
213
214
ld a, HIGH(vBGMap1)
215
call TitleScreenCopyTileMapToVRAM
216
call LoadScreenTilesFromBuffer2
217
call PrintGameVersionOnTitleScreen
218
call Delay3
219
call WaitForSoundToFinish
220
ld a, MUSIC_TITLE_SCREEN
221
ld [wNewSoundID], a
222
call PlaySound
223
xor a
224
ld [wUnusedFlag], a
225
226
; Keep scrolling in new mons indefinitely until the user performs input.
227
.awaitUserInterruptionLoop
228
ld c, 200
229
call CheckForUserInterruption
230
jr c, .finishedWaiting
231
call TitleScreenScrollInMon
232
ld c, 1
233
call CheckForUserInterruption
234
jr c, .finishedWaiting
235
farcall TitleScreenAnimateBallIfStarterOut
236
call TitleScreenPickNewMon
237
jr .awaitUserInterruptionLoop
238
239
.finishedWaiting
240
ld a, [wTitleMonSpecies]
241
call PlayCry
242
call WaitForSoundToFinish
243
call GBPalWhiteOutWithDelay3
244
call ClearSprites
245
xor a
246
ldh [hWY], a
247
inc a
248
ldh [hAutoBGTransferEnabled], a
249
call ClearScreen
250
ld a, HIGH(vBGMap0)
251
call TitleScreenCopyTileMapToVRAM
252
ld a, HIGH(vBGMap1)
253
call TitleScreenCopyTileMapToVRAM
254
call Delay3
255
call LoadGBPal
256
ldh a, [hJoyHeld]
257
ld b, a
258
and PAD_UP | PAD_SELECT | PAD_B
259
cp PAD_UP | PAD_SELECT | PAD_B
260
jp z, .doClearSaveDialogue
261
IF DEF(_DEBUG)
262
ld a, b
263
bit B_PAD_SELECT, a
264
jp nz, DebugMenu
265
ENDC
266
jp MainMenu
267
268
.doClearSaveDialogue
269
farjp DoClearSaveDialogue
270
271
TitleScreenPickNewMon:
272
ld a, HIGH(vBGMap0)
273
call TitleScreenCopyTileMapToVRAM
274
275
.loop
276
; Keep looping until a mon different from the current one is picked.
277
call Random
278
and $f
279
ld c, a
280
ld b, 0
281
ld hl, TitleMons
282
add hl, bc
283
ld a, [hl]
284
ld hl, wTitleMonSpecies
285
286
; Can't be the same as before.
287
cp [hl]
288
jr z, .loop
289
290
ld [hl], a
291
call LoadTitleMonSprite
292
293
ld a, $90
294
ldh [hWY], a
295
ld d, 1 ; scroll out
296
farcall TitleScroll
297
ret
298
299
TitleScreenScrollInMon:
300
ld d, 0 ; scroll in
301
farcall TitleScroll
302
xor a
303
ldh [hWY], a
304
ret
305
306
ScrollTitleScreenGameVersion:
307
.wait
308
ldh a, [rLY]
309
cp l
310
jr nz, .wait
311
312
ld a, h
313
ldh [rSCX], a
314
315
.wait2
316
ldh a, [rLY]
317
cp h
318
jr z, .wait2
319
ret
320
321
DrawPlayerCharacter:
322
ld hl, PlayerCharacterTitleGraphics
323
ld de, vSprites
324
ld bc, PlayerCharacterTitleGraphicsEnd - PlayerCharacterTitleGraphics
325
ld a, BANK(PlayerCharacterTitleGraphics)
326
call FarCopyData2
327
call ClearSprites
328
xor a
329
ld [wPlayerCharacterOAMTile], a
330
ld hl, wShadowOAM
331
lb de, $60, $5a
332
ld b, 7
333
.loop
334
push de
335
ld c, 5
336
.innerLoop
337
ld a, d
338
ld [hli], a ; Y
339
ld a, e
340
ld [hli], a ; X
341
add 8
342
ld e, a
343
ld a, [wPlayerCharacterOAMTile]
344
ld [hli], a ; tile
345
inc a
346
ld [wPlayerCharacterOAMTile], a
347
inc hl
348
dec c
349
jr nz, .innerLoop
350
pop de
351
ld a, 8
352
add d
353
ld d, a
354
dec b
355
jr nz, .loop
356
ret
357
358
ClearBothBGMaps:
359
ld hl, vBGMap0
360
ld bc, 2 * TILEMAP_AREA
361
ld a, ' '
362
jp FillMemory
363
364
LoadTitleMonSprite:
365
ld [wCurPartySpecies], a
366
ld [wCurSpecies], a
367
hlcoord 5, 10
368
call GetMonHeader
369
jp LoadFrontSpriteByMonIndex
370
371
TitleScreenCopyTileMapToVRAM:
372
ldh [hAutoBGTransferDest + 1], a
373
jp Delay3
374
375
LoadCopyrightAndTextBoxTiles:
376
xor a
377
ldh [hWY], a
378
call ClearScreen
379
call LoadTextBoxTilePatterns
380
381
LoadCopyrightTiles:
382
ld de, NintendoCopyrightLogoGraphics
383
ld hl, vChars2 tile $60
384
lb bc, BANK(NintendoCopyrightLogoGraphics), (GameFreakLogoGraphicsEnd - NintendoCopyrightLogoGraphics) / TILE_SIZE
385
call CopyVideoData
386
hlcoord 2, 7
387
ld de, CopyrightTextString
388
jp PlaceString
389
390
CopyrightTextString:
391
db $60,$61,$62,$61,$63,$61,$64,$7F,$65,$66,$67,$68,$69,$6A ; ©'95.'96.'98 Nintendo
392
next $60,$61,$62,$61,$63,$61,$64,$7F,$6B,$6C,$6D,$6E,$6F,$70,$71,$72 ; ©'95.'96.'98 Creatures inc.
393
next $60,$61,$62,$61,$63,$61,$64,$7F,$73,$74,$75,$76,$77,$78,$79,$7A,$7B ; ©'95.'96.'98 GAME FREAK inc.
394
db "@"
395
396
INCLUDE "data/pokemon/title_mons.asm"
397
398
; prints version text (red, blue)
399
PrintGameVersionOnTitleScreen:
400
hlcoord 7, 8
401
ld de, VersionOnTitleScreenText
402
jp PlaceString
403
404
; these point to special tiles specifically loaded for that purpose and are not usual text
405
VersionOnTitleScreenText:
406
IF DEF(_RED)
407
db $60,$61,$7F,$65,$66,$67,$68,$69,"@" ; "Red Version"
408
ENDC
409
IF DEF(_BLUE)
410
db $61,$62,$63,$64,$65,$66,$67,$68,"@" ; "Blue Version"
411
ENDC
412
413
DebugNewGamePlayerName:
414
db "NINTEN@"
415
416
DebugNewGameRivalName:
417
db "SONY@"
418
419