mirror of
https://github.com/pret/pokegold.git
synced 2026-09-27 05:35:02 -04:00
451f529b0d
To do: engine/{menus, overworld}
1605 lines
25 KiB
NASM
1605 lines
25 KiB
NASM
Copyright_GameFreakPresents:
|
|
; Play the copyright screen and GameFreak Presents sequence.
|
|
; Return carry if user cancels animation by pressing a button.
|
|
|
|
call ClearBGPalettes
|
|
call ClearTilemap
|
|
ld a, HIGH(vBGMap0)
|
|
ldh [hBGMapAddress + 1], a
|
|
xor a ; LOW(vBGMap0)
|
|
ldh [hBGMapAddress], a
|
|
ldh [hJoyDown], a
|
|
ldh [hSCX], a
|
|
ldh [hSCY], a
|
|
ld a, SCREEN_HEIGHT_PX
|
|
ldh [hWY], a
|
|
call WaitBGMap
|
|
ld b, SCGB_GAMEFREAK_LOGO
|
|
call GetSGBLayout
|
|
call SetPalettes
|
|
ld c, 10
|
|
call DelayFrames
|
|
callfar Copyright
|
|
call WaitBGMap
|
|
ld c, 100
|
|
call DelayFrames
|
|
call ClearTilemap
|
|
call .GetGFLogoGFX
|
|
|
|
.loop
|
|
call .PlayFrame
|
|
jr nc, .loop
|
|
|
|
; high bits of wJumptableIndex are recycled for some flags
|
|
; this was set if user canceled by pressing a button
|
|
ld a, [wJumptableIndex]
|
|
bit 6, a
|
|
jr nz, .canceled
|
|
|
|
; clear carry flag from GameFreakPresents_PlayFrame
|
|
and a
|
|
ret
|
|
|
|
.canceled
|
|
scf
|
|
ret
|
|
|
|
.GetGFLogoGFX:
|
|
; Load gfx and initialize variables
|
|
|
|
ld de, GameFreakPresentsGFX1
|
|
ld hl, vTiles1
|
|
lb bc, BANK(GameFreakPresentsGFX1), 28
|
|
call Get1bpp
|
|
|
|
ld de, GameFreakPresentsGFX2
|
|
ld hl, vTiles1 tile 28
|
|
lb bc, BANK(GameFreakPresentsGFX2), 5
|
|
call Request2bpp
|
|
|
|
farcall ClearSpriteAnims
|
|
|
|
ld hl, wSpriteAnimDict
|
|
ld a, 6
|
|
ld [hli], a
|
|
ld a, $8d
|
|
ld [hl], a
|
|
xor a
|
|
ld [wJumptableIndex], a
|
|
ld [wIntroSceneFrameCounter], a
|
|
ld [wIntroSceneTimer], a
|
|
ldh [hSCX], a
|
|
ldh [hSCY], a
|
|
ld a, 1
|
|
ldh [hBGMapMode], a
|
|
ld a, SCREEN_HEIGHT_PX
|
|
ldh [hWY], a
|
|
lb de, %00100100, %11111000
|
|
call DmgToCgbObjPals
|
|
ret
|
|
|
|
.PlayFrame:
|
|
; Play one frame of GameFreakPresents sequence.
|
|
; Return carry when the sequence completes or is canceled.
|
|
|
|
call JoyTextDelay
|
|
ldh a, [hJoyLast]
|
|
and BUTTONS
|
|
jr nz, .pressed_button
|
|
|
|
; high bits of wJumptableIndex are recycled for some flags
|
|
; this is set when the sequence finished
|
|
ld a, [wJumptableIndex]
|
|
bit 7, a
|
|
jr nz, .finish
|
|
|
|
farcall PlaySpriteAnimations
|
|
|
|
call PlaceGameFreakPresents
|
|
call DelayFrame
|
|
|
|
; ensure carry is cleared
|
|
and a
|
|
ret
|
|
|
|
.pressed_button
|
|
; high bits of wJumptableIndex are recycled for some flags
|
|
ld hl, wJumptableIndex
|
|
set 6, [hl]
|
|
|
|
.finish
|
|
callfar ClearSpriteAnims
|
|
call ClearTilemap
|
|
call ClearSprites
|
|
|
|
ld c, 16
|
|
call DelayFrames
|
|
|
|
scf
|
|
ret
|
|
|
|
PlaceGameFreakPresents:
|
|
jumptable .scenes, wJumptableIndex
|
|
|
|
.scenes
|
|
dw GameFreakPresents_Star
|
|
dw GameFreakPresents_PlaceLogo
|
|
dw GameFreakPresents_LogoSparkles
|
|
dw GameFreakPresents_PlacePresents
|
|
dw GameFreakPresents_WaitForTimer
|
|
dw GameFreakPresents_SetDoneFlag
|
|
|
|
GameFreakPresents_NextScene:
|
|
ld hl, wJumptableIndex
|
|
inc [hl]
|
|
ret
|
|
|
|
Unreferenced_Functione4a8d:
|
|
ld c, 64
|
|
call DelayFrames
|
|
call GameFreakPresents_NextScene
|
|
ret
|
|
|
|
GameFreakPresents_Star:
|
|
; tell GameFreakPresents_PlaceLogo we haven't finished yet
|
|
xor a
|
|
ld [wIntroSceneFrameCounter], a
|
|
|
|
depixel 10, 11, 4, 0
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_STAR
|
|
call InitSpriteAnimStruct
|
|
|
|
ld hl, SPRITEANIMSTRUCT_0C
|
|
add hl, bc
|
|
ld [hl], $80
|
|
|
|
ld de, SFX_GAME_FREAK_LOGO_GS
|
|
call PlaySFX
|
|
|
|
call GameFreakPresents_NextScene
|
|
ret
|
|
|
|
GameFreakPresents_PlaceLogo:
|
|
; Draw the Game Freak logo (may be initially invisible due to palette)
|
|
|
|
; wait until the star animation completed
|
|
; this counter is set in DoAnimFrame.GSIntroStar in engine/gfx/sprite_anims.asm
|
|
ld a, [wIntroSceneFrameCounter]
|
|
and a
|
|
ret z
|
|
|
|
depixel 10, 11, 4, 0
|
|
ld a, SPRITE_ANIM_INDEX_GAMEFREAK_LOGO
|
|
call InitSpriteAnimStruct
|
|
|
|
call GameFreakPresents_NextScene
|
|
|
|
; set timer for GameFreakPresents_LogoSparkles
|
|
ld a, $80
|
|
ld [wIntroSceneTimer], a
|
|
ret
|
|
|
|
GameFreakPresents_LogoSparkles:
|
|
ld hl, wIntroSceneTimer
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .done
|
|
dec [hl]
|
|
|
|
; add first text when timer passes half
|
|
cp $3f
|
|
call z, GameFreakPresents_PlaceGameFreak
|
|
|
|
; add sparkles continuously
|
|
call GameFreakPresents_Sparkle
|
|
ret
|
|
|
|
.done
|
|
; set timer for GameFreakPresents_PlacePresents
|
|
ld [hl], $80
|
|
call GameFreakPresents_NextScene
|
|
ret
|
|
|
|
GameFreakPresents_PlaceGameFreak:
|
|
hlcoord 5, 12
|
|
ld de, .game_freak
|
|
call PlaceString
|
|
ret
|
|
|
|
.game_freak
|
|
db $80, $81, $82, $83, $8d, $84, $85, $83, $81, $86
|
|
db "@"
|
|
|
|
GameFreakPresents_PlacePresents:
|
|
hlcoord 7, 13
|
|
ld de, .presents
|
|
call PlaceString
|
|
|
|
call GameFreakPresents_NextScene
|
|
|
|
; set timer for GameFreakPresents_WaitForTimer
|
|
ld a, $80
|
|
ld [wIntroSceneTimer], a
|
|
ret
|
|
|
|
.presents
|
|
db $87, $88, $89, $8a, $8b, $8c
|
|
db "@"
|
|
|
|
GameFreakPresents_SetDoneFlag:
|
|
; Tell GameFreakPresents_PlayFrame and TitleScreenFrame that we're finished.
|
|
|
|
ld hl, wJumptableIndex
|
|
set 7, [hl]
|
|
ret
|
|
|
|
GameFreakPresents_WaitForTimer:
|
|
ld hl, wIntroSceneTimer
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .done
|
|
dec [hl]
|
|
ret
|
|
.done
|
|
call GameFreakPresents_NextScene
|
|
ret
|
|
|
|
GameFreakPresents_UpdateLogoPal:
|
|
; called from DoAnimFrame.GameFreakLogo
|
|
; OBP1 was initialized at end of GameFreakPresents_Init
|
|
|
|
; once we reached the final state, leave it alone
|
|
ldh a, [rOBP1]
|
|
cp %10010000
|
|
ret z
|
|
|
|
; wait 16 frames before next change
|
|
ld a, [wIntroSceneTimer]
|
|
and $f
|
|
ret nz
|
|
|
|
; rotate OBP1 by one color slot (2 bits)
|
|
; DMG: logo is white, then light gray, then dark gray
|
|
; CGB: logo is white, then yellow
|
|
ldh a, [rOBP1]
|
|
rrca
|
|
rrca
|
|
call DmgToCgbObjPal1
|
|
ret
|
|
|
|
GameFreakPresents_Sparkle:
|
|
; Initialize and configure a sparkle sprite.
|
|
|
|
; run only every second frame
|
|
ld d, a
|
|
and 1
|
|
ret nz
|
|
|
|
; shift over so our index is still changing by 1 each time
|
|
ld a, d
|
|
srl a
|
|
|
|
; set up a new sparkle sprite
|
|
push af
|
|
depixel 11, 11
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_SPARKLE
|
|
call InitSpriteAnimStruct
|
|
pop af
|
|
|
|
; take the bottom 4 bits of a as an index into
|
|
; sparkle_vectors (16 entries)
|
|
and %00001111
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, .sparkle_vectors
|
|
add hl, de
|
|
add hl, de
|
|
|
|
; set the angle and distance for this sprite
|
|
ld e, l
|
|
ld d, h
|
|
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
|
|
add hl, bc
|
|
ld a, [de]
|
|
ld [hl], a ; angle
|
|
inc de
|
|
ld hl, SPRITEANIMSTRUCT_0C
|
|
add hl, bc
|
|
ld [hl], 0
|
|
inc hl ; SPRITEANIMSTRUCT_0D
|
|
ld a, [de]
|
|
ld [hl], a ; distance
|
|
ret
|
|
|
|
.sparkle_vectors
|
|
; values control final position of each sparkle
|
|
; position is automatically animated along the vector
|
|
; each entry emits two sparkles in opposite directions
|
|
; angle (6 bits) and distance (tiles?)
|
|
db $00, $03
|
|
db $08, $04
|
|
db $04, $03
|
|
db $0c, $02
|
|
db $10, $02
|
|
db $18, $03
|
|
db $14, $04
|
|
db $1c, $03
|
|
db $20, $02
|
|
db $28, $02
|
|
db $24, $03
|
|
db $2c, $04
|
|
db $30, $04
|
|
db $38, $03
|
|
db $34, $02
|
|
db $3c, $04
|
|
|
|
GameFreakPresentsGFX1:
|
|
INCBIN "gfx/intro/gamefreak_presents.1bpp"
|
|
INCBIN "gfx/intro/gamefreak_logo.1bpp"
|
|
|
|
GameFreakPresentsGFX2:
|
|
INCBIN "gfx/intro/logo_star.2bpp"
|
|
INCBIN "gfx/intro/logo_sparkle.2bpp"
|
|
|
|
|
|
GoldSilverIntro:
|
|
call .Init
|
|
.Loop:
|
|
call .PlayFrame
|
|
jr nc, .Loop
|
|
ret
|
|
|
|
.Init:
|
|
farcall ClearSpriteAnims
|
|
xor a
|
|
ld [wIntroJumptableIndex], a
|
|
ldh [hBGMapMode], a
|
|
ret
|
|
|
|
.PlayFrame:
|
|
call JoyTextDelay
|
|
ldh a, [hJoyLast]
|
|
and BUTTONS
|
|
jr nz, .Finish
|
|
|
|
; check done flag
|
|
ld a, [wIntroJumptableIndex]
|
|
bit 7, a
|
|
jr nz, .Finish
|
|
|
|
farcall PlaySpriteAnimations
|
|
call IntroSceneJumper
|
|
call DelayFrame
|
|
and a
|
|
ret
|
|
|
|
.Finish:
|
|
callfar ClearSpriteAnims
|
|
call ClearSprites
|
|
call DelayFrame
|
|
xor a
|
|
ldh [hSCX], a
|
|
ldh [hSCY], a
|
|
ldh [hLCDCPointer], a
|
|
ldh [hLYOverrideStart], a
|
|
ldh [hLYOverrideEnd], a
|
|
ld a, %11100100
|
|
call DmgToCgbBGPals
|
|
depixel 28, 28, 4, 4
|
|
call DmgToCgbObjPals
|
|
scf
|
|
ret
|
|
|
|
IntroSceneJumper:
|
|
jumptable .scenes, wIntroJumptableIndex
|
|
|
|
.scenes
|
|
dw IntroScene1
|
|
dw IntroScene2
|
|
dw IntroScene3
|
|
dw IntroScene4
|
|
dw IntroScene5
|
|
dw IntroScene6
|
|
dw IntroScene7
|
|
dw IntroScene8
|
|
dw IntroScene9
|
|
dw IntroScene10
|
|
dw IntroScene11
|
|
dw IntroScene12
|
|
dw IntroScene13
|
|
dw IntroScene14
|
|
dw IntroScene15
|
|
dw IntroScene16
|
|
dw IntroScene17
|
|
|
|
IntroScene1:
|
|
; Set up water cutscene (Shellders/Magikarp/Lapras)
|
|
call ClearBGPalettes
|
|
call ClearTilemap
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl] ; only run once
|
|
call DisableLCD
|
|
|
|
xor a
|
|
ldh [hBGMapMode], a
|
|
callfar ClearSpriteAnims
|
|
ld a, 1
|
|
ldh [rVBK], a
|
|
hlbgcoord 0, 0, vBGMap2
|
|
lb bc, 4, 0
|
|
|
|
xor a
|
|
call ByteFill
|
|
ld a, 0
|
|
ldh [rVBK], a
|
|
call Intro_ResetLYOverrides
|
|
ld de, vTiles2 tile $00
|
|
ld hl, Intro_WaterGFX1
|
|
call Decompress
|
|
ld a, LOW(Intro_WaterMeta)
|
|
ld [wIntroTilesPointer + 0], a
|
|
ld a, HIGH(Intro_WaterMeta)
|
|
ld [wIntroTilesPointer + 1], a
|
|
hlbgcoord 0, 0, vBGMap2
|
|
ld a, l
|
|
ld [wIntroBGMapPointer + 0], a
|
|
ld a, h
|
|
ld [wIntroBGMapPointer + 1], a
|
|
ld de, Intro_WaterTilemap + 15 tiles
|
|
ld a, e
|
|
ld [wIntroTilemapPointer + 0], a
|
|
ld a, d
|
|
ld [wIntroTilemapPointer + 1], a
|
|
call Intro_DrawBackground
|
|
|
|
ld de, vTiles0 tile $00
|
|
ld hl, Intro_WaterGFX2
|
|
call Decompress
|
|
ld hl, wSpriteAnimDict
|
|
ld a, 0
|
|
ld [hli], a
|
|
ld a, 0
|
|
ld [hli], a
|
|
xor a
|
|
ldh [hSCY], a
|
|
ld [wGlobalAnimYOffset], a
|
|
ld [wGlobalAnimXOffset], a
|
|
ld a, $58
|
|
ldh [hSCX], a
|
|
xor a
|
|
ld [wIntroFrameCounter2], a
|
|
ld a, $80
|
|
ld [wIntroFrameCounter1], a
|
|
ld a, $42
|
|
ldh [hLCDCPointer], a
|
|
call Functione5095
|
|
|
|
xor a
|
|
ld [wcb19], a
|
|
call EnableLCD
|
|
call DelayFrame
|
|
ld b, SCGB_GS_INTRO
|
|
ld c, 0
|
|
call GetSGBLayout
|
|
ld a, %11100100
|
|
call DmgToCgbBGPals
|
|
depixel 28, 28
|
|
call DmgToCgbObjPals
|
|
call Intro_InitShellders
|
|
ld de, MUSIC_GS_OPENING
|
|
call PlayMusic
|
|
ret
|
|
|
|
IntroScene2:
|
|
; shellders underwater
|
|
call Functione50af
|
|
ld hl, wIntroFrameCounter1
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .skip_intro
|
|
dec [hl]
|
|
call Intro_InitBubble
|
|
ret
|
|
|
|
.skip_intro
|
|
ld [hl], $10
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
|
|
IntroScene3:
|
|
; rise towards the surface
|
|
call Functione4e90
|
|
call Functione4e67
|
|
ret nc
|
|
; next scene if carry flag is set
|
|
call Intro_ResetLYOverrides
|
|
ld hl, hSCY
|
|
inc [hl]
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
|
|
IntroScene4:
|
|
; at surface; Lapras surfs to left of screen
|
|
ld a, [wcb19]
|
|
and a
|
|
jr nz, .next
|
|
ld hl, wIntroFrameCounter2
|
|
inc [hl]
|
|
ld a, [hl]
|
|
and $f
|
|
jr nz, .asm_e4e21
|
|
ld hl, hSCX
|
|
dec [hl]
|
|
dec [hl]
|
|
|
|
.asm_e4e21
|
|
call Functione4fde
|
|
ret
|
|
|
|
.next
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
xor a
|
|
ld [wIntroFrameCounter1], a
|
|
|
|
IntroScene5:
|
|
; fade out
|
|
ld hl, wIntroFrameCounter1
|
|
ld a, [hl]
|
|
inc [hl]
|
|
swap a
|
|
and $f
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, .palettes
|
|
add hl, de
|
|
ld a, [hl]
|
|
cp -1
|
|
jr z, .next
|
|
call DmgToCgbBGPals
|
|
call Functione4fde
|
|
ld hl, hSCX
|
|
dec [hl]
|
|
dec [hl]
|
|
ret
|
|
|
|
.next
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
ret
|
|
|
|
.palettes
|
|
db %11100100, %11100100, %10010000, %01000000, %00000000
|
|
db -1
|
|
|
|
IntroScene17:
|
|
; delay a bit before leading into the title screen
|
|
ld c, 64
|
|
.loop
|
|
call DelayFrame
|
|
dec c
|
|
jr nz, .loop
|
|
; set done flag
|
|
ld hl, wIntroJumptableIndex
|
|
set 7, [hl]
|
|
ret
|
|
|
|
Functione4e67:
|
|
ld hl, wIntroFrameCounter2
|
|
inc [hl]
|
|
ld a, [hl]
|
|
and 3
|
|
jr nz, .asm_e4e74
|
|
ld hl, hSCX
|
|
dec [hl]
|
|
|
|
.asm_e4e74
|
|
and 1
|
|
jr nz, .asm_e4e8c
|
|
ld hl, wGlobalAnimYOffset
|
|
inc [hl]
|
|
ld hl, hSCY
|
|
ld a, [hl]
|
|
dec [hl]
|
|
and $f
|
|
call z, Intro_UpdateTilemapAndBGMap
|
|
ld a, [wIntroFrameCounter1]
|
|
and a
|
|
jr z, .asm_e4e8e
|
|
|
|
.asm_e4e8c
|
|
and a
|
|
ret
|
|
|
|
.asm_e4e8e
|
|
scf
|
|
ret
|
|
|
|
Functione4e90:
|
|
jumptable .dw, wIntroFrameCounter1
|
|
|
|
.dw
|
|
dw Functione4eca
|
|
dw Functione4eca
|
|
dw Functione4eca
|
|
dw Functione4ec1
|
|
dw Functione4eca
|
|
dw Functione4eca
|
|
dw Functione4ece
|
|
dw Functione4ece
|
|
dw Functione4ece
|
|
dw Functione4ed5
|
|
dw Functione4ee8
|
|
dw Functione4eec
|
|
dw Functione4eec
|
|
dw Functione4eec
|
|
dw Functione4eec
|
|
dw Functione4eec
|
|
dw Functione4eec
|
|
|
|
Functione4ec1:
|
|
call Intro_InitLapras
|
|
depixel 28, 28, 4, 4
|
|
call DmgToCgbObjPals
|
|
; fallthrough
|
|
|
|
Functione4eca:
|
|
call Functione4fde
|
|
ret
|
|
|
|
Functione4ece:
|
|
call Intro_InitMagikarps
|
|
call Functione4fde
|
|
ret
|
|
|
|
Functione4ed5:
|
|
ld hl, wIntroFrameCounter2
|
|
ld a, [hl]
|
|
and %00011111
|
|
jr z, .asm_e4ee1
|
|
call Intro_InitMagikarps
|
|
ret
|
|
|
|
.asm_e4ee1
|
|
callfar Function9102
|
|
ret
|
|
|
|
Functione4ee8:
|
|
xor a
|
|
ldh [hLCDCPointer], a
|
|
ret
|
|
|
|
Functione4eec:
|
|
call Functione50af
|
|
ret
|
|
|
|
Intro_InitBubble:
|
|
ld hl, wIntroFrameCounter1
|
|
ld a, [hl]
|
|
and $f
|
|
ret nz
|
|
ld a, [hl]
|
|
and $70
|
|
swap a
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, .pixel_table
|
|
add hl, de
|
|
add hl, de
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_BUBBLE
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
.pixel_table
|
|
db 6 * 8, 14 * 8 + 4
|
|
db 14 * 8, 18 * 8 + 4
|
|
db 10 * 8, 16 * 8 + 4
|
|
db 12 * 8, 15 * 8
|
|
db 4 * 8, 13 * 8
|
|
db 8 * 8, 17 * 8
|
|
|
|
Intro_InitMagikarps:
|
|
depixel 8, 7, 0, 7
|
|
ldh a, [hSGB]
|
|
and a
|
|
jr z, .ok
|
|
depixel 4, 3, 0, 7
|
|
|
|
.ok
|
|
ld hl, wIntroFrameCounter2
|
|
ld a, [hl]
|
|
and e
|
|
ret nz
|
|
ld a, [hl]
|
|
and d
|
|
jr nz, .asm_e4f41
|
|
depixel 29, 28
|
|
call .InitAnim
|
|
depixel 26, 0
|
|
call .InitAnim
|
|
depixel 0, 24
|
|
call .InitAnim
|
|
ret
|
|
|
|
.asm_e4f41
|
|
depixel 28, 30
|
|
call .InitAnim
|
|
depixel 31, 24
|
|
call .InitAnim
|
|
depixel 2, 28
|
|
call .InitAnim
|
|
ret
|
|
|
|
.InitAnim:
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_MAGIKARP
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
Intro_InitShellders:
|
|
depixel 18, 7
|
|
call .InitAnim
|
|
depixel 14, 10
|
|
call .InitAnim
|
|
depixel 16, 15
|
|
|
|
.InitAnim:
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_SHELLDER
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
Intro_InitLapras:
|
|
ld a, [wIntroFrameCounter2]
|
|
and %00011111
|
|
ret nz
|
|
depixel 16, 24
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_LAPRAS
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
Intro_UnusedInitLapras:
|
|
depixel 2, 0
|
|
ld a, SPRITE_ANIM_INDEX_UNUSED_LAPRAS
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
Intro_UpdateTilemapAndBGMap:
|
|
; add new tiles to top as water scene scrolls up to surface
|
|
push hl
|
|
push de
|
|
|
|
ld a, [wIntroTilemapPointer + 0]
|
|
ld e, a
|
|
ld a, [wIntroTilemapPointer + 1]
|
|
ld d, a
|
|
ld hl, -$10
|
|
add hl, de
|
|
ld a, l
|
|
ld e, l
|
|
ld [wIntroTilemapPointer + 0], a
|
|
ld a, h
|
|
ld d, h
|
|
ld [wIntroTilemapPointer + 1], a
|
|
hlcoord 0, 0
|
|
ld c, BG_MAP_WIDTH / 2
|
|
|
|
.loop
|
|
call Functione54ae
|
|
dec c
|
|
jr nz, .loop
|
|
|
|
ld a, [wIntroBGMapPointer + 0]
|
|
ld e, a
|
|
ld a, [wIntroBGMapPointer + 1]
|
|
ld d, a
|
|
ld hl, hCurSpriteYCoord
|
|
add hl, de
|
|
ld a, l
|
|
ld [wIntroBGMapPointer + 0], a
|
|
ld [wRequested2bppDest + 0], a
|
|
ld a, h
|
|
and %11111011
|
|
or %00001000
|
|
ld [wIntroBGMapPointer + 1], a
|
|
ld [wRequested2bppDest + 1], a
|
|
ld a, LOW(wTilemap)
|
|
ld [wRequested2bppSource + 0], a
|
|
ld a, HIGH(wTilemap)
|
|
ld [wRequested2bppSource + 1], a
|
|
ld a, 4
|
|
ld [wRequested2bppSize], a
|
|
ld hl, wIntroFrameCounter1
|
|
dec [hl]
|
|
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
Functione4fde:
|
|
; something to do with water scene sprite anims?
|
|
ld hl, wIntroFrameCounter2
|
|
ld a, [hl]
|
|
and 3
|
|
cp 3
|
|
ret z
|
|
ld a, [wRequested2bppSize]
|
|
and a
|
|
ret nz
|
|
ld a, [hl]
|
|
and $30
|
|
swap a
|
|
ld l, a
|
|
ld h, 0
|
|
rept 5
|
|
add hl, hl
|
|
endr
|
|
ld de, .data_e5015
|
|
add hl, de
|
|
ld a, l
|
|
ld [wRequested2bppSource + 0], a
|
|
ld a, h
|
|
ld [wRequested2bppSource + 1], a
|
|
ld a, LOW(vBGMap0 tile $1e)
|
|
ld [wRequested2bppDest + 0], a
|
|
ld a, HIGH(vBGMap0 tile $1e)
|
|
ld [wRequested2bppDest + 1], a
|
|
ld a, 2
|
|
ld [wRequested2bppSize], a
|
|
ret
|
|
|
|
.data_e5015
|
|
rept 8
|
|
db $70, $71, $72, $73
|
|
endr
|
|
rept 8
|
|
db $74, $75, $76, $77
|
|
endr
|
|
rept 8
|
|
db $78, $79, $7a, $7b
|
|
endr
|
|
rept 8
|
|
db $7c, $7d, $7e, $7f
|
|
endr
|
|
|
|
Functione5095:
|
|
ld bc, wLYOverrides2
|
|
ld a, wLYOverrides2End - wLYOverrides2
|
|
ld de, vBGMap1 - vBGMap0
|
|
|
|
.loop
|
|
push af
|
|
push de
|
|
farcall BattleAnim_Sine_e
|
|
ld a, e
|
|
ld [bc], a
|
|
inc bc
|
|
pop de
|
|
inc e
|
|
pop af
|
|
dec a
|
|
jr nz, .loop
|
|
ret
|
|
|
|
Functione50af:
|
|
ld bc, wLYOverrides
|
|
ld e, $10
|
|
|
|
.loop1
|
|
ldh a, [hSCY]
|
|
ld [bc], a
|
|
inc bc
|
|
dec e
|
|
jr nz, .loop1
|
|
|
|
ld hl, wLYOverrides2
|
|
ld de, wLYOverrides2 + 1
|
|
ld a, [hl]
|
|
push af
|
|
ld a, $80
|
|
|
|
.loop2
|
|
push af
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
push hl
|
|
ld hl, hSCY
|
|
add [hl]
|
|
ld [bc], a
|
|
inc bc
|
|
pop hl
|
|
pop af
|
|
dec a
|
|
jr nz, .loop2
|
|
|
|
pop af
|
|
ld [hl], a
|
|
ret
|
|
|
|
IntroScene6:
|
|
; Set up grass cutscene (Pikachu/Jigglypuff)
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl] ; only run once
|
|
call DisableLCD
|
|
callfar ClearSpriteAnims
|
|
call Intro_ResetLYOverrides
|
|
|
|
ld de, vTiles2
|
|
ld hl, Intro_GrassGFX1
|
|
call Decompress
|
|
ld a, LOW(Intro_GrassMeta)
|
|
ld [wIntroTilesPointer + 0], a
|
|
ld a, HIGH(Intro_GrassMeta)
|
|
ld [wIntroTilesPointer + 1], a
|
|
hlbgcoord 0, 0
|
|
ld a, l
|
|
ld [wIntroBGMapPointer + 0], a
|
|
ld a, h
|
|
ld [wIntroBGMapPointer + 1], a
|
|
ld de, Intro_GrassTilemap
|
|
ld a, e
|
|
ld [wIntroTilemapPointer + 0], a
|
|
ld a, d
|
|
ld [wIntroTilemapPointer + 1], a
|
|
call Intro_DrawBackground
|
|
|
|
ld de, vTiles0
|
|
ld hl, Intro_GrassGFX2
|
|
call Decompress
|
|
ld hl, wSpriteAnimDict
|
|
ld a, 1
|
|
ld [hli], a
|
|
ld a, 0
|
|
ld [hli], a
|
|
xor a
|
|
ldh [hSCY], a
|
|
ld [wGlobalAnimYOffset], a
|
|
ld a, $60
|
|
ldh [hSCX], a
|
|
ld a, $a0
|
|
ld [wGlobalAnimXOffset], a
|
|
|
|
xor a
|
|
ld [wIntroFrameCounter2], a
|
|
call EnableLCD
|
|
ld b, SCGB_GS_INTRO
|
|
ld c, 1
|
|
call GetSGBLayout
|
|
ld a, %11100100
|
|
call DmgToCgbBGPals
|
|
depixel 28, 28, 4, 4
|
|
call DmgToCgbObjPals
|
|
call Intro_InitJigglypuff
|
|
xor a
|
|
ld [wcb19], a
|
|
ret
|
|
|
|
IntroScene7:
|
|
; scroll left to Jigglypuff
|
|
call Intro_InitNote
|
|
ld hl, wIntroFrameCounter2
|
|
ld a, [hl]
|
|
inc [hl]
|
|
and 3
|
|
ret z
|
|
ld hl, hSCX
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
dec [hl]
|
|
ld hl, wGlobalAnimXOffset
|
|
inc [hl]
|
|
ret
|
|
|
|
.next
|
|
ld a, -1
|
|
ld [wIntroFrameCounter1], a
|
|
call Intro_InitPikachu
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
ret
|
|
|
|
IntroScene8:
|
|
; stop scrolling, Pikachu attacks
|
|
ld hl, wIntroFrameCounter1
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
dec [hl]
|
|
call Intro_InitNote
|
|
ld hl, wIntroFrameCounter2
|
|
inc [hl]
|
|
ret
|
|
|
|
.next
|
|
xor a
|
|
ld [wIntroFrameCounter1], a
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
callfar Function9136
|
|
ret
|
|
|
|
IntroScene9:
|
|
; scroll down and fade out
|
|
ld hl, wIntroFrameCounter1
|
|
ld a, [hl]
|
|
inc [hl]
|
|
srl a
|
|
srl a
|
|
srl a
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, .palettes
|
|
add hl, de
|
|
ld a, [hl]
|
|
cp -1
|
|
jr z, .next
|
|
call DmgToCgbBGPals
|
|
ld hl, hSCY
|
|
inc [hl]
|
|
ld hl, wGlobalAnimYOffset
|
|
dec [hl]
|
|
ret
|
|
|
|
.next
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
ret
|
|
|
|
.palettes
|
|
db %11100100, %11100100, %11100100, %11100100
|
|
db %11100100, %10010000, %01000000, %00000000
|
|
db -1
|
|
|
|
ret ; unused
|
|
|
|
Intro_InitNote:
|
|
ld a, [wcb19]
|
|
and a
|
|
ret nz
|
|
ld hl, wIntroFrameCounter2
|
|
ld a, [hl]
|
|
and %00111111
|
|
ret nz
|
|
ld a, [hl]
|
|
and %01111111
|
|
jr z, .invisible
|
|
depixel 11, 6, 4, 0
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_NOTE
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
.invisible
|
|
depixel 10, 6, 4, 0
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_INVISIBLE_NOTE
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
Intro_InitJigglypuff:
|
|
depixel 14, 6
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_JIGGLYPUFF
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
Intro_InitPikachu:
|
|
depixel 14, 24
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU
|
|
call InitSpriteAnimStruct
|
|
depixel 14, 24
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU_TAIL
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
IntroScene10:
|
|
; Set up fireball cutscene (Charizard, Johto starters)
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl] ; only run once
|
|
call DisableLCD
|
|
callfar ClearSpriteAnims
|
|
call Intro_ResetLYOverrides
|
|
call Intro_BlankTilemapAndBGMap
|
|
|
|
ld de, vTiles2
|
|
ld hl, Intro_FireGFX1
|
|
call Decompress
|
|
ld de, vTiles1
|
|
ld hl, Intro_FireGFX2
|
|
call Decompress
|
|
ld de, vTiles0
|
|
ld hl, Intro_FireGFX3
|
|
ld bc, vTiles1 - vTiles0
|
|
call Decompress
|
|
|
|
ld c, CHIKORITA
|
|
ld de, vTiles0 tile $10
|
|
farcall Intro_GetMonFrontpic
|
|
ld c, CYNDAQUIL
|
|
ld de, vTiles0 tile $29
|
|
farcall Intro_GetMonFrontpic
|
|
ld c, TOTODILE
|
|
ld de, vTiles0 tile $42
|
|
farcall Intro_GetMonFrontpic
|
|
|
|
ld hl, wSpriteAnimDict
|
|
ld a, 1
|
|
ld [hli], a
|
|
ld a, 0
|
|
ld [hli], a
|
|
call EnableLCD
|
|
ld a, 0
|
|
call Functione5422
|
|
|
|
ld a, $80
|
|
ldh [hSCY], a
|
|
xor a
|
|
ldh [hSCX], a
|
|
ld [wGlobalAnimYOffset], a
|
|
ld [wGlobalAnimXOffset], a
|
|
|
|
xor a
|
|
ld [wIntroFrameCounter2], a
|
|
ld b, SCGB_GS_INTRO
|
|
ld c, 2
|
|
call GetSGBLayout
|
|
ld a, %00111111
|
|
call DmgToCgbBGPals
|
|
lb de, %11111111, %11111111
|
|
call DmgToCgbObjPals
|
|
ld de, MUSIC_NONE
|
|
call PlayMusic
|
|
call DelayFrame
|
|
ld de, MUSIC_GS_OPENING_2
|
|
call PlayMusic
|
|
ret
|
|
|
|
IntroScene11:
|
|
; scroll up to Charizard silhoutte, flash Johto starters
|
|
ld hl, wIntroFrameCounter2
|
|
ld a, [hl]
|
|
inc [hl]
|
|
and 1
|
|
ret z
|
|
call Intro_CheckSCYEvent
|
|
ld hl, hSCY
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
inc [hl]
|
|
ret
|
|
|
|
.next
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
xor a
|
|
ld [wIntroFrameCounter1], a
|
|
; fallthrough
|
|
|
|
IntroScene12:
|
|
; load Charizard palettes
|
|
ld hl, wIntroFrameCounter1
|
|
ld a, [hl]
|
|
inc [hl]
|
|
srl a
|
|
srl a
|
|
and 3
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, .palettes
|
|
add hl, de
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
call DmgToCgbBGPals
|
|
ld e, a
|
|
ld d, a
|
|
call DmgToCgbObjPals
|
|
ret
|
|
|
|
.next
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
ld a, $80
|
|
ld [wIntroFrameCounter1], a
|
|
ret
|
|
|
|
.palettes
|
|
db %01101010, %10100101, %11100100, %00000000
|
|
|
|
IntroScene13:
|
|
; Charizard mouth closed
|
|
ld hl, wIntroFrameCounter1
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
dec [hl]
|
|
ret
|
|
|
|
.next
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
ld a, 1
|
|
call Functione5422
|
|
ld a, 4
|
|
ld [wIntroFrameCounter1], a
|
|
ret
|
|
|
|
IntroScene14:
|
|
; Charizard mouth open
|
|
ld hl, wIntroFrameCounter1
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
dec [hl]
|
|
ret
|
|
|
|
.next
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
ld a, 2
|
|
call Functione5422
|
|
ld a, 64
|
|
ld [wIntroFrameCounter1], a
|
|
xor a
|
|
ld [wIntroFrameCounter2], a
|
|
ld de, SFX_GS_INTRO_CHARIZARD_FIREBALL
|
|
call PlaySFX
|
|
; fallthrough
|
|
|
|
IntroScene15:
|
|
; Charizard mouth wide open / fireball starts
|
|
call Functione5473
|
|
ld hl, wIntroFrameCounter1
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
dec [hl]
|
|
ret
|
|
|
|
.next
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
xor a
|
|
ld [wIntroFrameCounter1], a
|
|
ret
|
|
|
|
IntroScene16:
|
|
; continue fireball / fade out palettes
|
|
call Functione5473
|
|
ld hl, wIntroFrameCounter1
|
|
ld a, [hl]
|
|
inc [hl]
|
|
swap a
|
|
and 7
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, .palettes
|
|
add hl, de
|
|
ld a, [hl]
|
|
cp -1
|
|
jr z, .next
|
|
call DmgToCgbBGPals
|
|
ld e, a
|
|
ld d, a
|
|
call DmgToCgbObjPals
|
|
ret
|
|
|
|
.next
|
|
ld hl, wIntroJumptableIndex
|
|
inc [hl]
|
|
ret
|
|
|
|
.palettes
|
|
db %11100100, %10010000, %01000000, %00000000
|
|
db -1
|
|
|
|
Intro_BlankTilemapAndBGMap:
|
|
hlcoord 0, 0
|
|
ld bc, wTilemapEnd - wTilemap
|
|
xor a
|
|
call ByteFill
|
|
hlbgcoord 0, 0
|
|
ld bc, vBGMap1 - vBGMap0
|
|
xor a
|
|
call ByteFill
|
|
ret
|
|
|
|
Intro_CheckSCYEvent:
|
|
ldh a, [hSCY]
|
|
ld c, a
|
|
ld hl, .scy_jumptable
|
|
|
|
.loop
|
|
ld a, [hli]
|
|
cp -1
|
|
ret z
|
|
cp c
|
|
jr z, .value_found
|
|
inc hl
|
|
inc hl
|
|
jr .loop
|
|
|
|
.value_found
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
jp hl
|
|
|
|
.scy_jumptable
|
|
dbw $86, Intro_LoadChikoritaPalette
|
|
dbw $87, Intro_ChikoritaAppears
|
|
dbw $88, Functione53e0
|
|
dbw $98, Functione53eb
|
|
dbw $99, Intro_LoadCyndaquilPalette
|
|
dbw $af, Intro_CyndaquilAppears
|
|
dbw $b0, Functione53e0
|
|
dbw $c0, Functione53eb
|
|
dbw $c1, Intro_LoadTotodilePalette
|
|
dbw $d7, Intro_TotodileAppears
|
|
dbw $d8, Functione53e0
|
|
dbw $e8, Functione53eb
|
|
dbw $e9, Functione5412
|
|
db -1
|
|
|
|
Intro_ChikoritaAppears:
|
|
ld de, SFX_GS_INTRO_POKEMON_APPEARS
|
|
call PlaySFX
|
|
depixel 22, 1
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_CHIKORITA
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
Intro_CyndaquilAppears:
|
|
ld de, SFX_GS_INTRO_POKEMON_APPEARS
|
|
call PlaySFX
|
|
depixel 22, 20
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_CYNDAQUIL
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
Intro_TotodileAppears:
|
|
ld de, SFX_GS_INTRO_POKEMON_APPEARS
|
|
call PlaySFX
|
|
depixel 22, 1
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_TOTODILE
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
Functione53e0:
|
|
depixel 28, 28, 4, 4
|
|
call DmgToCgbObjPals
|
|
xor a
|
|
call DmgToCgbBGPals
|
|
ret
|
|
|
|
Functione53eb:
|
|
depixel 31, 31, 7, 7
|
|
call DmgToCgbObjPals
|
|
ld a, %00111111
|
|
call DmgToCgbBGPals
|
|
ret
|
|
|
|
Intro_LoadChikoritaPalette:
|
|
ld c, CHIKORITA
|
|
farcall Intro_LoadMonPalette
|
|
ret
|
|
|
|
Intro_LoadCyndaquilPalette:
|
|
ld c, CYNDAQUIL
|
|
farcall Intro_LoadMonPalette
|
|
ret
|
|
|
|
Intro_LoadTotodilePalette:
|
|
ld c, TOTODILE
|
|
farcall Intro_LoadMonPalette
|
|
ret
|
|
|
|
Functione5412:
|
|
ldh a, [hCGB]
|
|
and a
|
|
ld c, CYNDAQUIL
|
|
jr nz, .got_mon
|
|
ld c, CHARIZARD
|
|
.got_mon
|
|
farcall Intro_LoadMonPalette
|
|
ret
|
|
|
|
Functione5422:
|
|
push af
|
|
hlcoord 0, 6
|
|
ld c, $a0
|
|
xor a
|
|
.loop1
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .loop1
|
|
|
|
pop af
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, .data_e5464
|
|
rept 5
|
|
add hl, de
|
|
endr
|
|
ld e, [hl]
|
|
inc hl
|
|
ld c, [hl]
|
|
inc hl
|
|
ld b, [hl]
|
|
inc hl
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, e
|
|
|
|
.loop2_outer
|
|
push bc
|
|
push hl
|
|
.loop2_inner
|
|
ld [hli], a
|
|
inc a
|
|
dec c
|
|
jr nz, .loop2_inner
|
|
|
|
pop hl
|
|
ld bc, SCREEN_WIDTH
|
|
add hl, bc
|
|
pop bc
|
|
dec b
|
|
jr nz, .loop2_outer
|
|
|
|
ld a, 1
|
|
ldh [hBGMapMode], a
|
|
call DelayFrame
|
|
call DelayFrame
|
|
call DelayFrame
|
|
xor a
|
|
ldh [hBGMapMode], a
|
|
ret
|
|
|
|
.data_e5464
|
|
; vtile offset, width, height, x, y
|
|
db $00, 8, 8
|
|
dwcoord 10, 6
|
|
db $40, 9, 8
|
|
dwcoord 9, 6
|
|
db $88, 9, 8
|
|
dwcoord 8, 6
|
|
|
|
Functione5473:
|
|
ld hl, wIntroFrameCounter2
|
|
ld a, [hl]
|
|
inc [hl]
|
|
and 3
|
|
ret nz
|
|
depixel 12, 10, 4, 4
|
|
ld a, SPRITE_ANIM_INDEX_GS_INTRO_FIREBALL
|
|
call InitSpriteAnimStruct
|
|
ld hl, hSCX
|
|
dec [hl]
|
|
ld hl, wGlobalAnimXOffset
|
|
inc [hl]
|
|
ret
|
|
|
|
Unreferenced_Functione548c:
|
|
ld bc, vTiles1 - vTiles0
|
|
.loop
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
dec bc
|
|
ld a, c
|
|
or b
|
|
jr nz, .loop
|
|
ret
|
|
|
|
Intro_DrawBackground:
|
|
ld b, BG_MAP_WIDTH / 2
|
|
|
|
.outer_loop
|
|
push hl
|
|
ld c, BG_MAP_HEIGHT / 2
|
|
.inner_loop
|
|
call Functione54ae
|
|
dec c
|
|
jr nz, .inner_loop
|
|
|
|
pop hl
|
|
push bc
|
|
ld bc, 2 * BG_MAP_WIDTH
|
|
add hl, bc
|
|
pop bc
|
|
dec b
|
|
jr nz, .outer_loop
|
|
|
|
ret
|
|
|
|
Functione54ae:
|
|
; load tile data into a 2x2 section of the bgmap or tilemap
|
|
push bc
|
|
push de
|
|
push hl
|
|
push hl
|
|
push hl
|
|
|
|
ld a, [de]
|
|
ld l, a
|
|
ld h, 0
|
|
ld a, [wIntroTilesPointer + 0]
|
|
ld e, a
|
|
ld a, [wIntroTilesPointer + 1]
|
|
ld d, a
|
|
add hl, hl
|
|
add hl, hl
|
|
add hl, de
|
|
ld e, l
|
|
ld d, h
|
|
pop hl
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
pop hl
|
|
ld bc, BG_MAP_WIDTH
|
|
add hl, bc
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
|
|
pop hl
|
|
inc hl
|
|
inc hl
|
|
pop de
|
|
inc de
|
|
pop bc
|
|
ret
|
|
|
|
Intro_ResetLYOverrides:
|
|
ld hl, wLYOverrides
|
|
xor a
|
|
ld c, wLYOverrides2 - wLYOverrides
|
|
.loop
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
Intro_WaterGFX1:
|
|
INCBIN "gfx/intro/water1.2bpp.lz"
|
|
|
|
Intro_WaterTilemap:
|
|
INCBIN "gfx/intro/water.tilemap"
|
|
|
|
Intro_WaterMeta:
|
|
INCBIN "gfx/intro/water.bin"
|
|
|
|
Intro_WaterGFX2:
|
|
INCBIN "gfx/intro/water2.2bpp.lz"
|
|
|
|
Intro_GrassGFX1:
|
|
INCBIN "gfx/intro/grass1.2bpp.lz"
|
|
|
|
Intro_GrassTilemap:
|
|
INCBIN "gfx/intro/grass.tilemap"
|
|
|
|
Intro_GrassMeta:
|
|
INCBIN "gfx/intro/grass.bin"
|
|
|
|
Intro_GrassGFX2:
|
|
INCBIN "gfx/intro/grass2.2bpp.lz"
|
|
|
|
Intro_FireGFX1:
|
|
INCBIN "gfx/intro/fire1.2bpp.lz"
|
|
|
|
Intro_FireGFX2:
|
|
INCBIN "gfx/intro/fire2.2bpp.lz"
|
|
|
|
Intro_FireGFX3:
|
|
INCBIN "gfx/intro/fire3.2bpp.lz"
|