shithub: pokered

Download patch

ref: 9fbd9e9a1f23ff3fe09eee2518dd752a6d2e132c
parent: fb559f1f4e0104bfc59350359a2fb82fbe88ebba
author: YamaArashi <shadow962@live.com>
date: Thu Jul 16 18:08:34 EDT 2015

intro stuff

--- a/engine/gamefreak.asm
+++ b/engine/gamefreak.asm
@@ -28,67 +28,78 @@
 	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 @@
 	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)
--- a/engine/intro.asm
+++ b/engine/intro.asm
@@ -22,16 +22,16 @@
 	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,11 +66,11 @@
 
 ; 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
@@ -77,11 +77,11 @@
 
 ; 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 @@
 	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,8 +142,8 @@
 	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
@@ -150,11 +150,11 @@
 	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 @@
 	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 @@
 	call DisableLCD
 	xor a
 	ld [W_CUROPPONENT], a
-	call Func_418e9
+	call IntroDrawBlackBars
 	call LoadIntroGraphics
 	call EnableLCD
 	ld hl, rLCDC
@@ -314,10 +320,10 @@
 	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
@@ -324,26 +330,27 @@
 	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)
--- a/engine/overworld/npc_movement.asm
+++ b/engine/overworld/npc_movement.asm
@@ -74,7 +74,7 @@
 	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
--- a/wram.asm
+++ b/wram.asm
@@ -634,6 +634,9 @@
 
 	ds 1
 
+wMoveDownSmallStarsOAMCount:: ; cd3d
+; the number of small stars OAM entries to move down
+
 wChargeMoveNum:: ; cd3d
 
 wCoordIndex:: ; cd3d