Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pret
GitHub Repository: pret/pokered
Path: blob/master/engine/movie/splash.asm
1271 views
1
LoadShootingStarGraphics:
2
ld a, $f9
3
ldh [rOBP0], a
4
ld a, $a4
5
ldh [rOBP1], a
6
ld de, MoveAnimationTiles1 tile 3 ; star tile (top left quadrant)
7
ld hl, vChars1 tile $20
8
lb bc, BANK(MoveAnimationTiles1), 1
9
call CopyVideoData
10
ld de, MoveAnimationTiles1 tile 19 ; star tile (bottom left quadrant)
11
ld hl, vChars1 tile $21
12
lb bc, BANK(MoveAnimationTiles1), 1
13
call CopyVideoData
14
ld de, FallingStar
15
ld hl, vChars1 tile $22
16
lb bc, BANK(FallingStar), (FallingStarEnd - FallingStar) / $10
17
call CopyVideoData
18
ld hl, GameFreakLogoOAMData
19
ld de, wShadowOAMSprite24
20
ld bc, GameFreakLogoOAMDataEnd - GameFreakLogoOAMData
21
call CopyData
22
ld hl, GameFreakShootingStarOAMData
23
ld de, wShadowOAM
24
ld bc, GameFreakShootingStarOAMDataEnd - GameFreakShootingStarOAMData
25
jp CopyData
26
27
AnimateShootingStar:
28
call LoadShootingStarGraphics
29
ld a, SFX_SHOOTING_STAR
30
call PlaySound
31
32
; Move the big star down and left across the screen.
33
ld hl, wShadowOAM
34
lb bc, $a0, $4
35
.bigStarLoop
36
push hl
37
push bc
38
.bigStarInnerLoop
39
ld a, [hl] ; Y
40
add 4
41
ld [hli], a
42
ld a, [hl] ; X
43
add -4
44
ld [hli], a
45
inc hl
46
inc hl
47
dec c
48
jr nz, .bigStarInnerLoop
49
ld c, 1
50
call CheckForUserInterruption
51
pop bc
52
pop hl
53
ret c
54
ld a, [hl]
55
cp 80
56
jr nz, .next
57
jr .bigStarLoop
58
.next
59
cp b
60
jr nz, .bigStarLoop
61
62
; Clear big star OAM.
63
ld hl, wShadowOAM
64
ld c, 4
65
ld de, 4
66
.clearOAMLoop
67
ld [hl], 160
68
add hl, de
69
dec c
70
jr nz, .clearOAMLoop
71
72
; Make Gamefreak logo flash.
73
ld b, 3
74
.flashLogoLoop
75
ld hl, rOBP0
76
rrc [hl]
77
rrc [hl]
78
ld c, 10
79
call CheckForUserInterruption
80
ret c
81
dec b
82
jr nz, .flashLogoLoop
83
84
; Copy 24 instances of the small stars OAM data.
85
; Note that their coordinates put them off-screen.
86
ld de, wShadowOAM
87
ld a, 24
88
.initSmallStarsOAMLoop
89
push af
90
ld hl, SmallStarsOAM
91
ld bc, SmallStarsOAMEnd - SmallStarsOAM
92
call CopyData
93
pop af
94
dec a
95
jr nz, .initSmallStarsOAMLoop
96
97
; Animate the small stars falling from the Gamefreak logo.
98
xor a
99
ld [wMoveDownSmallStarsOAMCount], a
100
ld hl, SmallStarsWaveCoordsPointerTable
101
ld c, 6
102
.smallStarsLoop
103
ld a, [hli]
104
ld e, a
105
ld a, [hli]
106
ld d, a
107
push bc
108
push hl
109
ld hl, wShadowOAMSprite20
110
ld c, 4
111
.smallStarsInnerLoop ; introduce new wave of 4 small stars OAM entries
112
ld a, [de]
113
cp -1
114
jr z, .next2
115
ld [hli], a ; Y
116
inc de
117
ld a, [de]
118
ld [hli], a ; X
119
inc de
120
inc hl
121
inc hl
122
dec c
123
jr nz, .smallStarsInnerLoop
124
ld a, [wMoveDownSmallStarsOAMCount]
125
cp 24
126
jr z, .next2
127
add 6 ; should be 4, but the extra 2 aren't visible on screen
128
ld [wMoveDownSmallStarsOAMCount], a
129
.next2
130
call MoveDownSmallStars
131
push af
132
133
; shift the existing OAM entries down to make room for the next wave
134
ld hl, wShadowOAMSprite04
135
ld de, wShadowOAM
136
ld bc, $50
137
call CopyData
138
139
pop af
140
pop hl
141
pop bc
142
ret c
143
dec c
144
jr nz, .smallStarsLoop
145
and a
146
ret
147
148
SmallStarsOAM:
149
dbsprite 0, 0, 0, 0, $A2, OAM_PRIO | OAM_PAL1
150
SmallStarsOAMEnd:
151
152
SmallStarsWaveCoordsPointerTable:
153
dw SmallStarsWave1Coords
154
dw SmallStarsWave2Coords
155
dw SmallStarsWave3Coords
156
dw SmallStarsWave4Coords
157
dw SmallStarsEmptyWave
158
dw SmallStarsEmptyWave
159
160
; The stars that fall from the Gamefreak logo come in 4 waves of 4 OAM entries.
161
; These arrays contain the Y and X coordinates of each OAM entry.
162
163
SmallStarsWave1Coords:
164
db $68, $30
165
db $68, $40
166
db $68, $58
167
db $68, $78
168
SmallStarsWave2Coords:
169
db $68, $38
170
db $68, $48
171
db $68, $60
172
db $68, $70
173
SmallStarsWave3Coords:
174
db $68, $34
175
db $68, $4C
176
db $68, $54
177
db $68, $64
178
SmallStarsWave4Coords:
179
db $68, $3C
180
db $68, $5C
181
db $68, $6C
182
db $68, $74
183
SmallStarsEmptyWave:
184
db -1 ; end
185
186
MoveDownSmallStars:
187
ld b, 8
188
.loop
189
ld hl, wShadowOAMSprite23
190
ld a, [wMoveDownSmallStarsOAMCount]
191
ld de, -4
192
ld c, a
193
.innerLoop
194
inc [hl] ; Y
195
add hl, de
196
dec c
197
jr nz, .innerLoop
198
; Toggle the palette so that the lower star in the small stars tile blinks in
199
; and out.
200
ldh a, [rOBP1]
201
xor %10100000
202
ldh [rOBP1], a
203
204
ld c, 3
205
call CheckForUserInterruption
206
ret c
207
dec b
208
jr nz, .loop
209
ret
210
211
GameFreakLogoOAMData:
212
dbsprite 10, 9, 0, 0, $8d, 0
213
dbsprite 11, 9, 0, 0, $8e, 0
214
dbsprite 10, 10, 0, 0, $8f, 0
215
dbsprite 11, 10, 0, 0, $90, 0
216
dbsprite 10, 11, 0, 0, $91, 0
217
dbsprite 11, 11, 0, 0, $92, 0
218
dbsprite 6, 12, 0, 0, $80, 0
219
dbsprite 7, 12, 0, 0, $81, 0
220
dbsprite 8, 12, 0, 0, $82, 0
221
dbsprite 9, 12, 0, 0, $83, 0
222
dbsprite 10, 12, 0, 0, $93, 0
223
dbsprite 11, 12, 0, 0, $84, 0
224
dbsprite 12, 12, 0, 0, $85, 0
225
dbsprite 13, 12, 0, 0, $83, 0
226
dbsprite 14, 12, 0, 0, $81, 0
227
dbsprite 15, 12, 0, 0, $86, 0
228
GameFreakLogoOAMDataEnd:
229
230
GameFreakShootingStarOAMData:
231
dbsprite 20, 0, 0, 0, $a0, OAM_PAL1
232
dbsprite 21, 0, 0, 0, $a0, OAM_PAL1 | OAM_XFLIP
233
dbsprite 20, 1, 0, 0, $a1, OAM_PAL1
234
dbsprite 21, 1, 0, 0, $a1, OAM_PAL1 | OAM_XFLIP
235
GameFreakShootingStarOAMDataEnd:
236
237
FallingStar:
238
INCBIN "gfx/splash/falling_star.2bpp"
239
FallingStarEnd:
240
241