summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-05-22 22:58:36 -0400
committerentrpntr <entrpntr@gmail.com>2020-05-22 22:58:36 -0400
commitbca9680f9afab7c1dac91be41b0a89b229c64bb1 (patch)
tree509546b8ebcd51ca023e33263fe7aca43fceb782
parente9b07c81b0eb5d6c8456b7848e921d5ec4a4d297 (diff)
Add engine/tilesets/tileset_anims.asm.
-rw-r--r--engine/tilesets/tileset_anims.asm750
-rw-r--r--gfx/tilesets/flower/cgb_1.2bpp1
-rw-r--r--gfx/tilesets/flower/cgb_1.pngbin0 -> 90 bytes
-rw-r--r--gfx/tilesets/flower/cgb_2.2bpp1
-rw-r--r--gfx/tilesets/flower/cgb_2.pngbin0 -> 88 bytes
-rw-r--r--gfx/tilesets/flower/dmg_1.2bpp1
-rw-r--r--gfx/tilesets/flower/dmg_1.pngbin0 -> 90 bytes
-rw-r--r--gfx/tilesets/flower/dmg_2.2bpp1
-rw-r--r--gfx/tilesets/flower/dmg_2.pngbin0 -> 90 bytes
-rw-r--r--gfx/tilesets/lava/1.2bppbin0 -> 16 bytes
-rw-r--r--gfx/tilesets/lava/1.pngbin0 -> 89 bytes
-rw-r--r--gfx/tilesets/lava/2.2bppbin0 -> 16 bytes
-rw-r--r--gfx/tilesets/lava/2.pngbin0 -> 89 bytes
-rw-r--r--gfx/tilesets/lava/3.2bppbin0 -> 16 bytes
-rw-r--r--gfx/tilesets/lava/3.pngbin0 -> 87 bytes
-rw-r--r--gfx/tilesets/lava/4.2bppbin0 -> 16 bytes
-rw-r--r--gfx/tilesets/lava/4.pngbin0 -> 79 bytes
-rw-r--r--gfx/tilesets/tower-pillar/1.2bpp1
-rw-r--r--gfx/tilesets/tower-pillar/1.pngbin0 -> 137 bytes
-rw-r--r--gfx/tilesets/tower-pillar/10.2bpp1
-rw-r--r--gfx/tilesets/tower-pillar/10.pngbin0 -> 118 bytes
-rw-r--r--gfx/tilesets/tower-pillar/2.2bpp1
-rw-r--r--gfx/tilesets/tower-pillar/2.pngbin0 -> 133 bytes
-rw-r--r--gfx/tilesets/tower-pillar/3.2bpp1
-rw-r--r--gfx/tilesets/tower-pillar/3.pngbin0 -> 127 bytes
-rw-r--r--gfx/tilesets/tower-pillar/4.2bpp1
-rw-r--r--gfx/tilesets/tower-pillar/4.pngbin0 -> 130 bytes
-rw-r--r--gfx/tilesets/tower-pillar/5.2bpp1
-rw-r--r--gfx/tilesets/tower-pillar/5.pngbin0 -> 117 bytes
-rw-r--r--gfx/tilesets/tower-pillar/6.2bpp1
-rw-r--r--gfx/tilesets/tower-pillar/6.pngbin0 -> 116 bytes
-rw-r--r--gfx/tilesets/tower-pillar/7.2bpp1
-rw-r--r--gfx/tilesets/tower-pillar/7.pngbin0 -> 115 bytes
-rw-r--r--gfx/tilesets/tower-pillar/8.2bpp1
-rw-r--r--gfx/tilesets/tower-pillar/8.pngbin0 -> 115 bytes
-rw-r--r--gfx/tilesets/tower-pillar/9.2bpp1
-rw-r--r--gfx/tilesets/tower-pillar/9.pngbin0 -> 127 bytes
-rw-r--r--gfx/tilesets/water/water.2bppbin0 -> 64 bytes
-rw-r--r--gfx/tilesets/water/water.pngbin0 -> 100 bytes
-rw-r--r--gfx/tilesets/whirlpool/1.2bppbin0 -> 64 bytes
-rw-r--r--gfx/tilesets/whirlpool/1.pngbin0 -> 146 bytes
-rw-r--r--gfx/tilesets/whirlpool/2.2bppbin0 -> 64 bytes
-rw-r--r--gfx/tilesets/whirlpool/2.pngbin0 -> 145 bytes
-rw-r--r--gfx/tilesets/whirlpool/3.2bppbin0 -> 64 bytes
-rw-r--r--gfx/tilesets/whirlpool/3.pngbin0 -> 146 bytes
-rw-r--r--gfx/tilesets/whirlpool/4.2bppbin0 -> 64 bytes
-rw-r--r--gfx/tilesets/whirlpool/4.pngbin0 -> 145 bytes
-rw-r--r--main.asm43
-rw-r--r--wram.asm19
49 files changed, 767 insertions, 59 deletions
diff --git a/engine/tilesets/tileset_anims.asm b/engine/tilesets/tileset_anims.asm
new file mode 100644
index 00000000..813965e5
--- /dev/null
+++ b/engine/tilesets/tileset_anims.asm
@@ -0,0 +1,750 @@
+ db 0 ; unused
+
+DummyPredef3A:
+ ret
+
+ ret ; unused
+
+_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
+
+ ldh a, [hTileAnimFrame]
+ ld l, a
+ inc a
+ ldh [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::
+TilesetJohtoModernAnim::
+TilesetKantoAnim::
+TilesetParkAnim::
+TilesetForestAnim::
+ dw vTiles2 tile $14, AnimateWaterTile
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, AnimateWaterPalette
+ dw NULL, WaitTileAnimation
+ dw NULL, AnimateFlowerTile
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, StandingTileFrame8
+ dw NULL, DoneTileAnimation
+
+TilesetJohtoAnim:
+ dw vTiles2 tile $14, AnimateWaterTile
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, AnimateWaterPalette
+ 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
+
+UnusedTilesetAnim_fc07e:
+ 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
+
+UnusedTilesetAnim_fc0aa:
+ 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
+
+TilesetPortAnim:
+ dw vTiles2 tile $14, AnimateWaterTile
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, AnimateWaterPalette
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, StandingTileFrame8
+ dw NULL, DoneTileAnimation
+
+TilesetEliteFourRoomAnim:
+ dw NULL, LavaBubbleAnim2
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, LavaBubbleAnim1
+ dw NULL, WaitTileAnimation
+ dw NULL, StandingTileFrame8
+ dw NULL, DoneTileAnimation
+
+UnusedTilesetAnim_fc126:
+ 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
+
+UnusedTilesetAnim_fc156:
+ 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
+
+TilesetCaveAnim:
+TilesetDarkCaveAnim:
+ dw vTiles2 tile $14, WriteTileToBuffer
+ dw NULL, FlickeringCaveEntrancePalette
+ dw wTileAnimBuffer, ScrollTileRightLeft
+ dw NULL, FlickeringCaveEntrancePalette
+ dw vTiles2 tile $14, WriteTileFromBuffer
+ dw NULL, FlickeringCaveEntrancePalette
+ dw NULL, AnimateWaterPalette
+ 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
+
+TilesetIcePathAnim:
+ dw vTiles2 tile $35, WriteTileToBuffer
+ dw NULL, FlickeringCaveEntrancePalette
+ dw wTileAnimBuffer, ScrollTileRightLeft
+ dw NULL, FlickeringCaveEntrancePalette
+ dw vTiles2 tile $35, WriteTileFromBuffer
+ dw NULL, FlickeringCaveEntrancePalette
+ dw NULL, AnimateWaterPalette
+ 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
+
+TilesetTowerAnim:
+ 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
+ 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
+
+TilesetHouseAnim:
+TilesetPlayersHouseAnim:
+TilesetPokecenterAnim:
+TilesetGateAnim:
+TilesetLabAnim:
+TilesetFacilityAnim:
+TilesetMartAnim:
+TilesetMansionAnim:
+TilesetGameCornerAnim:
+TilesetTraditionalHouseAnim:
+TilesetTrainStationAnim:
+TilesetChampionsRoomAnim:
+TilesetLighthouseAnim:
+TilesetPlayersRoomAnim:
+TilesetRuinsOfAlphAnim:
+TilesetRadioTowerAnim:
+TilesetUndergroundAnim:
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, WaitTileAnimation
+ dw NULL, DoneTileAnimation
+
+DoneTileAnimation:
+; Reset the animation command loop.
+ xor a
+ ldh [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
+
+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"
+
+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
+
+; CGB has different color mappings for flowers.
+ ld e, a
+ ldh 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
+
+AnimateWaterPalette:
+; Transition between color values 0-2 for color 0 in palette 3.
+
+; No palette changes on DMG.
+ ldh a, [hCGB]
+ and a
+ ret z
+
+; We don't want to mess with non-standard palettes.
+ ldh 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
+ ldh [rBGPI], 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]
+ ldh [rBGPD], a
+ ld a, [hli]
+ ldh [rBGPD], a
+ ret
+
+.color0
+ ld hl, wBGPals1 palette PAL_BG_WATER color 0
+ ld a, [hli]
+ ldh [rBGPD], a
+ ld a, [hli]
+ ldh [rBGPD], a
+ ret
+
+.color2
+ ld hl, wBGPals1 palette PAL_BG_WATER color 2
+ ld a, [hli]
+ ldh [rBGPD], a
+ ld a, [hli]
+ ldh [rBGPD], a
+ ret
+
+FlickeringCaveEntrancePalette:
+; No palette changes on DMG.
+ ldh a, [hCGB]
+ and a
+ ret z
+; We don't want to mess with non-standard palettes.
+ ldh 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
+
+; Ready for BGPD input...
+ ld a, (1 << rBGPI_AUTO_INCREMENT) palette PAL_BG_YELLOW
+ ldh [rBGPI], a
+ ldh 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]
+ ldh [rBGPD], a
+ ld a, [hli]
+ ldh [rBGPD], 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"
diff --git a/gfx/tilesets/flower/cgb_1.2bpp b/gfx/tilesets/flower/cgb_1.2bpp
new file mode 100644
index 00000000..ffe58b93
--- /dev/null
+++ b/gfx/tilesets/flower/cgb_1.2bpp
@@ -0,0 +1 @@
+¢ M’-mL²A¼²HE0 \ No newline at end of file
diff --git a/gfx/tilesets/flower/cgb_1.png b/gfx/tilesets/flower/cgb_1.png
new file mode 100644
index 00000000..e3fd2867
--- /dev/null
+++ b/gfx/tilesets/flower/cgb_1.png
Binary files differ
diff --git a/gfx/tilesets/flower/cgb_2.2bpp b/gfx/tilesets/flower/cgb_2.2bpp
new file mode 100644
index 00000000..5cf6b583
--- /dev/null
+++ b/gfx/tilesets/flower/cgb_2.2bpp
@@ -0,0 +1 @@
+¢Y$¤Z%Z˜f%Zš$E \ No newline at end of file
diff --git a/gfx/tilesets/flower/cgb_2.png b/gfx/tilesets/flower/cgb_2.png
new file mode 100644
index 00000000..901e34a1
--- /dev/null
+++ b/gfx/tilesets/flower/cgb_2.png
Binary files differ
diff --git a/gfx/tilesets/flower/dmg_1.2bpp b/gfx/tilesets/flower/dmg_1.2bpp
new file mode 100644
index 00000000..ec9e9c6d
--- /dev/null
+++ b/gfx/tilesets/flower/dmg_1.2bpp
@@ -0,0 +1 @@
+¢ AŒ! a ’1Œ‚HE0 \ No newline at end of file
diff --git a/gfx/tilesets/flower/dmg_1.png b/gfx/tilesets/flower/dmg_1.png
new file mode 100644
index 00000000..428514af
--- /dev/null
+++ b/gfx/tilesets/flower/dmg_1.png
Binary files differ
diff --git a/gfx/tilesets/flower/dmg_2.2bpp b/gfx/tilesets/flower/dmg_2.2bpp
new file mode 100644
index 00000000..7bf87eab
--- /dev/null
+++ b/gfx/tilesets/flower/dmg_2.2bpp
@@ -0,0 +1 @@
+¢A$˜BB€fZ‚$E \ No newline at end of file
diff --git a/gfx/tilesets/flower/dmg_2.png b/gfx/tilesets/flower/dmg_2.png
new file mode 100644
index 00000000..9a512501
--- /dev/null
+++ b/gfx/tilesets/flower/dmg_2.png
Binary files differ
diff --git a/gfx/tilesets/lava/1.2bpp b/gfx/tilesets/lava/1.2bpp
new file mode 100644
index 00000000..d25f1bad
--- /dev/null
+++ b/gfx/tilesets/lava/1.2bpp
Binary files differ
diff --git a/gfx/tilesets/lava/1.png b/gfx/tilesets/lava/1.png
new file mode 100644
index 00000000..c5b500cc
--- /dev/null
+++ b/gfx/tilesets/lava/1.png
Binary files differ
diff --git a/gfx/tilesets/lava/2.2bpp b/gfx/tilesets/lava/2.2bpp
new file mode 100644
index 00000000..bdb3c8cf
--- /dev/null
+++ b/gfx/tilesets/lava/2.2bpp
Binary files differ
diff --git a/gfx/tilesets/lava/2.png b/gfx/tilesets/lava/2.png
new file mode 100644
index 00000000..1512e35a
--- /dev/null
+++ b/gfx/tilesets/lava/2.png
Binary files differ
diff --git a/gfx/tilesets/lava/3.2bpp b/gfx/tilesets/lava/3.2bpp
new file mode 100644
index 00000000..2016d2bd
--- /dev/null
+++ b/gfx/tilesets/lava/3.2bpp
Binary files differ
diff --git a/gfx/tilesets/lava/3.png b/gfx/tilesets/lava/3.png
new file mode 100644
index 00000000..449c2a31
--- /dev/null
+++ b/gfx/tilesets/lava/3.png
Binary files differ
diff --git a/gfx/tilesets/lava/4.2bpp b/gfx/tilesets/lava/4.2bpp
new file mode 100644
index 00000000..e0142c68
--- /dev/null
+++ b/gfx/tilesets/lava/4.2bpp
Binary files differ
diff --git a/gfx/tilesets/lava/4.png b/gfx/tilesets/lava/4.png
new file mode 100644
index 00000000..8e4c8e0e
--- /dev/null
+++ b/gfx/tilesets/lava/4.png
Binary files differ
diff --git a/gfx/tilesets/tower-pillar/1.2bpp b/gfx/tilesets/tower-pillar/1.2bpp
new file mode 100644
index 00000000..3bb46c95
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/1.2bpp
@@ -0,0 +1 @@
+€ÿ¿ÿ¿ÿ¿ÿ¿ÿ¿ÿ¿ÿ¿ÿÀ_ÿ_ßßßßßà?/ÿ/?ï?¯ï?¯ï?ðÿ÷·_÷—÷ø ÿ ë»Oû›oû \ No newline at end of file
diff --git a/gfx/tilesets/tower-pillar/1.png b/gfx/tilesets/tower-pillar/1.png
new file mode 100644
index 00000000..c22fb2a1
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/1.png
Binary files differ
diff --git a/gfx/tilesets/tower-pillar/10.2bpp b/gfx/tilesets/tower-pillar/10.2bpp
new file mode 100644
index 00000000..a1af10a5
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/10.2bpp
@@ -0,0 +1 @@
+?ÿ_ÿ¿ÿ_ÿ¿ÿÿÿÿÿÿÿÿ¯ÿ_ÿ¯ÿ_ÿÿÿÿÿÿÿÿWÿ¯ÿ×ÿ¯ÿÿÿÿÿÿÿ«ÿWÿëÿWÿ¿ÿÿÿÿÿÿUÿ«ÿuÿ«ÿßÿÿÿÿÿ \ No newline at end of file
diff --git a/gfx/tilesets/tower-pillar/10.png b/gfx/tilesets/tower-pillar/10.png
new file mode 100644
index 00000000..01dbe1af
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/10.png
Binary files differ
diff --git a/gfx/tilesets/tower-pillar/2.2bpp b/gfx/tilesets/tower-pillar/2.2bpp
new file mode 100644
index 00000000..08d8cfd7
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/2.2bpp
@@ -0,0 +1 @@
+ðÐÿÐðßðÙößðßðÞñøèÿèøïøéþïøïøîùüôÿôü÷üõþ÷ü÷üöýþúÿúþûþûþûþûþúÿÿýÿýÿýÿýÿýÿýÿýÿ \ No newline at end of file
diff --git a/gfx/tilesets/tower-pillar/2.png b/gfx/tilesets/tower-pillar/2.png
new file mode 100644
index 00000000..76fae403
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/2.png
Binary files differ
diff --git a/gfx/tilesets/tower-pillar/3.2bpp b/gfx/tilesets/tower-pillar/3.2bpp
new file mode 100644
index 00000000..e4bb79a4
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/3.2bpp
@@ -0,0 +1 @@
+¿ÿ¿ÿ¿ÿ¿ÿ¿ÿ¿ÿ¿ÿ¿ÿß_ÿ_ßßßßßï?/ÿ/?ï?¯ï?¯ï?÷ÿ÷·_÷—÷û ÿ ë»Oû›oû \ No newline at end of file
diff --git a/gfx/tilesets/tower-pillar/3.png b/gfx/tilesets/tower-pillar/3.png
new file mode 100644
index 00000000..80ce4657
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/3.png
Binary files differ
diff --git a/gfx/tilesets/tower-pillar/4.2bpp b/gfx/tilesets/tower-pillar/4.2bpp
new file mode 100644
index 00000000..08897f1d
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/4.2bpp
@@ -0,0 +1 @@
+ßðØ÷ÐðßðÙößðßðÞñïøèÿèøïøéþïøïøîù÷üôÿôü÷üõþ÷ü÷üöýûþúÿúþûþûþûþûþúÿýÿýÿýÿýÿýÿýÿýÿýÿ \ No newline at end of file
diff --git a/gfx/tilesets/tower-pillar/4.png b/gfx/tilesets/tower-pillar/4.png
new file mode 100644
index 00000000..9d523c4b
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/4.png
Binary files differ
diff --git a/gfx/tilesets/tower-pillar/5.2bpp b/gfx/tilesets/tower-pillar/5.2bpp
new file mode 100644
index 00000000..f66926ba
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/5.2bpp
@@ -0,0 +1 @@
+¿ÿ¿ÿ¿ÿ¿ÿ¿ÿ¿ÿ¿ÿ¿ÿß_ÿ_ÿßÿßÿßÿßÿßÿï?/ÿoÿ¯ÿïÿïÿïÿïÿ÷ÿWÿ·ÿ÷ÿ÷ÿ÷ÿ÷ÿû ÿ[ÿ«ÿûÿûÿûÿûÿ \ No newline at end of file
diff --git a/gfx/tilesets/tower-pillar/5.png b/gfx/tilesets/tower-pillar/5.png
new file mode 100644
index 00000000..b7796c8d
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/5.png
Binary files differ
diff --git a/gfx/tilesets/tower-pillar/6.2bpp b/gfx/tilesets/tower-pillar/6.2bpp
new file mode 100644
index 00000000..5021b1c1
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/6.2bpp
@@ -0,0 +1 @@
+ßðØÿÕÿÚÿßÿßÿßÿßÿïøèÿíÿêÿïÿïÿïÿïÿ÷üôÿõÿöÿ÷ÿ÷ÿ÷ÿ÷ÿûþúÿûÿúÿûÿûÿûÿûÿýÿýÿýÿýÿýÿýÿýÿýÿ \ No newline at end of file
diff --git a/gfx/tilesets/tower-pillar/6.png b/gfx/tilesets/tower-pillar/6.png
new file mode 100644
index 00000000..0ca0e593
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/6.png
Binary files differ
diff --git a/gfx/tilesets/tower-pillar/7.2bpp b/gfx/tilesets/tower-pillar/7.2bpp
new file mode 100644
index 00000000..59d6876a
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/7.2bpp
@@ -0,0 +1 @@
+€ÿ‚ý¢Ý ß€ÿ„û„û€ÿÀÿÁþÑîÐïÀÿÂýÂýÀÿàÿàÿè÷è÷àÿáþáþàÿðÿðÿôûôûðÿðÿðÿðÿøÿøÿúýúýøÿøÿøÿøÿ \ No newline at end of file
diff --git a/gfx/tilesets/tower-pillar/7.png b/gfx/tilesets/tower-pillar/7.png
new file mode 100644
index 00000000..3aa4b4e9
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/7.png
Binary files differ
diff --git a/gfx/tilesets/tower-pillar/8.2bpp b/gfx/tilesets/tower-pillar/8.2bpp
new file mode 100644
index 00000000..bb22068b
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/8.2bpp
@@ -0,0 +1 @@
+ÿ?ß?ßÿÿ_¿_¿ÿÿïïÿÿ/ß/ßÿÿ÷÷ÿÿïïÿÿûûÿÿ ÷ ÷ÿÿýýÿÿûûÿ \ No newline at end of file
diff --git a/gfx/tilesets/tower-pillar/8.png b/gfx/tilesets/tower-pillar/8.png
new file mode 100644
index 00000000..e8147561
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/8.png
Binary files differ
diff --git a/gfx/tilesets/tower-pillar/9.2bpp b/gfx/tilesets/tower-pillar/9.2bpp
new file mode 100644
index 00000000..1c206fb7
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/9.2bpp
@@ -0,0 +1 @@
+ ÿÅÿªÿÝÿêÿÝÿÿÿÿÿÐÿâÿÕÿîÿõÿîÿÿÿÿÿèÿñÿêÿ÷ÿúÿ÷ÿÿÿÿÿôÿøÿõÿûÿýÿûÿÿÿÿÿúÿüÿúÿýÿþÿýÿÿÿÿÿ \ No newline at end of file
diff --git a/gfx/tilesets/tower-pillar/9.png b/gfx/tilesets/tower-pillar/9.png
new file mode 100644
index 00000000..da74607b
--- /dev/null
+++ b/gfx/tilesets/tower-pillar/9.png
Binary files differ
diff --git a/gfx/tilesets/water/water.2bpp b/gfx/tilesets/water/water.2bpp
new file mode 100644
index 00000000..a6e9f6ac
--- /dev/null
+++ b/gfx/tilesets/water/water.2bpp
Binary files differ
diff --git a/gfx/tilesets/water/water.png b/gfx/tilesets/water/water.png
new file mode 100644
index 00000000..0aa2640c
--- /dev/null
+++ b/gfx/tilesets/water/water.png
Binary files differ
diff --git a/gfx/tilesets/whirlpool/1.2bpp b/gfx/tilesets/whirlpool/1.2bpp
new file mode 100644
index 00000000..0a58c6b2
--- /dev/null
+++ b/gfx/tilesets/whirlpool/1.2bpp
Binary files differ
diff --git a/gfx/tilesets/whirlpool/1.png b/gfx/tilesets/whirlpool/1.png
new file mode 100644
index 00000000..4641dbc0
--- /dev/null
+++ b/gfx/tilesets/whirlpool/1.png
Binary files differ
diff --git a/gfx/tilesets/whirlpool/2.2bpp b/gfx/tilesets/whirlpool/2.2bpp
new file mode 100644
index 00000000..e1f841cf
--- /dev/null
+++ b/gfx/tilesets/whirlpool/2.2bpp
Binary files differ
diff --git a/gfx/tilesets/whirlpool/2.png b/gfx/tilesets/whirlpool/2.png
new file mode 100644
index 00000000..ce542405
--- /dev/null
+++ b/gfx/tilesets/whirlpool/2.png
Binary files differ
diff --git a/gfx/tilesets/whirlpool/3.2bpp b/gfx/tilesets/whirlpool/3.2bpp
new file mode 100644
index 00000000..9cdec833
--- /dev/null
+++ b/gfx/tilesets/whirlpool/3.2bpp
Binary files differ
diff --git a/gfx/tilesets/whirlpool/3.png b/gfx/tilesets/whirlpool/3.png
new file mode 100644
index 00000000..55b62944
--- /dev/null
+++ b/gfx/tilesets/whirlpool/3.png
Binary files differ
diff --git a/gfx/tilesets/whirlpool/4.2bpp b/gfx/tilesets/whirlpool/4.2bpp
new file mode 100644
index 00000000..414acce0
--- /dev/null
+++ b/gfx/tilesets/whirlpool/4.2bpp
Binary files differ
diff --git a/gfx/tilesets/whirlpool/4.png b/gfx/tilesets/whirlpool/4.png
new file mode 100644
index 00000000..2175c595
--- /dev/null
+++ b/gfx/tilesets/whirlpool/4.png
Binary files differ
diff --git a/main.asm b/main.asm
index 2bad31c3..d05a38e9 100644
--- a/main.asm
+++ b/main.asm
@@ -829,49 +829,8 @@ DoBadgeTypeBoosts::
SECTION "bank3f", ROMX
- nop
-DummyPredef3A::
+INCLUDE "engine/tilesets/tileset_anims.asm"
ret
- ret
-_AnimateTileset::
- dr $fc003, $fc01e
-Tileset0Anim::
-TilesetJohtoModernAnim::
-TilesetKantoAnim::
-TilesetParkAnim::
-TilesetForestAnim::
- dr $fc01e, $fc04a
-TilesetJohtoAnim::
- dr $fc04a, $fc0d6
-TilesetPortAnim::
- dr $fc0d6, $fc106
-TilesetEliteFourRoomAnim::
- dr $fc106, $fc18e
-TilesetCaveAnim::
-TilesetDarkCaveAnim::
- dr $fc18e, $fc1da
-TilesetIcePathAnim::
- dr $fc1da, $fc226
-TilesetTowerAnim::
- dr $fc226, $fc28e
-TilesetHouseAnim::
-TilesetPlayersHouseAnim::
-TilesetPokecenterAnim::
-TilesetGateAnim::
-TilesetLabAnim::
-TilesetFacilityAnim::
-TilesetMartAnim::
-TilesetMansionAnim::
-TilesetGameCornerAnim::
-TilesetTraditionalHouseAnim::
-TilesetTrainStationAnim::
-TilesetChampionsRoomAnim::
-TilesetLighthouseAnim::
-TilesetPlayersRoomAnim::
-TilesetRuinsOfAlphAnim::
-TilesetRadioTowerAnim::
-TilesetUndergroundAnim::
- dr $fc28e, $fc9ae
NPCTrade::
dr $fc9ae, $fcd87
MomTriesToBuySomething::
diff --git a/wram.asm b/wram.asm
index 63624292..1892b3ec 100644
--- a/wram.asm
+++ b/wram.asm
@@ -971,22 +971,7 @@ wAttrmap:: ; ccd9
ds SCREEN_WIDTH * SCREEN_HEIGHT
wAttrmapEnd::
-wce41:: ds 1 ; ce41
-wce42:: ds 1 ; ce42
-wce43:: ds 1 ; ce43
-wce44:: ds 1 ; ce44
-wce45:: ds 1 ; ce45
-wce46:: ds 1 ; ce46
-wce47:: ds 1 ; ce47
-wce48:: ds 1 ; ce48
-wce49:: ds 1 ; ce49
-wce4a:: ds 1 ; ce4a
-wce4b:: ds 1 ; ce4b
-wce4c:: ds 1 ; ce4c
-wce4d:: ds 1 ; ce4d
-wce4e:: ds 1 ; ce4e
-wce4f:: ds 1 ; ce4f
-wce50:: ds 1 ; ce50
+wTileAnimBuffer:: ds 1 tiles ; ce41
wOtherPlayerLinkMode:: db ; ce51
wOtherPlayerLinkAction:: ; ce52
@@ -1482,7 +1467,7 @@ ENDU ; cf40
wPlaceBallsX:: db ; cf40
wPlaceBallsY:: db ; cf41
-wcf42:: ds 1 ; cf42
+wTileAnimationTimer:: db ; cf42
; palette backups?
wBGP:: db