diff options
Diffstat (limited to 'engine')
| -rwxr-xr-x | engine/gamefreak.asm | 160 | ||||
| -rwxr-xr-x | engine/intro.asm | 143 | ||||
| -rwxr-xr-x | engine/overworld/npc_movement.asm | 2 | 
3 files changed, 166 insertions, 139 deletions
| diff --git a/engine/gamefreak.asm b/engine/gamefreak.asm index 32dda60e..38c66793 100755 --- a/engine/gamefreak.asm +++ b/engine/gamefreak.asm @@ -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) diff --git a/engine/intro.asm b/engine/intro.asm index c306555d..bbe47cdb 100755 --- a/engine/intro.asm +++ b/engine/intro.asm @@ -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) diff --git a/engine/overworld/npc_movement.asm b/engine/overworld/npc_movement.asm index aabc2de8..fcef55e0 100755 --- a/engine/overworld/npc_movement.asm +++ b/engine/overworld/npc_movement.asm @@ -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 | 
