mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-09-09 09:51:34 -07:00
e6ea1889fb
The former is arguably misleading (as you don’t access the memory location in hl to retrieve the jump location), and is consequently deprecated in newer versions of rgbds. This fix silences these deprecation warnings.
1064 lines
20 KiB
NASM
1064 lines
20 KiB
NASM
|
|
_AnimateTileset:: ; fc000
|
|
; Iterate over a given pointer array of
|
|
; animation functions (one per frame).
|
|
|
|
; Typically in wra1, vra0
|
|
|
|
ld a, [TilesetAnim]
|
|
ld e, a
|
|
ld a, [TilesetAnim + 1]
|
|
ld d, a
|
|
|
|
ld a, [hTileAnimFrame]
|
|
ld l, a
|
|
inc a
|
|
ld [hTileAnimFrame], a
|
|
|
|
ld h, 0
|
|
add hl, hl
|
|
add hl, hl
|
|
add hl, de
|
|
|
|
; 2-byte parameter
|
|
; All functions take input de.
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
inc hl
|
|
|
|
; Function address
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
|
|
jp hl
|
|
; fc01b
|
|
|
|
Tileset00Anim: ; 0xfc01b
|
|
Tileset02Anim: ; 0xfc01b
|
|
Tileset03Anim: ; 0xfc01b
|
|
dw VTiles2 tile $14, AnimateWaterTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, TileAnimationPalette
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateFlowerTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc047
|
|
|
|
Tileset25Anim: ; 0xfc047
|
|
dw VTiles2 tile $14, AnimateWaterTile
|
|
dw NULL, WaitTileAnimation
|
|
dw VTiles2 tile $5f, AnimateFountain
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, TileAnimationPalette
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateFlowerTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc073
|
|
|
|
Tileset31Anim: ; 0xfc073
|
|
dw NULL, ForestTreeLeftAnimation
|
|
dw NULL, ForestTreeRightAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, ForestTreeLeftAnimation2
|
|
dw NULL, ForestTreeRightAnimation2
|
|
dw NULL, AnimateFlowerTile
|
|
dw VTiles2 tile $14, AnimateWaterTile
|
|
dw NULL, TileAnimationPalette
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc0a3
|
|
|
|
Tileset01Anim: ; 0xfc0a3
|
|
dw VTiles2 tile $14, AnimateWaterTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, TileAnimationPalette
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateFlowerTile
|
|
dw WhirlpoolFrames1, AnimateWhirlpoolTile
|
|
dw WhirlpoolFrames2, AnimateWhirlpoolTile
|
|
dw WhirlpoolFrames3, AnimateWhirlpoolTile
|
|
dw WhirlpoolFrames4, AnimateWhirlpoolTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc0d7
|
|
|
|
TilesetAnimfc0d7: ; 0xfc0d7
|
|
dw VTiles2 tile $03, WriteTileToBuffer
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw VTiles2 tile $03, WriteTileFromBuffer
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, AnimateFlowerTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc103
|
|
|
|
TilesetAnimfc103: ; 0xfc103
|
|
dw VTiles2 tile $14, WriteTileToBuffer
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw VTiles2 tile $14, WriteTileFromBuffer
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc12f
|
|
|
|
Tileset09Anim: ; 0xfc12f
|
|
dw VTiles2 tile $14, AnimateWaterTile
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, TileAnimationPalette
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc15f
|
|
|
|
Tileset15Anim: ; 0xfc15f
|
|
dw NULL, SafariFountainAnim2
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, SafariFountainAnim1
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, StandingTileFrame8
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc17f
|
|
|
|
TilesetAnimfc17f: ; 0xfc17f
|
|
dw VTiles2 tile $53, WriteTileToBuffer
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw VTiles2 tile $53, WriteTileFromBuffer
|
|
dw VTiles2 tile $03, WriteTileToBuffer
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw VTiles2 tile $03, WriteTileFromBuffer
|
|
dw VTiles2 tile $53, WriteTileToBuffer
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw VTiles2 tile $53, WriteTileFromBuffer
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc1af
|
|
|
|
TilesetAnimfc1af: ; 0xfc1af
|
|
dw VTiles2 tile $54, WriteTileToBuffer
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw VTiles2 tile $54, WriteTileFromBuffer
|
|
dw NULL, WaitTileAnimation
|
|
dw VTiles2 tile $03, WriteTileToBuffer
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw VTiles2 tile $03, WriteTileFromBuffer
|
|
dw NULL, WaitTileAnimation
|
|
dw VTiles2 tile $54, WriteTileToBuffer
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw VTiles2 tile $54, WriteTileFromBuffer
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc1e7
|
|
|
|
Tileset24Anim: ; 0xfc1e7
|
|
Tileset30Anim: ; 0xfc1e7
|
|
dw VTiles2 tile $14, WriteTileToBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw VTiles2 tile $14, WriteTileFromBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw NULL, TileAnimationPalette
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw VTiles2 tile $40, WriteTileToBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw VTiles2 tile $40, WriteTileFromBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc233
|
|
|
|
Tileset29Anim: ; 0xfc233
|
|
dw VTiles2 tile $35, WriteTileToBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw VTiles2 tile $35, WriteTileFromBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw NULL, TileAnimationPalette
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw VTiles2 tile $31, WriteTileToBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw wTileAnimBuffer, ScrollTileDown
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw VTiles2 tile $31, WriteTileFromBuffer
|
|
dw NULL, FlickeringCaveEntrancePalette
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc27f
|
|
|
|
Tileset23Anim: ; 0xfc27f
|
|
dw SproutPillarTilePointer9, AnimateSproutPillarTile
|
|
dw SproutPillarTilePointer10, AnimateSproutPillarTile
|
|
dw SproutPillarTilePointer7, AnimateSproutPillarTile
|
|
dw SproutPillarTilePointer8, AnimateSproutPillarTile
|
|
dw SproutPillarTilePointer5, AnimateSproutPillarTile
|
|
dw SproutPillarTilePointer6, AnimateSproutPillarTile
|
|
dw SproutPillarTilePointer3, AnimateSproutPillarTile
|
|
dw SproutPillarTilePointer4, AnimateSproutPillarTile
|
|
dw SproutPillarTilePointer1, AnimateSproutPillarTile
|
|
dw SproutPillarTilePointer2, AnimateSproutPillarTile
|
|
dw NULL, StandingTileFrame
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc2bf
|
|
|
|
TilesetAnimfc2bf: ; 0xfc2bf
|
|
dw VTiles2 tile $4f, WriteTileToBuffer
|
|
dw wTileAnimBuffer, ScrollTileRightLeft
|
|
dw VTiles2 tile $4f, WriteTileFromBuffer
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc2e7
|
|
|
|
Tileset04Anim: ; 0xfc2e7
|
|
Tileset05Anim: ; 0xfc2e7
|
|
Tileset06Anim: ; 0xfc2e7
|
|
Tileset07Anim: ; 0xfc2e7
|
|
Tileset08Anim: ; 0xfc2e7
|
|
Tileset10Anim: ; 0xfc2e7
|
|
Tileset11Anim: ; 0xfc2e7
|
|
Tileset12Anim: ; 0xfc2e7
|
|
Tileset13Anim: ; 0xfc2e7
|
|
Tileset14Anim: ; 0xfc2e7
|
|
Tileset16Anim: ; 0xfc2e7
|
|
Tileset17Anim: ; 0xfc2e7
|
|
Tileset18Anim: ; 0xfc2e7
|
|
Tileset19Anim: ; 0xfc2e7
|
|
Tileset20Anim: ; 0xfc2e7
|
|
Tileset21Anim: ; 0xfc2e7
|
|
Tileset22Anim: ; 0xfc2e7
|
|
Tileset26Anim: ; 0xfc2e7
|
|
Tileset27Anim: ; 0xfc2e7
|
|
Tileset28Anim: ; 0xfc2e7
|
|
Tileset32Anim: ; 0xfc2e7
|
|
Tileset33Anim: ; 0xfc2e7
|
|
Tileset34Anim: ; 0xfc2e7
|
|
Tileset35Anim: ; 0xfc2e7
|
|
Tileset36Anim: ; 0xfc2e7
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, WaitTileAnimation
|
|
dw NULL, DoneTileAnimation
|
|
; 0xfc2fb
|
|
|
|
DoneTileAnimation: ; fc2fb
|
|
; Reset the animation command loop.
|
|
xor a
|
|
ld [hTileAnimFrame], a
|
|
|
|
WaitTileAnimation: ; fc2fe
|
|
; Do nothing this frame.
|
|
ret
|
|
; fc2ff
|
|
|
|
StandingTileFrame8: ; fc2ff
|
|
ld a, [TileAnimationTimer]
|
|
inc a
|
|
and a, 7
|
|
ld [TileAnimationTimer], a
|
|
ret
|
|
; fc309
|
|
|
|
|
|
ScrollTileRightLeft: ; fc309
|
|
; Scroll right for 4 ticks, then left for 4 ticks.
|
|
ld a, [TileAnimationTimer]
|
|
inc a
|
|
and 7
|
|
ld [TileAnimationTimer], a
|
|
and 4
|
|
jr nz, ScrollTileLeft
|
|
jr ScrollTileRight
|
|
; fc318
|
|
|
|
ScrollTileUpDown: ; fc318
|
|
; Scroll up for 4 ticks, then down for 4 ticks.
|
|
ld a, [TileAnimationTimer]
|
|
inc a
|
|
and 7
|
|
ld [TileAnimationTimer], a
|
|
and 4
|
|
jr nz, ScrollTileDown
|
|
jr ScrollTileUp
|
|
; fc327
|
|
|
|
ScrollTileLeft: ; fc327
|
|
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
|
|
; fc33b
|
|
|
|
ScrollTileRight: ; fc33b
|
|
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
|
|
; fc34f
|
|
|
|
ScrollTileUp: ; fc34f
|
|
ld h, d
|
|
ld l, e
|
|
ld d, [hl]
|
|
inc hl
|
|
ld e, [hl]
|
|
ld bc, $e
|
|
add hl, bc
|
|
ld a, 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
|
|
; fc36a
|
|
|
|
ScrollTileDown: ; fc36a
|
|
ld h, d
|
|
ld l, e
|
|
ld de, $e
|
|
push hl
|
|
add hl, de
|
|
ld d, [hl]
|
|
inc hl
|
|
ld e, [hl]
|
|
pop hl
|
|
ld a, 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
|
|
; fc387
|
|
|
|
|
|
AnimateFountain: ; fc387
|
|
ld hl, [sp+0]
|
|
ld b, h
|
|
ld c, l
|
|
ld hl, .frames
|
|
ld a, [TileAnimationTimer]
|
|
and 7
|
|
add a
|
|
add l
|
|
ld l, a
|
|
jr nc, .okay
|
|
inc h
|
|
.okay
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld sp, hl
|
|
ld l, e
|
|
ld h, d
|
|
jp WriteTile
|
|
|
|
.frames
|
|
dw .frame1
|
|
dw .frame2
|
|
dw .frame3
|
|
dw .frame4
|
|
dw .frame3
|
|
dw .frame4
|
|
dw .frame5
|
|
dw .frame1
|
|
|
|
.frame1 INCBIN "gfx/tilesets/fountain/1.2bpp"
|
|
.frame2 INCBIN "gfx/tilesets/fountain/2.2bpp"
|
|
.frame3 INCBIN "gfx/tilesets/fountain/3.2bpp"
|
|
.frame4 INCBIN "gfx/tilesets/fountain/4.2bpp"
|
|
.frame5 INCBIN "gfx/tilesets/fountain/5.2bpp"
|
|
; fc402
|
|
|
|
|
|
AnimateWaterTile: ; fc402
|
|
; 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, [TileAnimationTimer]
|
|
|
|
; 4 tile graphics, updated every other frame.
|
|
and 3 << 1
|
|
|
|
; 2 x 8 = 16 bytes per tile
|
|
add a
|
|
add a
|
|
add a
|
|
|
|
add WaterTileFrames % $100
|
|
ld l, a
|
|
ld a, 0
|
|
adc WaterTileFrames / $100
|
|
ld h, a
|
|
|
|
; Stack now points to the start of the tile for this frame.
|
|
ld sp, hl
|
|
|
|
ld l, e
|
|
ld h, d
|
|
|
|
jp WriteTile
|
|
; fc41c
|
|
|
|
WaterTileFrames: ; fc41c
|
|
INCBIN "gfx/tilesets/water.2bpp"
|
|
; fc45c
|
|
|
|
|
|
ForestTreeLeftAnimation: ; fc45c
|
|
ld hl, [sp+0]
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; Only during the Celebi event.
|
|
ld a, [wCelebiEvent]
|
|
bit 2, a
|
|
jr nz, .asm_fc46c
|
|
ld hl, ForestTreeLeftFrames
|
|
jr .asm_fc47d
|
|
|
|
.asm_fc46c
|
|
ld a, [TileAnimationTimer]
|
|
call GetForestTreeFrame
|
|
add a
|
|
add a
|
|
add a
|
|
add ForestTreeLeftFrames % $100
|
|
ld l, a
|
|
ld a, 0
|
|
adc ForestTreeLeftFrames / $100
|
|
ld h, a
|
|
|
|
.asm_fc47d
|
|
ld sp, hl
|
|
ld hl, VTiles2 tile $0c
|
|
jp WriteTile
|
|
; fc484
|
|
|
|
|
|
ForestTreeLeftFrames: ; fc484
|
|
INCBIN "gfx/tilesets/forest-tree/1.2bpp"
|
|
INCBIN "gfx/tilesets/forest-tree/2.2bpp"
|
|
; fc4a4
|
|
|
|
ForestTreeRightFrames: ; fc4a4
|
|
INCBIN "gfx/tilesets/forest-tree/3.2bpp"
|
|
INCBIN "gfx/tilesets/forest-tree/4.2bpp"
|
|
; fc4c4
|
|
|
|
|
|
ForestTreeRightAnimation: ; fc4c4
|
|
ld hl, [sp+0]
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; Only during the Celebi event.
|
|
ld a, [wCelebiEvent]
|
|
bit 2, a
|
|
jr nz, .asm_fc4d4
|
|
ld hl, ForestTreeRightFrames
|
|
jr .asm_fc4eb
|
|
|
|
.asm_fc4d4
|
|
ld a, [TileAnimationTimer]
|
|
call GetForestTreeFrame
|
|
add a
|
|
add a
|
|
add a
|
|
add ForestTreeLeftFrames % $100
|
|
ld l, a
|
|
ld a, 0
|
|
adc ForestTreeLeftFrames / $100
|
|
ld h, a
|
|
push bc
|
|
ld bc, ForestTreeRightFrames - ForestTreeLeftFrames
|
|
add hl, bc
|
|
pop bc
|
|
|
|
.asm_fc4eb
|
|
ld sp, hl
|
|
ld hl, VTiles2 tile $0f
|
|
jp WriteTile
|
|
; fc4f2
|
|
|
|
|
|
ForestTreeLeftAnimation2: ; fc4f2
|
|
ld hl, [sp+0]
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; Only during the Celebi event.
|
|
ld a, [wCelebiEvent]
|
|
bit 2, a
|
|
jr nz, .asm_fc502
|
|
ld hl, ForestTreeLeftFrames
|
|
jr .asm_fc515
|
|
|
|
.asm_fc502
|
|
ld a, [TileAnimationTimer]
|
|
call GetForestTreeFrame
|
|
xor 2
|
|
add a
|
|
add a
|
|
add a
|
|
add ForestTreeLeftFrames % $100
|
|
ld l, a
|
|
ld a, 0
|
|
adc ForestTreeLeftFrames / $100
|
|
ld h, a
|
|
|
|
.asm_fc515
|
|
ld sp, hl
|
|
ld hl, VTiles2 tile $0c
|
|
jp WriteTile
|
|
; fc51c
|
|
|
|
|
|
ForestTreeRightAnimation2: ; fc51c
|
|
ld hl, [sp+0]
|
|
ld b, h
|
|
ld c, l
|
|
|
|
; Only during the Celebi event.
|
|
ld a, [wCelebiEvent]
|
|
bit 2, a
|
|
jr nz, .asm_fc52c
|
|
ld hl, ForestTreeRightFrames
|
|
jr .asm_fc545
|
|
|
|
.asm_fc52c
|
|
ld a, [TileAnimationTimer]
|
|
call GetForestTreeFrame
|
|
xor 2
|
|
add a
|
|
add a
|
|
add a
|
|
add ForestTreeLeftFrames % $100
|
|
ld l, a
|
|
ld a, 0
|
|
adc ForestTreeLeftFrames / $100
|
|
ld h, a
|
|
push bc
|
|
ld bc, ForestTreeRightFrames - ForestTreeLeftFrames
|
|
add hl, bc
|
|
pop bc
|
|
|
|
.asm_fc545
|
|
ld sp, hl
|
|
ld hl, VTiles2 tile $0f
|
|
jp WriteTile
|
|
; fc54c
|
|
|
|
|
|
GetForestTreeFrame: ; fc54c
|
|
; 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
|
|
; fc56d
|
|
|
|
|
|
AnimateFlowerTile: ; fc56d
|
|
; 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, [TileAnimationTimer]
|
|
and 1 << 1
|
|
ld e, a
|
|
|
|
; CGB has different color mappings for flowers.
|
|
ld a, [hCGB]
|
|
and 1
|
|
|
|
add e
|
|
swap a ; << 4 (16 bytes)
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, FlowerTileFrames
|
|
add hl, de
|
|
ld sp, hl
|
|
|
|
ld hl, VTiles2 + $30 ; tile 4
|
|
|
|
jp WriteTile
|
|
; fc58c
|
|
|
|
FlowerTileFrames: ; fc58c
|
|
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"
|
|
; fc5cc
|
|
|
|
|
|
SafariFountainAnim1: ; fc5cc
|
|
; Splash in the bottom-right corner of the fountain.
|
|
ld hl, [sp+0]
|
|
ld b, h
|
|
ld c, l
|
|
ld a, [TileAnimationTimer]
|
|
and 6
|
|
srl a
|
|
inc a
|
|
inc a
|
|
and 3
|
|
swap a
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, SafariFountainFrames
|
|
add hl, de
|
|
ld sp, hl
|
|
ld hl, VTiles2 tile $5b
|
|
jp WriteTile
|
|
; fc5eb
|
|
|
|
|
|
SafariFountainAnim2: ; fc5eb
|
|
; Splash in the top-left corner of the fountain.
|
|
ld hl, [sp+0]
|
|
ld b, h
|
|
ld c, l
|
|
ld a, [TileAnimationTimer]
|
|
and 6
|
|
add a
|
|
add a
|
|
add a
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, SafariFountainFrames
|
|
add hl, de
|
|
ld sp, hl
|
|
ld hl, VTiles2 tile $38
|
|
jp WriteTile
|
|
; fc605
|
|
|
|
|
|
SafariFountainFrames: ; fc605
|
|
INCBIN "gfx/tilesets/safari/1.2bpp"
|
|
INCBIN "gfx/tilesets/safari/2.2bpp"
|
|
INCBIN "gfx/tilesets/safari/3.2bpp"
|
|
INCBIN "gfx/tilesets/safari/4.2bpp"
|
|
; fc645
|
|
|
|
|
|
AnimateSproutPillarTile: ; fc645
|
|
; 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, [TileAnimationTimer]
|
|
and 7
|
|
|
|
; 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
|
|
; fc673
|
|
|
|
|
|
StandingTileFrame: ; fc673
|
|
ld hl, TileAnimationTimer
|
|
inc [hl]
|
|
ret
|
|
; fc678
|
|
|
|
|
|
AnimateWhirlpoolTile: ; fc678
|
|
; 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, [TileAnimationTimer]
|
|
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
|
|
|
|
; Stack now points to the desired frame.
|
|
ld sp, hl
|
|
|
|
ld l, e
|
|
ld h, d
|
|
|
|
jr WriteTile
|
|
; fc696
|
|
|
|
|
|
WriteTileFromBuffer: ; fc696
|
|
; 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
|
|
; fc6a2
|
|
|
|
|
|
WriteTileToBuffer: ; fc6a2
|
|
; 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: ; fc6ac
|
|
; 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
|
|
; fc6d7
|
|
|
|
|
|
TileAnimationPalette: ; fc6d7
|
|
; Transition between color values 0-2 for color 0 in palette 3.
|
|
|
|
; No palette changes on DMG.
|
|
ld a, [hCGB]
|
|
and a
|
|
ret z
|
|
|
|
; We don't want to mess with non-standard palettes.
|
|
ld a, [rBGP] ; BGP
|
|
cp %11100100
|
|
ret nz
|
|
|
|
; Only update on even frames.
|
|
ld a, [TileAnimationTimer]
|
|
ld l, a
|
|
and 1 ; odd
|
|
ret nz
|
|
|
|
; Ready for BGPD input...
|
|
ld a, %10011000 ; auto increment, index $18 (pal 3 color 0)
|
|
ld [rBGPI], a
|
|
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, 5 ; wra5: gfx
|
|
ld [rSVBK], a
|
|
|
|
; Update color 0 in order 0 1 2 1
|
|
|
|
ld a, l
|
|
and %110 ; frames 0 2 4 6
|
|
|
|
jr z, .color0
|
|
|
|
cp 4
|
|
jr z, .color2
|
|
|
|
.color1
|
|
ld hl, UnknBGPals + $1a ; pal 3 color 1
|
|
ld a, [hli]
|
|
ld [rBGPD], a
|
|
ld a, [hli]
|
|
ld [rBGPD], a
|
|
jr .end
|
|
|
|
.color0
|
|
ld hl, UnknBGPals + $18 ; pal 3 color 0
|
|
ld a, [hli]
|
|
ld [rBGPD], a
|
|
ld a, [hli]
|
|
ld [rBGPD], a
|
|
jr .end
|
|
|
|
.color2
|
|
ld hl, UnknBGPals + $1c ; pal 3 color 2
|
|
ld a, [hli]
|
|
ld [rBGPD], a
|
|
ld a, [hli]
|
|
ld [rBGPD], a
|
|
|
|
.end
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
; fc71e
|
|
|
|
|
|
FlickeringCaveEntrancePalette: ; fc71e
|
|
; No palette changes on DMG.
|
|
ld a, [hCGB]
|
|
and a
|
|
ret z
|
|
; We don't want to mess with non-standard palettes.
|
|
ld a, [rBGP]
|
|
cp %11100100
|
|
ret nz
|
|
; We only want to be here if we're in a dark cave.
|
|
ld a, [wTimeOfDayPalset]
|
|
cp $ff ; 3,3,3,3
|
|
ret nz
|
|
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, 5 ; wra5: gfx
|
|
ld [rSVBK], a
|
|
; Ready for BGPD input...
|
|
ld a, %10100000 ; auto-increment, index $20 (pal 4 color 0)
|
|
ld [rBGPI], a
|
|
ld a, [hVBlankCounter]
|
|
and %00000010
|
|
jr nz, .bit1set
|
|
ld hl, UnknBGPals + $20 ; pal 4 color 0
|
|
jr .okay
|
|
|
|
.bit1set
|
|
ld hl, UnknBGPals + $22 ; pal 4 color 2
|
|
|
|
.okay
|
|
ld a, [hli]
|
|
ld [rBGPD], a
|
|
ld a, [hli]
|
|
ld [rBGPD], a
|
|
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
; fc750
|
|
|
|
|
|
SproutPillarTilePointer1: dw VTiles2 tile $2d, SproutPillarTile1
|
|
SproutPillarTilePointer2: dw VTiles2 tile $2f, SproutPillarTile2
|
|
SproutPillarTilePointer3: dw VTiles2 tile $3d, SproutPillarTile3
|
|
SproutPillarTilePointer4: dw VTiles2 tile $3f, SproutPillarTile4
|
|
SproutPillarTilePointer5: dw VTiles2 tile $3c, SproutPillarTile5
|
|
SproutPillarTilePointer6: dw VTiles2 tile $2c, SproutPillarTile6
|
|
SproutPillarTilePointer7: dw VTiles2 tile $4d, SproutPillarTile7
|
|
SproutPillarTilePointer8: dw VTiles2 tile $4f, SproutPillarTile8
|
|
SproutPillarTilePointer9: dw VTiles2 tile $5d, SproutPillarTile9
|
|
SproutPillarTilePointer10: dw VTiles2 tile $5f, SproutPillarTile10
|
|
|
|
SproutPillarTile1: INCBIN "gfx/tilesets/sprout-pillar/1.2bpp"
|
|
SproutPillarTile2: INCBIN "gfx/tilesets/sprout-pillar/2.2bpp"
|
|
SproutPillarTile3: INCBIN "gfx/tilesets/sprout-pillar/3.2bpp"
|
|
SproutPillarTile4: INCBIN "gfx/tilesets/sprout-pillar/4.2bpp"
|
|
SproutPillarTile5: INCBIN "gfx/tilesets/sprout-pillar/5.2bpp"
|
|
SproutPillarTile6: INCBIN "gfx/tilesets/sprout-pillar/6.2bpp"
|
|
SproutPillarTile7: INCBIN "gfx/tilesets/sprout-pillar/7.2bpp"
|
|
SproutPillarTile8: INCBIN "gfx/tilesets/sprout-pillar/8.2bpp"
|
|
SproutPillarTile9: INCBIN "gfx/tilesets/sprout-pillar/9.2bpp"
|
|
SproutPillarTile10: INCBIN "gfx/tilesets/sprout-pillar/10.2bpp"
|
|
; fca98
|
|
|
|
|
|
WhirlpoolFrames1: dw VTiles2 tile $32, WhirlpoolTiles1
|
|
WhirlpoolFrames2: dw VTiles2 tile $33, WhirlpoolTiles2
|
|
WhirlpoolFrames3: dw VTiles2 tile $42, WhirlpoolTiles3
|
|
WhirlpoolFrames4: dw VTiles2 tile $43, WhirlpoolTiles4
|
|
; fcaa8
|
|
|
|
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"
|
|
; fcba8
|