Skip to content

Instantly share code, notes, and snippets.

@justinj
Last active August 29, 2015 14:28
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/e4a3251705ff9ed8092c to your computer and use it in GitHub Desktop.
Save justinj/e4a3251705ff9ed8092c to your computer and use it in GitHub Desktop.
BECOME
pico-8 cartridge // http://www.pico-8.com
version 4
__lua__
-- become
-- by jj
titlescreen = true
entities = {}
cam = {
x = 0,
y = 0
}
k_l = 0
k_r = 1
k_u = 2
k_d = 3
k_j = 4
k_x = 5
p_runspeed = 2.5
p_accel = 0.3
p_decel = 0.2
p_jumpspeed = 4
gravity = 0.7
max_fallspeed = 3
dead = false
debugtxt = ""
-- more smart stuff done in celeste being stolen
types = {}
-- lol
function is_solid(i)
return i == 3 or i == 4 or i == 5 or i == 19 or i == 20 or i == 21 or i == 35 or i == 36 or i == 37 or i == 52 or i == 8 or i == 9 or i == 24 or i == 25 or i == 58 or i == 59 or i == 60
end
function collide_at(o, x, y)
for e in all(entities) do
if e ~= o and e.is_solid then
if x < e.x + 8 and x + 8 > e.x then
if y < e.y + 8 and y + 8 > e.y then
return true
end
end
end
end
return is_solid(mget(flr(x / 8), flr(y / 8))) or
is_solid(mget(flr((x + 7) / 8), flr(y / 8))) or
is_solid(mget(flr((x + 7) / 8), flr((y + 7) / 8))) or
is_solid(mget(flr(x / 8), flr((y + 7) / 8)))
end
t_snail = "snail"
function frames(t)
if t == t_snail then return {6, 7} end
return {0, 1}
end
function jumpframes(t)
if t == t_snail then return {6} end
return {0, 1}
end
function climbframes(t)
if t == t_snail then return {22, 23} end
return {0, 1}
end
function canclimb(t)
if t == t_snail then return true end
return false
end
function canjump(t)
if t == t_snail then return false end
return true
end
g_player = nil
frame_del = 5
-- params:
-- can-climb
-- beginframe
-- player
function make_player(x, y, t)
local args = {
frames = frames(t),
jumpframes = jumpframes(t),
climbframes = climbframes(t),
canjump = canjump(t),
type = make_player,
canclimb = canclimb(t)
}
local player = {
x = x,
y = y,
t = t,
xspeed = 0,
yspeed = 0,
beginframe = 6,
frame = 0,
facing = 1,
vfacing = -1,
jbuf = 0,
fbuf = 0,
state_props = { "x", "y", "facing", "xspeed", "yspeed" },
anim = args.frames
}
function player:onwall()
if not args.canclimb then
return false
end
return collide_at(self, self.x - 1, self.y) or collide_at(self, self.x + 1, self.y)
end
function player:control()
local dir = 0
-- h movement
if btn(k_r, 0) and not btn(k_l, 0) then
dir = 1
elseif btn(k_l, 0) and not btn(k_r, 0) then
dir = -1
end
if dir == 0 and self.xspeed ~= 0 then
local s = p_decel * sgn(self.xspeed)
if abs(s) > abs(self.xspeed) then
self.xspeed = 0
else
self.xspeed -= p_decel * sgn(self.xspeed)
end
else
self.xspeed += dir * p_accel
if sgn(self.xspeed) ~= dir then
self.xspeed += dir * p_accel
end
end
if abs(self.xspeed) > p_runspeed then
self.xspeed = sgn(self.xspeed) * p_runspeed
end
for e in all(entities) do
if e.is_deadly then
if dist(e.x, e.y, self.x, self.y) < 6 then
die()
end
end
end
if dir ~= 0 then
self.facing = dir
end
if self:onwall() then
if collide_at(self, self.x - 1, self.y) and collide_at(self, self.x + 1, self.y) then
self.facing = sgn(self.facing)
elseif collide_at(self, self.x - 1, self.y) then
self.facing = -1
elseif collide_at(self, self.x + 1, self.y) then
self.facing = 1
end
end
dir = 0
-- v movement
if self:onwall() then
if btn(k_d, 0) and not btn(k_u, 0) then
dir = 1
elseif btn(k_u, 0) and not btn(k_d, 0) then
dir = -1
end
if dir == 0 and self.yspeed ~= 0 then
local s = p_decel * sgn(self.yspeed)
if abs(s) > abs(self.yspeed) then
self.yspeed = 0
else
self.yspeed -= p_decel * sgn(self.yspeed)
end
else
self.yspeed += dir * p_accel
if sgn(self.yspeed) ~= dir then
self.yspeed += dir * p_accel
end
end
if abs(self.yspeed) > p_runspeed then
self.yspeed = sgn(self.yspeed) * p_runspeed
end
else
self.vfacing = -1
end
if dir ~= 0 and self:onwall() then
self.vfacing = dir
end
if self.jbuf > 0 then
self.jbuf -= 1
end
if collide_at(self, self.x, self.y + 1) then
fbuf = 5
elseif fbuf > 0 then
fbuf -= 1
end
if (btnp(k_j, 0) or self.jbuf > 0) and args.canjump then
if fbuf > 0 then
self.yspeed = -p_jumpspeed
sfx(2)
elseif btnp(k_j, 0) then
self.jbuf = 4
end
end
local s = collide_with(self, make_spirit)
if s ~= nil then
del(entities, s)
self:transform(t_snail)
end
end
function player:transform(t)
del(entities, self)
add(entities, make_transformation(self.x, self.y, t))
g_player = nil
end
function player:animate()
if self:onwall() then
self.anim = args.climbframes
elseif collide_at(self, self.x, self.y + 1) then
self.anim = args.frames
else
self.anim = args.jumpframes
end
end
function player:update()
self:control() -- lol
-- shamelessly ripping off celeste physics
if not self:onwall() then
if self.yspeed <= 0.1 then
self.yspeed -= gravity / 2
end
self.yspeed += gravity
end
if self.yspeed > max_fallspeed then
self.yspeed = max_fallspeed
end
for i = 1, abs(self.xspeed) do
if not collide_at(self, self.x + sgn(self.xspeed), self.y) then
self.x += sgn(self.xspeed)
end
end
if not collide_at(self, self.x + sgn(self.xspeed) * (self.xspeed % 1), self.y) then
self.x += sgn(self.xspeed) * (self.xspeed % 1)
end
for i = 1, abs(self.yspeed) do
if not collide_at(self, self.x, self.y + sgn(self.yspeed)) then
self.y += sgn(self.yspeed)
end
end
if not collide_at(self, self.x, self.y + sgn(self.yspeed) * (self.yspeed % 1)) then
self.y += sgn(self.yspeed) * (self.yspeed % 1)
end
if collide_at(self, self.x, self.y + 1) or collide_at(self, self.x, self.y - 1) then
if self.yspeed > 1 then
sfx(3)
end
self.yspeed = 0
end
add(switch_hitters, self)
self:hit_spikes()
self:animate()
local d = dist(self.x, self.y, 14.5 *8 * 8, 6 * 8 * 8)
if d < 100 then
if rnd(20) < 1 then
sfx(7)
end
end
if collide_at(self, self.x, self.y) then
self.y -= 1
end
cam.x = self.x - 60
cam.y = self.y - 80
end
function player:hit_spikes()
local ts = colliding_tiles(self)
for t in all(ts) do
if mget(t.x, t.y) == 34 then
if self.yspeed >= 0 and self.y % 8 >= 4 then
die()
end
end
end
end
function player:render()
self.frame += abs(self.xspeed) + abs(self.yspeed) / 5
if self.frame >= #self.anim * frame_del then
self.frame = 0
if self.xspeed ~= 0 then
-- step?
end
end
local vflip = self.vfacing ~= -1 and self:onwall()
local hflip = self.facing == -1
spr(self.anim[flr(self.frame / frame_del) + 1], self.x, self.y, 1, 1, hflip, vflip)
end
g_player = player
activate_checkpoint()
player.backup = {}
for p in all(player.state_props) do
player.backup[p] = player[p]
end
return player
end
types[1] = make_player
function make_turnback_trigger(x, y)
local t = {
x = x, y = y
}
function t:update()
local done = 0
for p in all(pillars) do
if p.risen then
done += 1
end
end
if g_player ~= nil and done >= #pillars and g_player.t == t_snail then
if dist(self.x, self.y, g_player.x, g_player.y) < 8 then
g_player:transform("")
end
end
end
function t:render()
-- nada
end
return t
end
types[55] = make_turnback_trigger
slig_speed = 0.3
function colliding_tiles(self)
result = {}
for p in all({{0, 0}, {0, 1}, {1, 0}, {1, 1}}) do
add(result, {x = flr((self.x + p[1] * 7) / 8), y = flr((self.y + p[2] * 7) / 8)})
end
return result
end
switch_mappings = {}
switch_mappings[33] = {}
switch_mappings[33][6] = {
{x = 33, y = 11},
{x = 33, y = 12},
{x = 33, y = 13},
{x = 35, y = 9},
{x = 35, y = 10},
{x = 35, y = 11},
}
switch_mappings[48] = {}
switch_mappings[48][4] = {
{x = 49, y = 11},
{x = 45, y = 11},
{x = 45, y = 10},
{x = 45, y = 9},
{x = 54, y = 11},
{x = 54, y = 10},
{x = 54, y = 9},
}
switch_mappings[57] = {}
switch_mappings[57][11] = {
{x = 59, y = 8},
{x = 59, y = 12},
}
switch_mappings[45] = {}
switch_mappings[45][25] = {
{x = 47, y = 22},
{x = 47, y = 21},
{x = 47, y = 20},
}
switch_mappings[57] = {}
switch_mappings[57][24] = {
{x = 55, y = 23},
}
switch_mappings[54] = {}
switch_mappings[54][16] = {
{x = 48, y = 17},
}
switch_mappings[70] = {}
switch_mappings[70][22] = {
{x = 68, y = 23},
{x = 68, y = 20},
}
switch_mappings[93] = {}
switch_mappings[93][21] = {
{x = 90, y = 19},
{x = 89, y = 19},
{x = 88, y = 19},
}
function make_endgame_spirit(x, y)
local p = {
x = x,
y = y,
frame = 0,
yspeed = -2,
state_props = { "x", "y" }
}
function p:update()
self.y += self.yspeed
self.yspeed += 0.2
if self.yspeed > 0 then self.yspeed = 0 end
self.frame += 1
if self.frame / frame_del >= #spirit_frames then self.frame = 1 end
if dist(self.x, self.y, g_player.x, g_player.y) < 8 then
win()
end
end
function p:render()
spr(spirit_frames[flr(self.frame / frame_del) + 1], self.x, self.y)
end
return p
end
function make_person(x, y)
local p = {
x = x,
y = y,
tick = 0,
flipped = false,
state_props = {"x", "y"}
}
function p:update()
self.tick += 1 + rnd() * 5
if self.tick > 45 then
self.flipped = not self.flipped
self.tick = 0
end
for e in all(entities) do
if e.type == make_boulder then
if dist(self.x, self.y, e.x, e.y) < 8 then
add(entities, make_endgame_spirit(self.x, self.y))
self.x = -100
end
end
end
end
function p:render()
spr(33, self.x, self.y, 1, 2, self.flipped)
if self.tick > 10 and self.tick < 20 then
spr(32, self.x, self.y - 8)
end
end
return p
end
types[33] = make_person
function flip_switch(x, y)
local blocks = switch_mappings[x][y]
for b in all(blocks) do
if mget(b.x, b.y) == 51 then
mset(b.x, b.y, 52)
if g_player ~= nil and collide_at(g_player, g_player.x, g_player.y) then
mset(b.x, b.y, 53)
end
else
mset(b.x, b.y, 51)
end
end
end
function make_shiny(x, y)
local s = {
x = x,
y = y,
frame = 0,
state_props = {"x", "y"}
}
function s:update()
self.frame += 1
if self.frame >= 2 then self.frame = 0 end
if self.frame == 0 then
ll_push_right(particles, {
x = self.x + 4,
y = self.y + 4,
size = 1,
life = 10,
xspeed = 1 - rnd() * 2,
yspeed = 1 - rnd() * 2,
gravity = 0.1,
col = 7
})
end
if g_player ~= nil and dist(self.x, self.y, g_player.x, g_player.y) < 8 then
self.x = -100
local pil
for p in all(pillars) do
if not p.risen then
pil = p
break
end
end
pil:rise()
sfx(6)
end
end
function s:render()
spr(13 + self.frame, self.x, self.y)
end
return s
end
types[13] = make_shiny
shaking = false
function shake()
shaking = true
end
pillars = {}
function make_pillar(x, y)
local p = {
x = x,
y = y,
is_solid = true,
d_left = 8,
going = false,
risen = false,
state_props = {"x", "y", "d_left", "going", "risen"}
}
mset(x / 8, y / 8, 20)
add(pillars, p)
function p:update()
if self.going and self.d_left > 0 then
shake()
self.y -= 0.2
self.d_left -= 0.2
ll_push_right(particles, { x = self.x + 4, y = self.y + 4, xspeed = 1 - rnd()*2, yspeed = 1 - rnd()*2, col = 4, life = 10, size = 2})
end
end
function p:render()
spr(16, self.x, self.y)
end
function p:rise()
self.going = true
self.risen = true
end
return p
end
types[16] = make_pillar
function make_boulder(x, y)
local boulder = {
x = x,
y = y,
xspeed = 0,
yspeed = 0,
is_solid = true,
type = make_boulder,
state_props = { "x", "y", "xspeed", "yspeed" }
}
function boulder:update()
self.yspeed += 1
-- candidate for extraction
for i = 1, abs(self.yspeed) do
if not collide_at(self, self.x, self.y + sgn(self.yspeed)) then
self.y += sgn(self.yspeed)
else
if self.yspeed > 1 then
sfx(12)
end
self.yspeed = 0
end
end
if not collide_at(self, self.x, self.y + sgn(self.yspeed) * (self.yspeed % 1)) then
self.y += sgn(self.yspeed) * (self.yspeed % 1)
end
end
function boulder:render()
spr(39, self.x, self.y)
end
return boulder
end
types[39] = make_boulder
function collide_with(self, t)
for e in all(entities) do
if e ~= self then
if e.type == t and self.x + 8 > e.x and self.x < e.x + 8 and self.y + 8 > e.y and self.y < e.y + 8 then
return e
end
end
end
return nil
end
switch_hitters = {}
active_switches = {}
turnoffs = {}
function reset_switches()
for p in all(active_switches) do
mset(p.x, p.y, 2)
flip_switch(p.x, p.y)
end
active_switches = {}
end
function hit_switches(self)
for p in all(colliding_tiles(self)) do
if mget(p.x, p.y) == 2 then
mset(p.x, p.y, 18)
add(active_switches, p)
flip_switch(p.x, p.y)
end
end
end
angles = 10
function t_dist(f)
if f > 30 then f = f + (f - 30) end
return 1/30 * f * (f - 60)
end
function make_transformation(x, y, to)
local t = {
x = x,
y = y,
frame = 1,
ang = 0
}
sfx(5)
function t:update()
self.frame += 1
self.ang += 0.001 * self.frame
if self.frame == 46 then
del(entities, self)
add(entities, make_player(self.x, self.y, to))
end
end
function t:render()
if self.frame <= 45 then
for i = 1, angles do
local x = self.x + cos(i / angles + self.ang) * t_dist(self.frame)
local y = self.y + sin(i / angles + self.ang) * t_dist(self.frame)
rectfill(x, y, x + 3, y + 3, 3)
end
end
end
return t
end
spirit_frames = {11, 10, 11, 12}
function make_spirit(x, y)
local spirit = {
x = x,
y = y,
type = make_spirit,
frames_to_move_up = 24,
frame = 1,
state_props = { "x", "y", "dist_left" }
}
function spirit:update()
self.frame += 1
if self.frame / frame_del >= #spirit_frames then self.frame = 1 end
if self.frames_to_move_up > 0 then
self.y -= 1
self.frames_to_move_up -= 1
end
end
function spirit:render()
spr(spirit_frames[flr(self.frame / frame_del) + 1], self.x, self.y)
end
return spirit
end
function make_sliggoo(x, y)
local sliggoo = {
x = x,
y = y,
angle = 0.75,
dir = 1,
state_props = {"x", "y", "angle", "dir"},
frame = 0,
is_deadly = true
}
function sliggoo:update()
if collide_with(self, make_boulder) then
del(entities, self)
add(entities, make_spirit(self.x, self.y))
end
if collide_at(self, self.x + sin(self.angle) * slig_speed, self.y + cos(self.angle) * slig_speed) then
self.angle -= self.dir * 0.25
elseif not collide_at(self, self.x + sin(self.angle + 0.25) * 2, self.y + cos(self.angle + 0.25) * 2) then
self.angle += self.dir * 0.25
self.x += sin(self.angle)
self.y += cos(self.angle)
end
self.frame += 1
if self.frame >= 10 then self.frame = 0 end
self.x += sin(self.angle) * slig_speed
self.y += cos(self.angle) * slig_speed
add(switch_hitters, self)
end
function sliggoo:render()
local rot = 0
if self.angle % 1 == 0 or self.angle % 1 == 0.5 then
rot = 16
end
local flipped = false
local vflipped = false
if self.angle % 1 == 0 or self.angle % 1 == 0.25 then
flipped = true
vflipped = true
end
spr(6 + self.frame / 5 + rot, self.x, self.y, 1, 1, flipped, vflipped)
end
return sliggoo
end
types[6] = make_sliggoo
active_checkpoint = nil
function make_checkpoint(x, y)
local c = {
x = x, y = y, active = false, flashing = 0, state_props = {},
off = true
}
function c:update()
if self.flashing > 0 then
self.flashing -= 1
end
if g_player ~= nil and dist(self.x, self.y, g_player.x, g_player.y) > 8 then
self.off = true
end
if self.off and g_player ~= nil and dist(self.x, self.y, g_player.x, g_player.y) < 8 then
if active_checkpoint ~= nil then
active_checkpoint:deactivate()
end
self.off = false
self.flashing = 10
self.active = true
sfx(0)
activate_checkpoint()
active_checkpoint = self
end
end
function c:deactivate()
self.flashing = 10
self.active = false
end
function c:render()
if self.active then
pal(1, 2)
pal(12, 14)
end
if self.flashing > 0 then
pal(1, flr(rnd()*16))
pal(12, flr(rnd()*16))
end
spr(50, self.x, self.y)
pal(1,1)
pal(12,12)
end
return c
end
types[50] = make_checkpoint
map_width = 256
map_height = 128
function is_wall(i)
if is_solid(i) or i == 48 or i == 17 or i == 56 or i == 57 then
return 1
else
return 0
end
end
tiles = {58, 24, 25, 8, 59, 3, 5, 4, 60, 35, 37, 36, 9, 19, 21, 20}
-- 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
function tile_for(x, y)
local u, l, d, r
u = is_wall(mget(x, y - 1))
d = is_wall(mget(x, y + 1))
l = is_wall(mget(x - 1, y))
r = is_wall(mget(x + 1, y))
return tiles[u * 8 + d * 4 + l * 2 + r + 1]
end
function place_entities()
local x = 0
local y = 0
local px
local py
while x < map_width do
while y < map_height do
local t = mget(x, y)
if t == 20 then
mset(x, y, tile_for(x, y))
end
if types[t] ~= nil then
mset(x, y, 0)
add(entities, types[t](x * 8, y * 8))
end
y += 1
end
y = 0
x += 1
end
activate_checkpoint()
end
function _init()
-- iterate over map to find the player
place_entities()
end
title_switch_tick = 0
title_bg = 1
title_going = false
title_bgs = {0, 1, 12, 13}
oldcam = {x = cam.x, y = cam.y}
function _update()
local camdiff = {x = oldcam.x - cam.x, y = oldcam.y - cam.y}
oldcam = {x = cam.x, y = cam.y}
for b in all(bgtiles) do
b.x += camdiff.x / 2
b.y += camdiff.y / 2
if b.x < -8 then b.x += 144 end
if b.x > 128 then b.x -= 144 end
if b.y < -8 then b.y += 144 end
if b.y > 128 then b.y -= 144 end
end
-- particles
particle = particles.left
while particle ~= nil do
local p = particle.value
p.x += p.xspeed
p.y += p.yspeed
if p.gravity ~= nil then
p.yspeed += p.gravity
end
p.life -= 1
if p.life <= 3 then
p.size = p.life
end
if p.life <= 0 then
if particle.left ~= nil then
particle.left.right = particle.right
end
if particle.right ~= nil then
particle.right.left = particle.left
end
if particle.left == nil and particle.left == nil then
particles = ll_create()
end
end
particle = particle.right
end
if titlescreen then
if title_going then
title_switch_tick += 1
if title_switch_tick % 2 == 0 then
title_bg += 1
if title_bg > #title_bgs then
title_bg = 1
end
end
if title_switch_tick > 70 then
titlescreen = false
end
end
if btnp(k_j, 0) and not title_going then
sfx(11)
title_going = true
end
return
else
if not won then
thirtieths += 1
end
if thirtieths >= 30 then
thirtieths -= 30
seconds += 1
if seconds >= 60 then
seconds -= 60
minutes += 1
end
end
end
if not dead and not won then
for e in all(entities) do
e:update()
end
reset_switches()
for p in all(switch_hitters) do
hit_switches(p)
end
switch_hitters = {}
elseif dead then
dead_screen()
else
win_screen()
end
end
dead_tick = 0
dead_msg = "find what is yours!"
restart_msg = "press x to muster your courage"
function die()
sfx(4)
dead = true
dead_tick = 0
end
function activate_checkpoint()
for e in all(entities) do
local backup = {}
for p in all(e.state_props) do
backup[p] = e[p]
end
e.backup = backup
end
end
function restore_checkpoint()
dead = false
for e in all(entities) do
for p in all(e.state_props) do
e[p] = e.backup[p]
end
end
end
function dead_screen()
dead_tick += 1
if dead_tick >= 1000 then dead_tick -= 100 end
if btnp(k_x, 0) then
restore_checkpoint()
end
end
won_msg = "the end"
final_time = "final time:"
win_tick = 0
function win_screen()
win_tick += 1
if win_tick > 1000 then
win_tick = 900
end
end
function draw_win()
rectfill(cam.x, cam.y, cam.x + 128, cam.y + 128, 7)
local x = 64 - #won_msg * 4 / 2
print(sub(won_msg, 0, max(0, win_tick - text_delay) / frames_per_char), cam.x + x, cam.y + 20 + 2 * sin(win_tick / 100), 0)
local x = 64 - #final_time * 4 / 2
print(sub(final_time, 0, max(0, win_tick - text_delay * 3) / frames_per_char), cam.x + x, cam.y + 50 + 2 * sin(win_tick / 100), 0)
local sec = ""..seconds
if seconds < 10 then sec = "0"..seconds end
local t = minutes..":"..sec
local x = 64 - #t * 4 / 2
print(sub(t, 0, max(0, win_tick - text_delay * 5) / frames_per_char), cam.x + x, cam.y + 70 + 2 * cos(win_tick / 100), 0)
end
won = false
function win()
won = true
end
function ll_create()
ll = { left = nil, right = nil, length = 0 }
return ll
end
function ll_left(ll)
if ll.left == nil then
return nil
else
return ll.left.value
end
end
function ll_right(ll)
if ll.right == nil then
return nil
else
return ll.right.value
end
end
function ll_length(ll)
return ll.length
end
function ll_push_right(ll, e)
ll.length += 1
new_elem = {
value = e,
right = nil,
left = ll.right
}
if ll.left == nil then
ll.left = new_elem
end
if ll.right != nil then
ll.right.right = new_elem
end
ll.right = new_elem
end
function ll_pop_left(ll, e)
if ll.length > 0 then
ll.length -= 1
local lef = ll.left.value
ll.left = ll.left.right
ll.left.left = nil
return lef
else
return nil
end
end
bgtiles = {
{x = 10, y = 10, t = 70},
{x = 74, y = 10, t = 71},
{x = 74, y = 74, t = 70},
{x = 10, y = 74, t = 86},
{x = 42, y = 42, t = 70},
{x = 106, y = 42, t = 71},
{x = 106, y = 106, t = 70},
{x = 42, y = 106, t = 86}
}
particles = ll_create()
minutes = 0
seconds = 0
thirtieths = 0
title_tick = 0
text_delay = 50
restart_text_delay = 150
frames_per_char = 4
function _draw()
cls()
if titlescreen then
title_tick += 1
if title_tick > 100 then title_tick -= 100 end
camera(0, 0)
rectfill(0, 0, 128, 128, title_bgs[title_bg])
palt(0, false)
palt(2, true)
spr(64, 40, 30 + 2 * sin(title_tick/50), 6, 2)
palt(2, false)
palt(0, true)
local y = 68 + 2 * sin(title_tick/100)
rectfill(28, y, 28 + 69, y + 6, 6)
print("by jj", 54, y + 1, 0)
local y = 100 + 2 * cos(title_tick/100)
rectfill(49, y, 49 + 29 , y + 6, 6)
print("press z", 50, y + 1, 0)
rectfill(1, 1, 126, 1, 0)
rectfill(1, 1, 1, 126, 0)
rectfill(126, 126, 126, 1, 0)
rectfill(126, 126, 1, 126, 0)
return
end
cam.x = max(cam.x, 0)
cam.y = max(cam.y, 0)
camera(cam.x, cam.y)
for b in all(bgtiles) do
spr(b.t, cam.x + b.x, cam.y + b.y)
end
if shaking then
camera(cam.x - 2 + rnd()* 4, cam.y - 2 + rnd() * 4)
shaking = false
end
for e in all(entities) do
e:render()
end
map(cam.x / 8,cam.y / 8, cam.x - cam.x % 8, cam.y - cam.y % 8, 17, 17)
local particle = particles.left
while particle ~= nil do
local p = particle.value
rectfill(p.x - p.size / 2, p.y - p.size / 2, p.x + p.size / 2, p.y + p.size / 2, p.col)
particle = particle.right
end
-- debugtxt = particles.length
if won then
draw_win()
end
if dead then
rectfill(g_player.x - dead_tick, g_player.y - dead_tick, g_player.x + dead_tick, g_player.y + dead_tick, 0)
g_player:render()
local x = 64 - #dead_msg * 4 / 2
print(sub(dead_msg, 0, max(0, dead_tick - text_delay) / frames_per_char), cam.x + x, cam.y + 20 + 2 * sin(dead_tick / 100), 7)
local x = 64 - #restart_msg * 4 / 2
print(sub(restart_msg, 0, max(0, dead_tick - restart_text_delay) / frames_per_char), cam.x + x, cam.y + 40 + 2 * cos(dead_tick / 100), 7)
end
print(debugtxt, cam.x, cam.y, 2)
end
-- from dusk child, just because it's robust and works
function dist(ax,ay,bx,by)
a=ax-bx
b=ay-by
a*=0.01
b*=0.01
a=a*a+b*b
if (a==0) return 0--avoid crash
a=sqrt(a)*100
--clamp huge numbers
if(a<0) return 32767
return a--done!
end
__gfx__
00000000000660000000000001101111111111011111011000000000000000001111110115121151000000000000000000000000000000000000000000000000
00066000066006600000000015115515551555155515151100000000000330005515551515155511000770000770077000077000000000000000000000000000
00600600060660600000000011215515112155151121551100000000003333001121551511215510007000000077770000000700006006000007600000000000
06007060606706060000000012512155525121555251215100333300033333305251215512512151770007700000000007700077000770000066670000000000
0607006060607606007eee0011155552511555525115551003333330033333305115555211155551000770000777777000077000000770000076660000000000
006006000606606007eeeee001521255155212551552125103333330003333001552125501521251077000770000000077000770006006000006700000000000
00066000066006600eeeeee01525151115251511152515110d3333d800ddd0801525151115251511000007000077770000700000000000000000000000000000
000000000006600066666666151151522511515225115151ddddddd80ddddd801111011115115151000770000770077000077000000000000000000000000000
04444440251211550000000015121155251211552512115100000088000000000111110111111110000000000000000000000000000000000000009000000000
494994945515551500000000151555155515551555155511000033dd000330881515551555155511000000000000000000000000007000000000000900000000
449ff94411015015000000001121551511215515112155110003333d0033330d1121551511215511000000000000000000000000007000000000000900000000
049f494052512155000000001251215552512155525121510003333d033333dd1251215552512151000000000000000000000000770007079090000900000000
04f4944051155552000000001115555251155552511555100003333d033333dd1115555251155551000000000000000000000000700008788980000900000000
04949f4015021055000000000152125515521255155212510003333d003333dd1552125515521251c7cccccc0000000000000000777777779999999900000000
0449f94015251511007eee00152515111525151115251511000033dd0003300d1525151115251511cccccccc0000000000000000077777700999999000000000
049f994025115152666666661511515225115152251151510000000d000000000111011111110110111111110000000000000000076007600490049000000000
00000000000000000000000015121155251211552512115100000000000540000000000000000000000000000310000000000130006060000000000000000000
000000000000000000000000151555155515551555155511000000000444445000000000000000000000000003331000000013300086800000bb000000000000
0000c000000444440000000011215515112155151121551100050000444444440000000000000000000000000333333113333330006660000b000b0b00000000
0c00c000004444440000000012512155525121555251215100575000544444550000000000000000000000000333333333333330006660000b0008b800000000
00c0000c044fffff0070007001155552511555525115551000050000444444450000000006620000000000000033333333333330056560663b300bbb00000000
00c000c044f07f0700660066155212551552125515521251000000005444454500000ddd6552500000000000000333eddde33330056560063b303bb300000000
000000004ff00f0005650565152515111525151115251511000000005545445500000ddd555520000055000000dddddddddddd3000066006bbb3bbb300000000
000000004fffffff05550556011101111111011111110110000000000555555000d000d01151000000550500d5ddddd55dd5dddd056656650bbbbbb000000000
2512115500fffff00000000002022020222222220202020200000000cc0000cc1512115525121151011111000111111015121151000000000000000000000000
551555150ee888e000071000200000022eeeeee220e0e0e000000000ccc00ccc0115551555155510151555111515551115155511011000000001000100000000
112155150e888880007c1100000000002e22e2e20e020202000000000cccccc00121551511215510112155111121551111215511010100000001111100000000
52512155088822800ccc1110200000022e2e22e2202020e00776000000cccc000151215552512100125121511251215112512151010100000051c1c100000000
51155552088888820111ccc0200000022ee22ee20e020e027666500000cccc000011155251155100111555511115551011155510000011111151111100000000
155212550f88822f0011cc00000000002e22e2e22020e0e0666060000cccccc00000115515521000155212511552125115521251000011111115111000000000
152515110cc111c00001c000200000022eeeeee20e0e0e0266666500ccc00ccc0000015511110000152515111525151115251511000011111111550000000000
25115152011101100000000002022020222222222020202005666500cc0000cc0000001110000000011101101511515101111110000010100010100000000000
25002222222222222222222222222222222222222222200200000000000000005111511500000000000000000000000000000000000000000000000000000000
55550000000000000000002000000000000000000000055000000000000000101000100100000000000000000000000000000000000000000000000000000000
55555555556565655565650556565656565656555555555000000010000000101000000100000000000000000000000000000000000000000000000000000000
56000006500000065000555500055500650060000005655000000010000011005100000100000000000000000000000000000000000000000000000000000000
50ccc1100cccc1100cc10650cc1050c100c10cccc110565000000010000000001000000100000000000000000000000000000000000000000000000000000000
50c11c110c110000c10c100c10c100cc1cc10c110005655000111100000000001000001500dddd00000000000000000000000000000000000000000000000000
50c11c110c11000c106000c1060c10c1c0c10c11005656500000000000000000100000010dddddd0000000000000000000000000000000000000000000000000
50ccc1100ccc110c065650c1050c10c100c10ccc11056550000000000000000051111115000dd000000000000000000000000000000000000000000000000000
50c11c110c11000c106000c1060c10c100c10c110056565000001000000000000000000000000000000000000000000000000000000000000000000000000000
50c11c110c110000c10c100c10c100c100c10c110005655000011000000000000000000000000000000000000000000000000000000000000000000000000000
50ccc1100cccc1100cc10650cc1050c100c10cccc110555000000000000000000000000000000000000000000000000000000000000000000000000000000000
55000000600000056000656500056500650060000005555001000000000000000000000000000000000000000000000000000000000000000000000000000000
25555555555555555555555555555555555555555555550211000000000000000000000000000000000000000000000000000000000000000000000000000000
22000000000000000000000000000000000000000000002200000010000000000000000000000000000000000000000000000000000000000000000000000000
22222222222222222222222222222222222222222222222200000110000000000000000000000000000000000000000000000000000000000000000000000000
22222222222222222222222222222222222222222222222200000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414101414141014141410141414101414141014141
41414141414141414141000000000000000000000000000000000000000000000000000000000041414141414141414141414141414141414141414111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141000094000000000000000000000000000000000041414141414141414141414141414141414141414141414141414184414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141000000009400000000000000000000004141414141414141414141414141414141414141414141414141414111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414242424242424141414184414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414142930000000000008341414111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414242429300000000000000e20032414111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141930000d2000000000000e100a30000834111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414193000000a30000d100e200a300000000003111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141419300000000000000a300a3000000d10000003111414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
4141414141414141414141414141414141414141414141414141414141414141414141414141414151d3e300e2d1000000000000000000a30000003211414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414040404050e1d200000000000000000000000083414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414050d100d200000000000000000000314141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141404050e1d1e100d100e2000000314141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414140404040404040404040414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
__gff__
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__map__
1414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414242424242424242424242424242424242424242424242424242424242424242424242424242414141414141414141414141414141424242424241414
1414141414141414141414141414141414141414141414141414141414141414141414390000000000000000000000220000000000000000000000003814141439000014390000000000000000000000000000000000000000000000000000000000000000000000000014141414141430303030303030301500000000003814
1414141414141414141414141414141414141414141414141414141414141439000000000000002900000028000000141400002900140000320000000014141400000014000000000000000000000000290000000000000000000000001414140000000000000000000038141414141430303030303030303000000000000013
141414143900000000381414141414141414141414141414141414141439000000000000000000141414141414141414141414141414141414141414001414140022001400002222000000000000002214000014002a000000000000000038140000000000000000000000141414141430141424242424141415000000000013
1414141400002a000000141414141414141414141414141414141414140000000000000000000014141414141414141414141414141414141414141400141414001400000000141400000029140000141400000000140000000000000022001400140000003a000000001414141414143014150000000d1314152800002b2c13
1414141400001414000014141414143900001111111414141414141439000000000d000000000014000000060006000600060006000600060006000000141414001428003200141400001414140000000000000000000014002a0014001422140014000000000000000014141414141430141500002800131414040411040414
1414141400221414000014141414140000001111111414141414141400000000000000000000001400140014001400140014001400140014001400141414141400141414141414140000000000000000000000000000000000140014001414141414000000000000001414141414141430303000140404141414141411141414
1414141400141414000014141414140000001411111414141414141400000000000000000000001400000000002800000000000000000000000000000000000000000014000032002222222222222222222222222222222222222222222222222222222222222200001400000014141414140000141414141414141411141414
14141414003814140000001414141400000014111114141414141414142900000000000000002a1414141414141414141400001414141414280014140000280000002814001414141414141414141414141414141414141414141414141414141414141414141414141400000000000000000000141414141414141411141414
141414140000143900002214141414000000141111141414141414141414140000002a00000014141414141414141414141414141414141414141414141414140014141428282828282828282828282828282a2a2828282828002a002828002a0000282800002a00000000000028000029000014141414141414141411141414
1414141400001400000014141414140000001411111414141414141414141414141414141414141414141414141411000000060000000600000000000000141400141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141411141414
1414141400001400000014141414140000001439000000000038141414141414141414141414141414141111111111000000141400001414000000000000000000141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141411141414
14141414220014000000141414141400000014000d0006000000381414141414141414141414141414111114141414000000000000000000000000000000000000141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141411141414
1414141414001400000014141414140000001436000014140000001414141414141414141411111111111414141414141414141414141414141414141414140000141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141411141414
141414143900142200000014141414000000141400002900000000000000002a000038141411111414141400320014141414141414141414141414141414140000141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141411141414
14140d00000014140000001414141400000014141414141414141414141414141400002a0000000000141400140014141414141414142414141414141414140000141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141411141414
1414360029001414000000000000000000001414141414141414141414141414141414140000141400001400140000002700001111110213141414141414140000141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141411141414
141411141414141400000000320000000000141414142424141414390000000038141414141414141400002a141414143414001414140414141414141414140000141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141411141414
1414221414141414141414141414141414141414141500001314390000000000000000000000003814141414141414140014280000000038141414141414140000141414141414141414141414141414141414141414141427272714141414141414141414141414141414141414141414141414141414141414141411141414
1414141414003814390000000000000000000038141506001314000032000000000000000000000000381414141414141414141428000000141414141414140000141414271414141414141414141414141414141414141434343414141414141414141414141414141414141414141414141414141414141414141411141414
14141439000000000000000000000000000000003814080814390000140000002a2900000000000000000000000000340038141414000000141414141414140000141414341414141414141414141414141414141414141400000014141400000038141414141414141414141414141414141414141414141414141411141414
1439000000000000000022000000220000000000000000000000002a140000001414000000000000000000000000003400001414142a0000141414141414140000000000000000001414141414141414141414141414141400000000000200000000381414141414141414141414141414141414141414141414141411141414
1400000000000028000014002a0014000000000000000000000000141400000014140000000000142a00002a000000340000381414141400140614141414140000003200000002001414141414141414141414141414141400000014141414000000001414141414141414141414141414141414141414141414141411141414
1400000000141414141414141414141414142200000000000000141414000000381422221422221414221414141414140000000038141433140014141414141414141414341414141414141414141414141414141414141400000014141414140000003814141414141414141414141414141414141414141414141411141414
14000000141414141414141439003814141414140000290000141414140000000014141414141414141414140000141414002a0000000000140214141414141414141414001414141414141414390000000000381414141400000014141414141400000014141414141414141414141414141414141414141414141448141414
1400001414141414143900000000003814141414141414141414141414222222221414141414141414141414060214141414141414141414141414141414141414141414061414141414143900000000000000003814141400210014141414141400000038141414141414141414141414141414141414141414141411141414
142a003814141414390000000000000000381414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414390000000000000000000038141400000014141414141414000000381414141414141414141414141414141414141414141411141414
1414000014141414000000000000000000003814141414141414141439381414393814141414141414141414141439000000000000000000000000000000000000000000000000000000000000000000000000000000381414141414141414141414000000000038141414141414141414141414141414141414141411141414
1439000014141439000000000000000000000038141414143900000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038141414140000000000141414141414141414141414141414141414141411141414
1400001414141400000000000000000000000000381414390000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003814141400000000141414141414141414141414141414141414141411141414
140000111111110000000000000100000000002900222200000000002a0000000000000000000000000d3700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038141414000000141414141414141414141414141414141414141411141414
1414141414141414141414141414141414141414141414141414141414141414141414141414141414141422222222222222222222222222222222222222222222141414141414000000000000000000000000000000000000000000000000000000000000000014141414141414141414141414141414141414141411141414
__sfx__
00030000055000f500395303553026530385303d5302f52016520175202c5203d520175303d5303c5302f53033500125002b500365003f5002f5001b5002650038500395002d500105000f500135002b5003f500
002000001b230192301b230212301b230192301b23023230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000200000b1200d1201012018120091202c1000c1000c1000e1001410000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100
000100000816005150041400313002110031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00050000000003b170000002417000000391700000019170000003217000000131700000023170000000f17000000161700000009170000001117000000031700216002160021500214002130021300212001110
0005000001070010700207003070030700507005070090700a0700a0700b0700c0700e0700f07010070110701307014070180701c07021070260702f07033070380703f070310700f07002070020700307000000
000a00003f6703f6703f670286003f6703f6703f670336003f6703f6703f6700f6003f6703f6703f6703d6003f6703f6703f6703f6003f6003f6003f6000f6003f6003f6003f600126003f6003f6003f60028600
0001000000000253702a37030370383703e3703d3703d370263702537022370243702437024370073000730006300063000530005300043000430004300033000430000000000000000000000000000000000000
011000001647016470174001647000400004001a47000400164701b4001a4701640018470004001647016470164700040016470004001b4001a47000400164701a4001a4700040018470004001d4700040000400
001000001d4701d470184001647000000124702247018400000000b4700b470000000447003470000001d4701d47000000000001d4701d4700000000000000000000000000000000447000000000000000000000
001000081d6301c63000030000301d6300003000030000301d6301c630000301b6001d63000030000301d6001d6300160000030000301d6301d6301c600000301d6301c60000030000301d6301d6300003000030
000900000040033470394703a4703a47037470304701e47015470124701347015470194701d4702247023470214701b470124700c4700d4700e4701247014470124700d470084700447006470054700147000400
000200003c6703c6703c6703b6703a670396703867035670346702e670196700b6700767003670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
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 080a4344
01 080a4344
02 090a4344
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