pokecrystal-board/engine/tilesets/tileset_anims.asm

990 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 wra1, vra0
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:
2018-01-17 11:50:34 -08:00
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
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:
TilesetBattleTowerAnim:
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
ld e, a
2013-12-25 23:09:58 -08:00
; CGB has different color mappings for flowers.
ldh a, [hCGB]
2013-12-25 23:09:58 -08:00
and 1
2013-12-25 23:09:58 -08:00
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:
2013-12-25 23:09:58 -08:00
; Splash in the bottom-right corner of the fountain.
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:
2013-12-25 23:09:58 -08:00
; Splash in the top-left corner of the fountain.
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"