;; Little demo illustrating how to use the graphical possibilities ;; of the GB (background, window and animated sprite) ;; I have used fixed-point values for both the position and ;; speed of objects to get smooth movements ;; ;; OBJ data : 0x8000 -> 0x8FFF (unsigned) ;; Window data : 0x8800 -> 0x97FF (signed) ;; Background data : 0x8800 -> 0x97FF (signed) ;; ;; Tiled 0xFC -> 0xFF are standard tiles (all black -> all white) ;; ;; Keys: ;; Arrow keys : Change the speed (and direction) of the sprite ;; Arrow keys + A : Change the speed (and direction) of the window ;; Arrow keys + B : Change the speed (and direction) of the background ;; START : Open/close the door ;; SELECT : Basic fading effect ;; ;; Note that the window is kept in the lower right part of the screen ;; since it can't be made transparent .include "../../libc/gb/global.s" .globl .init_vram .globl .copy_vram .globl .init_wtt .globl .init_btt .globl .set_xy_wtt .globl .mv_sprite .globl .set_sprite_prop .globl .set_sprite_tile .globl .jpad .NBDFRAMES = .endfilm-.film ; Nb frames for the door .NBSFRAMES = 0x07 ; Nb frames for the sprite .WINSZX = 0x80 ; Size of the picture in the window .WINSZY = 0x50 .MINWINX = .MAXWNDPOSX-.WINSZX+1 ; Bounds of the window origin .MINWINY = .MAXWNDPOSY-.WINSZY+1 .MAXWINX = .MAXWNDPOSX .MAXWINY = .MAXWNDPOSY .FADESTEP = 0x10 ; Nb steps for the fading effect .STARTFADE = 0x06*.FADESTEP ; Initial value for the fading effect .CLOSED = 0x00 .OPENING = 0x01 .OPENED = 0x02 .CLOSING = 0x03 .module Space .area _BSS .time: ; Global "time" value (counter) .ds 0x01 .doorstate: ; State of the door (OPENED, CLOSED...) .ds 0x01 .doorpos: ; Current position in the door animation .ds 0x01 .color: ; Current color for fading effect .ds 0x01 .sframe: ; Current frame of the sprite .ds 0x01 .bposx: ; Background position (fixed point) .ds 0x02 .bposy: .ds 0x02 .bspx: ; Background speed (fixed point) .ds 0x02 .bspy: .ds 0x02 .wposx: ; Window position (fixed point) .ds 0x02 .wposy: .ds 0x02 .wspx: ; Window speed (fixed point) .ds 0x02 .wspy: .ds 0x02 .sposx: ; Sprite position (fixed point) .ds 0x02 .sposy: .ds 0x02 .sspx: ; Sprite speed (fixed point) .ds 0x02 .sspy: .ds 0x02 .area _CODE _main:: DI ; Disable interrupts ;; Turn the screen off CALL .display_off XOR A LD (.time),A LD (.color),A LD A,#0b11100100 LDH (.BGP),A LDH (.OBP0),A ; Initialize tiles LD HL,#0x8000 LD DE,#0x1000 LD B,#0x00 CALL .init_vram ; Init the tile set at 0x8000 with 0x00 LD B,#0xFF CALL .init_btt ; Init the tiles tables with 0xFF CALL .init_wtt LD BC,#.tp0 ; Move tiles (standard tiles) LD HL,#0x9000-(.endtp0-.tp0) LD DE,#.endtp0-.tp0 CALL .copy_vram LD BC,#.tp1 ; Move tiles (earth) LD HL,#0x8000 LD DE,#.endtp1-.tp1 CALL .copy_vram LD BC,#.tp2 ; Move tiles (door) LD HL,#0x8800 LD DE,#.endtp2-.tp2 CALL .copy_vram LD BC,#.tp3 ; Move tiles (background) LD HL,#0x9000 LD DE,#.endtp3-.tp3 CALL .copy_vram ;; Draw the background LD BC,#.bkg_tiles LD HL,#0x9800 LD DE,#0x0400 ; One whole GB Screen CALL .copy_vram ;; Draw the frame in the window LD BC,#.frame_tiles LD DE,#0x0000/8 ; Place image at (0x00,0x00) LD HL,#0x8050/8 ; Image size is 0x80 x 0x50 CALL .set_xy_wtt ;; Draw the door in the window LD BC,#.door1_tiles LD DE,#0x1010/8 ; Place image at (0x10,0x10) LD HL,#0x6030/8 ; Image size is 0x60 x 0x30 CALL .set_xy_wtt LD A,#.CLOSED LD (.doorstate),A ; Initialize background XOR A LD (.bposx),A LDH (.SCX),A LD (.bposx+1),A LD (.bposy),A LDH (.SCY),A LD (.bposy+1),A LD A,#-0x01 LD (.bspx),A XOR A LD (.bspx+1),A XOR A LD (.bspy),A LD A,#0x80 LD (.bspy+1),A ; Initialize window LD A,#.MAXWNDPOSX LD (.wposx),A LDH (.WX),A XOR A LD (.wposx+1),A LD A,#.MAXWNDPOSY LD (.wposy),A LDH (.WY),A XOR A LD (.wposy+1),A LD A,#-0x01 LD (.wspx),A LD A,#0x80 LD (.wspx+1),A LD A,#-0x01 LD (.wspy),A LD A,#0xC0 LD (.wspy+1),A ; Initialize sprite XOR A LD (.sframe),A LD C,#0x00 ; Sprite 0x00 LD D,#0x00 ; Default sprite properties CALL .set_sprite_prop LD C,#0x01 ; Sprite 0x01 LD D,#0x00 ; Default sprite properties CALL .set_sprite_prop LD A,#0x10 LD (.sposx),A XOR A LD (.sposx+1),A LD A,#0x10 LD (.sposy),A XOR A LD (.sposy+1),A XOR A LD (.sspx),A LD A,#0x40 LD (.sspx+1),A XOR A LD (.sspy),A LD A,#0x40 LD (.sspy+1),A CALL .tile_sprite ; Set sprite tiles CALL .place_sprite ; Place sprites LD A,#0b11100111 ; LCD = On ; WindowBank = 0x9C00 ; Window = On ; BG Chr = 0x8800 ; BG Bank = 0x9800 ; OBJ = 8x16 ; OBJ = On ; BG = On LDH (.LCDC),A EI ; Enable interrupts 1$: LD A,(.time) INC A LD (.time),A LD B,#0x04 ; Skip four VBLs (slow down animation) 2$: CALL .wait_vbl_done DEC B JR NZ,2$ CALL .fade CALL .door CALL .scroll CALL .animate_sprite CALL .jpad LD D,A AND #.B ; Is B pressed ? JP NZ,10$ LD A,D AND #.A ; Is A pressed ? JP NZ,20$ LD A,D AND #.SELECT ; Is SELECT pressed ? JR Z,3$ LD A,#.STARTFADE LD (.color),A 3$: LD A,D AND #.START ; Is START pressed ? JR Z,5$ LD A,(.doorstate) CP #.CLOSED JR NZ,4$ LD A,#.OPENING LD (.doorstate),A XOR A LD (.doorpos),A JR 5$ 4$: CP #.OPENED JR NZ,5$ LD A,#.CLOSING LD (.doorstate),A LD A,#.NBDFRAMES LD (.doorpos),A 5$: LD A,D AND #.UP ; Is UP pressed ? JR Z,6$ LD BC,#0x0010 LD A,(.sspy) ; Load speed into HL LD H,A LD A,(.sspy+1) LD L,A LD A,L ; Substract BC from HL SUB C LD (.sspy+1),A LD A,H SBC B LD (.sspy),A ; Store new speed JR 7$ 6$: LD A,D AND #.DOWN ; Is DOWN pressed ? JR Z,7$ LD BC,#0x0010 LD A,(.sspy) ; Load speed into HL LD H,A LD A,(.sspy+1) LD L,A ADD HL,BC ; Add them LD A,H ; Store new speed LD (.sspy),A LD A,L LD (.sspy+1),A 7$: LD A,D AND #.LEFT ; Is LEFT pressed ? JR Z,8$ LD BC,#0x0010 LD A,(.sspx) ; Load speed into HL LD H,A LD A,(.sspx+1) LD L,A LD A,L ; Substract BC from HL SUB C LD (.sspx+1),A LD A,H SBC B LD (.sspx),A ; Store new speed JP 1$ 8$: LD A,D AND #.RIGHT ; Is RIGHT pressed ? JP Z,1$ LD BC,#0x0010 LD A,(.sspx) ; Load speed into HL LD H,A LD A,(.sspx+1) LD L,A ADD HL,BC ; Add them LD A,H ; Store new speed LD (.sspx),A LD A,L LD (.sspx+1),A JP 1$ 10$: LD A,D AND #.UP ; Is UP pressed ? JP Z,11$ LD BC,#0x0010 LD A,(.bspy) ; Load speed into HL LD H,A LD A,(.bspy+1) LD L,A LD A,L ; Substract BC from HL SUB C LD (.bspy+1),A LD A,H SBC B LD (.bspy),A ; Store new speed JR 12$ 11$: LD A,D AND #.DOWN ; Is DOWN pressed ? JP Z,12$ LD BC,#0x0010 LD A,(.bspy) ; Load speed into HL LD H,A LD A,(.bspy+1) LD L,A ADD HL,BC ; Add them LD A,H ; Store new speed LD (.bspy),A LD A,L LD (.bspy+1),A 12$: LD A,D AND #.LEFT ; Is LEFT pressed ? JP Z,13$ LD BC,#0x0010 LD A,(.bspx) ; Load speed into HL LD H,A LD A,(.bspx+1) LD L,A LD A,L ; Substract BC from HL SUB C LD (.bspx+1),A LD A,H SBC B LD (.bspx),A ; Store new speed JP 1$ 13$: LD A,D AND #.RIGHT ; Is RIGHT pressed ? JP Z,1$ LD BC,#0x0010 LD A,(.bspx) ; Load speed into HL LD H,A LD A,(.bspx+1) LD L,A ADD HL,BC ; Add them LD A,H ; Store new speed LD (.bspx),A LD A,L LD (.bspx+1),A JP 1$ 20$: LD A,D AND #.UP ; Is UP pressed ? JP Z,21$ LD BC,#0x0010 LD A,(.wspy) ; Load speed into HL LD H,A LD A,(.wspy+1) LD L,A LD A,L ; Substract BC from HL SUB C LD (.wspy+1),A LD A,H SBC B LD (.wspy),A ; Store new speed JR 22$ 21$: LD A,D AND #.DOWN ; Is DOWN pressed ? JP Z,22$ LD BC,#0x0010 LD A,(.wspy) ; Load speed into HL LD H,A LD A,(.wspy+1) LD L,A ADD HL,BC ; Add them LD A,H ; Store new speed LD (.wspy),A LD A,L LD (.wspy+1),A 22$: LD A,D AND #.LEFT ; Is LEFT pressed ? JP Z,23$ LD BC,#0x0010 LD A,(.wspx) ; Load speed into HL LD H,A LD A,(.wspx+1) LD L,A LD A,L ; Substract BC from HL SUB C LD (.wspx+1),A LD A,H SBC B LD (.wspx),A ; Store new speed JP 1$ 23$: LD A,D AND #.RIGHT ; Is RIGHT pressed ? JP Z,1$ LD BC,#0x0010 LD A,(.wspx) ; Load speed into HL LD H,A LD A,(.wspx+1) LD L,A ADD HL,BC ; Add them LD A,H ; Store new speed LD (.wspx),A LD A,L LD (.wspx+1),A JP 1$ RET ;; Fade the screen (off and on) .fade: LD A,(.color) ; Load color into A CP #0x00 RET Z CP #.STARTFADE JR NZ,1$ LD A,#0b11111001 JR 6$ 1$: CP #.STARTFADE-.FADESTEP JR NZ,2$ LD A,#0b11111110 JR 6$ 2$: CP #.STARTFADE-0x02*.FADESTEP JR NZ,3$ LD A,#0b11111111 JR 6$ 3$: CP #.STARTFADE-0x03*.FADESTEP JR NZ,4$ LD A,#0b11111110 JR 6$ 4$: CP #.STARTFADE-0x04*.FADESTEP JR NZ,5$ LD A,#0b11111001 JR 6$ 5$: CP #.STARTFADE-0x05*.FADESTEP JR NZ,7$ LD A,#0b11100100 6$: LDH (.BGP),A 7$: LD A,(.color) DEC A LD (.color),A RET ;; Scroll the background, the window and the sprite .scroll: ;; Update background LD A,(.bposx) ; Load background position into HL LD H,A LD A,(.bposx+1) LD L,A LD A,(.bspx) ; Load background speed into BC LD B,A LD A,(.bspx+1) LD C,A ADD HL,BC ; Add them LD A,L ; Store new background position LD (.bposx+1),A LD A,H LD (.bposx),A LDH (.SCX),A ; Update position LD A,(.bposy) ; Load background position into HL LD H,A LD A,(.bposy+1) LD L,A LD A,(.bspy) ; Load background speed into BC LD B,A LD A,(.bspy+1) LD C,A ADD HL,BC ; Add them LD A,L ; Store new background position LD (.bposy+1),A LD A,H LD (.bposy),A LDH (.SCY),A ; Update position ;; Update window LD A,(.wspx) ; Load window speed into BC LD B,A LD A,(.wspx+1) LD C,A LD A,(.wposx) ; Load window position into HL LD H,A LD A,(.wposx+1) LD L,A ADD HL,BC ; Add them LD A,L ; Store new window position LD (.wposx+1),A LD A,H LD (.wposx),A ;; X position LD A,(.wposx) ; Check window position LD H,#0x00 ; We must use 16 bit registers since the LD L,A ; window is not less than 0x80 pixels LD BC,#.MAXWINX LD A,L ; Substract BC from HL SUB C LD A,H SBC B AND #0x80 JR NZ,1$ ; Maximum value ? LD A,#.MAXWINX LD (.wposx),A ; Correct window position LD A,(.wspx+1) ; Load window speed into BC LD C,A LD A,(.wspx) LD B,A AND #0x80 ; Speed is already negative ? JR NZ,3$ JR 2$ 1$: LD A,(.wposx) ; Check window position LD H,#0x00 ; We must use 16 bit registers since the LD L,A ; window is not less than 0x80 pixels LD BC,#.MINWINX+1 LD A,L ; Substract BC from HL SUB C LD A,H SBC B AND #0x80 JR Z,3$ ; Minimum value ? LD A,#.MINWINX LD (.wposx),A ; Correct window position LD A,(.wspx+1) ; Load window speed into BC LD C,A LD A,(.wspx) LD B,A AND #0x80 ; Speed is already positive ? JR Z,3$ 2$: LD HL,#0x00 ; Invert speed LD A,L ; Substract BC from HL SUB C LD (.wspx+1),A LD A,H SBC B LD (.wspx),A ; Store new speed 3$: LD A,(.wposx) LDH (.WX),A ; Update position LD A,(.wspy) ; Load window speed into BC LD B,A LD A,(.wspy+1) LD C,A LD A,(.wposy) ; Load window position into HL LD H,A LD A,(.wposy+1) LD L,A ADD HL,BC ; Add them LD A,L ; Store new window position LD (.wposy+1),A LD A,H LD (.wposy),A ;; Y position LD A,(.wposy) ; Check window position LD H,#0x00 ; We must use 16 bit registers since the LD L,A ; window is not less than 0x80 pixels LD BC,#.MAXWINY LD A,L ; Substract BC from HL SUB C LD A,H SBC B AND #0x80 JR NZ,4$ ; Maximum value ? LD A,#.MAXWINY LD (.wposy),A ; Correct window position LD A,(.wspy+1) ; Load window speed into BC LD C,A LD A,(.wspy) LD B,A AND #0x80 ; Speed is already negative ? JR NZ,6$ JR 5$ 4$: LD A,(.wposy) ; Check window position LD H,#0x00 ; We must use 16 bit registers since the LD L,A ; window is not less than 0x80 pixels LD BC,#.MINWINY+1 LD A,L ; Substract BC from HL SUB C LD A,H SBC B AND #0x80 JR Z,6$ ; Minimum value ? LD A,#.MINWINY LD (.wposy),A ; Correct window position LD A,(.wspy+1) ; Load window speed into BC LD C,A LD A,(.wspy) LD B,A AND #0x80 ; Speed is already positive ? JR Z,6$ 5$: LD HL,#0x00 ; Invert speed LD A,L ; Substract BC from HL SUB C LD (.wspy+1),A LD A,H SBC B LD (.wspy),A ; Store new speed 6$: LD A,(.wposy) LDH (.WY),A ; Update position ;; Update sprite LD A,(.sposx) ; Load sprite position into HL LD H,A LD A,(.sposx+1) LD L,A LD A,(.sspx) ; Load sprite speed into BC LD B,A LD A,(.sspx+1) LD C,A ADD HL,BC ; Add them LD A,L ; Store new sprite position LD (.sposx+1),A LD A,H LD (.sposx),A LD A,(.sposy) ; Load sprite position into HL LD H,A LD A,(.sposy+1) LD L,A LD A,(.sspy) ; Load sprite speed into BC LD B,A LD A,(.sspy+1) LD C,A ADD HL,BC ; Add them LD A,L ; Store new sprite position LD (.sposy+1),A LD A,H LD (.sposy),A CALL .place_sprite ; Update position RET ;; Open and close the door .door: LD A,(.doorstate) CP #.OPENING JP Z,.open_door CP #.CLOSING JP Z,.close_door RET .open_door: LD A,(.doorpos) LD HL,#.film+0x02 LD B,#0x00 LD C,A ADD HL,BC LD C,(HL) INC HL LD B,(HL) LD DE,#0x1010/8 ; Place image at (0x10,0x10) LD HL,#0x6030/8 ; Image size is 0x60 x 0x30 CALL .set_xy_wtt LD A,(.doorpos) ADD A,#0x02 LD (.doorpos),A CP #.NBDFRAMES RET NZ LD A,#.OPENED LD (.doorstate),A RET .close_door: LD A,(.doorpos) LD HL,#.film-0x02 LD B,#0x00 LD C,A ADD HL,BC LD C,(HL) INC HL LD B,(HL) LD DE,#0x1010/8 ; Place image at (0x10,0x10) LD HL,#0x6030/8 ; Image size is 0x60 x 0x30 CALL .set_xy_wtt LD A,(.doorpos) SUB A,#0x02 LD (.doorpos),A RET NZ LD A,#.CLOSED LD (.doorstate),A RET ;; Animate sprite .animate_sprite: LD A,(.time) AND #0x07 RET NZ LD A,(.sframe) INC A CP #.NBSFRAMES JR NZ,1$ XOR A 1$: LD (.sframe),A CALL .tile_sprite RET ;; Set sprite tiles .tile_sprite: LD A,(.sframe) LD HL,#.earth_tiles RLCA LD B,#0x00 LD C,A ADD HL,BC LD C,#0x00 ; Sprite 0x00 LD A,(HL+) LD D,A PUSH HL CALL .set_sprite_tile POP HL LD C,#0x01 ; Sprite 0x01 LD A,(HL+) LD D,A CALL .set_sprite_tile RET ;; Place sprite .place_sprite: LD C,#0x00 ; Sprite 0x00 LD A,(.sposx) LD D,A LD A,(.sposy) LD E,A PUSH DE ; Store position CALL .mv_sprite LD C,#0x01 ; Sprite 0x01 POP DE ; Restore position LD A,#0x08 ADD A,D LD D,A CALL .mv_sprite RET .area _LIT .tp0: .std_data: ; Basic tiles (0xFC to 0xFF) .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00 .byte 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 .endtp0: .tp1: .earth_data: ; Tile 0x00 .byte 0x07,0x07,0x18,0x1F,0x32,0x2D,0x71,0x4E,0x70,0x4F,0xF8,0x87,0xF8,0x87,0xF8,0x87 .byte 0xFC,0x83,0xFE,0x81,0x7F,0x40,0x7F,0x40,0x3F,0x20,0x1F,0x18,0x07,0x07,0x00,0x00 .byte 0xC0,0xC0,0xF0,0x30,0x78,0x88,0x3C,0xC4,0x5C,0xA4,0x9E,0x62,0x3E,0xC2,0x3E,0xC2 .byte 0x5E,0xA2,0x7E,0x82,0x0C,0xF4,0x0C,0xF4,0x98,0x68,0xB0,0x70,0xC0,0xC0,0x00,0x00 .byte 0x07,0x07,0x1F,0x18,0x2F,0x30,0x4F,0x70,0x6F,0x50,0x9F,0xE0,0x9F,0xE0,0xBF,0xC0 .byte 0xFF,0x80,0xB7,0xC8,0x63,0x5C,0x43,0x7C,0x3F,0x20,0x1F,0x18,0x07,0x07,0x00,0x00 .byte 0xC0,0xC0,0xB0,0x70,0x18,0xE8,0x0C,0xF4,0x0C,0xF4,0x82,0x7E,0x82,0x7E,0x86,0x7A .byte 0xC6,0x3A,0xE6,0x1A,0xF4,0x0C,0xFC,0x04,0xF8,0x08,0xF0,0x30,0xC0,0xC0,0x00,0x00 ; Tile 0x08 .byte 0x07,0x07,0x1E,0x19,0x20,0x3F,0x40,0x7F,0x42,0x7D,0x81,0xFE,0x81,0xFE,0x83,0xFC .byte 0xD7,0xA8,0xBB,0xC4,0x6E,0x51,0x7C,0x43,0x3F,0x20,0x1F,0x18,0x07,0x07,0x00,0x00 .byte 0xC0,0xC0,0x70,0xB0,0xE8,0x18,0xF4,0x0C,0xF4,0x0C,0xFE,0x02,0xFE,0x02,0xFE,0x02 .byte 0xFE,0x02,0x7E,0x82,0x3C,0xC4,0x3C,0xC4,0xF8,0x08,0xF0,0x30,0xC0,0xC0,0x00,0x00 .byte 0x07,0x07,0x1B,0x1C,0x20,0x3F,0x40,0x7F,0x40,0x7F,0xE0,0x9F,0x90,0xEF,0x89,0xF6 .byte 0x8D,0xF2,0x9F,0xE0,0x5E,0x61,0x6F,0x50,0x3F,0x20,0x1F,0x18,0x07,0x07,0x00,0x00 .byte 0xC0,0xC0,0xB0,0x70,0x28,0xD8,0x04,0xFC,0x2C,0xD4,0x1E,0xE2,0x1E,0xE2,0x3E,0xC2 .byte 0x7E,0x82,0xB6,0x4A,0xE4,0x1C,0xC4,0x3C,0xF8,0x08,0xF0,0x30,0xC0,0xC0,0x00,0x00 ; Tile 0x10 .byte 0x07,0x07,0x18,0x1F,0x20,0x3F,0x40,0x7F,0x40,0x7F,0xEE,0x91,0xF1,0x8E,0xE0,0x9F .byte 0xE0,0x9F,0xF1,0x8E,0x71,0x4E,0x72,0x4D,0x3F,0x20,0x1F,0x18,0x07,0x07,0x00,0x00 .byte 0xC0,0xC0,0xF0,0x30,0x08,0xF8,0x04,0xFC,0x04,0xFC,0x02,0xFE,0x02,0xFE,0x92,0x6E .byte 0xD6,0x2A,0xFE,0x02,0xEC,0x14,0xFC,0x04,0xF8,0x08,0xF0,0x30,0xC0,0xC0,0x00,0x00 .byte 0x07,0x07,0x1D,0x1A,0x36,0x29,0x5C,0x63,0x6C,0x53,0xCE,0xB1,0x9F,0xE0,0x9E,0xE1 .byte 0xAE,0xD1,0xBF,0xC0,0x47,0x78,0x47,0x78,0x2F,0x30,0x1F,0x18,0x07,0x07,0x00,0x00 .byte 0xC0,0xC0,0x70,0xB0,0x08,0xF8,0x04,0xFC,0x04,0xFC,0xE2,0x1E,0x32,0xCE,0x0E,0xF2 .byte 0x0E,0xF2,0x1E,0xE2,0x1C,0xE4,0x2C,0xD4,0xF8,0x08,0xF0,0x30,0xC0,0xC0,0x00,0x00 ; Tile 0x18 .byte 0x07,0x07,0x1E,0x19,0x33,0x2C,0x49,0x76,0x42,0x7D,0xC4,0xBB,0xC1,0xBE,0xC1,0xBE .byte 0xE2,0x9D,0xF3,0x8C,0x78,0x47,0x78,0x47,0x3C,0x23,0x1C,0x1B,0x07,0x07,0x00,0x00 .byte 0xC0,0xC0,0x70,0xB0,0x68,0x98,0xC4,0x3C,0xC4,0x3C,0xEE,0x12,0xF2,0x0E,0xE2,0x1E .byte 0xE2,0x1E,0xF2,0x0E,0x7C,0x84,0x7C,0x84,0xF8,0x08,0xF0,0x30,0xC0,0xC0,0x00,0x00 .endtp1: .tp2: .frame_data: ; Tile 0x00 .byte 0xFF,0x00,0x80,0x7F,0x80,0x7F,0x80,0x7F,0x80,0x7F,0x80,0x7F,0x80,0x7F,0x80,0x7F .byte 0xFF,0x00,0x01,0xFE,0x03,0xFC,0x07,0xF8,0x0F,0xF0,0x1F,0xE0,0x3F,0xC0,0x7F,0x80 .byte 0xFF,0x00,0xFE,0x01,0xFC,0x03,0xF8,0x07,0xF0,0x0F,0xE0,0x1F,0xC0,0x3F,0x80,0x7F .byte 0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF .byte 0xFF,0x00,0xFF,0x01,0xFD,0x03,0xF9,0x07,0xF1,0x0F,0xE1,0x1F,0xC1,0x3F,0x81,0x7F .byte 0x80,0x7F,0x81,0x7E,0x83,0x7C,0x87,0x78,0x8F,0x70,0x9F,0x60,0xBF,0x40,0xFF,0x00 .byte 0xFF,0x70,0xFF,0x98,0xEF,0xB8,0xCF,0xF8,0xFF,0x70,0xFF,0x00,0xFF,0x00,0xFF,0x01 .byte 0xFF,0x00,0xFE,0x01,0xFC,0x03,0xF8,0x07,0xF0,0x0F,0xE0,0x1F,0xC0,0x3F,0xFF,0xFF ; Tile 0x08 .byte 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF .byte 0x00,0xFF,0x01,0xFE,0x03,0xFC,0x07,0xF8,0x0F,0xF0,0x1F,0xE0,0x3F,0xC0,0xFF,0xFF .byte 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF .byte 0xFF,0x0E,0xFF,0x13,0xFD,0x17,0xF9,0x1F,0xFE,0x0F,0xE0,0x1F,0xC0,0x3F,0x80,0xFF .byte 0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF .byte 0xFF,0x01,0xFF,0x01,0xFD,0x03,0xF9,0x07,0xF1,0x0F,0xE1,0x1F,0xC1,0x3F,0x81,0x7F .byte 0x80,0x7F,0x80,0x7F,0x80,0x7F,0x80,0x7F,0x80,0x7F,0x80,0x7F,0x80,0x7F,0x80,0x7F .byte 0x01,0xFF,0x01,0xFF,0x03,0xFD,0x07,0xF9,0x0F,0xF1,0x1F,0xE1,0x3F,0xC1,0x7F,0x81 ; Tile 0x10 .byte 0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01 .byte 0x01,0xFF,0x01,0xFE,0x03,0xFC,0x77,0xF8,0xFF,0x98,0xEF,0xB8,0xCF,0xF8,0x7F,0xF0 .byte 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x0E,0xFF,0x13,0xFD,0x17,0xF9,0x1F,0xFF,0x0E .byte 0x80,0x7F,0x81,0x7E,0x83,0x7C,0x87,0x78,0x8F,0x70,0x9F,0x60,0xBF,0x40,0xFF,0x7F .byte 0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0xFF,0xFF .door1_data: ; Tile 0x15 .byte 0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF .byte 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF .byte 0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF .door2_data: ; Tile 0x18 .byte 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF .byte 0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF .byte 0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF .byte 0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .door3_data: ; Tile 0x1C .byte 0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF .byte 0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF .byte 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF .byte 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .door4_data: ; Tile 0x20 .byte 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .endtp2: .tp3: .bkg_data: ; Tile 0x00 .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xF7,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xDF,0xFF,0xEF,0xFF,0xFF,0xF7,0xFF,0xFB,0xFF,0xFD,0xFF,0xFE,0xFE,0xFF ; Tile 0x08 .byte 0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7D,0xFE,0x7C,0x39 .byte 0xFF,0xFF,0xF7,0xFF,0xEF,0xFF,0xFF,0xDF,0xFF,0xBF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFE,0xFF,0xFD .byte 0xBB,0x01,0xC7,0x83,0xC7,0x83,0xC7,0x83,0xBB,0x01,0x7C,0x39,0x7D,0xFE,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F .byte 0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFB,0xAF,0x77,0x27,0x8F,0xDF,0x8F,0x27,0x8F ; Tile 0x10 .byte 0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFB,0xFF,0xF7,0xEF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xBF,0xFF,0xDF,0xEF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFE,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xAF,0x77,0xFF,0xFB,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF ; Tile 0x18 .byte 0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x7D,0xFE,0x7C,0x39 .byte 0xFF,0xFF,0xF7,0xFF,0xEF,0xFF,0xFF,0xDF,0xFF,0xBF,0xFF,0x7F,0x7F,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFD ; Tile 0x20 .byte 0xFF,0xFF,0xDF,0xFF,0xEF,0xFF,0xFF,0xF7,0xFF,0xFB,0xFE,0xFD,0xFD,0xFE,0xFE,0xFF .byte 0xAB,0x11,0xC7,0x83,0x83,0xC7,0xC7,0x83,0xAB,0x11,0x7C,0x39,0x7D,0xFE,0xFE,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFB,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0x7F .byte 0xFB,0xFF,0xFF,0xFD,0xFE,0xFE,0xFE,0xFF,0xFE,0xFE,0xFF,0xFD,0xFB,0xFF,0xFF,0xFF .byte 0xEF,0xFF,0xFF,0xDF,0x3F,0xBF,0x3F,0x7F,0x3F,0xBF,0xFF,0xDF,0xEF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFB,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFD,0xFE,0xFE,0xFD .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,0xFF ; Tile 0x28 .byte 0xF7,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF .endtp3: ; Image size: 0x40 x 0x40 ; Number of tiles (total - unique): 0x40 - 0x2D .bkg_tiles: .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0x00,0x01,0x02,0x03,0xFC,0xFC,0x04,0xFC .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0x05,0x06,0xFC,0x07,0x08,0x09,0x0A .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0xFC,0xFC,0xFC,0x02,0x0B,0x0C,0x0D,0xFC .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x0E,0x0F,0x10,0xFC,0x11,0x12,0x13,0x14 .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x15,0x16,0x17,0xFC,0x18,0x19,0x1A,0xFC .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x1B,0x1C,0x1D,0xFC,0xFC,0x1E,0x1F,0x20 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x21,0x22,0xFC,0x23,0x24,0x25,0xFC,0x26 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 .byte 0x27,0x13,0x28,0x29,0x2A,0x2B,0x2C,0x11 ; Image size: 0x10 x 0x70 ; Number of tiles (total - unique): 0x1C - 0x1C .earth_tiles: .byte 0x00,0x02 .byte 0x04,0x06 .byte 0x08,0x0A .byte 0x0C,0x0E .byte 0x10,0x12 .byte 0x14,0x16 .byte 0x18,0x1A ; Image size: 0x80 x 0x50 ; Number of tiles (total - unique): 0xA0 - 0x15 .frame_tiles: .byte 0x80,0x81,0xFD,0x82,0x83,0x81,0xFD,0x82,0x83,0x81,0xFD,0x82,0x83,0x81,0xFD,0x84 .byte 0x85,0x86,0x87,0x88,0x89,0x8A,0x87,0x88,0x89,0x8A,0x87,0x88,0x89,0x8A,0x8B,0x8C .byte 0xFD,0x8D,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8E,0x8F .byte 0x82,0x8C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x85,0x90 .byte 0x8E,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x8D .byte 0x85,0x90,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x82,0x8C .byte 0xFD,0x8D,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8E,0x8F .byte 0x82,0x8C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x85,0x90 .byte 0x8E,0x91,0xFD,0x82,0x83,0x81,0xFD,0x82,0x83,0x81,0xFD,0x82,0x83,0x81,0x92,0x8D .byte 0x93,0x8A,0x87,0x88,0x89,0x8A,0x87,0x88,0x89,0x8A,0x87,0x88,0x89,0x8A,0x87,0x94 ; Image size: 0x60 x 0x30 ; Number of tiles (total - unique): 0x48 - 0x03 .door1_tiles: .byte 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95 .byte 0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96 .byte 0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97 .byte 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95 .byte 0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96 .byte 0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97 .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC ; Image size: 0x60 x 0x30 ; Number of tiles (total - unique): 0x48 - 0x04 .door2_tiles: .byte 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98 .byte 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99 .byte 0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A .byte 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98 .byte 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99 .byte 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC ; Image size: 0x60 x 0x30 ; Number of tiles (total - unique): 0x48 - 0x04 .door3_tiles: .byte 0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C .byte 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D .byte 0x9E,0x9E,0x9E,0x9E,0x9E,0x9E,0x9E,0x9E,0x9E,0x9E,0x9E,0x9E .byte 0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C .byte 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D .byte 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC ; Image size: 0x60 x 0x30 ; Number of tiles (total - unique): 0x48 - 0x01 .door4_tiles: .byte 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95 .byte 0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96 .byte 0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97 .byte 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95 .byte 0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96 .byte 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0 .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .byte 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC .film: .word .door1_tiles+0x0C*0 .word .door2_tiles+0x0C*0 .word .door3_tiles+0x0C*0 .word .door4_tiles+0x0C*0 .word .door1_tiles+0x0C*1 .word .door2_tiles+0x0C*1 .word .door3_tiles+0x0C*1 .word .door4_tiles+0x0C*1 .word .door1_tiles+0x0C*2 .word .door2_tiles+0x0C*2 .word .door3_tiles+0x0C*2 .word .door4_tiles+0x0C*2 .word .door1_tiles+0x0C*3 .word .door2_tiles+0x0C*3 .word .door3_tiles+0x0C*3 .word .door4_tiles+0x0C*3 .word .door1_tiles+0x0C*4 .word .door2_tiles+0x0C*4 .word .door3_tiles+0x0C*4 .word .door4_tiles+0x0C*4 .word .door1_tiles+0x0C*5 .word .door2_tiles+0x0C*5 .word .door3_tiles+0x0C*5 .word .door4_tiles+0x0C*5 .endfilm: .word .door1_tiles+0x0C*6