summaryrefslogtreecommitdiff
path: root/engine/gamefreak.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/gamefreak.asm')
-rwxr-xr-xengine/gamefreak.asm207
1 files changed, 115 insertions, 92 deletions
diff --git a/engine/gamefreak.asm b/engine/gamefreak.asm
index d0f1bbac..5226072b 100755
--- a/engine/gamefreak.asm
+++ b/engine/gamefreak.asm
@@ -1,94 +1,105 @@
-LoadShootingStarGraphics: ; 70000 (1c:4000)
+LoadShootingStarGraphics:
ld a, $f9
- ld [rOBP0], a ; $ff48
+ ld [rOBP0], a
ld a, $a4
- ld [rOBP1], a ; $ff49
- ld de, AnimationTileset2 + $30 ; $471e ; star tile (top left quadrant)
+ ld [rOBP1], a
+ ld de, AnimationTileset2 + $30 ; star tile (top left quadrant)
ld hl, vChars1 + $200
- ld bc, (BANK(AnimationTileset2) << 8) + $01
+ lb bc, BANK(AnimationTileset2), $01
call CopyVideoData
- ld de, AnimationTileset2 + $130 ; $481e ; star tile (bottom left quadrant)
+ ld de, AnimationTileset2 + $130 ; star tile (bottom left quadrant)
ld hl, vChars1 + $210
- ld bc, (BANK(AnimationTileset2) << 8) + $01
+ lb bc, BANK(AnimationTileset2), $01
call CopyVideoData
- ld de, FallingStar ; $4190
+ ld de, FallingStar
ld hl, vChars1 + $220
- ld bc, (BANK(FallingStar) << 8) + $01
+ lb bc, BANK(FallingStar), (FallingStarEnd - FallingStar) / $10
call CopyVideoData
- ld hl, GameFreakLogoOAMData ; $4140
+ ld hl, GameFreakLogoOAMData
ld de, wOAMBuffer + $60
- ld bc, $40
+ ld bc, GameFreakLogoOAMDataEnd - GameFreakLogoOAMData
call CopyData
- ld hl, GameFreakShootingStarOAMData ; $4180
+ ld hl, GameFreakShootingStarOAMData
ld de, wOAMBuffer
- ld bc, $10
+ ld bc, GameFreakShootingStarOAMDataEnd - GameFreakShootingStarOAMData
jp CopyData
-AnimateShootingStar: ; 70044 (1c:4044)
+AnimateShootingStar:
call LoadShootingStarGraphics
- ld a, (SFX_1f_67 - SFX_Headers_1f) / 3
+ ld a, SFX_SHOOTING_STAR
call PlaySound
+
+; Move the big star down and left across the screen.
ld hl, wOAMBuffer
- ld bc, $a004
-.asm_70052
+ lb bc, $a0, $4
+.bigStarLoop
push hl
push bc
-.asm_70054
- ld a, [hl]
- add $4
+.bigStarInnerLoop
+ ld a, [hl] ; Y
+ add 4
ld [hli], a
- ld a, [hl]
- add $fc
+ ld a, [hl] ; X
+ add -4
ld [hli], a
inc hl
inc hl
dec c
- jr nz, .asm_70054
- ld c, $1
+ jr nz, .bigStarInnerLoop
+ ld c, 1
call CheckForUserInterruption
pop bc
pop hl
ret c
ld a, [hl]
- cp $50
- jr nz, .asm_70070
- jr .asm_70052
-.asm_70070
+ cp 80
+ jr nz, .next
+ jr .bigStarLoop
+.next
cp b
- jr nz, .asm_70052
+ jr nz, .bigStarLoop
+
+; Clear big star OAM.
ld hl, wOAMBuffer
- ld c, $4
- ld de, $4
-.asm_7007b
- ld [hl], $a0
+ ld c, 4
+ ld de, 4
+.clearOAMLoop
+ ld [hl], 160
add hl, de
dec c
- jr nz, .asm_7007b
- ld b, $3
-.asm_70083
- ld hl, rOBP0 ; $ff48
+ jr nz, .clearOAMLoop
+
+; Make Gamefreak logo flash.
+ ld b, 3
+.flashLogoLoop
+ ld hl, rOBP0
rrc [hl]
rrc [hl]
- ld c, $a
+ ld c, 10
call CheckForUserInterruption
ret c
dec b
- jr nz, .asm_70083
+ 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, $18
-.asm_70098
+ ld a, 24
+.initSmallStarsOAMLoop
push af
- ld hl, OAMData_700ee ; $40ee
- ld bc, $4
+ ld hl, SmallStarsOAM
+ ld bc, SmallStarsOAMEnd - SmallStarsOAM
call CopyData
pop af
dec a
- jr nz, .asm_70098
+ jr nz, .initSmallStarsOAMLoop
+
+; Animate the small stars falling from the Gamefreak logo.
xor a
- ld [wWhichTrade], a ; wWhichTrade
- ld hl, PointerTable_700f2 ; $40f2
- ld c, $6
-.asm_700af
+ ld [wMoveDownSmallStarsOAMCount], a
+ ld hl, SmallStarsWaveCoordsPointerTable
+ ld c, 6
+.smallStarsLoop
ld a, [hli]
ld e, a
ld a, [hli]
@@ -96,103 +107,112 @@ AnimateShootingStar: ; 70044 (1c:4044)
push bc
push hl
ld hl, wOAMBuffer + $50
- ld c, $4
-.asm_700ba
+ ld c, 4
+.smallStarsInnerLoop ; introduce new wave of 4 small stars OAM entries
ld a, [de]
cp $ff
- jr z, .asm_700d5
- ld [hli], a
+ jr z, .next2
+ ld [hli], a ; Y
inc de
ld a, [de]
- ld [hli], a
+ ld [hli], a ; X
inc de
inc hl
inc hl
dec c
- jr nz, .asm_700ba
- ld a, [wWhichTrade] ; wWhichTrade
- cp $18
- jr z, .asm_700d5
- add $6
- ld [wWhichTrade], a ; wWhichTrade
-.asm_700d5
- call Func_7011f
+ 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, .asm_700af
+ jr nz, .smallStarsLoop
and a
ret
-OAMData_700ee: ; 700ee (1c:40ee)
+SmallStarsOAM:
db $00,$00,$A2,$90
+SmallStarsOAMEnd:
+
+SmallStarsWaveCoordsPointerTable:
+ dw SmallStarsWave1Coords
+ dw SmallStarsWave2Coords
+ dw SmallStarsWave3Coords
+ dw SmallStarsWave4Coords
+ dw SmallStarsEmptyWave
+ dw SmallStarsEmptyWave
-PointerTable_700f2: ; 700f2 (1c:40f2)
- dw OAMData_700fe
- dw OAMData_70106
- dw OAMData_7010e
- dw OAMData_70116
- dw OAMData_7011e
- dw OAMData_7011e
+; 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.
-; each entry is only half of an OAM tile
-OAMData_700fe: ; 700fe (1c:40fe)
+SmallStarsWave1Coords:
db $68,$30
db $68,$40
db $68,$58
db $68,$78
-OAMData_70106: ; 70106 (1c:4106)
+SmallStarsWave2Coords:
db $68,$38
db $68,$48
db $68,$60
db $68,$70
-OAMData_7010e: ; 7010e (1c:410e)
+SmallStarsWave3Coords:
db $68,$34
db $68,$4C
db $68,$54
db $68,$64
-OAMData_70116: ; 70116 (1c:4116)
+SmallStarsWave4Coords:
db $68,$3C
db $68,$5C
db $68,$6C
db $68,$74
-OAMData_7011e: ; 7011e (1c:411e)
+SmallStarsEmptyWave:
db $FF
-Func_7011f: ; 7011f (1c:411f)
- ld b, $8
-.asm_70121
+MoveDownSmallStars:
+ ld b, 8
+.loop
ld hl, wOAMBuffer + $5c
- ld a, [wWhichTrade] ; wWhichTrade
- ld de, $fffc
+ ld a, [wMoveDownSmallStarsOAMCount]
+ ld de, -4
ld c, a
-.asm_7012b
- inc [hl]
+.innerLoop
+ inc [hl] ; Y
add hl, de
dec c
- jr nz, .asm_7012b
- ld a, [rOBP1] ; $ff49
- xor $a0
- ld [rOBP1], a ; $ff49
- ld c, $3
+ jr nz, .innerLoop
+; Toggle the palette so that the lower star in the small stars tile blinks in
+; and out.
+ ld a, [rOBP1]
+ xor %10100000
+ ld [rOBP1], a
+
+ ld c, 3
call CheckForUserInterruption
ret c
dec b
- jr nz, .asm_70121
+ jr nz, .loop
ret
-GameFreakLogoOAMData: ; 70140 (1c:4140)
+GameFreakLogoOAMData:
db $48,$50,$8D,$00
db $48,$58,$8E,$00
db $50,$50,$8F,$00
@@ -209,12 +229,15 @@ GameFreakLogoOAMData: ; 70140 (1c:4140)
db $60,$68,$83,$00
db $60,$70,$81,$00
db $60,$78,$86,$00
+GameFreakLogoOAMDataEnd:
-GameFreakShootingStarOAMData: ; 70180 (1c:4180)
+GameFreakShootingStarOAMData:
db $00,$A0,$A0,$10
db $00,$A8,$A0,$30
db $08,$A0,$A1,$10
db $08,$A8,$A1,$30
+GameFreakShootingStarOAMDataEnd:
-FallingStar: ; 70190 (1c:4190)
+FallingStar:
INCBIN "gfx/falling_star.2bpp"
+FallingStarEnd: