_AnimateTileset:: ; Iterate over a given pointer array of ; animation functions (one per frame). ; Typically in wra1, vra0 ld a, [wTilesetAnim] ld e, a ld a, [wTilesetAnim + 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 Tileset0Anim: ; 0xfc01b TilesetJohtoModernAnim: ; 0xfc01b TilesetKantoAnim: ; 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 TilesetParkAnim: ; 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 TilesetForestAnim: ; 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 TilesetJohtoAnim: ; 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 UnusedTilesetAnim_fc0d7: ; 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 UnusedTilesetAnim_fc103: ; 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 TilesetPortAnim: ; 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 TilesetEliteFourRoomAnim: ; 0xfc15f dw NULL, LavaBubbleAnim2 dw NULL, WaitTileAnimation dw NULL, WaitTileAnimation dw NULL, WaitTileAnimation dw NULL, LavaBubbleAnim1 dw NULL, WaitTileAnimation dw NULL, StandingTileFrame8 dw NULL, DoneTileAnimation ; 0xfc17f UnusedTilesetAnim_fc17f: ; 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 UnusedTilesetAnim_fc1af: ; 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 TilesetCaveAnim: ; 0xfc1e7 TilesetDarkCaveAnim: ; 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 TilesetIcePathAnim: ; 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 TilesetTowerAnim: ; 0xfc27f dw TowerPillarTilePointer9, AnimateTowerPillarTile dw TowerPillarTilePointer10, AnimateTowerPillarTile dw TowerPillarTilePointer7, AnimateTowerPillarTile dw TowerPillarTilePointer8, AnimateTowerPillarTile dw TowerPillarTilePointer5, AnimateTowerPillarTile dw TowerPillarTilePointer6, AnimateTowerPillarTile dw TowerPillarTilePointer3, AnimateTowerPillarTile dw TowerPillarTilePointer4, AnimateTowerPillarTile dw TowerPillarTilePointer1, AnimateTowerPillarTile dw TowerPillarTilePointer2, AnimateTowerPillarTile dw NULL, StandingTileFrame dw NULL, WaitTileAnimation dw NULL, WaitTileAnimation dw NULL, WaitTileAnimation dw NULL, WaitTileAnimation dw NULL, DoneTileAnimation ; 0xfc2bf UnusedTilesetAnim_fc2bf: ; 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 TilesetBattleTowerOutsideAnim: ; 0xfc2e7 TilesetHouseAnim: ; 0xfc2e7 TilesetPlayersHouseAnim: ; 0xfc2e7 TilesetPokecenterAnim: ; 0xfc2e7 TilesetGateAnim: ; 0xfc2e7 TilesetLabAnim: ; 0xfc2e7 TilesetFacilityAnim: ; 0xfc2e7 TilesetMartAnim: ; 0xfc2e7 TilesetMansionAnim: ; 0xfc2e7 TilesetGameCornerAnim: ; 0xfc2e7 TilesetTraditionalHouseAnim: ; 0xfc2e7 TilesetTrainStationAnim: ; 0xfc2e7 TilesetChampionsRoomAnim: ; 0xfc2e7 TilesetLighthouseAnim: ; 0xfc2e7 TilesetPlayersRoomAnim: ; 0xfc2e7 TilesetPokeComCenterAnim: ; 0xfc2e7 TilesetBattleTowerAnim: ; 0xfc2e7 TilesetRuinsOfAlphAnim: ; 0xfc2e7 TilesetRadioTowerAnim: ; 0xfc2e7 TilesetUndergroundAnim: ; 0xfc2e7 TilesetBetaWordRoomAnim: ; 0xfc2e7 TilesetHoOhWordRoomAnim: ; 0xfc2e7 TilesetKabutoWordRoomAnim: ; 0xfc2e7 TilesetOmanyteWordRoomAnim: ; 0xfc2e7 TilesetAerodactylWordRoomAnim: ; 0xfc2e7 dw NULL, WaitTileAnimation dw NULL, WaitTileAnimation dw NULL, WaitTileAnimation dw NULL, WaitTileAnimation dw NULL, DoneTileAnimation ; 0xfc2fb DoneTileAnimation: ; Reset the animation command loop. xor a ld [hTileAnimFrame], a WaitTileAnimation: ; Do nothing this frame. ret StandingTileFrame8: ld a, [wTileAnimationTimer] inc a and %111 ld [wTileAnimationTimer], a ret ScrollTileRightLeft: ; Scroll right for 4 ticks, then left for 4 ticks. ld a, [wTileAnimationTimer] inc a and %111 ld [wTileAnimationTimer], a and %100 jr nz, ScrollTileLeft jr ScrollTileRight ScrollTileUpDown: ; Scroll up for 4 ticks, then down for 4 ticks. ld a, [wTileAnimationTimer] inc a and %111 ld [wTileAnimationTimer], a and %100 jr nz, ScrollTileDown jr ScrollTileUp ScrollTileLeft: 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 ScrollTileRight: 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 ScrollTileUp: ld h, d ld l, e ld d, [hl] inc hl ld e, [hl] ld bc, TILE_WIDTH * 2 - 2 add hl, bc ld a, TILE_WIDTH / 2 .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 ScrollTileDown: ld h, d ld l, e ld de, TILE_WIDTH * 2 - 2 push hl add hl, de ld d, [hl] inc hl ld e, [hl] pop hl ld a, TILE_WIDTH / 2 .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 AnimateFountain: ld hl, sp+0 ld b, h ld c, l ld hl, .frames ld a, [wTileAnimationTimer] and %111 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" AnimateWaterTile: ; 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, [wTileAnimationTimer] ; 4 tile graphics, updated every other frame. and %110 ; 2 x 8 = 16 bytes per tile add a add a add a add LOW(WaterTileFrames) ld l, a ld a, 0 adc HIGH(WaterTileFrames) ld h, a ; The stack now points to the start of the tile for this frame. ld sp, hl ld l, e ld h, d jp WriteTile WaterTileFrames: INCBIN "gfx/tilesets/water/water.2bpp" ForestTreeLeftAnimation: ld hl, sp+0 ld b, h ld c, l ; Only during the Celebi event. ld a, [wCelebiEvent] bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a jr nz, .asm_fc46c ld hl, ForestTreeLeftFrames jr .asm_fc47d .asm_fc46c ld a, [wTileAnimationTimer] call GetForestTreeFrame add a add a add a add LOW(ForestTreeLeftFrames) ld l, a ld a, 0 adc HIGH(ForestTreeLeftFrames) ld h, a .asm_fc47d ld sp, hl ld hl, vTiles2 tile $0c jp WriteTile ForestTreeLeftFrames: INCBIN "gfx/tilesets/forest-tree/1.2bpp" INCBIN "gfx/tilesets/forest-tree/2.2bpp" ForestTreeRightFrames: INCBIN "gfx/tilesets/forest-tree/3.2bpp" INCBIN "gfx/tilesets/forest-tree/4.2bpp" ForestTreeRightAnimation: ld hl, sp+0 ld b, h ld c, l ; Only during the Celebi event. ld a, [wCelebiEvent] bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a jr nz, .asm_fc4d4 ld hl, ForestTreeRightFrames jr .asm_fc4eb .asm_fc4d4 ld a, [wTileAnimationTimer] call GetForestTreeFrame add a add a add a add LOW(ForestTreeLeftFrames) ld l, a ld a, 0 adc HIGH(ForestTreeLeftFrames) 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 ForestTreeLeftAnimation2: ld hl, sp+0 ld b, h ld c, l ; Only during the Celebi event. ld a, [wCelebiEvent] bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a jr nz, .asm_fc502 ld hl, ForestTreeLeftFrames jr .asm_fc515 .asm_fc502 ld a, [wTileAnimationTimer] call GetForestTreeFrame xor 2 add a add a add a add LOW(ForestTreeLeftFrames) ld l, a ld a, 0 adc HIGH(ForestTreeLeftFrames) ld h, a .asm_fc515 ld sp, hl ld hl, vTiles2 tile $0c jp WriteTile ForestTreeRightAnimation2: ld hl, sp+0 ld b, h ld c, l ; Only during the Celebi event. ld a, [wCelebiEvent] bit CELEBIEVENT_FOREST_IS_RESTLESS_F, a jr nz, .asm_fc52c ld hl, ForestTreeRightFrames jr .asm_fc545 .asm_fc52c ld a, [wTileAnimationTimer] call GetForestTreeFrame xor 2 add a add a add a add LOW(ForestTreeLeftFrames) ld l, a ld a, 0 adc HIGH(ForestTreeLeftFrames) 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 GetForestTreeFrame: ; 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 AnimateFlowerTile: ; 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, [wTileAnimationTimer] and %10 ld e, a ; CGB has different color mappings for flowers. ld a, [hCGB] and 1 add e swap a ld e, a ld d, 0 ld hl, FlowerTileFrames add hl, de ld sp, hl ld hl, vTiles2 tile $03 jp WriteTile FlowerTileFrames: 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" LavaBubbleAnim1: ; Splash in the bottom-right corner of the fountain. ld hl, sp+0 ld b, h ld c, l ld a, [wTileAnimationTimer] and %110 srl a inc a inc a and %011 swap a ld e, a ld d, 0 ld hl, LavaBubbleFrames add hl, de ld sp, hl ld hl, vTiles2 tile $5b jp WriteTile LavaBubbleAnim2: ; Splash in the top-left corner of the fountain. ld hl, sp+0 ld b, h ld c, l ld a, [wTileAnimationTimer] and %110 add a add a add a ld e, a ld d, 0 ld hl, LavaBubbleFrames add hl, de ld sp, hl ld hl, vTiles2 tile $38 jp WriteTile LavaBubbleFrames: INCBIN "gfx/tilesets/lava/1.2bpp" INCBIN "gfx/tilesets/lava/2.2bpp" INCBIN "gfx/tilesets/lava/3.2bpp" INCBIN "gfx/tilesets/lava/4.2bpp" AnimateTowerPillarTile: ; 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, [wTileAnimationTimer] and %111 ; 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 StandingTileFrame: ld hl, wTileAnimationTimer inc [hl] ret AnimateWhirlpoolTile: ; 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, [wTileAnimationTimer] 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 ; The stack now points to the desired frame. ld sp, hl ld l, e ld h, d jr WriteTile WriteTileFromBuffer: ; 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 WriteTileToBuffer: ; 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: ; 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 TileAnimationPalette: ; 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, [wTileAnimationTimer] ld l, a and 1 ; odd ret nz ; Ready for BGPD input... ld a, (1 << rBGPI_AUTO_INCREMENT) palette PAL_BG_WATER ld [rBGPI], a ld a, [rSVBK] push af ld a, BANK(wBGPals1) 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 %100 ; frame 4 jr z, .color2 .color1 ld hl, wBGPals1 palette PAL_BG_WATER color 1 ld a, [hli] ld [rBGPD], a ld a, [hli] ld [rBGPD], a jr .end .color0 ld hl, wBGPals1 palette PAL_BG_WATER color 0 ld a, [hli] ld [rBGPD], a ld a, [hli] ld [rBGPD], a jr .end .color2 ld hl, wBGPals1 palette PAL_BG_WATER color 2 ld a, [hli] ld [rBGPD], a ld a, [hli] ld [rBGPD], a .end pop af ld [rSVBK], a ret FlickeringCaveEntrancePalette: ; 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 %11111111 ; 3,3,3,3 ret nz ld a, [rSVBK] push af ld a, BANK(wBGPals1) ld [rSVBK], a ; Ready for BGPD input... ld a, (1 << rBGPI_AUTO_INCREMENT) palette PAL_BG_YELLOW ld [rBGPI], a ld a, [hVBlankCounter] and %10 jr nz, .bit1set ld hl, wBGPals1 palette PAL_BG_YELLOW jr .okay .bit1set ld hl, wBGPals1 palette PAL_BG_YELLOW color 1 .okay ld a, [hli] ld [rBGPD], a ld a, [hli] ld [rBGPD], a pop af ld [rSVBK], a ret TowerPillarTilePointer1: dw vTiles2 tile $2d, TowerPillarTile1 TowerPillarTilePointer2: dw vTiles2 tile $2f, TowerPillarTile2 TowerPillarTilePointer3: dw vTiles2 tile $3d, TowerPillarTile3 TowerPillarTilePointer4: dw vTiles2 tile $3f, TowerPillarTile4 TowerPillarTilePointer5: dw vTiles2 tile $3c, TowerPillarTile5 TowerPillarTilePointer6: dw vTiles2 tile $2c, TowerPillarTile6 TowerPillarTilePointer7: dw vTiles2 tile $4d, TowerPillarTile7 TowerPillarTilePointer8: dw vTiles2 tile $4f, TowerPillarTile8 TowerPillarTilePointer9: dw vTiles2 tile $5d, TowerPillarTile9 TowerPillarTilePointer10: dw vTiles2 tile $5f, TowerPillarTile10 TowerPillarTile1: INCBIN "gfx/tilesets/tower-pillar/1.2bpp" TowerPillarTile2: INCBIN "gfx/tilesets/tower-pillar/2.2bpp" TowerPillarTile3: INCBIN "gfx/tilesets/tower-pillar/3.2bpp" TowerPillarTile4: INCBIN "gfx/tilesets/tower-pillar/4.2bpp" TowerPillarTile5: INCBIN "gfx/tilesets/tower-pillar/5.2bpp" TowerPillarTile6: INCBIN "gfx/tilesets/tower-pillar/6.2bpp" TowerPillarTile7: INCBIN "gfx/tilesets/tower-pillar/7.2bpp" TowerPillarTile8: INCBIN "gfx/tilesets/tower-pillar/8.2bpp" TowerPillarTile9: INCBIN "gfx/tilesets/tower-pillar/9.2bpp" TowerPillarTile10: INCBIN "gfx/tilesets/tower-pillar/10.2bpp" WhirlpoolFrames1: dw vTiles2 tile $32, WhirlpoolTiles1 WhirlpoolFrames2: dw vTiles2 tile $33, WhirlpoolTiles2 WhirlpoolFrames3: dw vTiles2 tile $42, WhirlpoolTiles3 WhirlpoolFrames4: dw vTiles2 tile $43, WhirlpoolTiles4 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"