pokecrystal-board/tilesets/animations.asm

1081 lines
19 KiB
NASM
Raw Normal View History

2013-12-25 23:09:58 -08:00
_AnimateTileset:: ; fc000
2013-12-25 23:09:58 -08:00
; 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
2015-07-20 19:18:18 -07:00
rept 2
2013-12-25 23:09:58 -08:00
add hl, hl
2015-07-20 19:18:18 -07:00
endr
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]
; fc01b
Tileset00Anim: ; 0xfc01b
Tileset02Anim: ; 0xfc01b
Tileset03Anim: ; 0xfc01b
; param, function
dwtile $14, VTiles2, AnimateWaterTile
2013-12-25 23:09:58 -08:00
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, NextTileFrame8
dw NULL, DoneTileAnimation
; 0xfc047
Tileset25Anim: ; 0xfc047
; param, function
dwtile $14, VTiles2, AnimateWaterTile
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dwtile $5f, VTiles2, AnimateFountain
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, TileAnimationPalette
dw NULL, WaitTileAnimation
dw NULL, AnimateFlowerTile
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, NextTileFrame8
dw NULL, DoneTileAnimation
; 0xfc073
Tileset31Anim: ; 0xfc073
; param, function
dw NULL, ForestTreeLeftAnimation
dw NULL, ForestTreeRightAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, ForestTreeLeftAnimation2
dw NULL, ForestTreeRightAnimation2
dw NULL, AnimateFlowerTile
dwtile $14, VTiles2, AnimateWaterTile
2013-12-25 23:09:58 -08:00
dw NULL, TileAnimationPalette
dw NULL, NextTileFrame8
dw NULL, DoneTileAnimation
; 0xfc0a3
Tileset01Anim: ; 0xfc0a3
; param, function
dwtile $14, VTiles2, AnimateWaterTile
2013-12-25 23:09:58 -08:00
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, TileAnimationPalette
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, NextTileFrame8
dw NULL, DoneTileAnimation
; 0xfc0d7
2013-12-26 00:13:25 -08:00
TilesetAnimfc0d7: ; 0xfc0d7
; param, function
dwtile $03, VTiles2, WriteTileToBuffer
dw wcf41, ScrollTileRightLeft
dwtile $03, VTiles2, 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
; 0xfc103
TilesetAnimfc103: ; 0xfc103
; param, function
dwtile $14, VTiles2, WriteTileToBuffer
dw wcf41, ScrollTileRightLeft
dwtile $14, VTiles2, 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
; 0xfc12f
2013-12-25 23:09:58 -08:00
Tileset09Anim: ; 0xfc12f
; param, function
dwtile $14, VTiles2, AnimateWaterTile
2013-12-25 23:09:58 -08:00
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, NextTileFrame8
dw NULL, DoneTileAnimation
; 0xfc15f
Tileset15Anim: ; 0xfc15f
; param, function
dw NULL, SafariFountainAnim2
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, SafariFountainAnim1
dw NULL, WaitTileAnimation
dw NULL, NextTileFrame8
dw NULL, DoneTileAnimation
; 0xfc17f
2013-12-26 00:13:25 -08:00
TilesetAnimfc17f: ; 0xfc17f
; param, function
dwtile $53, VTiles2, WriteTileToBuffer
dw wcf41, ScrollTileDown
dw wcf41, ScrollTileDown
dwtile $53, VTiles2, WriteTileFromBuffer
dwtile $03, VTiles2, WriteTileToBuffer
dw wcf41, ScrollTileRightLeft
dwtile $03, VTiles2, WriteTileFromBuffer
dwtile $53, VTiles2, WriteTileToBuffer
dw wcf41, ScrollTileDown
dw wcf41, ScrollTileDown
dwtile $53, VTiles2, WriteTileFromBuffer
2013-12-26 00:13:25 -08:00
dw NULL, DoneTileAnimation
; 0xfc1af
TilesetAnimfc1af: ; 0xfc1af
; param, function
dwtile $54, VTiles2, WriteTileToBuffer
dw wcf41, ScrollTileDown
dw wcf41, ScrollTileDown
dwtile $54, VTiles2, WriteTileFromBuffer
2013-12-26 00:13:25 -08:00
dw NULL, WaitTileAnimation
dwtile $03, VTiles2, WriteTileToBuffer
dw wcf41, ScrollTileRightLeft
dwtile $03, VTiles2, WriteTileFromBuffer
2013-12-26 00:13:25 -08:00
dw NULL, WaitTileAnimation
dwtile $54, VTiles2, WriteTileToBuffer
dw wcf41, ScrollTileDown
dw wcf41, ScrollTileDown
dwtile $54, VTiles2, WriteTileFromBuffer
2013-12-26 00:13:25 -08:00
dw NULL, DoneTileAnimation
; 0xfc1e7
2013-12-25 23:09:58 -08:00
Tileset24Anim: ; 0xfc1e7
Tileset30Anim: ; 0xfc1e7
; param, function
dwtile $14, VTiles2, WriteTileToBuffer
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw wcf41, ScrollTileRightLeft
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dwtile $14, VTiles2, WriteTileFromBuffer
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw NULL, TileAnimationPalette
dw NULL, Functionfc71e
dwtile $40, VTiles2, WriteTileToBuffer
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw wcf41, ScrollTileDown
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw wcf41, ScrollTileDown
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw wcf41, ScrollTileDown
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dwtile $40, VTiles2, WriteTileFromBuffer
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw NULL, DoneTileAnimation
; 0xfc233
Tileset29Anim: ; 0xfc233
; param, function
dwtile $35, VTiles2, WriteTileToBuffer
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw wcf41, ScrollTileRightLeft
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dwtile $35, VTiles2, WriteTileFromBuffer
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw NULL, TileAnimationPalette
dw NULL, Functionfc71e
dwtile $31, VTiles2, WriteTileToBuffer
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw wcf41, ScrollTileDown
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw wcf41, ScrollTileDown
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw wcf41, ScrollTileDown
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dwtile $31, VTiles2, WriteTileFromBuffer
2013-12-25 23:09:58 -08:00
dw NULL, Functionfc71e
dw NULL, DoneTileAnimation
; 0xfc27f
Tileset23Anim: ; 0xfc27f
; param, function
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, NextTileFrame
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation
; 0xfc2bf
2013-12-26 00:13:25 -08:00
TilesetAnimfc2bf: ; 0xfc2bf
dwtile $4f, VTiles2, WriteTileToBuffer
dw wcf41, ScrollTileRightLeft
dwtile $4f, VTiles2, 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
; 0xfc2e7
2013-12-25 23:09:58 -08:00
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
; param, function
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
NextTileFrame8: ; 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, .asm_fc399
inc h
.asm_fc399
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
; 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
2015-07-20 19:18:18 -07:00
rept 3
2013-12-25 23:09:58 -08:00
add a
2015-07-20 19:18:18 -07:00
endr
2013-12-25 23:09:58 -08:00
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
2013-12-25 23:40:52 -08:00
INCBIN "gfx/tilesets/water.2bpp"
2013-12-25 23:09:58 -08:00
; fc45c
ForestTreeLeftAnimation: ; fc45c
ld hl, [sp+0]
ld b, h
ld c, l
; Only during the Celebi event.
ld a, [wdbf3]
2013-12-25 23:09:58 -08:00
bit 2, a
jr nz, .asm_fc46c
ld hl, ForestTreeLeftFrames
jr .asm_fc47d
.asm_fc46c
ld a, [TileAnimationTimer]
call GetForestTreeFrame
2015-07-20 19:18:18 -07:00
rept 3
2013-12-25 23:09:58 -08:00
add a
2015-07-20 19:18:18 -07:00
endr
2013-12-25 23:09:58 -08:00
add ForestTreeLeftFrames % $100
ld l, a
ld a, 0
adc ForestTreeLeftFrames / $100
ld h, a
.asm_fc47d
ld sp, hl
ld hl, $90c0
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, [wdbf3]
2013-12-25 23:09:58 -08:00
bit 2, a
jr nz, .asm_fc4d4
ld hl, ForestTreeRightFrames
jr .asm_fc4eb
.asm_fc4d4
ld a, [TileAnimationTimer]
call GetForestTreeFrame
2015-07-20 19:18:18 -07:00
rept 3
2013-12-25 23:09:58 -08:00
add a
2015-07-20 19:18:18 -07:00
endr
2013-12-25 23:09:58 -08:00
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, $90f0
jp WriteTile
; fc4f2
ForestTreeLeftAnimation2: ; fc4f2
ld hl, [sp+0]
ld b, h
ld c, l
; Only during the Celebi event.
ld a, [wdbf3]
2013-12-25 23:09:58 -08:00
bit 2, a
jr nz, .asm_fc502
ld hl, ForestTreeLeftFrames
jr .asm_fc515
.asm_fc502
ld a, [TileAnimationTimer]
call GetForestTreeFrame
xor 2
2015-07-20 19:18:18 -07:00
rept 3
2013-12-25 23:09:58 -08:00
add a
2015-07-20 19:18:18 -07:00
endr
2013-12-25 23:09:58 -08:00
add ForestTreeLeftFrames % $100
ld l, a
ld a, 0
adc ForestTreeLeftFrames / $100
ld h, a
.asm_fc515
ld sp, hl
ld hl, $90c0
jp WriteTile
; fc51c
ForestTreeRightAnimation2: ; fc51c
ld hl, [sp+0]
ld b, h
ld c, l
; Only during the Celebi event.
ld a, [wdbf3]
2013-12-25 23:09:58 -08:00
bit 2, a
jr nz, .asm_fc52c
ld hl, ForestTreeRightFrames
jr .asm_fc545
.asm_fc52c
ld a, [TileAnimationTimer]
call GetForestTreeFrame
xor 2
2015-07-20 19:18:18 -07:00
rept 3
2013-12-25 23:09:58 -08:00
add a
2015-07-20 19:18:18 -07:00
endr
2013-12-25 23:09:58 -08:00
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, $90f0
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
2013-12-25 23:46:08 -08:00
; Alternate tile graphic every other frame
2013-12-25 23:09:58 -08:00
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
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
; 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
2015-07-20 19:18:18 -07:00
rept 2
2013-12-25 23:09:58 -08:00
inc a
2015-07-20 19:18:18 -07:00
endr
2013-12-25 23:09:58 -08:00
and 3
swap a
ld e, a
ld d, 0
ld hl, SafariFountainFrames
add hl, de
ld sp, hl
ld hl, $95b0
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
2015-07-20 19:18:18 -07:00
rept 3
2013-12-25 23:09:58 -08:00
add a
2015-07-20 19:18:18 -07:00
endr
2013-12-25 23:09:58 -08:00
ld e, a
ld d, 0
ld hl, SafariFountainFrames
add hl, de
ld sp, hl
ld hl, $9380
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
NextTileFrame: ; 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 wcf41 to de.
; wcf41 is loaded to sp for WriteTile.
2013-12-25 23:09:58 -08:00
ld hl, [sp+0]
ld b, h
ld c, l
ld hl, wcf41
2013-12-25 23:09:58 -08:00
ld sp, hl
ld h, d
ld l, e
jr WriteTile
; fc6a2
WriteTileToBuffer: ; fc6a2
; Write tiledata de to wcf41.
2013-12-25 23:09:58 -08:00
; 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, wcf41
2013-12-25 23:09:58 -08:00
; 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, Unkn1Pals + $1a ; pal 3 color 1
2013-12-25 23:09:58 -08:00
ld a, [hli]
ld [rBGPD], a
ld a, [hli]
ld [rBGPD], a
jr .end
.color0
ld hl, Unkn1Pals + $18 ; pal 3 color 0
2013-12-25 23:09:58 -08:00
ld a, [hli]
ld [rBGPD], a
ld a, [hli]
ld [rBGPD], a
jr .end
.color2
ld hl, Unkn1Pals + $1c ; pal 3 color 2
2013-12-25 23:09:58 -08:00
ld a, [hli]
ld [rBGPD], a
ld a, [hli]
ld [rBGPD], a
.end
pop af
ld [rSVBK], a
ret
; fc71e
Functionfc71e: ; fc71e
ld a, [hCGB]
and a
ret z
ld a, [rBGP]
cp $e4
ret nz
ld a, [wd847]
2013-12-25 23:09:58 -08:00
cp $ff
ret nz
ld a, [rSVBK]
push af
ld a, 5
ld [rSVBK], a
ld a, $a0
ld [rBGPI], a
ld a, [$ff9b]
and 2
jr nz, .asm_fc743
ld hl, Unkn1Pals + $20
2013-12-25 23:09:58 -08:00
jr .asm_fc746
.asm_fc743
ld hl, Unkn1Pals + $22
2013-12-25 23:09:58 -08:00
.asm_fc746
ld a, [hli]
ld [rBGPD], a
ld a, [hli]
ld [rBGPD], a
pop af
ld [rSVBK], a
ret
; fc750
SproutPillarTilePointer1: dwtile $2d, VTiles2, SproutPillarTile1
SproutPillarTilePointer2: dwtile $2f, VTiles2, SproutPillarTile2
SproutPillarTilePointer3: dwtile $3d, VTiles2, SproutPillarTile3
SproutPillarTilePointer4: dwtile $3f, VTiles2, SproutPillarTile4
SproutPillarTilePointer5: dwtile $3c, VTiles2, SproutPillarTile5
SproutPillarTilePointer6: dwtile $2c, VTiles2, SproutPillarTile6
SproutPillarTilePointer7: dwtile $4d, VTiles2, SproutPillarTile7
SproutPillarTilePointer8: dwtile $4f, VTiles2, SproutPillarTile8
SproutPillarTilePointer9: dwtile $5d, VTiles2, SproutPillarTile9
SproutPillarTilePointer10: dwtile $5f, VTiles2, SproutPillarTile10
2013-12-26 00:21:29 -08:00
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"
2013-12-25 23:09:58 -08:00
; fca98
WhirlpoolFrames1: dwtile $32, VTiles2, WhirlpoolTiles1
WhirlpoolFrames2: dwtile $33, VTiles2, WhirlpoolTiles2
WhirlpoolFrames3: dwtile $42, VTiles2, WhirlpoolTiles3
WhirlpoolFrames4: dwtile $43, VTiles2, WhirlpoolTiles4
2013-12-25 23:37:23 -08:00
; fcaa8
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"
2013-12-25 23:37:23 -08:00
; fcba8