diff options
| author | Rangi <35663410+Rangi42@users.noreply.github.com> | 2020-08-29 01:04:24 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-29 01:04:24 -0400 |
| commit | 4ef305907206bdb90c3c9259f6d527a90b26629c (patch) | |
| tree | ed116b29979bb2aeb3a02789aa92d3769278361a /engine/movie/splash.asm | |
| parent | Align warp and sign coordinates (diff) | |
| parent | Use decimal, not hex, for sprite (object) coordinates in map scripts (diff) | |
| download | pokeyellow-4ef305907206bdb90c3c9259f6d527a90b26629c.tar.gz pokeyellow-4ef305907206bdb90c3c9259f6d527a90b26629c.tar.xz pokeyellow-4ef305907206bdb90c3c9259f6d527a90b26629c.zip | |
Merge pull request #290 from Rangi42/master
Separate splash screen, intro, and credits (like pokegold/pokecrystal)
Diffstat (limited to 'engine/movie/splash.asm')
| -rwxr-xr-x | engine/movie/splash.asm | 243 |
1 files changed, 243 insertions, 0 deletions
diff --git a/engine/movie/splash.asm b/engine/movie/splash.asm new file mode 100755 index 00000000..be97b8e5 --- /dev/null +++ b/engine/movie/splash.asm @@ -0,0 +1,243 @@ +LoadShootingStarGraphics: + ld a, $f9 + ldh [rOBP0], a + ld a, $a4 + ldh [rOBP1], a + ld de, AnimationTileset2 tile 3 ; star tile (top left quadrant) + ld hl, vChars1 tile $20 + lb bc, BANK(AnimationTileset2), 1 + call CopyVideoData + ld de, AnimationTileset2 tile 19 ; star tile (bottom left quadrant) + ld hl, vChars1 tile $21 + lb bc, BANK(AnimationTileset2), 1 + call CopyVideoData + ld de, FallingStar + ld hl, vChars1 tile $22 + lb bc, BANK(FallingStar), (FallingStarEnd - FallingStar) / $10 + call CopyVideoData + ld hl, GameFreakLogoOAMData + ld de, wOAMBuffer + $60 + ld bc, GameFreakLogoOAMDataEnd - GameFreakLogoOAMData + call CopyData + ld hl, GameFreakShootingStarOAMData + ld de, wOAMBuffer + ld bc, GameFreakShootingStarOAMDataEnd - GameFreakShootingStarOAMData + jp CopyData + +AnimateShootingStar: + call LoadShootingStarGraphics + ld a, SFX_SHOOTING_STAR + call PlaySound + +; Move the big star down and left across the screen. + ld hl, wOAMBuffer + lb bc, $a0, $4 +.bigStarLoop + push hl + push bc +.bigStarInnerLoop + ld a, [hl] ; Y + add 4 + ld [hli], a + ld a, [hl] ; X + add -4 + ld [hli], a + inc hl + inc hl + dec c + jr nz, .bigStarInnerLoop + ld c, 1 + call CheckForUserInterruption + pop bc + pop hl + ret c + ld a, [hl] + cp 80 + jr nz, .next + jr .bigStarLoop +.next + cp b + jr nz, .bigStarLoop + +; Clear big star OAM. + ld hl, wOAMBuffer + ld c, 4 + ld de, 4 +.clearOAMLoop + ld [hl], 160 + add hl, de + dec c + jr nz, .clearOAMLoop + +; Make Gamefreak logo flash. + ld b, 3 +.flashLogoLoop + ld hl, rOBP0 + rrc [hl] + rrc [hl] + ld c, 10 + call CheckForUserInterruption + ret c + dec b + jr nz, .flashLogoLoop + +; Copy 24 instances of the small stars OAM data. +; Note that their coordinates put them off-screen. + ld de, wOAMBuffer + ld a, 24 +.initSmallStarsOAMLoop + push af + ld hl, SmallStarsOAM + ld bc, SmallStarsOAMEnd - SmallStarsOAM + call CopyData + pop af + dec a + jr nz, .initSmallStarsOAMLoop + +; Animate the small stars falling from the Gamefreak logo. + xor a + ld [wMoveDownSmallStarsOAMCount], a + ld hl, SmallStarsWaveCoordsPointerTable + ld c, 6 +.smallStarsLoop + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + push bc + push hl + ld hl, wOAMBuffer + $50 + ld c, 4 +.smallStarsInnerLoop ; introduce new wave of 4 small stars OAM entries + ld a, [de] + cp $ff + jr z, .next2 + ld [hli], a ; Y + inc de + ld a, [de] + ld [hli], a ; X + inc de + inc hl + inc hl + dec c + jr nz, .smallStarsInnerLoop + ld a, [wMoveDownSmallStarsOAMCount] + cp 24 + jr z, .next2 + add 6 ; should be 4, but the extra 2 aren't visible on screen + ld [wMoveDownSmallStarsOAMCount], a +.next2 + call MoveDownSmallStars + push af + +; shift the existing OAM entries down to make room for the next wave + ld hl, wOAMBuffer + $10 + ld de, wOAMBuffer + ld bc, $50 + call CopyData + + pop af + pop hl + pop bc + ret c + dec c + jr nz, .smallStarsLoop + and a + ret + +SmallStarsOAM: + dbsprite 0, 0, 0, 0, $A2, OAM_BEHIND_BG | OAM_OBP1 +SmallStarsOAMEnd: + +SmallStarsWaveCoordsPointerTable: + dw SmallStarsWave1Coords + dw SmallStarsWave2Coords + dw SmallStarsWave3Coords + dw SmallStarsWave4Coords + dw SmallStarsEmptyWave + dw SmallStarsEmptyWave + +; The stars that fall from the Gamefreak logo come in 4 waves of 4 OAM entries. +; These arrays contain the Y and X coordinates of each OAM entry. + +SmallStarsWave1Coords: + db $68, $30 + db $68, $40 + db $68, $58 + db $68, $78 + +SmallStarsWave2Coords: + db $68, $38 + db $68, $48 + db $68, $60 + db $68, $70 + +SmallStarsWave3Coords: + db $68, $34 + db $68, $4C + db $68, $54 + db $68, $64 + +SmallStarsWave4Coords: + db $68, $3C + db $68, $5C + db $68, $6C + db $68, $74 + +SmallStarsEmptyWave: + db $FF + +MoveDownSmallStars: + ld b, 8 +.loop + ld hl, wOAMBuffer + $5c + ld a, [wMoveDownSmallStarsOAMCount] + ld de, -4 + ld c, a +.innerLoop + inc [hl] ; Y + add hl, de + dec c + jr nz, .innerLoop +; Toggle the palette so that the lower star in the small stars tile blinks in +; and out. + ldh a, [rOBP1] + xor %10100000 + ldh [rOBP1], a + + ld c, 3 + call CheckForUserInterruption + ret c + dec b + jr nz, .loop + ret + +GameFreakLogoOAMData: + dbsprite 10, 9, 0, 0, $8d, 0 + dbsprite 11, 9, 0, 0, $8e, 0 + dbsprite 10, 10, 0, 0, $8f, 0 + dbsprite 11, 10, 0, 0, $90, 0 + dbsprite 10, 11, 0, 0, $91, 0 + dbsprite 11, 11, 0, 0, $92, 0 + dbsprite 6, 12, 0, 0, $80, 0 + dbsprite 7, 12, 0, 0, $81, 0 + dbsprite 8, 12, 0, 0, $82, 0 + dbsprite 9, 12, 0, 0, $83, 0 + dbsprite 10, 12, 0, 0, $93, 0 + dbsprite 11, 12, 0, 0, $84, 0 + dbsprite 12, 12, 0, 0, $85, 0 + dbsprite 13, 12, 0, 0, $83, 0 + dbsprite 14, 12, 0, 0, $81, 0 + dbsprite 15, 12, 0, 0, $86, 0 +GameFreakLogoOAMDataEnd: + +GameFreakShootingStarOAMData: + dbsprite 20, 0, 0, 0, $a0, OAM_OBP1 + dbsprite 21, 0, 0, 0, $a0, OAM_OBP1 | OAM_HFLIP + dbsprite 20, 1, 0, 0, $a1, OAM_OBP1 + dbsprite 21, 1, 0, 0, $a1, OAM_OBP1 | OAM_HFLIP +GameFreakShootingStarOAMDataEnd: + +FallingStar: + INCBIN "gfx/splash/falling_star.2bpp" +FallingStarEnd: |
