pokecrystal-board/engine/tilesets/tileset_anims.asm
2018-06-24 16:13:22 +02:00

1027 lines
20 KiB
NASM

_AnimateTileset::
; Iterate over a given pointer array of
; animation functions (one per frame).
; Typically in wra1, vra0
ld a, [wTilesetAnim]
ld e, a
ld a, [wTilesetAnim + 1]
ld d, a
ld a, [hTileAnimFrame]
ld l, a
inc a
ld [hTileAnimFrame], a
ld h, 0
add hl, hl
add hl, hl
add hl, de
; 2-byte parameter
; All functions take input de.
ld e, [hl]
inc hl
ld d, [hl]
inc hl
; Function address
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
Tileset0Anim: ; 0xfc01b
TilesetJohtoModernAnim: ; 0xfc01b
TilesetKantoAnim: ; 0xfc01b
dw vTiles2 tile $14, AnimateWaterTile
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, TileAnimationPalette
dw NULL, WaitTileAnimation
dw NULL, AnimateFlowerTile
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, StandingTileFrame8
dw NULL, DoneTileAnimation
; 0xfc047
TilesetParkAnim: ; 0xfc047
dw vTiles2 tile $14, AnimateWaterTile
dw NULL, WaitTileAnimation
dw vTiles2 tile $5f, AnimateFountain
dw NULL, WaitTileAnimation
dw NULL, TileAnimationPalette
dw NULL, WaitTileAnimation
dw NULL, AnimateFlowerTile
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, StandingTileFrame8
dw NULL, DoneTileAnimation
; 0xfc073
TilesetForestAnim: ; 0xfc073
dw NULL, ForestTreeLeftAnimation
dw NULL, ForestTreeRightAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, ForestTreeLeftAnimation2
dw NULL, ForestTreeRightAnimation2
dw NULL, AnimateFlowerTile
dw vTiles2 tile $14, AnimateWaterTile
dw NULL, TileAnimationPalette
dw NULL, StandingTileFrame8
dw NULL, DoneTileAnimation
; 0xfc0a3
TilesetJohtoAnim: ; 0xfc0a3
dw vTiles2 tile $14, AnimateWaterTile
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, TileAnimationPalette
dw NULL, WaitTileAnimation
dw NULL, AnimateFlowerTile
dw WhirlpoolFrames1, AnimateWhirlpoolTile
dw WhirlpoolFrames2, AnimateWhirlpoolTile
dw WhirlpoolFrames3, AnimateWhirlpoolTile
dw WhirlpoolFrames4, AnimateWhirlpoolTile
dw NULL, WaitTileAnimation
dw NULL, StandingTileFrame8
dw NULL, DoneTileAnimation
; 0xfc0d7
UnusedTilesetAnim_fc0d7: ; 0xfc0d7
dw vTiles2 tile $03, WriteTileToBuffer
dw wTileAnimBuffer, ScrollTileRightLeft
dw vTiles2 tile $03, WriteTileFromBuffer
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, AnimateFlowerTile
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation
; 0xfc103
UnusedTilesetAnim_fc103: ; 0xfc103
dw vTiles2 tile $14, WriteTileToBuffer
dw wTileAnimBuffer, ScrollTileRightLeft
dw vTiles2 tile $14, WriteTileFromBuffer
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation
; 0xfc12f
TilesetPortAnim: ; 0xfc12f
dw vTiles2 tile $14, AnimateWaterTile
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, TileAnimationPalette
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, StandingTileFrame8
dw NULL, DoneTileAnimation
; 0xfc15f
TilesetEliteFourRoomAnim: ; 0xfc15f
dw NULL, LavaBubbleAnim2
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, LavaBubbleAnim1
dw NULL, WaitTileAnimation
dw NULL, StandingTileFrame8
dw NULL, DoneTileAnimation
; 0xfc17f
UnusedTilesetAnim_fc17f: ; 0xfc17f
dw vTiles2 tile $53, WriteTileToBuffer
dw wTileAnimBuffer, ScrollTileDown
dw wTileAnimBuffer, ScrollTileDown
dw vTiles2 tile $53, WriteTileFromBuffer
dw vTiles2 tile $03, WriteTileToBuffer
dw wTileAnimBuffer, ScrollTileRightLeft
dw vTiles2 tile $03, WriteTileFromBuffer
dw vTiles2 tile $53, WriteTileToBuffer
dw wTileAnimBuffer, ScrollTileDown
dw wTileAnimBuffer, ScrollTileDown
dw vTiles2 tile $53, WriteTileFromBuffer
dw NULL, DoneTileAnimation
; 0xfc1af
UnusedTilesetAnim_fc1af: ; 0xfc1af
dw vTiles2 tile $54, WriteTileToBuffer
dw wTileAnimBuffer, ScrollTileDown
dw wTileAnimBuffer, ScrollTileDown
dw vTiles2 tile $54, WriteTileFromBuffer
dw NULL, WaitTileAnimation
dw vTiles2 tile $03, WriteTileToBuffer
dw wTileAnimBuffer, ScrollTileRightLeft
dw vTiles2 tile $03, WriteTileFromBuffer
dw NULL, WaitTileAnimation
dw vTiles2 tile $54, WriteTileToBuffer
dw wTileAnimBuffer, ScrollTileDown
dw wTileAnimBuffer, ScrollTileDown
dw vTiles2 tile $54, WriteTileFromBuffer
dw NULL, DoneTileAnimation
; 0xfc1e7
TilesetCaveAnim: ; 0xfc1e7
TilesetDarkCaveAnim: ; 0xfc1e7
dw vTiles2 tile $14, WriteTileToBuffer
dw NULL, FlickeringCaveEntrancePalette
dw wTileAnimBuffer, ScrollTileRightLeft
dw NULL, FlickeringCaveEntrancePalette
dw vTiles2 tile $14, WriteTileFromBuffer
dw NULL, FlickeringCaveEntrancePalette
dw NULL, TileAnimationPalette
dw NULL, FlickeringCaveEntrancePalette
dw vTiles2 tile $40, WriteTileToBuffer
dw NULL, FlickeringCaveEntrancePalette
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
dw vTiles2 tile $40, WriteTileFromBuffer
dw NULL, FlickeringCaveEntrancePalette
dw NULL, DoneTileAnimation
; 0xfc233
TilesetIcePathAnim: ; 0xfc233
dw vTiles2 tile $35, WriteTileToBuffer
dw NULL, FlickeringCaveEntrancePalette
dw wTileAnimBuffer, ScrollTileRightLeft
dw NULL, FlickeringCaveEntrancePalette
dw vTiles2 tile $35, WriteTileFromBuffer
dw NULL, FlickeringCaveEntrancePalette
dw NULL, TileAnimationPalette
dw NULL, FlickeringCaveEntrancePalette
dw vTiles2 tile $31, WriteTileToBuffer
dw NULL, FlickeringCaveEntrancePalette
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
dw vTiles2 tile $31, WriteTileFromBuffer
dw NULL, FlickeringCaveEntrancePalette
dw NULL, DoneTileAnimation
; 0xfc27f
TilesetTowerAnim: ; 0xfc27f
dw TowerPillarTilePointer9, AnimateTowerPillarTile
dw TowerPillarTilePointer10, AnimateTowerPillarTile
dw TowerPillarTilePointer7, AnimateTowerPillarTile
dw TowerPillarTilePointer8, AnimateTowerPillarTile
dw TowerPillarTilePointer5, AnimateTowerPillarTile
dw TowerPillarTilePointer6, AnimateTowerPillarTile
dw TowerPillarTilePointer3, AnimateTowerPillarTile
dw TowerPillarTilePointer4, AnimateTowerPillarTile
dw TowerPillarTilePointer1, AnimateTowerPillarTile
dw TowerPillarTilePointer2, AnimateTowerPillarTile
dw NULL, StandingTileFrame
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation
; 0xfc2bf
UnusedTilesetAnim_fc2bf: ; 0xfc2bf
dw vTiles2 tile $4f, WriteTileToBuffer
dw wTileAnimBuffer, ScrollTileRightLeft
dw vTiles2 tile $4f, WriteTileFromBuffer
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation
; 0xfc2e7
TilesetBattleTowerOutsideAnim: ; 0xfc2e7
TilesetHouseAnim: ; 0xfc2e7
TilesetPlayersHouseAnim: ; 0xfc2e7
TilesetPokecenterAnim: ; 0xfc2e7
TilesetGateAnim: ; 0xfc2e7
TilesetLabAnim: ; 0xfc2e7
TilesetFacilityAnim: ; 0xfc2e7
TilesetMartAnim: ; 0xfc2e7
TilesetMansionAnim: ; 0xfc2e7
TilesetGameCornerAnim: ; 0xfc2e7
TilesetTraditionalHouseAnim: ; 0xfc2e7
TilesetTrainStationAnim: ; 0xfc2e7
TilesetChampionsRoomAnim: ; 0xfc2e7
TilesetLighthouseAnim: ; 0xfc2e7
TilesetPlayersRoomAnim: ; 0xfc2e7
TilesetPokeComCenterAnim: ; 0xfc2e7
TilesetBattleTowerAnim: ; 0xfc2e7
TilesetRuinsOfAlphAnim: ; 0xfc2e7
TilesetRadioTowerAnim: ; 0xfc2e7
TilesetUndergroundAnim: ; 0xfc2e7
TilesetBetaWordRoomAnim: ; 0xfc2e7
TilesetHoOhWordRoomAnim: ; 0xfc2e7
TilesetKabutoWordRoomAnim: ; 0xfc2e7
TilesetOmanyteWordRoomAnim: ; 0xfc2e7
TilesetAerodactylWordRoomAnim: ; 0xfc2e7
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation
; 0xfc2fb
DoneTileAnimation:
; Reset the animation command loop.
xor a
ld [hTileAnimFrame], a
WaitTileAnimation:
; Do nothing this frame.
ret
StandingTileFrame8:
ld a, [wTileAnimationTimer]
inc a
and %111
ld [wTileAnimationTimer], a
ret
ScrollTileRightLeft:
; Scroll right for 4 ticks, then left for 4 ticks.
ld a, [wTileAnimationTimer]
inc a
and %111
ld [wTileAnimationTimer], a
and %100
jr nz, ScrollTileLeft
jr ScrollTileRight
ScrollTileUpDown:
; Scroll up for 4 ticks, then down for 4 ticks.
ld a, [wTileAnimationTimer]
inc a
and %111
ld [wTileAnimationTimer], a
and %100
jr nz, ScrollTileDown
jr ScrollTileUp
ScrollTileLeft:
ld h, d
ld l, e
ld c, 4
.loop
rept 4
ld a, [hl]
rlca
ld [hli], a
endr
dec c
jr nz, .loop
ret
ScrollTileRight:
ld h, d
ld l, e
ld c, 4
.loop
rept 4
ld a, [hl]
rrca
ld [hli], a
endr
dec c
jr nz, .loop
ret
ScrollTileUp:
ld h, d
ld l, e
ld d, [hl]
inc hl
ld e, [hl]
ld bc, TILE_WIDTH * 2 - 2
add hl, bc
ld a, TILE_WIDTH / 2
.loop
ld c, [hl]
ld [hl], e
dec hl
ld b, [hl]
ld [hl], d
dec hl
ld e, [hl]
ld [hl], c
dec hl
ld d, [hl]
ld [hl], b
dec hl
dec a
jr nz, .loop
ret
ScrollTileDown:
ld h, d
ld l, e
ld de, TILE_WIDTH * 2 - 2
push hl
add hl, de
ld d, [hl]
inc hl
ld e, [hl]
pop hl
ld a, TILE_WIDTH / 2
.loop
ld b, [hl]
ld [hl], d
inc hl
ld c, [hl]
ld [hl], e
inc hl
ld d, [hl]
ld [hl], b
inc hl
ld e, [hl]
ld [hl], c
inc hl
dec a
jr nz, .loop
ret
AnimateFountain:
ld hl, sp+0
ld b, h
ld c, l
ld hl, .frames
ld a, [wTileAnimationTimer]
and %111
add a
add l
ld l, a
jr nc, .okay
inc h
.okay
ld a, [hli]
ld h, [hl]
ld l, a
ld sp, hl
ld l, e
ld h, d
jp WriteTile
.frames
dw .frame1
dw .frame2
dw .frame3
dw .frame4
dw .frame3
dw .frame4
dw .frame5
dw .frame1
.frame1 INCBIN "gfx/tilesets/fountain/1.2bpp"
.frame2 INCBIN "gfx/tilesets/fountain/2.2bpp"
.frame3 INCBIN "gfx/tilesets/fountain/3.2bpp"
.frame4 INCBIN "gfx/tilesets/fountain/4.2bpp"
.frame5 INCBIN "gfx/tilesets/fountain/5.2bpp"
AnimateWaterTile:
; Draw a water tile for the current frame in VRAM tile at de.
; Save sp in bc (see WriteTile).
ld hl, sp+0
ld b, h
ld c, l
ld a, [wTileAnimationTimer]
; 4 tile graphics, updated every other frame.
and %110
; 2 x 8 = 16 bytes per tile
add a
add a
add a
add LOW(WaterTileFrames)
ld l, a
ld a, 0
adc HIGH(WaterTileFrames)
ld h, a
; The stack now points to the start of the tile for this frame.
ld sp, hl
ld l, e
ld h, d
jp WriteTile
WaterTileFrames:
INCBIN "gfx/tilesets/water/water.2bpp"
ForestTreeLeftAnimation:
ld hl, sp+0
ld b, h
ld c, l
; Only during the Celebi event.
ld a, [wCelebiEvent]
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
jr nz, .asm_fc46c
ld hl, ForestTreeLeftFrames
jr .asm_fc47d
.asm_fc46c
ld a, [wTileAnimationTimer]
call GetForestTreeFrame
add a
add a
add a
add LOW(ForestTreeLeftFrames)
ld l, a
ld a, 0
adc HIGH(ForestTreeLeftFrames)
ld h, a
.asm_fc47d
ld sp, hl
ld hl, vTiles2 tile $0c
jp WriteTile
ForestTreeLeftFrames:
INCBIN "gfx/tilesets/forest-tree/1.2bpp"
INCBIN "gfx/tilesets/forest-tree/2.2bpp"
ForestTreeRightFrames:
INCBIN "gfx/tilesets/forest-tree/3.2bpp"
INCBIN "gfx/tilesets/forest-tree/4.2bpp"
ForestTreeRightAnimation:
ld hl, sp+0
ld b, h
ld c, l
; Only during the Celebi event.
ld a, [wCelebiEvent]
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
jr nz, .asm_fc4d4
ld hl, ForestTreeRightFrames
jr .asm_fc4eb
.asm_fc4d4
ld a, [wTileAnimationTimer]
call GetForestTreeFrame
add a
add a
add a
add LOW(ForestTreeLeftFrames)
ld l, a
ld a, 0
adc HIGH(ForestTreeLeftFrames)
ld h, a
push bc
ld bc, ForestTreeRightFrames - ForestTreeLeftFrames
add hl, bc
pop bc
.asm_fc4eb
ld sp, hl
ld hl, vTiles2 tile $0f
jp WriteTile
ForestTreeLeftAnimation2:
ld hl, sp+0
ld b, h
ld c, l
; Only during the Celebi event.
ld a, [wCelebiEvent]
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
jr nz, .asm_fc502
ld hl, ForestTreeLeftFrames
jr .asm_fc515
.asm_fc502
ld a, [wTileAnimationTimer]
call GetForestTreeFrame
xor 2
add a
add a
add a
add LOW(ForestTreeLeftFrames)
ld l, a
ld a, 0
adc HIGH(ForestTreeLeftFrames)
ld h, a
.asm_fc515
ld sp, hl
ld hl, vTiles2 tile $0c
jp WriteTile
ForestTreeRightAnimation2:
ld hl, sp+0
ld b, h
ld c, l
; Only during the Celebi event.
ld a, [wCelebiEvent]
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
jr nz, .asm_fc52c
ld hl, ForestTreeRightFrames
jr .asm_fc545
.asm_fc52c
ld a, [wTileAnimationTimer]
call GetForestTreeFrame
xor 2
add a
add a
add a
add LOW(ForestTreeLeftFrames)
ld l, a
ld a, 0
adc HIGH(ForestTreeLeftFrames)
ld h, a
push bc
ld bc, ForestTreeRightFrames - ForestTreeLeftFrames
add hl, bc
pop bc
.asm_fc545
ld sp, hl
ld hl, vTiles2 tile $0f
jp WriteTile
GetForestTreeFrame:
; Return 0 if a is even, or 2 if odd.
and a
jr z, .even
cp 1
jr z, .odd
cp 2
jr z, .even
cp 3
jr z, .odd
cp 4
jr z, .even
cp 5
jr z, .odd
cp 6
jr z, .even
.odd
ld a, 2
scf
ret
.even
xor a
ret
AnimateFlowerTile:
; No parameters.
; Save sp in bc (see WriteTile).
ld hl, sp+0
ld b, h
ld c, l
; Alternate tile graphic every other frame
ld a, [wTileAnimationTimer]
and %10
ld e, a
; CGB has different color mappings for flowers.
ld a, [hCGB]
and 1
add e
swap a
ld e, a
ld d, 0
ld hl, FlowerTileFrames
add hl, de
ld sp, hl
ld hl, vTiles2 tile $03
jp WriteTile
FlowerTileFrames:
INCBIN "gfx/tilesets/flower/dmg_1.2bpp"
INCBIN "gfx/tilesets/flower/cgb_1.2bpp"
INCBIN "gfx/tilesets/flower/dmg_2.2bpp"
INCBIN "gfx/tilesets/flower/cgb_2.2bpp"
LavaBubbleAnim1:
; Splash in the bottom-right corner of the fountain.
ld hl, sp+0
ld b, h
ld c, l
ld a, [wTileAnimationTimer]
and %110
srl a
inc a
inc a
and %011
swap a
ld e, a
ld d, 0
ld hl, LavaBubbleFrames
add hl, de
ld sp, hl
ld hl, vTiles2 tile $5b
jp WriteTile
LavaBubbleAnim2:
; Splash in the top-left corner of the fountain.
ld hl, sp+0
ld b, h
ld c, l
ld a, [wTileAnimationTimer]
and %110
add a
add a
add a
ld e, a
ld d, 0
ld hl, LavaBubbleFrames
add hl, de
ld sp, hl
ld hl, vTiles2 tile $38
jp WriteTile
LavaBubbleFrames:
INCBIN "gfx/tilesets/lava/1.2bpp"
INCBIN "gfx/tilesets/lava/2.2bpp"
INCBIN "gfx/tilesets/lava/3.2bpp"
INCBIN "gfx/tilesets/lava/4.2bpp"
AnimateTowerPillarTile:
; Read from struct at de:
; Destination (VRAM)
; Address of the first tile in the frame array
ld hl, sp+0
ld b, h
ld c, l
ld a, [wTileAnimationTimer]
and %111
; Get frame index a
ld hl, .frames
add l
ld l, a
ld a, 0
adc h
ld h, a
ld a, [hl]
; Destination
ld l, e
ld h, d
ld e, [hl]
inc hl
ld d, [hl]
inc hl
; Add the frame index to the starting address
add [hl]
inc hl
ld h, [hl]
ld l, a
ld a, 0
adc h
ld h, a
ld sp, hl
ld l, e
ld h, d
jr WriteTile
.frames
db $00, $10, $20, $30, $40, $30, $20, $10
StandingTileFrame:
ld hl, wTileAnimationTimer
inc [hl]
ret
AnimateWhirlpoolTile:
; Update whirlpool tile using struct at de.
; Struct:
; VRAM address
; Address of the first tile
; Only does one of 4 tiles at a time.
; Save sp in bc (see WriteTile).
ld hl, sp+0
ld b, h
ld c, l
; de = VRAM address
ld l, e
ld h, d
ld e, [hl]
inc hl
ld d, [hl]
inc hl
; Tile address is now at hl.
; Get the tile for this frame.
ld a, [wTileAnimationTimer]
and %11 ; 4 frames x2
swap a ; * 16 bytes per tile
add [hl]
inc hl
ld h, [hl]
ld l, a
ld a, 0
adc h
ld h, a
; The stack now points to the desired frame.
ld sp, hl
ld l, e
ld h, d
jr WriteTile
WriteTileFromBuffer:
; Write tiledata at wTileAnimBuffer to de.
; wTileAnimBuffer is loaded to sp for WriteTile.
ld hl, sp+0
ld b, h
ld c, l
ld hl, wTileAnimBuffer
ld sp, hl
ld h, d
ld l, e
jr WriteTile
WriteTileToBuffer:
; Write tiledata de to wTileAnimBuffer.
; de is loaded to sp for WriteTile.
ld hl, sp+0
ld b, h
ld c, l
ld h, d
ld l, e
ld sp, hl
ld hl, wTileAnimBuffer
; fallthrough
WriteTile:
; Write one 8x8 tile ($10 bytes) from sp to hl.
; Warning: sp is saved in bc so we can abuse pop.
; sp is restored to address bc. Save sp in bc before calling.
pop de
ld [hl], e
inc hl
ld [hl], d
rept 7
pop de
inc hl
ld [hl], e
inc hl
ld [hl], d
endr
; restore sp
ld h, b
ld l, c
ld sp, hl
ret
TileAnimationPalette:
; Transition between color values 0-2 for color 0 in palette 3.
; No palette changes on DMG.
ld a, [hCGB]
and a
ret z
; We don't want to mess with non-standard palettes.
ld a, [rBGP] ; BGP
cp %11100100
ret nz
; Only update on even frames.
ld a, [wTileAnimationTimer]
ld l, a
and 1 ; odd
ret nz
; Ready for BGPD input...
ld a, (1 << rBGPI_AUTO_INCREMENT) palette PAL_BG_WATER
ld [rBGPI], a
ld a, [rSVBK]
push af
ld a, BANK(wBGPals1)
ld [rSVBK], a
; Update color 0 in order 0 1 2 1
ld a, l
and %110 ; frames 0 2 4 6
jr z, .color0
cp %100 ; frame 4
jr z, .color2
.color1
ld hl, wBGPals1 palette PAL_BG_WATER color 1
ld a, [hli]
ld [rBGPD], a
ld a, [hli]
ld [rBGPD], a
jr .end
.color0
ld hl, wBGPals1 palette PAL_BG_WATER color 0
ld a, [hli]
ld [rBGPD], a
ld a, [hli]
ld [rBGPD], a
jr .end
.color2
ld hl, wBGPals1 palette PAL_BG_WATER color 2
ld a, [hli]
ld [rBGPD], a
ld a, [hli]
ld [rBGPD], a
.end
pop af
ld [rSVBK], a
ret
FlickeringCaveEntrancePalette:
; No palette changes on DMG.
ld a, [hCGB]
and a
ret z
; We don't want to mess with non-standard palettes.
ld a, [rBGP]
cp %11100100
ret nz
; We only want to be here if we're in a dark cave.
ld a, [wTimeOfDayPalset]
cp %11111111 ; 3,3,3,3
ret nz
ld a, [rSVBK]
push af
ld a, BANK(wBGPals1)
ld [rSVBK], a
; Ready for BGPD input...
ld a, (1 << rBGPI_AUTO_INCREMENT) palette PAL_BG_YELLOW
ld [rBGPI], a
ld a, [hVBlankCounter]
and %10
jr nz, .bit1set
ld hl, wBGPals1 palette PAL_BG_YELLOW
jr .okay
.bit1set
ld hl, wBGPals1 palette PAL_BG_YELLOW color 1
.okay
ld a, [hli]
ld [rBGPD], a
ld a, [hli]
ld [rBGPD], a
pop af
ld [rSVBK], a
ret
TowerPillarTilePointer1: dw vTiles2 tile $2d, TowerPillarTile1
TowerPillarTilePointer2: dw vTiles2 tile $2f, TowerPillarTile2
TowerPillarTilePointer3: dw vTiles2 tile $3d, TowerPillarTile3
TowerPillarTilePointer4: dw vTiles2 tile $3f, TowerPillarTile4
TowerPillarTilePointer5: dw vTiles2 tile $3c, TowerPillarTile5
TowerPillarTilePointer6: dw vTiles2 tile $2c, TowerPillarTile6
TowerPillarTilePointer7: dw vTiles2 tile $4d, TowerPillarTile7
TowerPillarTilePointer8: dw vTiles2 tile $4f, TowerPillarTile8
TowerPillarTilePointer9: dw vTiles2 tile $5d, TowerPillarTile9
TowerPillarTilePointer10: dw vTiles2 tile $5f, TowerPillarTile10
TowerPillarTile1: INCBIN "gfx/tilesets/tower-pillar/1.2bpp"
TowerPillarTile2: INCBIN "gfx/tilesets/tower-pillar/2.2bpp"
TowerPillarTile3: INCBIN "gfx/tilesets/tower-pillar/3.2bpp"
TowerPillarTile4: INCBIN "gfx/tilesets/tower-pillar/4.2bpp"
TowerPillarTile5: INCBIN "gfx/tilesets/tower-pillar/5.2bpp"
TowerPillarTile6: INCBIN "gfx/tilesets/tower-pillar/6.2bpp"
TowerPillarTile7: INCBIN "gfx/tilesets/tower-pillar/7.2bpp"
TowerPillarTile8: INCBIN "gfx/tilesets/tower-pillar/8.2bpp"
TowerPillarTile9: INCBIN "gfx/tilesets/tower-pillar/9.2bpp"
TowerPillarTile10: INCBIN "gfx/tilesets/tower-pillar/10.2bpp"
WhirlpoolFrames1: dw vTiles2 tile $32, WhirlpoolTiles1
WhirlpoolFrames2: dw vTiles2 tile $33, WhirlpoolTiles2
WhirlpoolFrames3: dw vTiles2 tile $42, WhirlpoolTiles3
WhirlpoolFrames4: dw vTiles2 tile $43, WhirlpoolTiles4
WhirlpoolTiles1: INCBIN "gfx/tilesets/whirlpool/1.2bpp"
WhirlpoolTiles2: INCBIN "gfx/tilesets/whirlpool/2.2bpp"
WhirlpoolTiles3: INCBIN "gfx/tilesets/whirlpool/3.2bpp"
WhirlpoolTiles4: INCBIN "gfx/tilesets/whirlpool/4.2bpp"