mirror of
https://github.com/thornAvery/jep-hack.git
synced 2025-11-11 07:54:46 +13:00
This adds Rock Climb functionality to Strong Arm and Dive functionality to Water Sport, as discussed in the server. HMs have been added, but we need 16bit Items to add Wind Ride, and I haven't finished their functionality.
The Rock Climb tile is a bit terrible, it's not easy to notice. Maybe change so that it works well with yellow or another colour?
This does not build due to issues with effect_commands.asm, but since Zeta is meant to be working on the mapping and Water Sport anyway, it seems to be up his alley.
I ported over much of the underwater assets Rangi was using as they looked very pretty. I imagine it'll be fun to utilise going forward. May as well, right?
I shall now lay down in a dark room.
Review: c21561ea71 (diff-5508f3b794fc68821ba35e94b6a293b2aaaa16c02a1b34fac70d03fd2f74c4b2R113)
1243 lines
27 KiB
NASM
1243 lines
27 KiB
NASM
_AnimateTileset::
|
|
; Increment [hTileAnimFrame] and run that frame's function
|
|
; from the array pointed to by wTilesetAnim.
|
|
|
|
; Called in WRAM bank 1, VRAM bank 0, so map tiles
|
|
; $80 and above in VRAM bank 1 cannot be animated
|
|
; without switching to that bank themselves.
|
|
|
|
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:
|
|
dw vTiles2 tile $14, AnimateWaterTile
|
|
dw vTiles2 tile $5b, AnimateDeepWaterTile
|
|
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
|
|
|
|
TilesetParkAnim:
|
|
dw vTiles2 tile $14, AnimateWaterTile
|
|
dw NULL, WaitTileAnimation
|
|
dw vTiles2 tile $5f, AnimateFountainTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateWaterPalette
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateFlowerTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
|
|
TilesetForestAnim:
|
|
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, AnimateWaterPalette
|
|
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
|
|
|
|
UnusedTilesetAnim1: ; unreferenced
|
|
; Scrolls tile $03 like cave water, but also has the standard $03 flower tile.
|
|
dw vTiles2 tile $03, ReadTileToAnimBuffer
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw vTiles2 tile $03, WriteTileFromAnimBuffer
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateFlowerTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, DoneTileAnimation
|
|
|
|
UnusedTilesetAnim2: ; unreferenced
|
|
; Scrolls tile $14 like cave water.
|
|
dw vTiles2 tile $14, ReadTileToAnimBuffer
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw vTiles2 tile $14, WriteTileFromAnimBuffer
|
|
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, AnimateLavaBubbleTile2
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateLavaBubbleTile1
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
|
|
UnusedTilesetAnim3: ; unreferenced
|
|
; Scrolls tile $53 like a waterfall; scrolls tile $03 like cave water.
|
|
dw vTiles2 tile $53, ReadTileToAnimBuffer
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw vTiles2 tile $53, WriteTileFromAnimBuffer
|
|
dw vTiles2 tile $03, ReadTileToAnimBuffer
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw vTiles2 tile $03, WriteTileFromAnimBuffer
|
|
dw vTiles2 tile $53, ReadTileToAnimBuffer
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw vTiles2 tile $53, WriteTileFromAnimBuffer
|
|
dw NULL, DoneTileAnimation
|
|
|
|
UnusedTilesetAnim4: ; unreferenced
|
|
; Scrolls tile $54 like a waterfall; scrolls tile $03 like cave water.
|
|
dw vTiles2 tile $54, ReadTileToAnimBuffer
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw vTiles2 tile $54, WriteTileFromAnimBuffer
|
|
dw NULL, WaitTileAnimation
|
|
dw vTiles2 tile $03, ReadTileToAnimBuffer
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw vTiles2 tile $03, WriteTileFromAnimBuffer
|
|
dw NULL, WaitTileAnimation
|
|
dw vTiles2 tile $54, ReadTileToAnimBuffer
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw vTiles2 tile $54, WriteTileFromAnimBuffer
|
|
dw NULL, DoneTileAnimation
|
|
|
|
TilesetCaveAnim:
|
|
TilesetDarkCaveAnim:
|
|
dw vTiles2 tile $14, ReadTileToAnimBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw vTiles2 tile $14, WriteTileFromAnimBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw NULL, AnimateWaterPalette
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw vTiles2 tile $40, ReadTileToAnimBuffer
|
|
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, WriteTileFromAnimBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw NULL, DoneTileAnimation
|
|
|
|
TilesetIcePathAnim:
|
|
dw vTiles2 tile $35, ReadTileToAnimBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw vTiles2 tile $35, WriteTileFromAnimBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw NULL, AnimateWaterPalette
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw vTiles2 tile $31, ReadTileToAnimBuffer
|
|
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, WriteTileFromAnimBuffer
|
|
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
|
|
|
|
TilesetNihon1Anim:
|
|
TilesetNihonBirdonAnim:
|
|
TilesetNihonFontAnim:
|
|
TilesetNihonHighTechAnim:
|
|
TilesetNihonOldAnim:
|
|
TilesetNihonSouthAnim:
|
|
TilesetNihonWestAnim:
|
|
TilesetNihonWhiteCityAnim:
|
|
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
|
|
|
|
TilesetForestKantoAnim:
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateFlowerTile
|
|
dw vTiles2 tile $14, AnimateWaterTile
|
|
dw NULL, AnimateWaterPalette
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
|
|
TilesetNihonSnowyAnim:
|
|
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
|
|
|
|
TilesetKantoAnim:
|
|
dw vTiles2 tile $14, AnimateWaterTile
|
|
dw NULL, AnimateLavaBubbleTile2
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateWaterPalette
|
|
dw NULL, AnimateLavaBubbleTile1
|
|
dw NULL, AnimateFlowerTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
|
|
TilesetSeviiAnim:
|
|
dw vTiles2 tile $14, AnimateWaterTile
|
|
dw vTiles2 tile $53, ReadTileToAnimBuffer
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw vTiles2 tile $53, WriteTileFromAnimBuffer
|
|
dw NULL, AnimateWaterPalette
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateFlowerTile
|
|
dw vTiles2 tile $53, ReadTileToAnimBuffer
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw vTiles2 tile $53, WriteTileFromAnimBuffer
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
|
|
TilesetLushCaveAnim:
|
|
dw vTiles2 tile $14, ReadTileToAnimBuffer
|
|
dw NULL, AnimateFlowerTile
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw vTiles2 tile $14, WriteTileFromAnimBuffer
|
|
dw NULL, AnimateWaterPalette
|
|
dw vTiles2 tile $40, ReadTileToAnimBuffer
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw vTiles2 tile $40, WriteTileFromAnimBuffer
|
|
dw NULL, DoneTileAnimation
|
|
|
|
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:
|
|
TilesetMuseumAnim:
|
|
TilesetLavenderCryptAnim:
|
|
TilesetBlueLabAnim:
|
|
TilesetNihonGateAnim:
|
|
TilesetNihonMartAnim:
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, DoneTileAnimation
|
|
|
|
; Currently unused.
|
|
; Zeta, you've made your own tileset, but check here and see what you want.
|
|
; https://github.com/Rangi42/pokecrystal/commit/c21561ea717feef9b2eb3785c2ea112cd0d19ba0#diff-88dbff1eb3920f69b17a3d5f613643e1a41096514706bc09f449e4aa637f20e4R5647
|
|
TilesetUnderwaterAnim:
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, UnderwaterBubbleTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateSeaweedTile1
|
|
dw NULL, AnimateSeaweedTile2
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
|
|
DoneTileAnimation:
|
|
; Reset the animation command loop.
|
|
xor a
|
|
ldh [hTileAnimFrame], a
|
|
|
|
WaitTileAnimation:
|
|
; Do nothing this frame.
|
|
ret
|
|
|
|
StandingTileFrame8:
|
|
; Tick the wTileAnimationTimer, wrapping from 7 to 0.
|
|
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: ; unreferenced
|
|
; 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, LEN_2BPP_TILE / 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, LEN_2BPP_TILE / 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, LEN_2BPP_TILE - 2
|
|
add hl, bc
|
|
ld a, LEN_2BPP_TILE / 4
|
|
.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, LEN_2BPP_TILE - 2
|
|
push hl
|
|
add hl, de
|
|
ld d, [hl]
|
|
inc hl
|
|
ld e, [hl]
|
|
pop hl
|
|
ld a, LEN_2BPP_TILE / 4
|
|
.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
|
|
|
|
AnimateFountainTile:
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
ld hl, .FountainTileFramePointers
|
|
|
|
; A cycle of 8 frames, updating every tick
|
|
ld a, [wTileAnimationTimer]
|
|
and %111
|
|
|
|
; hl = [.FountainTileFramePointers + a * 2]
|
|
add a
|
|
add l
|
|
ld l, a
|
|
jr nc, .okay
|
|
inc h
|
|
.okay
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
|
|
; Write the tile graphic from hl (now sp) to de (now hl)
|
|
ld sp, hl
|
|
ld l, e
|
|
ld h, d
|
|
jp WriteTile
|
|
|
|
.FountainTileFramePointers:
|
|
dw .FountainTile1
|
|
dw .FountainTile2
|
|
dw .FountainTile3
|
|
dw .FountainTile4
|
|
dw .FountainTile3
|
|
dw .FountainTile4
|
|
dw .FountainTile5
|
|
dw .FountainTile1
|
|
|
|
.FountainTile1: INCBIN "gfx/tilesets/fountain/1.2bpp"
|
|
.FountainTile2: INCBIN "gfx/tilesets/fountain/2.2bpp"
|
|
.FountainTile3: INCBIN "gfx/tilesets/fountain/3.2bpp"
|
|
.FountainTile4: INCBIN "gfx/tilesets/fountain/4.2bpp"
|
|
.FountainTile5: INCBIN "gfx/tilesets/fountain/5.2bpp"
|
|
|
|
AnimateWaterTile:
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; A cycle of 4 frames, updating every other tick
|
|
ld a, [wTileAnimationTimer]
|
|
and %110
|
|
|
|
; hl = .WaterTileFrames + a * 8
|
|
; (a was pre-multiplied by 2 from 'and %110')
|
|
add a
|
|
add a
|
|
add a
|
|
add LOW(.WaterTileFrames)
|
|
ld l, a
|
|
ld a, 0
|
|
adc HIGH(.WaterTileFrames)
|
|
ld h, a
|
|
|
|
; Write the tile graphic from hl (now sp) to de (now hl)
|
|
ld sp, hl
|
|
ld l, e
|
|
ld h, d
|
|
jp WriteTile
|
|
|
|
.WaterTileFrames:
|
|
INCBIN "gfx/tilesets/water/water.2bpp"
|
|
|
|
AnimateDeepWaterTile:
|
|
; Draw a deep 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(DeepWaterTileFrames)
|
|
ld l, a
|
|
ld a, 0
|
|
adc HIGH(DeepWaterTileFrames)
|
|
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
|
|
DeepWaterTileFrames:
|
|
INCBIN "gfx/tilesets/water/deep-water.2bpp"
|
|
|
|
ForestTreeLeftAnimation:
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; Only animate this during the Celebi event
|
|
ld a, [wCelebiEvent]
|
|
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
|
|
jr nz, .do_animation
|
|
ld hl, ForestTreeLeftFrames
|
|
jr .got_frames
|
|
|
|
.do_animation
|
|
; A cycle of 2 frames, updating every tick
|
|
ld a, [wTileAnimationTimer]
|
|
call GetForestTreeFrame
|
|
|
|
; hl = ForestTreeLeftFrames + a * 8
|
|
; (a was pre-multiplied by 2 from GetForestTreeFrame)
|
|
add a
|
|
add a
|
|
add a
|
|
add LOW(ForestTreeLeftFrames)
|
|
ld l, a
|
|
ld a, 0
|
|
adc HIGH(ForestTreeLeftFrames)
|
|
ld h, a
|
|
|
|
.got_frames
|
|
; Write the tile graphic from hl (now sp) to tile $0c (now hl)
|
|
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:
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; Only animate this during the Celebi event
|
|
ld a, [wCelebiEvent]
|
|
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
|
|
jr nz, .do_animation
|
|
ld hl, ForestTreeRightFrames
|
|
jr .got_frames
|
|
|
|
.do_animation
|
|
; A cycle of 2 frames, updating every tick
|
|
ld a, [wTileAnimationTimer]
|
|
call GetForestTreeFrame
|
|
|
|
; hl = ForestTreeRightFrames + a * 8
|
|
; (a was pre-multiplied by 2 from 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
|
|
|
|
.got_frames
|
|
; Write the tile graphic from hl (now sp) to tile $0f (now hl)
|
|
ld sp, hl
|
|
ld hl, vTiles2 tile $0f
|
|
jp WriteTile
|
|
|
|
ForestTreeLeftAnimation2:
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; Only animate this during the Celebi event
|
|
ld a, [wCelebiEvent]
|
|
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
|
|
jr nz, .do_animation
|
|
ld hl, ForestTreeLeftFrames
|
|
jr .got_frames
|
|
|
|
.do_animation
|
|
; A cycle of 2 frames, updating every tick
|
|
ld a, [wTileAnimationTimer]
|
|
call GetForestTreeFrame
|
|
|
|
; Offset by 1 frame from ForestTreeLeftAnimation
|
|
xor %10
|
|
|
|
; hl = ForestTreeLeftFrames + a * 8
|
|
; (a was pre-multiplied by 2 from GetForestTreeFrame)
|
|
add a
|
|
add a
|
|
add a
|
|
add LOW(ForestTreeLeftFrames)
|
|
ld l, a
|
|
ld a, 0
|
|
adc HIGH(ForestTreeLeftFrames)
|
|
ld h, a
|
|
|
|
.got_frames
|
|
; Write the tile graphic from hl (now sp) to tile $0c (now hl)
|
|
ld sp, hl
|
|
ld hl, vTiles2 tile $0c
|
|
jp WriteTile
|
|
|
|
ForestTreeRightAnimation2:
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; Only animate this during the Celebi event
|
|
ld a, [wCelebiEvent]
|
|
bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a
|
|
jr nz, .do_animation
|
|
ld hl, ForestTreeRightFrames
|
|
jr .got_frames
|
|
|
|
.do_animation
|
|
; A cycle of 2 frames, updating every tick
|
|
ld a, [wTileAnimationTimer]
|
|
call GetForestTreeFrame
|
|
|
|
; Offset by 1 frame from ForestTreeRightAnimation
|
|
xor %10
|
|
|
|
; hl = ForestTreeRightFrames + a * 8
|
|
; (a was pre-multiplied by 2 from 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
|
|
|
|
.got_frames
|
|
; Write the tile graphic from hl (now sp) to tile $0f (now hl)
|
|
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:
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; A cycle of 2 frames, updating every other tick
|
|
ld a, [wTileAnimationTimer]
|
|
and %10
|
|
|
|
; CGB has different tile graphics for flowers
|
|
ld e, a
|
|
ld a, [wOptions2]
|
|
and 1 << MENU_ACCOUNT
|
|
add e
|
|
|
|
; hl = .FlowerTileFrames + a * 16
|
|
swap a
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, .FlowerTileFrames
|
|
add hl, de
|
|
|
|
; Write the tile graphic from hl (now sp) to tile $03 (now hl)
|
|
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"
|
|
|
|
|
|
AnimateLavaBubbleTile1:
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; A cycle of 4 frames, updating every other tick
|
|
ld a, [wTileAnimationTimer]
|
|
and %110
|
|
|
|
; Offset by 2 frames from AnimateLavaBubbleTile2
|
|
srl a
|
|
inc a
|
|
inc a
|
|
and %011
|
|
|
|
; hl = LavaBubbleTileFrames + a * 16
|
|
swap a
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, LavaBubbleTileFrames
|
|
add hl, de
|
|
|
|
; Write the tile graphic from hl (now sp) to tile $5b (now hl)
|
|
ld sp, hl
|
|
ld hl, vTiles2 tile $5b
|
|
jp WriteTile
|
|
|
|
AnimateLavaBubbleTile2:
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; A cycle of 4 frames, updating every other tick
|
|
ld a, [wTileAnimationTimer]
|
|
and %110
|
|
|
|
; hl = LavaBubbleTileFrames + a * 8
|
|
; (a was pre-multiplied by 2 from 'and %110')
|
|
add a
|
|
add a
|
|
add a
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, LavaBubbleTileFrames
|
|
add hl, de
|
|
|
|
; Write the tile graphic from hl (now sp) to tile $38 (now hl)
|
|
ld sp, hl
|
|
ld hl, vTiles2 tile $38
|
|
jp WriteTile
|
|
|
|
LavaBubbleTileFrames:
|
|
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:
|
|
; Input de points to the destination in VRAM, then the source tile frames
|
|
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; A cycle of 8 frames, updating every tick
|
|
ld a, [wTileAnimationTimer]
|
|
and %111
|
|
|
|
; a = [.TowerPillarTileFrameOffsets + a]
|
|
ld hl, .TowerPillarTileFrameOffsets
|
|
add l
|
|
ld l, a
|
|
ld a, 0
|
|
adc h
|
|
ld h, a
|
|
ld a, [hl]
|
|
|
|
; de = the destination in VRAM
|
|
ld l, e
|
|
ld h, d
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
inc hl
|
|
|
|
; hl = the source tile frames + offset a
|
|
add [hl]
|
|
inc hl
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, 0
|
|
adc h
|
|
ld h, a
|
|
|
|
; Write the tile graphic from hl (now sp) to de (now hl)
|
|
ld sp, hl
|
|
ld l, e
|
|
ld h, d
|
|
jr WriteTile
|
|
|
|
.TowerPillarTileFrameOffsets:
|
|
db 0 tiles
|
|
db 1 tiles
|
|
db 2 tiles
|
|
db 3 tiles
|
|
db 4 tiles
|
|
db 3 tiles
|
|
db 2 tiles
|
|
db 1 tiles
|
|
|
|
StandingTileFrame:
|
|
; Tick the wTileAnimationTimer.
|
|
ld hl, wTileAnimationTimer
|
|
inc [hl]
|
|
ret
|
|
|
|
AnimateWhirlpoolTile:
|
|
; Input de points to the destination in VRAM, then the source tile frames
|
|
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; de = the destination in VRAM
|
|
ld l, e
|
|
ld h, d
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
inc hl
|
|
|
|
; A cycle of 4 frames, updating every tick
|
|
ld a, [wTileAnimationTimer]
|
|
and %11
|
|
|
|
; hl = the source tile frames + a * 16
|
|
swap a
|
|
add [hl]
|
|
inc hl
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, 0
|
|
adc h
|
|
ld h, a
|
|
|
|
; Write the tile graphic from hl (now sp) to de (now hl)
|
|
ld sp, hl
|
|
ld l, e
|
|
ld h, d
|
|
jr WriteTile
|
|
|
|
WriteTileFromAnimBuffer:
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; Write the tile graphic from wTileAnimBuffer (now sp) to de (now hl)
|
|
ld hl, wTileAnimBuffer
|
|
ld sp, hl
|
|
ld h, d
|
|
ld l, e
|
|
jr WriteTile
|
|
|
|
ReadTileToAnimBuffer:
|
|
; Save the stack pointer in bc for WriteTile to restore
|
|
ld hl, sp+0
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; Write the tile graphic from de (now sp) to wTileAnimBuffer (now hl)
|
|
ld h, d
|
|
ld l, e
|
|
ld sp, hl
|
|
ld hl, wTileAnimBuffer
|
|
; fallthrough
|
|
|
|
WriteTile:
|
|
; Write one tile from sp to hl.
|
|
; The stack pointer has been saved in bc.
|
|
|
|
; This function cannot be called, only jumped to,
|
|
; because it relocates the stack pointer to quickly
|
|
; copy data with a "pop slide".
|
|
|
|
pop de
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
rept (LEN_2BPP_TILE - 2) / 2
|
|
pop de
|
|
inc hl
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
endr
|
|
|
|
; Restore the stack pointer from bc
|
|
ld h, b
|
|
ld l, c
|
|
ld sp, hl
|
|
ret
|
|
|
|
AnimateWaterPalette:
|
|
; Transition between color values 0-2 for color 0 in palette 3.
|
|
|
|
; Don't update the palette on DMG
|
|
ld a, [wOptions2]
|
|
and 1 << MENU_ACCOUNT
|
|
ret z
|
|
|
|
; Don't update a non-standard palette order
|
|
ldh a, [rBGP]
|
|
cp %11100100
|
|
ret nz
|
|
|
|
; Only update on even ticks
|
|
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 color 0
|
|
ldh [rBGPI], a
|
|
|
|
ldh a, [rSVBK]
|
|
push af
|
|
ld a, BANK(wBGPals1)
|
|
ldh [rSVBK], a
|
|
|
|
; A cycle of 4 colors (0 1 2 1), updating every other tick
|
|
ld a, l
|
|
and %110
|
|
jr z, .color0
|
|
cp %100
|
|
jr z, .color2
|
|
|
|
; Copy one color from hl to rBGPI via rBGPD
|
|
|
|
; color1
|
|
ld hl, wBGPals1 palette PAL_BG_WATER color 1
|
|
ld a, [hli]
|
|
ldh [rBGPD], a
|
|
ld a, [hli]
|
|
ldh [rBGPD], a
|
|
jr .end
|
|
|
|
.color0
|
|
ld hl, wBGPals1 palette PAL_BG_WATER color 0
|
|
ld a, [hli]
|
|
ldh [rBGPD], a
|
|
ld a, [hli]
|
|
ldh [rBGPD], a
|
|
jr .end
|
|
|
|
.color2
|
|
ld hl, wBGPals1 palette PAL_BG_WATER color 2
|
|
ld a, [hli]
|
|
ldh [rBGPD], a
|
|
ld a, [hli]
|
|
ldh [rBGPD], a
|
|
|
|
.end
|
|
pop af
|
|
ldh [rSVBK], a
|
|
ret
|
|
|
|
FlickeringCaveEntrancePalette:
|
|
; Don't update the palette on DMG
|
|
ld a, [wOptions2]
|
|
and 1 << MENU_ACCOUNT
|
|
ret z
|
|
|
|
; Don't update a non-standard palette order
|
|
ldh a, [rBGP]
|
|
cp %11100100
|
|
ret nz
|
|
|
|
; We only want to be here if we're in a dark cave.
|
|
ld a, [wTimeOfDayPalset]
|
|
cp DARKNESS_PALSET
|
|
ret nz
|
|
|
|
ldh a, [rSVBK]
|
|
push af
|
|
ld a, BANK(wBGPals1)
|
|
ldh [rSVBK], a
|
|
|
|
; Ready for BGPD input
|
|
ld a, (1 << rBGPI_AUTO_INCREMENT) palette PAL_BG_YELLOW color 0
|
|
ldh [rBGPI], a
|
|
|
|
; A cycle of 2 colors (0 2), updating every other vblank
|
|
ldh a, [hVBlankCounter]
|
|
and %10
|
|
jr nz, .color1
|
|
|
|
; Copy one color from hl to rBGPI via rBGPD
|
|
|
|
; color0
|
|
ld hl, wBGPals1 palette PAL_BG_YELLOW color 0
|
|
jr .okay
|
|
|
|
.color1
|
|
ld hl, wBGPals1 palette PAL_BG_YELLOW color 1
|
|
|
|
.okay
|
|
ld a, [hli]
|
|
ldh [rBGPD], a
|
|
ld a, [hli]
|
|
ldh [rBGPD], a
|
|
|
|
pop af
|
|
ldh [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"
|
|
|
|
UnderwaterBubbleTile:
|
|
; No parameters.
|
|
; Save sp in bc (see WriteTile).
|
|
ld hl, sp+$0
|
|
ld b, h
|
|
ld c, l
|
|
; Alternate tile graphic every frame
|
|
ld a, [wTileAnimationTimer]
|
|
and %111 ; 8 frames
|
|
swap a ; * 16 bytes per tile
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, UnderwaterBubbleTileFrames
|
|
add hl, de
|
|
ld sp, hl
|
|
ld hl, vTiles2 tile $13 ; index of bubble tile
|
|
jp WriteTile
|
|
|
|
UnderwaterBubbleTileFrames:
|
|
INCBIN "gfx/tilesets/bubble/1.2bpp"
|
|
INCBIN "gfx/tilesets/bubble/2.2bpp"
|
|
INCBIN "gfx/tilesets/bubble/3.2bpp"
|
|
INCBIN "gfx/tilesets/bubble/4.2bpp"
|
|
INCBIN "gfx/tilesets/bubble/5.2bpp"
|
|
INCBIN "gfx/tilesets/bubble/5.2bpp"
|
|
INCBIN "gfx/tilesets/bubble/5.2bpp"
|
|
INCBIN "gfx/tilesets/bubble/5.2bpp"
|
|
|
|
AnimateSeaweedTile1:
|
|
; No parameters.
|
|
; Save sp in bc (see WriteTile).
|
|
ld hl, sp+$0
|
|
ld b, h
|
|
ld c, l
|
|
; Alternate tile graphic every eighth frame
|
|
ld a, [wTileAnimationTimer]
|
|
and %100
|
|
srl a
|
|
srl a
|
|
swap a ; * 16 bytes per tile
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, SeaweedTileFrames
|
|
add hl, de
|
|
ld sp, hl
|
|
ld hl, vTiles2 tile $03 ; index of seaweed tile 1
|
|
jp WriteTile
|
|
|
|
AnimateSeaweedTile2:
|
|
; No parameters.
|
|
; Save sp in bc (see WriteTile).
|
|
ld hl, sp+$0
|
|
ld b, h
|
|
ld c, l
|
|
; Alternate tile graphic every eighth frame
|
|
ld a, [wTileAnimationTimer]
|
|
xor %100 ; invert tile alternation from AnimateSeaweedTile1
|
|
and %100
|
|
srl a
|
|
srl a
|
|
swap a ; * 16 bytes per tile
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, SeaweedTileFrames
|
|
add hl, de
|
|
ld sp, hl
|
|
ld hl, vTiles2 tile $04 ; index of seaweed tile 2
|
|
jp WriteTile
|
|
|
|
SeaweedTileFrames:
|
|
INCBIN "gfx/tilesets/seaweed/1.2bpp"
|
|
INCBIN "gfx/tilesets/seaweed/2.2bpp"
|