Created
April 22, 2018 17:31
-
-
Save egordorichev/0ebdc9ed75f7702280370d01c571b667 to your computer and use it in GitHub Desktop.
Rythm is Lava
This file contains 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 characters
pico-8 cartridge // http://www.pico-8.com | |
version 16 | |
__lua__ | |
-- main | |
-- todo | |
-- music | |
-- sfx | |
-- fx | |
-- ideas | |
-- platforms | |
-- music boss | |
music(0,1) | |
function _init() | |
g_time,state,g_index,shk= | |
0,ingame,10,0 | |
restart_level() | |
end | |
function _update60() | |
local nt=stat(21) | |
if(nt~=lastnt) nt_time+=1 | |
lastnt=nt | |
e_update_all() | |
do_movement() | |
do_collisions() | |
do_supports() | |
state.update() | |
g_time+=1 | |
end | |
function _draw() | |
if shk>0 then | |
shk-=0.5 | |
local a=shk/2 | |
camera(rnd(shk)-a,rnd(shk)-a) | |
end | |
if(state~=menu) cls(12) | |
--cls(stat(20)%2==0 and 1 or 0) | |
state.draw() | |
end | |
function restart_level() | |
reload(0x2000,0x2000,0x1000) | |
entity_reset() | |
collision_reset() | |
nt_time=0 | |
g_hp=6 | |
g_bdown=false | |
lastnt=0 | |
g_lost=false | |
e_add(level({ | |
base=v(g_index%8*16,flr(g_index/8)*16), | |
size=v(16,16) | |
})) | |
end | |
-->8 | |
-- oop | |
function deep_copy(obj) | |
if (type(obj)~="table") return obj | |
local cpy={} | |
setmetatable(cpy,getmetatable(obj)) | |
for k,v in pairs(obj) do | |
cpy[k]=deep_copy(v) | |
end | |
return cpy | |
end | |
function index_add(idx,prop,elem) | |
if (not idx[prop]) idx[prop]={} | |
add(idx[prop],elem) | |
end | |
function event(e,evt,p1,p2) | |
local fn=e[evt] | |
if fn then | |
return fn(e,p1,p2) | |
end | |
end | |
function state_dependent(e,prop) | |
local p=e[prop] | |
if (not p) return nil | |
if type(p)=="table" and p[e.state] then | |
p=p[e.state] | |
end | |
if type(p)=="table" and p[1] then | |
p=p[1] | |
end | |
return p | |
end | |
function round(x) | |
return flr(x+0.5) | |
end | |
------------------------------- | |
-- objects | |
------------------------------- | |
object={} | |
function object:extend(kob) | |
-- printh(type(kob)) | |
if (kob and type(kob)=="string") kob=parse(kob) | |
kob=kob or {} | |
kob.extends=self | |
return setmetatable(kob,{ | |
__index=self, | |
__call=function(self,ob) | |
ob=setmetatable(ob or {},{__index=kob}) | |
local ko,init_fn=kob | |
while ko do | |
if ko.init and ko.init~=init_fn then | |
init_fn=ko.init | |
init_fn(ob) | |
end | |
ko=ko.extends | |
end | |
return ob | |
end | |
}) | |
end | |
------------------------------- | |
-- vectors | |
------------------------------- | |
vector={} | |
vector.__index=vector | |
function vector:__add(b) | |
return v(self.x+b.x,self.y+b.y) | |
end | |
function vector:__sub(b) | |
return v(self.x-b.x,self.y-b.y) | |
end | |
function vector:__mul(m) | |
return v(self.x*m,self.y*m) | |
end | |
function vector:__div(d) | |
return v(self.x/d,self.y/d) | |
end | |
function vector:__unm() | |
return v(-self.x,-self.y) | |
end | |
function vector:dot(v2) | |
return self.x*v2.x+self.y*v2.y | |
end | |
function vector:norm() | |
return self/sqrt(#self) | |
end | |
function vector:len() | |
return sqrt(#self) | |
end | |
function vector:__len() | |
return self.x^2+self.y^2 | |
end | |
function vector:str() | |
return self.x..","..self.y | |
end | |
function v(x,y) | |
return setmetatable({ | |
x=x,y=y | |
},vector) | |
end | |
------------------------------- | |
-- collision boxes | |
------------------------------- | |
cbox=object:extend() | |
function cbox:translate(v) | |
return cbox({ | |
xl=self.xl+v.x, | |
yt=self.yt+v.y, | |
xr=self.xr+v.x, | |
yb=self.yb+v.y | |
}) | |
end | |
function cbox:overlaps(b) | |
return | |
self.xr>b.xl and | |
b.xr>self.xl and | |
self.yb>b.yt and | |
b.yb>self.yt | |
end | |
function cbox:sepv(b,allowed) | |
local candidates={ | |
v(b.xl-self.xr,0), | |
v(b.xr-self.xl,0), | |
v(0,b.yt-self.yb), | |
v(0,b.yb-self.yt) | |
} | |
if type(allowed)~="table" then | |
allowed={true,true,true,true} | |
end | |
local ml,mv=32767 | |
for d,v in pairs(candidates) do | |
if allowed[d] and #v<ml then | |
ml,mv=#v,v | |
end | |
end | |
return mv | |
end | |
function cbox:str() | |
return self.xl..","..self.yt..":"..self.xr..","..self.yb | |
end | |
function box(xl,yt,xr,yb) | |
return cbox({ | |
xl=min(xl,xr),xr=max(xl,xr), | |
yt=min(yt,yb),yb=max(yt,yb) | |
}) | |
end | |
function vbox(v1,v2) | |
return box(v1.x,v1.y,v2.x,v2.y) | |
end | |
------------------------------- | |
-- entities | |
------------------------------- | |
entity=object:extend({ | |
state="idle",t=0, | |
last_state="idle", | |
dynamic=true, | |
spawns={} | |
}) | |
function entity:init() | |
if self.sprite then | |
self.sprite=deep_copy(self.sprite) | |
if not self.render then | |
self.render=spr_render | |
end | |
end | |
end | |
function entity:become(state) | |
if state~=self.state then | |
self.last_state=self.state | |
self.state,self.t=state,0 | |
end | |
end | |
function entity:is_a(tag) | |
if (not self.tags) return false | |
for i=1,#self.tags do | |
if (self.tags[i]==tag) return true | |
end | |
return false | |
end | |
function entity:spawns_from(...) | |
for tile in all({...}) do | |
entity.spawns[tile]=self | |
end | |
end | |
static=entity:extend({ | |
dynamic=false | |
}) | |
function spr_render(e) | |
local s,p=e.sprite,e.pos | |
function s_get(prop,dflt) | |
local st=s[e.state] | |
if (st~=nil and st[prop]~=nil) return st[prop] | |
if (s[prop]~=nil) return s[prop] | |
return dflt | |
end | |
local sp=p+s_get("offset",v(0,0)) | |
local w,h= | |
s.width or 1,s.height or 1 | |
local flip_x=false | |
local frames=s[e.state] or s.idle | |
local delay=frames.delay or 1 | |
if s.turns and type(frames[1])~="number" then | |
if e.facing=="up" then | |
frames=frames.u | |
elseif e.facing=="down" then | |
frames=frames.d | |
else | |
frames=frames.r | |
end | |
flip_x=(e.facing=="left") | |
end | |
if s_get("flips") then | |
flip_x=e.flipped | |
end | |
if (type(frames)~="table") frames={frames} | |
local frm_index=flr(e.t/delay) % #frames + 1 | |
local frm=frames[frm_index] | |
local f=e.bold and ospr or spr | |
f(e.exr_sprite or frm, | |
(sp.x),(sp.y),w,h,flip_x) | |
return frm_index | |
end | |
function ospr(s,x,y,...) | |
for i=0,15 do pal(i,0) end | |
spr(s,x-1,y,...) | |
spr(s,x+1,y,...) | |
spr(s,x,y-1,...) | |
spr(s,x,y+1,...) | |
r_reset() | |
spr(s,x,y,...) | |
end | |
------------------------------- | |
-- entity registry | |
------------------------------- | |
function entity_reset() | |
entities,entities_with, | |
entities_tagged={},{},{} | |
end | |
function e_add(e) | |
add(entities,e) | |
for p in all(indexed_properties) do | |
if (e[p]) index_add(entities_with,p,e) | |
end | |
if e.tags then | |
for t in all(e.tags) do | |
index_add(entities_tagged,t,e) | |
end | |
c_update_bucket(e) | |
end | |
return e | |
end | |
function e_remove(e) | |
del(entities,e) | |
for p in all(indexed_properties) do | |
if (e[p]) del(entities_with[p],e) | |
end | |
if e.tags then | |
for t in all(e.tags) do | |
del(entities_tagged[t],e) | |
if e.bkt then | |
del(c_bucket(t,e.bkt.x,e.bkt.y),e) | |
end | |
end | |
end | |
e.bkt=nil | |
end | |
indexed_properties={ | |
"dynamic", | |
"render","render_hud", | |
"vel", | |
"collides_with", | |
"feetbox" | |
} | |
-- systems | |
------------------------------- | |
-- update system | |
------------------------------- | |
function e_update_all() | |
for ent in all(entities_with.dynamic) do | |
local state=ent.state | |
if ent[state] then | |
ent[state](ent,ent.t) | |
end | |
if ent.done then | |
e_remove(ent) | |
elseif state~=ent.state then | |
ent.t=0 | |
else | |
ent.t+=1 | |
end | |
end | |
end | |
function schedule(fn) | |
scheduled=fn | |
end | |
------------------------------- | |
-- render system | |
------------------------------- | |
function r_render_all(prop) | |
local drawables={} | |
for ent in all(entities_with[prop]) do | |
local order=ent.draw_order or 0 | |
if not drawables[order] then | |
drawables[order]={} | |
end | |
add(drawables[order],ent) | |
end | |
for o=0,15 do | |
for ent in all(drawables[o]) do | |
r_reset(prop) | |
if not ent.done then ent[prop](ent,ent.pos) end | |
end | |
end | |
end | |
function r_reset(prop) | |
pal() | |
palt(0,false) | |
palt(12,true) | |
if (prop~="render_hud" and g_cam) g_cam:set() | |
end | |
------------------------------- | |
-- movement system | |
------------------------------- | |
function do_movement() | |
for ent in all(entities_with.vel) do | |
local ev=ent.vel | |
ent.pos+=ev | |
if ev.x~=0 then | |
ent.flipped=ev.x<0 | |
end | |
if ev.x~=0 and abs(ev.x)>abs(ev.y) then | |
ent.facing= | |
ev.x>0 and "right" or "left" | |
elseif ev.y~=0 then | |
ent.facing= | |
ev.y>0 and "down" or "up" | |
end | |
if (ent.weight) then | |
local w=state_dependent(ent,"weight") | |
ent.vel+=v(0,w) | |
end | |
end | |
end | |
------------------------------- | |
-- collision | |
------------------------------- | |
function c_bkt_coords(e) | |
local p=e.pos | |
return flr(shr(p.x,4)),flr(shr(p.y,4)) | |
end | |
function c_bucket(t,x,y) | |
local key=t..":"..x..","..y | |
if not c_buckets[key] then | |
c_buckets[key]={} | |
end | |
return c_buckets[key] | |
end | |
function c_update_buckets() | |
for e in all(entities_with.dynamic) do | |
c_update_bucket(e) | |
end | |
end | |
function c_update_bucket(e) | |
if (not e.pos or not e.tags) return | |
local bx,by=c_bkt_coords(e) | |
if not e.bkt or e.bkt.x~=bx or e.bkt.y~=by then | |
if e.bkt then | |
for t in all(e.tags) do | |
local old=c_bucket(t,e.bkt.x,e.bkt.y) | |
del(old,e) | |
end | |
end | |
e.bkt=v(bx,by) | |
for t in all(e.tags) do | |
add(c_bucket(t,bx,by),e) | |
end | |
end | |
end | |
function c_potentials(e,tag) | |
local cx,cy=c_bkt_coords(e) | |
local bx,by=cx-2,cy-1 | |
local bkt,nbkt,bi={},0,1 | |
return function() | |
while bi>nbkt do | |
bx+=1 | |
if (bx>cx+1) bx,by=cx-1,by+1 | |
if (by>cy+1) return nil | |
bkt=c_bucket(tag,bx,by) | |
nbkt,bi=#bkt,1 | |
end | |
local e=bkt[bi] | |
bi+=1 | |
return e | |
end | |
end | |
function collision_reset() | |
c_buckets={} | |
end | |
function do_collisions() | |
c_update_buckets() | |
for e in all(entities_with.collides_with) do | |
for tag in all(e.collides_with) do | |
if entities_tagged[tag] then | |
local nothers= | |
#entities_tagged[tag] | |
if nothers>4 then | |
for o in c_potentials(e,tag) do | |
if o~=e and not e.nocol and not o.nocol then | |
local ec,oc= | |
c_collider(e),c_collider(o) | |
if ec and oc then | |
c_one_collision(ec,oc,e,o) | |
end | |
end | |
end | |
else | |
for oi=1,nothers do | |
local o=entities_tagged[tag][oi] | |
local dx,dy= | |
abs(e.pos.x-o.pos.x), | |
abs(e.pos.y-o.pos.y) | |
if dx<=20 and dy<=20 then | |
local ec,oc= | |
c_collider(e),c_collider(o) | |
if ec and oc then | |
c_one_collision(ec,oc,e,o) | |
end | |
end | |
end | |
end | |
end | |
end | |
end | |
end | |
function c_check(box,tags) | |
local fake_e={pos=v(box.xl,box.yt)} | |
for tag in all(tags) do | |
for o in c_potentials(fake_e,tag) do | |
local oc=c_collider(o) | |
if oc and not o.nocol and box:overlaps(oc.b) then | |
return oc.e | |
end | |
end | |
end | |
return nil | |
end | |
function c_one_collision(ec,oc,e,o) | |
if ec.b:overlaps(oc.b) then | |
c_reaction(ec,oc,e,o) | |
c_reaction(oc,ec,e,o) | |
end | |
end | |
function c_reaction(ec,oc,e,o) | |
local reaction,param= | |
event(ec.e,"collide",oc.e) | |
if type(reaction)=="function" then | |
reaction(ec,oc,param,e,o) | |
end | |
end | |
function c_collider(ent) | |
if ent.collider then | |
if ent.coll_ts==g_time or not ent.dynamic then | |
return ent.collider | |
end | |
end | |
local hb=state_dependent(ent,"hitbox") | |
if (not hb) return nil | |
local coll={ | |
b=hb:translate(ent.pos), | |
e=ent | |
} | |
ent.collider,ent.coll_ts= | |
coll,g_time | |
return coll | |
end | |
function c_push_out(oc,ec,allowed_dirs,e,o) | |
local sepv=ec.b:sepv(oc.b,allowed_dirs) | |
ec.e.pos+=sepv | |
if ec.e.vel then | |
local vdot=ec.e.vel:dot(sepv) | |
if vdot<0 then | |
if (sepv.y~=0) ec.e.vel.y=0 | |
if (sepv.x~=0) ec.e.vel.x=0 | |
end | |
end | |
ec.b=ec.b:translate(sepv) | |
end | |
function c_move_out(oc,ec,allowed) | |
return c_push_out(ec,oc,allowed) | |
end | |
------------------------------- | |
-- support | |
------------------------------- | |
function do_supports() | |
for e in all(entities_with.feetbox) do | |
local fb=e.feetbox | |
if fb then | |
fb=fb:translate(e.pos) | |
local support=c_check(fb,{"walls"}) | |
-- ) support=nil | |
e.supported_by=support | |
if support and support.vel then | |
e.pos+=support.vel | |
end | |
end | |
end | |
end | |
local a="0000000000000000000000000000000000000000000000000000000000000000000000000000000000055555555550000000000000000000005555555555550000000000000000000555155555555500000000000000000005551555555555000000000000000000055555555555550000000000000000000555555555555500000000000000000005555555555555000000008888888800055555550000000000000008888888880555555500000000000000008880008888555555555500000000000080000000558888000000000000005000000000005555558000000000000050000000005555555500000000000000550000005555555555555000000000005550000555555555550050000000000055550055555555555500500000000000555555555555555555000000000000005555555555555555550000000000000005555555555555555500000000000000055555555555555550000000000000000055555555555555500000000000000000055555555555550000000000000000000055555555555000000000000000000000055555555500000000000000000000000055550555000000000000000000000000555000550000000000000000000000005500000500000000000000000000000050000005000000000000000000000000555000055500000000000000000000000000000000000000000000" | |
function b(y,xx,yy) | |
for c=0,31 do | |
for d=1,31 do | |
local e=d+c*32 | |
local m=tonum(sub(a,e,e)) | |
if (m~=0) pset(d+48+xx,c-48+y+yy,m) | |
end | |
end | |
end | |
function oprint(s,x,y,...) | |
s=smallcaps(s) | |
prnt(s,x,y,...) | |
end | |
function coprint(s,y,c,m,n) | |
s=smallcaps(s) | |
prnt(s,64-#s*2+(m or 0),y,c,nil,n) | |
end | |
function prnt(s,x,y,c,o,n) | |
if(not o) o=sget(97,c) | |
for xx=x-1,x+1 do | |
for yy=y-1,y+2 do | |
print(s,xx,yy,n or 0) | |
end | |
end | |
print(s,x,y+1,o) | |
print(s,x,y,c) | |
end | |
local gt=0 | |
function f(e) | |
cls() | |
gt=min(0.5,gt+0.03) | |
local y=96+cos(gt)*5 | |
for xx=-1,1 do | |
for yy=-1,1 do | |
if abs(xx)+abs(yy)==1 then | |
coprint("^rexellent ^games", | |
y+yy,0,xx,7) | |
end | |
end | |
end | |
coprint("^rexellent ^games", | |
y,7) | |
for i=0,15 do pal(i,l[e][6]) end | |
for xx=-1,1 do | |
for yy=-1,1 do | |
if(abs(xx)+abs(yy)==1)b(y,xx,yy) | |
end | |
end | |
pl(e) | |
b(y,0,0) | |
flip() | |
end | |
function g(h,i,j) | |
for e=h,i,j do | |
for m=1,5 do | |
pl(e) | |
f(e) | |
end | |
end | |
end | |
function pl(e) | |
local k=l[e] | |
pal() | |
pal(8,k[1]) | |
pal(1,k[2]) | |
pal(5,k[3]) | |
pal(7,k[4]) | |
pal(13,k[5]) | |
end | |
l={ | |
{0,0,0,0,0,1}, | |
{2,0,1,1,1,5}, | |
{4,0,1,5,13,5}, | |
{4,1,5,6,13,6}, | |
{8,1,5,7,13,7} | |
} | |
function m() | |
g(1,#l,1) | |
g(#l,1,-1) | |
pal() | |
fade() | |
end | |
function smallcaps(s) | |
s=s.."" | |
local d="" | |
local c | |
for i=1,#s do | |
local a=sub(s,i,i) | |
if a!="^" then | |
if not c then | |
for j=1,26 do | |
if a==sub("abcdefghijklmnopqrstuvwxyz",j,j) then | |
a=sub("\65\66\67\68\69\70\71\72\73\74\75\76\77\78\79\80\81\82\83\84\85\86\87\88\89\90\91\92",j,j) | |
end | |
end | |
end | |
d=d..a | |
c=true | |
end | |
c=not c | |
end | |
return d | |
end | |
function oline(x1,y1,x2,y2,c) | |
for x=-1,1 do | |
for y=-1,1 do | |
line(x1+x,y1+y,x2+x,y2+y,c) | |
end | |
end | |
end | |
function noprint(s,x,y,c) | |
s=smallcaps(s) | |
prnt(s,x+4-#s*2,y,c) | |
end | |
plt={7,6,5,1,0} | |
function fade() | |
shk=20 | |
for i=1,#plt do | |
cls(plt[i]) | |
flip() flip() | |
end | |
end | |
-->8 | |
-- level | |
function block_type(blk) | |
if (fget(blk,0)) return solid | |
if (fget(blk,1)) return support | |
if (fget(blk,2)) return ice | |
end | |
level=entity:extend({ | |
draw_order=2 | |
}) | |
function level:init() | |
local b,s=self.base,self.size | |
for x=0,s.x-1 do | |
for y=0,s.y-1 do | |
local blk=mget(b.x+x,b.y+y) | |
local cl=entity.spawns[blk] | |
if cl then | |
mset(b.x+x,b.y+y,0) | |
local e=cl({ | |
pos=v(x,y)*8, | |
map_pos=b+v(x,y), | |
tile=blk | |
}) | |
e_add(e) | |
blk=0 | |
end | |
local bt=block_type(blk) | |
if bt then | |
bl=bt({ | |
pos=v(x,y)*8, | |
map_pos=b+v(x,y), | |
tile=blk, | |
typ=bt | |
}) | |
if (bl.needed) e_add(bl) | |
end | |
end | |
end | |
end | |
function level:render() | |
pal(15,3) | |
map(self.base.x,self.base.y, | |
0,0,self.size.x,self.size.y) | |
end | |
solid=static:extend({ | |
tags={"walls"}, | |
hitbox=box(0,0,8,8), | |
draw_order=3 | |
}) | |
function solid:bad() | |
return self.lava and | |
(flr(nt_time/4) | |
+self.pos.x/8 | |
+self.pos.y/8)%7==0 | |
end | |
function solid:render() | |
if self:bad() then | |
self.t+=1 | |
pal(8,11-min(3,self.t/8)) | |
spr(6,self.pos.x,self.pos.y) | |
else | |
if self.t>0 then | |
pal(8,11-min(2,self.t/12)) | |
pal(0,1) | |
spr(6,self.pos.x,self.pos.y) | |
end | |
self.t=max(0,self.t-4) | |
end | |
end | |
function solid:init() | |
self.t=0 | |
local dirs={v(-1,0),v(1,0),v(0,-1),v(0,1)} | |
local allowed={} | |
self.lava=fget(self.tile,3) | |
local needed=self.lava | |
for i=1,4 do | |
local np=self.map_pos+dirs[i] | |
allowed[i]= | |
block_type(mget(np.x,np.y)) | |
~=solid | |
needed=needed or allowed[i] | |
end | |
self.allowed=allowed | |
self.needed=needed | |
end | |
function solid:collide(e) | |
if e:is_a("guy") | |
and self:bad() and self.t>=24 then | |
e:die() | |
end | |
return c_push_out,self.allowed | |
end | |
support=solid:extend({ | |
hitbox=box(0,0,8,1) | |
}) | |
function support:collide(e) | |
if (not e.vel) return | |
local dy,vy=e.pos.y-self.pos.y,e.vel.y | |
if vy>0 and dy<=vy+1 then | |
return c_push_out,{false,false,true,false} | |
end | |
end | |
ice=solid:extend({ice=true}) | |
-->8 | |
-- guy | |
guy=entity:extend({ | |
hitbox=box(-3,-3,3,4), | |
feetbox=box(-3,-3,3,4.1), | |
sprite={ | |
offset=v(-4,-4), | |
idle={64,65,delay=30}, | |
move={66,67,68,67,delay=8}, | |
fly={66}, | |
flips=true | |
}, | |
draw_order=5, | |
tags={"guy"}, | |
collides_with={"walls","guy"}, | |
weight={up=0,0.1} | |
}) | |
guy:spawns_from(64) | |
function guy:render() | |
if self.invt>0 then | |
self.invt-=1 | |
if (self.invt%15>7) for i=1,15 do pal(i,7) end | |
end | |
spr_render(self) | |
end | |
function guy:die(f) | |
if(self.invt>0 and not f or self.nocol) return | |
if g_hp==0 or f then | |
self:death(f) | |
else | |
g_hp-=1 | |
sfx(32) | |
if(g_hp==0) self:death(f) | |
end | |
for g in all(entities_tagged["guy"]) do | |
g.invt=60 | |
end | |
end | |
function guy:death(f) | |
parts(self.pos.x,self.pos.y,5,5,6) | |
self.nocol=true | |
g_lost=true | |
fade() | |
sfx(33) | |
end | |
function guy:collide(o) | |
if o:is_a("guy") and o.zomb and o~=self then | |
self:die(true) | |
end | |
end | |
function guy:init() | |
self:become("up") | |
self.vel=v(0,0) | |
self.pos.x+=4 | |
self.start=self.pos.y+4 | |
self.pos.y=128 | |
self.nocol=true | |
self.s=1 | |
self.t=rnd(128) | |
self.invt=0 | |
end | |
function guy:up() | |
self.s+=0.1 | |
self.pos.y-=self.s | |
if(self.pos.y<=self.start) self.nocol=false self.pos.y=self.start self:become("idle") | |
end | |
function guy:idle() | |
self.onice=(self.supported_by and self.supported_by.ice) | |
self.vel.x*=(self.onice and 0.8 or 0.2) | |
local s=0.7 | |
if(btn(⬅️)) self.vel.x-=s | |
if(btn(➡️)) self.vel.x+=s | |
if(btnp(⬆️) and not g_lost and self.supported_by) self.vel.y-=1.8 parts(self.pos.x,self.pos.y,3,4,7) | |
if abs(self.vel.x)>0.1 or self.vel.y<0 then | |
self:become(self.supported_by and "move" or "fly") | |
elseif self.supported_by then | |
if(self.state~="idle") parts(self.pos.x,self.pos.y,3,4,5) | |
self:become("idle") | |
end | |
if (self.pos.x>=132) g_index+=1 restart_level() | |
if (self.pos.x<=-4) g_index-=1 restart_level() | |
if self.pos.y>=132 then | |
if self.nocol then | |
fade() | |
restart_level() | |
else g_index+=8 restart_level() end | |
end | |
if (g_lost) self.vel.x=0 | |
if (self.pos.y<=-4) g_index-=8 restart_level() | |
end | |
guy.move=guy.idle | |
guy.fly=guy.idle | |
-->8 | |
-- zombie | |
zombie=guy:extend({ | |
sprite={ | |
offset=v(-4,-4), | |
idle={80,81,delay=30}, | |
move={82,83,84,83,delay=8}, | |
fly={82}, | |
flips=true | |
}, | |
zomb=true | |
}) | |
zombie:spawns_from(80) | |
-->8 | |
-- entities | |
door_top=entity:extend({ | |
hitbox=box(0,0,8,8), | |
tags={"walls","door"}, | |
vy=-1 | |
}) | |
function door_top:clamp() | |
if(abs(self.pos.y-self.start)<9) self.pos.y+=self.vy/5 | |
end | |
function door_top:idle() | |
if(abs(self.pos.y-self.start)>0.1) self.pos.y-=self.vy/5 | |
end | |
door_top:spawns_from(78) | |
function door_top:init() | |
self.start=self.pos.y | |
self.sprite={idle={self.tile}} | |
end | |
function door_top:collide() | |
return c_push_out | |
end | |
door_bottom=door_top:extend({ | |
vy=1 | |
}) | |
door_bottom:spawns_from(94) | |
button=entity:extend({ | |
sprite={ | |
idle={79}, | |
down={95} | |
}, | |
hitbox=box(0,6,8,8), | |
collides_with={"guy"} | |
}) | |
button:spawns_from(79) | |
function button:collide(o) | |
-- if(self.state~="idle") return | |
if(self.state~="down") sfx(34) | |
self:become("down") | |
self.t=0 | |
self:use() | |
end | |
function button:use() | |
self:open() | |
end | |
function button:open() | |
for d in all(entities_tagged["door"]) do | |
d:become("clamp") | |
end | |
end | |
function button:down() | |
if self.t>3 and not g_bdown and not self.blue then | |
sfx(35) | |
for d in all(entities_tagged["door"]) do | |
d:become("idle") | |
end | |
self:become("idle") | |
end | |
end | |
blue_button=button:extend({ | |
sprite={ | |
idle={77}, | |
down={93} | |
}, | |
tags={"blue"} | |
}) | |
blue_button:spawns_from(77) | |
function blue_button:use() | |
for b in all(entities_tagged["blue"]) do | |
if (b.state~="down") return | |
end | |
for b in all(entities_tagged["blue"]) do | |
b.blue=true | |
end | |
g_bdown=true | |
self:open() | |
end | |
snk=entity:extend({ | |
sprite={ | |
idle={96}, | |
closed={97} | |
}, | |
hitbox=box(1,1,7,7), | |
tags={"snk","walls"} | |
}) | |
snk:spawns_from(96,97) | |
function snk:collide(o) | |
if(self.state=="idle") return c_push_out,{false,false,true,false},4 | |
end | |
function snk:init() | |
if (self.tile==97) self:become("closed") | |
if (self.tile==96) self.main=true | |
end | |
function snk:closed() self.nocol=true end | |
function snk:idle() | |
self.nocol=false | |
if (self.state~="idle") return | |
if self.main and self.t%20==19 then | |
local m,s=16 | |
for e in all(entities_tagged["snk"]) do | |
if e~=self and e.state~="idle" then | |
local d=(e.pos-self.pos):len() | |
if d<m then | |
m,s=d,e | |
end | |
end | |
end | |
if s~=nil then | |
s:become("idle") | |
s.main=true | |
self.main=false | |
end | |
end | |
if self.t==80 then | |
self:become("closed") | |
end | |
end | |
-->8 | |
-- fx | |
part=entity:extend({ | |
draw_order=10 | |
}) | |
function part:idle() | |
self.r-=0.1 | |
self.vel*=0.9 | |
if self.r<0 then | |
self.done=true | |
end | |
end | |
function part:render() | |
circfill(self.pos.x,self.pos.y,self.r,0) | |
end | |
function part:render_hud() | |
circfill(self.pos.x,self.pos.y,self.r-1,self.c) | |
end | |
function parts(x,y,a,r,c) | |
for i=1,a do | |
e_add(part({ | |
pos=v(x,y), | |
vel=v(rnd(2)-1,rnd()), | |
r=r, | |
c=rnd()>0.7 and c or sget(97,c) | |
})) | |
end | |
end | |
water=entity:extend({ | |
sprite={idle={9,25,41,57,delay=15}} | |
}) | |
water:spawns_from(9) | |
fly=entity:extend({ | |
draw_order=10, | |
sprite={idle={99,100,delay=10}} | |
}) | |
fly:spawns_from(99) | |
function fly:init() | |
self.t=rnd(128) | |
end | |
function fly:idle(t) | |
t/=10 | |
self.pos=self.pos+v( | |
cos(t/32)*sin(t/105), | |
sin(t/17)*sin(t/9) | |
)/2 | |
end | |
-->8 | |
-- states | |
ingame={} | |
function ingame.update() | |
end | |
function ingame.draw() | |
r_render_all("render") | |
r_render_all("render_hud") | |
r_reset() | |
oprint(g_hp.." hp",2,2,8) | |
end | |
menu={} | |
function menu.update() | |
if btnp(❎) then | |
state=ingame | |
sfx(36) | |
fade() | |
end | |
if g_time>=30 and | |
not g_showed then | |
g_showed=true | |
sfx(37) | |
shk=20 | |
end | |
if(not g_showed) return | |
if g_time>=60 and not | |
g_musplayed then | |
g_musplayed=true | |
music(0,1000,1) | |
end | |
end | |
pll={0,0,1,2,4,9,4,2,1,0} | |
function menu.draw() | |
local t=g_time/400 | |
for i=1,700 do | |
local x,y=rnd(128),rnd(128) | |
local c=3 | |
local xx,yy=x/100,y/100 | |
c+=cos(x/80)-sin(y/100) | |
c+=cos(x/40-t)*sin(y/40-t) | |
c+=cos(x/80)*sin(y/80-t) | |
c+=cos(x/200+t/2)*sin(y/80+t) | |
circ(x,y,1,pll[flr(c*3)%#pll]) | |
end | |
if (not g_showed) return | |
r_reset() | |
sspr(10,60,110,64,9,24) | |
oprint("^by @egordorichev",48,86,6) | |
coprint("^press ❎ to start ",110+cos(g_time/200)*3.5,7) | |
end | |
-- splash | |
-- m() | |
__gfx__ | |
00000000c0000000000000000000000cc000000ccccccccc000000000000000000000000cc060ccccccccccc0000000001000000222222222222222222222222 | |
000000000ab3bb33b3bbb3bb3bb3bb300ab3bb30cccccccc088888800904040220404020cc0d0ccccccccccc000000001000000022c222222222222222222222 | |
007007000b33333233333333323333100b333310cccccccc088888800000020000002000cc0d0ccccccc0000000000002100000022222c222222222222cccc22 | |
0007700003332224223322332422331003333310cccccccc08888880cccc000cccc000cccc0d0cccccc065dd0000000031000000222222222222222222cccc22 | |
000770000b32444444224422444423300b333330cccccccc08888880ccccccccccccccccccc060cccc0d511100000000420000002cc2c2222222222222cccc22 | |
007007000b32422444444444444423100b332210cccccccc08888880ccccccccccccccccccc0d0cccc05100000000000510000002cc222222222222222cccc22 | |
0000000003224224444444442444423003224230cccccccc08888880ccccccccccccccccccc0d0cccc0d10cc0000000065000000222222222222222222222222 | |
0000000002444444444444444444442002444420cccccccc00000000ccccccccccccccccccc0d0cccc0000cc000000007d000000222222222222222222222222 | |
44444440094444444444444444444420044444200000000000000000c03030cc0301030cccc0d0cc00000000111111118200000000000000ccccccc22ccccccc | |
444443bb094444444444444444444420094444400000000009040420c03030cc0300030cccc0d0cc77777777111111119400000000000000cccccc2222cccccc | |
44444233044444444444444444444440094444200000000000000440c03030cc030030cccc060cccdddddddd11111111a900000000000000ccccc222222ccccc | |
444444230944444444444444444444400444442000000000cccc0000c010030c010030cccc0d0ccc1111111111111111b300000000000000cccc22222222cccc | |
444444420944444444444444444444200944444000000000cccccccccc0c030cc0c010cccc0d0ccc1111111111111111c100000000000000ccc2222222222ccc | |
444444440444444444444444444444400944442000000000cccccccccccc010ccccc0ccccc0d0ccc1111111111111111d500000000000000cc222222222222cc | |
444444440944444444444444444444200444444000000000ccccccccccccc0ccccccccccccc060cc1111111111111111e200000000000000c22222222222222c | |
444444440444444444444444444444200944442000000000ccccccccccccccccccccccccccc0d0cc1111111111111111f0000000000000002222222222222222 | |
04444444094444444444444444444420094444200000000000000000ccccccccccccccccccc060cc000000000000000000000000000000002222222222222222 | |
bb344444094444444444444444442440094444400000000000000000ccccccccccccccccccc0d0cc00000000000000000000000000000000c22222222222222c | |
33244444044244444444444422444420044444200000000000000000ccccccccccccccccccc0d0cc00000000000000000000000000000000cc222222222222cc | |
32444444094444444444444422444420094444200000000000000000c0ccccccc0cc0cccccc0d0cc00000000000000000000000000000000ccc2222222222ccc | |
244444440444444444444444444444400444444000000000000000000b0c0ccc0b00b0cccc060ccc00000000000000000000000000000000cccc22222222cccc | |
444444440944444444444444444444200944442000000000000000000b00b00c0b0b0c0ccc0d0ccc00000000000000000000000000000000ccccc222222ccccc | |
44444444042424222242244242224210042242100000000000000000c0b0b0b00b0b00b0cc0d0ccc00000000000000000000000000000000cccccc2222cccccc | |
44444444c0000000000000000000000cc000000c0000000000000000c030303003030030cc0d0ccc00000000000000000000000000000000ccccccc22ccccccc | |
00000000c0000000000000000000000cc000000c00000000000000000000000000000000cc0d0ccc000000000000000000000000000000000000000000000000 | |
000000000ab3bb33b3bbb3bb3bb3bb300ab3bb3000000000000000000000000000000000cc0d0ccc000000000000000000000000000000000000000000000000 | |
000000000b33333233333333323333100b33331000000000000000000000000000000000ccc060cc000000000000000000000000000000000000000000000000 | |
000000000333222422332233242233100333331000000000000000000000000000000000ccc0d0cc000000000000000000000000000000000000000000000000 | |
000000000b32444444224422444423300b33333000000000000000000000000000000000ccc0d0cc000000000000000000000000000000000000000000000000 | |
000000000b32444444444444444423100b33221000000000000000000000000000000000ccc0d0cc000000000000000000000000000000000000000000000000 | |
000000000324224222422242242242300322423000000000000000000000000000000000cc060ccc000000000000000000000000000000000000000000000000 | |
00000000c0000000000000000000000cc000000c00000000000000000000000000000000cc0d0ccc000000000000000000000000000000000000000000000000 | |
ccccccccccccccccccccccccccccccccccccccccc0000000000000000000000cdddddd70c0000000000000000000000c076dd10ccccccccc06d55510cccccccc | |
ccc00cccccccccccccc00cccccc00cccccc00ccc077777777777777777777770dddddd7707777777777777777777777006d6d50ccccccccc0d5d5510cccccccc | |
cc0940ccccc00ccccc0940cccc0940cccc09400c077777777777777777777760dddddd77077cccccccccccccccccc770c07d10cccccccccc06d55510cccccccc | |
cc04f0cccc0940ccc004f0cccc04f00ccc04f0f0077777777777777777777770ddddddd707cccccccccccccccccccc70c06d50cccccccccc0d5d5510cccccccc | |
c07e810cc074f10c0f7e810cc07e81f0c07e810c077777777777777777777760dddddddd07cccccccccccccccccccc70cc070ccccccccccc06d55510cccccccc | |
c0e8920cc0e8920cc0e8920c0fe8920cc0f8920c077dddddddddddddddddd770dddddddd07cccccccccccccccccccc70cc060ccccc0000cc0d5d5510cc0000cc | |
c04f54f0c0f15f0cc04554f0c045540cc045540c07dddddddddddddddddddd60dddddddd07cccccccccccccccccccc70cc060cccc07dd10c05111100c07ee80c | |
c0d0010cc0d0010cc0d00010cc0d10ccc0d0001007dddddddddddddddddddd60dddddddd07cccccccccccccccccccc70ccc0ccccc0d1100c00000000c0e8820c | |
cccccccccccccccccccccccccccccccccccccccc06dddddddddddddddddddd5007dddddd07cccccccccccccccccccc7006dddd50cccccccc05111150cccccccc | |
ccc00cccccccccccccc00cccccc00cccccc00ccc06dddddddddddddddddddd5077dddddd07cccccccccccccccccccc7006ddddd0cccccccc0d5d5510cccccccc | |
cc0ab0ccccc00ccccc0ab0cccc0ab0cccc0ab00c0dddddddddddddddddddddd077dddddd07cccccccccccccccccccc700ddddd50cccccccc06d55510cccccccc | |
cc0b30cccc0ab0ccc00b30cccc0b300ccc0b303006dddddddddddddddddddd507ddddddd07cccccccccccccccccccc7006dddd50cccccccc0d5d5510cccccccc | |
c0ae120cc0ab320c03ae120cc0ae1230c0a1520c0dddddddddddddddddddddd0dddddddd07cccccccccccccccccccc700dddddd0cccccccc06d55510cccccccc | |
c0b3850cc0b3810cc0b3850c03b3850cc03b850c06dddddddddddddddddddd50dddddddd07cccccccccccccccccccc7006dddd50cccccccc0d5d5510cccccccc | |
c0e15130c031530cc0e55430c0b5340cc0b3540c06dddddddddddddddddddd50dddddddd07cccccccccccccccccccc700d55d510cc0000cc06d55510cc0000cc | |
c0b0010cc0b0010cc0b00010cc0b10ccc0b0001006ddddddddddddddddddddd0dddddddd07cccccccccccccccccccc70c000000cc0d1100c0d555510c0e8820c | |
cccccccccccccccc00000000ccccccccc0cccc0c06dddddddddddddddddddd50c000000c07cccccccccccccccccccc70c0000000000000000000000c06dddd50 | |
cc0000cccccccccc00000000cc0000cc0700007006dddddddddddddddddddd500777777007cccccccccccccccccccc7007777777777777777777777006ddddd0 | |
c077770cccc00ccc00000000c076560cc076560c0dddddddddddddddddddddd00777777007cccccccccccccccccccc700777777777777777777777600ddddd50 | |
c07cc70ccc0670cc0000000007051070cc0510cc06dddddddddddddddddddd500777777007cccccccccccccccccccc7007777777777777777777777006dddd50 | |
c07cc70ccc0760cc00000000c0c00c0cccc00ccc0dddddddddddddddddddddd00777777007cccccccccccccccccccc700777777777777777777777600ddddd50 | |
c077770cccc00ccc00000000cccccccccccccccc06dddddddddddddddddddd50077dd770077cccccccccccccccccc770077dddddddddddddddddd77006ddddd0 | |
cc0000cccccccccc00000000cccccccccccccccc0d55d5d5d55d5d5555d5d51007dddd7007777777777777777777777007dddddddddddddddddddd6006dddd50 | |
cccccccccccccccc00000000ccccccccccccccccc0000000000000000000000c07dddd70c0000000000000000000000cc0000000000000000000000c06dddd50 | |
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
cccccccccccccccccccccc1111cccccccccccccccccccc11cccccccccccccccccccccccccccccccccccccccccccccccccccccc1111111ccccccccccccccccccc | |
cccccccccccc00cccc0000011111ccccccccccccccc0000011ccccccc00011ccccccccccccccccccccccccccccccccccccc00000001111cccccccccccccccccc | |
ccccccccccc077000077777001111ccccccccccccc077666011ccccc0766011ccccccccccccccccccccccccccccccccccc0dddddd50111cccccccccccccccccc | |
cccccccccc07777777777777701111ccccccccccc07777666011ccc077766011ccccccccccccccccccccccccccccccccc0dddddd5550111ccccccccccccccccc | |
cccccccccc077777777777777601111cccccccccc0777776660111c0777766011ccccccccccccccccccccccccccccccc0dddddddd555011ccccccccccccccccc | |
cccccccccc077777776777776660111ccccccccccc0777777660111c0777766011cccccccccccccccccccccccccccccc0dddddddd555011ccccccccccccccccc | |
cccccccccc077777766007777666011cccccccccccc000077766011cc077776011ccccccccccccccccccccccccccccccc0dddddd5550111ccccccccccccccccc | |
cccccccccc077777760110777766011cccccccccccccccc077760111c0777760111ccccccccccccccc11cccccccccccccc00ddd55001111cccc11ccccccccccc | |
ccccccccccc0777776011077777601ccccccccc11cccc00077760011c0777760001cccccccccc11cc1111cccccccccccccc0ddd55011111c000111cccccccccc | |
cccccccccccc007776011077776601cccccccc1111cc077777776601c07776606601cccccc000011000011ccccccccccccc0ddd5501111c0dd50111ccccccccc | |
ccccccccccccc07776010077776601c0001ccc00011c0777777776601077777666601cccc07660106666011cccccccccccc0ddd55011cc0ddd550111cccccccc | |
ccccccccccccc0777600777776601c076601c0776011c0777766666010777777666601cc0776600776666011ccccccccccc0ddd55011c0ddd5555011cccccccc | |
ccccccccccccc077770067770001c0776601107666011c077666660110777777776601107776667777766601ccccccccccc0ddd550110ddddd550111cccccccc | |
ccccccccccccc077777677770111c0776601107766011c077660001110777777777660007777677777776601ccccccccccc0ddd55010ddddd0001111cccccccc | |
ccccccccccccc077777777770011c0776601107766011c07766011ccc0777770077760077777777777776601ccccccccccc0ddd55010dddd0001111ccccccccc | |
ccccccccccccc07777777777601110776601107766011c077601111cc0777701077760077777077700776601ccccccccccc0ddd550110dddd55011cccccccccc | |
ccccccccccccc07777000776601110777601107766011c0777011111c0777701077760077777007700776601ccccccccccc0ddd5501110dddd55011ccccccccc | |
ccccccccccc0007776010777601110777601077766011c0777600011107777010776601077770100c0776601ccccccccccc0ddd550111100dddd5011cccccccc | |
cccccccccc07707766010777760000777760777766011c077666660110777701077660107777011cc0776601ccccccccccc0ddd55011001100dd5501cccccccc | |
ccccccccc077777766010777766600777777777766011c077766666010777701077660107777011cc0776601ccccccccccc0ddd55010dd0000dd5501cccccccc | |
ccccccccc077777766010777776660777777777766011c0777777760c0777701077660107777011cc0776601cccccccccc0ddddd5500dddddddd5501cccccccc | |
cccccccccc07777766007777777660007777777766011cc07777760cc0777701077660c07777011cc077660cccccccccc0ddddddd550dddddddd5011cccccccc | |
ccccccccccc077766600777777770cc07777707766011ccc077770cccc07770107760ccc0777011cc07760ccccccccccc0dddddd55500ddddd550111cccccccc | |
ccccccccccc07766601c07777700cccc0000007766011cccc0000cccccc000ccc000ccccc00011cccc000ccccccccccccc0ddddd550110000000111ccccccccc | |
cccccccccccc06600cccc07770cccccc0011007766011cccccccccccccccccccccccccccccccccccccccccccccccccccccc0000000c11ccccccccccccccccccc | |
ccccccccccccc00ccccccc000cccccc07700107766011ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
cccccccccccccccccccccccccccccc077777007766011ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
cccccccccccccccccccccccccccccc07777777766601ccccccccccccc111cccccccccccccccccccccccccccccccccccccccc11111111cccccccccccccccccccc | |
ccccccccccccccccccccccccccccccc07777777660ccccc000000000000111cccccccccc111ccccccc1111ccccccccc00000000000011ccccccccccccccccccc | |
ccccccccccccccccccccccccccc111cc0776766660cccc0777aa99988890111ccccccc000111ccc00000111ccccccc07aa888888888011cccccccccccccccccc | |
cccccccccccccccccc0000000000111cc00666660cccc09777aaa98888890111cccc00998011100999990111ccccc0777aa888822899011ccccccccccccccccc | |
ccccccccccccccccc022888997770111ccc00000cccc09a777aaa88228889011ccc0799888010999888990111ccc099777a888224229701ccccccccccccccccc | |
ccccccccccccccccc022288899777011ccccccccccc099aa7aaa982222289901cc077788888009942288990111c088887a98882444277701cccccccccccccccc | |
ccccccccccccccccc022428889977011ccccccccccc0999aa999982222228901cc077788888009444228890111c0888888998882422277011ccccccccccccccc | |
ccccccccccccccccc024442888970111ccccccccccc099999990000222222801cc0777822880102422288aa011c0888888800008222889011ccccccccccccccc | |
cccccccccccccccccc02444888901111ccccccccccc0889999011cc022222801cc097822228011022288aaa011c084428801ccc0888888011ccccccccccccccc | |
ccccccccccccccccccc044428801111cccccccccccc08888990111c088228801ccc09822228011c02888aaa01cc044442801ccc0888888011ccccccccccccccc | |
ccccccccccccccccccc02472280111ccccccccccccc08822890111c088822801ccc0982242011cc02288aaa01cc084422801ccc0888822011ccccccccccccccc | |
ccccccccccccccccccc02777280111ccccccccccccc08222280111c088222201ccc0882444011cc02288aa01ccc082222801ccc0888222011ccccccccccccccc | |
ccccccccccccccccccc02272280111ccccccccccccc08222280111c088222201ccc0824442011cc02228aa01ccc099228801ccc0882222011ccccccccccccccc | |
ccccccccccccccccccc02222280111ccccccccccccc08222280111c099222201ccc0822428011cc022288a01ccc099988801ccc0822222011ccccccccccccccc | |
ccccccccccccccccccc02222220111ccccccccccccc022222801111099222201ccc0822228011cc022228801ccc099988801ccc0222228011ccccccccccccccc | |
ccccccccccccccccccc02222220111ccccccccccccc022228801111092242201ccc0822228011cc022228801ccc0998888011cc0242288011ccccccccccccccc | |
ccccccccccccccccccc08222220111ccccccccccccc022222880110992444801ccc0822228011cc082288801ccc0988888801c02444288011ccccccccccccccc | |
ccccccccccccccccccc08822220111ccccccccccccc022242288009992244401ccc0822228011cc088822801ccc0988888880092444888011ccccccccccccccc | |
ccccccccccccccccccc08882220111ccccccccccccc082444288888998244401ccc0882288011cc088222201ccc0842888889992242888011ccccccccccccccc | |
ccccccccccccccccccc09888880111ccccccccccccc088444288888998224201ccc08888aa011cc088222201ccc0444288889982222888011ccccccccccccccc | |
ccccccccccccccccccc0a788880111ccccccccccccc082242288888992222201ccc0888aaa011cc098422201ccc0244488889882222288011ccccccccccccccc | |
ccccccccccccccccccc07778880111ccccccccccccc022222888888aa2222801ccc088aaaa011cc094444201ccc0244448888888222288011ccccccccccccccc | |
ccccccccccccccccccc0777a880111cccccc11ccccc02222288800aaaa228801ccc09a7a7a011cc099444401ccc0224422880022222288011ccccccccccccccc | |
ccccccccccccccccccc07777a80111ccccc1111cccc08222228800aaaaa88801ccc0977777011cc099244201ccc0822222880022227889011ccccccccccccccc | |
ccccccccccccccccccc0777aa80111ccc0000111ccc0882222801c0aaaa999011cc0997778011cc099222201ccc098822880cc02277799011ccccccccccccccc | |
ccccccccccccccccccc087aa980111cc0aaa90111cc0888228011cc0aaa999011cc0998788011c0999222011ccc0988888011cc0277798011ccccccccccccccc | |
ccccccccccccccccccc0888899011110a77aa9011cc08888880111c0aa7a99011cc0988888011c0998222011ccc09aa888011cc0997988011ccccccccccccccc | |
ccccccccccccccccccc088888901111077777a011cc08888890111c0a777a90111c09888880110888222011cccc0aaaa88011cc09998880111cccccccccccccc | |
ccccccccccccccccccc0288888900100877777011cc09888990111c0a777790111c0988882010888822011ccccc0aa7a7901ccc09988880111cccccccccccccc | |
cccccccccccccccccc0222288889908889977a011c099979990111c0aa77799011c0a7a82220442222011ccccc0aa7777701ccc09888888011cccccccccccccc | |
ccccccccccccccccc022222228888422889aaa01cc099777990111c0aaa7aa901110777a222444422011cccccc0aaa777a01ccc0988888801ccccccccccccccc | |
cccccccccccccccc0822442222224442288aa0ccc0aa77779a0111c09aaaaaa90110777782224422011cccccc0aaa9a7aa01ccc0988888880ccccccccccccccc | |
cccccccccccccccc08844442222224442888a0ccc0aaa7777a0111c099aaaaa90110a777aa22222011ccccccc09999aaaa0cccc0988888880ccccccccccccccc | |
ccccccccccccccccc08844442222224288800cccc0aaaaa7a0c11ccc099aaa99011c0a7aaaa9800cccccccccc099999aa0cccccc088888880ccccccccccccccc | |
cccccccccccccccccc00000000000000000ccccccc0000000cccccccc000000011ccc00000000ccccccccccccc0000000cccccccc0000000cccccccccccccccc | |
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | |
__gff__ | |
000909090901010202000000000000000101010101000200000000000000000001010101010000000000000000000000000909090900000000000000000000000000000000090909010c0c0c00000000000000000001010101040404010000000000000000010101090404040909090100000000000000000000000000000000 | |
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
__map__ | |
1212121212121212121212121212121200090000000000630011121212121212121212121222221212222222222222121212121212121212121212121212121212121212121212121212121212222212121212121212121212121212121212121222222222222212122222222222221212121212121212121212121212121212 | |
121212121212121212121222121212120009006300000000001112121212121212121212231e0e21230e2e0e001700211212121212121212121212121212121212121212121212122212121223181e211222222222222222221212121212121213000017000e1e11130018000017002122221212121212121212121212121212 | |
12121212121212121222230e212212120009000000000000011212121212121212121223180e0e00180e1e0e00000000121212121212122222222212121212121212121212121223001112231e0e0e0e131e0e0e1f17000000112222222222222340010232330011130005050505004e0e0e2122121212121212121212121212 | |
12121222222222222363000e1f0021121a1a1a1a1a1a01022022222222222222121213001e0e0e63270e0e1e27280000121212121212231718000e2112121212121212121212130000212300000e2f00130e4f010300002700141f180000004e0007111300002711130005050000005e400d180e212222221212222222221212 | |
12122300170e2f0018001e0e0e0e17111b1b1b1b1b011222231e0e1f4e0017001212131f0e0e1f0102020202020202021212121222231e1f002e0e0021221212122222221212230000634e0027010202100202201002020300140e010300005e00001122330031121300050505160501080e1f0e0e0e1700212300171e0e1112 | |
1213001e2f0e0e00001e0e0d0e2f0e111b1b1b1b1b111318000f0e0e5e2800001212130e0e0f011222222212121212121212122317002e0e1f0e1e00181711121317001e21230e0028005e0001121212122222222222222307140d111307310202322318001e1811130505006300001102032e0e0e0e0063004e002e0e271112 | |
1213630000001f0e0e0e0e2f000000111b1b1b1b0112230000042700010202021212130707072123001700212222221212121300000e0e002e0e1f0000002112130e0d0e000e0f0e0102020220222212130063001800280000140e111300001113630000040e0e1113000016051600111213004f272f4d00285e1e0f00011212 | |
1213004000001e0d0e2f0e00005000111b1b0102201300000711020220121212121213002e00000000000d1f171800111212134f01030063000e0d1f001e0d1113002e04002e0e0e1112222223180011130701323232323232230e11120307111328041e11020220130005000505051112100202020202020202030e0e111212 | |
1213070708000e0f0e2f006307070711020220121223630000111212122222121212100202020308001e0103080000111222100220100308002e0e0e0e0e0e11130800140863000721230e0e0e006311130014001e0e0f0e0e0e0e1112130011123223001112121213050516050505111212121212121212121212032f111212 | |
121300000000000e0e0e0e0000000011121212222300000007111212130e0a1112121212121210020202201363000011130e2122222223000000000f0e1e501113004d140000000017000000044d00111307140731323232031e2f21222307111300002711221212130000000505051112222222222212121222222300211212 | |
12131e0e1f0e1e0e2f2f0e0e0e0e0e212222231700004f00001112121203091112222222222222222222222308000711230f1f001817000707080e0e2f6307212232322307080000000007072132321213001400001800001463270017000011131e3132230021121300050505000511131f0e0d180011122300001800182112 | |
12130e0f0e000e0e2f00000e0e2f000000000d0e1f0004070721222212130911134000000017001e180f0e1f0000501100400e0e1f0027001e1e2f2e0e00004e0018180000000000270000000000001113072132323203071102323232020220130e0e00186317111300000000000011130e0e1f006321231700000000001e21 | |
12130000000000000000000000000000270040000e1f140000502e0e111309111308000000001e0e0e0e0e0d0e000711001600282e010202020300280e00005e00000040001e01020202030000500011130000170000140011130e1f001112121232323232330011130505050505001113500e2f28004e0000000000282e0f0e | |
12130707070707070707070707070708030707080807240708070707212309111300000027002e2e1f0e280e0e1f001102020202022012121210020202020202020203082e0e11121212132800070112223232323307140721231e04072122121300002800000011135000000000001113080e0103005e00004d0001031e0e2e | |
12131a1a1a1a1a1a1a1a1a1a1a1a1a1a131a1a1a1a1a1a1a1a1a1a1a1a1a1a111002020202020202020202020202022012121212121212121212121212121212121210020202201212121002020220120040002800001400171800140000501113004f0400010220131627052805051110020220100202020202022010020202 | |
12131b1b1b1b1b1b1b1b1b1b1b1b1b1b131b1b1b1b1b1b1b1b1b1b1b1b1b1b11121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212030701020202120202020212020307111002021202201212100202020202022012121212121212121212121212121212 | |
5656565656565656565656565656565656565656565656565656566666666666666666666666665656565656566666661212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212 | |
565656565656565656565656565656565666666666666666666667000f0e1f4e000000004c00005556666666670e4e001200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
565656666656565656565656565656566700000000004c00000000004547005e00400000000000555700000e0d0e5e001200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
5656571f0e655656566666666666666600616161616161616161616155484646466d6d6d6d6e005557076c6d6d6d6d581200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
6666670e0e0e6566670e0f0e4e004c004061630000001e0e1f0000005556565657004c000000005557001e0e4c0e2f551200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
4c001e0d0f1f0e2e0e2e0e005e6300004761001f0e2f0e0e0e0e1f005556565657000000006c6d58486d6d6d6d6e08551200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
0040000e0e0e0e0045464646464646465760000e2e0e0d0e0e0e2f0e55565656570000000063005557000063000e0e551200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
4708002e2e0000455866666666565656484646464646464646464646585656565700000045470e5557076c6d6d6d6d581200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
484700000e1f076567004e2e2f55565666666666666666666666666656565656486d6d6d66670e555700000e1f0000551200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
56576300500e002e1f005e2f005556560000004c0000001e1f000000555656565700000e0f0e0e55566d6d6d6d6e08551200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
56570007080e00494a4a45474d55565600506161616161616161616155565656570000000e0d00555700001e0e0000551200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
56574d1e0e0e07696a6a654846585656464761001e0000000045470055565656576345464646465857076c6d6d6d6d581200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
5648470e2e2e00000e0e4c5556565656565761000e2e0e0e0e5557005556565657006566666666566700001e004c1f551200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
565648470e00494a4b4700656666666656576000000e0e0f0e55574f55565656570000004c00006f0007082e0e0f0e551200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
565656484646595a5b574f595a5a5a5a564846464646464646584846585656565700000000164f6f500000002e0e2f551200000000000000000000000000001212000000000000000000000000000012120000000000000000000000000000121200000000000000000000000000001212000000000000000000000000000012 | |
565656565656595a5b574a595a5a5a5a56565656565656565656565656565656484646464646465646464646464646581212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212 | |
__sfx__ | |
01200000113241132211322113250f3240f3220f3220f325163241632216322163251f3241f3221f3221f3250c3240c3220c3220c3250a3240a3220a3220a3251632416322163221632503324033220332203325 | |
012000200c0730c575246130c5750c0730c57524613246130c0730a5750a5750f073246130a5750f0730a5750f0731157524613115750c0731157524613115750c07307575246130f07307575075750c07324613 | |
00200020163351b3351d3351d3351b3351633513335163351b335183351b335163350f3351b33516335183351d3351f3352233527335223351d3351b33518335163351d3351333511335133351b3351833513335 | |
00200000113221132505322053250f3220f325033220332516322163250a3220a3251f3221f32518322183250c3220c32505322053250732207325033220332513322133250c3220c32503322033250132201325 | |
01100000113241130405324053040f3240f304033240330416324163040a3240a3041f3241f30418324183040c3240c30405324053040732407304033240330413324133040c3240c30403324033040132401304 | |
0010002018023185253061318525180231852530613306131802316525165251b02330613165251b023165251b0231d525306131d515180231d525306131d5251802313525306131b02313525135251802330613 | |
012000001d33522332243322433224335223321d3321b3321833516332163321b3321f335223321d3321b33218335163321333211332113351133213332163321833518332183321833216335183321d33222332 | |
011000000c33300003000030c3330c3330c333000030c3330c30000000000000c3000c3000c30000000000000c33300003000030c3330c3330c333000000c3330000000000000000000000000000000000000000 | |
01100000133301b3301d3301d3301b330163300f3302233003325033250332503325033250332503325033250a33013330163301b3301d33013330113300f3300a330163301833016330133300f3300733005330 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
000600002b250222401d2201d2001d200002000020000200002000020000200002000020000200002000020000200002000020000200002000020000200002000020000200002000020000200002000020000200 | |
001000002b350223501b35016350113500c3500335000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300 | |
010500000066500005006450000500615000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005 | |
010d00000015400104001040010400104001040010400104001040010400104001040010400104001040010400104001040010400104001040010400104001040010400104001040010400104001040010400104 | |
001200001d355223551b3551635513355163551b3550f30511305183051b3051b3051d30500305003050030500305003050030500305003050030500305003050030500305003050030500305003050030500305 | |
011000000037304323043030030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300 | |
__music__ | |
01 40014344 | |
01 00014344 | |
00 03014344 | |
00 04054344 | |
00 02054344 | |
00 06054344 | |
02 07084344 |
This file contains 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 characters
pico-8 cartridge // http://www.pico-8.com | |
version 16 | |
__lua__ | |
-- rythm is lava | |
-- by @egordorichev | |
-- todo | |
-- fx | |
-- trailer | |
menuitem(1,"reset progress",function() | |
for i=0,63 do | |
dset(i,0) | |
end | |
_init() | |
end) | |
cartdata("ril") | |
poke(0x5f2d,1) | |
pat={ | |
0b1111111111111111.1, | |
0b0111111111111111.1, | |
0b0111111111011111.1, | |
0b0101111111011111.1, | |
0b0101111101011111.1, | |
0b0101101101011111.1, | |
0b0101101101011110.1, | |
0b0101101001011110.1, | |
0b0101101001011010.1, | |
0b0001101001011010.1, | |
0b0001101001001010.1, | |
0b0000101001001010.1, | |
0b0000101000001010.1, | |
0b0000001000001010.1, | |
0b0000001000001000.1 | |
} | |
omusic=music | |
osfx=sfx | |
function music(...) | |
if (not g_mmusic) omusic(...) | |
end | |
function sfx(...) | |
if (not g_msfx) osfx(...) | |
end | |
function chk(i) | |
return dget(i) or 0 | |
end | |
function _init() | |
cls() | |
g_dith=0 | |
g_money=dget(0) | |
g_sec=chk(34) | |
g_min=chk(35) | |
g_hour=chk(36) | |
g_pr=chk(37) | |
g_deaths=chk(38) | |
g_mmusic=(dget(39)==1) | |
g_msfx=(dget(40)==1) | |
g_time,state,g_index,shk= | |
0,menu,chk(42),0 | |
nt_time=0 | |
--music(8) | |
reload(0x0800,0x0800,0x1800,"bkp.p8") | |
g_lost=true | |
--restart_level() | |
end | |
function _update60() | |
g_lindex=g_index | |
local nt=stat(20) | |
if(nt~=lastnt) nt_time+=1 | |
lastnt=nt | |
state.update() | |
g_time+=1 | |
end | |
-- brb | |
function _draw() | |
if shk>0 then | |
shk-=1 | |
local a=shk/2 | |
camera(rnd(shk)-a,rnd(shk)-a) | |
end | |
-- cls(flr(nt_time/4)%2==0 and 1 or 0) | |
state.draw() | |
end | |
function restart_level() | |
dset(42,g_index) | |
g_dith=16 | |
g_red=false | |
g_index=mid(0,g_index,31) | |
if not g_lost then | |
dset(38,g_deaths) | |
if dget(1+g_index)<2 then | |
g_pr+=1 | |
dset(1+g_index,dget(1+g_index)+2) | |
dset(37,g_pr) | |
end | |
else | |
g_deaths+=1 | |
end | |
if entities~=nil then | |
for i=1,16 do | |
fillp(pat[i]) | |
rectfill(0,0,127,127,0) | |
flip() | |
end | |
end | |
fillp() | |
reload(0x2000,0x2000,0x1000) | |
reload(0x1000,0x1000,0x1000) | |
entity_reset() | |
collision_reset() | |
nt_time=0 | |
if g_selt==0 then | |
g_hp=9 | |
elseif g_selt==1 then | |
g_hp=6 | |
elseif g_selt==2 then | |
g_hp=4 | |
elseif g_selt==3 then | |
g_hp=2 | |
end | |
g_bdown=false | |
lastnt=0 | |
g_lost=false | |
e_add(level({ | |
base=v(g_index%8*16,flr(g_index/8)*16), | |
size=v(16,16) | |
})) | |
local i=chk(41) | |
if i~=0 then | |
for p in all(pts) do | |
if p.id==i then | |
g_pet=e_add(p()) | |
break | |
end | |
end | |
end | |
end | |
-->8 | |
-- oop | |
function deep_copy(obj) | |
if (type(obj)~="table") return obj | |
local cpy={} | |
setmetatable(cpy,getmetatable(obj)) | |
for k,v in pairs(obj) do | |
cpy[k]=deep_copy(v) | |
end | |
return cpy | |
end | |
function index_add(idx,prop,elem) | |
if (not idx[prop]) idx[prop]={} | |
add(idx[prop],elem) | |
end | |
function event(e,evt,p1,p2) | |
local fn=e[evt] | |
if fn then | |
return fn(e,p1,p2) | |
end | |
end | |
function state_dependent(e,prop) | |
local p=e[prop] | |
if (not p) return nil | |
if type(p)=="table" and p[e.state] then | |
p=p[e.state] | |
end | |
if type(p)=="table" and p[1] then | |
p=p[1] | |
end | |
return p | |
end | |
function round(x) | |
return flr(x+0.5) | |
end | |
------------------------------- | |
-- objects | |
------------------------------- | |
object={} | |
function object:extend(kob) | |
-- printh(type(kob)) | |
if (kob and type(kob)=="string") kob=parse(kob) | |
kob=kob or {} | |
kob.extends=self | |
return setmetatable(kob,{ | |
__index=self, | |
__call=function(self,ob) | |
ob=setmetatable(ob or {},{__index=kob}) | |
local ko,init_fn=kob | |
while ko do | |
if ko.init and ko.init~=init_fn then | |
init_fn=ko.init | |
init_fn(ob) | |
end | |
ko=ko.extends | |
end | |
return ob | |
end | |
}) | |
end | |
------------------------------- | |
-- vectors | |
------------------------------- | |
vector={} | |
vector.__index=vector | |
function vector:__add(b) | |
return v(self.x+b.x,self.y+b.y) | |
end | |
function vector:__sub(b) | |
return v(self.x-b.x,self.y-b.y) | |
end | |
function vector:__mul(m) | |
return v(self.x*m,self.y*m) | |
end | |
function vector:__div(d) | |
return v(self.x/d,self.y/d) | |
end | |
function vector:__unm() | |
return v(-self.x,-self.y) | |
end | |
function vector:dot(v2) | |
return self.x*v2.x+self.y*v2.y | |
end | |
function vector:norm() | |
return self/sqrt(#self) | |
end | |
function vector:len() | |
return sqrt(#self) | |
end | |
function vector:__len() | |
return self.x^2+self.y^2 | |
end | |
function vector:str() | |
return self.x..","..self.y | |
end | |
function v(x,y) | |
return setmetatable({ | |
x=x,y=y | |
},vector) | |
end | |
------------------------------- | |
-- collision boxes | |
------------------------------- | |
cbox=object:extend() | |
function cbox:translate(v) | |
return cbox({ | |
xl=self.xl+v.x, | |
yt=self.yt+v.y, | |
xr=self.xr+v.x, | |
yb=self.yb+v.y | |
}) | |
end | |
function cbox:overlaps(b) | |
return | |
self.xr>b.xl and | |
b.xr>self.xl and | |
self.yb>b.yt and | |
b.yb>self.yt | |
end | |
function cbox:sepv(b,allowed) | |
local candidates={ | |
v(b.xl-self.xr,0), | |
v(b.xr-self.xl,0), | |
v(0,b.yt-self.yb), | |
v(0,b.yb-self.yt) | |
} | |
if type(allowed)~="table" then | |
allowed={true,true,true,true} | |
end | |
local ml,mv=32767 | |
for d,v in pairs(candidates) do | |
if allowed[d] and #v<ml then | |
ml,mv=#v,v | |
end | |
end | |
return mv | |
end | |
function cbox:str() | |
return self.xl..","..self.yt..":"..self.xr..","..self.yb | |
end | |
function box(xl,yt,xr,yb) | |
return cbox({ | |
xl=min(xl,xr),xr=max(xl,xr), | |
yt=min(yt,yb),yb=max(yt,yb) | |
}) | |
end | |
function vbox(v1,v2) | |
return box(v1.x,v1.y,v2.x,v2.y) | |
end | |
------------------------------- | |
-- entities | |
------------------------------- | |
entity=object:extend({ | |
state="idle",t=0, | |
last_state="idle", | |
dynamic=true, | |
spawns={} | |
}) | |
function entity:init() | |
if self.sprite then | |
self.sprite=deep_copy(self.sprite) | |
if not self.render then | |
self.render=spr_render | |
end | |
end | |
end | |
function entity:become(state) | |
if state~=self.state then | |
self.last_state=self.state | |
self.state,self.t=state,0 | |
end | |
end | |
function entity:is_a(tag) | |
if (not self.tags) return false | |
for i=1,#self.tags do | |
if (self.tags[i]==tag) return true | |
end | |
return false | |
end | |
function entity:spawns_from(...) | |
for tile in all({...}) do | |
entity.spawns[tile]=self | |
end | |
end | |
static=entity:extend({ | |
dynamic=false | |
}) | |
function spr_render(e) | |
local s,p=e.sprite,e.pos | |
function s_get(prop,dflt) | |
local st=s[e.state] | |
if (st~=nil and st[prop]~=nil) return st[prop] | |
if (s[prop]~=nil) return s[prop] | |
return dflt | |
end | |
local sp=p+s_get("offset",v(0,0)) | |
local w,h= | |
s.width or 1,s.height or 1 | |
local flip_x=false | |
local frames=s[e.state] or s.idle | |
local delay=frames.delay or 1 | |
if s.turns and type(frames[1])~="number" then | |
if e.facing=="up" then | |
frames=frames.u | |
elseif e.facing=="down" then | |
frames=frames.d | |
else | |
frames=frames.r | |
end | |
flip_x=(e.facing=="left") | |
end | |
if s_get("flips") then | |
flip_x=e.flipped | |
end | |
if (type(frames)~="table") frames={frames} | |
local frm_index=flr(e.t/delay) % #frames + 1 | |
local frm=frames[frm_index] | |
local f=e.bold and ospr or spr | |
f(e.exr_sprite or frm, | |
(sp.x),(sp.y),w,h,flip_x) | |
return frm_index | |
end | |
function ospr(s,x,y,...) | |
for i=0,15 do pal(i,0) end | |
spr(s,x-1,y,...) | |
spr(s,x+1,y,...) | |
spr(s,x,y-1,...) | |
spr(s,x,y+1,...) | |
r_reset() | |
spr(s,x,y,...) | |
end | |
------------------------------- | |
-- entity registry | |
------------------------------- | |
function entity_reset() | |
entities,entities_with, | |
entities_tagged={},{},{} | |
end | |
function e_add(e) | |
add(entities,e) | |
for p in all(indexed_properties) do | |
if (e[p]) index_add(entities_with,p,e) | |
end | |
if e.tags then | |
for t in all(e.tags) do | |
index_add(entities_tagged,t,e) | |
end | |
c_update_bucket(e) | |
end | |
return e | |
end | |
function e_remove(e) | |
del(entities,e) | |
for p in all(indexed_properties) do | |
if (e[p]) del(entities_with[p],e) | |
end | |
if e.tags then | |
for t in all(e.tags) do | |
del(entities_tagged[t],e) | |
if e.bkt then | |
del(c_bucket(t,e.bkt.x,e.bkt.y),e) | |
end | |
end | |
end | |
e.bkt=nil | |
end | |
indexed_properties={ | |
"dynamic", | |
"render","render_hud", | |
"vel", | |
"collides_with", | |
"feetbox" | |
} | |
-- systems | |
------------------------------- | |
-- update system | |
------------------------------- | |
function e_update_all() | |
for ent in all(entities_with.dynamic) do | |
local state=ent.state | |
if ent[state] then | |
ent[state](ent,ent.t) | |
end | |
if ent.done then | |
e_remove(ent) | |
elseif state~=ent.state then | |
ent.t=0 | |
else | |
ent.t+=1 | |
end | |
end | |
end | |
function schedule(fn) | |
scheduled=fn | |
end | |
------------------------------- | |
-- render system | |
------------------------------- | |
function r_render_all(prop) | |
local drawables={} | |
for ent in all(entities_with[prop]) do | |
local order=ent.draw_order or 0 | |
if not drawables[order] then | |
drawables[order]={} | |
end | |
add(drawables[order],ent) | |
end | |
for o=0,15 do | |
for ent in all(drawables[o]) do | |
r_reset(prop) | |
if not ent.done then ent[prop](ent,ent.pos) end | |
end | |
end | |
end | |
function r_reset(prop) | |
pal() | |
palt(0,false) | |
palt(12,true) | |
if g_red then | |
for i=1,15 do | |
pal(i,8) | |
end | |
end | |
if (prop~="render_hud" and g_cam) g_cam:set() | |
end | |
------------------------------- | |
-- movement system | |
------------------------------- | |
function do_movement() | |
for ent in all(entities_with.vel) do | |
local ev=ent.vel | |
ent.pos+=ev | |
if ev.x~=0 then | |
ent.flipped=ev.x<0 | |
end | |
if ev.x~=0 and abs(ev.x)>abs(ev.y) then | |
ent.facing= | |
ev.x>0 and "right" or "left" | |
elseif ev.y~=0 then | |
ent.facing= | |
ev.y>0 and "down" or "up" | |
end | |
if (ent.weight) then | |
local w=state_dependent(ent,"weight") | |
ent.vel+=v(0,w) | |
end | |
end | |
end | |
------------------------------- | |
-- collision | |
------------------------------- | |
function c_bkt_coords(e) | |
local p=e.pos | |
return flr(shr(p.x,4)),flr(shr(p.y,4)) | |
end | |
function c_bucket(t,x,y) | |
local key=t..":"..x..","..y | |
if not c_buckets[key] then | |
c_buckets[key]={} | |
end | |
return c_buckets[key] | |
end | |
function c_update_buckets() | |
for e in all(entities_with.dynamic) do | |
c_update_bucket(e) | |
end | |
end | |
function c_update_bucket(e) | |
if (not e.pos or not e.tags) return | |
local bx,by=c_bkt_coords(e) | |
if not e.bkt or e.bkt.x~=bx or e.bkt.y~=by then | |
if e.bkt then | |
for t in all(e.tags) do | |
local old=c_bucket(t,e.bkt.x,e.bkt.y) | |
del(old,e) | |
end | |
end | |
e.bkt=v(bx,by) | |
for t in all(e.tags) do | |
add(c_bucket(t,bx,by),e) | |
end | |
end | |
end | |
function c_potentials(e,tag) | |
local cx,cy=c_bkt_coords(e) | |
local bx,by=cx-2,cy-1 | |
local bkt,nbkt,bi={},0,1 | |
return function() | |
while bi>nbkt do | |
bx+=1 | |
if (bx>cx+1) bx,by=cx-1,by+1 | |
if (by>cy+1) return nil | |
bkt=c_bucket(tag,bx,by) | |
nbkt,bi=#bkt,1 | |
end | |
local e=bkt[bi] | |
bi+=1 | |
return e | |
end | |
end | |
function collision_reset() | |
c_buckets={} | |
end | |
function do_collisions() | |
c_update_buckets() | |
for e in all(entities_with.collides_with) do | |
for tag in all(e.collides_with) do | |
if entities_tagged[tag] then | |
local nothers= | |
#entities_tagged[tag] | |
if nothers>4 then | |
for o in c_potentials(e,tag) do | |
if o~=e and not e.nocol and not o.nocol then | |
local ec,oc= | |
c_collider(e),c_collider(o) | |
if ec and oc then | |
c_one_collision(ec,oc,e,o) | |
end | |
end | |
end | |
else | |
for oi=1,nothers do | |
local o=entities_tagged[tag][oi] | |
local dx,dy= | |
abs(e.pos.x-o.pos.x), | |
abs(e.pos.y-o.pos.y) | |
if dx<=20 and dy<=20 then | |
local ec,oc= | |
c_collider(e),c_collider(o) | |
if ec and oc then | |
c_one_collision(ec,oc,e,o) | |
end | |
end | |
end | |
end | |
end | |
end | |
end | |
end | |
function c_check(box,tags) | |
local fake_e={pos=v(box.xl,box.yt)} | |
for tag in all(tags) do | |
for o in c_potentials(fake_e,tag) do | |
local oc=c_collider(o) | |
if oc and not o.nocol and box:overlaps(oc.b) then | |
return oc.e | |
end | |
end | |
end | |
return nil | |
end | |
function c_one_collision(ec,oc,e,o) | |
if ec.b:overlaps(oc.b) then | |
c_reaction(ec,oc,e,o) | |
c_reaction(oc,ec,e,o) | |
end | |
end | |
function c_reaction(ec,oc,e,o) | |
local reaction,param= | |
event(ec.e,"collide",oc.e) | |
if type(reaction)=="function" then | |
reaction(ec,oc,param,e,o) | |
end | |
end | |
function c_collider(ent) | |
if ent.collider then | |
if ent.coll_ts==g_time or not ent.dynamic then | |
return ent.collider | |
end | |
end | |
local hb=state_dependent(ent,"hitbox") | |
if (not hb) return nil | |
local coll={ | |
b=hb:translate(ent.pos), | |
e=ent | |
} | |
ent.collider,ent.coll_ts= | |
coll,g_time | |
return coll | |
end | |
function c_push_out(oc,ec,allowed_dirs,e,o) | |
local sepv=ec.b:sepv(oc.b,allowed_dirs) | |
ec.e.pos+=sepv | |
if ec.e.vel then | |
local vdot=ec.e.vel:dot(sepv) | |
if vdot<0 then | |
if (sepv.y~=0) ec.e.vel.y=0 | |
if (sepv.x~=0) ec.e.vel.x=0 | |
end | |
end | |
ec.b=ec.b:translate(sepv) | |
end | |
function c_move_out(oc,ec,allowed) | |
return c_push_out(ec,oc,allowed) | |
end | |
------------------------------- | |
-- support | |
------------------------------- | |
function do_supports() | |
for e in all(entities_with.feetbox) do | |
local fb=e.feetbox | |
if fb then | |
fb=fb:translate(e.pos) | |
local support=c_check(fb,{"walls"}) | |
-- ) support=nil | |
e.supported_by=support | |
if support and support.vel then | |
e.pos+=support.vel | |
end | |
end | |
end | |
end | |
local a="0000000000000000000000000000000000000000000000000000000000000000000000000000000000055555555550000000000000000000005555555555550000000000000000000555155555555500000000000000000005551555555555000000000000000000055555555555550000000000000000000555555555555500000000000000000005555555555555000000008888888800055555550000000000000008888888880555555500000000000000008880008888555555555500000000000080000000558888000000000000005000000000005555558000000000000050000000005555555500000000000000550000005555555555555000000000005550000555555555550050000000000055550055555555555500500000000000555555555555555555000000000000005555555555555555550000000000000005555555555555555500000000000000055555555555555550000000000000000055555555555555500000000000000000055555555555550000000000000000000055555555555000000000000000000000055555555500000000000000000000000055550555000000000000000000000000555000550000000000000000000000005500000500000000000000000000000050000005000000000000000000000000555000055500000000000000000000000000000000000000000000" | |
function b(y,xx,yy) | |
for c=0,31 do | |
for d=1,31 do | |
local e=d+c*32 | |
local m=tonum(sub(a,e,e)) | |
if (m~=0) pset(d+48+xx,c-48+y+yy,m) | |
end | |
end | |
end | |
function oprint(s,x,y,...) | |
s=smallcaps(s) | |
prnt(s,x,y,...) | |
end | |
function coprint(s,y,c,m,n) | |
s=smallcaps(s) | |
prnt(s,64-#s*2+(m or 0),y,c,nil,n) | |
end | |
function prnt(s,x,y,c,o,n) | |
if(not o) o=sget(97,c) | |
for xx=x-1,x+1 do | |
for yy=y-1,y+2 do | |
print(s,xx,yy,n or 0) | |
end | |
end | |
print(s,x,y+1,o) | |
print(s,x,y,c) | |
end | |
local gt=0 | |
function f(e) | |
cls() | |
gt=min(0.5,gt+0.03) | |
local y=96+cos(gt)*5 | |
for xx=-1,1 do | |
for yy=-1,1 do | |
if abs(xx)+abs(yy)==1 then | |
coprint("^rexellent ^games", | |
y+yy,0,xx,7) | |
end | |
end | |
end | |
coprint("^rexellent ^games", | |
y,7) | |
for i=0,15 do pal(i,l[e][6]) end | |
for xx=-1,1 do | |
for yy=-1,1 do | |
if(abs(xx)+abs(yy)==1)b(y,xx,yy) | |
end | |
end | |
pl(e) | |
b(y,0,0) | |
flip() | |
end | |
function g(h,i,j) | |
for e=h,i,j do | |
for m=1,5 do | |
pl(e) | |
f(e) | |
end | |
end | |
end | |
function pl(e) | |
local k=l[e] | |
pal() | |
pal(8,k[1]) | |
pal(1,k[2]) | |
pal(5,k[3]) | |
pal(7,k[4]) | |
pal(13,k[5]) | |
end | |
l={ | |
{0,0,0,0,0,1}, | |
{2,0,1,1,1,5}, | |
{4,0,1,5,13,5}, | |
{4,1,5,6,13,6}, | |
{8,1,5,7,13,7} | |
} | |
function m() | |
g(1,#l,1) | |
g(#l,1,-1) | |
pal() | |
fade() | |
end | |
function smallcaps(s) | |
s=s.."" | |
local d="" | |
local c | |
for i=1,#s do | |
local a=sub(s,i,i) | |
if a!="^" then | |
if not c then | |
for j=1,26 do | |
if a==sub("abcdefghijklmnopqrstuvwxyz",j,j) then | |
a=sub("\65\66\67\68\69\70\71\72\73\74\75\76\77\78\79\80\81\82\83\84\85\86\87\88\89\90\91\92",j,j) | |
end | |
end | |
end | |
d=d..a | |
c=true | |
end | |
c=not c | |
end | |
return d | |
end | |
function noprint(s,x,y,c) | |
s=smallcaps(s) | |
prnt(s,x+4-#s*2,y,c) | |
end | |
plt={7,6,5,1,0} | |
function fade() | |
shk=20 | |
for i=1,#plt do | |
cls(plt[i]) | |
flip() flip() | |
end | |
end | |
-->8 | |
-- level | |
function block_type(blk) | |
if (fget(blk,0)) return solid | |
if (fget(blk,1)) return support | |
end | |
level=entity:extend({ | |
draw_order=2 | |
}) | |
function level:init() | |
local b,s=self.base,self.size | |
for x=0,s.x-1 do | |
for y=0,s.y-1 do | |
local blk=mget(b.x+x,b.y+y) | |
local cl=entity.spawns[blk] | |
if cl then | |
mset(b.x+x,b.y+y,0) | |
local e=cl({ | |
pos=v(x,y)*8, | |
map_pos=b+v(x,y), | |
tile=blk | |
}) | |
e_add(e) | |
blk=0 | |
end | |
local bt=block_type(blk) | |
if bt then | |
bl=bt({ | |
pos=v(x,y)*8, | |
map_pos=b+v(x,y), | |
tile=blk, | |
typ=bt | |
}) | |
if (bl.needed) e_add(bl) | |
end | |
end | |
end | |
end | |
function level:render() | |
map(self.base.x,self.base.y, | |
0,0,self.size.x,self.size.y) | |
end | |
solid=static:extend({ | |
tags={"walls"}, | |
hitbox=box(0,0,8,8), | |
draw_order=3 | |
}) | |
function solid:bad() | |
return self.lava and ( | |
(flr(nt_time/4 ) | |
+self.pos.x/8)%(g_index>=23 and (g_index==31 and 2 or 6) or 7)==0) | |
end | |
function solid:render() | |
if(g_red) return | |
if self:bad() then | |
self.t+=1 | |
rect(self.pos.x,self.pos.y,self.pos.x+7,self.pos.y+7,0) | |
for x=self.pos.x+1,self.pos.x+6 do | |
for y=self.pos.y+1,self.pos.y+6 do | |
pset(x,y,get(x,y,20)) | |
end | |
end | |
end | |
if self.tile==5 and rnd()>0.99 then | |
mset(self.map_pos.x,self.map_pos.y,0) | |
end | |
end | |
function solid:init() | |
self.t=0 | |
local dirs={v(-1,0),v(1,0),v(0,-1),v(0,1)} | |
local allowed={} | |
self.lava=fget(self.tile,3) | |
local needed=self.lava | |
for i=1,4 do | |
local np=self.map_pos+dirs[i] | |
allowed[i]= | |
block_type(mget(np.x,np.y)) | |
~=solid | |
needed=needed or allowed[i] | |
end | |
self.allowed=allowed | |
self.needed=needed | |
end | |
function solid:collide(e) | |
if e:is_a("guy") | |
and self:bad() and self.t>=10 then | |
e:die() | |
end | |
return c_push_out,self.allowed | |
end | |
support=solid:extend({ | |
hitbox=box(0,0,8,1) | |
}) | |
function support:collide(e) | |
if (not e.vel) return | |
local dy,vy=e.pos.y-self.pos.y,e.vel.y | |
if vy>0 and dy<=vy+1 then | |
return c_push_out,{false,false,true,false} | |
end | |
end | |
-->8 | |
-- guy | |
guy=entity:extend({ | |
hitbox=box(-3,-3,3,4), | |
feetbox=box(-3,-3,3,4.1), | |
sprite={ | |
offset=v(-4,-4), | |
idle={66,68,delay=30}, | |
move={66,67,68,67,delay=8}, | |
fly={66}, | |
flips=true | |
}, | |
draw_order=5, | |
tags={"guy"}, | |
collides_with={"walls","guy"}, | |
weight={up=0,0.1} | |
}) | |
guy:spawns_from(64) | |
function guy:render() | |
if self.invt>0 then | |
self.invt-=1 | |
if (self.invt%15>7) for i=1,15 do pal(i,7) end | |
end | |
spr_render(self) | |
end | |
function guy:die(f) | |
if(self.invt>0 and not f or self.nocol or g_red) return | |
if g_hp==0 or f then | |
self:death(f) | |
else | |
g_hp-=1 | |
sfx(32) | |
if(g_hp==0) self:death(f) | |
end | |
for g in all(entities_tagged["guy"]) do | |
g.invt=60 | |
end | |
end | |
function guy:death(f) | |
parts(self.pos.x,self.pos.y,10,5,8) | |
self.nocol=true | |
g_lost=true | |
fade() | |
sfx(33) | |
end | |
function guy:collide(o) | |
if o:is_a("guy") and o~=self and not o.nocol and not self.nocol then | |
if not self.zomb and o.zomb then | |
self:die(true) | |
sfx(40) | |
else | |
return c_push_out | |
end | |
end | |
end | |
function guy:init() | |
self:become("up") | |
self.vel=v(0,0) | |
self.pos.x+=4 | |
self.start=self.pos.y+4 | |
self.pos.y=128 | |
self.nocol=true | |
self.s=1 | |
self.t=rnd(128) | |
self.invt=0 | |
end | |
function guy:up() | |
self.s+=0.1 | |
self.pos.y-=self.s | |
if(self.pos.y<=self.start) self.nocol=false self.pos.y=self.start self:become("idle") | |
end | |
function guy:idle() | |
self.vel.x*=0.2 | |
local s=0.7 | |
if(btn(⬅️)) self.vel.x-=s | |
if(btn(➡️)) self.vel.x+=s | |
if(btnp(⬆️) and not g_lost and self.supported_by) self.vel.y-=1.8 parts(self.pos.x,self.pos.y,3,4,7) sfx(39) | |
if abs(self.vel.x)>0.1 or self.vel.y<0 then | |
self:become(self.supported_by and "move" or "fly") | |
elseif self.supported_by then | |
if(self.state~="idle") parts(self.pos.x,self.pos.y,3,4,5) | |
self:become("idle") | |
end | |
if (self.pos.x>=132) g_index+=1 restart_level() | |
if (self.pos.x<=-4) g_index-=1 restart_level() | |
if self.pos.y>=132 then | |
if self.nocol then | |
restart_level() | |
else g_index+=8 restart_level() end | |
end | |
if (g_lost) self.vel.x=0 | |
if (self.pos.y<=-4) g_index-=8 restart_level() | |
end | |
guy.move=guy.idle | |
guy.fly=guy.idle | |
-->8 | |
-- zombie | |
zombie=guy:extend({ | |
sprite={ | |
offset=v(-4,-4), | |
idle={82,84,delay=30}, | |
move={82,83,84,83,delay=8}, | |
fly={82}, | |
flips=true | |
}, | |
zomb=true | |
}) | |
zombie:spawns_from(80) | |
-->8 | |
-- entities | |
door_top=entity:extend({ | |
hitbox=box(0,0,8,8), | |
tags={"walls","door"}, | |
vy=-1 | |
}) | |
function door_top:clamp() | |
if(abs(self.pos.y-self.start)<9) self.pos.y+=self.vy/5 | |
end | |
function door_top:idle() | |
if(abs(self.pos.y-self.start)>0.1) self.pos.y-=self.vy/5 | |
end | |
door_top:spawns_from(78) | |
function door_top:init() | |
self.start=self.pos.y | |
self.sprite={idle={self.tile}} | |
end | |
function door_top:collide() | |
return c_push_out | |
end | |
door_bottom=door_top:extend({ | |
vy=1 | |
}) | |
door_bottom:spawns_from(94) | |
button=entity:extend({ | |
sprite={ | |
idle={79}, | |
down={95} | |
}, | |
hitbox=box(0,6,8,8), | |
collides_with={"guy"} | |
}) | |
button:spawns_from(79) | |
function button:collide(o) | |
-- if(self.state~="idle") return | |
if(self.state~="down") sfx(34) | |
self:become("down") | |
self.t=0 | |
self:use() | |
end | |
function button:use() | |
self:open() | |
end | |
function button:open() | |
for d in all(entities_tagged["door"]) do | |
if (d.state~="clamp") sfx(42) d:become("clamp") | |
end | |
end | |
function button:down() | |
if self.t>3 and not g_bdown and not self.blue then | |
sfx(35) | |
for d in all(entities_tagged["door"]) do | |
if(d.state~="idle") sfx(43) d:become("idle") | |
end | |
self:become("idle") | |
end | |
end | |
blue_button=button:extend({ | |
sprite={ | |
idle={77}, | |
down={93} | |
}, | |
tags={"blue"} | |
}) | |
blue_button:spawns_from(77) | |
function blue_button:use() | |
for b in all(entities_tagged["blue"]) do | |
if (b.state~="down") return | |
end | |
for b in all(entities_tagged["blue"]) do | |
b.blue=true | |
end | |
g_bdown=true | |
self:open() | |
end | |
snk=entity:extend({ | |
sprite={ | |
idle={96}, | |
closed={97} | |
}, | |
hitbox=box(1,1,7,7), | |
tags={"snk","walls"} | |
}) | |
snk:spawns_from(96,97) | |
function snk:collide(o) | |
if(self.state=="idle") return c_push_out,{false,false,true,false},4 | |
end | |
function snk:init() | |
if (self.tile==97) self:become("closed") | |
if (self.tile==96) self.main=true | |
end | |
function snk:closed() self.nocol=true end | |
function snk:idle() | |
self.nocol=false | |
if (self.state~="idle") return | |
if self.main and self.t%20==19 then | |
local m,s=16 | |
for e in all(entities_tagged["snk"]) do | |
if e~=self and e.state~="idle" then | |
local d=(e.pos-self.pos):len() | |
if d<m then | |
m,s=d,e | |
end | |
end | |
end | |
if s~=nil then | |
s:become("idle") | |
s.main=true | |
self.main=false | |
end | |
end | |
if self.t==80 then | |
self:become("closed") | |
end | |
end | |
coin=entity:extend({ | |
sprite={ | |
idle={112,113,114,113,delay=10} | |
}, | |
draw_order=5, | |
hitbox=box(2,2,6,6), | |
collides_with={"guy"} | |
}) | |
coin:spawns_from(112) | |
function coin:init() | |
if dget(g_index+1)%2==1 then | |
self.done=true | |
end | |
end | |
function coin:idle(t) | |
self.pos.y+=cos(t/100)/10 | |
end | |
function coin:collide(o) | |
self.done=true | |
g_money+=1 | |
dset(g_index+1,chk(g_index+1)+1) | |
dset(0,g_money) | |
sfx(38) | |
parts(self.pos.x+4,self.pos.y+4,5,4,10) | |
end | |
wtr=entity:extend({ | |
sprite={idle={26}}, | |
hitbox=box(0,0,8,8), | |
collides_with={"guy"} | |
}) | |
wtr:spawns_from(26) | |
function wtr:collide(o) | |
if o.die then | |
o:die(true) | |
end | |
end | |
boss=entity:extend({ | |
sprite={ | |
idle={42}, | |
width=2, | |
height=2 | |
}, | |
draw_order=10, | |
hitbox=box(0,0,16,16), | |
collides_with={"guy"} | |
}) | |
function boss:collide(o) | |
o.done=true | |
self:become("aaa") | |
end | |
function boss:idle() | |
if self.t==60 then | |
shk=self.t/2 | |
self:become("main") | |
end | |
end | |
function boss:main() | |
self.pos.y+=cos(self.t/100)/10 | |
end | |
function boss:render() | |
if self.state~="idle" or self.t>=50 then | |
spr_render(self) | |
end | |
if self.state=="idle" | |
or self.t<30 then | |
for i=1,30 do | |
local a=i/10 | |
local r=(self.state=="idle" | |
and (30-i)/self.t*32 or | |
(self.t*self.t)/10) | |
circfill(cos(a)*r+ | |
self.pos.x+8, | |
sin(a)*r+self.pos.y+8, | |
i/2+1,0) | |
end | |
end | |
end | |
function boss:render_hud() | |
if self.state=="idle" | |
or self.t<30 then | |
for i=1,30 do | |
local a=i/10 | |
local r=(self.state=="idle" | |
and (30-i)/self.t*32 or | |
(self.t*self.t)/10) | |
circfill(cos(a)*r+ | |
self.pos.x+8, | |
sin(a)*r+self.pos.y+8, | |
i/2,10-i%2) | |
end | |
end | |
end | |
function boss:aaa() | |
shk=self.t/2 | |
if self.t==60 then | |
self.done=true | |
g_red=true | |
end | |
local a=self.t/15 | |
e_add(part({ | |
r=8, | |
c=10-self.t%2, | |
pos=v(self.pos.x+8,self.pos.y+8), | |
vel=v( | |
cos(a)*8, | |
sin(a)*8 | |
), | |
mul=0.85, | |
spd=function(t) | |
return t>=60 and 0.2 or 0.01 | |
end | |
})) | |
end | |
boss:spawns_from(42) | |
pet=entity:extend({ | |
draw_order=4, | |
hitbox=box(0,0,8,8), | |
collides_with={"guy"} | |
}) | |
function pet:collide(o) | |
self.st=3 | |
end | |
function pet:init() | |
self.sprite={idle={self.spr},stop={45}} | |
self.vel=v(0,0) | |
self.st=0 | |
if (self.tile) self:become("shop") return | |
local a=entities_tagged["guy"] | |
self.own=a[flr(rnd(#a))+1] | |
self.pos=v(self.own.pos.x,self.own.start) | |
end | |
function pet:shop(t) | |
if (g_pet and g_pet.id==self.id) self:become("stop") | |
self.vel.y=cos(t/200)/10 | |
self.st=max(0,self.st-1) | |
end | |
function pet:stop(t) | |
if (g_pet==nil or g_pet.id~=self.id) self:become("shop") | |
self.vel.y=cos(t/200)/10 | |
self.st=max(0,self.st-1) | |
end | |
function pet:render_hud() | |
if self.state=="shop" and self.st>0 then | |
local e=g_money>=self.cost | |
local s=self.cost.."$" | |
oprint(s,self.pos.x+4-#s*2,self.pos.y,e and 9 or 8) | |
s=smallcaps(self.name) | |
oprint(s,self.pos.x+4-#s*2,self.pos.y-9,7) | |
if e then | |
s="^press 🅾️/c to buy " | |
oprint(s,self.pos.x+8-#s*2,self.pos.y+9,11) | |
if btnp(🅾️) then | |
g_missed=true | |
g_money-=self.cost | |
dset(0,g_money) | |
if g_pet~=nil then g_pet.done=true | |
parts(g_pet.pos.x+4,g_pet.pos.y+4,10,4,5) | |
end | |
g_pet=pts[self.id]() | |
local a=entities_tagged["guy"] | |
g_pet.own=a[flr(rnd(#a))+1] | |
e_add(g_pet) | |
dset(41,self.id) | |
self:become("stop") | |
parts(self.pos.x+4,self.pos.y+4,10,4,10) | |
end | |
end | |
elseif self.state=="stop" and self.st>0 then | |
local s="^sell" | |
oprint(s,self.pos.x+8-#s*2,self.pos.y,9) | |
if btnp(🅾️) then | |
g_missed=true | |
g_pet.done=true | |
parts(g_pet.pos.x+4,g_pet.pos.y+4,10,4,5) | |
g_pet=nil | |
g_money+=self.cost | |
dset(0,g_money) | |
dset(41,0) | |
self:become("shop") | |
end | |
end | |
end | |
function pet:idle() | |
self.vel*=0.9 | |
local dv=self.own.pos-self.pos | |
local d=dv:len() | |
if d>16 then | |
self.vel+=dv/d/10 | |
end | |
end | |
str=pet:extend({ | |
spr=29, | |
cost=5, | |
name="^strawberry", | |
id=1 | |
}) | |
str:spawns_from(29) | |
pico=pet:extend({ | |
spr=44, | |
cost=3, | |
name="^p^i^c^o-8", | |
id=2 | |
}) | |
pico:spawns_from(44) | |
ld=pet:extend({ | |
spr=60, | |
cost=10, | |
name="^l^d", | |
id=3 | |
}) | |
ld:spawns_from(60) | |
spc=pet:extend({ | |
spr=61, | |
cost=7, | |
name="^space invader", | |
id=4 | |
}) | |
spc:spawns_from(61) | |
ham=pet:extend({ | |
spr=56, | |
cost=2, | |
name="^hamster", | |
id=5 | |
}) | |
ham:spawns_from(56) | |
co=pet:extend({ | |
spr=55, | |
cost=15, | |
name="^coffee", | |
id=6 | |
}) | |
co:spawns_from(55) | |
pts={str,pico,ld,spc,ham,co} | |
-->8 | |
-- fx | |
part=entity:extend({ | |
draw_order=10 | |
}) | |
function part:idle() | |
self.r-=(self.spd~=nil and self.spd(self.t) or 0.1) | |
self.vel*=(self.mul or 0.9) | |
if self.r<0 then | |
self.done=true | |
end | |
end | |
function part:render() | |
circfill(self.pos.x,self.pos.y,self.r,0) | |
end | |
function part:render_hud() | |
circfill(self.pos.x,self.pos.y,self.r-1,self.c) | |
end | |
function parts(x,y,a,r,c) | |
for i=1,a do | |
e_add(part({ | |
pos=v(x,y), | |
vel=v(rnd(2)-1,rnd()), | |
r=r, | |
c=rnd()>0.7 and c or sget(97,c) | |
})) | |
end | |
end | |
water=entity:extend({ | |
sprite={idle={9,25,41,57,delay=15}} | |
}) | |
water:spawns_from(9) | |
fly=entity:extend({ | |
draw_order=10, | |
sprite={idle={99,100,delay=10}} | |
}) | |
fly:spawns_from(99) | |
function fly:init() | |
self.t=rnd(128) | |
end | |
function fly:idle(t) | |
t/=10 | |
self.pos=self.pos+v( | |
cos(t/32)*sin(t/105), | |
sin(t/17)*sin(t/9) | |
)/2 | |
end | |
-->8 | |
-- states | |
ingame={} | |
function ingame.update() | |
if g_time%60==0 and not g_red then | |
g_sec+=1 | |
if g_sec>=60 then | |
g_sec=0 | |
g_min+=1 | |
if g_min>=60 then | |
g_min=0 | |
g_hour+=1 | |
end | |
end | |
dset(34,g_sec) | |
dset(35,g_min) | |
dset(36,g_hour) | |
end | |
e_update_all() | |
do_movement() | |
do_collisions() | |
do_supports() | |
if btnp(❎) then | |
sfx(41) | |
if g_red then | |
reload(0x0800,0x0800,0x1800,"bkp.p8") | |
music(-1) | |
state=menu | |
g_red=false | |
for i=0,63 do | |
g_index=0 | |
dset(i,0) | |
end | |
fade() | |
else | |
g_lost=true restart_level() fade() | |
end | |
end | |
end | |
function ingame.draw() | |
cls(12) | |
r_render_all("render") | |
r_render_all("render_hud") | |
local r=g_red | |
g_red=false | |
r_reset() | |
spr(11,7,2) | |
oprint(g_hp,2,2,8) | |
spr(112,119,1) | |
local s=g_money.."" | |
prnt(s,119-#s*4,2,9) | |
if g_index==1 then | |
coprint("^press ❎ to restart ",110,6) | |
end | |
if btnp(🅾️) then | |
if g_missed then | |
g_missed=false | |
else g_spd=not g_spd end | |
end | |
if g_spd then | |
oprint(sb(g_hour)..":"..sb(g_min)..":"..sb(flr(g_sec)).." "..round(g_pr/32*100).."%",2,11,12) | |
oprint(g_deaths.." ^deaths",2,20,12) | |
end | |
if r then | |
local s=cos(g_time/200)*3.5-20 | |
coprint("★★★★★ ",32+s,10) | |
coprint("^you won!",42+s,7) | |
coprint("★★★★★ ",52+s,10) | |
coprint("^g^g!",72+s,6) | |
coprint(g_deaths.." ^deaths",82+s,12) | |
coprint(sb(g_hour)..":"..sb(g_min)..":"..sb(flr(g_sec)),92+s,11) | |
coprint(round(g_pr/32*100).."% ^finished",102+s,9) | |
coprint(g_money.." ^coins",112+s,9) | |
coprint("^press ❎ to continue ",102,7) | |
end | |
if g_dith>0 then | |
fillp(pat[g_dith]) | |
g_dith-=1 | |
rectfill(0,0,127,127,0) | |
fillp() | |
end | |
g_red=r | |
end | |
function sb(s) | |
s=""..s | |
while #s<2 do | |
s="0"..s | |
end | |
return s | |
end | |
menu={} | |
thanks="^big thanks to: ^gruber_music, x2 ^roy ^fielding, ^riccardo straccia, ^denny ^pahlke, ^audrey, ^dylan ^bennett, ^francesco ^maida, ^gabriel ^crowe, ^szymon ^walter, ^mr^bigaston, ^someone" | |
lmb=0 | |
function menu.update() | |
mb=stat(34) | |
mx,my=stat(32),stat(33) | |
mbp=(mb~=0 and lmb==0) | |
lmb=mb | |
if(mbp) sfx(41) | |
if btnp(❎) then | |
sfx(41) | |
fade() | |
state=diff | |
end | |
if g_time>=30 and | |
not g_showed then | |
g_showed=true | |
sfx(37) | |
shk=20 | |
end | |
if(not g_showed) return | |
if g_time>=60 and not | |
g_musplayed then | |
g_musplayed=true | |
music(13,1000,1) | |
end | |
end | |
pll={4,2,2,2,8,8,9,10,15,7,15,10,9,8,8,2,2,2,4} | |
function get(x,y,s) | |
local t=g_time/400 | |
local c=cos(x/80)-sin(y/100) | |
+cos(x/40-t)*sin(y/40-t) | |
+cos(x/80)*sin(y/80-t) | |
+cos(x/200+t/2)*sin(y/80+t) | |
return pll[flr(c*(s or 3))%#pll] or pll[1] | |
end | |
function menu.draw() | |
for i=1,300 do | |
local x,y=rnd(128),rnd(128) | |
local c=get(x,y) | |
circ(x,y,1,c) | |
end | |
if (not g_showed) return | |
r_reset() | |
sspr(9,60,111,64,9,24+cos(g_time/200)*3.5) | |
-- oprint("^by @egordorichev",48,87,6) | |
local s=sin(g_time/100)*3.5 | |
spr(66+(flr(g_time/15)%2),8,8+s) | |
spr(66+(flr(g_time/15)%2),112,8+s) | |
spr(82+(flr(g_time/15)%2),8,112+s) | |
spr(82+(flr(g_time/15)%2),112,112+s) | |
local m=mchk(40,13) | |
spr(37+(g_mmusic and 16 or 0), | |
40,m and (mb>0 and 15 or 14) or 13) | |
if mbp and m then | |
g_mmusic=not g_mmusic | |
dset(39,g_mmusic and 1 or 0) | |
if g_mmusic then | |
omusic(-1) | |
else | |
music(13+flr(rnd(3)),1000,1) | |
end | |
end | |
for i=1,#thanks do | |
local x=(i*4-g_time/3)+24 | |
local s=sub(thanks,i,i) | |
if s~=" " and s~="^" and x>-4 and x<128 then | |
oprint((i==1 or sub(thanks,i-1,i-1)=="^") and "^"..s or s,x,96+cos(g_time/200+i/6)*1.5,i%4+7) | |
end | |
end | |
local m=mchk(54,13) | |
spr(38+(g_msfx and 16 or 0), | |
54,m and (mb>0 and 15 or 14) or 13) | |
if mbp and m then | |
g_msfx=not g_msfx | |
dset(40,g_msfx and 1 or 0) | |
end | |
-- coprint(stat(1),96,11) | |
coprint("^press ❎ to start ",110+cos(g_time/200)*3.5,7) | |
spr(21,mx,my) | |
end | |
function mchk(x,y) | |
return mx>=x and mx<=x+8 and | |
my>=y and my<=y+8 | |
end | |
diff={} | |
function diff.update() | |
if btnp(⬅️) or btnp(⬆️) then | |
g_selt=(g_selt-1)%4 | |
elseif btnp(➡️) or btnp(⬇️) then | |
g_selt=(g_selt+1)%4 | |
end | |
if btnp(❎) then | |
sfx(41) | |
reload(0x0800,0x0800,0x1800,"ld.p8") | |
restart_level() | |
state=ingame | |
sfx(36) | |
fade() | |
music(0,1000,1) | |
end | |
end | |
g_selt=1 | |
function diff.draw() | |
for i=1,500 do | |
local x,y=rnd(128),rnd(128) | |
local c=get(x,y) | |
circ(x,y,1,c) | |
end | |
coprint("^easy".. | |
(g_selt==0 and " <" or ""),48,g_selt==0 and 8 or 7) | |
coprint("^normal"..(g_selt==1 and " <" or ""),58, | |
g_selt==1 and 8 or 7) | |
coprint("^hard"..(g_selt==2 and " <" or ""),68,g_selt==2 and 8 or 7) | |
coprint("^damn hard"..(g_selt==3 and " <" or ""),78,g_selt==3 and 8 or 7) | |
end | |
-- splash | |
-- m() | |
__gfx__ | |
00000000100000000000000000000001100000017ffffffa000000000000000000000000cc060ccccccccccccc0cc0cc01000000222222222222222222222222 | |
000000000ab3ab33b3bbb3bb3ab3bb300ab3ab30fcccccc9088888800904040220404020cc0d0cccccccccccc0700e0c1000000022c222222222222222222222 | |
007007000b33333223333332323333100b333310fcacccc9088888800000020000002000cc0d0ccccccc000007e2e8202100000022222c222222222222cccc22 | |
0007700003332224423322242422331003333310fcccccc908888880cccc000cccc000cccc010cccccc065dd0e88882031000000222222222222222222cccc22 | |
000770000a32444444224444444423300a333330fcccccc908888880ccccccccccccccccccc060cccc0d5111c0e8820c420000002cc2c2222222222222cccc22 | |
007007000b324e2444444444444423100b332210fcccccc908888880ccccccccccccccccccc0d0cccc051000cc0e20cc510000002cc222222222222222cccc22 | |
0000000003224214444444442444423003224230fcccccc908888880ccccccccccccccccccc0d0cccc0d10ccccc00ccc65000000222222222222222222222222 | |
0000000002444444444444444444442002444420a999999400000000ccccccccccccccccccc010cccc0000cccccccccc7d000000222222222222222222222222 | |
4444444004444444444444444444444004444440c1cccccc00000000c05050cc0501050cccc0d0cc0000000011111111820000000b030050ccccccc22ccccccc | |
444442bb0944444444444444444444200a444420161ccccc09040420c03030cc0300030cccc010cc777777771111111194000000c0b3350ccccccc2222cccccc | |
44444423044444444444444444444420094444201761cccc00000210c03030cc030030cccc060cccdddddddd11111111a9000000c0eb520cccccc222222ccccc | |
444444420944444444444444444444400444444017751ccccccc0000c010030c010030cccc0d0ccc1111111111111111b30000000e788820cccc22222222cccc | |
4444444409444444444444444444442009444420177751cccccccccccc0c030cc0c010cccc0d0ccc1111111111111111c10000000e888620ccc2222222222ccc | |
444444440444444444444444444444400944444017711ccccccccccccccc010ccccc0ccccc010ccc1111111111111111d5000000c0e8820ccc222222222222cc | |
4444444409444444444444444444442009444420c1161cccccccccccccccc0ccccccccccccc060cc1111111111111111e2000000c0e6820cc22222222222222c | |
4444444404444444444444444444444004444440ccccccccccccccccccccccccccccccccccc0d0cc1111111111111111f0000000cc0e20cc2222222222222222 | |
0444444404444444444444444444444004444440cccc0cccccc000ccccccccccccccccccccc060cccccc00000000ccccccc0ccccccc00ccc2222222222222222 | |
bb2444440a44444444444444444424200a444420ccc0700ccc07070cccccccccccccccccccc0d0cccc008888888800cccc080ccccc0880ccc22222222222222c | |
324444440942444444444444e244442009444420ccc07660c0770070ccccccccccccccccccc0d0ccc08889999998880cc097f0ccc080080ccc222222222222cc | |
2444444409444444444444442144441009444410cc00606007770070c0ccccccc0cc0cccccc010ccc0899aaaaaa9980c0a777e0c08020020ccc2222222222ccc | |
4444444404444444444444444444444004444440c0776001067700700a0c0ccc0a00a0cccc060ccc0889aaaaaaaa9880c0b7d0cc08001020cccc22222222cccc | |
44444444094444444444444444444420094444200777601cc06700600b00a00c0b0b0c0ccc0d0ccc089aa777777aa980cc0c0cccc080020cccccc222222ccccc | |
4444444404242224424242244212421004224210c07601cccc060601c0b0b0b00b0b00b0cc0d0ccc089aa777777aa980ccc0cccccc0220cccccccc2222cccccc | |
4444444410000000000000000000000110000001cc001cccccc0001cc030303003030030cc010ccc089aa777777aa980ccccccccccc00cccccccccc22ccccccc | |
44444444100000000000000000000001100000018ccc0ccc8cc000cccc000cccc00cc00ccc0d0ccc089aa777777aa980c00000ccc00cc00c0000000000000000 | |
4e2444440ab3ab33b3abb3bb3bb3ab300ab3bb3028c0700c2807070cc077700c04400440cc010ccc089aa777777aa92008009a0c07e008800000000000000000 | |
421444440b33333233333333323333100b333310c2807660c28700700744265004ffff40ccc060cc089aa777777aa9200200a0a00e8888200000000000000000 | |
4444442403332224223322332422331003333310cc2860600728007007777650c01ff10cccc0d0cc0889aaaaaaaa9820080090900e0880200000000000000000 | |
444444440a32444444224422444423300a333330c072800c067280700777760cc0f7ef0cccc0d0ccc0899aaaaaa9920c0200a0a00e8888200000000000000000 | |
444244440b32444444444444444423100b332210077728ccc0672860c07770cc0ffeeff0ccc010ccc08889999999220c08289a0cc088820c0000000000000000 | |
4444444403242242224221422421423003224230c076028ccc06028ccc000ccc0ffffff0cc060ccccc008888822200ccc00000ccc0e0020c0000000000000000 | |
4444444410000000000000000000000110000001cc00cc2cccc0002cccccccccc000000ccc0d0ccccccc00000000cccccccccccccc0cc0cc0000000000000000 | |
cccccccccccccccccccccccccccccccccccccccc100000000000000000000001dddddd70000000000000000000000000076dd10ccccccccc07d51510cccccccc | |
ccc00cccccccccccccc00cccccc00cccccc00ccc077777777777777777777770dddddd7700000000000000000000000006d6d50ccccccccc0d5d5100cccccccc | |
cc0940ccccc00ccccc0940cccc0940cccc09400c077777777777777777777760dddddd57000000000000000000000000c07d10cccccccccc07d51510cccccccc | |
cc04f0cccc0940ccc004f0cccc04f00ccc04f0f0077777777777777777777770ddddddd5000000000000000000000000c06d50cccccccccc0d5d5100cccccccc | |
c07e810cc074f10c0f7e810cc07e81f0c07e810c077555555555555555555760dddddddd000000000000000000000000cc070ccccccccccc06d51510cccccccc | |
c0e8920cc0e8920cc0e8920c0fe8920cc0f8920c075dddddddddddddddddd570dddddddd000000000000000000000000cc060ccccc0000cc0d5d5100cc0000cc | |
c04f54f0c0f15f0cc04554f0c045540cc045540c075dddddddddddddddddd560dddddddd000000000000000000000000cc060cccc07dd10c05111000c07ee80c | |
c0d0010cc0d0010cc0d00010cc0d10ccc0d0001005dddddddddddddddddddd50dddddddd000000000000000000000000ccc0ccccc0d1100c00000000c0e8820c | |
cccccccccccccccccccccccccccccccccccccccc0dddddddddddddddddddddd007dddddd0000000000000000000000000dddddd0cccccccc07111150cccccccc | |
ccc00cccccccccccccc00cccccc00cccccc00ccc06dddddddddddddddddddd5077dddddd00000000000000000000000007ddddd0cccccccc0d5d5100cccccccc | |
cc0ab0ccccc00ccccc0ab0cccc0ab0cccc0ab00c06dddddddddddddddddddd5075dddddd00000000000000000000000006dddd50cccccccc07d51510cccccccc | |
cc0b30cccc0ab0ccc00b30cccc0b300ccc0b303006dddddddddddddddddddd505ddddddd00000000000000000000000006dddd50cccccccc0d5d5100cccccccc | |
c0ae120cc0ab320c03ae120cc0ae1230c0a1520c0dddddddddddddddddddddd0dddddddd0000000000000000000000000dddddd0cccccccc06d51510cccccccc | |
c0b3850cc0b3810cc0b3850c03b3850cc03b850c06dddddddddddddddddddd50dddddddd00000000000000000000000006dddd50cccccccc0d5d5100cccccccc | |
c0e15130c031530cc0e55430c0b5340cc0b3540c06dddddddddddddddddddd50dddddddd0000000000000000000000000d55d510cc0000cc06d51510cc0000cc | |
c0b0010cc0b0010cc0b00010cc0b10ccc0b000100dddddddddddddddddddddd0dddddddd00000000000000000000000010000001c0d1100c0d555100c0e8820c | |
cccccccccccccccc00000000ccccccccc0cccc0c0dddddddddddddddddddddd0100000010000000000000000000000001000000000000000000000010dddddd0 | |
cc0000cccccccccc00000000cc0000cc0700007007dddddddddddddddddddd500777777000000000000000000000000007777777777777777777777007dddd50 | |
c077770cccc00ccc00000000c076560cc076560c06dddddddddddddddddddd50077777600000000000000000000000000777777777777777777777600ddddd50 | |
c07cd60ccc0760cc0000000007051070cc0510cc06dddddddddddddddddddd500777776000000000000000000000000007777777777777777777777006dddd50 | |
c07d160ccc0650cc00000000c0c00c0cccc00ccc0dddddddddddddddddddddd0077557600000000000000000000000000775555555555555555557500ddddd10 | |
c076650cccc00ccc00000000cccccccccccccccc06dddddddddddddddddddd50075dd570000000000000000000000000075d65ddddddddddddddd51006ddddd0 | |
cc0000cccccccccc00000000cccccccccccccccc0d51d55dd55d5d5dd5d5d510075dd560000000000000000000000000075551ddd51d55d5d5d5510006dddd50 | |
cccccccccccccccc00000000cccccccccccccccc10000000000000000000000105dddd500000000000000000000000001000000000000000000000010dddddd0 | |
cccccccccccccccccccccccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
ccc00cccccc00cccccc0cccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
cc07a0cccc07a0cccc070ccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
c07a940ccc0a90cccc0a0ccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
c0a9420ccc0940cccc090ccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
cc0420cccc0420cccc040ccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
ccc00cccccc00cccccc0cccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
cccccccccccccccccccccccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
b1b1b1b1b11131800012222121212121212121212121212121212121212121212121213180001121212121212121212121212121210130800012222222222221 | |
21222222222232000012222222222221212121212121212121212121212121212121212121212131000011212121222222222222222232000012222222222121 | |
b1b1b1b1b111310405810012222222222121222222212121212122222222222121032131000712212121212121212121212121212121310000e081e1e0007111 | |
310000710000000000000036000000112121212121212121032121212121212121210321212121327080122121310071e4000000007100040005008100001121 | |
b1b1b1b1b11131808000000071e4e2d0223200e4001121212132007100810511210321318000811121032121032121212121032121213280e1e0e0e0e0f10011 | |
310016161616161616161616161600112121212121212121212121212121212121212121212132000000001121310000e5003640800000000700000040001121 | |
b1b1b1b1b11131000072103036e5e2e0040082e50011212131000000f400701121212131000000112121212121212121212121212131e0e0f1e0e0e0d0e0e011 | |
31001640000000000000000040160011212121212121212122222221212121212121212121327100708000122131071030000041000000000000000041001121 | |
b1b1b1b1b111318000100201202020202020203000112121310040004000100221212121300070112121212121212121212122222232808000e0e0e0e0e0f111 | |
31001641a1a1a1a1a1a1a1a141160011212121212222213105000011212121212121212132000000000000f11131001101308241800000000000007041f41121 | |
b1b1b1b1b111310000122221212121210321213100112121310041e24100112121212121310000112121212121212121033100007100000000e0f0e0e0e00011 | |
31001641b1b1b1b1b1b1b1b141160011212121310481112120303611212121212121213200000000708000e01231001121012031000000000000008211200221 | |
b1b1b1b1b111318000d0f11222222121212121310011212131e041e241f11121212222213200701121222221212121212131001030808080e1e1f0e0f1e0e112 | |
32001641b1b1b1b1b1b1b1b1411600122222222233001222223200122222222222223271360000000000e1e1e042001121212131800000360000001002212121 | |
b1b1b1b11002310000e0f00071e01221210321310011212131e241e041e011213100714100000012318100112103212121310711310000e1e0e0e0e0e000e000 | |
00001641b1b1b1b1b1b1b1b14116007100070000003600e40081000000e47100007100000000708000e1e1e0e081001121212131000000000000701121212121 | |
202020200221013000e2e000e1d0f11121212131001121213100410041f0112131d40041d400610041d400112121212121310011318000e0e0e100000082e200 | |
00051612232323232323232332160000000000720000d4e500008200d4e500820000000004000000e1e0e0f0e0f1001121212101300000000000001121212121 | |
21212121212121012020203080e000112122223200112121310041074100112222307011203000001133701121212121213100113100e1e0e0f100050040e210 | |
30801636000000000000000000167010202020202020202020202020202020202030000070800000e0e0e0e0e0e0001121212121013072000000100221212121 | |
21222221212121222222223200e070113181e4000011212131d441a141a1410071410011213100704100001121210321213100113180e0e2e0e0007010212002 | |
31001600001616161616160616160011212121212121212121212121212121212101300000000000e0e0f100f2e0f21121212103210120202020022121212121 | |
3136001222223200e1f18100e1e000113100e500001122222223222322233200004270112132000041007011212121212131001131e0e2f0e000000011212121 | |
310006161616000000000000000000112103212121212121212121212121212121210130000000e1e04000000000001121212121212121212121212121212121 | |
31000700e481000000e00000e2e070113100132323320000710000e4000081000036001131000070423600112222222222320012328000e0e1e0701002212121 | |
310000000000004000004000000000112121212121212121212121212121212121212101308200d0e01130720000361121212121212121212121212121212103 | |
31000072e58282f400e0008200e0e21131000000820000d4007200e50000000000007012328080000000704200e4000081000000710000e0e000001121212121 | |
31a1a1a1a1a1a141808041a1a1a1a1112121212121212121212121212121210321212121013000e0e21101300000001121212121212103212121212121212121 | |
310010202020202020202020202020020120202020202020202020202020202030000400040000000000050000e5000000040400000072e00082100221212121 | |
31b1b1b1b1b1b141070041b1b1b1b1112121212121032121212121212121212121212121210130e0e01121310005821121212121212121212121212121212121 | |
31001121212121212121212121212121212121212121212121212121212121210120202020202020202020202030701030707070701030e27010022121212121 | |
012020202020203170801120202020022121212121212121212121212121212121212121212131f2e01121012020200221212121212121212121212121212121 | |
75005565656565656565656565656565656565656565656565656566666666666666666666666665656565656575005521212121212232007011212121212121 | |
21212121212222320000122121212121212222222222222222222221212121212121212121223261001222222121212121212222222222222222222222222121 | |
75005565656565656565656565656565656666666666666666667600f0e0f1e400000000c40000556566666676e4705521032121320071000012212121032121 | |
212121213100008170800011212121213100000000000000000000122121210321212122327100000071e0e011210321213200e1e0e1e0e0f100000000001221 | |
75005566666565656565656565656565760000000000c40000000000547400e50004000000000055750000e0d0e5005521212132e1d000076100122121212121 | |
2121212132000000000000122222212131a1a1a1a1a1a1a1a1a1a1a112212121212131e000e1e061e0e0f1e01221212131000000e2e0e0e0e036000000000011 | |
7500f6f1e056656565666666666666660016161616161616161616165584646464d6d6d6d6e600557570c6d6d6d6d68521213181e0f200000000361121212121 | |
2103213171000700708000e40081112131b1b1b1b1b1b1b1b1b1b1b1b1112121212132e0e0e0e0e0e0e1f1360012212131000000e000d0f2e000000000000011 | |
7500c5e0e0e0566676e0f0e0e400c400041636000000e1e0f1000000556565657500c400000000557500e1e0c4e0f25521213100f1f116161600001121212121 | |
2121213200000036000000e500001121012020202030b1b1b1b1b1b1b11121212131e1e0e2e0d061e0e0e00000811121317070707080e1e0e200707070707011 | |
7500e1d0f0f1e0e2e0e2e000e5360000741600f1e0f2e0e0e0e0f100556565657500000000c6d68584d6d6d6d6e68055212131e1e00016001600001121210321 | |
212131e0e1e0f100001020307070112121212122220130b1b1b1b1b1b1112121213100e2f0e0e0e0d0e0e0f10000122131000000e2e1e100e2f1000000000011 | |
750400e0e0e0e0005464646464646464750600e0e2e0d0e0e0e0f2e05565656575000000003600557500003600e0e055212132e0e2e016001600a01121212121 | |
212132e0e1e0e2e20012223200001121212132000012012030b1b1b1b112212121313600e2e0e061e0e0e0f1f182d41131808000f1f100a200e0e10007007011 | |
758000e2e2000054856666666665656584646464646464646464646485656565750000005474e0557570c6d6d6d6d6852131e0f0e0e016361600901222212121 | |
213200e2e0d0e0e000e1e0f10070112121327100008112210130b1b1b1b111212131000000e1e2e0e0f2e0e0e040701131000000e2e0f100000080e000000011 | |
84740000e0f170567600e4e2f25565656666666666666666666666666565656584d6d6d66676e055750000e0f10000552131e2e0e0f216001600908100122121 | |
320000e2e2e0e0e1e0e0f2000000122232000000070000112131b1b1b1b11221213200400000e061000000e0f24107113180800000f1f100000036f1e2007011 | |
6575360005e000e2f100e5f200556565000000c4000000e1f100000055656565750000e0f0e0e05565d6d6d6d6e6805521310000000016001600900000001131 | |
04050000e2e0f1f0e0e1e036007000e400000036000000122131b1b1b1b1b1113100004100408200000072f1103170113100000036e0d0e0e0e0e0e0e0f1e011 | |
6575007080e0005464646474d45565650005161616161616161616165565656575000000e0d00055750000e1e000005521310400000516001600900000001232 | |
808000000040e0e0f2e0f200000000e500040000000000001131b1b1b1b1b11131d4724100113004000540f1113100113180800000e1e0e0e0e0f1e0e0f27011 | |
6575d4e1e0e07056666666846485656564741600e1000000005474005565656575365464646464857570c6d6d6d6d68521317080808006161600900000007171 | |
007080000041e0e0e00000007210202030800072008200001131b1b1b1b1b111012023320011012020202120023170113100000000f1e0e0f2e0f0e000000011 | |
658474e0e2e20000e0e0c4556565656565751600e0e2e0e0e0557500556565657500566666666665760000e100c4f15521310000007200000000900072000000 | |
40008200f441e0e2e17200001002212101202020202020200231b1b1b1b1b111213100810012222222222222223200123280800000e2e0e0e0e0e0e0f2007011 | |
65658474e000546464740055656565656575060000e0e0f0e05575f45565656575000000c40000f6007080e2e0f0e05521012020202020202020202020202020 | |
2120203070112020202020200221212121212121212121212131b1b1b1b1b1112131003600e400e400e400e400e461e4e400040000050000e2e0e0e0e0000011 | |
65656584646485656575f4556565656565846464646464646485846485656565750000000061f4f605000000e2e0f25521212121212121212103212121212121 | |
2121210120022121212121212121212121210321212121032131b1b1b1b1b1112101300000e500e500e500e500e500e5e5007070708000103000e2e0e1007011 | |
65656565656565656584648565656565656565656565656565656565656565658464646464646465646464646464648521212121212121212121212121212103 | |
2121212121212121212121212121212121212121212121212131b1b1b1b1b1112121012020202020202020202020202020202020202020020120202020202021 | |
__label__ | |
22284882222444244202228888992aa9a99988888888222222422244444424422222228881968aa1f8f8faaa8faa828222204242428280828888282828222222 | |
2282888822224242242228288892a9aa99988888882282222424240444424422222221881619aaaf8ff70ff9fffaa82822222424222828288882828882222222 | |
22282882222224244442242288098a98988888828222222224424244444442222222221817619aa1ff7f7ffffffa888282222444422282882822288282222222 | |
22222220222244444442222282889888888888882822022242422444444422222222288817751a9ffff72ff98f98988822224444442428228222222222222222 | |
222222024222444444422222222288888888888882222222242024444422222222888888177751a5ffa8afa9a999888882222444444242222422222222222222 | |
42222227242422440422222222222828282288822222222200224444422222222888888817711a1a9a9afff99999988822222244442424422222222222222222 | |
22222222424224244242242222222222222228222222222222244444282222288888291991161aaa9998fff99999888822222224422444442222222222222222 | |
222422244444424444444442222222222222282222222222222444424222228288819797a9aaaaaaa9898f989999888082222242224244422222222222222202 | |
4222444444444444444444444222222222222222222822222222444422222228889979aa9a9aaaaa9a9898898988888828222222222442422242222222222222 | |
224244444444444041424444442424422222228222222222222244442222288889999a9aa9a999a8a9a928882888888882222222222224242424202222222222 | |
422442244f4440440424444244444424222222222220222222244442222208889999aaa9a9998a9a9a9288828888888888888222822822220442240222222222 | |
242422424404040042422422224444424222222222622222222444742220888889a8aaaaa99999a9992888282888888888882828288282224442420202222222 | |
42440424220000000424222222244444442424222222220226444442282878879a9aaaaaaa99a999828282822228828888888282888222224440020022222222 | |
42444242400940f0444222222222244444444202822200220244442220008887aaaaaafaa99a8a88882822222222222888888888882222220409402202242224 | |
242244240004f000404022222222222444444422282070002444442207070889aaa9afaaaa98a898888222222222222828888889888222280004f00422222222 | |
22444442007e81f0442222222222222222444222228076604624404077007099aaaaaafaaa82898888822222222222228289889888882422007e81f022222222 | |
244444240fe892004222222222222222222444222228606002224407770070999aaaaaaaa8a89888882222222222222228888899888802280fe8920242222222 | |
244442242045540022222222222222222244444220728002022222067700709999aaa8898a898988282222222222222228888888988982822045540024222222 | |
24442242400d1010022222222222222222244444077728202422442067006099999a9a989892988280222222222222228888888988888822200d101042422222 | |
44442224444444422222222222222222224444444076028222444242060601999989a9a989888828222222222222222288888898888888222222244424422222 | |
44444244444444422222222222222222222444442400222222422422200018118898998898828282222222222222222288882888888888822222824244242222 | |
24442424444400222200000111112242222244444440000011244242200011888889989888888822222282222222222222800000001111282222242444424244 | |
424444444440770000777770011112242222244444077666011224220766011288888988882228222282282222228222220dddddd50111222222224444484444 | |
44244444420777777777777770111122422222444077776660112220777660112888888822222222222822222222222220dddddd555011122222224444444444 | |
4242444422077777777777777601111122222224407777766601112077776601122222828222222222228222222222220dddddddd55501122222242444444442 | |
2224222222077777776777776660111212222222200777777660111207777660112222222222222222282282222222220dddddddd55501122222204242424244 | |
22222222220777777660077776660111222222222200000777660112207777601122222222222222222222222222222200dddddd555011122222222222242422 | |
2222222222077777760110777766011222222222222000007776011120777760111242242422222222112222222222202200ddd5500111121221122228224222 | |
2222222222007777760110777776011122221221122200007776001120777760001414444442211221111222228222282020ddd5501111140001112222222222 | |
2222222222200077760110777766011422222211112207777777660120777660660144444400001100001122282222224240ddd550111110dd50111222222822 | |
2222882282220077760100777766014000120200011207777777766010777776666014444076601066660112222222242440ddd55011410ddd55011122228222 | |
2288888888220077760077777660140766012077601120777766666010777777666601440776600776666011122222424440ddd5501110ddd555501122282822 | |
8888888888202077770067770001107766011076660112077666660110777777776601107776667777766601212222204d40ddd550110ddddd55011122228222 | |
8888888887820077777677770111407766011077660112077660001110777777777660007777677777776601222222244440ddd55010ddddd000111122282222 | |
8888888878882077777777770011207766011077660112077660111140777770077760077777777777776601222222244440ddd55010dddd0001111122222222 | |
8888888788888077777777776011107766011077660110077601111440777701077760077777077700776601222222444420ddd550110dddd550111222222222 | |
88888888888880777700077660111077760110776601120777011111407777010777600777770077007766012222424444d0ddd5501110dddd55011222222222 | |
8888888808800077760107776011107776010777660112077760001110777701077660107777010040776601222444444d20ddd550111100dddd501122222222 | |
8888888888077077660107777600007777607777660112077666660110777701077660107777011040776601222444440220ddd55011001100dd550122222222 | |
8888888880777777660107777666007777777777660112077766666010777701077660107777011440776601444444422220ddd55010dd0000dd550142222222 | |
888888888077777766010777776660777777777766011107777777601077770107766010777701144077660144444442220ddddd5500dddddddd550144122222 | |
88888888800777776600777777766000777777776601120077777602107777010776601077770114407766014444444220ddddddd550dddddddd501144242442 | |
28888888808077766600777777770220777770776601142407777020200777010776002007770112107760444444242220dddddd55500ddddd55011144424224 | |
888888888800776660100777770022220000007766011244400000220220000200002222000011112000044424142222220ddddd550110000000111144442442 | |
28288888228206600224007770202220001100776601124240020222220200012222222220001112420400422222422222200000000112022222111242429244 | |
82222822222220002220400000424440770010776601122422222222222000222222222222202121200200222224242222200200000110200222222224222222 | |
22222222222220000222400000444407777700776601122222222222220222202222202022222211422202222222222222220220202222020022222122222222 | |
2222222222222202024224000440440777777776660112222288222221112222024202020222222222222222222224222222111111112122800022118a822227 | |
2222222222222222042420004444040077777776602818a000000000000111222022242111122222221111222222022000000000000112222282128888188282 | |
22222222222224242247200004411120077676666088810777aa99988890111242222400011142200000111222222a07aa888888888011222828289888888829 | |
22222224422240424200000000001112200666660888809777aaa98888890111444200998011100999990111222220777aa88882289901181282888a88888899 | |
2222224444204404402288899777011122000000008809a777aaa882288890114440799888010999888990111022099777a88822422970188928888889888999 | |
224224244444444420222888997770112220000090a099aa7aaa982222289901440777888880099422889901118088887a98882444277701889a8889989a9a9a | |
2424424244044444402242888997701122220909f970999aa99998222222890144077788888009444228890111208888889988824222770118a9a9999af9a9af | |
224244442444444440244428889701112228899f97a099999990000222222801440777822880102422288aa0118088888880000822288901119997a9a7a7a7aa | |
2224244442444244400244488890111122288909fa708899990119002222280144097822228011022288aaa0118084428801002088888801199999a7a7f77a7f | |
282244422444242400004442880111112228989faff08888990111008822880144409822228011002888aaa018804444280100008888880111998a9a7f7f77f7 | |
04224442424242404440247228011112828989aafa708822890111908882280144009822420114402288aaa0182084422801000088882201181898affff7777f | |
4244442424222222044027772801111128909a6fa7f08222280111908822220144408824440114402288aa01222082222801002088822201119187f7fff777f7 | |
242444424224222220002272280111211189aaaf7f708222280111808822220144408244420114402228aa011220992288012020882222011919797fff77af77 | |
224444444242422204402222280111181811aafff77082222801119099222201142082242801144022288a01222099988801201082222201199a9ffff7777777 | |
2244444424242424422022222201118888aafa7f77f0222228011110992222011040822228011440222288012220999888011020222228011897faff77777a77 | |
22244442822222422220222222011188898aaf77777022228801111092242201104082222801114022228801222099888801102024228801197aafa7f777077f | |
22424242242222222220822222011188989aaf777770222228801109924448012410822228011120822888014220988888801202444288011aaffa7f7777777f | |
2224222444242422228088222201119999aafa777770222422880099922444012240822228011120888228011420988888880092444888011affff77777777f7 | |
222822224442444222208882220111999affaf7877f08244428888899824440124208822880112208822220144408428888899922428880111fff7777777777f | |
2222222222244404222098888801119aafaff7f7fff08844428888899822420122408888aa011120882222014440444288889982222888011ff7f7777f7fffff | |
22922222224444222220a788880111aaf7faff7ffff0822422888889922222012220888aaa01122098422201244024448888988222228801117f7777ffffffff | |
222222222224422222207778880111f77f7f7777fff022222888888aa2222801222088aaaa011110944442011220244448888888222288011717777ffffffaf0 | |
28282222222442222280777a88011177777711770f202222288800aaaa22880122209a7a7a01112099444401222022442288002222228801177777fffffaafa7 | |
828222222244442228207777a801111777711111ffa08222228800aaaaa8880122209777770112209924420122208222228800222278890117777f7ffffaaa99 | |
22882282224444422280777aa80111fff0000111faf088222280180aaaa99901122099777801128099222201222098822880000227779901177777ffff0aa999 | |
2222822222242402228087aa980111ff0aaa90111fa0888228011880aaa99901121099878801180999222011882098888801180027779801177777fffaaf9999 | |
22222802222244222820888899011110a77aa9011aa0888888011180aa7a990111209888880112099822201188209aa8880119809979880117777ffffaa9f999 | |
2228222222244222228088888901111077777a011990888889011180a777a9011110988888011088822201118880aaaa880118909998880111777aff9a999888 | |
22222222222202222280288888900100877777011190988899011120a77779011120988882010888822011988820aa7a790118809988880111777aaaa9999888 | |
2222222222244922220222288889908889977a011f09997999011180aa7779901120a7a82220442222011998880aa7777701188098888880117777aa99999988 | |
22222222224442222022222228888422889aaa01f909977799011180aaa7aa901110777a2224444220111988880aaa777a0188809888888017f77aaaa9999888 | |
22222222224424220822442222224442288aa0aaa0aa77779a0111109aaaaaa901107777822244220111919880aaa9a7aa01189098888888077aafaaaa988888 | |
222222422244422208844442222224442888a0faa0aaa7777a01112099aaaaa90110a777aa22222011198989809999aaaa01188098888888077afafa99999888 | |
22222222224442220088444422222242888000ffa0aaaaa7a0011222099aaa9901100a7aaaa98008819898988099999aa02128880888888807faffa999999888 | |
4222244224444222000000000000000000070ffaaa00000008011222200000001114400000000088898898880800000004021888000000000f9fafaa99999880 | |
24422444444422220808000a0a00070770707faaa90000008081128220202000114444000002088888898928808800004420109889090000a9faf9a998999888 | |
4242224244442222888888aaa0a0a07af7f7faaaaa909088088888202222000414142022022228880888988808222020444401228890999a9aa0aa9a99898989 | |
42222224444222222888888aaa09aaaaafaa0aaaaa9908888888128222222040444222202222228018888882802222024444222288890809890aa9a999989999 | |
242222244422222222888888909a9aaaaaa00aaaa999898888818122022222444422222222220828288888889200202424424222282288889891999999999999 | |
4222222444222222222888888809a99a990aa9aa9999989888088229202224442222222222208282228288822220202244442222822288888989999899999999 | |
2222828242222222222280880880999989999999a999998887882822020444422222222222224822422228222222224244442422242228828828999989999999 | |
222222288222222222222222882829989889999999999a9878888222424444442222222228248222222222922222222444444242424222222882899889999999 | |
22222228282222222222222222828289888899999099999988882222244444422222212082882822222242242244222444244444242222222828888899999a89 | |
2228222282282822222222222222222888889899999999990888822224444022222222282882822222222022224444444424444242222222228288889999a9a9 | |
22222222228282222022220222222222888a89899999999988888222244224222228228282882222222222042224444442424224222242222222288889899a9a | |
a22222222822222222222222222222228808888999a999998888822224422222228288288828222222224240424444242424222422242422202222888099a9a9 | |
2a228288882220222002222222222222298888a8889979908888222224442222222888200002422224242044a4444442224222424222422222222288089a9a9a | |
82a8280000002202022024000000000002008888089999888800000004440002208882009900000002224000444444422900000422020224222222088989a9a8 | |
282282099900002020224209990a0a000000888888999098880888000000002202888809440aaa00000200404444444424088800000000444422228888909900 | |
822828094900000000202404940a0a077700000888800000080282009900000020888809000a9a07070004044400000040088809090200040000000000097907 | |
298288099400000000000000900aaa07d70000000000aa08080080094900002008288209090aa90707000000000aaa000008280909000000000888009000980d | |
22288809490aaa0777044400900a9a0777088009090a9900808080090900a00202820809990a9a0707088009990a9a07770808090900aa077708220940008807 | |
228222099909a907dd00400040090907d708280994090a080800200994009020002202044409090d77088009940aa90ddd020204990a990d7d08000400000807 | |
222222044400a007070400400000000d0d080809490aa900002000044000a0020020220000000000dd082809400a9a000000000044090a00700888000000000d | |
22222200000aaa077700000000044400000808090909900002020200000090000202022222000220000888099909090000040200000aa9077702220000000000 | |
242222222209990ddd000044444444444402020404000000002022204440002020222222222222220402220444000000004040222209900ddd00000020202222 | |
42428222220000000000440444444444440000000000020000022224444442422222222922222224400000000000404440040242420000000004044202020222 | |
242424244424244444444444444004444044442222442a4444242244444424222222202222224244242404444444444444444404442424444444444024222244 | |
44424444444444444444444444404444444444424444424244424444444442442222224242422444444444244442444444444444442444444444444242224224 | |
04444244444444444444444444024000004444444044442444444400000004444424442444444444424442424244444444444444444444444444442424242444 | |
44222424242422444444444444474077700000000000000000444007777700444000000000444400000000000000000000244444444444444440424442244444 | |
222222222222222b424444244444407d707770777007700770072077d7d770444077700770444007707770777077707770444424440244444444422442222222 | |
22222222224222442444444444444077707d7077d07dd07dd02220777d77704440d7d07d7044407dd0d7d07d707d70d7d0044242222224444444444342222222 | |
2222222828202b22224444424242407dd077d07d00d070d070222077d7d7704420070070704440d0700700777077d007000402222222224b4444444422222222 | |
22882282820002202424442424244070007d70777077d077d02720d77777d00220070077d0444077d007007d707d7007004244222222222e2444444422222222 | |
888888280882022242444442424440d040d0d0ddd0dd00dd0002000ddddd0022220d00dd000440dd000d00d0d0d0d00d00242222222222222244404222222222 | |
28888888882820242224444444224000400000000000000000222000000002222200000000474000000000000000000000022222222242222244442222222220 | |
88888889888000022224444444222420440020020002002202022202004022222202002022042000000200020202040404042222222022222440402222222202 | |
88889898980000222224444442222204444222020202222220222220240222222220222222024020222222222020424044402222224222222440024222222220 | |
88898989008000222222244444424444444420202022222222022222444222222222222224242422222222222222242444002222222222224240042422222222 | |
88899999980ab032222244444444444444420220202222222222224444222222222222222242422420222222222222404042222222222222240ab04222222222 | |
88999999000b3002202244444444444444202222222222222222222444422222222222222424d44442202222222220244422222222222222000b300222222228 | |
9889985900ae123022222244444444444442222222222222222222244442222202222222024444444222022222222244447222222422222200ae123022222282 | |
99999b9803b385002322222444444d444442222222222222222222424424222d222222242242444422222222222224d4444222222222222203b3850022222228 | |
9999999980b534002222222204444444442222222222222222222424404242d02224222224242424442222222d224444444222222422222220b5340042222222 | |
99999999900b1010282222222442444444222442220200224242444444442240042222242242424444422222244244444424222222222222220b101024442222 | |
98989999898888822222222222244444424444442222224224244444444424444242222242442422442222224444444444442222222222222244444242444222 | |
89899889988888822222222222224244444444422442422442444444444444444424424424424242244222244444442444424224222222222244444424444222 | |
98999888888888882282222222222424444442444444244444444444444444444442222444442422444442444444424444042222422222222224444444444424 | |
99899888888888888822222282222244444424044444444442444444444444444422442224224422444444444444242444442224444224224242442444444444 | |
09888089888882888282222828222244444442224224444424244244404444242244444222024244444444444202424444424444444442442422224424224444 | |
__gff__ | |
0009090909010102020000000000000001010101010002000000000000000000010101010100000000000000000000000109090909000000000000000000000000000000000909090100000000000000000000000001010101000000010000000000000000010101090000000909090100000000000000000000000000000000 | |
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
__map__ | |
1212301212121212121212221212121200090063000000000011121212121212121212121222221212222222222222121212121212121212121212121212121212121212121212121212121212222212121212121212123012131b1b1b1b1b111222222222222212122222222222221212121212121212121212121212121212 | |
12121212121212121222230e212212120009000000000000011212121212121212301212231e0e21230e2e0e001700211212121212121212123012121212121212121212121212122212121223181e211222222222222222221202020202021213000017000e1e11130018000017002122221212121212121212121230121212 | |
12121222222222222363000e1f0021121a1a1a1a1a1a0102202222222222222212121223180e0e00180e1e0e00000000121212121212122222222212121212121212123012121223001112231e0e0e0e131e0e0e1f17000000112222222222222340010232330011130005050505004e0e0e2122121212121212121212121212 | |
12122300170e2f0018001e0e0e0e17111b1b1b1b1b01122223700e1f4e001700121213001e0e0e63270e0e1e27280000121230121212231718700e2112123012121212121212130000212300000e2f00130e4f010300002700141f180000004e0007111300002711130005050000005e400d180e212222221212222222221212 | |
1213701e2f0e0e00001e0e0d0e2f0e111b1b1b1b1b111318000f0e0e5e2800001212131f0e0e1f0102020202020202021212121222231e1f002e0e0021221212122222221212230000634e0027010202100202201002020300140e010300005e02022022330031121300050505160501080e1f0e0e0e1700212300171e0e1112 | |
1213630000001f0e0e0e0e2f000000111b1b1b1b0112230000042700010202021212130e0e0f011222222212123012121212122317002e0e1f0e1e16181711121370001e21230e0028005e0001121212122222222222222307140d111307310212222318001e1811130505006300001102032e0e0e0e0063004e002e0e271112 | |
1213004000001e0d0e2f0e00005000111b1b01022013000007110202201212121212130707072123001700212222221212121300000e0e002e161f0000002112130e0d0e000e0f0e01020202202222121300630018002800001470111300001113630000040e0e1113000016051600113013004f272f4d00285e1e0f00011212 | |
1213070708000e0f0e2f00630707071102022012122363000011121212222212301213002e00000000000d1f171870111212134f01030063000e0d1f001e0d1113002e04002e0e0e1112222223180011130701323232323232230e11120307111328041e11020220130005000505051112100202020202020202030e0e111212 | |
121300000000000e0e0e0e0000000011123012222300000007113012130e0a111212100202020308001e0103080000111222100220100308002e0e0e0e0e0e11130800140863000721230e0e0e003112130014001e0e0f0e0e0e0e1112130011123223001112301213050516050505111212121212121230121212032f113012 | |
12131e0e1f0e1e0e2f2f0e0e0e0e0e212222231700004f00001112121203091112121212301210020202201363000011130e2122222223000000000f0e1e501113004d140000000017000000044d00111307140731323232031e2f21222307111300002711221212130000000505051112222222222212121222222300211212 | |
30130e0f0e000e0e2f00000e0e2f000000000d0e1f000407072122221213091112222222222222222222222308000711230f1f001817000707080e0e2f6307212232322307080000000007072132321213001400001800001463270017000011131e3132230021121300050505000511131f0e0d180011122300001800182112 | |
12130000000000000000000000000000270040000e1f140000502e0e11130911234000000017001e180f0e1f0000501100400e0e1f0027001e1e2f2e0e00004e0018180000000000270000000000001113072132323203071102323232020220130e0e00186317111300000000000011130e0e1f006321231700000000001e21 | |
12130707070707070707070707070708030707080807240708070707212309110016000000001e0e0e0e0e0d0e000711001600282e010202020300280e00005e00000040001e01020202030000500011130000170000140011130e1f001112121232323232330011130505050505001113500e2f28004e0000000000282e0f0e | |
12131a1a1a1a1a1a1a1a1a1a1a1a1a1a131a1a1a1a1a1a1a1a1a1a1a1a1a1a110000000027002e2e1f0e280e0e1f001102020202022012121210020202020202020203082e0e11121212132800070112223232323307140721231e04072122121300002800000011135000000000001113080e0103005e00004d0001031e0e2e | |
12131b1b1b1b1b1b1b1b1b1b1b1b1b1b131b1b1b1b1b1b1b1b1b1b1b1b1b1b110202020202020202020202020202022012121212121212121212121212121212121210020202201212301002020220120040002800001400171800140000501110034f0470010220131627052805051110020220100202020202022010020202 | |
12131b1b1b1b1b1b1b1b1b1b1b1b1b1b131b1b1b1b1b1b1b1b1b1b1b1b1b1b11121212121212121230121212121212121212301212121212121212121212121212121212121212121230121212121212000701020202120202020212020307113012021300111212100202020202022012121212121212121212121212121212 | |
1212121212121212121212121212121212121212121212121212121212121212121212301212121212121212121230121212121212121212121212121212301212121212123012121212121212121212130000212212121212121212121212121212222300212222222222222222121212121212121212121212121212121212 | |
30121212222222221212121212121212121212121212122212121212121212121212222222222222121222121212121212122222222222222222121212121212121212121212122212121212121230121308001e0e2122121212121212121212122300171600181e0e0e0e2f0000211212121212121212121212123012121212 | |
121212230000000a21222212121230121212121212222317212212121212121212131e0e0e2f0e0e212300211212121212130063000000000000211212121212121212222222230021222222121212121300000e0e0d1f2112121212121212121300002e0e0e0e0e0e0e2f000000171112121212123012121212121212121212 | |
121223181e00000900180021121212121212301213000000001821121212301212134d010363282f004e70001112121212230000002800000000001112121212121223001800000000170000212222121003002e2e0e0e2f21121212123012121370000e160e2e00000000000000001112121212121212121212121212121212 | |
122300002e0e7009000000002122221212122222130050010300001112301212121002201002030e005e000120121212130000000102030800000120121212121223170000630000000000000000001112130800000e0e0e1f111212121212121300382e0e37003d003c002c001d001112121212121212301212121212121212 | |
13000016000e1f091e00001e1e0e1f1112231700213232222308001112121212121222222222230f070102201212301213700701122223000027111212123012130000000000000000000005050505111213000000700e0e0f21121212121212132700160e000028000000270000001112121212121212121212121212121212 | |
13000063002e00091e0e00630f0e0021230000000000001e2f0e1f2112121212121300004e172e0e00111222121212121328001123004e0007312222222222222305050505000005050505050000701112130800000e0e0e0e2f111212121212100308000e070701020202020232322222222222121212121212121212121212 | |
1003000000162e090e0e0e000e00001700000061616163000e0d0e0e21222222121340005e000e0e01201317211212121002021300005e0063000000000000004000500005050505000000000000051130134050000e2e1f0e2f111212121212121300002e0e1f11121212122300170063000000211212121212121212121212 | |
1213004000000e091f0f0e1e0e0027002700006104610000000000630018004e12230731323232322222230050111212121212130001030000002700000028000408080000000000000505050500051112130708002e0e00010220121212121212130808000e0e11121212230000000000004000002112121212121212121212 | |
1213281600000e091e0e1f0e000001020300006114616161616161616100005e270000000000001e2e180000072122121212222307111002020202020202020213050505050505050505000000000011121002020202020220121212121212121213002e0e0e0e11121223180000000102030800001721121212121212121212 | |
121003001e0e2e091f0e0e00500120121340616114000400001f0000616161010300004f006300270e000000280017111213002800112222222212121212121213000000000000000000000505050511121212121212121212121212121212121210030e0e0e0d11122318000000271112100300000000211212121212121212 | |
1212131e0e0e0d092f0e1f63071112121308610113001470000e2e0e1f00071110020202020202020202020203000711121300040814006300001112301230121300050505050505050505050000001112121212121212123012121212121212121210030e0e0e11230000630000012012121003280000002112121230121212 | |
222210030e0e63090e0e0e00001112121003601113001408000f2f1e1f0e0021121212121222222222222222231f001112134d140014004d044d112212121212130005053400000063000000000500111212121212121212121212121212121212121210030e0e24180000000001201212121210030000001711121212121212 | |
00001110020300091e0e1e01022012121210022013001400002e0e0e2e2f0e1f1230121223004e1800001e0d0e0e071112223223072407072407240021222230130000004e0005050505050505050011121212121212121212121212123012121212121210030e1f000000000120121212121212100363000011121212121212 | |
1a1a2112121300090e0102201212121212121212134f141a1a1a1a1a1a1a1a1a1212121300635e004d002e27001f001113000000280040405050002700000011134f00285e0005000000270000000011121212301212121212121212121212121212121212100203400000012012121212121212121003000011121212121212 | |
1b1b1b21221003090e11121212123012123012121002131b1b1b1b1b1b1b1b1b121212130000010202020202020202201002020202030707070701020202022012020202020203000001020202020212301212121212121212121212121212121212121212121213070801201212121212121212121213000011121212121212 | |
__sfx__ | |
01200000113111131111321113250f3240f3220f3220f325163241632216322163251f3241f3221f3221f3250c3240c3220c3220c3250a3240a3220a3220a3251632416322163221632503324033220331103311 | |
012000200c0730c575246130c5750c0730c57524613246130c0730a5750a5750f073246130a5750f0730a5750f0731157524613115750c0731157524613115750c07307575246130f07307575075750c07324613 | |
00200020163351b3351d3351d3351b3351633513335163351b335183351b335163350f3351b33516335183351d3351f3352233527335223351d3351b33518335163351d3351333511335133351b3351833513335 | |
00200000113221132505422054250f3220f325034220342516322163250a4220a4251f3221f32518422184250c3220c32505422054250732207325034220342513322133250c4220c42507322073250342203425 | |
01100000294251d4051d42511405274251b4051b4250f4052e4252e40522425224053742537405304253040524425244051d4251d4051f4251f4051b4251b4052b4252b40524425244051b4251b4051942519405 | |
0110002018023185253061318525180231852530613306131802316525165251b02330613165251b023165251b0231d525306131d515180231d525306131d5251802313525306131b02313525135251802330613 | |
012000001d33522332243322433224335223321d3321b3321833516332163321b3321f335223321d3321b33218335163321333211332113351133213332163321833518332183321833216335183321d33222332 | |
011000000c33300003000030c3330c3330c333000030c3330c30000000000000c3000c3000c30000000000000c33300003000030c3330c3330c333000000c3330000000000000000000000000000000000000000 | |
01100000133301b3301d3301d3301b330163300f3302233003325033250332503325033250332503325033250a33013330163301b3301d33013330113300f3300a330163301833016330133300f3300733005330 | |
011000201d33522305243352430524335223051d3351b3051833516305163351b3051f335223051d3351b30518335163051333511305113351130513335163051833518305183351830516335183051d33522305 | |
010800201d33222302243322430224332223021d3321b3021833216302163321b3021f332223021d3321b30218332163021333211302113321130213332163021833218302183321830216332183021d33222302 | |
012000001d33224302243321d3021833216302183321f3022433224302223321f3021b3321830216332183021b3321f3021d3321b3021833216302163321b3021d3321f30224332273022733227302223321f302 | |
01080000113321830218332113020c3320a3020c33213302183321830216332133020f3320c3020a3320c3020f33213302113320f3020c3320a3020a3320f3021133213302183321b3021b3321b3021633213302 | |
01080000113321830218332113020c3320a3020c33213302183321830216332133020f3320c3020a3320c3020f3320f31211332113120c3320c3120a3320a312113321131218332183121b3321b3121633216312 | |
011000200c0530000330615000030c053306050c053000030c05300003306150c05300003000030c053306150c0530000330615000030c053000030c053306150c053000033061500003306150c0530c05300003 | |
011000001b355183551b35516355183551335518355163552235527355223551b3551b355163551d355243552235527355223551b3551d355163551d355183551f355223552735522355243551d355223551b355 | |
0110000027355293052735522305223552230524355293052e3552e3052e3552b3052735527305293552b3052e355303052e3552b305293552730529355293052e35533305333553330530355303052e3552a305 | |
010800000f355113050f3550a3050a3550a3050c35511305163551630516355133050f3550f305113551330516355183051635513305113550f3051135511305163551b3051b3551b30518355183051635512305 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
010600002b270222601d2501d2001d200002000020000200002000020000200002000020000200002000020000200002000020000200002000020000200002000020000200002000020000200002000020000200 | |
001000002b350223501b35016350113500c3500335000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300 | |
010500000066500005006450000500615000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005 | |
010d00000015400104001040010400104001040010400104001040010400104001040010400104001040010400104001040010400104001040010400104001040010400104001040010400104001040010400104 | |
001200001d355223551b3551635513355163551b3550f30511305183051b3051b3051d30500305003050030500305003050030500305003050030500305003050030500305003050030500305003050030500305 | |
011000000037304323043030030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300 | |
000500002435029350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
000500001f47524450004000040000400004000040000400004000040000400004000040000400004000040000400004000040000400004000040000400004000040000400004000040000400004000040000400 | |
0105000003675006050c6751167500605006050060500605006050060500605006050060500605006050060500605006050060500605006050060500605006050060500605006050060500605006050060500605 | |
010500001f57500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505 | |
0110000013355183551f3550030500305003050030500305003050030500305003050030500305003050030500305003050030500305003050030500305003050030500305003050030500305003050030500305 | |
01100000293551f355163550000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005 | |
__music__ | |
01 40014344 | |
00 00014344 | |
00 03014344 | |
01 04054344 | |
00 02054344 | |
00 06054344 | |
00 09054344 | |
00 0a054344 | |
00 0b054344 | |
00 0c054344 | |
00 0c054344 | |
02 0d054344 | |
00 41424344 | |
01 4f0e4344 | |
01 0f0e4344 | |
00 100e4344 | |
02 110e4344 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment