Skip to content

Instantly share code, notes, and snippets.

@justinj
Created August 29, 2016 01:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save justinj/145f479b9dffeed512eac52ec1c7a49b to your computer and use it in GitHub Desktop.
Save justinj/145f479b9dffeed512eac52ec1c7a49b to your computer and use it in GitHub Desktop.
pico-8 cartridge // http://www.pico-8.com
version 8
__lua__
-- ive spent so much time with the celeste codebase recently that im just going
-- to clone its structure x_x
types = {}
function solid_at(x, y)
local t = mget(flr(x / 8), flr(y / 8))
return fget(t, 0)
end
function birth(t, args)
local this
this = {
x=0,
y=0,
spd={x=0, y=0},
rem={x=0, y=0},
t=t,
move=function()
if not this.solid(this.spd.x, this.spd.y) then
this.x += this.spd.x
this.y += this.spd.y
end
end,
solid=function(xx, yy)
local ax = this.x + xx + this.hitbox.x
local bx = ax + this.hitbox.w
local ay = this.y + yy + this.hitbox.y
local by = ay + this.hitbox.h
if solid_at(ax, ay) or solid_at(ax, by) or solid_at(bx, ay) or solid_at(bx, by) then
return true
end
local h = this.hit(door, xx, yy)
return h
end,
hit=function(t, x, y)
x = x or 0
y = y or 0
for e in all(this.world.entities) do
if e ~= this and e.hitbox and e.t == t then
-- terrible nesting doesn't count if you don't indent
if e.x + e.hitbox.x < this.x + this.hitbox.x + this.hitbox.w + x then
if this.x + this.hitbox.x + x < e.x + e.hitbox.x + e.hitbox.w then
if e.y + e.hitbox.y < this.y + this.hitbox.y + this.hitbox.h + y then
if this.y + this.hitbox.y + y < e.y + e.hitbox.y + e.hitbox.h then
return e
end
end
end
end
end
end
end
}
t.born(this, args)
return this
end
function indicate(b)
return b and 1 or 0
end
player_speed = 0.5
step_size = 4
function move_camera_to(w, x, y)
return {
update=cocreate(function()
for i = 1,10 do
yield()
end
while abs(w.cam.x - x) > 1 or abs(w.cam.y - y) > 1 do
w.cam.x += (x - w.cam.x) * 0.2
w.cam.y += (y - w.cam.y) * 0.2
yield()
end
for i = 1,10 do
yield()
end
w.cam.x = x
w.cam.y = y
end)
}
end
function show_message(world, message)
local showing = 0
local totallen = 0
for m in all(message) do
totallen += #m
end
return {
update=cocreate(function()
local done = false
while not done do
showing += 0.2
if btn(4) or btn(5) then
showing += 1
end
if showing >= totallen + #message*5 then
if btnp(4) or btnp(5) then
done=true
end
end
if showing > 1000 then showing = 1000 end
yield()
end
end),
draw=function()
local thisshowing = showing
for y = 1, #message do
for i = 1, min(thisshowing, #message[y]) do
local extra = rnd() < 0.01 and rnd()*4-2 or 0
print(sub(message[y], i, i), world.cam.x + i * 4, world.cam.y + y * 6 + extra, 7)
end
thisshowing -= #message[y] + 5
end
end
}
end
function wait(n, after)
return {
update=cocreate(function()
for i = 1, n do
yield()
end
after()
end)
}
end
function bar_thing(wfunc)
return function(w, after)
local t = 0
return {
update=cocreate(function()
while t < 60 do
t += 1
yield()
end
after()
end),
draw=function()
local h = 128 / num_bars
for i = 0, num_bars - 1 do
local y = w.cam.y + h * i
if i % 2 == 0 then
rectfill(w.cam.x, y, w.cam.x + wfunc(t), y + h, 7)
else
rectfill(w.cam.x + (127 - wfunc(t)), y, w.cam.x + 127, y + h, 7)
end
end
end
}
end
end
num_bars = 16
screen_out = bar_thing(function(t)
return t*t/10
end)
screen_in = bar_thing(function(t)
return 300-t*t/10
end)
function cardinals(x, y)
return {{x=x-1,y=y},{x=x+1, y=y}, {x=x, y=y-1},{x=x,y=y+1}}
end
function get_target(x, y)
local result = {x=x, y=y}
for s in all(cardinals(x, y)) do
if mget(s.x, s.y) == 17 then
result = s
end
end
return {x=result.x, y=result.y}
end
function sign(x)
if x == 0 then
return 0
else
return sgn(x)
end
end
function appr(x, t, v)
if abs(x-t) < v then
return t
else
return x + v*sgn(t-x)
end
end
function expappr(x, t, amt)
if abs(x-t) < 0.01 then
return t
else
return x + (t - x) * amt
end
end
function speed_fn(t)
local s = sin(t) - 0.5
if s < 0 then
return 0
end
return s
end
function dot(a, b)
return a.x*b.x + a.y*b.y
end
function norm(vec)
return sqrt((vec.x/1000)^2+(vec.y/1000)^2)*1000
end
function dist(x1, y1, x2, y2)
local vec = {x=x2-x1,y=y2-y1}
return norm(vec)
end
function direction_vec(x1, y1, x2, y2)
local vec = {x=x2-x1,y=y2-y1}
local len = norm(vec)
return {x=vec.x/len,y=vec.y/len}
end
function is_block_between(x1, y1, x2, y2)
local dir = direction_vec(x1, y1, x2, y2)
local d = dist(x1, y1, x2, y2)
local iters = d/4
local result = raycast(x1, y1, dir)
return mid(x1, result.x, x2) == result.x
end
function raycast(x, y, direction)
for i = 1, 100 do
if direction.x == 0 then
h_vectors = 1000 -- a lot
elseif direction.x > 0 then
local xdist = abs(x % 8) < 0.0001 and 8 or 8-(x % 8)
h_vectors = xdist / direction.x
elseif direction.x < 0 then
local xdist = x % 8 == 0 and 8 or x % 8
h_vectors = -(xdist / direction.x)
end
if direction.y == 0 then
v_vectors = 1000 -- a lot
elseif direction.y > 0 then
local ydist = abs(y % 8) < 0.0001 and 8 or 8-(y % 8)
v_vectors = ydist / direction.y
elseif direction.y < 0 then
local ydist = y % 8 == 0 and 8 or y % 8
v_vectors = -(ydist / direction.y)
end
local amt = min(h_vectors, v_vectors)
x += direction.x * amt
y += direction.y * amt
local tile
if h_vectors < v_vectors then
x = flr(x/8+0.5)*8
tile = mget(flr((x + sgn(direction.x))/8), flr(y/8))
else
y = flr(y/8+0.5)*8
tile = mget(flr(x/8), flr((y + sgn(direction.y))/8))
end
if fget(tile, 0) then
return {x=x, y=y}
end
end
return {x=x, y=y}
end
function rot_vec(vec, amt)
return {
x=cos(amt)*vec.x + -sin(amt)*vec.y,
y=sin(amt)*vec.x + cos(amt)*vec.y,
}
end
function line_dotted(x1, y1, x2, y2, len, c, t)
local d = dist(x1, y1, x2, y2)
local dir = direction_vec(x1, y1, x2, y2)
for i = 0, d/len do
if i % 2 == 0 then
local startptx = x1 + i * len * dir.x + rnd()
local startpty = y1 + i * len * dir.y + rnd()
local endptx = x1 + (i + 1) * len * dir.x
local endpty = y1 + (i + 1) * len * dir.y
if x2 > min(startptx, endptx) and x2 < max(startptx, endptx) then
endptx = x2
endpty = y2
end
endptx += rnd()
endpty += rnd()
line(startptx, startpty, endptx, endpty, 7)
end
end
end
door = {
born=function(this, args)
this.hitbox = {x=0,y=0,w=16,h=8}
this.x = args.x
this.y = args.y
this.is_solid = true
end,
update=function(this)
end,
draw=function(this)
spr(51, this.x, this.y, 2, 1)
end
}
types[33] = door
exit = {
born=function(this, args)
this.hitbox = {x=0,y=0,w=8,h=8}
this.x = args.x
this.y = args.y
this.world = args.world
end,
update=function(this)
local h = this.hit(player)
if h then
world=end_world()
end
end,
draw_after=function(this)
end
}
types[55] = exit
function onscreen(world, x, y)
return abs(world.cam.x+64 - x) < 80 or abs(world.cam.y+64 - y) < 80
end
local guard_speed = 0.3
local guard_fov = 0.1
guard = {
born=function(this, args)
this.x = args.x
this.y = args.y
local gx = flr(this.x / 8)
local gy = flr(this.y / 8)
this.hitbox = {x=1, y=1, w=6, h=6}
local target = get_target(gx, gy)
this.dir = {x=target.x-gx, y=target.y-gy}
this.target = {x=gx + this.dir.x, y=gy + this.dir.y}
this.state = waiting
this.world = args.world
this.see_player_amt = -1
this.chase_mode = false
this.frozen = 0
this.time = 0
this.exclm_y = 0
end,
save_props={
'x','y','dir','target','state','chase_mode','frozen','exclm_y'
},
freeze=function(this)
if not this.chase_mode then
this.frozen = 120
end
end,
update=function(this)
if not onscreen(this.world, this.x, this.y) then
return
end
if this.frozen > 0 then
this.frozen -= 1
return
end
if this.chase_mode then
if dist(this.x, this.y, this.world.player.x, this.world.player.y) > 2 then
local dir_to_player = direction_vec(this.x, this.y, this.world.player.x, this.world.player.y)
this.x += dir_to_player.x * guard_speed * 5
this.y += dir_to_player.y * guard_speed * 5
end
else
local gx = flr(this.x / 8)
local gy = flr(this.y / 8)
if this.x == this.target.x * 8 and this.y == this.target.y * 8 then
curtile = mget(gx, gy)
if curtile == 18 then
this.dir = {x=0, y=1}
elseif curtile == 19 then
this.dir = {x=1, y=0}
elseif curtile == 20 then
this.dir = {x=0, y=-1}
elseif curtile == 21 then
this.dir = {x=-1, y=0}
end
this.target = {x=gx + this.dir.x, y=gy + this.dir.y}
end
this.x = appr(this.x, this.target.x*8, guard_speed)
this.y = appr(this.y, this.target.y*8, guard_speed)
local dir_to_player = direction_vec(this.x, this.y, this.world.player.x, this.world.player.y)
local see_player_amt = dot(dir_to_player, this.dir)
local see_player_angle = atan2(see_player_amt, sqrt(1-see_player_amt^2))
if see_player_angle > 0.5 then
see_player_angle = 1 - see_player_angle
end
local player_dist = dist(this.x, this.y, this.world.player.x, this.world.player.y)
if see_player_angle < guard_fov and player_dist < 40 and player_dist > 3 then
if not is_block_between(this.x + 4, this.y + 4, this.world.player.x + 4, this.world.player.y + 4) then
this.chase_mode = true
this.world.controller = wait(20, function()end)
end
end
end
this.time += 0.05
end,
draw=function(this)
if not onscreen(this.world, this.x, this.y) then
return
end
local offx = 0
local offy = 0
if this.frozen > 0 then
offx = rnd(4) - 2
offy = rnd(4) - 2
else
offy = 2 * sin(this.time) + 0.5
end
local raycastpt = raycast(this.x + 4, this.y + 4, rot_vec(this.dir, guard_fov))
raycastpt = trunc(this, raycastpt, 40)
line_dotted(this.x + 4, this.y + 4, raycastpt.x, raycastpt.y, 4, 7)
raycastpt = raycast(this.x + 4, this.y + 4, rot_vec(this.dir, -guard_fov))
raycastpt = trunc(this, raycastpt, 40)
line_dotted(this.x + 4, this.y + 4, raycastpt.x, raycastpt.y, 4, 7)
spr(43, this.x + offx, this.y + offy)
end,
draw_after=function(this)
local offx = 0
local offy = 0
if this.frozen > 0 then
offx = rnd(4) - 2
offy = rnd(4) - 2
else
offy = 2 * sin(this.time - 0.2) + 0.5
end
if this.chase_mode then
spr(44, this.x + offx, this.y-8-this.exclm_y)
this.exclm_y = expappr(this.exclm_y, 8, 0.4)
end
spr(27, this.x + offx, this.y-8 + offy)
end
}
types[16] = guard
function trunc(p1, p2, len)
local d = dist(p1.x, p1.y, p2.x, p2.y)
if d <= len then
return p2
else
return {
x=p1.x + (p2.x - p1.x) / d * len,
y=p1.y + (p2.y - p1.y) / d * len,
}
end
end
bullet = {
born=function(this, args)
this.spd = args.spd
this.world = args.world
this.hitbox = {x=0,y=0,w=3,h=3}
this.x = args.x - this.hitbox.w / 2
this.y = args.y - this.hitbox.h / 2
this.time = 0
end,
update=function(this)
this.time += 0.1
if this.solid(this.spd.x, this.spd.y) then
this.world.del(this)
end
this.move()
local g = this.hit(guard)
if g then
g.t.freeze(g)
this.world.del(this)
end
end,
draw=function(this)
local size_bonus = sin(this.time) * 1
rectfill(
this.x - size_bonus,
this.y - size_bonus,
this.x + this.hitbox.w + size_bonus,
this.y + this.hitbox.h + size_bonus,
10
)
end
}
checkpoint = {
born=function(this, args)
this.x = args.x
this.y = args.y
this.spread = 0
this.spreadtimes = 0
this.hitbox = {x=1,y=2,w=6,h=6}
this.colors = {1,2,3,4}
this.hashit = false
this.world = args.world
end,
update=function(this)
local p = this.hit(player)
if not this.hashit and p and p.x % 4 == 0 and p.y % 4 == 0 then
this.hashit = true
this.spreadtimes = 4
this.world.checkpoint()
end
if not p then
this.hashit = false
end
if this.spreadtimes > 0 then
this.spread += 2
if this.spread > 10 then
this.spread = 0
this.spreadtimes -= 1
end
end
end,
draw_before=function(this)
if this.spread > 0 then
rect(
this.x - this.spread + this.hitbox.x + 1,
this.y - this.spread + this.hitbox.y + 1,
this.x + this.hitbox.w + this.spread,
this.y + this.hitbox.h + this.spread + 1,
this.colors[this.spreadtimes]
)
end
spr(4, this.x, this.y)
end
}
types[4] = checkpoint
player_frames = {25,26}
player = {
born=function(this, args)
glob_player = this
this.x = args.x
this.y = args.y
args.world.player = this
args.world.cam.x = flr(this.x/64)*64 - 64
args.world.cam.y = flr(this.y/64)*64
this.hitbox = {x=1, y=1, w=6, h=6}
this.world = args.world
this.target = {x=this.x, y=this.y}
this.paused = 0
this.hasgun = false
this.p_action = false
this.p_cycle = false
this.lastdir = {x=1,y=0}
this.actions = {}
this.selectedaction = 1
this.frame = 0
this.flip = false
end,
save_props={
'x', 'y', 'target', 'paused','lastdir','actions','selectedaction','flip','frame'
},
restore=function(this)
this.paused = 30
this.target = {x=this.x, y=this.y}
end,
update=function(this)
dbg=stat(1)
if this.paused > 0 then
this.paused -= 1
return
end
local btncount = indicate(btn(0)) + indicate(btn(1)) + indicate(btn(2)) + indicate(btn(3))
if btncount == 1 and this.target.x == this.x and this.target.y == this.y then
if btn(0) and not this.solid(-step_size, 0) then
this.target.x -= step_size
this.lastdir = {x=-1,y=0}
this.flip = true
elseif btn(1) and not this.solid(step_size, 0) then
this.target.x += step_size
this.lastdir = {x=1,y=0}
this.flip = false
elseif btn(2) and not this.solid(0, -step_size) then
this.target.y -= step_size
this.lastdir = {x=0,y=-1}
elseif btn(3) and not this.solid(0, step_size) then
this.target.y += step_size
this.lastdir = {x=0,y=1}
end
end
if btn(4) and (not this.p_action) and #this.actions > 0 then
this.actions[this.selectedaction].action(this)
end
this.p_action = btn(4)
if btn(5) and (not this.p_cycle) and #this.actions > 0 then
this.selectedaction = 1 + (this.selectedaction - 1) % #this.actions
this.world.showhud()
end
this.p_cycle = btn(5)
this.spd.x = sgn(this.target.x - this.x) * player_speed
this.spd.y = sgn(this.target.y - this.y) * player_speed
if this.x ~= this.target.x or this.y ~= this.target.y then
this.frame += 0.1
if this.frame >= 2 then
sfx(5)
end
this.frame %= #player_frames
else
this.frame = 0.8
end
if this.x + this.hitbox.w / 2 > this.world.cam.x + 96 then
this.world.controller = move_camera_to(this.world, this.world.cam.x + 64, this.world.cam.y)
elseif this.x + this.hitbox.w / 2 < this.world.cam.x + 32 and this.world.cam.x > 0 then
this.world.controller = move_camera_to(this.world, this.world.cam.x - 64, this.world.cam.y)
elseif this.y + this.hitbox.h / 2 < this.world.cam.y + 32 and this.world.cam.y > 0 then
this.world.controller = move_camera_to(this.world, this.world.cam.x, this.world.cam.y - 64)
elseif this.y + this.hitbox.h / 2 > this.world.cam.y + 96 then
this.world.controller = move_camera_to(this.world, this.world.cam.x, this.world.cam.y + 64)
end
local enemy = this.hit(guard)
if enemy and enemy.frozen == 0 and enemy.chase_mode then
this.world.controller = wait(20, function()
this.world.controller = screen_out(this.world, function()
this.world.restore_checkpoint()
this.world.controller = screen_in(this.world, function()end)
end)
end)
end
local hitdoor = this.hit(door, 1, 0) or this.hit(door, -1, 0) or this.hit(door, 0, 1) or this.hit(door, 0, -5)
if hitdoor and this.world.keys > 0 then
this.world.del(hitdoor)
sfx(7)
this.world.usekey()
end
this.move()
end,
add_action=function(this, action)
add(this.actions, action)
this.world.showhud()
end,
draw=function(this)
spr(player_frames[flr(this.frame) + 1], this.x, this.y-8, 1, 2, this.flip)
end,
draw_after=function(this)
spr(player_frames[flr(this.frame) + 1], this.x, this.y-8, 1, 1, this.flip)
end
}
types[35] = player
function allpal(c)
for i = 0, 15 do
pal(i, c)
end
end
function resetpal()
for i = 0, 15 do
pal(i, i)
end
end
function draw_hud(y, world)
spr(32, world.cam.x + 4, y)
print('x', world.cam.x + 12, y + 1, 7)
print(world.keys, world.cam.x + 17, y + 1, 7)
local player = world.player
if #player.actions > 0 then
spr(player.actions[player.selectedaction].spr, world.cam.x + 26, y)
end
end
function copy(v)
if type(v) == 'table' then
local newt = {}
for k,v in pairs(v) do
newt[k] = v
end
return newt
else
return v
end
end
messages = {{
'captain\'s log, jul 21 2025',
'','','',
'everyone who lived on this',
'planet is dead.',
}, {
'their only vestige this',
'temple in a remote part of',
'the planet'
}, {
'and. well.',
'','','',
'its security system.'
}, {
'we made our way to the temple',
'after our ship was shot down.',
'',
'we sprung some sort of trap',
'and ended up inside.',
'',
'i must get out.'
}, {
'this is the 10th year to the',
'day since we left earth.',
'',
'we were going to finally',
'turn around after exploring',
'this planet.'
}, {
'in the interest of proper',
'documentation (one of my',
'passions), i feel i must',
'share the series of events',
'leading me into this',
'situation'
}, {
'this shouldn\'t have',
'happened.',
}, {
'after being away for so long',
'tempers were tight on the',
'ship'
}, {
'on top of that, it came to',
'light that the objectives of',
'the mission, as understood',
'by myself and franz, differed',
'substantially.'
}, {
'i always thought the mission',
'was purely knowledge-seeking.',
'i was told to go understand',
'the universe.',
}, {
'it turns out franz was informed',
'to actively seek out minerals',
'and other substances of value',
'over all else.'
}, {
'i felt betrayed - my grants',
'the support i received, was',
'all actually in search of',
'resources.'
}, {
'when we landed, franz and i',
'got into an argument. we were',
'not properly aware of our',
'surroundings.'
}, {
'against my nature, i didn\'t',
'scan the area for any',
'irregularities.',
'this was what led us into',
'the trap.'
}, {
'now i\'m in here, and franz...',
}, {
'i do not know if franz is ok.',
'i\'m beginning my search on',
'outside.',
'',
'',
' -- captain viola'
}
}
function make_world()
--music(0)
local entities = {}
local w
local hudpower = 0
local hudshowing = 0
local curmessage = 1
w = {
add=function(e)
add(entities, e)
end,
entities=entities,
del=function(e)
del(entities, e)
end,
showmessage=function()
w.controller = show_message(w, messages[curmessage])
curmessage += 1
end,
update=function()
if w.controller then
--coresume(w.controller)
if not coresume(w.controller.update) then
w.controller = nil
end
else
for e in all(entities) do
if not w.restored then
e.t.update(e)
end
end
end
w.restored = false
if hudpower > 0 then
hudpower -= 0.01
hudshowing = expappr(hudshowing, 1, 0.5)
else
hudshowing = expappr(hudshowing, 0, 0.5)
end
end,
showhud=function()
hudpower = 1
end,
save_props={
'cam', 'keys'
},
checkpoint=function()
for e in all(entities) do
if e.t.save_props then
e.storage = {}
for p in all(e.t.save_props) do
e.storage[p] = copy(e[p])
end
end
end
w.storage = {}
for p in all(w.save_props) do
w.storage[p] = copy(w[p])
end
storage = w.storage
end,
restore_checkpoint=function()
w.restored = true
for e in all(entities) do
if e.t.save_props then
storage = e.storage
for p in all(e.t.save_props) do
e[p] = e.storage[p]
end
if e.t.restore then
e.t.restore(e)
end
else
del(e, entities)
end
end
for p in all(w.save_props) do
w[p] = w.storage[p]
end
w.controller = nil
end,
draw=function()
camera(w.cam.x, w.cam.y)
allpal(2)
pal(1,2)
pal(13, 2)
pal(5,1)
pal(6,1)
map(flr(w.cam.x / 8) - 2, flr(w.cam.y / 8) - 2, (flr(w.cam.x / 8) - 2) * 8, (flr(w.cam.y / 8) - 2) * 8, 20, 20, 4)
resetpal()
map(flr(w.cam.x / 8) - 2, flr(w.cam.y / 8) - 2, (flr(w.cam.x / 8) - 2) * 8, (flr(w.cam.y / 8) - 2) * 8, 20, 20, 8)
for e in all(entities) do
if e.t.draw_before then
e.t.draw_before(e)
end
end
for e in all(entities) do
if e.t.draw then
e.t.draw(e)
end
end
palt(0, false)
map(flr(w.cam.x / 8) - 2, flr(w.cam.y / 8) - 2, (flr(w.cam.x / 8) - 2) * 8, (flr(w.cam.y / 8) - 2) * 8 - 4, 20, 20, 4)
palt(0, true)
local y = (w.cam.y + 128) * (1 - hudshowing) + (w.cam.y + 128 - 16) * hudshowing
draw_hud(y, w)
for e in all(entities) do
if e.t.draw_after then
e.t.draw_after(e)
end
end
if w.controller and w.controller.draw then
w.controller.draw()
end
end,
getkey=function()
w.keys += 1
hudpower = 1
end,
usekey=function()
w.keys -= 1
hudpower = 1
end,
keys=0,
cam={x=0,y=0},
controller=nil
}
w.showmessage()
for x = 0, 16*8 do
for y = 0, 16*4 do
if fget(mget(x, y), 1) then
w.add(birth(types[mget(x, y)], {world=w,x=x*8,y=y*8}))
end
end
end
w.checkpoint()
return w
end
function end_world()
return {
update=function()
end,
draw=function()
camera(0,0)
rectfill(0, 0, 128,128,7)
print('the end', 10, 10, 0)
end
}
end
text_trigger = {
born=function(this, args)
this.x = args.x
this.y = args.y
this.hitbox={x=0,y=0,w=16,h=16}
this.world = args.world
this.particles = {}
this.tick = 0
end,
update=function(this)
if not onscreen(this.world, this.x, this.y) then
return
end
this.tick += 1
if this.tick > 30 then
this.tick = 0
add(this.particles, {
x=this.x + rnd() * 16,
y=this.y + rnd() * 16,
h=0
})
end
for p in all(this.particles) do
p.h -= 0.04
if p.h < -2 then
del(this.particles, p)
end
end
local h = this.hit(player)
if h then
this.world.showmessage()
this.world.del(this)
end
end,
draw=function(this)
for p in all(this.particles) do
circ(p.x, p.y + p.h, 2, 1)
end
end
}
types[37] = text_trigger
function pickup(sprite, effect)
return {
born=function(this, args)
this.hitbox = {x=2,y=0,w=4,h=7}
this.x = args.x
this.y = args.y
this.time = 0
this.world = args.world
end,
save_props={
'x','y','time'
},
update=function(this)
this.time += 0.01
local h = this.hit(player)
if h then
this.x = -1000
effect(this)
end
end,
kill=function(this)
this.world.del(this)
end,
draw=function(this)
spr(sprite, this.x, this.y + sin(this.time) *2 - 0.5)
end
}
end
--key
types[32] = pickup(32, function(this)
this.world.getkey()
end)
types[34] = pickup(34, function(this)
this.world.player.t.add_action(this.world.player, {
spr=34,
action=function(this)
this.world.add(birth(bullet, {x=this.x+3.5,y=this.y+1.5,spd=this.lastdir,world=this.world}))
this.paused = 20
this.frame = 0
end
})
end)
world = make_world()
function titlescreen()
local px = -8
local pf = 0
local t = 0
local world = {
update=function()
px += 0.5
pf += 0.1
pf %= 2
t += 0.1
if btnp(4) or btnp(5) then
world = make_world()
end
end,
draw=function()
spr(flr(25 + pf), px, 56,1,2)
--spr(30, 90, 56,1,2)
spr(83, 48, 52,4,3)
print('by @justinjaffray', 30, 99, 0)
print('by @justinjaffray', 30, 100, 7)
for x = 0, 7 do
for y = 0, 7 do
if x==0 or y==0 or x==7 or y==7 then
rectfill(32 + x * 8, 32 + y * 8, 32 + x * 8 + 8 - 1, 32 + y * 8 + 8 - 1, (x+y+flr(t))%15+1)
end
end
end
end
}
return world
end
world = titlescreen()
--world = make_world()
function _update60()
world.update()
end
function _update()
world.update()
world.update()
end
function _draw()
cls()
world.draw()
--print(dbg, world.cam.x, world.cam.y, 7)
end
__gfx__
00000000111111110111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000001dddddd1101dd10100000000099999900000000001011111110010111110010000011111110001101111100000000000000000000000000000000000
007007001d1111d111dddd1100000000098888900000000001000000000000000000000101000000000000000000001000000000000000000000000000000000
000770001d1111d11dddddd100000000098998900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000770001d1111d110dddd0100000000098998900000000010000000000000000000000010000000000000000000000100000000000000000000000000000000
007007001d1111d101dddd1000000000098888900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000001dddddd1101dd10100000000099999900000000010000000000000000000000100000000000000000000000000000000000000000000000000000000
00000000111111110111111000000000088888800000000010000000000000000000000000111111100111101111110000000000000000000000000000000000
9c9c9c9c9c9c9c9c0070000000000000000000000000070010000000000000000000000100000000000000000000000000000000000000000000000000000000
c8888889c9c9c9c90070000000000000000000000000700010000000000000000000000100000000000000000444444000044400044444400000000000000000
9888888c9c9c9c9c7070700000000000000000000007777710000000000000000000000100000000000000000999999000499900099999900000000000000000
c8888889c9c9c9c9077700000070000000000700000070000000000000000000000000000000000000ee00000949949000999400099999900000000000000000
9888888c9c9c9c9c0070000000070000000077700000070010000000000000000000000000ee000000eee0000999999000999900099999900000000000000000
c8888889c9c9c9c90000000077777000000707070000000000000000000000000000000100eee00000eee0000994499000099900099999900000000000000000
9888888c9c9c9c9c0000000000070000000007000000000010000000000000000000000100eee00000ee00000000000000000000000000000000000000000000
c9c9c9c9c9c9c9c90000000000700000000007000000000010000000000000000000000000ee00000eeee0000000000000000000000000000000000000000000
0006650066566566000000000000000055555550000000001000000000000000000000010eeee000eeeeee000004400000888800000000000000000000000000
00065000666556660000000007777770500000500aaaaaa00000000000000000000000010eeee000eeee00000049940000888800000000000000000000000000
00066500566556650aaaaaa007777770500000500a0000a00000000000000000000000000eeee000e0eee0000099990000888800000000000000000000000000
00065000655665560666666007777770500000500a0aa0a000000000000000000000000000eee00000eee0000099990000288200000000000000000000000000
00666500655665560a0a000007777770500000500a0aa0a010000000000000000000000100ee00000ee0e0000099990000022000000000000000000000000000
00600500566556650aa0000007777770500000500a0000a000000000000000000000000000ee00000e00ee000009900000088000000000000000000000000000
00666500666556660000000007777770555555500aaaaaa010000000000000000000000100ee0000000000000000000000088000000000000000000000000000
00000000665665660000000000000000000000000000000000111111100111011100100000eee000000000000000000000022000000000000000000000000000
00000000555555550000000011111111111111110000000077777777777777770000000000000000000000000000000000000000000000000000000000000000
00000000556666550000000011111111111111110000000070707070777777770000000000000000000000000000000000000000000000000000000000000000
00000000566666650000000055555555555555550000000007070707777777770000000000000000000000000000000000000000000000000000000000000000
cccc99995666666500000000566666d5566666d50000000000000000777777770000000000000000000000000000000000000000000000000000000000000000
01111999566666650000000056666655556666d50000000070707070777777770000000000000000000000000000000000000000000000000000000000000000
00cccc995666666500000000566666d5566666d50000000000000000777777770000000000000000000000000000000000000000000000000000000000000000
0000000055666655000000005ddd66d5566dd6d50000000000000000777777770000000000000000000000000000000000000000000000000000000000000000
00000000555555550000000055555555555555550000000000070007777777770000000000000000000000000000000000000000000000000000000000000000
11111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
11000000000000000000001100666600066600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10770000000000000000000100666600066606660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10700000000000000000000100666600055506660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10000000000000000000000100555500055506660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10000000000000000000000100555500055505550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
11000000000000000000001100555500000005550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
11111111111111111111111100000000000005550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
cccccccccccccccccccccccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
15555555555555555555555100000005555005555500555555000000000000000000000000000000000000000000000000000000000000000000000000000000
15656565656565656565656100000055555505555550555555000000000000000000000000000000000000000000000000000000000000000000000000000000
15555555555555555555555100000056666506666650666666000000000000000000000000000000000000000000000000000000000000000000000000000000
15656565656565656565656100000066666606666660666666000000000000000000000000000000000000000000000000000000000000000000000000000000
11111111111111111111111100000066006606600660666555000000000000000000000000000000000000000000000000000000000000000000000000000000
11111111111111111111111100000066006606600660666666000000000000000000000000000000000000000000000000000000000000000000000000000000
11111111111111111111111100000066556606655660666666000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000066556606655660666555000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000066666606666660666666000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000006666006666600666666000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000055550055005505555550550550550000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000555555055005505555550550550550000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000566665066506606666660660660660000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000666666066556606666660660660660000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000665566066656606665550660660660000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000665566066666606666660660660660000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000666666066666606666660665665660000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000666666066066606665550665665660000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000660066066006606666660666666660000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000660066066006606666660066666600000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10101010101010101010000000000000101044340000103030100000000000000000101000420042424242004242424200424200000042101010000000001010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
10340000343400001010000000000000101000524200103030100000000000000000101000420000000042000000000000000000000010101000000000000010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
10005200000000421010000000000000101000424200103030100000005200000000101000424242424242001010101010104200000010101010000000001010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
10420000004400001010000000000100101034000000103030100000000000000000101000000000000000001030303030101042001010101042000000424210
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
10000042000042001010000000001100101010000010103030100000000000000000101010101010101010101030303030104200004210101010000000001010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
10440000000100341010310000002100101010000010103030100000000000000000101010101010101010101010103030101012001010101000000000004210
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
10101000001110101010000010103100000000002100103030100000000000000000000010100414142400041424103030100000000010101010000000001010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30101031002110103010001010101000000000000000103030100000000000000000000010100515152500051525103030101000001010101010000000001010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30103141103121103010001010101000000000000000103030101010101010101000420010100000000000000000103030100000001010101010420000001010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100010101000103010004210100000000000000000101010101010101010101000420010100000000000000000103030100000000010101010420000001010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30104151102151103010410000001101510010103121101000000000424200000000420010100000005200000000103030101000000000101042420000004210
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100041005100103010101010000000001010101001101000000042000000424242420010100000000000000000103030100000000010101000000000004210
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30103100000021103010101010000000001010101011101000421010101010101000420010100000000000000002103030100000001010101000000000000010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000100000103010002100110151004210102151101042001010105200101000420010100000000000000000103030100000000010101000000000000010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30104100110151103010000042101041000000005100101042421010100000101000420010100000000000000000103030101000000042101000000000000010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100010101000103010000010101010000000101010101042421010210000211000420010101010101012001010101010104200000010101000000000000010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000000000103010000010101010000000101010101000001010001010011000420010101010101000001010101010420000000042101000000000000010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30103100011121103010000042101042000000000000101031000111110000110000005100424242000042000040000000004210100000000000000000004210
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000100000103010003100000111411010000000101000001010011010001000000042424242424242420000000000421010101000000000000000424210
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000100000103010000000000000001010000000101042421010001010001000420010101010101010101200101010101010101010101010101010101010
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30104100000051103010101010101010101010000000101042001010411010411000000010101010101010100000103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000100000101010101010101010101010000000101000421010101010101000424210103434000000000000103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000100000000000000000000000000000000000000042001030303030301000424210103400000000000034103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000100000000000000000400000004242424242000000001010101010101010101010103444000000000044103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000101010101010101010101010004242424242000000000000000000000000000010104434000000000000103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000103030301034000000344410004242424242000000002100000000110100510010103400000000000044103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000103030301000000000004210000000000000000000003100000111000021000010104400000000000034103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000103030301000005200000010101010101010101010101010101010101000000010103434005200000000103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000101010101000000000004210101010101010101010101010101010101000000010104444000000000000103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000000000000042000000004242000000000000000000002100001101000051000010103444000000000002103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30100000000000000000000000000000000000000000000000003100000000011100410010101010101010101010103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
30101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010103030303030303030303030303030303030
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030
__gff__
000505050200080808080808000000000200000000000808080000000000000002020202080208080800000000000000000500000000080a000000000000000005050509090000000000000000000000050505000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__map__
0303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030301010101370103030303030303030303030303030303030303030303030303030303030303030303030303
0301010101010101010101010101010101010101010101030303030303030303030101010101010101010101010101010101010101010101010101010101010101010101010101030303030303030303030303030301010101360103030303030303030303030303030303030303030303030303030303030303030303030303
0301250000000000000000000101000000242400000001030303030303030303030124242400000000000000242401012424242401010000000000000000000000000000240001030303030303030303030303030301010101000103030303030303030303030303030303030303030303030303030303030303030303030303
0301000000000000000000000101002400242400240001030303030303030303030124000000001300111000122401012400002400000000002500000000000000000000000001030303030303030303030303030301010101000103030303030303030303030303030303030303030303030303030303030303030303030303
0301000000240020000101010101000025000000000001030303030303030303030100000000000000000000002401012400202400000000000000000000000000000000000001030303030303030303030303030301010124000103030303030303030303030303030303030303030303030303030303030303030303030303
0301010101240000000124010101242400000000242401030303030303030303030100002424000000000000000001012424242401010000000000000000002400240000000001030303030303030303030303030301010124000103030303030303030303030303030303030303030303030303030303030303030303030303
0301000001010101000000000101242400002200242401030303030303030303030100000101241400000000150001010101010101010101010101010101010101012400000001030303030303030303030303030301010100000103030303030303030303030303030303030303030303030303030303030303030303030303
0301000000000001000001000101000000000000000001030303030303030303030100000101000024242424000001030303030303030303030303030303030303010000000001030303030303030303030303030301010100000103030303030303030303030303030303030303030303030303030303030303030303030303
0301000100010001000101010101000400242400240001030303030303030303030100240101000001010101240001010303030303030303030303030303030303010000000001030303030303030303030303030301012400000103030303030303030303030303030303030303030303030303030303030303030303030303
0301000101012400240000000101000000242400000001010101010101010101030100240101240001040000000000010303030303030303030303030303030303010000002401030303030303030303030303030301012400000103030303030303030303030303030303030303030303030303030303030303030303030303
0301000000012401010101000101010101000001010101010101000000010101030100000000000001010101000001010101010101010101010101010101010103012400000001030303030303030303030303030301010000000103030303030303030303030303030303030303030303030303030303030303030303030303
0301010101010000000001010101010113000000000000001011150000000001030200000000000001030100000024012401000100012401000100010001000101012400000001030303030303030303030303030301010000000103030303030303030303030303030303030303030303030303030303030303030303030303
0301000000000000000000000101010101010101010101010101000024000001030100131011120001030101000000000000000000002424000000000000000000002400002401030303030303030303030303030301240000000103030303030303030303030303030303030303030303030303030303030303030303030303
0301000000000000000000000000000000000000000001030301002424000101030100240101240001030100001300240000111000000000000000240000002424000015242401030303030303030303030303030301240000000103030303030303030303030303030303030303030303030303030303030303030303030303
0301010101010101010101010101010101010000240001030301002424000103030100240201000001030101000100010001000100010001000124010001240101010101010101030303030303030303030303030301240000000103030303030303030303030303030303030303030303030303030303030303030303030303
0331313131313131313131313131313131010024240001030301002424000103030200140000150001020101010101010101240101010101010101012401010101030303030303030303030303030303030303030301000000000103030303030303030303030303030303030303030303030303030303030303030303030303
0331240000000000000000000000250031010024240001030301000024000103030200000000000000000000242401010101010101010101010101010101010101030303030303030303030303030303030303030301002500000103030303030303030303030303030303030303030303030303030303030303030303030303
0331000031313131313131313131000031010024000001030301000024000103030100000024000000000000002401000100012401000101010101010101010101010101010101010101010101010101010101010101000000000103030303030303030303030303030303030303030303030303030303030303030303030303
0331002040414141414141414142000031010024000001010101002424000101010100000102000000012425000000002425000000000001010100240000000000000000000000000000000000000000000000000000000000000103030303030303030303030303030303030303030303030303030303030303030303030303
0331000050515151515151515152000031010024240001130010112400150100000000240101000000010100000000000000000000000101010124240000000000002400000000000000000000000024240000000000000000000103030303030303030303030303030303030303030303030303030303030303030303030303
0331000024242424242424242424000031010000000001010101002400000100000000002424000000242400000001000100010000002401010124000000242400002400000024242400000000000024240000000000000000000103030303030303030303030303030303030303030303030303030303030303030303030303
0331000031313131313131313131000031011300101100001501002424000100000101000000000000000000000001010101010100000101010100000024240000002400000024000000002424240000000000000000000000000103030303030303030303030303030303030303030303030303030303030303030303030303
0331000040414141414141414142000031010024000001010101002424000100000101010101010101010101010101030303012400000001010100000000000000002400000000000000000024000000000000000000000000000103030303030303030303030303030303030303030303030303030303030303030303030303
0331000050515151515151515152000031010000000001130010110024150121000103030303030303030303030303030303010125000101010100000000000000000000000000000000000000000000000000000000000000000103030303030303030303030303030303030303030303030303030303030303030303030303
0331000024242424242424242424000031010024000001010101002424000100000103030303030303030303030303030303010000000001010100000000010101010101010101010101010101010101010101010101010101010103030303030303030303030303030303030303030303030303030303030303030303030303
0331000000000000000000000000000031011324001110001501002424000100000103030303030303030303030303030303010100000101010000000000000103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303
0331000031313131313131313131000031010024240001010101002424000100000103030303030303030303030303030303010000000001010100000000010103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303
0331000040414141414141414142000031010024240001010000002424000100000103010101010101010101010303030303010100000101010000000000000103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303
0331000050515151515151515152000031010000000000000004000000000000000103010000000000000000010303030303012400000001010100000000010103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303
0331000004242424242424242424000031010000000000000000000000000000000103010024240024242400010101010101010100000101012424000000000103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303
0331000000000000000000000000000031010101010101010101010101010101010103010024000000002400000000000000000000000001010124000000010103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303
0331313131313131313131000031313131010101010101030301010101010101010101010024002423000000240024242400240000240101010000000000000103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303
__sfx__
011400001f0201f02021020210202202022020260202602024020240202200026000240001f0001f0001f0001f0201f02021020210202202022020260202602024020240202100024000220001f0001f0001f000
0114000018613186131a6031a60318613186031860318603186131861300003000031861318603000030000318613186130000300003186131860300003000031861318613000030000318613186030000300003
011400001d0201d0201f0201f0202102021020240202402022020220200000000000163000000000000000001d0201d0201f0201f020210202102024020240202202022020000000000016300000000000000000
011400002430000000000000000024300000000000000000243000000000000000002430000000000000000024300000000000000000243000000000000000002430000000000000000024300000000000000000
0001000015070190701d07023070260702a0702d0702d07028070240701f0701a0701807015070100700807003000020000200002000010000100001000010000100001000010001900015000000000000000000
0001000012630116300f6300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000400003002034020330202d0202e020310203402034020310202f0202e0203302035020320202f0203302034020300203302031020300203202033020310203102033020340203402033020340203207032070
000200000050037570375703757037570375703757000500005000f5700f5700f5700f5700f5700f5700f57000500005000050000500005000050000500005000050000500005000050000500005000050000500
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__music__
01 01004243
02 01024344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment