gbdk/gbdk-lib/examples/gb/space.s
2015-01-10 16:25:06 +01:00

1297 lines
35 KiB
ArmAsm
Executable file

;; 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