mirror of https://github.com/pret/pokecrystal.git
1066 lines
20 KiB
NASM
1066 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
|
|
rept 2
|
|
add hl, hl
|
|
endr
|
|
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
|
|
rept 3
|
|
add a
|
|
endr
|
|
|
|
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
|
|
rept 3
|
|
add a
|
|
endr
|
|
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
|
|
rept 3
|
|
add a
|
|
endr
|
|
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
|
|
rept 3
|
|
add a
|
|
endr
|
|
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
|
|
rept 3
|
|
add a
|
|
endr
|
|
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
|
|
rept 2
|
|
inc a
|
|
endr
|
|
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
|
|
rept 3
|
|
add a
|
|
endr
|
|
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
|