intro stuff

This commit is contained in:
YamaArashi 2015-07-16 22:08:34 -07:00
parent fb559f1f4e
commit 9fbd9e9a1f
4 changed files with 169 additions and 139 deletions

View file

@ -28,67 +28,78 @@ AnimateShootingStar: ; 70044 (1c:4044)
call LoadShootingStarGraphics
ld a, (SFX_1f_67 - SFX_Headers_1f) / 3
call PlaySound
; Move the big star down and left across the screen.
ld hl, wOAMBuffer
ld bc, $a004
.asm_70052
.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
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
ld bc, $4
ld hl, SmallStarsOAM
ld bc, 4
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
ld hl, PointerTable_700f2
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,100 +107,109 @@ 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]
cp $18
jr z, .asm_700d5
add $6
ld [wWhichTrade], a
.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: ; 700ee (1c:40ee)
db $00,$00,$A2,$90
PointerTable_700f2: ; 700f2 (1c:40f2)
dw OAMData_700fe
dw OAMData_70106
dw OAMData_7010e
dw OAMData_70116
dw OAMData_7011e
dw OAMData_7011e
SmallStarsWaveCoordsPointerTable: ; 700f2 (1c:40f2)
dw SmallStarsWave1Coords
dw SmallStarsWave2Coords
dw SmallStarsWave3Coords
dw SmallStarsWave4Coords
dw SmallStarsEmptyWave
dw SmallStarsEmptyWave
; each entry is only half of an OAM tile
OAMData_700fe: ; 700fe (1c:40fe)
; 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: ; 700fe (1c:40fe)
db $68,$30
db $68,$40
db $68,$58
db $68,$78
OAMData_70106: ; 70106 (1c:4106)
SmallStarsWave2Coords: ; 70106 (1c:4106)
db $68,$38
db $68,$48
db $68,$60
db $68,$70
OAMData_7010e: ; 7010e (1c:410e)
SmallStarsWave3Coords: ; 7010e (1c:410e)
db $68,$34
db $68,$4C
db $68,$54
db $68,$64
OAMData_70116: ; 70116 (1c:4116)
SmallStarsWave4Coords: ; 70116 (1c:4116)
db $68,$3C
db $68,$5C
db $68,$6C
db $68,$74
OAMData_7011e: ; 7011e (1c:411e)
SmallStarsEmptyWave: ; 7011e (1c:411e)
db $FF
Func_7011f: ; 7011f (1c:411f)
ld b, $8
.asm_70121
MoveDownSmallStars: ; 7011f (1c:411f)
ld b, 8
.loop
ld hl, wOAMBuffer + $5c
ld a, [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
jr nz, .innerLoop
; Toggle the palette so that the lower star in the small stars tile blinks in
; and out.
ld a, [rOBP1]
xor $a0
xor %10100000
ld [rOBP1], a
ld c, $3
ld c, 3
call CheckForUserInterruption
ret c
dec b
jr nz, .asm_70121
jr nz, .loop
ret
GameFreakLogoOAMData: ; 70140 (1c:4140)

View file

@ -22,16 +22,16 @@ PlayIntroScene: ; 4169d (10:569d)
ld [rOBP1], a
xor a
ld [hSCX], a
ld b, $3
call Func_4183f
ld b, $3 ; Gengar tiles
call IntroCopyTiles
ld a, 0
ld [W_BASECOORDX], a
ld a, 80
ld [W_BASECOORDY], a
ld bc, $606
call Func_417c7
ld de, $28ff
call Func_4180e
call InitIntroNidorinoOAM
ld de, $28ff ; move Nidorino right by 80 pixels
call IntroMoveMon
ret c
; hip
@ -66,22 +66,22 @@ PlayIntroScene: ; 4169d (10:569d)
; raise
ld b, $4
call Func_4183f
call IntroCopyTiles
ld a, (SFX_1f_61 - SFX_Headers_1f) / 3
call PlaySound
ld de, $401
call Func_4180e
ld de, $401 ; move Gengar left by 8 pixels
call IntroMoveMon
ld c, $1e
call CheckForUserInterruption
ret c
; slash
ld b, $5
call Func_4183f
call IntroCopyTiles
ld a, (SFX_1f_62 - SFX_Headers_1f) / 3
call PlaySound
ld de, $800
call Func_4180e
ld de, $800 ; move Gengar right by 16 pixels
call IntroMoveMon
; hip
ld a, (SFX_1f_5f - SFX_Headers_1f) / 3
call PlaySound
@ -93,10 +93,10 @@ PlayIntroScene: ; 4169d (10:569d)
call CheckForUserInterruption
ret c
ld de, $401
call Func_4180e
ld de, $401 ; move Gengar left by 8 pixels
call IntroMoveMon
ld b, $3
call Func_4183f
call IntroCopyTiles
ld c, $3c
call CheckForUserInterruption
ret c
@ -142,19 +142,19 @@ AnimateIntroNidorino: ; 41793 (10:5793)
ld a, [de]
ld [W_BASECOORDX], a
push de
ld c, $24
call Func_417ae
ld c, 6 * 6
call UpdateIntroNidorinoOAM
ld c, 5
call DelayFrames
pop de
inc de
jr AnimateIntroNidorino
Func_417ae: ; 417ae (10:57ae)
UpdateIntroNidorinoOAM: ; 417ae (10:57ae)
ld hl, wOAMBuffer
ld a, [wd09f]
ld d, a
.asm_417b5
.loop
ld a, [W_BASECOORDY]
add [hl]
ld [hli], a
@ -166,105 +166,111 @@ Func_417ae: ; 417ae (10:57ae)
inc hl
inc d
dec c
jr nz, .asm_417b5
jr nz, .loop
ret
Func_417c7: ; 417c7 (10:57c7)
InitIntroNidorinoOAM: ; 417c7 (10:57c7)
ld hl, wOAMBuffer
ld d, $0
.asm_417cc
ld d, 0
.loop
push bc
ld a, [W_BASECOORDY]
ld e, a
.asm_417d1
.innerLoop
ld a, e
add $8
add 8
ld e, a
ld [hli], a
ld [hli], a ; Y
ld a, [W_BASECOORDX]
ld [hli], a
ld [hli], a ; X
ld a, d
ld [hli], a
ld [hli], a ; tile
ld a, $80
ld [hli], a
ld [hli], a ; attributes
inc d
dec c
jr nz, .asm_417d1
jr nz, .innerLoop
ld a, [W_BASECOORDX]
add $8
add 8
ld [W_BASECOORDX], a
pop bc
dec b
jr nz, .asm_417cc
jr nz, .loop
ret
Func_417f0: ; 417f0 (10:57f0)
IntroClearScreen: ; 417f0 (10:57f0)
ld hl, vBGMap1
ld bc, $240
jr asm_417fe
jr IntroClearCommon
Func_417f8: ; 417f8 (10:57f8)
IntroClearMiddleOfScreen: ; 417f8 (10:57f8)
; clear the area of the tile map between the black bars on the top and bottom
hlCoord 0, 4
ld bc, $c8
asm_417fe: ; 417fe (10:57fe)
ld bc, SCREEN_WIDTH * 10
IntroClearCommon: ; 417fe (10:57fe)
ld [hl], $0
inc hl
dec bc
ld a, b
or c
jr nz, asm_417fe
jr nz, IntroClearCommon
ret
Func_41807: ; 41807 (10:5807)
IntroPlaceBlackTiles: ; 41807 (10:5807)
ld a, $1
.asm_41809
.loop
ld [hli], a
dec c
jr nz, .asm_41809
jr nz, .loop
ret
Func_4180e: ; 4180e (10:580e)
IntroMoveMon: ; 4180e (10:580e)
; d = number of times to move the mon (2 pixels each time)
; e: $00 = move Gengar right, $01 = move Gengar left, $ff = move Nidorino right
ld a, e
cp $ff
jr z, .asm_4181d
jr z, .moveNidorinoRight
cp $1
jr z, .asm_4182d
jr z, .moveGengarLeft
; move Gengar right
ld a, [hSCX]
dec a
dec a
jr .asm_41831
.asm_4181d
jr .next
.moveNidorinoRight
push de
ld a, $2
ld a, 2
ld [W_BASECOORDX], a
xor a
ld [W_BASECOORDY], a
ld c, $24
call Func_417ae
ld c, 6 * 6
call UpdateIntroNidorinoOAM
pop de
.asm_4182d
.moveGengarLeft
ld a, [hSCX]
inc a
inc a
.asm_41831
.next
ld [hSCX], a
push de
ld c, $2
ld c, 2
call CheckForUserInterruption
pop de
ret c
dec d
jr nz, Func_4180e
jr nz, IntroMoveMon
ret
Func_4183f: ; 4183f (10:583f)
IntroCopyTiles: ; 4183f (10:583f)
hlCoord 13, 7
CopyTileIDsFromList_ZeroBaseTileID: ; 41842 (10:5842)
ld c, $0
ld c, 0
predef_jump CopyTileIDsFromList
Func_41849: ; 41849 (10:5849)
PlayMoveSoundB: ; 41849 (10:5849)
; unused
predef GetMoveSoundB
ld a, b
jp PlaySound
@ -303,7 +309,7 @@ PlayShootingStar: ; 4188a (10:588a)
call DisableLCD
xor a
ld [W_CUROPPONENT], a
call Func_418e9
call IntroDrawBlackBars
call LoadIntroGraphics
call EnableLCD
ld hl, rLCDC
@ -314,36 +320,37 @@ PlayShootingStar: ; 4188a (10:588a)
callba AnimateShootingStar
push af
pop af
jr c, .asm_418d0
jr c, .next ; skip the delay if the user interrupted the animation
ld c, 40
call DelayFrames
.asm_418d0
.next
ld a, BANK(Music_IntroBattle)
ld [wc0ef], a
ld [wc0f0], a
ld a, MUSIC_INTRO_BATTLE
ld [wc0ee], a
call PlaySound
call Func_417f8
call IntroClearMiddleOfScreen
call ClearSprites
jp Delay3
Func_418e9: ; 418e9 (10:58e9)
call Func_417f0
IntroDrawBlackBars: ; 418e9 (10:58e9)
; clear the screen and draw black bars on the top and bottom
call IntroClearScreen
hlCoord 0, 0
ld c, $50
call Func_41807
ld c, SCREEN_WIDTH * 4
call IntroPlaceBlackTiles
hlCoord 0, 14
ld c, $50
call Func_41807
ld c, SCREEN_WIDTH * 4
call IntroPlaceBlackTiles
ld hl, vBGMap1
ld c, $80
call Func_41807
call IntroPlaceBlackTiles
ld hl, vBGMap1 + $1c0
ld c, $80
jp Func_41807
jp IntroPlaceBlackTiles
Func_4190c: ; 4190c (10:590c)
EmptyFunc4: ; 4190c (10:590c)
ret
IntroNidorinoAnimation0: ; 4190d (10:590d)

View file

@ -74,7 +74,7 @@ PalletMovementScript_OakMoveLeft: ; 1a44c (6:644c)
jr .done
; The player is on the left tile of the northern path out of Pallet Town and
; Prof. Oak is below.
; Prof. Oak is already on the right tile.
; Prof. Oak is already where he needs to be.
.playerOnLeftTile
ld a, $3
ld [wNPCMovementScriptFunctionNum], a

View file

@ -634,6 +634,9 @@ wOverrideSimulatedJoypadStatesMask:: ; cd3b
ds 1
wMoveDownSmallStarsOAMCount:: ; cd3d
; the number of small stars OAM entries to move down
wChargeMoveNum:: ; cd3d
wCoordIndex:: ; cd3d