Skip to content

Instantly share code, notes, and snippets.

@AlecTroemel
Last active Apr 25, 2021
Embed
What would you like to do?
LD48: Earigator
pico-8 cartridge // http://www.pico-8.com
version 30
__lua__
-- ld48: earigator
-- by: alec t
-- framework
-------------------------------
--------- tiny ecs ----------
-- by katrinakitten
-------------------------------
function ent(t)
local cmpt={}
t=t or {}
setmetatable(t,{
__index=cmpt,
__add=function(self,cmp)
assert(cmp._cn)
self[cmp._cn]=cmp
return self
end,
__sub=function(self,cn)
self[cn]=nil
return self
end
})
return t
end
function cmp(cn,t)
t=t or {}
t._cn=cn
return t
end
function sys(cns,f)
return function(ents,...)
for e in all(ents) do
for cn in all(cns) do
if(not e[cn]) goto _
end
f(e,...)
::_::
end
end
end
-------------------------------
--------- components ----------
-------------------------------
function pos(x,y)
return cmp("pos",{ x=x,y=y })
end
function vel(x,y)
return cmp("vel",{ x=x,y=y })
end
function speed(x,y)
return cmp("speed",{ x=x,y=y })
end
function fric(v)
return cmp("fric",{ v=v })
end
function anim(cur,sts)
return cmp("anim",{
tick=0,
frame=1,
current=cur,
states=sts
})
end
function image(x,y,w,h,t)
return cmp("image",
{ x=x,y=y,
w=w,h=h,
t=t --type: "sprite" or "map"
})
end
function col(w,h,f,ox,oy,b,s)
if not s then
s=false
end
return cmp("col",
{ w=w,h=h,
flags=f,
ox=ox,oy=oy,
bounce=b,
shake=s })
end
function timer(int,cb)
return cmp("timer",
{interval=int,callback=cb})
end
function mk_timer(int,cb)
e=ent()
e+=timer(int,cb)
return e
end
-------------------------------
--------- systems ----------
-------------------------------
move=sys({ "pos","vel","col" },
function(e)
local new_pos=map_collision(
e.pos,e.vel,e.col)
e.pos.x=new_pos.x
e.pos.y=new_pos.y
e.col.hit=new_pos.hit
if new_pos.hit then
if e.col.bounce then
e.vel.x*=-1
e.vel.y*=-1
end
if e.col.shake then
screenshake:start(4)
end
end
end)
friction=sys({ "vel","fric" },
function(e)
e.vel.x*=e.fric.v
e.vel.y*=e.fric.v
end)
anim_u=sys({ "anim" },
function(e)
local a=e.anim
local s=a.states[a.current]
a.tick=(a.tick+1)%s.speed
if a.tick==0 then
a.frame=(a.frame+1)%#s.frames
end
end)
anim_d=sys({ "anim","pos" },
function(e)
local p=e.pos
local a=e.anim
local f=a
.states[a.current]
.frames[a.frame+1]
spr(f,p.x,p.y,1,1,a.flip)
end)
image_d=sys({ "pos","image" },
function(e)
i=e.image
p=e.pos
if i.t=="sprite" then
sspr(i.x,i.y,i.w,i.h,p.x,p.y)
end
if i.t=="map" then
map(i.x,i.y,p.x,p.y,i.w,i.h)
end
end)
timer_u=sys({ "timer" },
function(e,w)
if e.timer.interval==0 then
e.timer:callback()
del(w,e)
else
e.timer.interval-=1
end
end)
-------------------------------
--------- game state ----------
-------------------------------
-- each state has init,
-- update, draw funcs
-------------------------------
gstate={ current="" }
function gstate:add(name, s)
self[name]=s
end
function gstate:switch(n)
self.current=n
self[n]:init()
end
function gstate:update()
self[self.current]:update()
end
function gstate:draw()
self[self.current]:draw()
end
--------------------------------
-------- screen shake ----------
--------------------------------
screenshake={
duration=0,
intensity=2
}
function screenshake:start(d,i)
self.duration=d
if i!=nil then
self.intensity=i
end
end
function screenshake:update()
if self.duration>0 then
local i=self.intensity
local sx=flr(rnd(i)-i/2)
local sy=flr(rnd(i)-i/2)
camera(sx,sy)
self.duration-=1
end
if self.duration==0 then
camera(0,0)
end
end
-------------------------------
-------- 2d vector -----------
-------------------------------
vec2d = {}
function vec2d:new(x,y)
o={x=x,y=y}
self.__index=self
return setmetatable(o, self)
end
function vec2d:len()
return sqrt(self.x^2+self.y^2)
end
function vec2d:norm()
local l = self:len()
return vec2d:new(
self.x/l,
self.y/l)
end
function vec2d:minus(vec)
return vec2d:new(
self.x-vec.x,
self.y-vec.y
)
end
function sqr(a)
return a*a
end
function round(a)
return flr(a+0.5)
end
function dist(p1, p2)
local dx=p2.x-p1.x
local dy=p2.y-p1.y
return sqrt(dx*dx+dy*dy)
end
-------------------------------
-------- collision -----------
-- detect if box a and b overlap.
-- both a and b must have comps
-- col, pos
-- original: https://mboffin.itch.io/pico8-overlap
-------------------------------
function overlap(a,newx,newy,b)
assert(a.col)
assert(a.pos)
assert(b.col)
assert(b.pos)
return not (
newx>=b.pos.x+b.col.w
or newy>=b.pos.y+b.col.h
or newx+a.col.w<=b.pos.x
or newy+a.col.h<=b.pos.y)
end
map_offset={x=0,y=0}
function map_collision(p,v,c)
local newx=p.x+v.x
local newy=p.y+v.y
local dx=v.x>0 and 1 or -1
local dy=v.y>0 and 1 or -1
local w_hit=false
-- check x direction
for i=p.x+c.ox,p.x+v.x+c.ox,dx do
local x=dx>0 and i+c.w-1 or i
local hit=false
for y=p.y+c.oy,p.y+c.h+c.oy,c.h/3 do
local flag=fget(mget(
(x/8)-map_offset.x,
(y/8)-map_offset.y))
for f in all(c.flags) do
if f==flag then
hit=true
end
end
end
if not hit then
w_hit=true
newx=i
end
end
-- now y direction
for i=p.y+c.oy,p.y+v.y+c.oy,dy do
local y=dy>0 and i+c.h-1 or i
local hit=false
for x=p.x+c.ox,p.x+c.w+c.ox,c.w/3 do
local flag=fget(mget(
(x/8)-map_offset.x,
(y/8)-map_offset.y))
for f in all(c.flags) do
if f==flag then
hit=true
end
end
end
if not hit then
w_hit=true
newy=i
end
end
return {x=newx,y=newy,
hit=w_hit}
end
-------------------------------
---------- physics ------------
-------------------------------
function new_physics()
return {
particles = {},
springs = {},
ax = 0,
ay = 0,
dt = 0.1,
setforce = function(this, _ax, _ay)
this.ax = _ax
this.ay = _ay
end,
reset = function(this)
this.particles = {}
this.springs = {}
end,
addparticle = function(this, p)
add(this.particles, p)
end,
addspring = function(this, s)
add(this.springs, s)
end,
update = function(this)
for p in all(this.particles) do
p:update(this.ax, this.ay, this.dt)
end
for s in all(this.springs) do
s:update()
end
end
}
end
function spring(_p1, _p2, _length, _stiffness)
return {
p1 = _p1,
p2 = _p2,
length = _length,
stiffness = _stiffness,
update = function(this)
dx = this.p2.x - this.p1.x
dy = this.p2.y - this.p1.y
d2 = sqrt(dx*dx + dy*dy)
d3 = (d2 - this.length)/d2
if (not(this.p1.locked)) then
this.p1.x += 0.5*dx*d3*this.stiffness
this.p1.y += 0.5*dy*d3*this.stiffness
end
if (not(this.p2.locked)) then
this.p2.x -= 0.5*dx*d3*this.stiffness
this.p2.y -= 0.5*dy*d3*this.stiffness
end
end
}
end
function particle(_x,_y)
return {
x = _x,
y = _y,
x1 = _x,
y1 = _y,
locked = false,
shake = false,
lock = function(this)
this.locked = true
end,
unlock = function(this)
this.locked = false
end,
shakeit = function(this)
this.shake=true
end,
update = function(this, ax, ay, dt)
if (not(this.locked)) then
this.tempx = this.x
this.tempy = this.y
local pos={x=this.x,y=this.y}
local vel={
x=this.x-this.x1+ax*dt*dt,
y=this.y-this.y1+ay*dt*dt
}
local col={
w=2,h=2,
flags={0},
ox=0,oy=0,
bounce=true}
-- colision with map
new_pos=map_collision(pos,vel,col)
this.x=new_pos.x
this.y=new_pos.y
if new_pos.hit then
if this.shake then
screenshake:start(4)
end
end
this.x1 = this.tempx
this.y1 = this.tempy
end
end
}
end
-------------------------------
---------- textbox ------------
-------------------------------
-- call this before you start using dtb.
-- optional parameter is the number of lines that are displayed. default is 3.
function dtb_init(numlines)
dtb_queu={}
dtb_queuf={}
dtb_numlines=3
if numlines then
dtb_numlines=numlines
end
_dtb_clean()
end
-- this will add a piece of text to the queu. the queu is processed automatically.
function dtb_disp(txt,callback)
local lines={}
local currline=""
local curword=""
local curchar=""
local upt=function()
if #curword+#currline>29 then
add(lines,currline)
currline=""
end
currline=currline..curword
curword=""
end
for i=1,#txt do
curchar=sub(txt,i,i)
curword=curword..curchar
if curchar==" " then
upt()
elseif #curword>28 then
curword=curword.."-"
upt()
end
end
upt()
if currline~="" then
add(lines,currline)
end
add(dtb_queu,lines)
if callback==nil then
callback=0
end
add(dtb_queuf,callback)
end
-- functions with an underscore prefix are ment for internal use, don't worry about them.
function _dtb_clean()
dtb_dislines={}
for i=1,dtb_numlines do
add(dtb_dislines,"")
end
dtb_curline=0
dtb_ltime=0
end
function _dtb_nextline()
dtb_curline+=1
for i=1,#dtb_dislines-1 do
dtb_dislines[i]=dtb_dislines[i+1]
end
dtb_dislines[#dtb_dislines]=""
sfx(2)
end
function _dtb_nexttext()
if dtb_queuf[1]~=0 then
dtb_queuf[1]()
end
del(dtb_queuf,dtb_queuf[1])
del(dtb_queu,dtb_queu[1])
_dtb_clean()
sfx(2)
end
-- make sure that this function is called each update.
function dtb_update()
if #dtb_queu>0 then
if dtb_curline==0 then
dtb_curline=1
end
local dislineslength=#dtb_dislines
local curlines=dtb_queu[1]
local curlinelength=#dtb_dislines[dislineslength]
local complete=curlinelength>=#curlines[dtb_curline]
if complete and dtb_curline>=#curlines then
if btnp(4) then
_dtb_nexttext()
return
end
elseif dtb_curline>0 then
dtb_ltime-=1
if not complete then
if dtb_ltime<=0 then
local curchari=curlinelength+1
local curchar=sub(curlines[dtb_curline],curchari,curchari)
dtb_ltime=1
if curchar~=" " then
sfx(rnd({0,1,2}))
end
if curchar=="." then
dtb_ltime=6
end
dtb_dislines[dislineslength]=dtb_dislines[dislineslength]..curchar
end
if btnp(4) then
dtb_dislines[dislineslength]=curlines[dtb_curline]
end
else
if btnp(4) then
_dtb_nextline()
end
end
end
end
end
-- make sure to call this function everytime you draw.
function dtb_draw()
if #dtb_queu>0 then
local dislineslength=#dtb_dislines
local offset=0
if dtb_curline<dislineslength then
offset=dislineslength-dtb_curline
end
palt(0, false)
palt(11, true)
map(0,28,0,0,32,5)
palt(0, true)
palt(11, false)
if dtb_curline>0 and #dtb_dislines[#dtb_dislines]==#dtb_queu[1][dtb_curline] then
print("\x8e",114,28,7)
end
for i=1,dislineslength do
print(
dtb_dislines[i],
6,
i*8+23-(dislineslength+offset)*8,7)
end
end
end
-------------------------------
--------- transition ----------
-------------------------------
transition={
r=0,g=0,x=0,y=0,a=false
}
function transition:start(x,y)
self.r=0
self.g=8
self.x=x
self.y=y
self.a=true
end
function transition:update()
if not self.a then
return
end
if self.r<128 and self.g>0 then
self.r+=self.g
elseif self.r>=127 and self.g>0 then
self.g*=-1
elseif self.r>0 and self.g<0 then
self.r+=self.g
elseif self.r<=1 and self.g<0 then
self.a=false
end
end
function transition:draw()
if self.a then
circfill(
self.x,self.y,self.r,0)
end
end
-->8
-- built ins
physics=new_physics()
physics2=new_physics()
function _init()
dtb_init()
physics:reset()
physics2:reset()
physics:setforce(40,0)
physics2:setforce(0,0)
gstate:add("game",gs_game)
gstate:add("start",gs_start)
gstate:add("over",gs_over)
gstate:add("title",gs_title)
gstate:switch("title")
end
function _update60()
screenshake:update()
dtb_update()
physics:update()
physics2:update()
gstate:update()
transition:update()
end
function _draw()
gstate:draw()
transition:draw()
dtb_draw()
end
-->8
-- main game
-------------------------------
--------- components ----------
-------------------------------
function control()
return cmp("control",{})
end
function qtip(c,l,sx,sy)
assert(c>1)
local points={}
for i=1,c do
local p=particle(sx+l*i,sy)
if (i==c) then p:shakeit() end
if (i==1) then p:lock() end
physics:addparticle(p)
add(points,p)
if i>1 then
local p1=points[i-1]
local p2=points[i]
local s=spring(p1,p2,l,1)
physics:addspring(s)
end
end
return cmp("qtip",
{ points=points,
tip=points[c],
atch={},
hide=false })
end
function earwax(sx,sy)
local points={}
local num=2
for i=1,num do
local rx=rnd()*5+sx
local ry=rnd()*5+sy
local p=particle(rx,ry)
if (i==1) then p:lock() end
p.ro=rnd()
p.rs=rnd()
p.c=rnd({4,9})
physics2:addparticle(p)
add(points,p)
end
for x=1,num do
for y=1,num do
if (x > y) then
local s=spring(
points[x],
points[y],
dist(points[x],points[y]),
0.5)
physics2:addspring(s)
end
end
end
return cmp("earwax",
{ points=points,
num=num,
attached=false })
end
function texture_circ(
rmin,rmax,f,s,of,c)
return cmp("texture_circ",
{ rmin=rmin,
rmax=rmax,
fill=f,
speed=s,
offset=of,
c=c})
end
-------------------------------
--------- systems ----------
-------------------------------
controlable=sys(
{ "control","vel","speed" },
function(e)
if not cleaning and #dtb_queu==0 then
local s=e.speed
if btn(⬆️) and q_tip.pos.y>20 then
e.vel.y=-s.y
end
if btn(⬇️) and q_tip.pos.y<100 then
e.vel.y=s.y
end
if btn(⬅️) and q_tip.pos.x>30 then
e.vel.x=-s.x
end
if btn(➡️) then
e.vel.x=s.y
end
end
end)
control_cleaning=sys(
{ "control","vel","speed" },
function(e,w)
if not cleaning and
#dtb_queu==0 then
if btnp(❎) or btnp(🅾️) then
q_tip.qtip.hide=true
cleaning=true
add(w,mk_timer(60,function()
q_tip.speed.x=ogs.x
q_tip.speed.y=ogs.y
start_minigame()
end))
end
end
end
)
qtip_u=sys(
{ "qtip","pos","speed","vel" },
function(e)
if e.qtip.hide and e.pos.x>0 then
e.vel.x-=0.5
e.vel.y=0
elseif e.qtip.hide and e.pos.x<-70 then
e.vel.x=0
end
e.qtip.points[1].x=e.pos.x
e.qtip.points[1].y=e.pos.y
end)
camera_follow=sys(
{ "qtip","pos" },
function(e)
local cam_x=peek2(0x5f28)
local cam_y=peek2(0x5f2a)
local offset_x=e.pos.x-24
if offset_x>0 then
camera(offset_x+cam_x,cam_y)
end
end)
qtip_d=sys(
{ "qtip","pos" },
function(e)
local pos=e.pos
local points=e.qtip.points
-- qtip
for i,p in pairs(points) do
if i>1 then
local x_offset=0
if i==2 then
x_offset=6
end
pb=points[i-1]
for j=0,7 do
tline(pb.x+x_offset,pb.y+j-3,
p.x,p.y+j-3,
1/8,j/8)
end
end
if i==#points then
map(0,1,p.x-4,p.y-3,2,1)
end
end
-- arm
map(0,6,pos.x-126,pos.y-3,12,1)
-- hand
map(2,2,pos.x-30,pos.y-19,5,4)
end)
earwax_u=sys(
{ "earwax","pos" },
function(e)
local tip=q_tip.qtip.tip
if e.earwax.attached then
e.pos.x=tip.x+4
e.pos.y=tip.y
elseif time()>1 then
local q_touch=overlap(
e,e.pos.x,e.pos.y,
{pos={x=tip.x,y=tip.y},
col={w=10,h=10}}
)
if q_touch then
sfx(3,3)
e.earwax.attached=true
add(q_tip.qtip.atch,e)
e.vel.x=0
e.vel.y=0
q_tip.speed.x=max(
0.1,q_tip.speed.x-0.1)
q_tip.speed.y=max(
0.1,q_tip.speed.y-0.1)
end
end
e.earwax.points[1].x=e.pos.x
e.earwax.points[1].y=e.pos.y
end)
earwax_d=sys(
{ "earwax","col","pos" },
function(e)
local t=time()
local points=e.earwax.points
for i,p in pairs(points) do
r=(4+p.ro*1.5)+sin(t*p.rs)/2
circfill(p.x,p.y,r,p.c)
end
-- rect(e.pos.x,e.pos.y,
-- e.pos.x+e.col.w,
-- e.pos.y+e.col.h,8)
end)
texture_circ_u=sys(
{ "texture_circ" },
function(e)
local tc=e.texture_circ
e.texture_circ.r=tc.rmin
+(sin((tc.offset+time())*tc.speed)
*tc.rmax)
end)
texture_circ_d=sys(
{ "pos","texture_circ" },
function(e)
local p=e.pos
local tc=e.texture_circ
fillp(e.texture_circ.fill)
circfill(p.x,p.y,tc.r,tc.c)
fillp(█)
end)
function draw_ui()
local cam_x=peek2(0x5f28)
-- box
palt(0, false)
palt(11, true)
map(0,24,cam_x,106,32,3)
palt(0, true)
palt(11, false)
circfill(128+cam_x,0,21,9)
circfill(128+cam_x,0,20,0)
print(
"\^p"..wax_count.."\^-p",
114+cam_x,2,9)
-- attached wax count
if cleaning and minigame then
minigame:draw(cam_x)
else
print(
"\^t ● weight: \^-t",
4+cam_x,113,9)
local ach=#q_tip.qtip.atch
local c=11
if (ach>1) c=10
if (ach>2) c=9
if (ach>3) c=8
circfill(55+cam_x,117,ach,c)
-- time
local t=flr(score/60)
print(
"\^t ⧗ time: \f7"..t.."\-f \^-t",
65+cam_x,113,9)
end
end
-------------------------------
--------- factories ----------
-------------------------------
ogs={x=1.2,y=0.9}
function mk_qtip(x,y,l)
local q=ent()
q+=pos(x,y)
q+=qtip(2,l,x+20,y,false)
q+=vel(0,0)
q+=speed(ogs.x,ogs.y)
q+=fric(0.95)
q+=control()
q+=col(8,8,{0},0,0)
return q
end
function mk_earwax(xs,ys,xw,yw)
local e=ent()
local x=xs+rnd(xw)
local y=ys+rnd(yw)
e+=pos(x,y)
e+=col(4,4,{0},0,0,true)
e+=vel((rnd()-0.5)/5,(rnd()-0.5)/1)
e+=earwax(x,y)
return e
end
function mk_bg_circ()
local e=ent()
local x=rnd(128)
local y=rnd(128)
e+=pos(x,y)
local f=rnd({…,∧,░,ˇ})
local s=0.02
local of=rnd(100)
local c=rnd({8,8,8,14})
e+=texture_circ(10,20,f,s,of,c)
return e
end
-- gamestate
gs_game={world={}}
score=0
function gs_game:init()
physics:reset()
physics2:reset()
music(6)
score=0
self.world={}
cleaning=false
wax_count=30
ogs={x=1.2,y=0.9}
map_offset={x=0,y=-7}
init_minigames()
q_tip=mk_qtip(-20,45,48)
add(self.world,q_tip)
for i=1,wax_count do
add(self.world,mk_earwax(
64,32,32*8,64))
end
for i=1,8 do
add(self.world,mk_bg_circ())
end
end
function gs_game:update()
score+=1
timer_u(self.world,self.world)
move(self.world)
controlable(self.world)
control_cleaning(self.world,self.world)
friction(self.world)
anim_u(self.world)
qtip_u(self.world)
earwax_u(self.world)
texture_circ_u(self.world)
if cleaning and minigame then
minigame:update(self.world)
end
if wax_count==0 then
if not transition.a then
transition:start(64,64)
add(self.world,
mk_timer(20,function()
gstate:switch("over")
end))
end
end
end
function gs_game:draw()
cls(1)
texture_circ_d(self.world)
anim_d(self.world)
image_d(self.world)
camera_follow(self.world)
qtip_d(self.world)
earwax_d(self.world)
map(0,7,0,0,32*4,32)
draw_ui()
end
-->8
-- minigame utils
colors={3,4,5,6,7,8,9,10,11,12,13,14,15}
buttons={⬅️,➡️,⬆️,⬇️,❎,🅾️}
buttons_chr={"⬅️","➡️","⬆️","⬇️","","🅾️"}
minigames={"mashit","pmatch","timeit"}
minigame=nil
minigame_done=true
function init_minigames()
minigame=nil
minigame_done=true
end
function start_minigame()
local choice=rnd(minigames)
minigame_done=false
if choice=="mashit" then
minigame=mashit
elseif choice=="pmatch" then
minigame=pmatch
elseif choice=="timeit" then
minigame=timeit
else
minigame=mashit
end
minigame:init()
end
function complete_minigame(w)
if minigame_done then
return
end
minigame_done=true
sfx(5)
for e in all(q_tip.qtip.atch) do
del(w,e)
wax_count-=1
end
q_tip.qtip.atch={}
q_tip.qtip.hide=false
q_tip.vel.x=5
add(w,mk_timer(40,function()
cleaning=false
minigame=nil
end))
end
-->8
-- minigames
mashit={}
function mashit:complete()
return self.count>=self.need
end
function mashit:init()
self.c=rnd(colors)
self.need=10
self.count=0
self.choice=rnd({1,2,3,4,5,6})
self.button=buttons[self.choice]
self.button_chr=buttons_chr[self.choice]
end
function mashit:update(w)
if self:complete() then
complete_minigame(w)
elseif btnp(self.button) then
self.count+=1
self.c=rnd(colors)
screenshake:start(4)
sfx(3,3)
end
end
function mashit:draw(cam_x)
local togo=self.need-self.count
print(
"\^t mash "..self.button_chr.."!! "..togo.."\^-t",
4+cam_x,113,self.c)
end
timeit={v=0,seed=0,go=true}
function timeit:init()
self.go=true
self.seed=rnd(60)
self.v=0
self.pick=nil
self.d=20+rnd(20)
end
function timeit:update(w)
if self.go then
self.v=30+sin((self.seed+time())/3)*30
end
if btnp(❎) then
if self.v>self.d-5 and
self.v<self.d+5 then
self.go=false
complete_minigame(w)
screenshake:start(4)
sfx(4,3)
end
end
end
function timeit:draw(cam_x)
print(
"\^t hit ❎ in\^-t",
4+cam_x,113,9)
rectfill(
47+cam_x,114,
47+8+cam_x,114+8,11)
rect(60,113,120,122,7)
rectfill(
60+self.d-5,113,
60+self.d+5,122,11)
line(
60+self.v,112,
60+self.v,123,7)
end
pmatch={}
function pmatch:complete()
return self.i>#self.pattern
end
function pmatch:init()
self.pattern={}
self.pattern_chr={}
self.i=1
for i=1,5 do
local j=rnd({1,2,3,4,5,6})
add(self.pattern,buttons[j])
add(self.pattern_chr,buttons_chr[j])
end
end
function pmatch:update(w)
if self:complete() then
complete_minigame(w)
elseif btnp(self.pattern[self.i]) then
self.i+=1
screenshake:start(4)
sfx(4,3)
end
end
function pmatch:draw(cam_x)
print(
"\^t match: \^-t",
4+cam_x,113,9)
for i,p in pairs(self.pattern_chr) do
local c=9
if self.i>i then
c=11
end
print(
"\^t\^w"..p.."\^-t\^w",
20+cam_x+(i*16),113,c)
end
end
-->8
-- starting screen
gs_start={world={}}
head_u=sys({"head"},
function(e,w)
local t=q_tip.qtip.tip
local d=dist(e.head,t)
if d<16 then
if not transition.a and time()>1then
transition:start(e.head.x,e.head.y)
add(w,mk_timer(40,function()
gstate:switch("game")
end))
end
end
end)
function mk_head(x,y,sx)
local h=ent()
h+=pos(x,y)
h+=cmp("head",{x=74,y=90})
h+=image(sx,24,8,8,"map")
return h
end
function gs_start:init()
music(2)
self.world={}
map_offset={x=20,y=32}
add(self.world,mk_head(64,64,17))
q_tip=mk_qtip(0,90,20)
add(self.world,q_tip)
dtb_disp("well hello there. you're probably wondering why im so sad.")
dtb_disp("it's these darn ears. they're soooo itchy!! no matter how hard and deep i scratch them, i can never get the itch..")
dtb_disp("i dig deeper and deeper, but nothing works.. it's like the itch is on my brain!. i fear this will be the end of me :(")
dtb_disp("wait a minute.. you could help me!")
dtb_disp("would you help me?...")
dtb_disp("you would?!..")
dtb_disp("thank you!..")
dtb_disp("when you're ready use the d-pad to move your q-tip into my ear.. no need to be shy.")
dtb_disp("be sure to collect all the wax.")
dtb_disp("press ❎/🅾️ to clear the junk and reload your q-tip. you may have to complete some sort of minigame though... oh also, be sure to watch your q-tip's weight, as gunk will slow you down!")
dtb_disp("i'll score you based on how fast you get all the junk in my ears.")
dtb_disp("good luck!")
end
function gs_start:update()
timer_u(self.world,self.world)
move(self.world)
controlable(self.world,self.world)
friction(self.world)
qtip_u(self.world)
timer_u(self.world,self.world)
head_u(self.world,self.world)
if q_tip.pos.x>100 then
q_tip.vel.x=-0.1
end
end
function gs_start:draw()
cls(1)
image_d(self.world)
qtip_d(self.world)
print("insert q-tip into ear",22,10,9)
end
-->8
-- game over
gs_over={world={}}
function gs_over:init()
music(15)
self.world={}
local t=flr(score/60)
dtb_disp("aaahhh, much better..")
dtb_disp("your final time was \^i"..t.."\^-i")
dtb_disp("i honestly have no idea if thats good or bad!")
dtb_disp("press 🅾️ to get the other ear")
add(self.world,mk_head(32,64,26))
end
function gs_over:update()
timer_u(self.world,self.world)
if #dtb_queu==0 then
if btnp(🅾️) then
if not transition.a then
transition:start(64,64)
add(self.world,
mk_timer(20,function()
gstate:switch("game")
end))
end
end
end
end
function gs_over:draw()
cls(1)
image_d(self.world)
end
-->8
-- title
gs_title={world={}}
function gs_title:init()
self.world={}
music(0)
for i=1,5 do
add(self.world,mk_earwax(
4,25,30*4,10))
end
for i=1,5 do
add(self.world,mk_earwax(
4,85,30*4,10))
end
end
function gs_title:update()
timer_u(self.world,self.world)
if btnp(🅾️) or btnp(❎) then
if not transition.a then
transition:start(64,64)
add(self.world,
mk_timer(20,function()
gstate:switch("start")
end))
end
end
end
function gs_title:draw()
cls(1)
map(53,24,0,0,32,32)
map(36,26,-5,42,32,32)
earwax_d(self.world)
print("press ❎/🅾️",75,72,9)
end
__gfx__
00000000222222222222222222222222222222221121211211111111121211210000000000000000000000000000004444444444440000000000000000000000
000000002eeeee2ee2eeee2e2eeeee2eee2eeee22111112111111111211221110000000000000000000044444444444444444444444440000000000000000000
007007002eeee22ee2eeee2e2eeee22eee22eee21121211111111111122212120000000000000000004444444444444444444444444440000000000000000000
00077000222ee2eeeeeeeeee222ee2eeeee2eee21212121211111111212121110000000000000000044444444444444444444444444444400000000000000000
000770002eeee22eeee2eeee2eeee22eeeeeeee22221222211111111222112120000000000000000444444444444444444444444444444440000000000000000
007007002eeeeeeee222e2ee2ee2eeeeeeee22e22122212111111111121221110000000000000000444444444444444444444444444444444000000000000000
000000002ee2eeeee2eeee2e222eee2ee2eee2222228222211111111222211210000000000000004444444444444444444444444444444444000000000000000
0000000022222222222222222eeeeee22eeeeee28282282811111111221221120000000000000004444444444444444444444444444444444000000000000000
00000000222eeee22eeeeee22eeeeee22eeeeee2282888282828882800099bbb0000000000000004444444444444444444444444444444444440000000000000
000000002eeeeee22ee2ee222eeeee2ee22eeee2888228828882288200099bbb0000000000000044444444444444444444444444444444444440000000000000
000000002eeee2222ee2eee22eeee22eee2ee222282888882828888200099bbb000000000000004444444444ffffffffffffffffffff44444444000000000000
999999992eee2ee2222eeee2222ee2eeeeee2ee2888882888888828800099bbb0000000000004444444ffffff77fffffffffffffffff44444444000000000000
999999992eeeeee22eeeeee22eeee22eeeeeeee2888888888828282800099bbb000000000000444444fffff7777fffff77ffffffffffff444444000000000000
bbbbbbbb2ee2eee22eeeeee22eeeeeeeeee2eee2888888888888288200099bbb000000000000444444fff77fffff7777777ffffffffffff44444000000000000
bbbbbbbb2e22eee22eee22222ee2eeeeee22eee2828882882888882800099bbb00000000000044444fffffffff777777777ffffffffffff44444000000000000
bbbbbbbb222222222eeeeee22222222222222222202220222288288200099bbb04444444000044444ffffffff7777777fffffffffffffff44444000444444400
0000000022222222bbbbbbbbbbbbbbbbbbbbbbbb20222022288882828222112104ffffff440044444ffffff77777777777777ffffffffff44444004fff77ff40
00000000ee2eeee2bbb99bbbbbbbbbbbbbb99bbb8288828802888888221221114ffff7ffff4444444fffffff7777ff7ff777fffffffffff4444404ff7777ff40
00000000ee22eee2bbb99bbbbbbbbbbbbbb99bbb8888888828888282822212124ff7777fffff44444ffffffffffffffffffffffffffffff444444fffff777f40
00000000eee2eee2b9999999999999999999999b8888888828888828282121114fff77777fff44444fffffff44fffffffffffffffffffff444444ffffff77f40
00000000eeeeeee2b9999999999999999999999b8888828828888828222212124ffffff777ff44444ffffff44fffffffffffff4fffffff4444444ffffff77f40
00000000eeee22e2bbb999000000000000999bbb2828888802882888821221114fffffff77fff44444ffff444fffffffffffff444fffff444444fffffff7ff40
00000000eeeee2e2bbb990000000000000099bbb8882288228888882222211214fffffff777ff44444fff444ffffffffffffff444444ff444444ffffffffff40
0000000022222222bbb990000000000000099bbb2828882828888828821221124ffffffff77ff44444ff444fffffffffffffffff444444444444ffff44ffff40
0000000022222222bbb99000bbb9900000099bbb8282282822888282221221214fffffffff7ff44444f444fffffffffffffffffffff444444444ffff444fff40
000000002eee2ee2bbb99000bbb9900000099bbb2222822228888888222212124fff4ffffffff44444444ff444444ffffff44444444ff44f4444fffff44fff40
000000002eee2ee2bbb99900bbb9900000999bbb1212221288828282121222114fff4ffffffff444fffff4444444444ffff444444444ffff4444fff7f44fff40
0000000022eeeee2b9999999bbb990009999999b2222122288888828222112224fff4ff7fffff444fffff4444444444fffff44444444fffff444ff77f44ff400
000000002eeeeee2b9999999bbb990009999999b21212121282288282121212104ff4477fffff444fffffff44444f44fffffffff444fffffff44ff77f44ff400
000000002ee222e2bbb99bbbbbb99000bbb99bbb12111211888828881112121104ff44f7fffff444fffffffffffff44ffffffffffffffffffff4ffffff4ff400
000000002ee2e222bbb99bbbbbb99000bbb99bbb11121111828288821211111204ff444774fff44fffff44fffffff44ffff44ffffff4fffffff4ffffff4ff400
000000002eeeeee2bbbbbbbbbbb99000bbbbbbbb12111212282882282112121104ff444ff4fff4fffffff44444444447ffff44444444ffffff444f44ff4ff400
000000000000000000000000000000000000000000000000000000000000000004ff444f44fff4fffffffffffffff4477fff44ffffffffffff444f444ffff400
000000000000000000000000000000000000000000000000000000000000000004ff4ff444fff4fffffffffffffff4f77fff44ffffffffffff444f444ffff400
777777770000000000000ff0000000000000000000000000000000000000000004fffff44ffff4ffffffffffffff44f77ffff4ffffffffffff444ff444fff400
77777777000000ff0000fff00000000000000000000000000000000000000000004ffff44ffff4ffffffffffff444f777ffff4444fffffffff444fff44fff400
6666766600000fff0000fff00000000000000000000000000000000000000000004fff444ffff4fffffffffff4444f777ffff44444ffffffff444ffff4fff400
0000000000000fff0000ff000000000000000000000000000000000000000000004ffffffffff4ffffffffff444f777777fffff444ffffffff444ffffffff400
0000000000000fff000fff000000000000000000000000000000000000000000004ffffffffff4ffffffffff44ffffffffffffff44ffffffff444ffffffff400
0000000000000fff000fff000000000000000000000000000000000000000000004ffffffffff4ffffffffff44ffffffffffffff44ffffffff444ffffffff400
00000000000000ff000ff0000000000000000000444ffffffffffff444ffffff0044ffffffff44ffffffffff444ffffffffffff444fffffff4444ffffffff400
0000000000ff00fff0fff000ffff000000000000f444444ffffff444ffffffff0044ffffffff44fffffffffff444444ffffff444fffffffff44444fffffff400
0000000000fff00ff0ff4fffffffff0000000000ffffffffffffffffffffffff0044fffffff444fffffffffffffffffffffffffffffffffff444044ffffff400
0000000000fffffff4ffffffffffffff00000000ffffffffffffffffffffffff0004fffff444004ffffffffffffffffffffffffffffffffff400004fffff4400
00000000000ffffff4fffffff000ffff00000000ffffffffffffffffffffffff000444444440004fffffffffff44444444444444fffffffff400004444440000
000000000000044fffffff00000000ff00000000ff44fffffffffff44fffffff000044444000004ffffffffff44444ffffff444444fffffff400000000000000
000000000000000fffffff00000000ff00000000ff44444fffff44444fffffff0000000000000004ffffffff4fffffffffffffffff4ffffff400000000000000
0000000000000000ffffff00000000fff0000000ff444444444444444fffffff0000000000000004ffffffffffffff444444ffffff4ffffff400000000000000
00000000000000004fffff00000777fff6000000fff4444444444444ffffffff0000000000000004ffffffff4ffffff444ffffffffffffff4400000000000000
00000000ffffffffffffff000077777777700000ffffff4444444ffffffffff400000000000000004ffffffffffffff444fffffffffffff44000000000000000
00000000ffffffffffffff000777777777770000fffffffffffffffffffffff4000000000000000004ffffffffffffff44fffffffffffff40000000000000000
00000000ffffffffffffff000777777777760000fffffff44444fffffffff440000000000000000000444ffffffffffffffffffffffff4400000000000000000
00000000ffffffffffffff0007777777777600004fffffffffffffffff4442200000000000000000222244444fffffffffffffffff4442200000000000000000
0000000044444444ffffff000077777777760000444444444444444422222222000000000000022222ee22244444444444444444222222222200000000000000
000000000000000044ffff000077777776600000ffffffffffffffff2222222200000000000222ee22ee2222ffffffffffffffff222222222222200000000000
00000000000000000000ff0000066666600000002ffffffffffffff22222ee22000000000222eeee222eee222ffffffffffffff22222ee2222eee20000000000
00000067777770000000ff000000fffff6000000000000670000000000000000000000022eeeeeeee22eeee222fffffffffffff222eeee222eeeee2000000000
00007777777777000000fff00000ffff777000000000777700000000000000000000002eeeeeeeeeee2eeee22222fffffffff2222eeeee22eeeeeee200000000
000077777777777000004ff0000fff0077777777777777770000000000000000000002eeeeeeeeeeee2eeeeee2222ffffff22222eeeee22eeeeeeee200000000
000067777777777000000fff00ffff007776777777776777000000000000000000002eeeeeeeeeeeeeeeeeeeee2222222222222eeeeeeeeeeeeeeeee20000000
0000677777777770000004fffffff0007776666666666777000000000000000000002eeeeeeeeeeeeeeeeeeeeee222222222eeeeeeeeeeeeeeeeeeee20000000
000067777777770000000044ffff00007776000000006777000000000000000000002eeeeeeeeeee222eeeeeeeeeeeeeeeeeeeeeeeeeeeee2eeeeeeee2000000
00000667777777000000000000000000766000000000066700000000000000000002eeeeeeeeeeee222eeeeeeeeeeeeeeeeeeeeeeeeeee222eeeeeeeee200000
00000006666660000000000000000000600000000000000600000000000000000002eeeeeeeeeeee2222eeeeeeeeeeeeeeeeeeeeeeeee2222eeeeeeeee200000
23010101010101010101010101010143000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
50505050505050505050505050505050500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
51515151515151515151515151515151510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000c1c2c3c4c5c6c7c8c9cacbcccdcecfc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000d1d2d3d4d5d6d7d8d9dadbdcdddedfd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000e1e2e3e4e5e6e7e8e9eaebecedeeefe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000f1f2f3f4f5f6f7f8f9fafbfcfdfefff0000000000000000000000000000000000000000000000000000000000000000000000525252525252525252525252
52525252520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000535353535353535353535353
53535353530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000ff0000fff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000fff0000fff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000fff0000ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000fff000fff00000000000000000000000000000000000000000000777000000000000000000000000000000000000000000000000000000000000000000000
000fff000fff00000000000000000000000000000000000000000007777000000000000000070000000000000000000000000000000000000000000000000000
0000ff000ff000000000000000000000000000000000000000000007777000000000000000000700770000000000000000000000000000000000000000000000
ff00fff0fff000ffff00000000000000000000000077000000000007770000000000000000077070770000000000000000000000000000000000000000000000
fff00ff0ff4fffffffff000000000077770000077777007700000000000000000000000077777077770007777770000077000000000000000000000000000000
fffffff4ffffffffffffff0000000777777000777777007770000000770000077770000777777067777700077777000077700000000000000000000000000000
0ffffff4fffffff000ffff0000000777777007777077007777077000770007777777007777077000776777000777700077770770000000000067777770000000
00044fffffff00000000ff0000007770077077770077007777777000770007777777077770077000770677700007770077777770000000007777777777000000
00000fffffff00000000ff0000007770077077700077007707777000770077700077077700077000770067700000770077077770000077777777777777700000
000000ffffff00000000fff000007700077077000077007700077007770077000077077000077007770770000000770077000770007777776777777777700000
0000004fffff00000777fff600007700777077000077007700077007770077000077077000077007770770000000770077000770077766666777777777700000
ffffffffffff00007777777770007707777077000077007700770007770077000077077000077007700770000000770077007700077600006777777777000000
ffffffffffff00077777777777007777770077000777007700770007770077000777077000777007707770000000770077007700077000000667777777000000
ffffffffffff00077777777777777767600076007777077700770007700077007777077007777077707770000007770777007700776000000006666660000000
ffffffffffff00077777777777777776000077777770077000770007700077777777077777770077777777000007700770007700776000000000000000000000
444444ffffff00007777777776667777000777776770777000677077707777666667077777670777766067700077777770007777770000000000000000000000
00000044ffff00007777777660000677777776660777760000067777777766600077777660677766660067777777677600000777760000000000000000000000
0000000000ff00000666666000000066666600000666600000066666666600007776666000066600000006666666666000000666600000000000000000000000
0000000000ff000000fffff000000000000000000000000000000000000000077777000000000000000000000000000000000000000000000000000000000000
0000000000fff00000ffff0099999999999999999999999999999999999900777067099999999999999999999999999999999999000000000000000000000000
00000000004ff0000fff000999999999999999999999999999999999999007770077099999999999999999999999999999999990000000000000000000000000
00000000000fff00ffff000444444444444444444444444444444444440077700077044444444444444444444444444444444400000000000000000000000000
000000000004fffffff0000000000000000000000000000000000000000077000077000000000000000000000000000000000000000000000000000000000000
00000000000044ffff00000000000000000000000000000000000000000077700776000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000067777760000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000006666600000000000000000000000000000000000000000000000000000000000000
__label__
11212112112121121121211211212112112121121121211211212112112121121121211211212112112121121121211211212112112121121121211211212112
21111121211111212111112121111121211111212111112121111121211111212111112121111121211111212111112121111121211111212111112121111121
11212111112121111121211111212111112121111121211111212111112121111121211111212111112121111121211111212111112121111121211111212111
12121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212
22212222222122222221222222212222222122222221222222212222222122222221222222212222222122222221222222212222222122222221222222212222
21222121212221212122212121222121212221212122212121222121212221212122212121222121212221212122212121222121212221212122212121222121
22282222222822222228222222282222222822222228222222282222222822222228222222282222222822222228222222282222222822222228222222282222
82822828828228288282282882822828828228288282282882822828828228288282282882822828828228288282282882822828828228288282282882822828
28288828282888282828882828288828282888282828882828288828282888282828882828288828282888282828882828288828282888282828882828288828
88822882888228828882288288822882888228828882288288822882888228828882288288822882888228828882288288822882888228828882288288822882
28288888282888882828888828288888282888882828888828288888282888882828888828288888282888882828888828288888282888882828888828288888
88888288888882888888828888888288888882888888828888888288888882888888828888888288888882888888828888888288888882888888828888888288
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
82888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288
21222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111144444111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111444444411111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111114444444441111111111111111111111111111111111111
11111111111111111111111111111111111999111111111111111111111111111111111111111111144444444444111111111111111111111111111111111111
11111111111111111111111111111111199999991111111111111111111111111111111111111111144444444444111111111111111111111111111111111111
11111111111111111111111111111111199999991111111111111111111111111111111111111111144444444444111111111111111111111111111111111111
11111111111111111111111111111111999999999111111111111111111111111111111111111111144444444444111111111111111111111111111111111111
11111111111111111111111111111111999999999411111111111111999991111111111111111111144444444444111111111111111111111111111111111111
11111111111111111111111111114444499999999411111111111119999999911111111111111111114444444441111111111111111111111111111144411111
11111111111111111111111111144444449999994411111111111199999999911111111111111111111444444411111111111111111111111111114444444111
11111111111111111111111111444444444999994111111111111999999999991111111111111111111144444111111111111111111111111111114444444111
11111111111111111111111114444444444499441111111111111999999999991111111111111111111111111111111111111111111111111111144444444491
11111111111111111111111114444444444411111111111111111999999999991111111111111111111111111111111111111111111111111111144444444491
11111111111111111111111114444444444411111111111111111999999999991111111111111111111111111111111111111111111111111111144444444499
11111111111111111111111114444444444411111111111111111999999999991111111111111111111111111111111111111111111111111111114444444999
11111111111111111111111114444444444411111111111111111199999999911111111111111111111111111111111111111111111111111111114444444999
11111111111111111111111111444444444111111111111111111119999999111111111111111111111111111111111111111111111111111111111144499991
11111111111111111111111111444444441111111111111111111111999991111111111111111111111111111111111111111111111111111111111199999991
11111111111111111111111111114444411111111111111111111111111111111111111111111111111111111111111111111111111111111111111111999111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111ff1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111ff1111fff1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
111111fff1111fff1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
111111fff1111ff11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
111111fff111fff11111111111111111111111111111111111111111111777111111111111111111111111111111111111111111111111111111111111111111
111111fff111fff11111111111111111111111111111111111111111117777111111111111111171111111111111111111111111111111111111111111111111
1111111ff111ff111111111111111111111111111111111111111111117777111111111111111111711771111111111111111111111111111111111111111111
111ff11fff1fff111ffff11111111111111111111111177111111111117771111111111111111177171771111111111111111111111111111111111111111111
111fff11ff1ff4fffffffff111111111177771111177777117711111111111111111111111177777177771117777771111177111111111111111111111111111
111fffffff4ffffffffffffff1111111777777111777777117771111111771111177771111777777167777711177777111177711111111111111111111111111
1111ffffff4fffffff111ffff1111111777777117777177117777177111771117777777117777177111776777111777711177771771111111111167777771111
11111144fffffff11111111ff1111117771177177771177117777777111771117777777177771177111771677711117771177777771111111117777777777111
11111111fffffff11111111ff1111117771177177711177117717777111771177711177177711177111771167711111771177177771111177777777777777711
111111111ffffff11111111fff111117711177177111177117711177117771177111177177111177117771771111111771177111771117777776777777777711
1111111114fffff11111777fff611117711777177111177117711177117771177111177177111177117771771111111771177111771177766666777777777711
fffffffffffffff11117777777771117717777177111177117711771117771177111177177111177117711771111111771177117711177611116777777777111
fffffffffffffff11177777777777117777771177111777117711771117771177111777177111777117717771111111771177117711177111111667777777111
fffffffffffffff11177777777777777767611176117777177711771117711177117777177117777177717771111117771777117711776111111116666661111
fffffffffffffff11177777777777777776111177777771177111771117711177777777177777771177777777111117711771117711776111111111111111111
444444444ffffff11117777777776667777111777776771777111677177717777666667177777671777766167711177777771117777771111111111111111111
11111111144ffff11117777777661111677777776661777761111167777777766611177777661677766661167777777677611111777761111111111111111111
1111111111111ff11111666666111111166666611111666611111166666666611117776666111166611111116666666666111111666611111111111111111111
1111111111111ff111111fffff111111111111111111111111111111111111111177777111111111111111111111111111111111111111111111111111111111
1111111111111fff11111ffff1199999999999999999999999999999999999911777167199999999999999999999999999999999999111111111111111111111
11111111111114ff1111fff111999999999999999999999999999999999999117771177199999999999999999999999999999999991111111111111111111111
11111111111111fff11ffff111444444444444444444444444444444444441177711177144444444444444444444444444444444411111111111111111111111
111111111111114fffffff1111111111111111111111111111111111111111177111177111111111111111111111111111111111111111111111111111111111
11111111111111144ffff11111111111111111111111111111111111111111177711776111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111167777761111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111116666611111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111119999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111199999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111119999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111119999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111119999999999911111111111111111111111111111111111111111111111111144411111111111111111111111111111111111111
11111111111111111111111119999999999911111111111111111111111111111111111111111111111114444444111111111111111111111111111111111111
11111111111111111111111119999999999911111111111111111111111111111111111111111111111114444444999111111111111111111111111111111111
11111111111111111111111111999999999111111111111111111111111111111111111111111111111144444444499991111111111111111111111111111111
11111111111111111111111114499999991111111111111111111999111111111111111114444411111144444444499991111111111111111111111111111111
11111111111111111111111444449999941111111111111111199999991111111111111144444441111144444444499999111111111111111111111111111111
11111111111111111111111444444444441111111111111111199999991111111111111444444444111114444444999999111111111111111111111111111111
11111111111111111111114444444444411111111111111111999999999111111111114444444444491114444444999999111111111111111111111111111111
11111111111111111111444444444444411111111111111111999999999111111111114444444444491111144499999991111111111111111111111111111111
11111111111111111111444444444441111111111111111111999999999111111111114444444444499111111199999991111111111111111111111111111111
11111111111111111114444444444411111111111111111111199999991111111111114444444444499111111111999111111111111111111111111111111111
11111111111111111114444444444411111111111111111111199999991111111111114444444444499111111111111111111111111111111111111111111111
11111111111111111114444444441111111111111111111111111999111111111111111444444444991111111111111111111111111111111111111111111111
11111111111111111111444444411111111111111111111111111111111111111111111144444449991111111111111111111111111111111111111111111111
11111111111111111111444444411111111111111111111111111111111111111111111114444499111111111111111111111111111111111111111111111111
11111111111111111111114441111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
21222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122212221222122
82888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288828882888288
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888288888882888888828888888288888882888888828888888288888882888888828888888288888882888888828888888288888882888888828888888288
28288888282888882828888828288888282888882828888828288888282888882828888828288888282888882828888828288888282888882828888828288888
88822882888228828882288288822882888228828882288288822882888228828882288288822882888228828882288288822882888228828882288288822882
28288828282888282828882828288828282888282828882828288828282888282828882828288828282888282828882828288828282888282828882828288828
82822828828228288282282882822828828228288282282882822828828228288282282882822828828228288282282882822828828228288282282882822828
22228222222282222222822222228222222282222222822222228222222282222222822222228222222282222222822222228222222282222222822222228222
12122212121222121212221212122212121222121212221212122212121222121212221212122212121222121212221212122212121222121212221212122212
22221222222212222222122222221222222212222222122222221222222212222222122222221222222212222222122222221222222212222222122222221222
21212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121
12111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211
11121111111211111112111111121111111211111112111111121111111211111112111111121111111211111112111111121111111211111112111111121111
12111212121112121211121212111212121112121211121212111212121112121211121212111212121112121211121212111212121112121211121212111212
__gff__
0001010101010101000000000000000000010101010101000000000000000000000100000001010100000000000000000001000000010101000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__map__
4040404040404040404040404040400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
7071000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000004142000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000005152530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
6161616162636400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000072730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
6161616161616161616161616161616161000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515162706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010221262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000003101020204262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000001201210314262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000011403041304262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000003020412120314262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000012311212121321262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000013141212130221262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000001212030204262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000114110114262706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525362706060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
3535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353706060606060606060606060600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
222323232323232323232323232323240008090a0b0c0d0e0f0008090a0b0c0d0e0f0f000000000000000000000000000000000005050505050505050505050505050505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
332020202020202020202020202020170018191a1b1c1d1e1f0018191a1b1c1d1e1f00000000000000000000000000000000000015151515151515151515151515151515150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
321010101010101010101010101010340028292a2b2c2d2e2f0028292a2b2c2d2e2f000000c0c1c2c3c4c5c6c7c8c9cacbcccdcecf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000038393a3b3c3d3e3f0038393a3b3c3d3e3f000000d0d1d2d3d4d5d6d7d8d9dadbdcdddedf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
222323232323232323232323232323240048494a4b4c4d4e4f0048494a4b4c4d4e4f000061e0e1e2e3e4e5e6e7e8e9eaebecedeeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
332020202020202020202020202020170058595a5b5c5d5e5f0058595a5556575e5f000000f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
332020202020202020202020202020170068696a6b6c6d6e6f0068696a6566676e6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
332020202020202020202020202020170078797a7b7c7d7e7f0078797a7b7c7d7e7f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__sfx__
000100002a5402e54038540000002300033000130000d0000800005000200001a00016000100000f0000e0000e0000d0000c0000b000000000000000000000000000000000000000000000000000000000000000
00010000225402a540365400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000100001854021540305400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
120100003d6203c630336401c64019640196401d640246302b6302e6202f6202e6202b62026610206101b610166100c610016502e600346000000000000000000000000000000000000000000000000000000000
290200002c0502c0502c0502c05038050380503805038050380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00090000305502b540265302b52030540325503456034575000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0120000000055345211d62500055070551d625345000705500055000001d6250705500000070551d6250705500055345211d62500055070551d625000000705500055000001d62507055000001d6251d62507055
012000001b1511c1511c1521c1550000000000000001f154221512215222156211502115021155180001e1511f1511c1511815024151241522415122141221502215022140221350000000000000000000000000
5510002030755307153575535715367553671537755377153a7553a7153775537715347553471530755307152e7552e715307552e715347553471530755307152e7552e715307552e71534755347153775537715
a11000200000030755307153575535715367553671537755377153a7553a7153775537715347553471530755307152e7552e715307552e715347553471530755307152e7552e715307552e715347553471537755
0120000005055345211d625050550c0551d625345000c05505055000001d6250c055000000c0551d6250c05505055345211d625050550c0551d625345000c05505055000001d6250c055000000c0550b0550a055
012000001d1511d1512115024150271512715227155000002915129151291512d1512715127152261512415123150241501d15121150241512715127152271502714027132271252210000000000000000000000
911c00000235500000000000000000000000000000000000000000235500000000000235500000023550000002355023000000000000000000000002300023000000002355000000000002355000000235500000
911c00002135500000000000000000000000000000000000000002135500000000002135500000213550000022355023000000000000000000000002300023000000022355000000000024355000002235500000
911c00002a355000000000000000000000000000000000000000026355000000000026355000002a355000002b35502300000000000000000000000230002300000002e35500000000002c355000002935500000
911c00000035500000000000000000000000000000000000000000035500000000000035500000003550000000355023000000000000000000000002300023000000000355000000000000355000000135500000
911c00001f35500000000000000000000000000000000000000001f35500000000001f355000001f355000001f355023000000000000000000000002300023000000022355000000000021355000002035500000
911c0000283550000000000000000000000000000000000000000243550000000000283550000024355000002935502300000000000000000000000230002300000002b355000000000029355000002635500000
920d002010610156301a6401e640226302562027620276402665025640216201e6201a64016620136101161010610106101063011640166501b6402264026620296102a6102861027630246401f6401a63012620
011800000c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b4550c0231b455
01180000003501f655073501f655003501f655073501f655003501f655073501f655003501f655073501f655003501f655073501f655003501f655073501f655003501f655073501f655003501f655073501f655
01180000000002b5553053527555305352b5553053527555305352b5553053527555305352b5553053527555305352b5553053527555305352b5553053527555305352b5553053527555305352b5553053527555
01180000053501f655053501f655053501f655053501f655023501f655023501f655023501f655023501f655073501f655073501f655073501f655073501f655073501f655053501f655033501f655023501f655
011800000c023204550c023204550c023204550c023204550c0231d4550c0231d4550c0231d4550c0231d4550c0231b4550c0231b4550c0231b4550c0231b4550c0231a4550c0231a4550c0231a4550c0231a455
491800003015132151301503015030152301523015500000291502b1512c1512f1523015229152261512715026152241522315024151201511e1501f1521f1521f1321f12500000000000000000000000002f151
491800003515035152351523315132151301502f1522f1562f1513015232152331503215130151301522f15230140301323013230135000000000000000000003015130156321523215233156331563515237152
491800003715237152371523714237142371423713237132371323712237122371223711237112371123711500000000000000000000000000000000000000000000000000000000000000000000000000000000
01180000083501f655083501f655083501f655083501f655053501f655053501f655053501f655053501f655073501f655073501f655073501f655073501f655033501f655033501f655033501f655033501f655
01180000053501f655053501f655053501f655053501f655023501f655023501f655023501f655023501f655073501f655073501f655073501f655073501f655003501f655023501f655033501f655073501f655
011800000c023274550c023274550c023274550c02327455130232e4550c0232e4550c0232e4550c0232e4550c023264550c023264550c023264550c023264550c0232e4550c0232e4550c0232e4550c0232e455
0118000018255302551825530255182553025518255302551a255322551a255322551a255322551a25532255232553b255232553b255232553b25523255322551f255372551f255372551f255372551f25537255
011800001825530255182553025518255302551825530255172552f255172552f255172552f255172552f2551b255332551b255332551b255332551b255332551f255372551f255372551f255372551f25537255
4918000024151241522615226156271522b1513015032150331503315233155371513715235150331523215037152371423713500000351543315132152301522e1522e1522e1552f10000000000003015037150
4918000038152381523815500000381513715035155331563215232152321500000037154351513315132150331553313533125331253311533151301513015232151321512f1512f15230152301323012230115
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
111400001d0501d0501d0501d0501d0501d0521d0521d0551f0501f0501f0521f0551f0501f0501f0551f05521050210502105021050210502105021050210502105021050210402104021032210322102221015
0114000024050240502405024050210502104221042210452605026050260522605523050230502305523055250502505025050250502505025050280502d05028050250402d04028030250322d0322802225015
3114000029555295252d5552d555305553055535555355552b0552b0252f0552f025320553202537055370252d5552d5553155531555345553455538555385553905539025390453902539035395153951539515
011400000502005020050200502005020050220502205025070200702007022070250702007020070250702509020090200902009020090200902009020090200902009020090200902009022090120901209015
__music__
01 08090a0b
02 0c0d0a0b
01 0e0f1014
00 0e0f1014
00 11121314
02 11121314
01 5c161517
00 1a161517
00 1b181917
00 1c161517
00 1d201f57
00 1e211957
00 221d1f17
00 231e1917
02 5c161517
00 28292a2b
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment