summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-03-16 23:53:47 +0100
committerkdx <kikoodx@paranoici.org>2023-03-16 23:53:47 +0100
commit165eafe7ab96a8b751328299c6ae6e0ae4635185 (patch)
treef30f8651aaf50d06a5a1d19110a641f7683f6589
downloadstorm-165eafe7ab96a8b751328299c6ae6e0ae4635185.tar.gz
initial commitHEADmain
-rw-r--r--storm.p81884
1 files changed, 1884 insertions, 0 deletions
diff --git a/storm.p8 b/storm.p8
new file mode 100644
index 0000000..0f540ac
--- /dev/null
+++ b/storm.p8
@@ -0,0 +1,1884 @@
+pico-8 cartridge // http://www.pico-8.com
+version 41
+__lua__
+-- ~celex~
+-- maddy thorson + noel berry
+-- modified by kdx
+
+-- globals --
+-------------
+
+room = { x=0, y=0 }
+objects = {}
+types = {}
+freeze=0
+shake=0
+will_restart=false
+delay_restart=0
+got_fruit={}
+has_dashed=false
+sfx_timer=0
+has_key=false
+pause_player=false
+flash_bg=false
+music_timer=0
+screenshake=true
+
+k_left=0
+k_right=1
+k_up=2
+k_down=3
+k_jump=4
+k_dash=5
+
+-- entry point --
+-----------------
+
+function _init()
+ menuitem_screenshake()
+ title_screen()
+end
+
+function title_screen()
+ got_fruit = {}
+ for i=0,29 do
+ add(got_fruit,false) end
+ frames=0
+ deaths=0
+ max_djump=1
+ start_game=false
+ start_game_flash=0
+ music(40,0,7)
+
+ load_room(7,3)
+end
+
+function begin_game()
+ frames=0
+ seconds=0
+ minutes=0
+ music_timer=0
+ start_game=false
+ music(0,0,7)
+ load_room(0,0)
+end
+
+function level_index()
+ return room.x%8+room.y*8
+end
+
+function is_title()
+ return level_index()==31
+end
+
+-- effects --
+-------------
+
+clouds = {}
+for i=0,16 do
+ add(clouds,{
+ x=rnd(128),
+ y=rnd(128),
+ spd=1+rnd(4),
+ w=32+rnd(32)
+ })
+end
+
+particles = {}
+function add_particle()
+ add(particles,{
+ x=rnd(128),
+ y=rnd(128),
+ s=0+flr(rnd(5)/4),
+ spd=0.25+rnd(5),
+ off=rnd(1),
+ c=6+flr(0.5+rnd(1))
+ })
+end
+
+dead_particles = {}
+
+-- player entity --
+-------------------
+
+player =
+{
+ init=function(this)
+ this.p_jump=false
+ this.p_dash=false
+ this.grace=0
+ this.jbuffer=0
+ this.djump=max_djump
+ this.dash_time=0
+ this.dash_effect_time=0
+ this.dash_target={x=0,y=0}
+ this.dash_accel={x=0,y=0}
+ this.hitbox = {x=1,y=3,w=6,h=5}
+ this.spr_off=0
+ this.was_on_ground=false
+ create_hair(this)
+ end,
+ update=function(this)
+ if (pause_player) return
+
+ local input = btn(k_right) and 1 or (btn(k_left) and -1 or 0)
+
+ -- spikes collide
+ if spikes_at(this.x+this.hitbox.x,this.y+this.hitbox.y,this.hitbox.w,this.hitbox.h,this.spd.x,this.spd.y) then
+ kill_player(this) end
+
+ -- bottom death
+ if this.y>128 then
+ kill_player(this) end
+
+ local on_ground=this.is_solid(0,1)
+ local on_ice=this.is_ice(0,1)
+
+ -- smoke particles
+ if on_ground and not this.was_on_ground then
+ init_object(smoke,this.x,this.y+4)
+ end
+
+ local jump = btn(k_jump) and not this.p_jump
+ this.p_jump = btn(k_jump)
+ if (jump) then
+ this.jbuffer=4
+ elseif this.jbuffer>0 then
+ this.jbuffer-=1
+ end
+
+ local dash = btn(k_dash) and not this.p_dash
+ this.p_dash = btn(k_dash)
+
+ if on_ground then
+ this.grace=6
+ if this.djump<max_djump then
+ psfx(54)
+ this.djump=max_djump
+ end
+ elseif this.grace > 0 then
+ this.grace-=1
+ end
+
+ this.dash_effect_time -=1
+ if this.dash_time > 0 then
+ init_object(smoke,this.x,this.y)
+ this.dash_time-=1
+ this.spd.x=appr(this.spd.x,this.dash_target.x,this.dash_accel.x)
+ this.spd.y=appr(this.spd.y,this.dash_target.y,this.dash_accel.y)
+ else
+
+ -- move
+ local maxrun=1
+ local accel=0.6
+ local deccel=0.15
+
+ if not on_ground then
+ accel=0.4
+ elseif on_ice then
+ accel=0.05
+ if input==(this.flip.x and -1 or 1) then
+ accel=0.05
+ end
+ end
+
+ if abs(this.spd.x) > maxrun then
+ this.spd.x=appr(this.spd.x,sign(this.spd.x)*maxrun,deccel)
+ else
+ this.spd.x=appr(this.spd.x,input*maxrun,accel)
+ end
+
+ --facing
+ if this.spd.x!=0 then
+ this.flip.x=(this.spd.x<0)
+ end
+
+ -- gravity
+ local maxfall=2
+ local gravity=0.21
+
+ if abs(this.spd.y) <= 0.15 then
+ gravity*=0.5
+ end
+
+ -- wall slide
+ if input!=0 and this.is_solid(input,0) and not this.is_ice(input,0) then
+ maxfall=0.4
+ if rnd(10)<2 then
+ init_object(smoke,this.x+input*6,this.y)
+ end
+ end
+
+ if not on_ground then
+ this.spd.y=appr(this.spd.y,maxfall,gravity)
+ end
+
+ -- jump
+ if this.jbuffer>0 then
+ if this.grace>0 then
+ -- normal jump
+ psfx(1)
+ this.jbuffer=0
+ this.grace=0
+ this.spd.y=-2
+ init_object(smoke,this.x,this.y+4)
+ else
+ -- wall jump
+ local wall_dir=(this.is_solid(-3,0) and -1 or this.is_solid(3,0) and 1 or 0)
+ if wall_dir!=0 then
+ psfx(2)
+ this.jbuffer=0
+ this.spd.y=-2
+ this.spd.x=-wall_dir*(maxrun+1)
+ if not this.is_ice(wall_dir*3,0) then
+ init_object(smoke,this.x+wall_dir*6,this.y)
+ end
+ end
+ end
+ end
+
+ -- dash
+ local d_full=5
+ local d_half=d_full*0.70710678118
+
+ if this.djump>0 and dash then
+ init_object(smoke,this.x,this.y)
+ this.djump-=1
+ this.dash_time=4
+ has_dashed=true
+ this.dash_effect_time=10
+ local v_input=(btn(k_up) and -1 or (btn(k_down) and 1 or 0))
+ if input!=0 then
+ if v_input!=0 then
+ this.spd.x=input*d_half
+ this.spd.y=v_input*d_half
+ else
+ this.spd.x=input*d_full
+ this.spd.y=0
+ end
+ elseif v_input!=0 then
+ this.spd.x=0
+ this.spd.y=v_input*d_full
+ else
+ this.spd.x=(this.flip.x and -1 or 1)
+ this.spd.y=0
+ end
+
+ psfx(3)
+ freeze=0
+ shake=6
+ this.dash_target.x=2*sign(this.spd.x)
+ this.dash_target.y=2*sign(this.spd.y)
+ this.dash_accel.x=1.5
+ this.dash_accel.y=1.5
+
+ if this.spd.y<0 then
+ this.dash_target.y*=.75
+ end
+
+ if this.spd.y!=0 then
+ this.dash_accel.x*=0.70710678118
+ end
+ if this.spd.x!=0 then
+ this.dash_accel.y*=0.70710678118
+ end
+ elseif dash and this.djump<=0 then
+ psfx(9)
+ init_object(smoke,this.x,this.y)
+ end
+
+ end
+
+ -- animation
+ this.spr_off+=0.25
+ if not on_ground then
+ if this.is_solid(input,0) then
+ this.spr=5
+ else
+ this.spr=3
+ end
+ elseif btn(k_down) then
+ this.spr=6
+ elseif btn(k_up) then
+ this.spr=7
+ elseif (this.spd.x==0) or (not btn(k_left) and not btn(k_right)) then
+ this.spr=1
+ else
+ this.spr=1+this.spr_off%4
+ end
+
+ -- next level
+ if this.y<-4 and level_index()<30 then next_room() end
+
+ -- was on the ground
+ this.was_on_ground=on_ground
+
+ end, --<end update loop
+
+ draw=function(this)
+
+ -- clamp in screen
+ if this.x<-1 or this.x>121 then
+ this.x=clamp(this.x,-1,121)
+ this.spd.x=0
+ end
+
+ set_hair_color(this.djump)
+ draw_hair(this,this.flip.x and -1 or 1)
+ spr(this.spr,this.x,this.y,1,1,this.flip.x,this.flip.y)
+ unset_hair_color()
+ end
+}
+
+psfx=function(num)
+ if sfx_timer<=0 then
+ sfx(num)
+ end
+end
+
+create_hair=function(obj)
+ obj.hair={}
+ for i=0,4 do
+ add(obj.hair,{x=obj.x,y=obj.y,size=max(1,min(2,3-i))})
+ end
+end
+
+set_hair_color=function(djump)
+ pal(8,(djump==1 and 8 or djump==2 and (7+flr((frames/3)%2)*4) or 12))
+end
+
+draw_hair=function(obj,facing)
+ local last={x=obj.x+4-facing*2,y=obj.y+(btn(k_down) and 4 or 3)}
+ foreach(obj.hair,function(h)
+ h.x+=(last.x-h.x)/1.5
+ h.y+=(last.y+0.5-h.y)/1.5
+ circfill(h.x,h.y,h.size,8)
+ last=h
+ end)
+end
+
+unset_hair_color=function()
+ pal(8,8)
+end
+
+player_spawn = {
+ tile=1,
+ init=function(this)
+ sfx(4)
+ this.spr=3
+ this.target= {x=this.x,y=this.y}
+ this.y=128
+ this.spd.y=-4
+ this.state=0
+ this.delay=0
+ this.solids=false
+ create_hair(this)
+ end,
+ update=function(this)
+ -- jumping up
+ if this.state==0 then
+ if this.y < this.target.y+16 then
+ this.state=1
+ this.delay=3
+ end
+ -- falling
+ elseif this.state==1 then
+ this.spd.y+=0.5
+ if this.spd.y>0 and this.delay>0 then
+ this.spd.y=0
+ this.delay-=1
+ end
+ if this.spd.y>0 and this.y > this.target.y then
+ this.y=this.target.y
+ this.spd = {x=0,y=0}
+ this.state=2
+ this.delay=5
+ shake=5
+ init_object(smoke,this.x,this.y+4)
+ sfx(5)
+ end
+ -- landing
+ elseif this.state==2 then
+ this.delay-=1
+ this.spr=6
+ if this.delay<0 then
+ destroy_object(this)
+ init_object(player,this.x,this.y)
+ end
+ end
+ end,
+ draw=function(this)
+ set_hair_color(max_djump)
+ draw_hair(this,1)
+ spr(this.spr,this.x,this.y,1,1,this.flip.x,this.flip.y)
+ unset_hair_color()
+ end
+}
+add(types,player_spawn)
+
+spring = {
+ tile=18,
+ init=function(this)
+ this.hide_in=0
+ this.hide_for=0
+ end,
+ update=function(this)
+ if this.hide_for>0 then
+ this.hide_for-=1
+ if this.hide_for<=0 then
+ this.spr=18
+ this.delay=0
+ end
+ elseif this.spr==18 then
+ local hit = this.collide(player,0,0)
+ if hit ~=nil and hit.spd.y>=0 then
+ this.spr=19
+ hit.y=this.y-4
+ hit.spd.x*=0.2
+ hit.spd.y=-3
+ hit.djump=max_djump
+ this.delay=10
+ init_object(smoke,this.x,this.y)
+
+ -- breakable below us
+ local below=this.collide(fall_floor,0,1)
+ if below~=nil then
+ break_fall_floor(below)
+ end
+
+ psfx(8)
+ end
+ elseif this.delay>0 then
+ this.delay-=1
+ if this.delay<=0 then
+ this.spr=18
+ end
+ end
+ -- begin hiding
+ if this.hide_in>0 then
+ this.hide_in-=1
+ if this.hide_in<=0 then
+ this.hide_for=60
+ this.spr=0
+ end
+ end
+ end
+}
+add(types,spring)
+
+function break_spring(obj)
+ obj.hide_in=15
+end
+
+balloon = {
+ tile=22,
+ init=function(this)
+ this.offset=rnd(1)
+ this.start=this.y
+ this.timer=0
+ this.hitbox={x=-1,y=-1,w=10,h=10}
+ end,
+ update=function(this)
+ if this.spr==22 then
+ this.offset+=0.01
+ this.y=this.start+sin(this.offset)*2
+ local hit = this.collide(player,0,0)
+ if hit~=nil and hit.djump<max_djump then
+ psfx(6)
+ init_object(smoke,this.x,this.y)
+ hit.djump=max_djump
+ this.spr=0
+ this.timer=60
+ end
+ elseif this.timer>0 then
+ this.timer-=1
+ else
+ psfx(7)
+ init_object(smoke,this.x,this.y)
+ this.spr=22
+ end
+ end,
+ draw=function(this)
+ if this.spr==22 then
+ spr(13+(this.offset*8)%3,this.x,this.y+6)
+ spr(this.spr,this.x,this.y)
+ end
+ end
+}
+add(types,balloon)
+
+fall_floor = {
+ tile=23,
+ init=function(this)
+ this.state=0
+ this.solid=true
+ end,
+ update=function(this)
+ -- idling
+ if this.state == 0 then
+ if this.check(player,0,-1) or this.check(player,-1,0) or this.check(player,1,0) then
+ break_fall_floor(this)
+ end
+ -- shaking
+ elseif this.state==1 then
+ this.delay-=1
+ if this.delay<=0 then
+ this.state=2
+ this.delay=60--how long it hides for
+ this.collideable=false
+ end
+ -- invisible, waiting to reset
+ elseif this.state==2 then
+ this.delay-=1
+ if this.delay<=0 and not this.check(player,0,0) then
+ psfx(7)
+ this.state=0
+ this.collideable=true
+ init_object(smoke,this.x,this.y)
+ end
+ end
+ end,
+ draw=function(this)
+ if this.state!=2 then
+ if this.state!=1 then
+ spr(23,this.x,this.y)
+ else
+ spr(23+(15-this.delay)/5,this.x,this.y)
+ end
+ end
+ end
+}
+add(types,fall_floor)
+
+function break_fall_floor(obj)
+ if obj.state==0 then
+ psfx(15)
+ obj.state=1
+ obj.delay=15--how long until it falls
+ init_object(smoke,obj.x,obj.y)
+ local hit=obj.collide(spring,0,-1)
+ if hit~=nil then
+ break_spring(hit)
+ end
+ end
+end
+
+smoke={
+ init=function(this)
+ this.spr=29
+ this.spd.y=-0.1
+ this.spd.x=0.3+rnd(0.2)
+ this.x+=-1+rnd(2)
+ this.y+=-1+rnd(2)
+ this.flip.x=maybe()
+ this.flip.y=maybe()
+ this.solids=false
+ end,
+ update=function(this)
+ this.spr+=0.2
+ if this.spr>=32 then
+ destroy_object(this)
+ end
+ end
+}
+
+fruit={
+ tile=26,
+ if_not_fruit=true,
+ init=function(this)
+ this.start=this.y
+ this.off=0
+ end,
+ update=function(this)
+ local hit=this.collide(player,0,0)
+ if hit~=nil then
+ hit.djump=max_djump
+ sfx_timer=20
+ sfx(13)
+ got_fruit[1+level_index()] = true
+ init_object(lifeup,this.x,this.y)
+ destroy_object(this)
+ end
+ this.off+=1
+ this.y=this.start+sin(this.off/40)*2.5
+ end
+}
+add(types,fruit)
+
+fly_fruit={
+ tile=28,
+ if_not_fruit=true,
+ init=function(this)
+ this.start=this.y
+ this.fly=false
+ this.step=0.5
+ this.solids=false
+ this.sfx_delay=8
+ end,
+ update=function(this)
+ --fly away
+ if this.fly then
+ if this.sfx_delay>0 then
+ this.sfx_delay-=1
+ if this.sfx_delay<=0 then
+ sfx_timer=20
+ sfx(14)
+ end
+ end
+ this.spd.y=appr(this.spd.y,-3.5,0.25)
+ if this.y<-16 then
+ destroy_object(this)
+ end
+ -- wait
+ else
+ if has_dashed then
+ this.fly=true
+ end
+ this.step+=0.05
+ this.spd.y=sin(this.step)*0.5
+ end
+ -- collect
+ local hit=this.collide(player,0,0)
+ if hit~=nil then
+ hit.djump=max_djump
+ sfx_timer=20
+ sfx(13)
+ got_fruit[1+level_index()] = true
+ init_object(lifeup,this.x,this.y)
+ destroy_object(this)
+ end
+ end,
+ draw=function(this)
+ local off=0
+ if not this.fly then
+ local dir=sin(this.step)
+ if dir<0 then
+ off=1+max(0,sign(this.y-this.start))
+ end
+ else
+ off=(off+0.25)%3
+ end
+ spr(45+off,this.x-6,this.y-2,1,1,true,false)
+ spr(this.spr,this.x,this.y)
+ spr(45+off,this.x+6,this.y-2)
+ end
+}
+add(types,fly_fruit)
+
+lifeup = {
+ init=function(this)
+ this.spd.y=-0.25
+ this.duration=30
+ this.x-=2
+ this.y-=4
+ this.flash=0
+ this.solids=false
+ end,
+ update=function(this)
+ this.duration-=1
+ if this.duration<= 0 then
+ destroy_object(this)
+ end
+ end,
+ draw=function(this)
+ this.flash+=0.5
+
+ print("1000",this.x-2,this.y,7+this.flash%2)
+ end
+}
+
+fake_wall = {
+ tile=64,
+ if_not_fruit=true,
+ update=function(this)
+ this.hitbox={x=-1,y=-1,w=18,h=18}
+ local hit = this.collide(player,0,0)
+ if hit~=nil and hit.dash_effect_time>0 then
+ hit.spd.x=-sign(hit.spd.x)*1.5
+ hit.spd.y=-1.5
+ hit.dash_time=-1
+ sfx_timer=20
+ sfx(16)
+ destroy_object(this)
+ init_object(smoke,this.x,this.y)
+ init_object(smoke,this.x+8,this.y)
+ init_object(smoke,this.x,this.y+8)
+ init_object(smoke,this.x+8,this.y+8)
+ init_object(fruit,this.x+4,this.y+4)
+ end
+ this.hitbox={x=0,y=0,w=16,h=16}
+ end,
+ draw=function(this)
+ spr(64,this.x,this.y)
+ spr(65,this.x+8,this.y)
+ spr(80,this.x,this.y+8)
+ spr(81,this.x+8,this.y+8)
+ end
+}
+add(types,fake_wall)
+
+key={
+ tile=8,
+ if_not_fruit=true,
+ update=function(this)
+ local was=flr(this.spr)
+ this.spr=9+(sin(frames/30)+0.5)*1
+ local is=flr(this.spr)
+ if is==10 and is!=was then
+ this.flip.x=not this.flip.x
+ end
+ if this.check(player,0,0) then
+ sfx(23)
+ sfx_timer=10
+ destroy_object(this)
+ has_key=true
+ end
+ end
+}
+add(types,key)
+
+chest={
+ tile=20,
+ if_not_fruit=true,
+ init=function(this)
+ this.x-=4
+ this.start=this.x
+ this.timer=20
+ end,
+ update=function(this)
+ if has_key then
+ this.timer-=1
+ this.x=this.start-1+rnd(3)
+ if this.timer<=0 then
+ sfx_timer=20
+ sfx(16)
+ init_object(fruit,this.x,this.y-4)
+ destroy_object(this)
+ end
+ end
+ end
+}
+add(types,chest)
+
+platform={
+ init=function(this)
+ this.x-=4
+ this.solids=false
+ this.hitbox.w=16
+ this.last=this.x
+ end,
+ update=function(this)
+ this.spd.x=this.dir*0.65
+ if this.x<-16 then this.x=128
+ elseif this.x>128 then this.x=-16 end
+ if not this.check(player,0,0) then
+ local hit=this.collide(player,0,-1)
+ if hit~=nil then
+ hit.move_x(this.x-this.last,1)
+ end
+ end
+ this.last=this.x
+ end,
+ draw=function(this)
+ spr(11,this.x,this.y-1)
+ spr(12,this.x+8,this.y-1)
+ end
+}
+
+message={
+ tile=86,
+ last=0,
+ draw=function(this)
+ this.text="-- celeste mountain --#this memorial to those# perished on the climb"
+ if this.check(player,4,0) then
+ if this.index<#this.text then
+ this.index+=0.5
+ if this.index>=this.last+1 then
+ this.last+=1
+ sfx(35)
+ end
+ end
+ this.off={x=8,y=96}
+ for i=1,this.index do
+ if sub(this.text,i,i)~="#" then
+ rectfill(this.off.x-2,this.off.y-2,this.off.x+7,this.off.y+6 ,7)
+ print(sub(this.text,i,i),this.off.x,this.off.y,0)
+ this.off.x+=5
+ else
+ this.off.x=8
+ this.off.y+=7
+ end
+ end
+ else
+ this.index=0
+ this.last=0
+ end
+ end
+}
+add(types,message)
+
+big_chest={
+ tile=96,
+ init=function(this)
+ this.state=0
+ this.hitbox.w=16
+ end,
+ draw=function(this)
+ if this.state==0 then
+ local hit=this.collide(player,0,8)
+ if hit~=nil and hit.is_solid(0,1) then
+ music(-1,500,7)
+ sfx(37)
+ pause_player=true
+ hit.spd.x=0
+ hit.spd.y=0
+ this.state=1
+ init_object(smoke,this.x,this.y)
+ init_object(smoke,this.x+8,this.y)
+ this.timer=60
+ this.particles={}
+ end
+ spr(96,this.x,this.y)
+ spr(97,this.x+8,this.y)
+ elseif this.state==1 then
+ this.timer-=1
+ shake=5
+ flash_bg=true
+ if this.timer<=45 and count(this.particles)<50 then
+ add(this.particles,{
+ x=1+rnd(14),
+ y=0,
+ h=32+rnd(32),
+ spd=8+rnd(8)
+ })
+ end
+ if this.timer<0 then
+ this.state=2
+ this.particles={}
+ flash_bg=false
+ new_bg=true
+ init_object(orb,this.x+4,this.y+4)
+ pause_player=false
+ end
+ foreach(this.particles,function(p)
+ p.y+=p.spd
+ line(this.x+p.x,this.y+8-p.y,this.x+p.x,min(this.y+8-p.y+p.h,this.y+8),7)
+ end)
+ end
+ spr(112,this.x,this.y+8)
+ spr(113,this.x+8,this.y+8)
+ end
+}
+add(types,big_chest)
+
+orb={
+ init=function(this)
+ this.spd.y=-4
+ this.solids=false
+ this.particles={}
+ end,
+ draw=function(this)
+ this.spd.y=appr(this.spd.y,0,0.5)
+ local hit=this.collide(player,0,0)
+ if this.spd.y==0 and hit~=nil then
+ music_timer=45
+ sfx(51)
+ freeze=10
+ shake=10
+ destroy_object(this)
+ max_djump=2
+ hit.djump=2
+ end
+
+ spr(102,this.x,this.y)
+ local off=frames/30
+ for i=0,7 do
+ circfill(this.x+4+cos(off+i/8)*8,this.y+4+sin(off+i/8)*8,1,7)
+ end
+ end
+}
+
+flag = {
+ tile=118,
+ init=function(this)
+ this.x+=5
+ this.score=0
+ this.show=false
+ for i=1,count(got_fruit) do
+ if got_fruit[i] then
+ this.score+=1
+ end
+ end
+ end,
+ draw=function(this)
+ this.spr=118+(frames/5)%3
+ spr(this.spr,this.x,this.y)
+ end,
+ drawlast=function(this)
+ if this.show then
+ rectfill(32,2,96,31,0)
+ spr(26,55,6)
+ print("x"..this.score,64,9,7)
+ draw_time(49,16)
+ print("deaths:"..deaths,48,24,7)
+ elseif this.check(player,0,0) then
+ sfx(55)
+ sfx_timer=30
+ this.show=true
+ end
+ end
+}
+add(types,flag)
+
+room_title = {
+ init=function(this)
+ this.delay=5
+ end,
+ drawlast=function(this)
+ this.delay-=1
+ if this.delay<-30 then
+ destroy_object(this)
+ elseif this.delay<0 then
+
+ --rectfill(24,58,104,70,0)
+ --rect(26,64-10,102,64+10,7)
+ --print("---",31,64-2,13)
+ if room.x==3 and room.y==1 then
+ cprint("old site",64,62,7,0)
+ elseif level_index()==30 then
+ cprint("summit",64,62,7,0)
+ else
+ local level=(1+level_index())*100
+ cprint(level.." m",64,62,7,0)
+ end
+ --print("---",86,64-2,13)
+
+ draw_time(4,4)
+ end
+ end
+}
+
+-- object functions --
+-----------------------
+
+function init_object(type,x,y)
+ if type.if_not_fruit~=nil and got_fruit[1+level_index()] then
+ return
+ end
+ local obj = {}
+ obj.type = type
+ obj.collideable=true
+ obj.solids=true
+
+ obj.spr = type.tile
+ obj.flip = {x=false,y=false}
+
+ obj.x = x
+ obj.y = y
+ obj.hitbox = { x=0,y=0,w=8,h=8 }
+
+ obj.spd = {x=0,y=0}
+ obj.rem = {x=0,y=0}
+
+ obj.is_solid=function(ox,oy)
+ if oy>0 and not obj.check(platform,ox,0) and obj.check(platform,ox,oy) then
+ return true
+ end
+ return solid_at(obj.x+obj.hitbox.x+ox,obj.y+obj.hitbox.y+oy,obj.hitbox.w,obj.hitbox.h)
+ or obj.check(fall_floor,ox,oy)
+ or obj.check(fake_wall,ox,oy)
+ end
+
+ obj.is_ice=function(ox,oy)
+ return ice_at(obj.x+obj.hitbox.x+ox,obj.y+obj.hitbox.y+oy,obj.hitbox.w,obj.hitbox.h)
+ end
+
+ obj.collide=function(type,ox,oy)
+ local other
+ for i=1,count(objects) do
+ other=objects[i]
+ if other ~=nil and other.type == type and other != obj and other.collideable and
+ other.x+other.hitbox.x+other.hitbox.w > obj.x+obj.hitbox.x+ox and
+ other.y+other.hitbox.y+other.hitbox.h > obj.y+obj.hitbox.y+oy and
+ other.x+other.hitbox.x < obj.x+obj.hitbox.x+obj.hitbox.w+ox and
+ other.y+other.hitbox.y < obj.y+obj.hitbox.y+obj.hitbox.h+oy then
+ return other
+ end
+ end
+ return nil
+ end
+
+ obj.check=function(type,ox,oy)
+ return obj.collide(type,ox,oy) ~=nil
+ end
+
+ obj.move=function(ox,oy)
+ local amount
+ -- [x] get move amount
+ obj.rem.x += ox
+ amount = flr(obj.rem.x + 0.5)
+ obj.rem.x -= amount
+ obj.move_x(amount,0)
+
+ -- [y] get move amount
+ obj.rem.y += oy
+ amount = flr(obj.rem.y + 0.5)
+ obj.rem.y -= amount
+ obj.move_y(amount)
+ end
+
+ obj.move_x=function(amount,start)
+ if obj.solids then
+ local step = sign(amount)
+ for i=start,abs(amount) do
+ if not obj.is_solid(step,0) then
+ obj.x += step
+ else
+ obj.spd.x = 0
+ obj.rem.x = 0
+ break
+ end
+ end
+ else
+ obj.x += amount
+ end
+ end
+
+ obj.move_y=function(amount)
+ if obj.solids then
+ local step = sign(amount)
+ for i=0,abs(amount) do
+ if not obj.is_solid(0,step) then
+ obj.y += step
+ else
+ obj.spd.y = 0
+ obj.rem.y = 0
+ break
+ end
+ end
+ else
+ obj.y += amount
+ end
+ end
+
+ add(objects,obj)
+ if obj.type.init~=nil then
+ obj.type.init(obj)
+ end
+ return obj
+end
+
+function destroy_object(obj)
+ del(objects,obj)
+end
+
+function kill_player(obj)
+ sfx_timer=12
+ sfx(0)
+ add_particle()
+ deaths+=1
+ shake=10
+ destroy_object(obj)
+ dead_particles={}
+ for dir=0,7 do
+ local angle=(dir/8)
+ add(dead_particles,{
+ x=obj.x+4,
+ y=obj.y+4,
+ t=10,
+ spd={
+ x=sin(angle)*3,
+ y=cos(angle)*3
+ }
+ })
+ restart_room()
+ end
+end
+
+-- room functions --
+--------------------
+
+function restart_room()
+ will_restart=true
+ delay_restart=15
+end
+
+function next_room()
+ if room.x==2 and room.y==1 then
+ music(30,500,7)
+ elseif room.x==3 and room.y==1 then
+ music(20,500,7)
+ elseif room.x==4 and room.y==2 then
+ music(30,500,7)
+ elseif room.x==5 and room.y==3 then
+ music(30,500,7)
+ end
+
+ if room.x==7 then
+ load_room(0,room.y+1)
+ else
+ load_room(room.x+1,room.y)
+ end
+end
+
+function load_room(x,y)
+ has_dashed=false
+ has_key=false
+
+ --remove existing objects
+ foreach(objects,destroy_object)
+
+ --current room
+ room.x = x
+ room.y = y
+
+ -- entities
+ for tx=0,15 do
+ for ty=0,15 do
+ local tile = mget(room.x*16+tx,room.y*16+ty);
+ if tile==11 then
+ init_object(platform,tx*8,ty*8).dir=-1
+ elseif tile==12 then
+ init_object(platform,tx*8,ty*8).dir=1
+ else
+ foreach(types,
+ function(type)
+ if type.tile == tile then
+ init_object(type,tx*8,ty*8)
+ end
+ end)
+ end
+ end
+ end
+
+ if not is_title() then
+ init_object(room_title,0,0)
+ end
+end
+
+-- update function --
+-----------------------
+
+function _update()
+ frames=((frames+1)%30)
+ if frames==0 and level_index()<30 then
+ seconds=((seconds+1)%60)
+ if seconds==0 then
+ minutes+=1
+ end
+ end
+
+ if music_timer>0 then
+ music_timer-=1
+ if music_timer<=0 then
+ music(10,0,7)
+ end
+ end
+
+ if sfx_timer>0 then
+ sfx_timer-=1
+ end
+
+ -- cancel if freeze
+ if freeze>0 then freeze-=1 return end
+
+ -- screenshake
+ if screenshake and shake>0 then
+ shake-=1
+ camera()
+ if shake>0 then
+ camera(-20+rnd(40),-20+rnd(40))
+ end
+ end
+
+ -- restart (soon)
+ if will_restart and delay_restart>0 then
+ delay_restart-=1
+ if delay_restart<=0 then
+ will_restart=false
+ load_room(room.x,room.y)
+ end
+ end
+
+ -- update each object
+ foreach(objects,function(obj)
+ obj.move(obj.spd.x,obj.spd.y)
+ if obj.type.update~=nil then
+ obj.type.update(obj)
+ end
+ end)
+
+ -- start game
+ if is_title() then
+ if not start_game and (btn(k_jump) or btn(k_dash)) then
+ music(-1)
+ start_game_flash=50
+ start_game=true
+ sfx(38)
+ end
+ if start_game then
+ start_game_flash-=1
+ if start_game_flash<=-30 then
+ begin_game()
+ end
+ end
+ end
+end
+
+-- drawing functions --
+-----------------------
+function _draw()
+ if freeze>0 then return end
+
+ -- reset all palette values
+ pal()
+
+ -- start game flash
+ if start_game then
+ local c=10
+ if start_game_flash>10 then
+ if frames%10<5 then
+ c=7
+ end
+ elseif start_game_flash>5 then
+ c=2
+ elseif start_game_flash>0 then
+ c=1
+ else
+ c=0
+ end
+ if c<10 then
+ pal(6,c)
+ pal(12,c)
+ pal(13,c)
+ pal(5,c)
+ pal(1,c)
+ pal(7,c)
+ end
+ end
+
+ -- clear screen
+ local bg_col = 0
+ if flash_bg then
+ bg_col = frames/5
+ elseif new_bg~=nil then
+ bg_col=2
+ end
+ cls(0)
+ rectfill(0,0,128,128,bg_col)
+
+ -- clouds
+ if not is_title() then
+ foreach(clouds, function(c)
+ c.x += c.spd
+ rectfill(c.x,c.y,c.x+c.w,c.y+4+(1-c.w/64)*12,new_bg~=nil and 14 or 1)
+ if c.x > 128 then
+ c.x = -c.w
+ c.y=rnd(128-8)
+ end
+ end)
+ end
+
+ -- draw bg terrain
+ map(room.x * 16,room.y * 16,0,0,16,16,4)
+
+ -- platforms/big chest
+ foreach(objects, function(o)
+ if o.type==platform or o.type==big_chest then
+ draw_object(o)
+ end
+ end)
+
+ -- draw terrain
+ local off=is_title() and -4 or 0
+ map(room.x*16,room.y * 16,off,0,16,16,2)
+
+ -- draw objects
+ foreach(objects, function(o)
+ if o.type~=platform and o.type~=big_chest then
+ draw_object(o)
+ end
+ end)
+
+ -- draw fg terrain
+ map(room.x * 16,room.y * 16,0,0,16,16,8)
+
+ -- particles
+ foreach(particles, function(p)
+ p.x += p.spd
+ p.y += sin(p.off)
+ p.off+= min(0.05,p.spd/32)
+ rectfill(p.x,p.y,p.x+p.s,p.y+p.s,p.c)
+ if p.x>128+4 then
+ p.x=-4
+ p.y=rnd(128)
+ end
+ end)
+
+ -- dead particles
+ foreach(dead_particles, function(p)
+ p.x += p.spd.x
+ p.y += p.spd.y
+ p.t -=1
+ if p.t <= 0 then del(dead_particles,p) end
+ rectfill(p.x-p.t/5,p.y-p.t/5,p.x+p.t/5,p.y+p.t/5,14+p.t%2)
+ end)
+
+ -- draw outside of the screen for screenshake
+ rectfill(-5,-5,-1,133,0)
+ rectfill(-5,-5,133,-1,0)
+ rectfill(-5,128,133,133,0)
+ rectfill(128,-5,133,133,0)
+
+ camera(0,0)
+ foreach(objects, function(o)
+ if o.type~=platform and o.type~=big_chest then
+ drawlast_object(o)
+ end
+ end)
+
+ -- credits
+ if is_title() then
+ cprint("x+c",64,80,5)
+ cprint("maddy thorson",64,96,5)
+ cprint("noel berry",64,102,5)
+ end
+
+ if level_index()==30 then
+ local p
+ for i=1,count(objects) do
+ if objects[i].type==player then
+ p = objects[i]
+ break
+ end
+ end
+ if p~=nil then
+ local diff=min(24,40-abs(p.x+4-64))
+ rectfill(0,0,diff,128,0)
+ rectfill(128-diff,0,128,128,0)
+ end
+ end
+
+end
+
+function draw_object(obj)
+ if obj.type.draw~=nil then
+ obj.type.draw(obj)
+ elseif obj.spr and obj.spr>0 then
+ spr(obj.spr,obj.x,obj.y,1,1,obj.flip.x,obj.flip.y)
+ end
+end
+
+function drawlast_object(obj)
+ if obj.type.drawlast~=nil then
+ obj.type.drawlast(obj)
+ elseif not obj.type.draw and obj.spr and obj.spr>0 then
+ spr(obj.spr,obj.x,obj.y,1,1,obj.flip.x,obj.flip.y)
+ end
+end
+
+function draw_time(x,y)
+
+ local s=seconds
+ local m=minutes%60
+ local h=flr(minutes/60)
+
+ --rectfill(x,y,x+32,y+6,0)
+ fprint((h<10 and "0"..h or h)..":"..(m<10 and "0"..m or m)..":"..(s<10 and "0"..s or s),x+1,y+1,7,0)
+
+end
+
+-- helper functions --
+----------------------
+
+function clamp(val,a,b)
+ return max(a, min(b, val))
+end
+
+function appr(val,target,amount)
+ return val > target
+ and max(val - amount, target)
+ or min(val + amount, target)
+end
+
+function sign(v)
+ return v>0 and 1 or
+ v<0 and -1 or 0
+end
+
+function maybe()
+ return rnd(1)<0.5
+end
+
+function solid_at(x,y,w,h)
+ return tile_flag_at(x,y,w,h,0)
+end
+
+function ice_at(x,y,w,h)
+ return tile_flag_at(x,y,w,h,4)
+end
+
+function tile_flag_at(x,y,w,h,flag)
+ for i=max(0,flr(x/8)),min(15,(x+w-1)/8) do
+ for j=max(0,flr(y/8)),min(15,(y+h-1)/8) do
+ if fget(tile_at(i,j),flag) then
+ return true
+ end
+ end
+ end
+ return false
+end
+
+function tile_at(x,y)
+ return mget(room.x * 16 + x, room.y * 16 + y)
+end
+
+function spikes_at(x,y,w,h,xspd,yspd)
+ for i=max(0,flr(x/8)),min(15,(x+w-1)/8) do
+ for j=max(0,flr(y/8)),min(15,(y+h-1)/8) do
+ local tile=tile_at(i,j)
+ if tile==17 and ((y+h-1)%8>=6 or y+h==j*8+8) and yspd>=0 then
+ return true
+ elseif tile==27 and y%8<=2 and yspd<=0 then
+ return true
+ elseif tile==43 and x%8<=2 and xspd<=0 then
+ return true
+ elseif tile==59 and ((x+w-1)%8>=6 or x+w==i*8+8) and xspd>=0 then
+ return true
+ end
+ end
+ end
+ return false
+end
+-->8
+-- centered print
+function cprint(txt,x,y,c,c2)
+ fprint(txt,x-#txt*2,y,c,c2)
+end
+
+-- fancy print
+function fprint(txt,x,y,c,c2)
+ if c2 then
+ print(txt,x-1,y,c2)
+ print(txt,x+1,y,c2)
+ print(txt,x,y-1,c2)
+ print(txt,x,y+1,c2)
+ print(txt,x-1,y-1,c2)
+ print(txt,x-1,y+1,c2)
+ print(txt,x+1,y-1,c2)
+ print(txt,x+1,y+1,c2)
+ end
+ print(txt,x,y,c)
+end
+-->8
+function menuitem_screenshake()
+ menuitem(1,"screenshake "..(screenshake and"on"or"off"),menu_screenshake)
+end
+
+function menu_screenshake()
+ screenshake=not screenshake
+ menuitem_screenshake()
+end
+__gfx__
+000000000000000000000000088888800000000000000000000000000000000000aaaaa0000aaa000000a0000007707770077700000060000000600000060000
+000000000888888008888880888888880888888008888800000000000888888000a000a0000a0a000000a0000777777677777770000060000000600000060000
+000000008888888888888888888ffff888888888888888800888888088f1ff1800a909a0000a0a000000a0007766666667767777000600000000600000060000
+00000000888ffff8888ffff888f1ff18888ffff88ffff8808888888888fffff8009aaa900009a9000000a0007677766676666677000600000000600000060000
+0000000088f1ff1888f1ff1808fffff088f1ff1881ff1f80888ffff888fffff80000a0000000a0000000a0000000000000000000000600000006000000006000
+0000000008fffff008fffff00033330008fffff00fffff8088fffff8083333800099a0000009a0000000a0000000000000000000000600000006000000006000
+00000000003333000033330007000070073333000033337008f1ff10003333000009a0000000a0000000a0000000000000000000000060000006000000006000
+000000000070070000700070000000000000070000007000077333700070070000aaa0000009a0000000a0000000000000000000000060000006000000006000
+555555550000000000000000000000000000000000000000008888004999999449999994499909940300b0b0666566650300b0b0000000000000000070000000
+55555555000000000000000000000000000000000000000008888880911111199111411991140919003b330067656765003b3300007700000770070007000007
+550000550000000000000000000000000aaaaaa00000000008788880911111199111911949400419028888206770677002888820007770700777000000000000
+55000055007000700499994000000000a998888a1111111108888880911111199494041900000044089888800700070078988887077777700770000000000000
+55000055007000700050050000000000a988888a1000000108888880911111199114094994000000088889800700070078888987077777700000700000000000
+55000055067706770005500000000000aaaaaaaa1111111108888880911111199111911991400499088988800000000008898880077777700000077000000000
+55555555567656760050050000000000a980088a1444444100888800911111199114111991404119028888200000000002888820070777000007077007000070
+55555555566656660005500004999940a988888a1444444100000000499999944999999444004994002882000000000000288200000000007000000000000000
+5777777557777777777777777777777577cccccccccccccccccccc77577777755555555555555555555555555500000007777770000000000000000000000000
+77777777777777777777777777777777777cccccccccccccccccc777777777775555555555555550055555556670000077777777000777770000000000000000
+777c77777777ccccc777777ccccc7777777cccccccccccccccccc777777777775555555555555500005555556777700077777777007766700000000000000000
+77cccc77777cccccccc77cccccccc7777777cccccccccccccccc7777777cc7775555555555555000000555556660000077773377076777000000000000000000
+77cccc7777cccccccccccccccccccc777777cccccccccccccccc777777cccc775555555555550000000055555500000077773377077660000777770000000000
+777cc77777cc77ccccccccccccc7cc77777cccccccccccccccccc77777cccc775555555555500000000005556670000073773337077770000777767007700000
+7777777777cc77cccccccccccccccc77777cccccccccccccccccc77777c7cc77555555555500000000000055677770007333bb37000000000000007700777770
+5777777577cccccccccccccccccccc7777cccccccccccccccccccc7777cccc77555555555000000000000005666000000333bb30000000000000000000077777
+77cccc7777cccccccccccccccccccc77577777777777777777777775777ccc775555555550000000000000050000066603333330000000000000000000000000
+777ccc7777cccccccccccccccccccc77777777777777777777777777777cc7775055555555000000000000550007777603b333300000000000ee0ee000000000
+777ccc7777cc7cccccccccccc77ccc777777ccc7777777777ccc7777777cc77755550055555000000000055500000766033333300000000000eeeee000000030
+77ccc77777ccccccccccccccc77ccc77777ccccc7c7777ccccccc77777ccc777555500555555000000005555000000550333b33000000000000e8e00000000b0
+77ccc777777cccccccc77cccccccc777777ccccccc7777c7ccccc77777cccc7755555555555550000005555500000666003333000000b00000eeeee000000b30
+777cc7777777ccccc777777ccccc77777777ccc7777777777ccc777777cccc775505555555555500005555550007777600044000000b000000ee3ee003000b00
+777cc777777777777777777777777777777777777777777777777777777cc7775555555555555550055555550000076600044000030b00300000b00000b0b300
+77cccc77577777777777777777777775577777777777777777777775577777755555555555555555555555550000005500999900030330300000b00000303300
+5777755777577775077777777777777777777770077777700000000000000000cccccccc00000000000000000000000000000000000000000000000000000000
+7777777777777777700007770000777000007777700077770000000000000000c77ccccc00000000000000000000000000000000000000000000000000000000
+7777cc7777cc777770cc777cccc777ccccc7770770c777070000000000000000c77cc7cc00000000000000000000000000000000000000000000000000000000
+777cccccccccc77770c777cccc777ccccc777c0770777c070000000000000000cccccccc00000000000000000000000000006000000000000000000000000000
+77cccccccccccc77707770000777000007770007777700070002eeeeeeee2000cccccccc00000000000000000000000000060600000000000000000000000000
+57cc77ccccc7cc7577770000777000007770000777700007002eeeeeeeeee200cc7ccccc00000000000000000000000000d00060000000000000000000000000
+577c77ccccccc7757000000000000000000c000770000c0700eeeeeeeeeeee00ccccc7cc0000000000000000000000000d00000c000000000000000000000000
+777cccccccccc7777000000000000000000000077000000700e22222e2e22e00cccccccc000000000000000000000000d000000c000000000000000000000000
+777cccccccccc7777000000000000000000000077000000700eeeeeeeeeeee000000000000000000000000000000000c0000000c000600000000000000000000
+577cccccccccc7777000000c000000000000000770cc000700e22e2222e22e00000000000000000000000000000000d000000000c060d0000000000000000000
+57cc7cccc77ccc7570000000000cc0000000000770cc000700eeeeeeeeeeee0000000000000000000000000000000c00000000000d000d000000000000000000
+77ccccccc77ccc7770c00000000cc00000000c0770000c0700eee222e22eee0000000000000000000000000000000c0000000000000000000000000000000000
+777cccccccccc7777000000000000000000000077000000700eeeeeeeeeeee005555555506666600666666006600c00066666600066666006666660066666600
+7777cc7777cc777770000000000000000000000770c0000700eeeeeeeeeeee00555555556666666066666660660c000066666660666666606666666066666660
+777777777777777770000000c0000000000000077000000700ee77eee7777e005555555566000660660000006600000066000000660000000066000066000000
+57777577775577757000000000000000000000077000c007077777777777777055555555dd000000dddd0000dd000000dddd0000ddddddd000dd0000dddd0000
+000000000000000070000000000000000000000770000007007777005000000000000005dd000dd0dd000000dd0000d0dd000000000000d000dd0000dd000000
+00aaaaaaaaaaaa00700000000000000000000007700c0007070000705500000000000055ddddddd0dddddd00ddddddd0dddddd00ddddddd000dd0000dddddd00
+0a999999999999a0700000000000c00000000007700000077077000755500000000005550ddddd00ddddddd0ddddddd0ddddddd00ddddd0000dd0000ddddddd0
+a99aaaaaaaaaa99a7000000cc0000000000000077000cc077077bb07555500000000555500000000000000000000000000000000000000000000000000000000
+a9aaaaaaaaaaaa9a7000000cc0000000000c00077000cc07700bbb0755555555555555550000000000000c000000000000000000000000000000c00000000000
+a99999999999999a70c00000000000000000000770c00007700bbb075555555555555555000000000000c00000000000000000000000000000000c0000000000
+a99999999999999a700000000000000000000007700000070700007055555555555555550000000000cc0000000000000000000000000000000000c000000000
+a99999999999999a07777777777777777777777007777770007777005555555555555555000000000c000000000000000000000000000000000000c000000000
+aaaaaaaaaaaaaaaa07777777777777777777777007777770004bbb00004b000000400bbb00000000c0000000000000000000000000000000000000c000000000
+a49494a11a49494a70007770000077700000777770007777004bbbbb004bb000004bbbbb0000000100000000000000000000000000000000000000c00c000000
+a494a4a11a4a494a70c777ccccc777ccccc7770770c7770704200bbb042bbbbb042bbb00000000c0000000000000000000000000000000000000001010c00000
+a49444aaaa44494a70777ccccc777ccccc777c0770777c07040000000400bbb004000000000001000000000000000000000000000000000000000001000c0000
+a49999aaaa99994a7777000007770000077700077777000704000000040000000400000000000100000000000000000000000000000000000000000000010000
+a49444999944494a77700000777000007770000777700c0742000000420000004200000000000100000000000000000000000000000000000000000000001000
+a494a444444a494a7000000000000000000000077000000740000000400000004000000000000000000000000000000000000000000000000000000000000000
+a49499999999494a0777777777777777777777700777777040000000400000004000000000010000000000000000000000000000000000000000000000000010
+00000000000000008242525252528452339200001323232352232323232352230000000000000000b302000013232352526200a2828342525223232323232323
+00000000000000a20182920013232352363636462535353545550000005525355284525262b20000000000004252525262828282425284525252845252525252
+00000000000085868242845252525252b1006100b1b1b1b103b1b1b1b1b103b100000000000000111102000000a282425233000000a213233300009200008392
+000000000000110000a2000000a28213000000002636363646550000005525355252528462b2a300000000004252845262828382132323232323232352528452
+000000000000a201821323525284525200000000000000007300000000007300000000000000b343536300410000011362b2000000000000000000000000a200
+0000000000b302b2002100000000a282000000000000000000560000005526365252522333b28292001111024252525262019200829200000000a28213525252
+0000000000000000a2828242525252840000000000000000b10000000000b1000000000000000000b3435363930000b162273737373737373737374711000061
+000000110000b100b302b20000006182000000000000000000000000005600005252338282828201a31222225252525262820000a20011111100008283425252
+0000000000000093a382824252525252000061000011000000000011000000001100000000000000000000020182001152222222222222222222222232b20000
+0000b302b200000000b10000000000a200000000000000009300000000000000846282828283828282132323528452526292000000112434440000a282425284
+00000000000000a2828382428452525200000000b302b2936100b302b20061007293a30000000000000000b1a282931252845252525252232323232362b20000
+000000b10000001100000000000000000000000093000086820000a3000000005262828201a200a282829200132323236211111111243535450000b312525252
+00000000000000008282821323232323820000a300b1a382930000b100000000738283931100000000000011a382821323232323528462829200a20173b20061
+000000000000b302b2000061000000000000a385828286828282828293000000526283829200000000a20000000000005222222232263636460000b342525252
+00000011111111a3828201b1b1b1b1b182938282930082820000000000000000b100a282721100000000b372828283b122222232132333610000869200000000
+00100000000000b1000000000000000086938282828201920000a20182a37686526282829300000000000000000000005252845252328283920000b342845252
+00008612222232828382829300000000828282828283829200000000000061001100a382737200000000b373a2829211525284628382a2000000a20000000000
+00021111111111111111111111110061828282a28382820000000000828282825262829200000000000000000000000052525252526201a2000000b342525252
+00000113235252225353536300000000828300a282828201939300001100000072828292b1039300000000b100a282125223526292000000000000a300000000
+0043535353535353535353535363b2008282920082829200061600a3828382a28462000000000000000000000000000052845252526292000011111142525252
+0000a28282132362b1b1b1b1000000009200000000a28282828293b372b2000073820100110382a3000000110082821362101333610000000000008293000000
+0002828382828202828282828272b20083820000a282d3000717f38282920000526200000000000093000000000000005252525284620000b312223213528452
+000000828392b30300000000002100000000000000000082828282b303b20000b1a282837203820193000072a38292b162710000000000009300008382000000
+00b1a282820182b1a28283a28273b200828293000082122232122232820000a3233300000000000082920000000000002323232323330000b342525232135252
+000000a28200b37300000000a37200000010000000111111118283b373b200a30000828273039200828300738283001162930000000000008200008282920000
+0000009261a28200008261008282000001920000000213233342846282243434000000000000000082000085860000008382829200000000b342528452321323
+0000100082000082000000a2820300002222321111125353630182829200008300009200b1030000a28200008282001262829200000000a38292008282000000
+00858600008282a3828293008292610082001000001222222252525232253535000000f3100000a3820000a2010000008292000000009300b342525252522222
+0400122232b200839321008683039300528452222262c000a28282820000a38210000000a3738000008293008292001362820000000000828300a38201000000
+00a282828292a2828283828282000000343434344442528452525252622535350000001263000083829300008200c1008210d3e300a38200b342525252845252
+1232425262b28682827282820103820052525252846200000082829200008282320000008382930000a28201820000b162839300000000828200828282930000
+0000008382000000a28201820000000035353535454252525252528462253535000000032444008282820000829300002222223201828393b342525252525252
+525252525262b2b1b1b1132323526200845223232323232352522323233382825252525252525252525284522333b2822323232323526282820000b342525252
+52845252525252848452525262838242528452522333828292425223232352520000000000000000000000000000000000000000000000000000000000000000
+525252845262b2000000b1b1b142620023338276000000824233b2a282018283525252845252232323235262b1b10083921000a382426283920000b342232323
+2323232323232323232323526201821352522333b1b1018241133383828242840000000000000000000000000000000000000000000000000000000000000000
+525252525262b20000000000a242627682828392000011a273b200a382729200525252525233b1b1b1b11333000000825353536382426282410000b30382a2a2
+a1829200a2828382820182426200a2835262b1b10000831232b2000080014252000000000000a300000000000000000000000000000000000000000000000000
+528452232333b20000001100824262928201a20000b3720092000000830300002323525262b200000000b3720000a382828283828242522232b200b373928000
+000100110092a2829211a2133300a3825262b2000000a21333b20000868242520000000000000100009300000000000000000000000000000000000000000000
+525262122232b200a37672b2a24262838292000000b30300000000a3820300002232132333b200000000b303829300a2838292019242845262b2000000000000
+00a2b302b2a36182b302b200110000825262b200000000b1b10000a283a2425200000000a30082000083000000000000000000000094a4b4c4d4e4f400000000
+525262428462b200a28303b2214262928300000000b3030000000000a203e3415252222232b200000000b30392000000829200000042525262b2000000000000
+000000b100a2828200b100b302b211a25262b200000000000000000092b3428400000000827682000001009300000000000000000095a5b5c5d5e5f500000000
+232333132362b221008203b2711333008293858693b3031111111111114222225252845262b200001100b303b2000000821111111142528462b2000000000000
+000000000000110176851100b1b3026184621111111100000061000000b3135200000000828382670082768200000000000000000096a6b6c6d6e6f600000000
+82000000a203117200a203b200010193828283824353235353535353535252845252525262b200b37200b303b2000000824353535323235262b2000011000000
+0000000000b30282828372b26100b100525232122232b200000000000000b14200000000a28282123282839200000000000000000097a7b7c7d7e7f700000000
+9200110000135362b2001353535353539200a2000001828282829200b34252522323232362b261b30300b3030000000092b1b1b1b1b1b34262b200b372b20000
+001100000000b1a2828273b200000000232333132333b200001111000000b342000000868382125252328293a300000000000000000000000000000000000000
+00b372b200a28303b2000000a28293b3000000000000a2828382827612525252b1b1b1b173b200b30393b30361000000000000000000b34262b271b303b20000
+b302b211000000110092b100000000a3b1b1b1b1b1b10011111232110000b342000000a282125284525232828386000000000000000000000000000000000000
+80b303b20000820311111111008283b311111111110000829200928242528452000000a3820000b30382b37300000000000000000000b3426211111103b20000
+00b1b302b200b372b200000000000082b21000000000b31222522363b200b3138585868292425252525262018282860000000000000000000000000000000000
+00b373b20000a21353535363008292b32222222232111102b20000a21323525200000001839200b3038282820000000011111111930011425222222233b20000
+100000b10000b303b200000000858682b27100000000b3425233b1b1000000b182018283001323525284629200a2820000000000000000000000000000000000
+9300b100000000b1b1b1b1b100a200b323232323235363b100000000b1b1135200000000820000b30382839200000000222222328283432323232333b2000000
+329300000000b373b200000000a20182111111110000b31333b100a30061000000a28293f3123242522333020000820000000000000000000000000000000000
+829200001000410000000000000000b39310d30000a28200000000000000824200000086827600b30300a282760000005252526200828200a30182a2006100a3
+62820000000000b100000093a382838222222232b20000b1b1000083000000860000122222526213331222328293827600000000000000000000000000000000
+017685a31222321111111111002100b322223293000182930000000080a301131000a383829200b373000083920000005284526200a282828283920000000082
+62839321000000000000a3828282820152845262b261000093000082a300a3821000135252845222225252523201838200000000000000000000000000000000
+828382824252522222222232007100b352526282a38283820000000000838282320001828200000083000082010000005252526271718283820000000000a382
+628201729300000000a282828382828252528462b20000a38300a382018283821222324252525252525284525222223200000000000000000000000000000000
+__label__
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000770000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000770000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000070000000000000000006000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000060600000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000d00060000000000000066000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000d00000c000000000000066000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000d000000c000000000000000000000000000000000000000000000000060000000000
+00000000000000000000000000000000000000000000000000000000000c0000000c000600000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000d000000000c060d0000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000c00000000000d000d000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000006666600666666006600c00066666600066666006666660066666600000000000000000000000000000000000000
+0000000000000000000000000000000000006666666066666660660c000066666660666666606666666066666660000000000000000000000000000000000000
+00000000000000000000000000000000000066000660660000006600000066000000660000000066000066000000000000000000000000000000000000000000
+000000000000000000000000000000000000dd000000dddd0000dd000000dddd0000ddddddd000dd0000dddd0000000000000000000000000000000000000000
+000000000000000000000000000000000000dd000dd0dd000000dd0000d0dd000000000000d000dd0000dd000000000000000000000000000000000000000000
+000000000000000000000000000000000000ddddddd0dddddd00ddddddd0dddddd00ddddddd000dd0000dddddd00000000000000000000000000000000000000
+0000000000000000000000000000000000000ddddd00ddddddd0ddddddd0ddddddd00ddddd0000dd0000ddddddd0000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000c000000000000000000000000000000c00000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000c00000000000000000000000000000000c0000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000cc0000000000000000000000000000000000c000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000c000000000000000000000000000000000000c000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000c0000000000000000000000000000000000000c000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000100000000000000000000000000000000000000c00c000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000c0000000000000000000000000000000000000001010c00000000000000000000000000000000000000000
+000000000000000000000000000000000000000001000000000000000000000000000000000000000001000c0000000000000000000000000000000000000000
+00000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000600000000000000000000000000000000
+00000000000000000000000000000000000000000100000000000000000000000000000000000000000000001000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000010000000000000000000000000000000000000000000000000010000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000005050000005500000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000005050050050006000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000500555050000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000005050050050000000000000600000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000005050000005500000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000070000000000660000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000055505550555055500000555050500550555005500550550000000000000000000000000000000000000000
+00000000000000000000000000000000000000000055505050050005000000050050505050505050005050505000000000000000000000000000000000000000
+00000000000000000000000000000000000000000050505550050005000000050055505050550055505050505000000000000000000000000000000000000000
+00000000000000000000000000000000000000000050505050050005000000050050505050505000505050505000000000000000000000000000000000000000
+00000000000000000000000000000000000000000050505050050005000000050050505500505055005500505000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000605500055055505000000055505550555055505050000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000005050505050005000000050505000505050505050000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000005050505055005000000055005500550055005550000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000005050505050005000000050505000505050500050000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000005050550055505550000055505550505050505550000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+__gff__
+0000000000000000000000000000000004020000000000000000000200000000030303030303030304040402020000000303030303030303040404020202020200001313131302020302020202020002000013131313020204020202020202020000131313130004040202020202020200001313131300000002020202020202
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+__map__
+2331252548252532323232323300002425262425252631323232252628282824252525252525323328382828312525253232323233000000313232323232323232330000002432323233313232322525252525482525252525252526282824252548252525262828282824254825252526282828283132323225482525252525
+252331323232332900002829000000242526313232332828002824262a102824254825252526002a2828292810244825282828290000000028282900000000002810000000372829000000002a2831482525252525482525323232332828242525254825323338282a283132252548252628382828282a2a2831323232322525
+252523201028380000002a0000003d24252523201028292900282426003a382425252548253300002900002a0031252528382900003a676838280000000000003828393e003a2800000000000028002425253232323232332122222328282425252532332828282900002a283132252526282828282900002a28282838282448
+3232332828282900000000003f2020244825262828290000002a243300002a2425322525260000000000000000003125290000000021222328280000000000002a2828343536290000000000002839242526212223202123313232332828242548262b000000000000001c00003b242526282828000000000028282828282425
+2340283828293a2839000000343522252548262900000000000030000000002433003125333d3f00000000000000003100001c3a3a31252620283900000000000010282828290000000011113a2828313233242526103133202828282838242525262b000000000000000000003b2425262a2828670016002a28283828282425
+263a282828102829000000000000312525323300000000110000370000003e2400000037212223000000000000000000395868282828242628290000000000002a2828290000000000002123283828292828313233282829002a002a2828242525332b0c00000011110000000c3b314826112810000000006828282828282425
+252235353628280000000000003a282426003d003a3900270000000000002125001a000024252611111111000000002c28382828283831332800000017170000002a000000001111000024261028290028281b1b1b282800000000002a2125482628390000003b34362b000000002824252328283a67003a28282829002a3132
+25333828282900000000000000283824252320201029003039000000005824480000003a31323235353536675800003c282828281028212329000000000000000000000000003436003a2426282800003828390000002a29000000000031323226101000000000282839000000002a2425332828283800282828390000001700
+2600002a28000000003a283a2828282425252223283900372858390068283132000000282828282820202828283921222829002a28282426000000000000000000000000000020382828312523000000282828290000000000163a67682828003338280b00000010382800000b00003133282828282868282828280000001700
+330000002867580000281028283422252525482628286720282828382828212200003a283828102900002a28382824252a0000002838242600000017170000000000000000002728282a283133390000282900000000000000002a28282829002a2839000000002a282900000000000028282838282828282828290000000000
+0000003a2828383e3a2828283828242548252526002a282729002a28283432250000002a282828000000002810282425000000002a282426000000000000000000000000000037280000002a28283900280000003928390000000000282800000028290000002a2828000000000000002a282828281028282828675800000000
+0000002838282821232800002a28242532322526003a2830000000002a28282400000000002a281111111128282824480000003a28283133000000000000171700013f0000002029000000003828000028013a28281028580000003a28290000002a280c0000003a380c00000000000c00002a2828282828292828290000003a
+00013a2123282a313329001111112425002831263a3829300000000000002a310000000000002834222236292a0024253e013a3828292a00000000000000000035353536000020000000003d2a28671422222328282828283900582838283d00003a290000000028280000000000000000002a28282a29000058100012002a28
+22222225262900212311112122222525002a3837282900301111110000003a2800013f0000002a282426290000002425222222232900000000000000171700002a282039003a2000003a003435353535252525222222232828282810282821220b10000000000b28100000000b0000002c00002838000000002a283917000028
+2548252526111124252222252525482500012a2828673f242222230000003828222223000012002a24260000001224252525252600000000171700000000000000382028392827080028676820282828254825252525262a28282122222225253a28013d0000006828390000000000003c0168282800171717003a2800003a28
+25252525252222252525252525252525222222222222222525482667586828282548260000270000242600000021252525254826171700000000000000000000002a2028102830003a282828202828282525252548252600002a2425252548252821222300000028282800000000000022222223286700000000282839002838
+2532330000002432323232323232252525252628282828242532323232254825253232323232323225262828282448252525253300000000000000000000005225253232323233313232323233282900262829286700000000002828313232322525253233282800312525482525254825254826283828313232323232322548
+26282800000030402a282828282824252548262838282831333828290031322526280000163a28283133282838242525482526000000000000000000000000522526000016000000002a10282838390026281a3820393d000000002a3828282825252628282829003b2425323232323232323233282828282828102828203125
+3328390000003700002a3828002a2425252526282828282028292a0000002a313328111111282828000028002a312525252526000000000000000000000000522526000000001111000000292a28290026283a2820102011111121222328281025252628382800003b24262b002a2a38282828282829002a2800282838282831
+28281029000000000000282839002448252526282900282067000000000000003810212223283829003a1029002a242532323367000000000000000000004200252639000000212300000000002122222522222321222321222324482628282832323328282800003b31332b00000028102829000000000029002a2828282900
+2828280016000000162a2828280024252525262700002a2029000000000000002834252533292a0000002a00111124252223282800002c46472c00000042535325262800003a242600001600002425252525482631323331323324252620283822222328292867000028290000000000283800111100001200000028292a1600
+283828000000000000003a28290024254825263700000029000000000000003a293b2426283900000000003b212225252526382867003c56573c4243435363633233283900282426111111111124252525482526201b1b1b1b1b24252628282825252600002a28143a2900000000000028293b21230000170000112867000000
+2828286758000000586828380000313232323320000000000000000000272828003b2426290000000000003b312548252533282828392122222352535364000029002a28382831323535353522254825252525252300000000003132332810284825261111113435361111111100000000003b3133111111111127282900003b
+2828282810290000002a28286700002835353536111100000000000011302838003b3133000000000000002a28313225262a282810282425252662636400000000160028282829000000000031322525252525252667580000002000002a28282525323535352222222222353639000000003b34353535353536303800000017
+282900002a0000000000382a29003a282828283436200000000000002030282800002a29000011110000000028282831260029002a282448252523000000000039003a282900000000000000002831322525482526382900000017000058682832331028293b2448252526282828000000003b201b1b1b1b1b1b302800000017
+283a0000000000000000280000002828283810292a000000000000002a3710281111111111112136000000002a28380b2600000000212525252526001c0000002828281000000000001100002a382829252525252628000000001700002a212228282908003b242525482628282912000000001b00000000000030290000003b
+3829000000000000003a102900002838282828000000000000000000002a2828223535353535330000000000002828393300000000313225252533000000000028382829000000003b202b00682828003232323233290000000000000000312528280000003b3132322526382800170000000000000000110000370000000000
+290000000000000000002a000000282928292a0000000000000000000000282a332838282829000000000000001028280000000042434424252628390000000028002a0000110000001b002a2010292c1b1b1b1b0000000000000000000010312829160000001b1b1b313328106700000000001100003a2700001b0000000000
+00000100000011111100000000002a3a2a0000000000000000000000002a2800282829002a000000000000000028282800000000525354244826282800000000290000003b202b39000000002900003c000000000000000000000000000028282800000000000000001b1b2a2829000001000027390038300000000000000000
+1111201111112122230000001212002a00010000000000000000000000002900290000000000000000002a6768282900003f01005253542425262810673a3900013f0000002a3829001100000000002101000000000000003a67000000002a382867586800000100000000682800000021230037282928300000000000000000
+22222222222324482611111120201111002739000017170000001717000000000001000000001717000000282838393a0021222352535424253328282838290022232b00000828393b27000000001424230000001200000028290000000000282828102867001717171717282839000031333927101228370000000000000000
+254825252526242526212222222222223a303800000000000000000000000000001717000000000000003a28282828280024252652535424262828282828283925262b00003a28103b30000000212225260000002700003a28000000000000282838282828390000005868283828000022233830281728270000000000000000
+__sfx__
+0002000036370234702f3701d4702a37017470273701347023370114701e3700e4701a3600c46016350084401233005420196001960019600196003f6003f6003f6003f6003f6003f6003f6003f6003f6003f600
+0002000011070130701a0702407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000300000d07010070160702207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000200000642008420094200b420224402a4503c6503b6503b6503965036650326502d6502865024640216401d6401a64016630116300e6300b62007620056100361010600106000060000600006000060000600
+000400000f0701e070120702207017070260701b0602c060210503105027040360402b0303a030300203e02035010000000000000000000000000000000000000000000000000000000000000000000000000000
+000300000977009770097600975008740077300672005715357003470034700347003470034700347003570035700357003570035700347003470034700337003370033700337000070000700007000070000700
+00030000241700e1702d1701617034170201603b160281503f1402f120281101d1101011003110001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100
+00020000101101211014110161101a120201202613032140321403410000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100
+00030000070700a0700e0701007016070220702f0702f0602c0602c0502f0502f0402c0402c0302f0202f0102c000000000000000000000000000000000000000000000000000000000000000000000000000000
+0003000005110071303f6403f6403f6303f6203f6103f6153f6003f6003f600006000060000600006000060000600006000060000600006000060000600006000060000600006000060000600006000060000600
+011000200177500605017750170523655017750160500605017750060501705076052365500605017750060501775017050177500605236550177501605006050177500605256050160523655256050177523655
+002000001d0401d0401d0301d020180401804018030180201b0301b02022040220461f0351f03016040160401d0401d0401d002130611803018030180021f061240502202016040130201d0401b0221804018040
+00100000070700706007050110000707007060030510f0700a0700a0600a0500a0000a0700a0600505005040030700306003000030500c0700c0601105016070160600f071050500a07005050030510a0700a060
+000400000c5501c5601057023570195702c5702157037570285703b5702c5703e560315503e540315303e530315203f520315203f520315103f510315103f510315103f510315103f50000500005000050000500
+000400002f7402b760267701d7701577015770197701c750177300170015700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700
+00030000096450e655066550a6550d6550565511655076550c655046550965511645086350d615006050060500605006050060500605006050060500605006050060500605006050060500605006050060500605
+011000001f37518375273752730027300243001d300263002a3001c30019300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300
+011000002953429554295741d540225702256018570185701856018500185701856000500165701657216562275142753427554275741f5701f5601f500135201b55135530305602454029570295602257022560
+011000200a0700a0500f0710f0500a0600a040110701105007000070001107011050070600704000000000000a0700a0500f0700f0500a0600a0401307113050000000000013070130500f0700f0500000000000
+002000002204022030220201b0112404024030270501f0202b0402202027050220202904029030290201601022040220302b0401b030240422403227040180301d0401d0301f0521f0421f0301d0211d0401d030
+0108002001770017753f6253b6003c6003b6003f6253160023650236553c600000003f62500000017750170001770017753f6003f6003f625000003f62500000236502365500000000003f625000000000000000
+002000200a1400a1300a1201113011120111101b1401b13018152181421813213140131401313013120131100f1400f1300f12011130111201111016142161321315013140131301312013110131101311013100
+001000202e750377502e730377302e720377202e71037710227502b750227302b7301d750247501d730247301f750277501f730277301f7202772029750307502973030730297203072029710307102971030710
+000600001877035770357703576035750357403573035720357103570000700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700
+001800202945035710294403571029430377102942037710224503571022440274503c710274403c710274202e450357102e440357102e430377102e420377102e410244402b45035710294503c710294403c710
+0018002005570055700557005570055700000005570075700a5700a5700a570000000a570000000a5700357005570055700557000000055700557005570000000a570075700c5700c5700f570000000a57007570
+010c00103b6352e6003b625000003b61500000000003360033640336303362033610336103f6003f6150000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000c002024450307102b4503071024440307002b44037700244203a7102b4203a71024410357102b410357101d45033710244503c7101d4403771024440337001d42035700244202e7101d4102e7102441037700
+011800200c5700c5600c550000001157011560115500c5000c5700c5600f5710f56013570135600a5700a5600c5700c5600c550000000f5700f5600f550000000a5700a5600a5500f50011570115600a5700a560
+001800200c5700c5600c55000000115701156011550000000c5700c5600f5710f56013570135600f5700f5600c5700c5700c5600c5600c5500c5300c5000c5000c5000a5000a5000a50011500115000a5000a500
+000c0020247712477024762247523a0103a010187523a0103501035010187523501018750370003700037000227712277222762227001f7711f7721f762247002277122772227620070027771277722776200700
+000c0020247712477024762247523a0103a010187503a01035010350101875035010187501870018700007001f7711f7701f7621f7521870000700187511b7002277122770227622275237012370123701237002
+000c0000247712477024772247722476224752247422473224722247120070000700007000070000700007002e0002e0002e0102e010350103501033011330102b0102b0102b0102b00030010300123001230012
+000c00200c3320c3320c3220c3220c3120c3120c3120c3020c3320c3320c3220c3220c3120c3120c3120c30207332073320732207322073120731207312073020a3320a3320a3220a3220a3120a3120a3120a302
+000c00000c3300c3300c3200c3200c3100c3100c3103a0000c3300c3300c3200c3200c3100c3100c3103f0000a3300a3201333013320073300732007310113000a3300a3200a3103c0000f3300f3200f3103a000
+00040000336251a605000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005
+000c00000c3300c3300c3300c3200c3200c3200c3100c3100c3100c31000000000000000000000000000000000000000000000000000000000000000000000000a3000a3000a3000a3000a3310a3300332103320
+001000000c3500c3400c3300c3200f3500f3400f3300f320183501834013350133401835013350163401d36022370223702236022350223402232013300133001830018300133001330016300163001d3001d300
+000c0000242752b27530275242652b26530265242552b25530255242452b24530245242352b23530235242252b22530225242152b21530215242052b20530205242052b205302053a2052e205002050020500205
+001000102f65501075010753f615010753f6152f65501075010753f615010753f6152f6553f615010753f61500005000050000500005000050000500005000050000500005000050000500005000050000500005
+0010000016270162701f2711f2701f2701f270182711827013271132701d2711d270162711627016270162701b2711b2701b2701b270000001b200000001b2000000000000000000000000000000000000000000
+00080020245753057524545305451b565275651f5752b5751f5452b5451f5352b5351f5252b5251f5152b5151b575275751b545275451b535275351d575295751d545295451d535295351f5752b5751f5452b545
+002000200c2650c2650c2550c2550c2450c2450c2350a2310f2650f2650f2550f2550f2450f2450f2351623113265132651325513255132451324513235132351322507240162701326113250132420f2600f250
+00100000072750726507255072450f2650f2550c2750c2650c2550c2450c2350c22507275072650725507245072750726507255072450c2650c25511275112651125511245132651325516275162651625516245
+000800201f5702b5701f5402b54018550245501b570275701b540275401857024570185402454018530245301b570275701b540275401d530295301d520295201f5702b5701f5402b5401f5302b5301b55027550
+00100020112751126511255112451326513255182751826518255182451d2651d2550f2651824513275162550f2750f2650f2550f2451126511255162751626516255162451b2651b255222751f2451826513235
+00100010010752f655010753f6152f6553f615010753f615010753f6152f655010752f6553f615010753f61500005000050000500005000050000500005000050000500005000050000500005000050000500005
+001000100107501075010753f6152f6553f6153f61501075010753f615010753f6152f6553f6152f6553f61500005000050000500005000050000500005000050000500005000050000500005000050000500005
+002000002904029040290302b031290242b021290142b01133044300412e0442e03030044300302b0412b0302e0442e0402e030300312e024300212e024300212b0442e0412b0342e0212b0442b0402903129022
+000800202451524515245252452524535245352454524545245552455524565245652457500505245750050524565005052456500505245550050524555005052454500505245350050524525005052451500505
+000800201f5151f5151f5251f5251f5351f5351f5451f5451f5551f5551f5651f5651f575000051f575000051f565000051f565000051f555000051f555000051f545000051f535000051f525000051f51500005
+000500000373005731077410c741137511b7612437030371275702e5712437030371275702e5712436030361275602e5612435030351275502e5512434030341275402e5412433030331275202e5212431030311
+002000200c2750c2650c2550c2450c2350a2650a2550a2450f2750f2650f2550f2450f2350c2650c2550c2450c2750c2650c2550c2450c2350a2650a2550a2450f2750f2650f2550f2450f235112651125511245
+002000001327513265132551324513235112651125511245162751626516255162451623513265132551324513275132651325513245132350f2650f2550f2450c25011231162650f24516272162520c2700c255
+000300001f3302b33022530295301f3202b32022520295201f3102b31022510295101f3002b300225002950000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000b00002935500300293453037030360303551330524300243050030013305243002430500300003002430024305003000030000300003000030000300003000030000300003000030000300003000030000300
+001000003c5753c5453c5353c5253c5153c51537555375453a5753a5553a5453a5353a5253a5253a5153a51535575355553554535545355353553535525355253551535515335753355533545335353352533515
+00100000355753555535545355353552535525355153551537555375353357533555335453353533525335253a5753a5453a5353a5253a5153a51533575335553354533545335353353533525335253351533515
+001000200c0600c0300c0500c0300c0500c0300c0100c0000c0600c0300c0500c0300c0500c0300c0100f0001106011030110501103011010110000a0600a0300a0500a0300a0500a0300a0500a0300a01000000
+001000000506005030050500503005010050000706007030070500703007010000000f0600f0300f010000000c0600c0300c0500c0300c0500c0300c0500c0300c0500c0300c010000000c0600c0300c0100c000
+0010000003625246150060503615246251b61522625036150060503615116253361522625006051d6250a61537625186152e6251d615006053761537625186152e6251d61511625036150060503615246251d615
+00100020326103261032610326103161031610306102e6102a610256101b610136100f6100d6100c6100c6100c6100c6100c6100f610146101d610246102a6102e61030610316103361033610346103461034610
+00400000302453020530235332252b23530205302253020530205302253020530205302153020530205302152b2452b2052b23527225292352b2052b2252b2052b2052b2252b2052b2052b2152b2052b2052b215
+__music__
+01 150a5644
+00 0a160c44
+00 0a160c44
+00 0a0b0c44
+00 14131244
+00 0a160c44
+00 0a160c44
+02 0a111244
+00 41424344
+00 41424344
+01 18191a44
+00 18191a44
+00 1c1b1a44
+00 1d1b1a44
+00 1f211a44
+00 1f1a2144
+00 1e1a2244
+02 201a2444
+00 41424344
+00 41424344
+01 2a272944
+00 2a272944
+00 2f2b2944
+00 2f2b2c44
+00 2f2b2944
+00 2f2b2c44
+00 2e2d3044
+00 34312744
+02 35322744
+00 41424344
+01 3d7e4344
+00 3d7e4344
+00 3d4a4344
+02 3d3e4344
+00 41424344
+00 41424344
+00 41424344
+00 41424344
+00 41424344
+00 41424344
+01 383a3c44
+02 393b3c44
+