experiments-pico8/games/boybomb.p8
2023-04-26 00:44:45 -05:00

593 lines
32 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

pico-8 cartridge // http://www.pico-8.com
version 41
__lua__
--
#include sprites.lua
function _init()
-- global initialization
palt(11, true)
palt(0, false)
-- start first scene
--start_level(1)
start_scene("explainer")
end
function _update()
if _scene and _scene.update then
_scene.update()
end
end
function _draw()
if _scene and _scene.draw then
_scene.draw()
end
end
function start_scene(name)
_scene = _scenes[name]
_scene_start = time()
if _scene.start then
_scene.start()
end
end
function scene_time()
return time() - _scene_start
end
function draw_title()
cls(2)
if scene_time() < 2 then
fillp(0b1010010110100101)
elseif scene_time() < 4 then
fillp(0b1010110110101101)
end
--rectfill(0, 0, 128, 128, 9)
fillp(0)
print("THE", 10, 0, 6)
print("\^w\^tboy", 10, 8, 11)
print("WHO", 10, 24, 6)
print("\^w\^tbecame", 10, 32, 11)
print("A", 10, 48, 6)
print("\^w\^tbomb", 10, 56, 11)
for n=7,0,-1 do
if scene_time() > n then
sspr(16*n, 16, 16, 16, n*14, 90-((1.5*n)*(1.5*n)), 32+n*2, 32+n*2)
end
end
end
function update_title()
if scene_time() > 15 or btnp(4) then
start_level(1)
end
end
function draw_dusk()
cls()
fillp(0b1010010110100101)
rectfill(0, 0, 128, 12, 2)
fillp(0)
rectfill(0, 12, 128, 64, 2)
-- trick: make other fill transparent
fillp(0b1010010110100101.1)
rectfill(0, 50, 128, 60, 9)
fillp(0)
end
function draw_explainer()
draw_dusk()
map(0, 0, 0, 16, 16, 8)
local st = scene_time()
local bcolors = {8, 9, 10}
local bcolor = bcolors[flr(5*t()%3)+1]
if st < 1 then
print("3", 80, 25, 7)
elseif st < 2 then
print("2", 80, 25, 7)
elseif st < 3 then
print("1", 80, 25, 7)
elseif st < 4 then
print("WATCH OUT!", 40, 15, 7)
end
print("in 1978, frank a. boyman was \n involved in an accident.", 10, 80, 7)
if st > 4 then
print("\nas a bystander of a \n failed nasa experiment")
end
if st > 7 then
print("he became...", 20, 118)
end
if st > 10 then
print("a bomb", 70, 118, bcolor)
end
if st > 15 or btnp(4) then
start_scene("title")
end
if st > 3 and st < 6 then
draw_beam()
end
draw_sprite(exp_spr)
end
function draw_beam()
-- only lime thing
palt(11, false)
local x=30
local y=66
line(x, 0, x, y, 11)
local v = 9*t() % 3
oval(x-(3+v), y-(2+v), x+4+v, y+2+v, 11)
palt(11, true)
--oval(x-(6+v), y-(4+v), x+6+v, y+4+v, 11)
end
function update_explainer()
update_sprite(exp_spr)
local st = scene_time()
if exp_phase == "boy" and exp_spr.x >= 20 then
exp_spr.x = 20
exp_spr.vx = 0
exp_spr.speed = 0
end
if exp_phase == "boy" and st > 5 then
exp_spr = make_sprite(20, exp_spr.y, "boy_bomb", 0.4)
exp_phase = "boy_bomb"
end
if exp_phase == "boy_bomb" and st > 9 then
exp_spr = make_sprite(20, exp_spr.y+8, "bomb_s", 0.1)
exp_phase = "bomb_s"
end
if exp_phase == "bomb_s" and st > 11 then
exp_spr = make_sprite(20, exp_spr.y-8, "bomb_m", 0.1)
exp_phase = "bomb_m"
end
end
function start_explainer()
exp_spr = make_sprite(-10, 50, "boy_walk", 0.2)
exp_spr.loop = true
exp_spr.vx = .3
exp_spr.vy = .02
exp_phase = "boy"
end
levels = {
{name="lobby 1",
mapx=16, mapy=8, bomb_x=6, bomb_y=7,
par=2, boss=8,
},
{name="lab 1",
mapx=26, mapy=8, bomb_x=6, bomb_y=7,
par=5, boss=10,
},
}
function start_level(n)
start_scene("level")
last_gravity = t()
exploding = false
level_dets = 0
level_boxes = 0
level_num = n
level = levels[n]
-- load puzzle
puzzle_grid = {}
for y=1,GRID_H do
puzzle_grid[y] = {0, 0, 0, 0, 0, 0, 0, 0}
for x=1,GRID_W do
puzzle_grid[y][x] = mget(x+level.mapx-1, y+level.mapy-1)
if puzzle_grid[y][x] == GRID_EMPTY then
puzzle_grid[y][x] = 0
elseif puzzle_grid[y][x] ~= 0 then
level_boxes += 1
end
end
end
bomb_x = level.bomb_x
bomb_y = level.bomb_y
bomb_spr = make_sprite(bomb_x*8, bomb_y*8, "bomb_s", 0)
end
particles = {}
function add_explosion(gx, gy, colors)
sfx(0)
local x = gx*8+4
local y = gy*8+4
for i=0,30 do
local angle = rnd()
add(particles, {
x=x, y=y,
vx=(rnd(1)+1)*cos(angle),
vy=(rnd(1)+1)*sin(angle),
age=10+rnd(10),
color=rnd(colors),
})
end
end
function draw_explosions()
for p in all(particles) do
pset(p.x, p.y, p.color)
end
end
function update_explosions()
for i=#particles,1,-1 do
local p = particles[i]
p.x += p.vx
p.y += p.vy
p.age -= 1
if p.age <= 0 then
deli(particles, i)
end
end
end
function draw_level()
cls()
-- HUD
map(0, 8, 0, 0, 16, 16)
for y=1,GRID_H do
for x=1,GRID_W do
n = puzzle_grid[y][x]
if n > 0 then
spr(n, x*8, y*8)
end
end
end
print(level.name, 90, 5, 11)
local jx = 86
print("par "..level.par, jx, 24, 11)
print("dets "..level_dets, jx, 32, 11)
print("chain "..10, jx, 40, 11)
print("crates "..level_boxes, jx, 48, 11)
spr(level.boss, 10, 108, 1, 2)
print("stay still and don't \nexplode. we're here to help", 20, 110, 7)
bomb_spr.x = bomb_x * 8
bomb_spr.y = bomb_y * 8
draw_sprite(bomb_spr)
draw_explosions()
end
function can_move(dx, dy)
local ny = bomb_y+dy
local nx = bomb_x+dx
if ny == 0 or ny > GRID_H-1 or nx == 0 or nx > 8 then
return false
end
if puzzle_grid[ny][nx] ~= 0 then
return false
end
return true
end
function explosion_adjacent(x, y)
-- called when the block next door explodes
local block = puzzle_grid[y][x]
if block == BOX_WOOD then
puzzle_grid[y][x] = 0
elseif block == BOX_FIRE then
puzzle_grid[y][x] = GRID_EXPLODE_NEXT
end
end
function process_block(x, y)
-- called on each block each frame
local block = puzzle_grid[y][x]
if block == GRID_EXPLODE_NEXT then
add_explosion(x, y, {4, 15}) -- wood
puzzle_grid[y][x] = GRID_EXPLODE
elseif block == GRID_EXPLODE then
local ys = {0}
local xs = {0}
if y > 1 then
add(ys, -1)
end
if y < GRID_H then
add(ys, 1)
end
if x > 1 then
add(xs, -1)
end
if x < GRID_W then
add(xs, 1)
end
for xx in all(xs) do
for yy in all(ys) do
if xx~=0 or yy~=0 then
explosion_adjacent(x+xx, y+yy)
end
end
end
puzzle_grid[y][x] = 0
end
end
function update_level()
-- bombs break adjacent tiles
-- fire boxes turn into more bombs
-- goal: break all boxes
-- ??? only 8 positions?
-- update grid
fall_speed = 0.3
if exploding then
if bomb_spr.speed == 0 and bomb_spr.anim then
exploding = false
bomb_spr.frame = 0
bomb_y = 0
end
end
if t() - last_gravity > fall_speed then
last_gravity = t()
for y=GRID_H,1,-1 do
for x=1,GRID_W do
process_block(x, y)
-- fall down
if y < GRID_H
and puzzle_grid[y+1][x] == 0
and puzzle_grid[y][x] != 0
then
puzzle_grid[y+1][x] = puzzle_grid[y][x]
puzzle_grid[y][x] = 0
sfx(1)
-- crushed, explode
if y+1 == bomb_y and x == bomb_x then
explode()
puzzle_grid[y+1][x] = 0
end
end
end
end
end
update_sprite(bomb_spr)
update_explosions()
if exploding then
if bomb_spr.frame > 10 and bomb_spr.anim then
-- when explosion hits last frame, particles / update grid
add_explosion(bomb_x, bomb_y, {8, 9, 10})
puzzle_grid[bomb_y][bomb_x] = GRID_EXPLODE
end
-- exploding means we're done before input comes
return
end
-- movement
if btnp() then
if can_move(-1, 0) then
bomb_x -= 1
elseif can_move(-1, -1) then
bomb_x -= 1
bomb_y -= 1
end
end
if btnp() then
if can_move(1, 0) then
bomb_x += 1
elseif can_move(1, -1) then
bomb_x += 1
bomb_y -= 1
end
end
if btnp() then
explode()
end
-- DEBUG LEVEL SELECT
if btnp() then
level_num = max(level_num-1, 1)
start_level(level_num)
end
if btnp() then
level_num = min(level_num+1, #levels)
start_level(level_num)
end
-- fall immediately
if bomb_y < GRID_H and puzzle_grid[bomb_y+1][bomb_x] == 0 then
bomb_y += 1
end
end
function explode()
exploding = true
bomb_spr.speed = 0.1
level_dets += 1
end
-- globals
_scene = nil
_scenes = {}
_scene_start = 0
_scenes.title = {start=nil, draw=draw_title, update=update_title}
_scenes.explainer = {start=start_explainer, draw=draw_explainer, update=update_explainer}
_scenes.level = {start=nil, draw=draw_level, update=update_level}
total_dets = 0
GRID_W = 8
GRID_H = 11
GRID_EMPTY = 136
BOX_WOOD = 137
BOX_STEEL = 138
BOX_FIRE = 139
BOX_FROG = 140
BOX_NUKE = 141
BOX_WATER = 142
GRID_EXPLODE = -1
GRID_EXPLODE_NEXT = -2
animations = {
boy_walk={frames={[0]=2, 0, 4, 0}, w=2, h=2},
boy_bomb={frames={[0]=32, 34, 36, 38, 40, 42, 44, 46}, w=2, h=2},
bomb_s={frames={[0]=64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76}, w=1, h=1},
bomb_m={frames={[0]=80, 82, 84, 86, 88, 90, 92}, w=2, h=2}
}
-- globals
__gfx__
bbbb00000bbbbbbbbbbb00000bbbbbbbbbbb00000bbbbbbbbbaaaabbbbb44bbbb999999bbb5555bbb666666bb666666bbbaaaabbbbb66bbbbbccbccbbccbbbbb
bbbbffff0bbbbbbbbbbbffff0bbbbbbbbbbbffff0bbbbbbbbbfffabbbb4444bbb9ffff9bb544445b65ffff5665444456bb666abbbb6666bbbcbbcbbccbbccbbb
bbbbfcfcbbbbbbbbbbbbfcfcbbbbbbbbbbbbfcfcbbbbbbbbbb0000abbb0404bb993f3f9955040455653f3f5665040456bb6666abbb8686bbbbcb66666666bcbb
bbbbffffbbbbbbbbbbbbffffbbbbbbbbbbbbffffbbbbbbbbbb0f0faabb4444bb99ffff995544445565ffff5665444456bb8686aabb6666bbbbb6555555556bbb
bbbbffffbbbbbbbbbbbbffffbbbbbbbbbbbbffffbbbbbbbbbbffffbbbd4444db99ffff995544445565ffff5665444456bb6666bbbd6666dbbb655eeffee556bb
b5555fff555bbbbbb5555fff555bbbbbb5555fff555bbbbbb79ff97bbddd4ddb999ff999bb54455b665ff56666544566b796697bbdd66ddbb655eeeffeee556b
555557f7555bbbbb555557f7555bbbbb555557f7555bbbbb77799777dddd7dddbaaffaab22b44522b99ff99bb994499b77699677ddd66dddb65eefeffefee56b
55555777555bbbbb55555777555bbbbb55555777555bbbbb777f7777ddddddddaaaaaaaa22244222999999999999999977666677ddd66dddb65effeffeffe56b
bff557775fbbbbbbbff557775fbbbbbbbff557775fbbbbbb77777777ddddddddfba5aabf42222224999599999995999977666677ddd66dddb65eeeffffeee56b
bff557775fbbbbbbbff557775fffbbbbbff557775fbbbbbb77555557dddd0dd7fbaaaabf444222b49b9999b99b9999b977555556ddd66dd6b65effeffeffe56b
bff551115fbbbbbbbff551115bbbbbbbbbfff1115fbbbbbb7f44444fd7ddddd4faa5aaafb2222224599599955b9599b566444446d6ddddd6b65eefeffeefe56b
bbf111111bbbbbbbbbf111111bbbbbbbbbbf11111bbbbbbbbf44444bb4dd0ddbbaaaaaabb222222bb999999bbb99999bb644444bb6dddddbb655eeeffeee56bb
bbb111111bbbbbbbbbb1111111bbbbbbbbb111111bbbbbbbbb44444bbbdddddbbaaaaaabb242422bb999999bb9999999bb44444bbbdddddbbb65555665556bbb
bbb111b11bbbbbbbbbb111bb111bbbbbbbb111b11bbbbbbbbb44b44bbbd5b5dbbbaabaab22424222bb99b99bb999b999bb44b44bbbd5b5dbbbb666677666bbbb
bbb111b11bbbbbbbbbb111bb444bbbbbbb411bb11bbbbbbbbb44b44bbb55b55bbb22b22bb99b99bbbb55b55bbb55b55bbb44b44bbb55b55bbbbbbbb66bbbbbbb
bbb444b444bbbbbbbbb444bbbbbbbbbbbb44bbb444bbbbbbb555b555b555b555b222b222999b999bb555b555b555b555b555b555b555b555bbbbbbb77bbbbbbb
bbbb00000bbbbbbbbbbb0000bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbffff0bbbbbbbbbbbffff0bbbbbbbbbbb0000bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbfcfcbbbbbbbbbbbbfcfcbbbbbbbbbbbbffff0bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbffffbbbbbbbbbbbbffffbbbbbbbbbbbbfcfcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbffffbbbbbbbbbbbbffffbbbbbbbbbbbbffffbbbbbbbbbbbb0006bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
b5555fff555bbbbbbb555fff55bbbbbbbbbbffffbbbbbbbbbbbb0fff6bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
555557f7555bbbbbb55557f7555bbbbbbbb55fff0bbbbbbbbbbb0cfcbbbbbbbbbbbb0066bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
55555777555bbbbbb5555777555bbbbbbb0557f750bbbbbbbbbbffffbbbbbbbbbbbb0fff0bbbbbbbbbbb0660bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bff557775fbbbbbbbff557775fbbbbbbb0555777555bbbbbbbb05fff0bbbbbbbbbbb00fcbbbbbbbbbbbb0fff0bbbbbbbbbbb666bbbbbbbbbb66bbbbbbbbbbbbb
bff557775fbbbbbbbff557775fbbbbbbbff557775fbbbbbbbb0557f750bbbbbbbbbbffff0bbbbbbbbbbb00fcbbbbbbbbbbb0000bbbbbbbbbbbb6bbbbbbbbbbbb
bbfff1115fbbbbbbbbfff1115fbbbbbbbff557775fbbbbbbb055577750bbbbbbbbb05fff0bbbbbbbbbbbffff0bbbbbbbbbb000c0bbbbbbbbbb000bbbbbbbbbbb
bbbf11111bbbbbbbbbbf11111bbbbbbbbbfff1115fbbbbbbbff5577750bbbbbbbb0557f750bbbbbbbbb05fff0bbbbbbbbbb00ff0bbbbbbbb0000700bbbbbbbbb
bbb111111bbbbbbbbbb111111bbbbbbbbbbf11111bbbbbbbb0f557775bbbbbbbb055577750bbbbbbbb0057f750bbbbbbbb000000bbbbbbbb0000070bbbbbbbbb
bbb111b11bbbbbbbbbb111b11bbbbbbbbbb111111bbbbbbbbb0ff1115bbbbbbbb0f5577000bbbbbbb005000050bbbbbbb0007f750bbbbbbb0000000bbbbbbbbb
bb411bb11bbbbbbbbbb41bb11bbbbbbbbbb011b11bbbbbbbbbbf11111bbbbbbbb0f500000bbbbbbbb005000000bbbbbbb00000000bbbbbbb0000000bbbbbbbbb
bb44bbb444bbbbbbbbb4bbb44bbbbbbbbbb011b40bbbbbbbbbb000000bbbbbbbbb0000000bbbbbbbb00000000bbbbbbbb00000000bbbbbbbbb000bbbbbbbbbbb
bb66bbbbbb9abbbbbbb9bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb8bbbbbb88bbb0bb88b0bbbb88bbb000000000000000000000000
bbbb6bbbbbbb6bbbbbbbabbbbbbb9bbbbbb99bbbbbb99bbbbbb99bbbbbb99bbbbbb99bb0b888bbbbbbb8bbb8bbb8bbb8bbb8bbb8000000000000000000000000
bbb00bbbbbb00bbbbbb00bbbbbb00bbbbbb90bbbbbb90bbbbbb90bbbbab90bbb08b90bbbbb888b00bb888b88bb888b88bb888b88000000000000000000000000
b000700bb000700bb000700bb000700bb000900bb000900bb0009a0bb00a9a0bb08a9a8b0a089aab090899aba9a899aba9a899ab000000000000000000000000
b000070bb000070bb000070bb000070bb009070bb009070bb0a90a0bb0a90a0bb8a90a8b0a989aa0998899909988999a9988999a000000000000000000000000
b000000bb000000bb000000bb000000bb000000bb090900bb090900bb090900bb090900ba998900b9998909b09989a9b99989a9b000000000000000000000000
b000000bb000000bb000000bb000000bb000000bb000000bb000000bb000000bb000080b0aa9000b0a99090baa99a9abaa99a9ab000000000000000000000000
bbb00bbbbbb00bbbbbb00bbbbbb00bbbbbb00bbbbbb00bbbbbb00bbbbbb00bbbbbb00bbbbb000bbbbb000bbb0b99abb0bb99abbb000000000000000000000000
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb8bbbbbbbbb8bbbbb8bbbbbbbbb8bbbbb8bbbbbbbbbbbbbbbbbbbbbbb0000000000000000
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb8bbbbbbbbb8bbbbb8bbbbb8bbb8bbbbbbbbbbb8bbbbbbbbbbbbbbbbbbbb0000000000000000
bbbbbbbbbbbbbbbbbbbbbbbb88bb8bbbbbbbbbbb88bb8bbbb8bbbbbbbbbb8bbbb8bbbbbbbbbbbbb8b8bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
bbbbbbbbbbbbbbbbbbbbbb8888b8bbbbbbbbbb8888b8b8bbbbbbbb88b8b8b8bbbbbbbb8bb8bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
bbbbbbbbbbbbbbbbbbbbbbb898bbbbbbbbbbbbb898bbbbbbbbbbbbb898bbbbbbbbbbbbb8bbbbbbbbbbbbbbb8bbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
bbbbbbbbbbbbbbbbbbbbbbbb98bbbbbbbbbbbbbb98bbbbbbbb9bbbbbbbbbbbbbbb9bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
bbbb8bbbbabbbbbbbbbb8bbb99bbbbbbbbbb899b99bb8bbbbbbb899b99bb8bbbbbbbbbbbb9bbbbbbbbbbbbbbb9bbbbbbbbbbbbbbbbbbbbbb0000000000000000
bbb88bbb88bbbbbb8bb88bbb99bbbbbbbbb999b999abbbbbb8b999b999abbbbbb8bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
bbbb999889bbb8bb88bb999899bbbbbbbbb99aaaa9998bbbbbb99bbbbbb98bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
bbbb98aa9999b888b8bb99aaa999bbb8bbb99abbbaa99bb8b9b9bbbbbbb99bb8b9bbbbbbbbbbbbb8bbbbbbbbbbbbbbb8bbbbbbbbbbbbbbbb0000000000000000
899b999aa999bb98889b98aa9999bb98bb999abab9a99998bb99bbbbb9b99998bbbbbbbbbbb9b9b8bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
b88a98998abbbbbb888a99a8a9bbbbbbbb899abba9abb99bbb89bbbbbbbbb99bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
baa998aaa99998bbb8a9998aa89998bbbba99abbaaa9989bbba99bbbbbb9989bbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
bbb99988a9bbb88bbbb9988aa9bbb88bbbb99aaaa9bbb99bb9b99bbba9bbb99bb9bbbbbbbbbbbbbb8bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
bbb8899a9abbbb9bbbb8899a9abbbb8bbbb899999999998bbbb89bbb9999998bbbbbbbbbbbbbbbbb8bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
bbbb899abbbbbbbbbbbb899abbbbbbbbbbbb899abbbbbbbbbbbb899abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000000000000000
77cc77ccbbbb55555555bbbbbbbbbbbb555555556b5555b65577775577cc77cc77cc77cc77cc77cc788c88cc77cc77cc7555555c000000000000000000000000
77cc77ccbbbb55555555bbbbbbbbbbbb55555555b556655b554444557444444c7555555c7555555c783c38cc7444444c55555555000000000000000000000000
cc77cc77bbbb55555555bbbbbbbbbbbb555555555555555555cc7755c4ffff47c5665657c5a78357cc333c77c438684755555555000000000000000000000000
cc77cc77bbbb55555555bbbbbbbbbbbb555555555654456555444455c4ffff47c5665657c53ea157cc733c77c438684755555555000000000000000000000000
77cc77ccbbbb55555555bbbb55555555bbbbbbbb565445655577cc557444444c7566555c75187e5c7444444c7444444c55555555000000000000000000000000
77cc77ccbbbb55555555bbbb55555555bbbbbbbb55555555b544445b74ffff4c7566555c7555555c7444444c74363f4c55555555000000000000000000000000
cc77cc77bbbb55555555bbbb55555555bbbbbbbbb556655bbbbbbbbbc4ffff47c5555557c5555557c4444447c4363f4755555555000000000000000000000000
cc77cc77bbbb55555555bbbb55555555bbbbbbbb6b5555b6bbbbbbbbc4444447cc77cc77cc77cc77cc444477c4444447c5555557000000000000000000000000
bbbbbbbbbbbbbbbbbb8888bbbbbbbbbbbbbbbbbb444bbbb4444888bbbbbbbbbb0000000044444444555555554444444455555555555555555555555500000000
bbbbbbbbbbbbbbbbb8888bbbbbbbbbbbbbbbb447774bbbb4ee44444444bbbbbb0077770044ffff4455dddd55449999445577775550aaaa055cccccc500000000
bbb88bb88bb888bb88bb5bbb888bbbbbbbb44ee747488bb777e47474448bbbbb077007704f4ff4f45d5dd5d54989989457373775500aa0055111ccc500000000
bbb888b88b88888b88888bb88888bbbbbbb844e777748b874744747e4488bbbb070777704ff44ff45dd55dd549988994577bb37550a00a05511111c500000000
bbb888888b88b88bbbbb88b88b88bbbbbbb884e74d74b887774447e44488bbbb070000004ff44ff45dd55dd549988994577bb3755aa00aa55cc1111500000000
bbb88b888b88888bb88888b88888bbbbbbb884477774b84444e77444448bbbbb077000004f4ff4f45d5dd5d549899894573737755a0000a55ccc111500000000
bbb88bb88b88b88b88885bb88b88bbbbbbb88b448b88b844444444b88bbbbbbb0077770044ffff4455dddd554499994455777755500000055cccccc500000000
bbb5bbb5bb5bbb5bbb5b5bb5bbb5bbbbbbb5bbb5bb5bbb5bbb5b5bb5bbb5bbbb0000000044444444555555554444444455555555555555555555555500000000
bb6666666666666666666666666666bbbb666666666666666666666666b5bbbb0000000000000000000000000000000000000000000000000000000000000000
bb66c6c6c6c6c6c66c6c6c6c6c6c66bbbb666666666666666666666666665bbb0000000000000000000000000000000000000000000000000000000000000000
bb66c6c6c6c6c6c66c6c6c6c6c6c66bbbb66c646c6c6c6c6646c6c6c6b6b6bbb0000000000000000000000000000000000000000000000000000000000000000
bb6666666666666666666666666666bbbb66c646c6c6c6c6646c6c6c6b6b66bb0000000000000000000000000000000000000000000000000000000000000000
bb66c6c6c6c6c6c66c6c6c6c6c6c66bbbb6666666666666666666666666666bb0000000000000000000000000000000000000000000000000000000000000000
bb66c6c6c6c6c6c66c6c6c6c6c6c66bbbb66c6c6c646c6c66c6c6c646c6c66bb0000000000000000000000000000000000000000000000000000000000000000
bb66c6c6c6c6c6c66c6c6c6c6c6c66bbbb66c6c6c646c6c66c6c6c646c6c66bb0000000000000000000000000000000000000000000000000000000000000000
bb6666666666666666666666666666bbbb66c6c6c646c6c66c6c6c646c6c66bb0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
66666666666666663333333300000000000000000000000000000000000000006666666600000000000000000000000000000000000000000000000000000000
33333333333333333333333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
33333333335335333333333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
33333333333533533333333300000000000000000000000000000000000000000aa00aa000000000000000000000000000000000000000000000000000000000
33333333333533533333333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
33333333335335333333333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
33333333353353333333333300000000000000000000000000000000000000006666666600000000000000000000000000000000000000000000000000000000
33333333353353333333333300000000000000000000000000000000000000003333333300000000000000000000000000000000000000000000000000000000
00555555555555555555550000555555555555555555550000000000000000000000000000000000000000000000000000000000000000000000000000000000
05666666666666666666665005666666666666666666665000000000000000000000000000000000000000000000000000000000000000000000000000000000
56666666666666666666666556666666666666666666666500000000000000000000000000000000000000000000000000000000000000000000000000000000
56666666555555556666666556666666555555556666666500000000000000000000000000000000000000000000000000000000000000000000000000000000
56666555776677665556666556666555000000005556666500000000000000000000000000000000000000000000000000000000000000000000000000000000
56665566776677667755666556665500000000000055666500000000000000000000000000000000000000000000000000000000000000000000000000000000
56665677667766776675666556665000000000000005666500000000000000000000000000000000000000000000000000000000000000000000000000000000
56665677667766776675666556665000000000000005666500000000000000000000000000000000000000000000000000000000000000000000000000000000
56657766776677667766566556650000000000000000566500000000000000000000000000000000000000000000000000000000000000000000000000000000
56657766776677667766566556650000000000000000566500000000000000000000000000000000000000000000000000000000000000000000000000000000
56656677667766776677566556650000000000000000566500000000000000000000000000000000000000000000000000000000000000000000000000000000
56656677667766776677566556650000000000000000566500000000000000000000000000000000000000000000000000000000000000000000000000000000
56657766776677667766566556650000000000000000566500000000000000000000000000000000000000000000000000000000000000000000000000000000
56657766776677667766566556650000000000000000566500000000000000000000000000000000000000000000000000000000000000000000000000000000
56656677667766776677566556650000000000000000566500000000000000000000000000000000000000000000000000000000000000000000000000000000
56656677667766776677566556650000000000000000566500000000000000000000000000000000000000000000000000000000000000000000000000000000
56665766776677667765666556665000000000000005666500000000000000000000000000000000000000000000000000000000000000000000000000000000
56665766776677667765666556665000000000000005666500000000000000000000000000000000000000000000000000000000000000000000000000000000
56665577667766776655666556665500000000000055666500000000000000000000000000000000000000000000000000000000000000000000000000000000
56666555667766775556666556666555000000005556666500000000000000000000000000000000000000000000000000000000000000000000000000000000
56666666555555556666666556666666555555556666666500000000000000000000000000000000000000000000000000000000000000000000000000000000
56666666666666666666666556666666666666666666666500000000000000000000000000000000000000000000000000000000000000000000000000000000
05666666666666666666665005666666666666666666665000000000000000000000000000000000000000000000000000000000000000000000000000000000
00555555555555555555550000555555555555555555550000000000000000000000000000000000000000000000000000000000000000000000000000000000
__map__
0000000000000000000000008081828380818200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000070000009091929390919200000084858687000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000b170a00009091929390919200000090919293000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000061b891a08009091929390919200000090919293000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000001689898918009091929390919200000090919293000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
b2b2b2b2b2b2b2b2b2b8b8b8b8b8b8b80000000000b8b8b8b8b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
b2b2b2b2b2b2b2b2b2b0b0b0b0b0b0b00000000000b0b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
c0c1c1c1c1c1c1c1c1c2c3c4c4c4c4c5888888888888888800008c00000000008d8d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d0d1d1d1d1d1d1d1d1d2e3e4e4e4e4e500000000000000000000890000000000898900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d0d1d1d1d1d1d1d1d1d2c3c4c4c4c4c500000000000000000000890000000000898900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d0d1d1d1d1d1d1d1d1d2d300000000d500000000000000000000890000000000898900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d0d1d1d1d1d1d1d1d1d2d300000000d500000000000000000000890000000000898900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d0d1d1d1d1d1d1d1d1d2d300000000d500000000000000000000890000000000898900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d0d1d1d1d1d1d1d1d1d2d300000000d500000000000000000000890000000000898900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d0d1d1d1d1d1d1d1d1d2d300000000d588888800008888880000890000000000898900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d0d1d1d1d1d1d1d1d1d2d300000000d5888888000088888800008b8b8b8b8b8b8b8b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d0d1d1d1d1d1d1d1d1d2d300000000d589888900008988890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d0d1d1d1d1d1d1d1d1d2d3d4d4d4d4d589898b89008989890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d0d1d1d1d1d1d1d1d1d2d3d4d4d4d4d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
e0e1e1e1e1e1e1e1e1e2e3e4e4e4e4e500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
c3c4c4c4c4c4c4c4c4c4c4c4c4c4c4c500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d3d4d4d4d4d4d4d4d4d4d4d4d4d4d4d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
e3e4e4e4e4e4e4e4e4e4e4e4e4e4e4e500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
d400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__sfx__
490200003465028650216501c6501865016650166501665017650186501b6502065024650296502d6502e6502d6602b66026660236601f6601b66017660146600e6600b6600966008660176600d6700767006670
390100000265002650026500265002650026500265002650026500265002650006000060000600006000060000600006000060000600006000060000600006000060000600006000060000600006000060000600