Last active
April 25, 2021 18:06
Revisions
-
AlecTroemel revised this gist
Apr 25, 2021 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -685,7 +685,7 @@ function _init() gstate:add("start",gs_start) gstate:add("over",gs_over) gstate:add("title",gs_title) gstate:switch("title") end function _update60() -
AlecTroemel revised this gist
Apr 25, 2021 . 1 changed file with 8 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,6 +1,8 @@ pico-8 cartridge // http://www.pico-8.com version 30 __lua__ -- ld48: earigator -- by: alec t -- framework ------------------------------- @@ -683,7 +685,7 @@ function _init() gstate:add("start",gs_start) gstate:add("over",gs_over) gstate:add("title",gs_title) gstate:switch("game") end function _update60() @@ -1037,6 +1039,9 @@ gs_game={world={}} score=0 function gs_game:init() physics:reset() physics2:reset() music(6) score=0 self.world={} @@ -1102,7 +1107,7 @@ function gs_game:draw() 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"} @@ -1375,6 +1380,7 @@ end gs_title={world={}} function gs_title:init() self.world={} music(0) for i=1,5 do add(self.world,mk_earwax( -
AlecTroemel created this gist
Apr 25, 2021 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,1771 @@ pico-8 cartridge // http://www.pico-8.com version 30 __lua__ -- 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() 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={2,3,4,5,6,7,8,9,10,11,12,13,14,15,16} 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() 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