diff --git a/main.asm b/main.asm index 3430ca3de..48f32957a 100644 --- a/main.asm +++ b/main.asm @@ -80656,1033 +80656,7 @@ DoBadgeTypeBoosts: ; fbe24 SECTION "bank3F", ROMX, BANK[$3F] -_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 -; param, function - dw $9140, 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, NextTileFrame8 - dw NULL, DoneTileAnimation -; 0xfc047 - -Tileset25Anim: ; 0xfc047 -; param, function - dw $9140, AnimateWaterTile - dw NULL, WaitTileAnimation - dw $95f0, AnimateFountain - 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 - dw $9140, AnimateWaterTile - dw NULL, TileAnimationPalette - dw NULL, NextTileFrame8 - dw NULL, DoneTileAnimation -; 0xfc0a3 - -Tileset01Anim: ; 0xfc0a3 -; param, function - dw $9140, AnimateWaterTile - dw NULL, WaitTileAnimation - dw NULL, WaitTileAnimation - dw NULL, TileAnimationPalette - dw NULL, WaitTileAnimation - dw NULL, AnimateFlowerTile - dw $4a98, AnimateWhirlpoolTile - dw $4a9c, AnimateWhirlpoolTile - dw $4aa0, AnimateWhirlpoolTile - dw $4aa4, AnimateWhirlpoolTile - dw NULL, WaitTileAnimation - dw NULL, NextTileFrame8 - dw NULL, DoneTileAnimation -; 0xfc0d7 - -INCBIN "baserom.gbc",$fc0d7,$fc12f - $fc0d7 - -Tileset09Anim: ; 0xfc12f -; param, function - dw $9140, 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, 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 - -INCBIN "baserom.gbc",$fc17f,$fc1e7 - $fc17f - -Tileset24Anim: ; 0xfc1e7 -Tileset30Anim: ; 0xfc1e7 -; param, function - dw $9140, WriteTileToBuffer - dw NULL, Functionfc71e - dw $cf41, ScrollTileRightLeft - dw NULL, Functionfc71e - dw $9140, WriteTileFromBuffer - dw NULL, Functionfc71e - dw NULL, TileAnimationPalette - dw NULL, Functionfc71e - dw $9400, WriteTileToBuffer - dw NULL, Functionfc71e - dw $cf41, ScrollTileDown - dw NULL, Functionfc71e - dw $cf41, ScrollTileDown - dw NULL, Functionfc71e - dw $cf41, ScrollTileDown - dw NULL, Functionfc71e - dw $9400, WriteTileFromBuffer - dw NULL, Functionfc71e - dw NULL, DoneTileAnimation -; 0xfc233 - -Tileset29Anim: ; 0xfc233 -; param, function - dw $9350, WriteTileToBuffer - dw NULL, Functionfc71e - dw $cf41, ScrollTileRightLeft - dw NULL, Functionfc71e - dw $9350, WriteTileFromBuffer - dw NULL, Functionfc71e - dw NULL, TileAnimationPalette - dw NULL, Functionfc71e - dw $9310, WriteTileToBuffer - dw NULL, Functionfc71e - dw $cf41, ScrollTileDown - dw NULL, Functionfc71e - dw $cf41, ScrollTileDown - dw NULL, Functionfc71e - dw $cf41, ScrollTileDown - dw NULL, Functionfc71e - dw $9310, WriteTileFromBuffer - 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 - -INCBIN "baserom.gbc",$fc2bf,$fc2e7 - $fc2bf - -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 - -.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 -; Frames 0-3 -; INCBIN "gfx/tilesets/water.2bpp" -INCBIN "baserom.gbc",$fc41c,$fc45c - $fc41c -; fc45c - - -ForestTreeLeftAnimation: ; fc45c - ld hl, [sp+0] - ld b, h - ld c, l - -; Only during the Celebi event. - ld a, [$dbf3] - 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, $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, [$dbf3] - 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, $90f0 - jp WriteTile -; fc4f2 - - -ForestTreeLeftAnimation2: ; fc4f2 - ld hl, [sp+0] - ld b, h - ld c, l - -; Only during the Celebi event. - ld a, [$dbf3] - 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, $90c0 - jp WriteTile -; fc51c - - -ForestTreeRightAnimation2: ; fc51c - ld hl, [sp+0] - ld b, h - ld c, l - -; Only during the Celebi event. - ld a, [$dbf3] - 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, $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 - -; Alternate tile graphc 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 -; frame 0 dmg -; frame 0 cgb -; frame 1 dmg -; frame 1 sgb -; INCBIN "gfx/tilesets/flower.2bpp" -INCBIN "baserom.gbc",$fc58c,$fc5cc - $fc58c -; 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, $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 - add a - add a - add a - 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 $cf41 to de. -; $cf41 is loaded to sp for WriteTile. - - ld hl, [sp+0] - ld b, h - ld c, l - - ld hl, $cf41 - ld sp, hl - - ld h, d - ld l, e - jr WriteTile -; fc6a2 - - -WriteTileToBuffer: ; fc6a2 -; Write tiledata de to $cf41. -; 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, $cf41 - - ; 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, $d01a ; pal 3 color 1 - ld a, [hli] - ld [rBGPD], a - ld a, [hli] - ld [rBGPD], a - jr .end - -.color0 - ld hl, $d018 ; pal 3 color 0 - ld a, [hli] - ld [rBGPD], a - ld a, [hli] - ld [rBGPD], a - jr .end - -.color2 - ld hl, $d01c ; pal 3 color 2 - 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, [$d847] - 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, $d020 - jr .asm_fc746 - -.asm_fc743 - ld hl, $d022 - -.asm_fc746 - ld a, [hli] - ld [rBGPD], a - ld a, [hli] - ld [rBGPD], a - - pop af - ld [rSVBK], a - ret -; fc750 - - -SproutPillarTilePointers: ; fc750 -SproutPillarTilePointer1: - dw $92d0, SproutPillarTile1 -SproutPillarTilePointer2: - dw $92f0, SproutPillarTile2 -SproutPillarTilePointer3: - dw $93d0, SproutPillarTile3 -SproutPillarTilePointer4: - dw $93f0, SproutPillarTile4 -SproutPillarTilePointer5: - dw $93c0, SproutPillarTile5 -SproutPillarTilePointer6: - dw $92c0, SproutPillarTile6 -SproutPillarTilePointer7: - dw $94d0, SproutPillarTile7 -SproutPillarTilePointer8: - dw $94f0, SproutPillarTile8 -SproutPillarTilePointer9: - dw $95d0, SproutPillarTile9 -SproutPillarTilePointer10: - dw $95f0, 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 - - -INCBIN "baserom.gbc",$fca98,$fcba8 - $fca98 - +INCLUDE "tilesets/animations.asm" Functionfcba8: ; fcba8 ld a, e diff --git a/tilesets/animations.asm b/tilesets/animations.asm new file mode 100644 index 000000000..0dd6b4e25 --- /dev/null +++ b/tilesets/animations.asm @@ -0,0 +1,1028 @@ + +_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 +; param, function + dw $9140, 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, NextTileFrame8 + dw NULL, DoneTileAnimation +; 0xfc047 + +Tileset25Anim: ; 0xfc047 +; param, function + dw $9140, AnimateWaterTile + dw NULL, WaitTileAnimation + dw $95f0, AnimateFountain + 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 + dw $9140, AnimateWaterTile + dw NULL, TileAnimationPalette + dw NULL, NextTileFrame8 + dw NULL, DoneTileAnimation +; 0xfc0a3 + +Tileset01Anim: ; 0xfc0a3 +; param, function + dw $9140, AnimateWaterTile + dw NULL, WaitTileAnimation + dw NULL, WaitTileAnimation + dw NULL, TileAnimationPalette + dw NULL, WaitTileAnimation + dw NULL, AnimateFlowerTile + dw $4a98, AnimateWhirlpoolTile + dw $4a9c, AnimateWhirlpoolTile + dw $4aa0, AnimateWhirlpoolTile + dw $4aa4, AnimateWhirlpoolTile + dw NULL, WaitTileAnimation + dw NULL, NextTileFrame8 + dw NULL, DoneTileAnimation +; 0xfc0d7 + +INCBIN "baserom.gbc",$fc0d7,$fc12f - $fc0d7 + +Tileset09Anim: ; 0xfc12f +; param, function + dw $9140, 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, 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 + +INCBIN "baserom.gbc",$fc17f,$fc1e7 - $fc17f + +Tileset24Anim: ; 0xfc1e7 +Tileset30Anim: ; 0xfc1e7 +; param, function + dw $9140, WriteTileToBuffer + dw NULL, Functionfc71e + dw $cf41, ScrollTileRightLeft + dw NULL, Functionfc71e + dw $9140, WriteTileFromBuffer + dw NULL, Functionfc71e + dw NULL, TileAnimationPalette + dw NULL, Functionfc71e + dw $9400, WriteTileToBuffer + dw NULL, Functionfc71e + dw $cf41, ScrollTileDown + dw NULL, Functionfc71e + dw $cf41, ScrollTileDown + dw NULL, Functionfc71e + dw $cf41, ScrollTileDown + dw NULL, Functionfc71e + dw $9400, WriteTileFromBuffer + dw NULL, Functionfc71e + dw NULL, DoneTileAnimation +; 0xfc233 + +Tileset29Anim: ; 0xfc233 +; param, function + dw $9350, WriteTileToBuffer + dw NULL, Functionfc71e + dw $cf41, ScrollTileRightLeft + dw NULL, Functionfc71e + dw $9350, WriteTileFromBuffer + dw NULL, Functionfc71e + dw NULL, TileAnimationPalette + dw NULL, Functionfc71e + dw $9310, WriteTileToBuffer + dw NULL, Functionfc71e + dw $cf41, ScrollTileDown + dw NULL, Functionfc71e + dw $cf41, ScrollTileDown + dw NULL, Functionfc71e + dw $cf41, ScrollTileDown + dw NULL, Functionfc71e + dw $9310, WriteTileFromBuffer + 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 + +INCBIN "baserom.gbc",$fc2bf,$fc2e7 - $fc2bf + +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 + +.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 +; Frames 0-3 +; INCBIN "gfx/tilesets/water.2bpp" +INCBIN "baserom.gbc",$fc41c,$fc45c - $fc41c +; fc45c + + +ForestTreeLeftAnimation: ; fc45c + ld hl, [sp+0] + ld b, h + ld c, l + +; Only during the Celebi event. + ld a, [$dbf3] + 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, $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, [$dbf3] + 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, $90f0 + jp WriteTile +; fc4f2 + + +ForestTreeLeftAnimation2: ; fc4f2 + ld hl, [sp+0] + ld b, h + ld c, l + +; Only during the Celebi event. + ld a, [$dbf3] + 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, $90c0 + jp WriteTile +; fc51c + + +ForestTreeRightAnimation2: ; fc51c + ld hl, [sp+0] + ld b, h + ld c, l + +; Only during the Celebi event. + ld a, [$dbf3] + 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, $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 + +; Alternate tile graphc 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 +; frame 0 dmg +; frame 0 cgb +; frame 1 dmg +; frame 1 sgb +; INCBIN "gfx/tilesets/flower.2bpp" +INCBIN "baserom.gbc",$fc58c,$fc5cc - $fc58c +; 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, $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 + add a + add a + add a + 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 $cf41 to de. +; $cf41 is loaded to sp for WriteTile. + + ld hl, [sp+0] + ld b, h + ld c, l + + ld hl, $cf41 + ld sp, hl + + ld h, d + ld l, e + jr WriteTile +; fc6a2 + + +WriteTileToBuffer: ; fc6a2 +; Write tiledata de to $cf41. +; 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, $cf41 + + ; 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, $d01a ; pal 3 color 1 + ld a, [hli] + ld [rBGPD], a + ld a, [hli] + ld [rBGPD], a + jr .end + +.color0 + ld hl, $d018 ; pal 3 color 0 + ld a, [hli] + ld [rBGPD], a + ld a, [hli] + ld [rBGPD], a + jr .end + +.color2 + ld hl, $d01c ; pal 3 color 2 + 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, [$d847] + 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, $d020 + jr .asm_fc746 + +.asm_fc743 + ld hl, $d022 + +.asm_fc746 + ld a, [hli] + ld [rBGPD], a + ld a, [hli] + ld [rBGPD], a + + pop af + ld [rSVBK], a + ret +; fc750 + + +SproutPillarTilePointers: ; fc750 +SproutPillarTilePointer1: + dw $92d0, SproutPillarTile1 +SproutPillarTilePointer2: + dw $92f0, SproutPillarTile2 +SproutPillarTilePointer3: + dw $93d0, SproutPillarTile3 +SproutPillarTilePointer4: + dw $93f0, SproutPillarTile4 +SproutPillarTilePointer5: + dw $93c0, SproutPillarTile5 +SproutPillarTilePointer6: + dw $92c0, SproutPillarTile6 +SproutPillarTilePointer7: + dw $94d0, SproutPillarTile7 +SproutPillarTilePointer8: + dw $94f0, SproutPillarTile8 +SproutPillarTilePointer9: + dw $95d0, SproutPillarTile9 +SproutPillarTilePointer10: + dw $95f0, 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 + + +INCBIN "baserom.gbc", $fca98, $fcba8 - $fca98 +