pokecrystal-board/engine/tilesets/tileset_anims.asm

988 lines
19 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
_AnimateTileset::
2013-12-25 23:09:58 -08:00
; Iterate over a given pointer array of
; animation functions (one per frame).
; Typically in WRAM bank 1, VRAM bank 0.
2013-12-25 23:09:58 -08:00
2018-01-23 14:39:09 -08:00
ld a, [wTilesetAnim]
2013-12-25 23:09:58 -08:00
ld e, a
2018-01-23 14:39:09 -08:00
ld a, [wTilesetAnim + 1]
2013-12-25 23:09:58 -08:00
ld d, a
ldh a, [hTileAnimFrame]
2013-12-25 23:09:58 -08:00
ld l, a
inc a
ldh [hTileAnimFrame], a
2013-12-25 23:09:58 -08:00
ld h, 0
add hl, hl
add hl, hl
2013-12-25 23:09:58 -08:00
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
2013-12-25 23:09:58 -08:00
Tileset0Anim:
TilesetJohtoModernAnim:
TilesetKantoAnim:
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $14, AnimateWaterTile
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, AnimateWaterPalette
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, AnimateFlowerTile
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, StandingTileFrame8
2013-12-25 23:09:58 -08:00
dw NULL, DoneTileAnimation
TilesetParkAnim:
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $14, AnimateWaterTile
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $5f, AnimateFountain
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, AnimateWaterPalette
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, AnimateFlowerTile
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, StandingTileFrame8
2013-12-25 23:09:58 -08:00
dw NULL, DoneTileAnimation
TilesetForestAnim:
2013-12-25 23:09:58 -08:00
dw NULL, ForestTreeLeftAnimation
dw NULL, ForestTreeRightAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, ForestTreeLeftAnimation2
dw NULL, ForestTreeRightAnimation2
dw NULL, AnimateFlowerTile
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $14, AnimateWaterTile
dw NULL, AnimateWaterPalette
dw NULL, StandingTileFrame8
2013-12-25 23:09:58 -08:00
dw NULL, DoneTileAnimation
TilesetJohtoAnim:
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $14, AnimateWaterTile
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, AnimateWaterPalette
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, AnimateFlowerTile
2013-12-26 00:17:46 -08:00
dw WhirlpoolFrames1, AnimateWhirlpoolTile
dw WhirlpoolFrames2, AnimateWhirlpoolTile
dw WhirlpoolFrames3, AnimateWhirlpoolTile
dw WhirlpoolFrames4, AnimateWhirlpoolTile
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, StandingTileFrame8
2013-12-25 23:09:58 -08:00
dw NULL, DoneTileAnimation
UnusedTilesetAnim_fc0d7:
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $03, WriteTileToBuffer
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileRightLeft
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $03, WriteTileFromBuffer
2013-12-26 00:13:25 -08:00
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, AnimateFlowerTile
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation
UnusedTilesetAnim_fc103:
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $14, WriteTileToBuffer
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileRightLeft
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $14, WriteTileFromBuffer
2013-12-26 00:13:25 -08:00
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation
2013-12-25 23:09:58 -08:00
TilesetPortAnim:
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $14, AnimateWaterTile
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, AnimateWaterPalette
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, StandingTileFrame8
2013-12-25 23:09:58 -08:00
dw NULL, DoneTileAnimation
TilesetEliteFourRoomAnim:
dw NULL, LavaBubbleAnim2
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, LavaBubbleAnim1
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, StandingTileFrame8
2013-12-25 23:09:58 -08:00
dw NULL, DoneTileAnimation
UnusedTilesetAnim_fc17f:
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $53, WriteTileToBuffer
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileDown
dw wTileAnimBuffer, ScrollTileDown
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $53, WriteTileFromBuffer
dw vTiles2 tile $03, WriteTileToBuffer
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileRightLeft
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $03, WriteTileFromBuffer
dw vTiles2 tile $53, WriteTileToBuffer
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileDown
dw wTileAnimBuffer, ScrollTileDown
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $53, WriteTileFromBuffer
2013-12-26 00:13:25 -08:00
dw NULL, DoneTileAnimation
UnusedTilesetAnim_fc1af:
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $54, WriteTileToBuffer
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileDown
dw wTileAnimBuffer, ScrollTileDown
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $54, WriteTileFromBuffer
2013-12-26 00:13:25 -08:00
dw NULL, WaitTileAnimation
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $03, WriteTileToBuffer
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileRightLeft
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $03, WriteTileFromBuffer
2013-12-26 00:13:25 -08:00
dw NULL, WaitTileAnimation
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $54, WriteTileToBuffer
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileDown
dw wTileAnimBuffer, ScrollTileDown
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $54, WriteTileFromBuffer
2013-12-26 00:13:25 -08:00
dw NULL, DoneTileAnimation
2013-12-25 23:09:58 -08:00
TilesetCaveAnim:
TilesetDarkCaveAnim:
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $14, WriteTileToBuffer
dw NULL, FlickeringCaveEntrancePalette
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileRightLeft
dw NULL, FlickeringCaveEntrancePalette
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $14, WriteTileFromBuffer
dw NULL, FlickeringCaveEntrancePalette
dw NULL, AnimateWaterPalette
dw NULL, FlickeringCaveEntrancePalette
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $40, WriteTileToBuffer
dw NULL, FlickeringCaveEntrancePalette
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $40, WriteTileFromBuffer
dw NULL, FlickeringCaveEntrancePalette
2013-12-25 23:09:58 -08:00
dw NULL, DoneTileAnimation
TilesetIcePathAnim:
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $35, WriteTileToBuffer
dw NULL, FlickeringCaveEntrancePalette
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileRightLeft
dw NULL, FlickeringCaveEntrancePalette
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $35, WriteTileFromBuffer
dw NULL, FlickeringCaveEntrancePalette
dw NULL, AnimateWaterPalette
dw NULL, FlickeringCaveEntrancePalette
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $31, WriteTileToBuffer
dw NULL, FlickeringCaveEntrancePalette
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileDown
dw NULL, FlickeringCaveEntrancePalette
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $31, WriteTileFromBuffer
dw NULL, FlickeringCaveEntrancePalette
2013-12-25 23:09:58 -08:00
dw NULL, DoneTileAnimation
TilesetTowerAnim:
dw TowerPillarTilePointer9, AnimateTowerPillarTile
2018-01-17 11:50:34 -08:00
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
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation
UnusedTilesetAnim_fc2bf:
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $4f, WriteTileToBuffer
2015-12-23 11:00:29 -08:00
dw wTileAnimBuffer, ScrollTileRightLeft
2017-12-28 04:32:33 -08:00
dw vTiles2 tile $4f, WriteTileFromBuffer
2013-12-26 00:13:25 -08:00
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation
2013-12-25 23:09:58 -08:00
TilesetBattleTowerOutsideAnim:
TilesetHouseAnim:
TilesetPlayersHouseAnim:
TilesetPokecenterAnim:
TilesetGateAnim:
TilesetLabAnim:
TilesetFacilityAnim:
TilesetMartAnim:
TilesetMansionAnim:
TilesetGameCornerAnim:
TilesetTraditionalHouseAnim:
TilesetTrainStationAnim:
TilesetChampionsRoomAnim:
TilesetLighthouseAnim:
TilesetPlayersRoomAnim:
TilesetPokeComCenterAnim:
TilesetBattleTowerInsideAnim:
TilesetRuinsOfAlphAnim:
TilesetRadioTowerAnim:
TilesetUndergroundAnim:
TilesetBetaWordRoomAnim:
TilesetHoOhWordRoomAnim:
TilesetKabutoWordRoomAnim:
TilesetOmanyteWordRoomAnim:
TilesetAerodactylWordRoomAnim:
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation
2018-06-24 07:09:41 -07:00
DoneTileAnimation:
2013-12-25 23:09:58 -08:00
; Reset the animation command loop.
xor a
ldh [hTileAnimFrame], a
2018-06-24 07:09:41 -07:00
WaitTileAnimation:
2013-12-25 23:09:58 -08:00
; Do nothing this frame.
ret
2018-06-24 07:09:41 -07:00
StandingTileFrame8:
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2013-12-25 23:09:58 -08:00
inc a
2018-01-09 14:20:47 -08:00
and %111
2018-01-23 14:39:09 -08:00
ld [wTileAnimationTimer], a
2013-12-25 23:09:58 -08:00
ret
2018-06-24 07:09:41 -07:00
ScrollTileRightLeft:
2013-12-25 23:09:58 -08:00
; Scroll right for 4 ticks, then left for 4 ticks.
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2013-12-25 23:09:58 -08:00
inc a
2018-01-09 14:20:47 -08:00
and %111
2018-01-23 14:39:09 -08:00
ld [wTileAnimationTimer], a
2018-01-09 14:20:47 -08:00
and %100
2013-12-25 23:09:58 -08:00
jr nz, ScrollTileLeft
jr ScrollTileRight
2018-06-24 07:09:41 -07:00
ScrollTileUpDown:
2013-12-25 23:09:58 -08:00
; Scroll up for 4 ticks, then down for 4 ticks.
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2013-12-25 23:09:58 -08:00
inc a
2018-01-09 14:20:47 -08:00
and %111
2018-01-23 14:39:09 -08:00
ld [wTileAnimationTimer], a
2018-01-09 14:20:47 -08:00
and %100
2013-12-25 23:09:58 -08:00
jr nz, ScrollTileDown
jr ScrollTileUp
2018-06-24 07:09:41 -07:00
ScrollTileLeft:
2013-12-25 23:09:58 -08:00
ld h, d
ld l, e
ld c, 4
.loop
2018-01-09 14:20:47 -08:00
rept 4
2013-12-25 23:09:58 -08:00
ld a, [hl]
rlca
ld [hli], a
2018-01-09 14:20:47 -08:00
endr
2013-12-25 23:09:58 -08:00
dec c
jr nz, .loop
ret
2018-06-24 07:09:41 -07:00
ScrollTileRight:
2013-12-25 23:09:58 -08:00
ld h, d
ld l, e
ld c, 4
.loop
2018-01-09 14:20:47 -08:00
rept 4
2013-12-25 23:09:58 -08:00
ld a, [hl]
rrca
ld [hli], a
2018-01-09 14:20:47 -08:00
endr
2013-12-25 23:09:58 -08:00
dec c
jr nz, .loop
ret
2018-06-24 07:09:41 -07:00
ScrollTileUp:
2013-12-25 23:09:58 -08:00
ld h, d
ld l, e
ld d, [hl]
inc hl
ld e, [hl]
2018-01-09 15:08:40 -08:00
ld bc, TILE_WIDTH * 2 - 2
2013-12-25 23:09:58 -08:00
add hl, bc
2018-01-09 15:08:40 -08:00
ld a, TILE_WIDTH / 2
2013-12-25 23:09:58 -08:00
.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
2018-06-24 07:09:41 -07:00
ScrollTileDown:
2013-12-25 23:09:58 -08:00
ld h, d
ld l, e
2018-01-09 15:08:40 -08:00
ld de, TILE_WIDTH * 2 - 2
2013-12-25 23:09:58 -08:00
push hl
add hl, de
ld d, [hl]
inc hl
ld e, [hl]
pop hl
2018-01-09 15:08:40 -08:00
ld a, TILE_WIDTH / 2
2013-12-25 23:09:58 -08:00
.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
2018-06-24 07:09:41 -07:00
AnimateFountain:
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
ld hl, .frames
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2018-01-09 14:20:47 -08:00
and %111
2013-12-25 23:09:58 -08:00
add a
add l
ld l, a
2015-12-23 11:00:29 -08:00
jr nc, .okay
2013-12-25 23:09:58 -08:00
inc h
2015-12-23 11:00:29 -08:00
.okay
2013-12-25 23:09:58 -08:00
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
2013-12-26 00:21:29 -08:00
.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"
2013-12-25 23:09:58 -08:00
2018-06-24 07:09:41 -07:00
AnimateWaterTile:
2013-12-25 23:09:58 -08:00
; Draw a water tile for the current frame in VRAM tile at de.
; Save sp in bc (see WriteTile).
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2013-12-25 23:09:58 -08:00
; 4 tile graphics, updated every other frame.
2018-01-09 14:20:47 -08:00
and %110
2013-12-25 23:09:58 -08:00
; 2 x 8 = 16 bytes per tile
add a
add a
add a
add LOW(WaterTileFrames)
2013-12-25 23:09:58 -08:00
ld l, a
ld a, 0
adc HIGH(WaterTileFrames)
2013-12-25 23:09:58 -08:00
ld h, a
2018-01-23 13:49:58 -08:00
; The stack now points to the start of the tile for this frame.
2013-12-25 23:09:58 -08:00
ld sp, hl
2013-12-25 23:09:58 -08:00
ld l, e
ld h, d
2013-12-25 23:09:58 -08:00
jp WriteTile
2018-06-24 07:09:41 -07:00
WaterTileFrames:
INCBIN "gfx/tilesets/water/water.2bpp"
2013-12-25 23:09:58 -08:00
2018-06-24 07:09:41 -07:00
ForestTreeLeftAnimation:
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
; Only during the Celebi event.
2015-10-24 07:34:19 -07:00
ld a, [wCelebiEvent]
2018-01-22 11:34:55 -08:00
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
2013-12-25 23:09:58 -08:00
jr nz, .asm_fc46c
ld hl, ForestTreeLeftFrames
jr .asm_fc47d
.asm_fc46c
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2013-12-25 23:09:58 -08:00
call GetForestTreeFrame
add a
add a
add a
add LOW(ForestTreeLeftFrames)
2013-12-25 23:09:58 -08:00
ld l, a
ld a, 0
adc HIGH(ForestTreeLeftFrames)
2013-12-25 23:09:58 -08:00
ld h, a
.asm_fc47d
ld sp, hl
2017-12-28 04:32:33 -08:00
ld hl, vTiles2 tile $0c
2013-12-25 23:09:58 -08:00
jp WriteTile
2018-06-24 07:09:41 -07:00
ForestTreeLeftFrames:
2013-12-25 23:09:58 -08:00
INCBIN "gfx/tilesets/forest-tree/1.2bpp"
INCBIN "gfx/tilesets/forest-tree/2.2bpp"
2018-06-24 07:09:41 -07:00
ForestTreeRightFrames:
2013-12-25 23:09:58 -08:00
INCBIN "gfx/tilesets/forest-tree/3.2bpp"
INCBIN "gfx/tilesets/forest-tree/4.2bpp"
2018-06-24 07:09:41 -07:00
ForestTreeRightAnimation:
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
; Only during the Celebi event.
2015-10-24 07:34:19 -07:00
ld a, [wCelebiEvent]
2018-01-22 11:34:55 -08:00
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
2013-12-25 23:09:58 -08:00
jr nz, .asm_fc4d4
ld hl, ForestTreeRightFrames
jr .asm_fc4eb
.asm_fc4d4
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2013-12-25 23:09:58 -08:00
call GetForestTreeFrame
add a
add a
add a
add LOW(ForestTreeLeftFrames)
2013-12-25 23:09:58 -08:00
ld l, a
ld a, 0
adc HIGH(ForestTreeLeftFrames)
2013-12-25 23:09:58 -08:00
ld h, a
push bc
ld bc, ForestTreeRightFrames - ForestTreeLeftFrames
add hl, bc
pop bc
.asm_fc4eb
ld sp, hl
2017-12-28 04:32:33 -08:00
ld hl, vTiles2 tile $0f
2013-12-25 23:09:58 -08:00
jp WriteTile
2018-06-24 07:09:41 -07:00
ForestTreeLeftAnimation2:
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
; Only during the Celebi event.
2015-10-24 07:34:19 -07:00
ld a, [wCelebiEvent]
2018-01-22 11:34:55 -08:00
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
2013-12-25 23:09:58 -08:00
jr nz, .asm_fc502
ld hl, ForestTreeLeftFrames
jr .asm_fc515
.asm_fc502
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2013-12-25 23:09:58 -08:00
call GetForestTreeFrame
xor 2
add a
add a
add a
add LOW(ForestTreeLeftFrames)
2013-12-25 23:09:58 -08:00
ld l, a
ld a, 0
adc HIGH(ForestTreeLeftFrames)
2013-12-25 23:09:58 -08:00
ld h, a
.asm_fc515
ld sp, hl
2017-12-28 04:32:33 -08:00
ld hl, vTiles2 tile $0c
2013-12-25 23:09:58 -08:00
jp WriteTile
2018-06-24 07:09:41 -07:00
ForestTreeRightAnimation2:
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
; Only during the Celebi event.
2015-10-24 07:34:19 -07:00
ld a, [wCelebiEvent]
2018-01-22 11:34:55 -08:00
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
2013-12-25 23:09:58 -08:00
jr nz, .asm_fc52c
ld hl, ForestTreeRightFrames
jr .asm_fc545
.asm_fc52c
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2013-12-25 23:09:58 -08:00
call GetForestTreeFrame
xor 2
add a
add a
add a
add LOW(ForestTreeLeftFrames)
2013-12-25 23:09:58 -08:00
ld l, a
ld a, 0
adc HIGH(ForestTreeLeftFrames)
2013-12-25 23:09:58 -08:00
ld h, a
push bc
ld bc, ForestTreeRightFrames - ForestTreeLeftFrames
add hl, bc
pop bc
.asm_fc545
ld sp, hl
2017-12-28 04:32:33 -08:00
ld hl, vTiles2 tile $0f
2013-12-25 23:09:58 -08:00
jp WriteTile
2018-06-24 07:09:41 -07:00
GetForestTreeFrame:
2013-12-25 23:09:58 -08:00
; 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
2018-06-24 07:09:41 -07:00
AnimateFlowerTile:
2013-12-25 23:09:58 -08:00
; No parameters.
; Save sp in bc (see WriteTile).
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
2013-12-25 23:46:08 -08:00
; Alternate tile graphic every other frame
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2018-01-09 14:20:47 -08:00
and %10
2013-12-25 23:09:58 -08:00
; CGB has different color mappings for flowers.
ld e, a
ldh a, [hCGB]
2013-12-25 23:09:58 -08:00
and 1
add e
2018-01-09 14:20:47 -08:00
swap a
2013-12-25 23:09:58 -08:00
ld e, a
ld d, 0
ld hl, FlowerTileFrames
add hl, de
ld sp, hl
2018-01-09 14:20:47 -08:00
ld hl, vTiles2 tile $03
2013-12-25 23:09:58 -08:00
jp WriteTile
2018-06-24 07:09:41 -07:00
FlowerTileFrames:
2013-12-25 23:46:08 -08:00
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"
2013-12-25 23:09:58 -08:00
2018-06-24 07:09:41 -07:00
LavaBubbleAnim1:
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2018-01-09 14:20:47 -08:00
and %110
2013-12-25 23:09:58 -08:00
srl a
inc a
inc a
2018-01-09 14:20:47 -08:00
and %011
2013-12-25 23:09:58 -08:00
swap a
ld e, a
ld d, 0
ld hl, LavaBubbleFrames
2013-12-25 23:09:58 -08:00
add hl, de
ld sp, hl
2017-12-28 04:32:33 -08:00
ld hl, vTiles2 tile $5b
2013-12-25 23:09:58 -08:00
jp WriteTile
2018-06-24 07:09:41 -07:00
LavaBubbleAnim2:
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2018-01-09 14:20:47 -08:00
and %110
2013-12-25 23:09:58 -08:00
add a
add a
add a
2013-12-25 23:09:58 -08:00
ld e, a
ld d, 0
ld hl, LavaBubbleFrames
2013-12-25 23:09:58 -08:00
add hl, de
ld sp, hl
2017-12-28 04:32:33 -08:00
ld hl, vTiles2 tile $38
2013-12-25 23:09:58 -08:00
jp WriteTile
2018-06-24 07:09:41 -07:00
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"
2013-12-25 23:09:58 -08:00
2018-06-24 07:09:41 -07:00
AnimateTowerPillarTile:
2013-12-25 23:09:58 -08:00
; Read from struct at de:
; Destination (VRAM)
; Address of the first tile in the frame array
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2018-01-09 14:20:47 -08:00
and %111
2013-12-25 23:09:58 -08:00
; 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
2018-06-24 07:09:41 -07:00
StandingTileFrame:
2018-01-23 14:39:09 -08:00
ld hl, wTileAnimationTimer
2013-12-25 23:09:58 -08:00
inc [hl]
ret
2018-06-24 07:09:41 -07:00
AnimateWhirlpoolTile:
2013-12-25 23:09:58 -08:00
; 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
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
2013-12-25 23:09:58 -08:00
; 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.
2013-12-25 23:09:58 -08:00
; Get the tile for this frame.
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2013-12-25 23:09:58 -08:00
and %11 ; 4 frames x2
swap a ; * 16 bytes per tile
2013-12-25 23:09:58 -08:00
add [hl]
inc hl
ld h, [hl]
ld l, a
ld a, 0
adc h
ld h, a
2018-01-23 13:49:58 -08:00
; The stack now points to the desired frame.
2013-12-25 23:09:58 -08:00
ld sp, hl
2013-12-25 23:09:58 -08:00
ld l, e
ld h, d
2013-12-25 23:09:58 -08:00
jr WriteTile
2018-06-24 07:09:41 -07:00
WriteTileFromBuffer:
2015-12-23 11:00:29 -08:00
; Write tiledata at wTileAnimBuffer to de.
; wTileAnimBuffer is loaded to sp for WriteTile.
2013-12-25 23:09:58 -08:00
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
2015-12-23 11:00:29 -08:00
ld hl, wTileAnimBuffer
2013-12-25 23:09:58 -08:00
ld sp, hl
2013-12-25 23:09:58 -08:00
ld h, d
ld l, e
jr WriteTile
2018-06-24 07:09:41 -07:00
WriteTileToBuffer:
2015-12-23 11:00:29 -08:00
; Write tiledata de to wTileAnimBuffer.
2013-12-25 23:09:58 -08:00
; de is loaded to sp for WriteTile.
ld hl, sp+0
2013-12-25 23:09:58 -08:00
ld b, h
ld c, l
2013-12-25 23:09:58 -08:00
ld h, d
ld l, e
ld sp, hl
2015-12-23 11:00:29 -08:00
ld hl, wTileAnimBuffer
2013-12-25 23:09:58 -08:00
; fallthrough
2018-06-24 07:09:41 -07:00
WriteTile:
2013-12-25 23:09:58 -08:00
; 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
2013-12-25 23:09:58 -08:00
rept 7
pop de
inc hl
ld [hl], e
inc hl
ld [hl], d
endr
2013-12-25 23:09:58 -08:00
; restore sp
ld h, b
ld l, c
ld sp, hl
ret
AnimateWaterPalette:
2013-12-25 23:09:58 -08:00
; Transition between color values 0-2 for color 0 in palette 3.
; No palette changes on DMG.
ldh a, [hCGB]
2013-12-25 23:09:58 -08:00
and a
ret z
2013-12-25 23:09:58 -08:00
; We don't want to mess with non-standard palettes.
ldh a, [rBGP] ; BGP
2013-12-25 23:09:58 -08:00
cp %11100100
ret nz
2013-12-25 23:09:58 -08:00
; Only update on even frames.
2018-01-23 14:39:09 -08:00
ld a, [wTileAnimationTimer]
2013-12-25 23:09:58 -08:00
ld l, a
and 1 ; odd
ret nz
2013-12-25 23:09:58 -08:00
; Ready for BGPD input...
ld a, (1 << rBGPI_AUTO_INCREMENT) palette PAL_BG_WATER
ldh [rBGPI], a
ldh a, [rSVBK]
2013-12-25 23:09:58 -08:00
push af
ld a, BANK(wBGPals1)
ldh [rSVBK], a
2013-12-25 23:09:58 -08:00
; Update color 0 in order 0 1 2 1
ld a, l
and %110 ; frames 0 2 4 6
jr z, .color0
2018-01-09 14:20:47 -08:00
cp %100 ; frame 4
2013-12-25 23:09:58 -08:00
jr z, .color2
2013-12-25 23:09:58 -08:00
.color1
2018-01-22 16:40:17 -08:00
ld hl, wBGPals1 palette PAL_BG_WATER color 1
2013-12-25 23:09:58 -08:00
ld a, [hli]
ldh [rBGPD], a
2013-12-25 23:09:58 -08:00
ld a, [hli]
ldh [rBGPD], a
2013-12-25 23:09:58 -08:00
jr .end
2013-12-25 23:09:58 -08:00
.color0
2018-01-22 16:40:17 -08:00
ld hl, wBGPals1 palette PAL_BG_WATER color 0
2013-12-25 23:09:58 -08:00
ld a, [hli]
ldh [rBGPD], a
2013-12-25 23:09:58 -08:00
ld a, [hli]
ldh [rBGPD], a
2013-12-25 23:09:58 -08:00
jr .end
2013-12-25 23:09:58 -08:00
.color2
2018-01-22 16:40:17 -08:00
ld hl, wBGPals1 palette PAL_BG_WATER color 2
2013-12-25 23:09:58 -08:00
ld a, [hli]
ldh [rBGPD], a
2013-12-25 23:09:58 -08:00
ld a, [hli]
ldh [rBGPD], a
2013-12-25 23:09:58 -08:00
.end
pop af
ldh [rSVBK], a
2013-12-25 23:09:58 -08:00
ret
2018-06-24 07:09:41 -07:00
FlickeringCaveEntrancePalette:
; No palette changes on DMG.
ldh a, [hCGB]
2013-12-25 23:09:58 -08:00
and a
ret z
; We don't want to mess with non-standard palettes.
ldh a, [rBGP]
cp %11100100
2013-12-25 23:09:58 -08:00
ret nz
; We only want to be here if we're in a dark cave.
2015-12-14 08:12:18 -08:00
ld a, [wTimeOfDayPalset]
2018-01-09 14:20:47 -08:00
cp %11111111 ; 3,3,3,3
2013-12-25 23:09:58 -08:00
ret nz
ldh a, [rSVBK]
2013-12-25 23:09:58 -08:00
push af
ld a, BANK(wBGPals1)
ldh [rSVBK], a
; Ready for BGPD input...
ld a, (1 << rBGPI_AUTO_INCREMENT) palette PAL_BG_YELLOW
ldh [rBGPI], a
ldh a, [hVBlankCounter]
2018-01-09 14:20:47 -08:00
and %10
jr nz, .bit1set
ld hl, wBGPals1 palette PAL_BG_YELLOW
jr .okay
2013-12-25 23:09:58 -08:00
.bit1set
2018-01-22 16:40:17 -08:00
ld hl, wBGPals1 palette PAL_BG_YELLOW color 1
2013-12-25 23:09:58 -08:00
.okay
2013-12-25 23:09:58 -08:00
ld a, [hli]
ldh [rBGPD], a
2013-12-25 23:09:58 -08:00
ld a, [hli]
ldh [rBGPD], a
2013-12-25 23:09:58 -08:00
pop af
ldh [rSVBK], a
2013-12-25 23:09:58 -08:00
ret
2018-01-17 11:50:34 -08:00
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"
2013-12-25 23:09:58 -08:00
2017-12-28 04:32:33 -08:00
WhirlpoolFrames1: dw vTiles2 tile $32, WhirlpoolTiles1
WhirlpoolFrames2: dw vTiles2 tile $33, WhirlpoolTiles2
WhirlpoolFrames3: dw vTiles2 tile $42, WhirlpoolTiles3
WhirlpoolFrames4: dw vTiles2 tile $43, WhirlpoolTiles4
2013-12-25 23:37:23 -08:00
2013-12-26 00:21:29 -08:00
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"