Files
pico8/demos/jelpi.p8
2025-07-25 11:46:41 +02:00

2592 lines
79 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

pico-8 cartridge // http://www.pico-8.com
version 41
__lua__
-- jelpi demo
-- by zep
level=1
num_players = 1
corrupt_mode = false
paint_mode = false
max_actors = 64
play_music = true
function make_actor(k,x,y,d)
local a = {
k=k,
frame=0,
frames=4,
life = 1,
hit_t=0,
x=x,y=y,dx=0,dy=0,
homex=x,homey=y,
ddx = 0.02, -- acceleration
ddy = 0.06, -- gravity
w=3/8,h=0.5, -- half-width
d=d or -1, -- direction
bounce=0.8,
friction=0.9,
can_bump=true,
dash=0,
super=0,
t=0,
standing = false,
draw=draw_actor,
move=move_actor,
}
-- attributes by flag
if (fget(k,6)) then
a.is_pickup=true
end
if (fget(k,7)) then
a.is_monster=true
a.move=move_monster
end
if (fget(k,4)) then
a.ddy = 0 -- zero gravity
end
-- attributes from actor_dat
for k,v in pairs(actor_dat[k])
do
a[k]=v
end
if (#actor < max_actors) then
add(actor, a)
end
return a
end
function make_sparkle(k,x,y,col)
local s = {
x=x,y=y,k=k,
frames=1,
col=col,
t=0, max_t = 8+rnd(4),
dx = 0, dy = 0,
ddy = 0
}
if (#sparkle < 512) then
add(sparkle,s)
end
return s
end
function make_player(k, x, y, d)
local a = make_actor(k, x, y, d)
a.is_player=true
a.move=move_player
a.score = 0
a.bounce = 0
a.delay = 0
a.id = 0 -- player 1
return a
end
-- called at start by pico-8
function _init()
init_actor_data()
init_level(level)
menuitem(1,
"restart level",
function()
init_level(level)
end)
end
-- clear_cel using neighbour val
-- prefer empty, then non-ground
-- then left neighbour
function clear_cel(x, y)
local val0 = mget(x-1,y)
local val1 = mget(x+1,y)
if ((x>0 and val0 == 0) or
(x<127 and val1 == 0)) then
mset(x,y,0)
elseif (not fget(val1,1)) then
mset(x,y,val1)
elseif (not fget(val0,1)) then
mset(x,y,val0)
else
mset(x,y,0)
end
end
function move_spawns(x0, y0)
x0=flr(x0)
y0=flr(y0)
-- spawn actors close to x0,y0
for y=0,16 do
for x=x0-10,max(16,x0+14) do
local val = mget(x,y)
-- actor
if (fget(val, 5)) then
m = make_actor(val,x+0.5,y+1)
clear_cel(x,y)
end
end
end
end
-- test if a point is solid
function solid (x, y, ignore)
if (x < 0 or x >= 128 ) then
return true end
local val = mget(x, y)
-- flag 6: can jump up through
-- (and only top half counts)
if (fget(val,6)) then
if (ignore) return false
-- bottom half: solid iff solid below
if (y%1 > 0.5) return solid(x,y+1)
end
return fget(val, 1)
end
-- solidx: solid at 2 points
-- along x axis
local function solidx(x,y,w)
return solid(x-w,y) or
solid(x+w,y)
end
function move_player(pl)
move_actor(pl)
if (pl.y > 18) pl.life=0
local b = pl.id
if (pl.life <= 0) then
for i=1,32 do
s=make_sparkle(69,
pl.x, pl.y-0.6)
s.dx = cos(i/32)/2
s.dy = sin(i/32)/2
s.max_t = 30
s.ddy = 0.01
s.frame=69+rnd(3)
s.col = 7
end
sfx(17)
pl.death_t=time()
return
end
local accel = 0.05
local q=0.7
if (pl.dash > 10) then
accel = 0.08
end
if (pl.super > 0) then
q*=1.5
accel*=1.5
end
if (not pl.standing) then
accel = accel / 2
end
-- player control
if (btn(0,b)) then
pl.dx = pl.dx - accel; pl.d=-1 end
if (btn(1,b)) then
pl.dx = pl.dx + accel; pl.d=1 end
if ((btn(4,b)) and
pl.standing) then
pl.dy = -0.7
sfx(8)
end
-- charge
if (btn(5,b) and pl.delay == 0)
then
pl.dash = 15
pl.delay= 20
-- charge in dir of buttons
dx=0 dy=0
if (btn(0,b)) dx-=1*q
if (btn(1,b)) dx+=1*q
-- keep controls to 4 btns
if (btn(2,b)) dy-=1*q
if (btn(3,b)) dy+=1*q
if (dx==0 and dy==0) then
pl.dx += pl.d * 0.4
else
local aa=atan2(dx,dy)
pl.dx += cos(aa)/2
pl.dy += sin(aa)/3
pl.dy=max(-0.5,pl.dy)
end
-- tiny extra vertical boost
if (not pl.standing) then
pl.dy = pl.dy - 0.2
end
sfx(11)
end
-- super: give more dash
if (pl.super > 0) pl.dash=2
-- dashing
if pl.dash > 0 then
if (abs(pl.dx) > 0.4 or
abs(pl.dy) > 0.2
) then
for i=1,3 do
local s = make_sparkle(
69+rnd(3),
pl.x+pl.dx*i/3,
pl.y+pl.dy*i/3 - 0.3,
(pl.t*3+i)%9+7)
if (rnd(2) < 1) then
s.col = 7
end
s.dx = -pl.dx*0.1
s.dy = -0.05*i/4
s.x = s.x + rnd(0.6)-0.3
s.y = s.y + rnd(0.6)-0.3
end
end
end
pl.dash = max(0,pl.dash-1)
pl.delay = max(0,pl.delay-1)
pl.super = max(0, pl.super-1)
-- frame
if (pl.standing) then
pl.frame = (pl.frame+abs(pl.dx)*2) % pl.frames
else
pl.frame = (pl.frame+abs(pl.dx)/2) % pl.frames
end
if (abs(pl.dx) < 0.1) pl.frame = 0
end
function move_monster(m)
move_actor(m)
if (m.life<=0) then
bang_puff(m.x,m.y-0.5,104)
sfx(14)
return
end
m.dx = m.dx + m.d * m.ddx
m.frame = (m.frame+abs(m.dx)*3+4) % m.frames
-- jump
if (false and m.standing and rnd(10) < 1)
then
m.dy = -0.5
end
-- hit cooldown
-- (can't get hit twice within
-- half a second)
if (m.hit_t>0) m.hit_t-=1
end
function smash(x,y,b)
local val = mget(x, y, 0)
if (not fget(val,4)) then
-- not smashable
-- -> pass on to solid()
return solid(x,y,b)
end
-- spawn
if (val == 48) then
local a=make_actor(
loot[#loot],
x+0.5,y-0.2)
a.dy=-0.8
a.d=flr(rnd(2))*2-1
a.d=0.25 -- swirly
loot[#loot]=nil
end
clear_cel(x,y)
sfx(10)
-- make debris
for by=0,1 do
for bx=0,1 do
s=make_sparkle(22,
0.25+flr(x) + bx*0.5,
0.25+flr(y) + by*0.5,
0)
s.dx = (bx-0.5)/4
s.dy = (by-0.5)/4
s.max_t = 30
s.ddy = 0.02
end
end
return false -- not solid
end
function move_actor(a)
if (a.life<=0) del(actor,a)
a.standing=false
-- when dashing, call smash()
-- for any touched blocks
-- (except for landing blocks)
local ssolid=
a.dash>0 and smash or solid
-- solid going down -- only
-- smash when holding down
local ssolidd=
a.dash>0 and (btn(3,a.id))
and smash or solid
--ignore jump-up-through
--blocks only when have gravity
local ign=a.ddy > 0
-- x movement
-- candidate position
x1 = a.x + a.dx + sgn(a.dx)/4
if not ssolid(x1,a.y-0.5,ign)
then
-- nothing in the way->move
a.x += a.dx
else -- hit wall
-- bounce
if (a.dash > 0)sfx(12)
a.dx *= -1
a.hit_wall=true
-- monsters turn around
if (a.is_monster) then
a.d *= -1
a.dx = 0
end
end
-- y movement
local fw=0.25
if (a.dy < 0) then
-- going up
if (
ssolid(a.x-fw, a.y+a.dy-1,ign) or
ssolid(a.x+fw, a.y+a.dy-1,ign))
then
a.dy=0
-- snap to roof
a.y=flr(a.y+.5)
else
a.y += a.dy
end
else
-- going down
local y1=a.y+a.dy
if ssolidd(a.x-fw,y1) or
ssolidd(a.x+fw,y1)
then
-- bounce
if (a.bounce > 0 and
a.dy > 0.2)
then
a.dy = a.dy * -a.bounce
else
a.standing=true
a.dy=0
end
-- snap to top of ground
a.y=flr(a.y+0.75)
else
a.y += a.dy
end
-- pop up
while solid(a.x,a.y-0.05) do
a.y -= 0.125
end
end
-- gravity and friction
a.dy += a.ddy
a.dy *= 0.95
-- x friction
a.dx *= a.friction
if (a.standing) then
a.dx *= a.friction
end
--end
-- counters
a.t = a.t + 1
end
function monster_hit(m)
if(m.hit_t>0) return
m.life-=1
m.hit_t=15
m.dx/=4
m.dy/=4
-- survived: thunk sound
if (m.life>0) sfx(21)
end
function player_hit(p)
if (p.dash>0) return
p.life-=1
end
function collide_event(a1, a2)
if (a1.is_monster and
a1.can_bump and
a2.is_monster) then
local d=sgn(a1.x-a2.x)
if (a1.d!=d) then
a1.dx=0
a1.d=d
end
end
-- bouncy mushroom
if (a2.k==82) then
if (a1.dy > 0 and
not a1.standing) then
a1.dy=-1.1
a2.active_t=6
sfx(18)
end
end
if(a1.is_player) then
if(a2.is_pickup) then
if (a2.k==64) then
a1.super = 30*4
--sfx(17)
a1.dx = a1.dx * 2
--a1.dy = a1.dy-0.1
-- a1.standing = false
sfx(13)
end
-- watermelon
if (a2.k==80) then
a1.score+=5
sfx(9)
end
-- end level
if (a2.k==65) then
finished_t=1
bang_puff(a2.x,a2.y-0.5,108)
del(actor,pl[1])
del(actor,pl[2])
music(-1,500)
sfx(24)
end
-- glitch mushroom
if (a2.k==84) then
glitch_mushroom = true
sfx(29)
end
-- gem
if (a2.k==67) then
a1.score = a1.score + 1
-- total gems between players
gems+=1
end
-- bridge builder
if (a2.k==99) then
local x,y=flr(a2.x)+.5,flr(a2.y+0.5)
for xx=-1,1 do
if (mget(x+xx,y)==0) then
local a=make_actor(53,x+xx,y+1)
a.dx=xx/2
end
end
end
a2.life=0
s=make_sparkle(85,a2.x,a2.y-.5)
s.frames=3
s.max_t=15
sfx(9)
end
-- charge or dupe monster
if(a2.is_monster) then -- monster
if(
(a1.dash > 0 or
a1.y < a2.y-a2.h/2)
and a2.can_bump
) then
-- slow down player
a1.dx *= 0.7
a1.dy *= -0.7
if (btn(🅾,a1.id))a1.dy -= .5
monster_hit(a2)
else
-- player death
a1.life=0
end
end
end
end
function move_sparkle(sp)
if (sp.t > sp.max_t) then
del(sparkle,sp)
end
sp.x = sp.x + sp.dx
sp.y = sp.y + sp.dy
sp.dy= sp.dy+ sp.ddy
sp.t = sp.t + 1
end
function collide(a1, a2)
if (not a1) return
if (not a2) return
if (a1==a2) then return end
local dx = a1.x - a2.x
local dy = a1.y - a2.y
if (abs(dx) < a1.w+a2.w) then
if (abs(dy) < a1.h+a2.h) then
collide_event(a1, a2)
collide_event(a2, a1)
end
end
end
function collisions()
-- to do: optimize if too
-- many actors
for i=1,#actor do
for j=i+1,#actor do
collide(actor[i],actor[j])
end
end
end
function outgame_logic()
if death_t==0 and
not alive(pl[1]) and
not alive(pl[2]) then
death_t=1
music(-1)
sfx(5)
end
if (finished_t > 0) then
finished_t += 1
if (finished_t > 60) then
if (btnp()) then
fade_out()
init_level(level+1)
end
end
end
if (death_t > 0) then
death_t = death_t + 1
if (death_t > 45 and
btn()>0)
then
music(-1)
sfx(-1)
sfx(0)
fade_out()
-- restart cart end of slice
init_level(level)
end
end
end
function _update()
for a in all(actor) do
a:move()
end
foreach(sparkle, move_sparkle)
collisions()
for i=1,#pl do
move_spawns(pl[i].x,0)
end
outgame_logic()
update_camera()
if (glitch_mushroom or corrupt_mode) then
for i=1,4 do
poke(rnd(0x8000),rnd(0x100))
end
end
level_t += 1
end
function _draw()
cls(12)
-- view width
local vw=split and 64 or 128
cls()
-- decide which side to draw
-- player 1 view
local view0_x = 0
if (split and pl[1].x>pl[2].x)
then view0_x = 64 end
-- player 1 (or whole screen)
draw_world(
view0_x,0,vw,128,
cam_x,cam_y)
-- player 2 view if needed
if (split) then
cam_x = pl_camx(pl[2].x,64)
draw_world(64-view0_x,0,vw,128,
cam_x, cam_y)
end
camera()pal()clip()
if (split) line(64,0,64,128,0)
-- player score
camera(0,0)
color(7)
if (death_t > 45) then
print("❎ restart",
44,10+1,14)
print("❎ restart",
44,10,7)
end
if (finished_t > 0) then
draw_finished(finished_t)
end
if (paint_mode) apply_paint()
draw_sign()
end
sign_str={
"",
[[
this is an empty level!
use the map editor to add
some blocks and monsters.
in the code editor you
can also set level=2
]],
"",
[[
this is not a level!
the bottom row of the map
in this cartridge is used
for making backgrounds.
]]
}
function draw_sign()
if (mget(pl[1].x,pl[1].y-0.5)!=25) return
rectfill(8,6,120,46,0)
rect(8,6,120,46,7)
print(sign_str[level],12,12,6)
end
function fade_out()
dpal={0,1,1, 2,1,13,6,
4,4,9,3, 13,1,13,14}
-- palette fade
for i=0,40 do
for j=1,15 do
col = j
for k=1,((i+(j%5))/4) do
col=dpal[col]
end
pal(j,col,1)
end
flip()
end
end
-->8
-- draw world
function draw_sparkle(s)
--spinning
if (s.k == 0) then
local sx=s.x*8
local sy=s.y*8
line(sx,sy,
sx+cos(s.t*s.spin)*1.4,
sy+sin(s.t*s.spin)*1.4,
s.col)
return
end
if (s.col and s.col > 0) then
for i=1,15 do
pal(i,s.col)
end
end
local fr=s.frames * s.t/s.max_t
fr=s.k+mid(0,fr,s.frames-1)
spr(fr, s.x*8-4, s.y*8-4)
pal()
end
function draw_actor(a)
local fr=a.k + a.frame
-- rainbow colour when dashing
if (a.dash>0) for i=2,15 do pal(i,7+((a.t/2) % 8)) end
local sx=a.x*8-4
local sy=a.y*8-8
-- sprite flag 3 (green):
-- draw one pixel up
if (fget(fr,3)) sy-=1
-- draw the sprite
spr(fr, sx,sy,1,1,a.d<0)
-- sprite flag 2 (yellow):
-- repeat top line
-- (for mimo's ears!)
if (fget(fr,2)) then
pal(14,7)
spr(fr,sx,sy-1,1,1/8,
a.d<0)
end
pal()
end
function draw_tail(a)
draw_actor(a)
local sx=a.x*8
local sy=a.y*8-2
local d=-a.d
sx += d*3
if (a.d>0) sx-=1
for i=0,4,2 do
pset(sx+i*d*1,
sy + cos(i/16-time())*
(1+i)*abs(a.dx)*4,7)
end
end
function apply_paint()
if (tt==nil) tt=0
tt=tt+0.25
srand(flr(tt))
local nn=rnd(128)
local xx=0
local yy=nn&127
for i=1,1000*13,13 do
nn+=i
nn*=33
xx=nn&127
local col=pget(xx,yy)
rectfill(xx,yy,xx+1,yy+1,col)
line(xx-1,yy-1,xx+2,yy+2,col)
nn+=i
nn*=57
yy=nn&127
rectfill(xx-1,yy-1,xx,yy,pget(xx,yy))
end
end
-- draw the world at sx,sy
-- with a view size: vw,vh
function draw_world(
sx,sy,vw,vh,cam_x,cam_y)
-- reduce jitter
cam_x=flr(cam_x)
cam_y=flr(cam_y)
if (level>=4) cam_y = 0
clip(sx,sy,vw,vh)
cam_x -= sx
local ldat=theme_dat[level]
if (not ldat) ldat={}
-- sky
camera (cam_x/4, cam_y/4)
-- sample palette colour
local colx=120+level
-- sky gradient
if (ldat.sky) then
for y=cam_y,127 do
col=ldat.sky[
flr(mid(1,#ldat.sky,
(y+(y%4)*6) / 16))]
line(0,y,511,y,col)
end
end
-- elements
for pass=0,1 do
camera()
for el in all(ldat.bgels) do
if (pass==0 and el.xyz[3]>1) or
(pass==1 and el.xyz[3]<=1)
then
pal()
if (el.cols) then
for i=1,#el.cols, 2 do
if (el.cols[i+1]==-1) then
palt(el.cols[i],true)
else
pal(el.cols[i],el.cols[i+1])
end
end
end
local s=el.src
local pixw=s[3] * 8
local pixh=s[4] * 8
local sx=el.xyz[1]
if (el.dx) then
sx += el.dx*t()
end
local sy=el.xyz[2]
sx = (sx-cam_x)/el.xyz[3]
sy = (sy-cam_y)/el.xyz[3]
repeat
map(s[1],s[2],sx,sy,s[3],s[4])
if (el.fill_up) then
rectfill(sx,-1,sx+pixw-1,sy-1,el.fill_up)
end
if (el.fill_down) then
rectfill(sx,sy+pixh,sx+pixw-1,128,el.fill_down)
end
sx+=pixw
until sx >= 128 or not el.xyz[4]
end
end
pal()
if (pass==0) then
draw_z1(cam_x,cam_y)
end
end
clip()
end
-- map and actors
function draw_z1(cam_x,cam_y)
camera (cam_x,cam_y)
pal(12,0) -- 12 is transp
map (0,0,0,0,128,64,0)
pal()
foreach(sparkle, draw_sparkle)
for a in all(actor) do
pal()
if (a.hit_t>0 and a.t%4 < 2) then
for i=1,15 do
pal(i,8+(a.t/4)%4)
end
end
a:draw() -- same as a.draw(a)
end
-- forground map
map (0,0,0,0,128,64,1)
end
-->8
-- explosions
function bang_puff(mx,my,sp)
local aa=rnd(1)
for i=0,5 do
local dx=cos(aa+i/6)/4
local dy=sin(aa+i/6)/4
local s=make_sparkle(
sp,mx + dx, my + dy)
s.dx = dx
s.dy = dy
s.max_t=10
end
end
function atomize_sprite(s,mx,my,col)
local sx=(s%16)*8
local sy=flr(s/16)*8
local w=0.04
for y=0,7 do
for x=0,7 do
if (sget(sx+x,sy+y)>0) then
local q=make_sparkle(0,
mx+x/8,
my+y/8)
q.dx=(x-3.5)/32 +rnd(w)-rnd(w)
q.dy=(y-7)/32 +rnd(w)-rnd(w)
q.max_t=20+rnd(20)
q.t=rnd(10)
q.spin=0.05+rnd(0.1)
if (rnd(2)<1) q.spin*=-1
q.ddy=0.01
q.col=col or sget(sx+x,sy+y)
end
end
end
end
-->8
-- camera
-- (camera y is lazy)
ccy_t=0
ccy =0
-- splitscreen (multiplayer)
split=false
-- camera x for player i
function pl_camx(x,sw)
return mid(0,x*8-sw/2,1024-sw)
end
function update_camera()
local num=0
if (alive(pl[1])) num+=1
if (alive(pl[2])) num+=1
split = num==2 and
abs(pl_camx(pl[1].x,64) -
pl_camx(pl[2].x,64)) > 64
-- camera y target changes
-- when standing. quantize y
-- into 2 blocks high so don't
-- get small adjustments
-- (should be in _update)
if (num==2) then
-- 2 active players: average y
ccy_t=0
for i=1,2 do
ccy_t += (flr(pl[i].y/2+.5)*2-12)*3
end
ccy_t/=2
else
-- single: set target only
-- when standing
for i=1,#pl do
if (alive(pl[i]) and
pl[i].standing) then
ccy_t=(
flr(pl[i].y/2+.5)*2-12
)*3
end
end
end
-- target always <= 0
ccy_t=min(0,ccy_t)
ccy = ccy*7/8+ccy_t*1/8
cam_y = ccy
local xx=0
local qq=0
for i=1,#pl do
if (alive(pl[i])) then
local q=1
-- pan across when first
-- player dies and not in
-- split screen
if (pl[i].life<=0 and pl[i].death_t) then
q=time()-pl[i].death_t
q=mid(0,1-q*2,1)
q*=q
end
xx+=pl[i].x * q
qq += q
end
end
if (split) then
cam_x = pl_camx(pl[1].x,64)
elseif qq>0 then
cam_x = pl_camx(xx/qq,128)
end
end
-->8
-- actors
function init_actor_data()
function dummy() end
actor_dat=
{
-- bridge builder
[53]={
ddy=0,
friction=1,
move=move_builder,
draw=dummy
},
[64]={
draw=draw_charge_powerup
},
[65]={
draw=draw_exit
},
-- swirly
[80]={
life=2,
frames=1,
bounce=0,
ddy=0, -- gravity
move=move_swirly,
draw=draw_swirly,
can_bump=false,
d=0.25,
r=5 -- collisions
},
-- bouncy mushroom
[82]={
ddx=0,
frames=1,
active_t=0,
move=move_mushroom
},
-- glitch mushroom
[84]={
draw=draw_glitch_mushroom
},
-- bird
[93]={
move=move_bird,
draw=draw_bird,
bounce=0,
ddy=0.03,-- default:0.06
},
-- frog
[96]={
move=move_frog,
draw=draw_frog,
bounce=0,
friction=1,
tongue=0,
tongue_t=0
},
[116]={
draw=draw_tail
}
}
end
function move_builder(a)
local x,y=a.x,a.y-0.5
local val=mget(x,y)
if val==0 then
mset(x,y,53)
sfx(19)
elseif val!=53
then
del(actor,a)
end
a.t += 1
if (x<1 or x>126 or a.t > 30)
then del(actor,a) end
for i=0,0.2,0.1 do
local s=make_sparkle(
104,a.x,a.y-0.5)
s.dx=cos(i+a.x/4)/8
s.dy=sin(i+a.x/4)/8
s.col=10
s.max_t=10+rnd(10)
end
a.x+=a.dx
end
function move_frog(a)
move_actor(a)
if (a.life<=0) then
bang_puff(a.x,a.y-0.5,104)
sfx(26)
end
a.frame=0
local p=closest_p(a,16)
if (a.standing) then
a.dy=0 a.dx=0
-- jump
if (rnd(20)<1 and
a.tongue_t==0) then -- jump freq
-- face player 2/3 times
if rnd(3)<2 and p then
a.d=sgn(p.x-a.x)
end
a.dy=-0.6-rnd(0.4)
a.dx=a.d/4
a.standing=false
sfx(23)
end
else
a.frame=1
end
-- move tongue
-- stick tongue out when standing
if a.tongue_t==0 and
p and abs(a.x-p.x)<5 and
rnd(20)<1 and
a.standing then
a.tongue_t=1
end
-- move active tongue
if (a.tongue_t>0) then
a.frame=2
a.tongue_t = (a.tongue_t+1)%24
local tlen = sin(a.tongue_t/48)*5
a.tongue_x=a.x-tlen*a.d
-- catch player
if not a.ha and p then
local dx=p.x-a.tongue_x
local dy=p.y-a.y
if (dx*dx+dy*dy<0.7^2)
then a.ha=p sfx(22) end
end
-- skip to retracting
if (solid(a.tongue_x,
a.y-.5) and
a.tongue_t < 11) then
a.tongue_t = 24-a.tongue_t
end
end
-- move caught actor
if (a.ha) then
if (a.tongue_t>0) then
a.ha.x = a.tongue_x
a.ha.y = a.y
else
a.ha=nil
end
end
--a.tongue=1 -- tiles
a.t += 1
end
function draw_frog(a)
draw_actor(a)
local sx=a.x*8+a.d*4
local sy=a.y*8-3
local d=a.d
if (a.tongue_t==0 or not a.tongue_t) return
local sx2=a.tongue_x*8
local sy2=(a.y+0.25)*8
line(sx,sy,sx2,sy,8)
rectfill(sx2,sy,sx2+d,sy-1,14)
end
function draw_charge_powerup(a)
--pal(6,13+(a.t/4)%3)
draw_actor(a)
local sx=a.x*8
local sy=a.y*8-4
for i=0,5 do
circfill(
sx+cos(i/6+time()/2)*5.5,
sy+sin(i/6+time()/2)*5.5,
(i+time()*3)%1.5,7)
end
end
function move_mushroom(a)
a.frame=0
if (a.active_t>0) then
a.active_t-=1
a.frame=1
end
end
function draw_glitch_mushroom(a)
local sx=a.x*8
local sy=a.y*8-4
draw_actor(a)
dx=cos(time()*5)*3
dy=sin(time()*3)*3
for y=sy-12,sy+12 do
for x=sx-12,sx+12 do
local d=sqrt((y-sy)^2+(x-sx)^2)
if (d<12 and
cos(d/5-time()*2)>.4) then
pset(x,y,pget(x+dx,y+dy)
+rnd(1.5))
-- pset(x,y,rnd(16))
end
end
end
pset(sx,sy,rnd(16))
draw_actor(a)
end
function draw_exit(a)
local sx=a.x*8
local sy=a.y*8-4
sy += cos(time()/2)*1.5
circfill(sx-1+cos(time()*1.5),sy,3.5+cos(time()),8)
circfill(sx+1+cos(time()*1.3),sy,3.5+cos(time()),12)
circfill(sx,sy,3,7)
for i=0,3 do
circfill(
sx+cos(i/8+time()*.6)*6,
sy+sin(i/5+time()*.4)*6,
1.5+cos(i/7+time()),
8+i%5)
circfill(
sx+cos(.5+i/7+time()*.9)*5,
sy+sin(.5+i/9+time()*.7)*5,
.5+cos(.5+i/7+time()),
14+i%2)
end
end
function turn_to(a,ta,spd)
a %=1
ta%=1
while (ta < a-.5) ta += 1
while (ta > a+.5) ta -= 1
if (ta > a) then
a = min(ta, a + spd)
else
a = max(ta, a - spd)
end
return a
end
function move_swirly(a)
-- dying
if (a.life==0 and a.t%4==0) then
local tail=a.tail[1]
local s=tail[#tail]
local cols= {7,15,14,15}
-- reuse
atomize_sprite(64,s.x-.5,s.y-.5,cols[1+#tail%#cols])
del(tail,s) sfx(26)
if (s==a) del(actor,a) sfx(27)
end
local ah=a.holding
if (ah and a.tail and a.tail[1][15]) then
ah.x=a.tail[1][15].x
ah.y=a.tail[1][15].y
ah.dy=-0.1 -- don't land
if (a.standing) ah.x-=a.d/2
if (ah.life==0) a.holding=nil
end
a.t += 1
if (a.hit_t>0) a.hit_t-=1
if (a.t < 20) then
a.dx *=.95
a.dy *=.95
end
a.x+=a.dx
a.y+=a.dy
a.dx *=.95
a.dy *=.95
local tx=a.homex
local ty=a.homey
local p=closest_p(a,200)
if (p) tx,ty=p.x,p.y
-- local variation
-- tx += cos(a.t/60)*3
-- ty += sin(a.t/40)*3
local turn_spd=1/60
local accel = 1/64
-- charge 3 seconds
-- swirl 3 seconds
if ((a.t%360 < 180
and a.life > 1)
or a.life==0) and
abs(a.x-tx<12) then
ty -= 6
else
-- heat-seeking
-- instant turn, but inertia
-- means still get swirls
turn_spd=1/30
accel=1/40
if (abs(a.x-tx)>12)accel*=1.5
end
a.d=turn_to(a.d,
atan2(tx-a.x,ty-a.y),
turn_spd
)
a.dx += cos(a.d)*accel
a.dy += sin(a.d)*accel
-- spawn tail
if (not a.tail) then
a.tail={}
for j=1,3 do
a.tail[j]={}
for i=1,15 do
local r=5-i*4/15
r=mid(1,r,4)
local slen=r/9 + 0.3
if (j>1) then
r=r/3 slen=0.3
--if (i==1) slen=0
end
local seg={
x=a.x-cos(a.d)*i/8,
y=a.y-sin(a.d)*i/8,
r=r,slen=slen
}
add(a.tail[j],seg)
end
a.tail[j][0]=a
end
end
-- move tail
for j=1,3 do
for i=1,#a.tail[j] do
local s=a.tail[j][i]
local h=a.tail[j][i-1]
local slen=s.len
local hx = h.x
local hy = h.y
if (i==1) then
if (j==2) hx -=.5 --hy-=.7
if (j==3) hx +=.5 --hy-=.7
end
local dx=hx-s.x
local dy=hy-s.y
local aa=atan2(dx,dy)
if (j==2) aa=turn_to(aa,7/8,0.02)
if (j==3) aa=turn_to(aa,3/8,0.02)
s.x=hx-cos(aa)*s.slen
s.y=hy-sin(aa)*s.slen
end
end
-- players collide with tail
for i=0,#a.tail[1] do
for pi=1,#pl do
local p=pl[pi]
if (alive(p) and a.life>0 and
p.life>0) then
s = a.tail[1][i]
local r=s.r/8 -- from pixels
local dx=p.x-s.x
local dy=(p.y-0.5)-s.y
local dd=sqrt(dx*dx+dy*dy)
local rr=0.5+r
if (dd<0.5+r) then
// janky bounce away
local aa=atan2(dx,dy)
aa+=rnd(0.4)-rnd(0.4)
p.dx=cos(aa)/2
p.dy=sin(aa)/2
if (p.is_standing) p.dy=min(p.dy,-0.2)
sfx(19)
if (p.dash>0) then
if (i==0) monster_hit(a)
else
player_hit(p)
end
end
end
end
end
end
function draw_swirly(a)
if (not a.tail) return
for j=1,3 do
for i=#a.tail[j],1,-1 do
seg=a.tail[j][i]
local sx=seg.x*8
local sy=seg.y*8
cols = {7,15,14,15,7,7}
cols2 = {6,14,8,14,6,6}
local q= a.life==1 and 4 or 6
local c=1+flr(i-time()*16)%q
if (j>1) then
if (i%2==0) then
circfill(sx,sy,1,8)
else
pset(sx,sy,10)
end
else
local r=seg.r+cos(i/8-time())/2
r=mid(1,r,5)
r=seg.r
circfill(sx,sy+r/2,r,cols2[c])
circfill(sx,sy,r,cols[c])
end
end
end
local sx=a.x*8
local sy=a.y*8-4
--circ(sx,sy+4,5,rnd(16))
-- mouth
spr(81,sx-4,sy+5+
flr(cos(a.t/30)))
-- head
spr(80,sx-8,sy)
spr(80,sx+0,sy,1,1,true)
--
end
function alive(a)
if (not a) return false
if (a.life <=0 and
(a.death_t and
time() > a.death_t+0.5)
) then return false end
return true
end
-- ignore everything more than
-- 8 blocks away horizontally
function closest_a(a0,l,attr,maxdx)
local best
local best_d
for i=1,#l do
if not attr or l[i][attr] then
local dx=l[i].x-a0.x
local dy=l[i].y-a0.y
d=dx*dx+dy*dy
if (not best or d<best_d)
and l[i]!=a0
and l[i].life > 0
and (not maxdx or
abs(dx)<maxdx)
then best=l[i] best_d=d end
end
end
return best
end
function closest_p(a,dd)
return closest_a(a,pl,nil,dd)
end
--[[
birb
follow player while close
collect
]]
function move_bird(a)
--[[
-- spawn with gem
if (a.t==0) then
gem=make_actor(67,a.x,a.y)
a.holding=gem
end
]]
move_actor(a)
local ah=a.holding
if (ah) then
ah.x=a.x
ah.y=a.y+0x0.e
ah.dy=0
if (a.standing) ah.x-=a.d/2
if (ah.life==0) then
a.holding=nil
sfx(28) -- chirp
end
end
local p=closest_p(a,12)
dx=100 dy=100
-- patrol home no target
tx,ty=
a.homex+cos(a.t/120)*6,
a.homey+sin(a.t/160)*4
if (p) tx,ty=p.x,p.y-3
local a2
if (not a.holding) then
a2=closest_a(a,actor,"is_pickup")
if a2 and abs(a2.x-a.x)<4 and
abs(a2.y-a.y)<4 then
p=nil -- ignore player
tx,ty=a2.x,a2.y
if (a.standing) a.dy=-0.1
else
a2=nil -- ignore if far
end
end
-- debug
-- a.tx=tx
-- a.ty=ty
local dx,dy=tx-a.x,ty-a.y
local dd=sqrt(dx*dx+dy*dy)
-- pick up
if (a2 and dd<1) then
a.holding=a2
sfx(28) -- chirp
end
-- uncomment: pick up player!
--[[
if (p) then
if (dd<0.5) a.holding=p
if (a.holding==p) then
if (btn(4,p.id) or btn(5,p.id)) a.holding=nil
a.d=p.d
end
end
]]
if (a.t%8==0) a.d=sgn(dx)
if (a.standing) then
a.frame=0
-- jump to start flying
if (not solid(a.x,a.y+.2))a.dy=-0.2
if (p and dd<5) a.dy=-0.3
a.dx=0
else
-- flying
local tt=a.t%12
a.frame=1+tt/6
-- flap
if (tt==6) then
local mag=.3 -- slowly decend
-- fly up
if (dd<4 and a.y>ty) mag=.4
-- wall: fly to top
if (a.hit_wall)mag=.45
-- player can shoo upwards
if (p and a.y>ty and not ah) mag=.45
a.hit_wall = false
a.dy-=mag
end
if (a.dy<0.2) then
a.dx+=a.d/64
end
end
a.frame=a.standing and 0 or
1+(a.t/4)%2
end
function draw_bird(a)
local q=flr(a.t/8)
if ((q^2)%11<1) pal(1,15)
draw_actor(a)
-- debug: show target
--[[
if (a.tx) then
local sx=a.tx*8
local sy=a.ty*8
circfill(sx,sy,1,rnd(16))
end
]]
end
-->8
-- themes (backgrounds)
theme_dat={
[1]={
sky={12,12,12,12,12},
bgels={
{
-- clouds
src={16,56,16,8},
xyz = {0,28*4,4,true},
dx=-8,
cols={15,7,1,-1},
fill_down = 12
},
-- mountains
{src={0,56,16,8},
xyz = {0,28*4,4,true},
fill_down=13,
},
-- leaves: light
{src={32,48,16,6},
xyz = {(118*8),-8,1.5},
cols={1,3},
fill_up=1
},
-- leaves: dark (foreground)
{src={32,48,16,6},
xyz = {(118*8),-12,0.8},
cols={3,1},
fill_up=1
},
}
},
--------------------------
-- level 2
[2]={
sky={12},
bgels={
{
-- gardens
src={32,56,16,8},
xyz = {0,100,4,true},
--cols={7,6,15,6},
cols={3,13,7,13,10,13,1,13,11,13,9,13,14,13,15,13,2,13},
fill_down=13
},
{
-- foreground shrubbery
src={16,56,16,8},
xyz = {0,64*0.8,0.6,true},
cols={15,1,7,1},
fill_down = 12
},
-- foreground shrubbery feature
{
src={32,56,8,8},
xyz = {60,60*0.9,0.8,false},
cols={15,1,7,1,3,1,11,1,10,1,9,1},
},
-- foreground shrubbery feature
{
src={32,56,8,8},
xyz = {260,60*0.9,0.8,false},
cols={15,1,7,1,3,1,11,1,10,1,9,1},
},
-- leaves: indigo
{src={32,48,16,6},
xyz = {40,64,4,true},
cols={1,13,3,13},
fill_up=13
},
-- leaves: light
{src={32,48,16,6},
xyz = {0,-4,1.5,true},
cols={1,3},
fill_up=1
},
-- leaves: dark (foreground)
{src={32,48,16,6},
xyz = {-40,-6,0.8,true},
cols={3,1},
fill_up=1
}
},
},
----------------
-- double mountains
[3]={
sky={12,14,14,14,14},
bgels={
-- mountains indigo (far)
{src={0,56,16,8},
xyz = {-64,30,8,true},
fill_down=13,
cols={6,15,13,6}
},
{
-- clouds inbetween
src={16,56,16,8},
xyz = {0,50,8,true},
dx=-30,
cols={15,7,1,-1},
fill_down = 7
},
-- mountains close
{src={0,56,16,8},
xyz = {0,140,8,true},
fill_down=13,
cols={6,5,13,1}
},
}
},
}
function init_level(lev)
cls()reset()
level=lev
level_t = 0
death_t = 0
finished_t = 0
gems = 0
gem_sfx = {}
total_gems = 0
glitch_mushroom = false
music(-1)
if play_music then
if (level==1) music(0)
if (level==2) music(4)
if (level==3) music(16)
end
actor = {}
sparkle = {}
pl = {}
loot = {}
reload()
if (level <= 4) then
-- copy section of map
memcpy(0x2000,
0x1000+((lev+1)%4)*0x800,
0x800)
end
-- spawn player
for y=0,15 do for x=0,127 do
local val=mget(x,y)
if (val == 72) then
clear_cel(x,y)
pl[1] = make_player(72, x+0.5,y+0.5,1)
if (num_players==2) then
pl[2] = make_player(88, x+2,y+1,1)
pl[2].id = 1
end
end
-- count gems
if (val==67) then
total_gems+=1
end
-- lootboxes
if (val==48) then
add(loot,67)
end
end end
local num_booby=0
-- shuffle lootboxes
if (#loot > 1) then
-- ~25% are booby prizes
num_booby=flr((#loot+2) / 4)
for i=1,num_booby do
loot[i]=96
if (rnd(10)<1) then
loot[i]=84 -- mushroom
end
end
-- shuffle
for i=1,#loot do
-- swap 2 random items
j=flr(rnd(#loot))+1
k=flr(rnd(#loot))+1
loot[j],loot[k]=loot[k],loot[j]
end
end
total_gems+= #loot-num_booby
if (not pl[1]) then
pl[1] = make_player(72,4,4,1)
end
end
-->8
-- draw died / finished
function draw_finished(tt)
if (tt < 15) return
tt -= 15
local str="★ stage clear ★ "
print(str,64-#str*2,31,14)
print(str,64-#str*2,30,7)
-- gems
local n = total_gems
for i=1,15 do pal(i,13) end
for pass=0,1 do
for i=0,n-1 do
t2=tt-(i*4+15)
q=i<gems and t2>=0
if (pass == 0 or q) then
local y=50-pass
if (q) then
y+=sin(t2/8)*4/(t2/2)
if (not gem_sfx[i]) sfx(25)
gem_sfx[i]=true
end
spr(67,64-n*4+i*8,y)
end
end
pal()
end
if (tt > 45) then
print("❎ continue",42,91,12)
print("❎ continue",42,90,7)
end
end
__gfx__
000000002222222244444444bbbbbbbb00000000000aa000d7777777d66667d666666667d6666667cccccccccccccccccc5ccccccc5cccc5f777777767766666
0000000022222222444444443333333300000000000990002eeeeeef5d66765d666666765d666676ccccccccccccccc5c55555ccc5555555effffff7d6766666
0000000022222222444444443333333300000000a97770002eeeeeef55dd6655dddddd6655dddd66cccccccccccccc5555555ccc55555555effffff7dd666666
0000000022222222444444443333333300000000a97779a02eeeeeef55dd6655dddddd6655dddd66ccccccccccccc555c555ccccc5555555eeeeeeef66666666
0000000022222222444444443332332200070000007779a02eeeeeef55dd6655dddddd6655dddd66cccccccccccccc5ccc5ccccccc5ccc5c5555555566666776
00000000222222224444444433223222007a7000009900002eeeeeef55dd6655dddddd6655dddd66ccccccccccc5555555cccccc5555c555dddddddd6666d676
000000002222222244444444324224420007000000aa00002eeeeeef5111d651111111d6511111d6cccccccccc55c5555ccccccc55555555ddddd6dd6666dd66
0000000022222222444444442444444200030000000300002222222d11111d111111111d1111111dccccccccc5555555cccccccc5555c5556666666666666666
00700070555ddd661010122244440404bb0b000000000000000000000000000000000000000000000004400000044000000b0000000550006666666666666666
0070007055dd666711101222444404440b3b000000000000000000000000000000000000444444440044240000bb2400000b3000000550006666660000666666
0d7d0d7dc5d6667c0100112444442400003b00000000000000eff700000b000000000000414114249444424994223249000b3000000550006666000000006666
06760777c5d6667c0111122244442400000b0bb000000000002eef00000b000000333300444444442494444224942342000b00000005d0006660000000000666
11151115cc5667cc0000122244440000000b3b0000000000002eef00b00b000003333330422414140049440000494300000b00000005d0006600000000000066
51555155cc5667cc0000112444444000000b30000000000000222e000b0b00b0333a3333444444440004400000b44000003b00000005d0006600000000000066
55555555ccc67ccc0001222224444400000b000000000000000000000b0b0b0033a7a333000440000000000000030000003b00000005d0006000000000000006
55555555ccc67ccc0011111224444440000b000000000000000000000b0b0b00333a33330004400000000000000b0000000b00000005d0006000000000000006
444444444444444444444444444444444444444400000000333333333333333333333333bbbbbbbb000000000000000000000000000000008eeeeee800666600
2244224444444444444444444466444444d6644400000000333333333333b33333333333bbbbbbbb000000000000000000000000000dd000288888880d666670
42244224444224444464444442d6744442dd6744000000003339a3333333bab3333333333333333300000000000000000000000000dd770022222222dd666676
44224424444422444666d44422dd664422dd664400707000339a7a33333bbb3333333333333333330000000000000000000000000ccd77d011111111dd111176
2442244442244224422d666422ddd66422dd6644000e00003399a93333333b33333333333bb33b330000000000000000000000000cccddd01221122111111111
22442244442244444442262422dddd6422dddd4400737000333993333b333333333333333bb333330000000000000000000000000cdccdd022882288111cc111
4224422444422444444422442222224442222244000b00003333333333333333333333333333333300000000000000000000000000c2cc0022e822e8cccccccc
4444444444444444444444444444444444444444000b000033333333333333333333333333333333000000000000000000000000000cc000212e212ec55ddddc
d777777760066006c1dddd66c1dddd77cccccccc0099970000bbbbbbbbbbbb003333333300333300000000000000000067766666cccccccc1281128155d6667d
2eeeeeef00000000c1555566c1555567cc1111cca994497a0bbbbbbbbbbbbbb033333333033333300000000000000000d6766666cccccccc22882288dd666676
2eeaeeef00000000c1555576c15555661155551109a00490bb333333333333bb33333333333333330000000000000000dd666666cccccccc22e822e8dd666676
2aaaaaef00000000c1515576c15555661155551da49aa99ab33333333333333b3333333333333b33000000000000000066667776cc0cc0cc212e212edd666676
2eaaaeef00000000c15d1176c1555566115555dd004999003333bb333333333333133133333333330000000000000000666d6676cccccccc12811281dd111176
2eaeaeef00000000c155d166c1555566115555d6000440003333bb3333bb3333313113133b3333330000000000000000666d6676ccc00ccc22882288d1111116
2eeeeeef00000000c1555566c155556611555566000000003333333333bb333313111131333333330000000000000000666ddd660c0000c022e822e8111cc111
2222222d00000000c1111116c1111116111111dd0000000033333333333333331111111133333333000000000000000066666666c000000c211e211e11cccc11
00666600000000000000000000000000000bb00000000000000000000000000000000000000000000f000f000f000f0000000000113311311133333333333333
0600006000f0800000000000000ef000000b3b000000000000000000000000000f000f000f000f000ffffff00ffffff00f000f00011331100113333333333311
6009800600000090be82887700ed7f00000b03000000000000007000000000000ffffff00ffffff00f1fff100f1fff100ffffff0001011000133133333333100
60a77f060e077000be8828eb0edef7f0000308870007700000070700000700000f1fff100f1fff100effffe00effffe00f1fff10000001101111113333333310
60b77e06000770a0bfe88efb0f7fede0088708880007700000007000000070000effffe00effffe000222000002220000effffe0000000000000133133131131
600cd0060d0000000bfeefb000f7de0008880088000000000000000000000000002220000022200000888f000f88800000222000000000000011011131113000
06000060000c0b0000bbbb00000fe000008800000000000000000000000000000088800000888f000f00000000000f000f888000000000000110011111001100
006666000000000000000000000000000000000000000000000000000000000000f0f00000f0000000000000000000000000f000000000000000110000100110
0777008000000000000000000077ee0000baa70000000000000000000000000007e007e007e007e007e007e007e007e007e007e00080000000000000008fff00
00077687000000000077ee000eeeeee00bbab77000000000000000000000070007e007e007e007e007e007e007e007e007e007e0000fff000008fff0000f1f00
00072777022222200eeeeee00eeeeff00aaabba00007000000700700070000000777777007777770077777700777777007777770000f1f000900f1f0000fffa0
0707877702222220eeeeeffe0eeeeff0aabaaaaa0000070000000000000000000717771007177710071777100717771007177710000fffa00490fffa00992000
0077777707888870eeeeeffe0eeeeee0999999990070000000000000000000000777777007777770077777700777777007777770090990000449990009999400
0006675700777700888888880888888000088000000070000070070000000070008828000088280000882800008828000088280000a999000049990000aa9440
006006770000000000222200002222000008e00000000000000000000070000008822280008227000882227007822280007822800aa9990000099000002a0040
000000660000000000eeee0000eeee00000ee0000000000000000000000000000070070000700000070000000000007000000700000200000002000000000000
000000000000bb3b00000000000000000000000000000000000000000000000000000000000000066666dddd0000000000000000666666660000011001100000
00000000000bb2b200000000000aa000000000000000000000000000000000000000000000000066d666ddddd000000000000000666666660111007777111000
00000000007bbbbb0000bb3b0099970000000000000000000000000000000000000070000000066ddd6d66dddd000000000a0000d66666dd0011177ff7770000
0000bb3b07bb3300000bb2b20994497000000000000000000000000000000000000777000000666ddd66666ddd0000000aaaaa00dd6666dd000177fff7ff7110
0bbbb2b20bb330b00b7bbbbb49a0049a00000000000000000000000000000000000070000006666dddd666ddddd0000000aaa000dddd6ddd017777fffffff711
b77bbbbbbb330000b7bb2288049aa9900000000000000000000000000000000000000000006666ddddd6dddddddd000000a0a000dddddddd0777777fffff7710
bbbb33000b0b0000bbbb3330004999000000000000000000000000000000000000000000066d6dddddddddddddddd00000000000dddddddd17fff77fffff7770
3300b0bbb0b000003300b0bb00044000000000000000000000000000000000000000000066d66dddddddddddddddddd000000000dddddddd77ffffffffffff77
00008ee0000ee00000e80000000e80000767676700766670000767000067676000000006666666666666ddddddddddddd0000000ddddddd6ffffffff00000000
000080000000800000008000000080000000500000005000000050000000500000000066666666666666dddddddddddddd000000ddddddd6ffffffff00000000
00777700007777000077770000777700007777000077770000777700007777000000006666666666666dddddddddddddddd00000dddddd66ffffffff00000000
07777770077777700777777007777770077777700777777007777770077777700000666666666666666ddddddddddddddddd0000ddddd666ffffffff00000000
07177710071777100717771007177710071777100717771007177710071777100006666666666666666dddddddddddddddddd000ddddd666ffffffff00000000
077777700777777007777770077777700777777007777770077777700777777000666d666666666666dddddddddddddddddddd00dddddd66ffffffff00000000
099999900999999777999997779999900eeeeee00eeeeee00eeeeee00eeeeee00666d666666666666dddddddddddddddddddddd0dddddd66ffffffff00000000
077007707700000000000000000000770a00a000a000a000a00a00000a0a00006d666666666666666dddddddddddddddddddddddddddddd6ffffffff00000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000d200000000000000d50000000000000000d2000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000300000000000000000000000000000000000000000000f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2000000000000000000000000d20000000000
00000000000000000000000000000000000000000000000000000000000000050000000034000000000000000000000000000000000000003400000000000000
00000000000000000000000000000000000000000000000000000000f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3000000000000000000000000d13400000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0b0000000000000000000000000e0e0e0e0e0e0
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000a0a0d3a0a0a0a0a0d3a0a0a0a0a0d3a0b0d0000000000000000000000000f1f0f0f0f0f0
0000000000000000000000000000000000000000000000000000000000000000000000e0e0e00000000000000000000000000000000000e0e0e0000000000000
00000000000000000000000000000000000000000000000000000000a0b000a0a0a0a0b000a0a0a0a0b000b0d0d005000000000000000000000000f1f0f0f0f0
0000000000000000000000000000000000000000000000000000000000000000000000f1f0e1000000000000000000000000e0e0000000f1f0e1000000e0e000
00000000000000000000000000000000000000000000000000000000b0d000a0a0a0b0d000a0a0a0b0d000d0d0d00000000000000000000000000000f1f0f0f0
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000d0d0c0a0a0b0d0d0c0a0a0b0d0d0d0d0d0d0000000000000000000000000000000a0a0a0
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0e00000000000000000000000000000000000
0000e0e0000000000000000000000000000000000000000000000000d0c0a0a0b0d0d0c0a0a0b0d0d0d0d0d0d0d0000000000000000000000000000000a0a0a0
52000000000000000000000000000000000000000000000000000000000000e0e0e0e0e0e0e0e0e0e0e000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e00000000000000000000000a0a0a0
93810000000000000000000000000000000000000000000000000000000000f0f0f0f0f0f0f0f0f0f0f000000000000000000000000000000000000000000000
000000000000000000000000000000000000d2000000000000f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0e1d100000000000000000000000000a0a0a0
828293000000000000000000000000e0e0e0e0e0e0e0e0e0e0e0e0e0e0e000f1f0f0f0e100f1f0f0f0e100000000000000000000000000000000000000000000
000000000000000000000000000000000000d1000000e0e0e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f000d100000000000000000000000000a014a0
848383000036000000000000000000f0c3f0f0f0f0f0f0f0f0f0f0f0f0f00000f0f0f0000000f0f0f00000000000000000000000000000003600000000000000
000000000000000000000000000000000000d1000000f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f000d10000000000000000d200000000a0a0a0
e0e0e0e0e0e0000000000000000000f0f0e10000f1f0c3e10000f1f0f0e10000f0f0f0000000f0f0f0000000003400340000000000000000e000000000000000
000000000000000034003400000000000000e0e0e0e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1f0e100d10000000000000000d1000000e0e0e0e0
f0f0c3f0f0f0000000000000000000c3f000000000f0f000000000f0f0000000f0f0f0000000f0f0f0000000e0e0e0e0e000000000000000f000000000000000
00000000000000e0e0e0e0e0000000000000f0e100f1f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f000d10000d10000000000000000e0e0e0e0f0f0f0f0
c3f0f0f0f0f0000000000000000000f0f000000000f0f000000000f0f0000000f0f0f0000000f0f0f0000000f1f0f0f0e100000000000000f000000000000000
00000000000000f1f0f0f0e1000000000000d1000000f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f000d10000d10000000000000000f1f0f0f0f0f0f0f0
0000000000000000000000000000000000000000000000000000000000000000e48282828282828282828282828282f400000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000e482828282828282828282f4e4f40000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000d4d4e4f4d4e48282f4d40000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000e4f400000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
84000000000000000000000000910000000000000000000000240000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
13131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131300000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000820000000000828200000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000820000000000828200000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000e6f6000000000000000000000000000000000000820000000000828200000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000096b60000000000000000e6f6e6e7e7f60000000000000000000000000000520000825200715200828200000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000096c7000087a7b7b696b6000087b6e6e7e7e7e7e7e7f6e6f60000e6f6000000000000524100008241009341e6828200000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
b687a7b7b68797a7b7b7a6b7b696d6b7e7e7e7e7e7e7e7e7e7e7f6e6e7e7f6e671000000419371e68293f6828282828200000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d797a7b7b7d6d6b7b7b7b7b7b7d6b7b7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e79393f6e693829382828282728282828200000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
b7d6b7b7b7b7b7b7b7b7b7b7b7b7b7b7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e76282828282728282828282828282828200000000000000000000000000000000
__label__
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccfeccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
ccf7decccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cf7fedeccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cedef7fccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cced7fccccccccccccccccccccccccccccc7777ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccefccccccccccccccccccccccccccccc7777777ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
ccccccccccccccccccccccccccccccccc777777777cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc777777777777ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb777777777777ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
333333333333333333333333333333bb777777777777cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
3333333333333333333333333333333b7777777777777ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
3bb33b333bb33b333bb33b33333333337777777777777cccccccccccccccccc6cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
3bb333333bb333333bb3333333bb3333777777777777777ccccccccccccccc66dccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
33333333333333333333333333bb333377777777777777777cccccccccccc66dddcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
33333333333333333333333333333333777777777777777777cccccccccc666dddcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
333333333333333333333333333333337777777777777777777cccccccc6666ddddccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
333333333333b333333333333333b3337777777777777777777ccccccc6666ddddddcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
333333333333bab33339a3333333bab377777777777777777777ccccc66d6ddddddddccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
33333333333bbb33339a7a33333bbb33777777777777777777777ccc66d66ddddddddddccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
3333333333333b333399a93333333b33777777777777777777777cc66666ddddddddddddccccccccccccccc6ccccccccccccccccccccccccccccccc6cccccccc
333333333b333333333993333b3333337777777777777777777777666666dddddddddddddccccccccccccc66dcccccccccc7777ccccccccccccccc66dccccccc
33333333333333333333333333333333777777777777777777777766666dddddddddddddddccccccccccc66dddcccccccc7777777ccccccccccccc66ddcccccc
33333333333333333333333333333333777777777777777777776666666dddddddddddddddcccccccccc666dddccccccc777777777cccccccccc6666ddcccccc
33333333333333333333333333333333777777777777777777766666666ddddddddddddddddcccccccc6666ddddcccc777777777777cccccccc66666dddcccc7
33333333333333333333b33333333333777777777777777777666d6666ddddddddddddddddddcccccc6666ddddddcc7777777777777ccccccc666d66ddddcc77
33333333333333333333bab33333333377777777777777777666d6666ddddddddddddddddddddcccc66d6ddddddddc77777777777777ccccc666d666dddddc77
3333333333333333333bbb333333333377777777777777776d6666666ddddddddddddddddddddddc66d66dddddddddd77777777777777ccc6d666666ddddddd7
333333333333333333333b33333333337777777777777776666666666666dddddddddddddddddddd6666dddddddddddd7777777777777cc666666666dddddddd
33333333333333333b33333333333333d777777777777766666666666666ddddddddddddddddddddd666ddddddddddddd77777777777776666666666dddddddd
33333333333333333333333333333333dd7777777777776666666666666ddddddddddddddddddddddd6d66dddddddddddd7777777777766dd66666dddddddddd
33333333333333333333333333333333dd7777777777666666666666666ddddddddddddddddddddddd66666ddddddddddd7777777777666ddd6666dddddddddd
33333333333333333333333333333333ddd777777776666666666666666dddddddddddddddddddddddd666ddddddddddddd777777776666ddddd6ddddddddddd
3333b333333333333333b33333333333dddd777777666d666666666666ddddddddddddddddddddddddd6dddddddddddddddd7777776666dddddddddddddddddd
3333bab3333333333333bab33339a333ddddd7777666d666666666666dddddddddddddddddddddddddddddddddddddddddddd777766d6ddddddddddddddddddd
333bbb3333333333333bbb33339a7a33ddddddd76d666666666666666dddddddddddddddddddddddddddddddddddddddddddddd766d66ddddddddddddddddddd
33333b333333333333333b333399a933dddddddd6666666666666666dddddddddddddddddddddddddddddddddddddddddddddddd66666666dddddddddddddddd
3b333333333333333b33333333399333dddddddd6666666666666666dddddddddddddddddddddddddddddddddddddddddddddddd66666666dddddddddddddddd
33333333333333333333333333333333ddddddddd66666ddd66666ddddddddddddddddddddddddddddddddddddddddddddddddddd66666dddddddddddddddddd
33333333333333333333333333333333dddddddddd6666dddd6666dddddddddddddddddddddddddddddddddddddddddddddddddddd6666dddddddddddddddddd
33333333333333333333333333333333dddddddddddd6ddddddd6ddddddddddddddddddddddddddddddddddddddddddddddddddddddd6ddddddddddddddddddd
3333333333333333333333333333b333dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
3333333333333333333333333333bab3dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
333333333333333333333333333bbb33dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
33333333333333333333333333333b33dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
3333333333333333333333333b333333dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
33333333333333333333333333333333dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
33333333333333333333333333333333dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
33333333333333333333333333333333dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
33333333333333333333333333333333dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
33333333333333333333333333333333dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
33333333333333333333333333333333dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
33133133331331333313313333133133dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
31311313313113133131131331311313dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
13111131131111311311113113111131dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
11111111111111111111111111111111dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
1d1d12224444d4d4ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd7777777dddddddd
111d12224444d444dddddddddddddddddddddddddfdddfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd2eeeeeefdddddddd
d1dd1124444424dddddbdddddddddddddddddddddffffffddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd2eeeeeefdddddddd
d1111222444424dddddbdddddd7d7ddddddddddddf1fff1ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd2eeeeeefdddddddd
dddd12224444ddddbddbdddddddedddddddddddddeffffedddddddddddddddddddddddddddddddddddddddddddddddddddd7dddddddddddd2eeeeeefdddddddd
dddd112444444ddddbdbddbddd737ddddddddddddd222ddddddddddddddddddddddddddddddddddddddddddddddddddddd7a7ddddddddddd2eeeeeefdddddddd
ddd12222244444dddbdbdbdddddbdddddddddddddd888dddddddddddddddddddddddddddddddddddddddddddddddddddddd7dddddddddddd2eeeeeefdddddddd
dd1111122444444ddbdbdbdddddbddddddddddddddfdfdddddddddddddddddddddddddddddddddddddddddddddddddddddd3dddddddddddd2222222ddddddddd
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333222333332223333322233333222333332223333322233333222333332223333322233333222333332223333322233333222333332223333322233333222
23332222233322222333222223332222233322222333222223332222233322222333222223332222233322222333222223332222233322222333222223332222
22224442222244422222444222224442222244422222444222224442222244422222444222224442222244422222444222224442222244422222444222224442
22244444222444442224444422244444222444442224444422244444222444442224444422244444222444442224444422244444222444442224444422244444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
22442244444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
42244224444444444444444444444444444444444442244444444444444444444444444444444444444444444444444444444444444444444464444444444444
44224424444444444444444444444444444444444444224444444444444444444444444444444444444444444444444444444444444444444666d44444444444
2442244444444444444444444444444444444444422442244444444444444444444444444444444444444444444444444444444444444444422d666444444444
22442244444444444444444444444444444444444422444444444444444444444444444444444444444444444444444444444444444444444442262444444444
42244224444444444444444444444444444444444442244444444444444444444444444444444444444444444444444444444444444444444444224444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
44444444446644442244224444444444224422442244224422442244444444444444444444444444224422442244224444444444444444444444444444444444
4444444442d674444224422444444444422442244224422442244224444444444444444444444444422442244224422444422444444444444444444444444444
4444444422dd66444422442444444444442244244422442444224424444444444444444444444444442244244422442444442244444444444444444444444444
4444444422ddd6642442244444444444244224442442244424422444444444444444444444444444244224442442244442244224444444444444444444444444
4444444422dddd642244224444444444224422442244224422442244444444444444444444444444224422442244224444224444444444444444444444444444
44444444222222444224422444444444422442244224422442244224444444444444444444444444422442244224422444422444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
__gff__
0002020200001202020200000000020202020000000002010000020200000000020202020200000000420000000002021242020202024242000000000200020260706060700000000000000000000000200220006000000004040c0c04200000a0000060a0a0a0a00000000000000000a0000808b00000000000000000000002
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__map__
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d09000900090009430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002828
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000909070809090909090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000392828
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000090a0a0a0a0a0a0a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018282828
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090a0a0a440a0a0a0b0000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000043003928282828
43000000000000000000000000000000000000000000000000000036292929293700000000003629293700000000000000000000000005000000000000000009700a440a440a0b0d0000000000000000430000000000000000000000000000000000000000000000443044000000000000000000000000700000002828282828
292929370000000000000000000000000000000000000000000000282728272627000000000027282627000000000000000025170000140000000000000000090a0a0a440a0b0d0d0000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000018002728282828
282726270000000000000000000000000000000000000000000000272628282728000006000027282728000000740000000003030303030000000000000000090a0a0a0a0b0d0d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000027392828412828
282828280000000000000000000000000000000000430000000000282827282726000000000028272827000000000000391802210202023939180000000000090a0a0a0b0d0d0c090000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000014180027282828282826
282827280000000000000000000000000000000630060000000000262828282827000000000038383838003918391839282802020224022828283939180000090708090907080909170000050000000000000000000000000000000000000000000000000000140000000000000000000000000000003928002828380e0e0e38
2728272600000000000000000000000000000006060600000000003838383838380000000000001213703938063038382828202020202028282728282818000303030303030303030300391400000000000000000000000000000000000000000500000000001405000000000000000004000000251828281803030303030303
2828282700000000000000000000000000000000000000000000000000121300000070000003030303030303030303032828282828282827282728282828392002232020202002200239273900000000000000000000000630000000000005001405000000051414000000000000000014180000142828282802020202020202
3838383800000000000000000000000000000500000000000000030303030303030303030302020202020202020202022828282828282728272828282828280606062828282828282827282818030303030300000070000606000000050014001414000000141414000000000000000039270000392827280602202002022002
1213172500480000000000000400060000001425000000700017020220200202020202020202022002020202202302023838383838383838383838383838380606063870387038703870383838020202020203030303030303007000140414001414000404141414005200000000001738383917383838300602022002240202
0303030303030303030303030303030303030303030303030303020202020202020202020202022320020220200202020303030303030303030303030303030303030303030303030303030303020202020202022002020202030303030303030303030303030303030303030303030303030303030303030302022320020202
2002020202210202020202020202220202020202020220200221020202022002200202230202020202020202200202020220020202020202020202020202020202020202020202020202020202200202200202020202230202020202020202022002020223020202020202022002020202022002022020200202020202202002
0223200220202002020220202102020202200202020202202002020202020202202002022120022102020202022420020202020202020202020202202002022002020220200220200202202020022002200202020202020202022302020202200202020202020202020202230202020202020202020202200202020220200202
0000000000000000000000000000000000000000000000000000000000001400140000000000000000140014000014000014140000140014000014000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000001400140000000000000000140014000014000014140000140014000014000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000001400140000000000000000000014000014000014140000140014000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000140000000000000000000014000014000014140000140014000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000014000014140000140014000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000014140000000014000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2739180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
4828270017170400000000190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
292929292929291a1a1a29292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0101010101010104000001010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0202020202200214050002020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2002202002020214140002020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__sfx__
000300000c540105301f540135301856016550135401353018560105501f54010530135601655013540135301a520105401f530105201a510135201f510165001a50013500135001a50010500215001050013505
01100000240452400528000280452b0450c005280450000529042240162d04500005307553c5252d000130052b0451f006260352b026260420c0052404500005230450c00521045230461f0450c0051c0421c025
01100000187451a7001c7001c7451d745187001c7451f7001a745247001d7451d70021745277002470023745217451f7001d7001d7451a7451b7001c7451f7001a745227001c7451b70018745187001f7451f700
01100000305453c52500600006003e625006000c30318600355250050000600006003e625006000060018600295263251529515006003e625006000060018600305250050018600006003e625246040060000600
01100000004000c40018400004000a400004000a4000c400004000a4000c400004000a4000c4001140013400004000c4000a400004000a400004000a4000c400004000c40016400004001640018400114000c400
01100000270752607724075200721f0751b0771a0751b075180721806218052180421803500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
011000000c30018300243001f3001b3001a300193001b300183001830017300163001530014300133001830014300143001830018300003000030000300003000030000300003000030000300003000030000300
011000000c37300300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300
000000001e0701f070220702a020340103f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000100002b7602e7503a73033740377302e75033730337303372035710377103a710337103a7103c7103c7003f700007000070000700007000070000700007000070000700007000070000700007000070000700
000200002965021630136301e63012620126301322017630176300b6301361012110116100d1100a6100a61008610106000d60004600116000e6001160012600116000a600066000960003600026000260002600
000100002257524575275652455527555275552b54524525225352252527525275252b5252e515305152e515305052e505305052e5053050530505335052b5052e5052b5052e5052e5053350530505335052e505
000200002005325043160231002304013030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0102000013571165731b5751d5711157313575165711b5731b575225711b573185751b5711f573245751b5711f57324565295611f563185611d555245532b5552b5412b5433053137535335333a5212b5252e513
000100002b571275711b57118571105710b57106571045710457106561035510454103531015210153105531035210a5210f5200c5200f72016510167101d5101d510245102b5100050000500005000050000500
010200002e17029170171731a171231631d16111143141610c1230a11107110001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100
01040000185702257024570225701f5701d5701f5701d57018570165701857016570135701157013570115700c5700d570135701457018560195501f550205302453024520225202452022510245102251024500
00030000281602a1502c14029440220301f030220301b0201d0201d020160200f02013020130100c010110100f5100a5100a5100c5100c51007510075100a5100501003010375003b7003050034700375003b700
000200001557015570165701657017560185401a5401c5301f5202251029510005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500
000200001f07018060110400e0300c020160201602016010180101b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
011c00000c7550070013755007001175500700007000070013755007001475513755117550070000700007000d755007000070011755137550070011755007000d75500700117550d75513755007001175500700
000200001c17023170201701317012170161600d0600c0500b0400b0400c0300a0200802007010060100400003000020000100001000000000000000000000000000000000000000000000000000000000000000
000100001057015510195701c51021570235202350000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500
010100001b07017020190701a0101f0301e0102506021000260001e03027000210000e000210300e0000e0000e000270100e0000e0000e0000e0000e0000e0000e0000e0000e0000e0000e0000e0000e0000e000
01080000185461c5361f526215161f54621536245262851624546285362b5262f5162b5463053634526375161f50024500285002b5001f50024500285002b5000000000000000000000000000000000000000000
00020000125501455017550195501c550235502a55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0001000023570215701f5601d5501b540115400f5300d5100a1100c1100d1100f1101351000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500
00020000251602215020160181501d1301b1501b5401f5301f520183101b5301f5301b53016530185201652011520165201651013510115100f5100c5100c5100a51007510075100551000500005000050000500
01020000395503b5513b5213b51100500005000050000500005000050000500005003b5503d5513f5513f5203f500375003050037500305003750030500005003f51037530305313753130521375213051100500
0106000014472154411b4712347127566157610e5560b1410b5412a23632531385223f5213f426225111921115516155111651218411195161b5111c5161f1112041619311107110f5160f211101111241100701
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
011c00000c7550070013755007001175500700007000070013755007001475513755117550070000700007000d755007000070011755137550070011755007000d75500700117550d75513755007001175500700
011c00000c7550070011755007001375500700007000070018755007001475518755137550070011755007000d755007000070011755137550070011755007000d75500700117550d75511755007001375500700
011c000018024180201d0311d0351f0321f0311f0221f012200322002124035200321f0321f0351d0311d03519030190301d0321d032190311903219025180321603216032180351d03519032190321803216032
011c000018024180201d0311d0251f0321f0321f0221f015200322002124032200351f0321f0321d0311d0351952019520195251d522195321953218532185321952219115195251d51519522185221952216512
011c0000180061d0061f72622716180061d1161f11622006180001d0001f00022000180061d1161f11622006190061d0061f72622716190061d1161f11622006190061d0061f72622716190061d1161f11622006
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0110000000145000450c0050c0050c6450000000145000450000000000011450c0001862500000000000000500145000450c0050c0050c645000000014500045011050110518625011451860524615011450c145
01180000187461b7361f72622716187461b7361f726227160070000700007000070000700007000070000700197461d7362072624716197461d73620726247160070000700007000070000700007000070000700
01100000187251a7251b7251f725187251a7251b7251f7251a7251b7251f725227251a7251b7251f72524725197251d7251f72522725197251d7251f72522725197251d7251f72522725197251d7251f72522725
0110000024525295252450524515295152b52500000000000000000000000000000020525225262453527525295222b5222e522295262952529525275252750527525255252050525525245251f5052452522525
011000002450522525245251f525000001f5251d525185250000020505000002250522525245052953524505295022b5052e5051d525295251f5252b5250000027525255252050525525295251f505295252b525
__music__
01 01434144
00 02434144
00 01034244
02 02034244
01 20644144
00 21634144
00 20644144
00 21634144
00 20244144
00 21244144
00 20226444
00 21236444
00 20222444
00 21232444
00 20244144
02 21244144
01 28696a6b
00 28696a6b
00 28692a6b
00 28692a6c
00 28692a2b
00 28692a2c
00 28692a6b
02 28692a2c
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144
00 41414144