ref: cd3d125861d25ab60393e29e991f55f26a3874f4
dir: /tilesets/animations.asm/
_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