Skip to content

Instantly share code, notes, and snippets.

@sparr
Last active February 20, 2020 21:52
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 sparr/bad6793b1edb8f3e8b8a2cefadfad037 to your computer and use it in GitHub Desktop.
Save sparr/bad6793b1edb8f3e8b8a2cefadfad037 to your computer and use it in GitHub Desktop.
Token reduced version of Cards with Personalities v2
pico-8 cartridge // http://www.pico-8.com
version 18
__lua__
-- a deck building game
-- by sebastian lind
music_on=true
function _init()
load_save()
music(1,300)
end
menuitem(1,"toggle music", function()
music_on=not music_on
music(music_on and (game_state == 0 and 1 or 11) or 0,200)
sfx(1)
end)
function reset_match()
play_cards,lane_cards,graveyard,game_state={},{},{},1
end
function start_match(boss_id)
if(music_on)music(11,200)
sfx(1)
boss_unlock_s,tim,lane_i="",0,0
shake+=0.1
for i=0,20 do
init_particle(rnd(128),rnd(128),30+rnd(30),0,0,-4-rnd(3))
end
init_boss(boss_id)
reset_stats(true)
shuffle(deck)
shuffle(lane_deck)
start_lane(2)
end
function start_lane(total)
local m_total=0
local i=1
while (#lane_cards < 4) do
init_card(get_next_lane_index(),i,false)
if lane_cards[i].type == 2 then
if m_total < total then
m_total+=1
i+=1
else
del(lane_cards,lane_cards[i])
end
else
i+=1
end
end
init_card(3,5,false)
end
function _update60()
tim=time()
if game_state == 1 then
is_draw_ready,is_shuffle_ready,is_grave_ready=can_draw(),can_shuffle(),can_grave()
update_heart()
update_shield()
update_boss()
handle_graveyard()
handle_turn_over()
end
foreach(play_cards,update_card)
foreach(lane_cards,update_card)
foreach(resources,update_resource)
foreach(card_effects,update_card_effect)
foreach(particles,update_particle)
handle_game_over()
if game_state == 0 then
handle_menu()
elseif game_state == 1 then
if not card_played and not next_turn and not graveyard_show and confirm==-1 then
if (btnp(⬅️) or btnp(➡️)) change_selected()
if (btnp(⬆️) or btnp(⬇️)) change_row()
if btnp(4) then
if is_draw_ready then
draw_from_deck()
elseif is_shuffle_ready then
shuffle_deck()
elseif is_grave_ready and not graveyard_show then
show_graveyard()
elseif b_select == 1 and row_select == 2 then
attack_boss()
end
end
end
handle_confirm_box()
react_to_confirmation()
elseif game_state == 2 then
update_xp()
end
end
function _draw()
cls()
for c=0,255 do
spr(207+background_id,c%16*8,flr(c/16)*8)
end
if game_state == 0 then
draw_menu()
else
draw_game()
end
end
function drawp(p,func,...)
fillp(p)
func(...)
fillp()
end
function draw_menu()
local wave=sin(tim)
camera(0,m_camera_y)
spr(119,28,4-wave*2,9,6)
print("⬅️ choose background ➡️",18,88,menu_lane == 0 and 12 or 7)
print("⬅️ choose boss ➡️",18,96,menu_lane == 1 and 8 or 7)
foreach(particles,draw_particle)
if menu_lane == 0 then
draw_b_menu()
elseif menu_lane == 1 then
draw_bo_menu()
elseif menu_lane == 2 then
drawp(0b0011001111001100.1,rectfill,30-bu_l_i,104,98+bu_l_i,120,1)
elseif menu_lane == 3 then
draw_about(wave)
elseif menu_lane == -1 then
draw_stats(wave)
end
rect(30-bu_l_i,104,98+bu_l_i,120,7)
print("start", 54,110,7)
if(menu_lane > -1)spr(150,119,m_camera_y+4+wave)
if(menu_lane < 3)spr(166,119,114+m_camera_y+4-wave)
end
function draw_b_menu()
rectfill(0,64,128,80,0)
for i=0,8 do
spr(208+i,4+i*16,68)
if (i >= back_unlock) spr(192,4+i*16,68)
drawp(0b0011001111001100.1,rect,4+back_l_i*16-1,67,4+back_l_i*16+8,76,7)
end
end
function draw_bo_menu()
rectfill(0,64,128,80,0)
local b=(1-boss_l_i)*16
for i=0,7 do
spr(224+i*2,8+i*24+b,64,2,2)
if i >= boss_unlock then
spr(193,1+i*24+b+12,68)
end
end
print(boss_stats[boss_i][2], 8+boss_l_i*24-1+b,56,8)
drawp(0b0011001111001100.1,rect,8+boss_l_i*24-1+b,63,8+boss_l_i*24+15+b,80,7)
end
function draw_about(wave)
print("about",4+wave,4+m_camera_y,12)
print("the goal of the game is to\nreduce the boss hp to zero.\nevery turn starts by drawing\nfrom your deck.you need to buy/\ndefeat cards in the middle to\nmake a better deck.monsters in\nthe lane attack every turn for\n1 damage.when you can't play\nmore cards,end your turn by\npressing ❎ on your deck.\ndon't forget to attack the boss.",2,m_camera_y+12,7)
print("this game was made by:\nsebastian lind @elastiskalinjen\n\nmusic/sfx:\njose ramon garcia @bibikigl\n\ntester:simon lind @ytfftw",0,m_camera_y+86-wave,12)
end
function draw_stats(wave)
print("stats",4+wave,4+m_camera_y,14)
local win_rate = games_won > 0 and flr(games_won / games_played * 100) or 0
local stat_s= "level: " .. level .. "\n\nxp: " .. xp .. " / " .. xp_goal .. "\n\ngames played: " .. games_played .. "\n\nwin rate: " .. win_rate .. " %"
print(stat_s,4,m_camera_y+24,7)
end
function draw_game()
draw_grave_deck()
if graveyard_show then
draw_show_graveyard()
else
draw_boss()
for i=1,max_cards_out do
draw_card_line(d_s_x+2-i*20,d_l_y,i == 5 and 12 or 1)
end
for i=1,3 do
circfill(5+i*5,80,1,i > g_pick and 1 or 12)
end
for i=1,max_cards_out do
draw_card_line(d_s_x+2-i*20,d_s_y,2)
end
foreach(lane_cards,draw_card)
foreach(play_cards,draw_card)
if game_state == 1 then
draw_deck()
draw_lane_deck()
draw_pointer()
draw_confirm()
draw_timer()
end
end
doshake()
foreach(card_effects,draw_card_effect)
draw_ui()
foreach(particles,draw_particle)
foreach(resources,draw_resource)
if (game_state == 2 and level_delay <=10) draw_xp()
end
local function splitd(input, delim, ...)
local out, pos = {}, 0
if type(input) == "string" then
local item
for i = 1, #input do
if sub(input, i, i) == delim then
item = sub(input, pos, i - 1)
add(out, tonum(item) or item)
pos = i + 1
end
end
item = sub(input, pos)
add(out, tonum(item) or item)
end
if ... then
for i = 1, #out do
out[i] = splitd(out[i], ...)
end
end
return out
end
-->8
-- gameplay
function reset_stats(start)
if start then
row_select,c_select,l_select,b_select,active_card_index,grave_index,deck_index,max_cards_out,start_draws,turns,next_turn,next_turn_timer=0,0,1,1,-1,1,0,5,5,0,false,0
deck,play_area,r_draws,r_health,r_block,g_pick={1,1,1,1,1,1,1,2,2,2},{false,false,false,false,false},start_draws,30,0,0
else
r_draws=0
end
r_attack,r_gold,r_destroy,r_remove,r_discard,r_gravedig,r_convert,r_boost=0,0,0,0,0,0,0,0
end
function attack_boss()
sfx(r_attack>0 and 0 or 5)
boss_health-=r_attack
shake=0.1
for i=1,r_attack do
init_particle(boss_x+rnd(74),boss_y+rnd(card_s_h),3+rnd(3),8)
end
boss_h_y,r_attack=r_attack,0
end
function show_graveyard()
sfx(1)
graveyard_show,grave_index=true,1
for c in all(graveyard) do
c.y,c.x,c.w,c.h=card_r_y,card_r_x,card_r_w,card_r_h
c.state=5
end
end
function go_to_next_turn()
next_turn,confirm=true,-1
turns+=1
reset_stats(false)
next_turn_timer=180
end
timer_y,block_t=130,0
function handle_turn_over()
if next_turn_timer > 0 then
timer_y = lerp(timer_y,49,0.3)
if next_turn_timer == 1 then
if (r_block > 0 or block_t > 1) r_block,block_t=0,0
block_t+=1
next_turn=false
elseif next_turn_timer == 60 then --boss
sfx(1)
check_turn_boss()
elseif next_turn_timer == 120 then --monster
sfx(1)
local a=false
for c in all(lane_cards) do
if c.type == 2 then
a=true
shake+=0.05
init_resource("o",218,c.x,c.y-4)
init_particle(c.x+rnd(c.w),c.y+rnd(c.h),1+rnd(2),6)
end
end
if (a)sfx(0)
elseif next_turn_timer == 180 then --deck
for i=1,start_draws do
init_resource("d",3,d_s_x+rnd(card_s_w),d_s_y-4)
end
for c in all(play_cards) do
c.state=4
end
end
next_turn_timer-=1
else
timer_y=lerp(timer_y,130,0.2)
end
end
function handle_game_over()
if game_state == 1 and (r_health < 1 or boss_health < 1) then
music(-1,300)
game_state=2
shake+=0.3
for i=0,#deck do
init_card_effect(d_s_x,d_s_y,rnd(128),rnd(128),2,8)
end
for c in all(lane_cards) do
c.state=6
end
for c in all(play_cards) do
c.state=6
end
games_played+=1
dset(5,games_played)
if boss_health <= 0 then
sfx(6)
games_won+=1
dset(6,games_won)
else
sfx(7)
end
get_xp()
end
if game_state == 2 and c_xp == xp then
if btnp(4) then
reset_match()
start_match(boss_i)
end
if btnp(5) then
sfx(2)
reset_match()
if(music_on)music(1,300)
menu_lane,game_state=0,0
end
end
end
function shuffle_deck()
sfx(9)
deck_index,deck=0,{}
shake+=0.05
for c in all(graveyard) do
add(deck,c.id)
init_card_effect(grave_x+rnd(4),grave_y+rnd(4),d_s_x,d_s_y,2,8)
end
graveyard={}
shuffle(deck)
end
function handle_graveyard()
grave_x=lerp(grave_x,row_select == 2 and b_select == 0 and grave_s_x-16 or grave_s_x,0.1)
if graveyard_show then
if btnp(4) then
dig_the_grave()
elseif btnp(5) then
sfx(2)
graveyard_show=false
end
for c in all(graveyard) do
c.y=lerp(c.y,card_r_y,0.1)
end
if btnp(➡️) then
sfx(4)
if grave_index < #graveyard then
grave_index+=1
else
grave_index=1
end
graveyard[grave_index].y=48
elseif btnp(⬅️) then
sfx(4)
if grave_index > 1 then
grave_index-=1
else
grave_index=#graveyard
end
graveyard[grave_index].y=48
end
end
end
function dig_the_grave()
if can_grave_dig() then
sfx(1)
r_gravedig-=1
local remove_i=grave_index
grave_index=1
local play_area_index = find_a_card_position()
if play_area_index ~= -1 then
init_card(graveyard[remove_i].id,play_area_index,true)
end
del(graveyard,graveyard[remove_i])
end
end
function draw_from_deck()
sfx(3)
for i=1, #play_area do
if can_draw() and not play_area[i] then
local play_area_index = find_a_card_position()
if play_area_index ~= -1 then
deck_index+=1
r_draws-=1
init_card(deck[deck_index],play_area_index,true)
end
end
end
end
function get_next_lane_index()
if lane_i == #lane_deck then
lane_i=0
shuffle(lane_deck)
end
lane_i+=1
return lane_deck[lane_i]
end
function change_row()
if btnp(⬆️) then
if row_select < 2 then
row_select+=1
sfx(4)
end
end
if btnp(⬇️) then
if row_select > 0 then
row_select-=1
sfx(4)
end
end
if row_select ~= 0 then
for i=1,#play_cards do
play_cards[i].active=false
end
end
if row_select ~= 1 then
for i=1,#lane_cards do
lane_cards[i].active=false
end
end
highlight_active_card()
end
function change_selected()
if #play_cards == 0 and row_select == 0 then
c_select = 0
return
end
if btnp(➡️) then
sfx(4)
if row_select == 0 then
if c_select-1 == -1 then
c_select = #play_area+1
end
c_select = find_next_card_in_area(c_select-1,-1)
elseif row_select == 1 then
l_select = (l_select-2)%#play_area+1
elseif row_select == 2 then
b_select = 1-b_select
end
elseif btnp(⬅️) then
sfx(4)
if row_select == 0 then
c_select = find_next_card_in_area(c_select+1,1)
elseif row_select == 1 then
l_select = l_select%#play_area+1
elseif row_select == 2 then
b_select = 1-b_select
end
end
highlight_active_card()
end
function highlight_active_card()
if row_select == 0 then
active_card_index=-1
for i=1,#play_cards do
if play_cards[i].play_index == c_select then
play_cards[i].active=true
active_card_index=i
else
play_cards[i].active=false
end
end
elseif row_select == 1 then
active_card_index=-1
for i=1,#lane_cards do
if lane_cards[i].play_index == l_select then
lane_cards[i].active=true
active_card_index=i
else
lane_cards[i].active=false
end
end
end
end
function find_a_card_position()
for i=1, #play_area do
if not play_area[i] then
play_area[i]=true
return i
end
end
return -1
end
function find_next_card_in_area(index,dir)
if index == 0 or index > #play_area then
return 0
elseif play_area[index] then
return index
else
return find_next_card_in_area(index+dir,dir)
end
end
function react_to_confirmation()
if btnp(5) and not next_turn and ((c_select == 0 and row_select == 0) or
(b_select == 1 and row_select == 2)) then
if confirm == -1 then
confirm=0
sfx(1)
elseif confirm == 2 then
confirm=-1
end
end
if confirm == 1 then
if c_select == 0 and row_select == 0 then
go_to_next_turn()
elseif b_select == 1 and row_select == 2 then
r_health,confirm=0,-1
end
end
end
confirm,confirm_y=-1,150
function handle_confirm_box()
if confirm == 0 then
confirm_y=lerp(confirm_y,40,0.2)
if btnp(4) then
confirm=1
sfx(1)
end
if btnp(5) then
confirm=2
sfx(2)
end
else
confirm_y=lerp(confirm_y,150,0.2)
end
end
function can_draw()
return deck_index < #deck and
#play_cards < max_cards_out and
c_select == 0 and
row_select == 0 and
not card_played and r_draws > 0
end
function can_shuffle()
return c_select == 0 and
row_select == 0 and
deck_index == #deck
end
function can_grave()
return b_select == 0 and
row_select == 2 and
#graveyard > 0
end
function can_grave_dig()
return r_gravedig > 0 and
#play_cards < max_cards_out and
#graveyard > 1
end
background_id,boss_i,menu_lane,m_camera_y,back_l_i,boss_l_i,bu_l_i=1,1,0,0,0,0,0
function handle_menu()
if btnp(2) and menu_lane > -1 then
menu_lane-=1
sfx(4)
end
if btnp(3) and menu_lane < 3 then
menu_lane+=1
sfx(4)
end
if menu_lane == 0 then
if btnp(0) and background_id > 1 then
background_id-=1
sfx(4)
end
if btnp(1) and background_id < back_unlock then
background_id+=1
sfx(4)
end
back_l_i=lerp(back_l_i,background_id-1+0.05,0.2)
elseif menu_lane == 1 then
if btnp(0) and boss_i > 1 then
boss_i-=1
sfx(4)
end
if btnp(1) and boss_i < boss_unlock then
boss_i+=1
sfx(4)
end
boss_l_i=lerp(boss_l_i,boss_i-1+0.05,0.2)
elseif menu_lane == 2 then
if btnp(4) or btnp(5) then
reset_match()
start_match(boss_i)
end
elseif menu_lane == 3 then
init_particle(rnd(128),128+rnd(128),5+rnd(5),1,0,2+rnd(3))
elseif menu_lane == -1 then
init_particle(rnd(128),rnd(128)-128,5+rnd(5),2,0,-2-rnd(3))
end
if menu_lane == 2 then
bu_l_i=lerp(bu_l_i,12,0.2)
else
bu_l_i=lerp(bu_l_i,0,0.2)
end
if menu_lane < 0 then
m_camera_y=lerp(m_camera_y,-128,0.15)
elseif menu_lane > 2 then
m_camera_y=lerp(m_camera_y,128,0.15)
else
m_camera_y=lerp(m_camera_y,0,0.15)
end
end
-->8
-- draw
grave_s_x,grave_x,grave_y,gold_x,attack_x,block_x,draw_x,discard_x,destroy_x,remove_x,health_x=114,114,24,1,19,37,55,73,91,109,120
function draw_ui()
--todo shove all this in a string and unpack it in a loop
rectfill(0,121,128,128,1)
print(get_action_string(),2,122,7)
rectfill(0,0,128,8,1)
spr(1,gold_x,0)
print(r_gold,10,2,10)
spr(2,attack_x,0)
print(r_attack,28,2,6)
spr(8,block_x,sh_time/10)
print(r_block,47,2,13)
spr(3,draw_x,0)
print(r_draws,64,2,2)
spr(9,discard_x,0)
print(r_discard,82,2,5)
spr(4,destroy_x,0)
print(r_destroy,100,2,9)
rectfill(109,0,128,19,1)
spr(6,remove_x,0)
print(r_remove,118,2,4)
spr(h_spr,110,11)
print(r_health,health_x,13,8)
end
function draw_card_line(x,y,c)
rect(x-1,y-1,x+card_s_w+1,y+card_s_h+1,c)
end
function draw_deck()
draw_card_line(d_s_x,d_s_y,0)
if deck_index ~= #deck then
rectfill(d_s_x,d_s_y,d_s_x+card_s_w,d_s_y+card_s_h,2)
spr(196,d_s_x+2,d_s_y+8)
end
rect(d_s_x,d_s_y,d_s_x+card_s_w,d_s_y+card_s_h,8)
if c_select == 0 and row_select == 0 then
drawp(0b0011001111001100.1,rect,d_s_x-1,d_s_y-1,d_s_x+card_s_w+1,d_s_y+card_s_h+1,not is_draw_ready and 14 or 7)
print("d:"..#deck - deck_index, d_s_x-1, d_s_y-8,14)
elseif r_draws > 0 then
rect(d_s_x-1,d_s_y-1,d_s_x+card_s_w+1,d_s_y+card_s_h+1,14)
end
end
function draw_lane_deck()
if not card_read then
if lane_i < #lane_deck then
rectfill(l_d_s_x,d_l_y,l_d_s_x+card_s_w,d_l_y+card_s_h,1)
spr(197,l_d_s_x+2,d_l_y+8)
end
rect(l_d_s_x,d_l_y,l_d_s_x+card_s_w,d_l_y+card_s_h,12)
draw_card_line(l_d_s_x,d_l_y,0)
end
end
function draw_grave_deck()
if #graveyard > 0 then
rectfill(grave_x,grave_y-1,grave_x+card_s_h,grave_y+card_s_w,5)
rect(grave_x+1,grave_y,grave_x+card_s_h-1,grave_y+card_s_w-1,1)
end
if r_gravedig > 0 and not graveyard_show then
spr(5,grave_x-9,grave_y+2)
end
spr(15,grave_x+4,grave_y+2)
drawp(row_select == 2 and b_select == 0 and 0b0011001111001100.1 or nil,rect,grave_x,grave_y-1,grave_x+card_s_h,grave_y+card_s_w,6)
end
function get_action_string()
if (game_state == 2 and c_xp == xp) return "🅾️ = retry | ❎ = back to menu"
if game_state == 1 then
if c_select == 0 and row_select == 0 then --deck selected
return (is_draw_ready and "🅾️ = draw" or
(is_shuffle_ready and "🅾️ = shuffle" or
(#play_cards == max_cards_out and "😐 = area full" or
(r_draws == 0 and "😐 = no draws" or
"")))) .. " | ❎ = end turn"
else --cards selected
if card_read then
return "❎ = close"
elseif row_select == 0 then
return (r_discard > 0 and "🅾️ = discard" or
(r_destroy > 0 and "🅾️ = destroy" or
"🅾️ = play")) .. " | ❎ = " .. (card_choose and "cancel" or "read")
elseif row_select == 1 then -- lane
return (r_convert > 0 and lane_cards[active_card_index].type == 2 and "🅾️ = convert" or
(r_remove == 0 and
(lane_cards[active_card_index].type ~= 2 and
(r_gold >= lane_cards[active_card_index].cost and "🅾️ = buy" or "😐 = coins missing") or
(r_attack >= lane_cards[active_card_index].cost and "🅾️ = slay" or "😐 = attack missing")) or
"🅾️ = remove")) .. " | ❎ = " .. (card_choose and "cancel" or "read")
elseif row_select == 2 then --boss
return (b_select == 0 and
(graveyard_show and
(can_grave_dig() and "🅾️ = dig grave | " or
(r_gravedig > 0 and #play_cards == max_cards_out and "😐 = play area full | " or
(r_gravedig > 0 and #graveyard == 1 and "😐 = 1 card left | " or ""))
) .. "❎ = close" or
(is_grave_ready and "🅾️ = show graveyard" or "😐 = no cards in graveyard")) or
(r_attack > 0 and "🅾️ = attack" or "😐 = no attack") .. " | ❎ = forfeit")
end
end
else
return ""
end
end
function draw_timer()
if timer_y < 128 then
local anim=2*(3-flr(next_turn_timer/60))-2
spr(160+anim,56,timer_y+4,2,2)
spr(216,2,100 - anim*20)
end
end
function draw_pointer()
if play_cards ~= nil and not play_area[c_select] then
spr(row_select==0 and 13 or 14,card_s_x+2-((c_select-1)*20),d_s_y+10)
end
end
function draw_confirm()
rectfill(0,confirm_y,128,confirm_y+32,2)
local c_text=(c_select == 0 and row_select == 0) and "end turn?" or "forfeit?"
local h_text=""
if r_draws > 0 or r_attack > 0 or r_gold > 0 or r_gravedig > 0 or r_convert > 0 then
h_text="you have resources left to use!"
end
print(h_text,3,confirm_y+15,6)
print(c_text,46,confirm_y+4,7)
print("🅾️ = yes | ❎ = no", 26, confirm_y+26,7)
end
function draw_show_graveyard()
print(grave_index .. " of " .. #graveyard .. " is shown",4,32,6)
draw_card(graveyard[grave_index])
print("⬅️/➡️ browse cards",4,graveyard[grave_index].y+52,7)
if r_gravedig > 0 then
print("shovels left: ", 4,14,6)
end
for i=0,r_gravedig-1 do
spr(5,56+i*10,12)
end
end
-->8
-- play_cards
d_s_x,d_s_y,d_e_y,l_d_s_x,l_d_s_y,d_l_x,d_l_y=107,93,81,107,48,89,52
--card_start
card_s_x,card_s_y,card_s_h,card_s_w=89,93,24,12
--played
card_dp_y=52 --deck
card_lp_y=20 --lane
--read
card_r_y,card_r_x,card_r_w,card_r_h,card_played,card_read,card_destroyed,card_choose=42,2,124,46,false,false,false,false
reset_match()
game_state=0
function init_card(id,play_index,is_in_deck)
local the_card=all_cards[id]
local c={
is_in_deck=is_in_deck,
x=is_in_deck and d_s_x or l_d_s_x,
y=is_in_deck and d_s_y-4 or l_d_s_y,
ex=is_in_deck and card_s_x-((play_index-1)*20) or d_l_x-((play_index-1)*20),
ey=is_in_deck and card_s_y or d_l_y,
id=id,
im_id=15+id+((flr((id-1)/16))*16),
cost=the_card[1],
name=the_card[2],
type=the_card[3],
effects=parse_effects(the_card[4]),
play_index=play_index,
active=false,
state=0,
w=card_s_w,
h=card_s_h,
pc=8,
}
c.s_desc = c.type >= 2 and not is_in_deck and "when slain:" or "when played:"
c.desc,c.col,c.hcol,c.ccol=get_effects_desc_id(c.effects),parse_type_col(c.type)
add(is_in_deck and play_cards or lane_cards,c)
end
function card_intro_s(c)
if distance(c.x,c.y,c.ex,c.ey) > 0.5 then
c.x,c.y,c.w,c.h=lerp(c.x,c.ex,0.1),lerp(c.y,c.ey,0.1),lerp(c.w,card_s_w,0.2),lerp(c.h,card_s_h,0.2)
else
c.x,c.y,c.w,c.h=c.ex,c.ey,card_s_w,card_s_h
c.state=1
end
end
function card_idle_s(c)
if c.active then
c.y=lerp(c.y,c.ey-8,0.1)
if not card_played then
if btnp(4) then -- play
local fail=false
if c.is_in_deck then
if r_discard > 0 or r_destroy > 0 then
card_choose,c.state=true,8
else
c.state=2
end
card_played=true
elseif c.type == 2 and not c.is_in_deck and r_convert > 0 then -- convert
card_played,c.state=true,2
elseif c.type >= 1 and not c.is_in_deck and r_remove > 0 then --destroy mid
card_choose,card_played,c.state=true,true,8
elseif c.type <= 1 and r_gold >= c.cost then --buy
card_played,c.state=true,2
elseif c.type == 2 and r_attack >= c.cost then --slay
sfx(0)
card_played,c.state=true,2
else
fail=true
shake+=0.06
end
sfx(fail and 5 or 1)
end
if btnp(5) then --read
sfx(2)
card_played,card_read,c.state=true,true,5
end
end
else
c.y=lerp(c.y,c.ey+1,0.5)
end
end
function card_choose_s(c)
c.y=lerp(c.y,c.is_in_deck and d_s_y-12+sin(tim)*2 or l_d_s_y-12+sin(tim)*2,0.4)
if btnp(4) then
sfx(1)
if c.is_in_deck then
if r_discard > 0 then
c.state=4
r_discard-=1
elseif r_destroy > 0 then
r_destroy-=1
card_destroyed,c.state=true,4
else
c.state=2
end
else
r_remove-=1
card_destroyed,card_played,c.state=true,true,4
end
end
if btnp(5) then
card_played,card_choose,c.state=false,false,0
sfx(2)
end
end
function card_play_s(c)
local dest = c.is_in_deck and card_dp_y or card_lp_y
c.y=lerp(c.y,dest,0.3)
if (c.y < dest+2)c.state = 3
end
function card_action_s(c)
local init_resources=false
if c.is_in_deck then
init_resources=true
else
if c.type <= 1 then
r_gold-=c.cost
init_particle(grave_x,grave_y,1+rnd(3),6)
add(graveyard,c)
elseif c.type == 2 then
if r_convert > 0 then
r_convert-=1
shake+=0.075
init_particle(grave_x,grave_y,1+rnd(3),6)
add(graveyard,c)
else
r_attack-=c.cost
shake+=0.05
init_resources=true
end
end
end
if init_resources then
for e in all(c.effects) do
for i=1,e.num do
init_resource(e.id,e.s_id,c.x+rnd(c.w),c.y+rnd(c.h))
end
end
end
c.state = 4
end
function card_destroy_s(c)
card_played,card_read,card_choose=false,false,false
if c.is_in_deck then
play_area[c.play_index]=false
if not card_destroyed then
add(graveyard,c)
init_particle(grave_x+rnd(c.w),grave_y+rnd(c.h),1+rnd(2),6)
end
del(play_cards,c)
else
del(lane_cards,c)
local id=1
if c.play_index == 5 and g_pick < 3 then --shiny knight
id=3
g_pick+=1
else
id=get_next_lane_index()
end
init_card(id,c.play_index,false)
change_selected()
end
if not card_destroyed then
for i=0,4 do
init_particle(c.x+rnd(c.w),c.y+rnd(c.h),1+rnd(2),random_col(0,c.hcol,c.col))
end
else
sfx(10)
shake+=0.1
for i=0,10 do
init_particle(c.x+rnd(c.w),c.y+rnd(c.h),2+rnd(4),random_col(0,8,9),rnd(4)-2,-3+rnd(2))
end
card_destroyed=false
end
end
function card_read_s(c)
c.y,c.x,c.w,c.h=lerp(c.y,card_r_y,0.4),lerp(c.x,card_r_x,0.4),lerp(c.w,card_r_w,0.3),lerp(c.h,card_r_h,0.3)
if btnp(5) then --back
sfx(1)
card_played,card_read,c.state=false,false,0
end
end
function explode_card(c)
init_particle(c.x+rnd(c.w),c.y+rnd(c.h),1+rnd(2),6)
c.ex+=rnd(100)-rnd(50)
c.ey+=rnd(100)-rnd(50)
c.state=7
end
function card_exploded(c)
c.y,c.x=lerp(c.y,c.ey,0.3),lerp(c.x,c.ex,0.3)
if c.pc > 0 then
c.pc-=1
else
init_particle(c.x+rnd(c.w),c.y+rnd(c.h),1+rnd(2),random_col(1,5,0),0,-3)
c.pc=8
end
end
local update_card_funcs={[0]=card_intro_s,card_idle_s,card_play_s,card_action_s,card_destroy_s,card_read_s,explode_card,card_exploded,card_choose_s}
function update_card(c)
update_card_funcs[c.state](c)
end
function draw_card(c)
if (card_read == true and c.state == 5) or card_read == false then
rectfill(c.x,c.y,c.x+c.w,c.y+c.h,c.col)
line(c.x,c.y,c.x+c.w,c.y,c.hcol)
rectfill(c.x+1,c.y+4,c.x+10,c.y+24,0)
line(c.x+1,c.y+4,c.x+10,c.y+4,1)
spr(c.im_id,c.x+2,c.y+8,1,2)
print(c.cost,c.x+1,c.y+1,c.ccol)
drawp(c.active and 0b0011001111001100.1 or nil,line,c.x,c.y+c.h,c.x+c.w,c.y+c.h,1)
if c.active then
local hcol = row_select == 0 and (r_destroy > 0 and 8 or (r_discard > 0 and 12 or 7)) or (row_select == 1 and (r_convert > 0 and 13 or (r_remove > 0 and 2 or 7)))
drawp(c.active and 0b0011001111001100.1 or nil,rect,c.x-1,c.y-1,c.x+c.w+1,c.y+c.h+1,hcol)
if c.state ~=5 then
rectfill(0,11,106,19,1)
local eff=c.effects
local x_b=1
print(c.name,2,13,c.hcol)
for e in all(c.effects) do
for n=1,e.num do
spr(e.s_id,(#c.name*3.5)+4+x_b*8,11)
x_b+=1
end
end
if r_convert > 0 and c.type == 2 and not c.is_in_deck then
spr(221,c.x+2,c.y-10)
end
end
end
if c.state == 5 then --read
if c.y < card_r_y+1 then
print(c.name,c.x+card_s_w+4,c.y+4,7)
print(c.s_desc,c.x+card_s_w+4,c.y+15,c.hcol)
print(c.desc,c.x+card_s_w+4,c.y+22,7)
end
line(c.x+card_s_w+4,c.y+12,c.x+c.w-2,c.y+12,1)
if not c.is_in_deck and c.type == 2 then
spr(12,c.x+c.w-16,c.y+2)
spr(218,c.x+c.w-8,c.y+2)
end
end
else --not active
if (c.is_in_deck) drawp(0b0011001111001100.1,rect,c.x+1,c.y+1,c.x+c.w-1,c.y+c.h-1,2) --fade
end
end
resources={}
function init_resource(id,spr,x,y)
local r={
id=id,
spr=spr,
x=x,
y=y,
speed=0.08+(flr(rnd(10))/100)
}
local col,ex,ey=0,8,-2
if id == "c" then
ex,col=gold_x,10
r_gold+=1
elseif id == "a" then
ex,col=attack_x,7
r_attack+=1
elseif id == "d" then
ex,col=draw_x,2
r_draws+=1
elseif id == "b" then
ex,col=block_x,5
r_block+=1
elseif id == "t" then
ex,col=discard_x,6
r_discard+=1
elseif id == "k" then
ex,col=destroy_x,0
r_destroy+=1
elseif id == "h" then
ex,ey,col=health_x-8,11,9
r_health+=1
elseif id == "r" then
ex,col=remove_x,2
r_remove+=1
elseif id == "o" then
if r_block > 0 then
ex,ey,sh_time=block_x+rnd(4),rnd(6),50
r_block-=1
init_particle(block_x,2,2,2)
else
ey,ex=11,health_x-8
r_health-=1
end
col=8
elseif id == "g" then
ex,ey,col=grave_x+2,16,4
r_gravedig+=1
elseif id == "m" then
init_particle(gold_x,2,2,9)
r_attack+=r_gold
ex,r_gold,col=attack_x,0,9
elseif id == "e" then
ex,ey,col=l_d_s_x+2,l_d_s_y+8,2
r_convert+=1
elseif id == "i" then
ex,ey,col=d_s_x+2,d_s_y+8,10
for c in all(play_cards) do
local need_re_desc=false
for e in all(c.effects) do
if e.id == "a" then
e.num+=1
need_re_desc,shake=true,0.1
for i=0,4 do init_particle(c.x+rnd(card_s_w),c.y,2+rnd(2),8+rnd(2),0,-2-rnd(2)) end
end
end
if (need_re_desc)c.desc=get_effects_desc_id(c.effects)
end
elseif id == "s" then
init_particle(block_x,2,2,12)
r_attack+=r_block
ex,r_block,col=attack_x,0,13
elseif id == "p" then
init_particle(block_x,2,2,12)
ex,col=block_x,5
r_block-=1
elseif id == "j" then
for i=1,4 do
lane_cards[i].state=4
end
ex=l_d_s_x+2,l_d_s_y+8
end
r.ex,r.ey,r.tcol=ex,ey,col
add(resources,r)
end
function update_resource(r)
r.x,r.y=lerp(r.x,r.ex,r.speed),lerp(r.y,r.ey,r.speed)
init_particle(r.x+4,r.y+4,1,r.tcol,0.01,0.01)
if distance(r.x,r.y,r.ex,r.ey) <= 1 then
if (r.tcol ~= 8)sfx(8)
del(resources,r)
end
end
function draw_resource(r)
spr(r.spr,r.x,r.y)
end
-->8
--bosses
boss_s_x=12
function init_boss(id)
local boss_p=boss_stats[id]
boss_turns,boss_name,boss_effects,boss_health,boss_b_threshold=boss_p[1],boss_p[2],parse_effects(boss_p[3]),boss_p[4],boss_p[5]
boss_sprite,boss_y,boss_x,boss_i_y,boss_h_y,boss_s_y,boss_t_boost,boss_w,boss_s_hp=222+id*2,11,boss_s_x,0,0,0,0,86,boss_health
end
--turns,name,effects,health
boss_stats=splitd(
[[3,earl dracula,o4,40,3
2,baby sharky,o2t2,32,2
5,captain l,o1d1c1,48,1
2,number two,o3p3,42,4
4,gassy bat,o6j1,46,4
1,spitfire lama,o1k1,38,3
4,gloomy leo,o7e1,50,4
6,spark-y,o6j1t1,60,2]]
,"\n",",")
function update_boss()
if (row_select == 2 and b_select == 1) or card_read or (row_select == 0 and c_select == 0) then
boss_x,boss_i_y=lerp(boss_x,boss_s_x,0.1),lerp(boss_i_y,0,0.1)
boss_s_y=3*abs(sin(0.4*tim))
boss_h_y=lerp(boss_h_y,0,0.1)
else
boss_x,boss_i_y=lerp(boss_x,-68,0.2),lerp(boss_i_y,10,0.2)
end
end
function check_turn_boss()
if turns == boss_turns then
sfx(0)
for e in all(boss_effects) do
for i=1,e.num do
shake+=0.05
init_particle(boss_x+rnd(74),boss_y+rnd(card_s_h),3+rnd(3),9)
init_resource(e.id,e.s_id,boss_x+6,boss_y+4+rnd(16))
end
end
turns=0
end
boss_t_boost+=1
if boss_t_boost == boss_b_threshold then
boss_t_boost=0
for e in all(boss_effects) do
for i=1,e.num do
if e.id == "o" then
e.num+=1
break
end
end
end
end
end
function draw_boss()
rectfill(boss_x,boss_y,boss_x+boss_w,boss_y+card_s_h+1,2)
if (boss_health > 0) spr(boss_sprite,boss_x+2,boss_y+card_s_h-16+boss_s_y-boss_h_y,2,2)
print(boss_name,boss_x+2,boss_y+2,8)
drawp(row_select == 2 and b_select == 1 and 0b0011001111001100.1 or nil,rect,boss_x,boss_y,boss_x+boss_w,boss_y+card_s_h+1,8)
print(boss_health,boss_x+77,boss_y+10+boss_i_y,8)
spr(217,boss_x+77,boss_y+1+boss_i_y)
print(turns,boss_x+70,boss_y+10+boss_i_y,9)
spr(12,boss_x+68,boss_y+1+boss_i_y)
if boss_x > -32 and boss_health > 0 then
print(boss_turns.." =",boss_x+20,boss_y+18,7)
spr(12,boss_x+23,boss_y+16)
local x_b,b_sp=1,0
for e in all(boss_effects) do
print(e.num,boss_x+23+b_sp+x_b*14,boss_y+18,7)
if (e.num >= 10) b_sp+=4
spr(e.s_id,boss_x+28+b_sp+x_b*14,boss_y+16)
x_b+=1
end
local boss_l=#boss_name
for i=0,boss_b_threshold-1 do
local c=i < boss_t_boost and 8 or 1
circfill(boss_x+16+boss_l*3+i*4, boss_y+3,1,c)
end
end
end
-->8
--help
function lerp(var,target,pow)
return var+pow*(target-var)
end
function shuffle(tbl)
for i=#tbl,2,-1 do
local j = 1+flr(rnd(i))
tbl[i],tbl[j] = tbl[j],tbl[i]
end
return tbl
end
shake=0
function doshake()
local shakex,shakey=16-rnd(32),16-rnd(32)
shakex*=shake
shakey*=shake
camera(shakex,shakey)
shake=shake*0.95
if(shake < 0.05)shake=0
if(shake >= 0.3)shake=0.25
end
function distance(x1,y1,x2,y2)
return sqrt(((x2-x1)/10)^2+((y2-y1)/10)^2)*10
end
-->8
-- misc
h_time,h_spr=0,10
function update_heart()
if r_health < 15 then
if h_time < 60 then
h_time+=1
else
h_time=0
h_spr=21-h_spr
end
end
end
sh_time=0
function update_shield()
if (sh_time > 0)sh_time-=1
end
function random_col(c1,c2,c3)
return ({c1,c2,c3})[flr(rnd(3))+1]
end
--8
-- effects
particles={}
function init_particle(x,y,rad,col,dx,dy)
local p={
x=x,
y=y,
dx=dx or rnd(2)-1,
dy=dy or rnd(2)-1,
rad=rad,
col=col,
sp=rad > 20 and 0.8 or 0.1,
}
add(particles,p)
end
function update_particle(p)
p.dx*=0.9
p.dy*=0.9
p.x+=p.dx
p.y+=p.dy
p.sp+=rnd(1)/100
p.rad-=p.sp
if (p.rad <=0)del(particles,p)
end
function draw_particle(p)
circfill(p.x,p.y,p.rad,p.col)
end
card_effects={}
function init_card_effect(x,y,ex,ey,col,hcol)
local c={
x=x,
y=y,
ex=ex,
ey=ey,
speed=0.1+flr(rnd(25))/100,
col=col,
hcol=hcol
}
add(card_effects,c)
end
function update_card_effect(c)
c.x,c.y=lerp(c.x,c.ex,c.speed),lerp(c.y,c.ey,c.speed)
if distance(c.x,c.y,c.ex,c.ey) <= 1 then
del(card_effects,c)
end
end
function draw_card_effect(c)
rectfill(c.x,c.y,c.x+card_s_w,c.y+card_s_h,c.col)
rect(c.x,c.y,c.x+card_s_w,c.y+card_s_h,c.hcol)
spr(196,c.x+2,c.y+8)
end
-->8
-- all cards
--place in array == id,
--param: cost,name,type,effects
--type: 0 starter,1 purchased,2 monster
--effect: c coin,a attack,b block,d draw,k destroy
-- g gravedig,r remove mid,t discard,h heal,
-- o hurt player,m transform,e convert,i boost,
-- s slam,p unblock, j boom
-- effect example: c2a1 = 2 coin,1 attack
all_cards=splitd(
[[0,mediocre bard,0,c1
0,common guard,0,a1
2,shiny knight,0,a2
2,crafty chef,1,t1d2
1,apprentice distiller,1,k1
1,'giant' spider,2,c1
5,shifty barkeep,1,g1
1,young wizard,1,t1d1c1
4,legendary sword,1,k1a3
2,redheaded dragon,2,k1
2,light priest,1,c3
4,sacred tree,1,t1d3
4,bob the ghost,2,t1d2b1
3,fleshy planty,2,c3
4,rabbit warrior,1,a4c1
2,friendly goul,1,r1
3,confused cyclope,2,o1a2
7,old hero,1,a5d1
6,slimey friend,1,b2a2d1
5,flaming faun,2,d1b2
4,holiday spirit,1,c3b2
4,sneaky sage,2,t1d2c1
4,proud skeleton,1,a3b1
8,wise king,1,b3d1r1k1
5,sleepy witch,1,d1k2
5,senile enchantress,2,d2
3,defensive wanderer,1,b3
2,weird slimey,2,b1c1
3,business woman,1,a1d1c1
3,vacant paladin,1,a3
4,fabled monkey,2,a2b1
1,borug the orc,1,a2
3,magical fox,1,k1r1
3,great fishing rod,1,t1g1
2,living potion,1,h1a1
2,mean flower,2,c1h1
7,flaming body,2,h4d2
1,chill shield,1,b2s1
2,old hermit,1,o2d2
8,paragon,1,a8
8,strawberry giant,2,d2c4
2,water blobs,2,c2
2,ethernal feral demon,2,d1
2,batty bat,1,t1h1b1
4,ninja splatty,2,g1
1,underground alchemist,1,m1
5,double agent witch,1,e1
6,death's wife,2,e1
3,persevering florist,1,c2k1
2,sad trumpet,2,i1
4,dj-boney,1,i2
4,shiny godness,2,c1m1
3,blocky buddy,2,b1s1
8,stone wall,2,b6d1
3,shy ninja,1,c2a2]]
,"\n",",")
lane_i=0
lane_deck=splitd("4,4,5,5,6,6,6,7,7,8,8,9,9,10,10,11,11,11,12,13,13,14,14,15,15,16,16,17,17,18,18,19,20,20,21,21,22,22,23,23,24,25,25,26,26,27,27,28,28,28,29,29,30,30,30,31,31,32,32,32,33,33,34,34,35,35,36,36,37,38,39,39,40,41,42,42,43,43,44,44,45,46,46,47,47,48,49,49,49,50,50,51,51,52,53,54,55,55,55",",")
function parse_effects(effects_string)
local nr_of_effects=#effects_string/2
local all_effects={}
for i=1, nr_of_effects do
local c_effect_i=i-1+i
local c_effect_char=sub(effects_string,c_effect_i,c_effect_i)
local c_number_i=c_effect_i+1
local c_number_char=sub(effects_string,c_number_i,c_number_i)
add(all_effects,init_effect(c_effect_char,c_number_char))
end
return all_effects
end
function card_char_form(nr)
return nr>1 and " cards" or " card"
end
function shovel_char_form(nr)
return nr>1 and " shovels" or " shovel"
end
local desc_funcs = {function() return "\n" end, function(n) return n end, card_char_form, shovel_char_form,}
-- {{"c",1,"gain ",0," gold"},...}
-- effect id: "c", sprite: 1, description: "gain " .. num .. " gold"
-- 1 is newline, 2 is num, 3 is "card(s)", 4 is "shovel(s)"
local effects_data = splitd(
[[c,1,gain ,2, gold
a,2,gain ,2, attack
d,3,draw ,2,3
k,4,destroy ,2,3
g,5,gain ,2,4,1, to take ,2,3,1, from the graveyard
r,6,remove ,2,3, from lane
t,9,discard ,2,3
b,8,add ,2, armor
h,219,heal ,2, health
o,218,take ,2, health
m,220,transform all gold,1, into attack
e,221,convert an enemy,1, into an ally
i,222,boost all your current,1, attack cards by ,2
s,223,transform all block,1, into attack
p,144
j,194]]
,"\n",",")
for e in all(effects_data) do
effects_data[e[1]]=e
end
function get_effects_desc_id(effects)
local desc="-"
for e in all(effects) do
if (desc~="-") desc = desc .. "\n-"
for i=3,#effects_data[e.id] do
local part = effects_data[e.id][i]
desc = desc .. (type(part) == "number" and desc_funcs[part](e.num) or part)
end
end
return desc
end
function parse_type_col(t)
if t == 0 then
return 4,15,9
elseif t == 1 then
return 13,12,10
elseif t == 2 then
return 2,14,8
end
end
function init_effect(id,nr_string)
local c={
id=id,
num=tonum(nr_string)
}
local s_id=1
printh(id)
s_id=effects_data[id][2]
c.s_id=s_id
return c
end
level_delay=80
function update_xp()
if level_delay > 0 then
level_delay-=1
else
c_xp=lerp(c_xp,xp,0.075)
if xp-c_xp < 1 then
c_xp=xp
end
if c_xp >= xp_goal then
level_up()
end
end
end
-- xp
c_xp,xp_x,xp_y,xp_w=0,12,56,104
function get_xp()
xp+=abs(boss_health-boss_s_hp)
if boss_health <= 0 then
xp+=30
xp+=(30-(30-r_health))
end
dset(0,xp)
end
function load_save()
cartdata("elastiskalinjen_xp")
xp,xp_goal=dget(0),dget(1)
c_xp=xp
if (xp_goal == 0) xp_goal=60
level=max(dget(2),1)
boss_unlock,back_unlock=max(dget(3),1),max(dget(4),1)
games_played,games_won=dget(5),dget(6)
end
function level_up()
xp,c_xp=xp-flr(c_xp),0
level+=1
xp_goal=30+level*15
dset(0,xp)
dset(1,xp_goal)
dset(2,level)
if level % 2 == 0 and back_unlock < 8 then
boss_unlock_s="background"
back_unlock+=1
dset(4,back_unlock)
elseif boss_unlock < 8 then
boss_unlock_s="boss"
boss_unlock+=1
dset(3,boss_unlock)
end
end
xp_s=" xp"
function draw_xp()
drawp(0b0011001111001100.1,rectfill,0,0,128,120,0)
rectfill(xp_x-4,xp_y-20,xp_x+xp_w-2,xp_y+48,0)
spr(147,xp_x+60,xp_y-18)
print("level:" .. level,xp_x+69, xp_y-16,13)
print("" .. flr(c_xp) .. "/" .. xp_goal .. xp_s,xp_x,xp_y-6,7)
line(xp_x,xp_y,xp_w,xp_y,1)
line(xp_x,xp_y,xp_x+(xp_w-xp_x)*(c_xp/xp_goal),xp_y,7)
print("damage dealt: " .. boss_s_hp - boss_health .. xp_s,xp_x+2,xp_y+4,12)
spr(149,xp_x+xp_w-11,xp_y)
if boss_health <= 0 then
print("you won!",xp_x+8,xp_y-16,7)
if xp - c_xp <= 20 then
print("boss killed: 30" .. xp_s,xp_x+2,xp_y+12,12)
end
if xp - c_xp < 3 then
print("health left: " .. (30-(30-r_health)) .. xp_s,xp_x+2,xp_y+20,12)
end
end
local won_s = boss_health <= 0 and "you won!" or "you lost!"
print(won_s,xp_x+8,xp_y-16,7)
local won_spr = boss_health <= 0 and 145 or 146
spr(won_spr,xp_x-2,xp_y-18)
if boss_unlock_s ~= "" then
line(xp_x,xp_y+37,xp_w,xp_y+37,1)
spr(148,xp_x,xp_y+38)
print("new " .. boss_unlock_s .. " unlocked",xp_x+8,xp_y+41,7)
end
end
__gfx__
00000000000000000000000000000000000000000000004000000000000330000000000000000000000000000000000000000000000000000000000007776660
000000000000000000000660088888800008880000000042044420040303033002222220005d6600082008200000000004444110000000000000000077777666
0070070000aaa7000000667008222280088990080000042004420400033333032ddd777205500670872088820070280007d7dd60888888882222222271177116
000770000aaa77704006670008282280089a99880000420004204020003333302d1166725dddddd5e882888208828820007a9600082222800222222071177116
000770000aaaa7a0026670000821828089aaa9800604200002040240003330302dd1677206d767608e8888220888882000066000008228000022220072277226
007007000aaaaaa0042700000822128029aaa988656000000440244000d3000002d1672006d767600888822000888200006a9600000880000002200076677666
0000000009aaaa90444200000822228002aaa22065510000000244402d3230d002dd772006d76760008822000002200006a99960000000000000000077777766
00000000009999002400400008888880002222005510000002444440022222000022220006d76760000220000000000004444110000000000000000007676760
000004400056650000aa99006677776604400220e022220e004424009044409000a7a000000828001111000000333b00077777600033bb000060066000066000
04444440057667500aaa99900677777000bbb3000222222004242240044444000a987a0000077280011111000333bb3077777776036677b006400460006ddd00
04ffff40676116760aaaa990077777700bb3333026d226d244ff2f444444444000a9a0000871028811444110333b3b3b70770777036117b0064dd46006d6d6d0
f11f11ff512112150a1111900676767001133110011221104f1ff1f40d1d1d0000a1a00a088807880414141033bb43bb0277207733eeeebb0717717002d22d20
fffdffff661111660aa11990ff1ff1ff06633dd0012662104ffffff20ffeff000a112a000888712884444480bb39a33b707707763e7878eb0d7777d00d8282d0
024444a90661166000aa99000ffffff003333330026226202ff44ff208fff8000a111a000818812878444870b339a33376776776e788887e0d7777d000222220
08244a9a02611620001991000ffffff000333300028228202f4ff4f4089b9880aa112aa001128828072227603b3bbb3b711176600e2222e0007e7d0000011100
888299a10022220099111199047ff74024133142202222024d4444d488d9dda89999999a81712888977277792bb3b33b711116000deeeed0011771a9002e1110
8899991207d22d709a9999a9747777473243342302555520724444277dccc4880a556aa088112882d977769d20333330722227000033330077111a990088e110
89919128766dd66719aaaa91642222463224422302dddd20d724427d77cc4c880a667a000888882a7d9669d740223020772267060b03b000777aaa9001888e12
9911912811766711199aa99164444446b2bb222322252522d7d44d7d877fccc80a567a00a0888820079449700404f04067767700b033b0b077aa991002888822
991991285d16615d59a99a95642482463b33222002dddd20d776677d8dccccc8aa667a000088982a079889700024220006677760000b3b3b6a99a91022e888e2
99991128d67667655aa99aa564288246333aa22022252522d777777d8dccccc80a567a0aa989a8e94498e944002400000066777700f3bf30b9a7711120ee8802
199112285166661d099aa99074484487044a944002dddd20d766667d844994480a667a00a929a2a97dd99dd700220000000666760fd33df23b9711112011e800
11112288d51661d502a99a20742248870222222022252522d677776d867777780a667aa099a9aea976d99d670224f0007067060704ffff202332221100111ee0
222228885d511d5509222290744228472222222222dddd2207777770867767780a667a009aa99a99776776774244420000070060044444202222211000011111
000ee000004444000dedded00010002100777d00010000200000000000a0a90000088e000000ddd00067650000bbbb0000aaa000077007700009990000111100
20eeee0204444440dcceeccd02000201072727d010000001007777000799996000e8888000dd111d007665000b7733b00a9aa900770000770999d94001bb3310
eee22eee06655440c77dd77c02002000077976d02000000207077070764444760888ffe00d111111001ff1000b3b33b009949a907000000794dddd991bbbb331
ee2712eef6ff654fccceeccca2202240009828001077770107700770741441468e8ffff80116611105ffff50b373373ba44449aa760000679d1d1dd91b1b3131
0e6116e067f7f5f40cccccc0a9222940096287d0277776d2077777706444444648ff1f1816d6d611025ff520b733707b914144a967777776911d11d91bbb3331
02e77e206fdfff64eccddcce82929280476288d4070660d00677776026644662488ffef00f1f1f6d0ddd88d0b7b3363ba4e44aaa061771604d2d2d491b7b3731
18eeee816ffff64402cccc20289998207677288d1166dd110006600d446666464422ff2266fff066dd98228db333333b79447749071771709477749411222231
188118810dffd040002cc200041994007761666d221dd122000760dd4d6666d64442222060fff060dd8211280b3733b00a77a4aa07777770899dd99801311311
018118100dddd0000dddddd00022400077776dddd221122d07777dd07a6666978442222260222060dd8111180b7073b08a88a8a20e6767207899998701d33310
21888812d2dd2460eceeeece09dd444007716dd0d228822d7777dd6027a669782d44222201111166dd81ed18b3363b3b8a988828eee2221077899877212dbb1b
1d1981d1442244d0ecddddce99999444076dddd0dd8888dd700dd67727da9d7222d4422211111116d9812218b3b3333b78888227e222211079688697b122db1b
d1d88d1d44444d5dccceeccc9249492477666ddddd2882dd77dd070087766772022dff21012e2116998111180b3333b077488477e221111149666694b1322d13
dd1981dd4dd444d5dccddccd90999404777166dd0d7227d07dd6777086777768012dff101fe88f109982112800b33b00088888202211110164966946b1332213
1dd18dd1d9addd0d0dccccd0d2994921777666dd02222220dd067000276666722222dd401288e2119928228202b33b2088828222201001006696946631333213
211981124dd4440ddccddccd0029920076667ddd020220200557755026777762222222d4112221112992882900e222008888282201000010966696690b3a9320
221d8122444444000dccccd0001001000766ddd02020020200577500876677782222222411222111029922990044410088828222010000100966669004499440
0000100000000000000000000999aa9000088000000000000004400000000000088888000000c7c00000000000d00d00007f22000e2e22200555555000777000
0002210000000200009441009aaaaaa908888880dd0dd0dd000f420044000044e8888e880c0c0c00080000000dd00dd007ffff20e12211125555555555555700
00e22210000242200794416091ffff1a8989a888dc7777cd00f444204007600470880788c7c00001008008e00d1001d07fffff22101101f151d11d1505555570
00e222100042004007791660aa1ff1fa289aa982c7cccc7c004444204061160422882280707100c08080888e0d1001d0fd7dd7d2f1ff1fff20f2022276665557
0e2721100420002406867860affffffa08aaaa80c7c76c7c0074442440711604081188001710010002880028d110011dd702207d1fddff112fffff2271616555
0e77d2400420000407288860a8f88f8a08aaa980c7cccc7c044447400460064088888880010c1000288e81021ff01ff1fd7dd7d221fff1122f88fff206666755
122724210420000207872260aaffffaa089aaa80c227622c54455550006006008e888e8e0001c0c0228e800012f11f210ffef2200d2112d052ffff2016e6d245
2222222204200006078788609aaaaaa9088aaa90c60cc06c5522553000766700888e888800100c7c2288e0001ffffff10fe0ef2001dddd100211121006661444
d222221d0440006707888860099999900898aa98c7c76c7c055555330f77760088888888010017072888e000100ff0010ffeff201e1111215255521512622442
971dd17904200070118782110001100002228a98c7cccc7c055555337f7277f08e8e88e8c0000171228e80001f0ff0f17ffffff2ed2222d1d5555551112144d2
0999999009400760611111160030000002802828c7c76c7c01155133f72f277f8888e8880c00c010288e810211dffd11ffffff7222dddd211555556511144d12
059999509a907600787117860003000b02802808c7cccc7c03a51313f2222277288e88e200cc000002880028116dd611ff737ff2e21111210555466111ffd120
0299952019006000781ee186b00b30b30820280016dccd61333933337222227208e88e800c7cc1c18080888e1180081173f3f3722d2222d20555551501ff1220
021952201109700072111126bb033bb308808200166dd66133a33133222252d20880888017071000008008e011800811f070733f21dddd115551511104d12122
0222222010090900672112660bb3333000808200016666103933333125225d22080008800171010008000000010000107000f03722111121555515114d111212
22eeee2200099900000000000033330000000200001111003a933331555d5d2d02000020001000100000000001000010f0000003222222215551511141112122
0066660000aaaa000222222000667600021001200110011000111100000000000000000000000000000000000000000000000000000000000000000000000000
067676700a0a0a702000000206969960055555500101101001111110000000000000000000000000000000000000000000000000000000000000000000000000
776767670acacaaa207777026727a276500550050100001011111111000000000000000000000000000000000000000000000000000000000000000000000000
6d6d66d6a9999aa72200002267aaaa765075570501099010f595595f000000000000000000000000000000000000000000000000000000000000000000000000
f61f61ff998899aa1107701176aaaa675dd55dd5010880101f1111f1000000000000000000000000000000000000000000000000000000000000000000000000
6ffffff6988889a00177771076099067000550000108801001111110000000000000000000000000000000000000000000222200000000000000000000000000
6ff88ff69188190000700700760aa067000550001102201100111100000000000000000000000000000000000000000000222222220000000000000000000000
647ff74699119900000dd00062aaaa26000550001102201161711710000000000000000000000000000000000000000000222222227220000000000000000000
5477772509999000000760002aaff7a20dddddd01100001166177111000000000000000000000000000000000000000002222222277222222000000000000000
d422284d00222a00067677602aaff792d777666d1111111176611dd1000000000000000000000000000000000000000002222222272222222222000000000000
54448985000a70a070076007299aa9a2d777666d111d11111766ddd1000000000000000000000000000000770000000002222222777222222772222200000000
d444384d00aa70200076770029a977a25d7766d511d1dd111d766d250000000000000000000000000000007700000000022222222dd277222772222222200000
05d54445000aa2000006700029a77ff255d76d55111111115dd762d5000000000000000000000000000000770000000000222222222277222772222222222000
0423424d000a0000006776002aafaaf2555dd55511dd1d115ddd2225000000000077777077777077770777770777770007727277277277772777772222222000
04322240000a0000007007000aaf77a0055005501111d1115dd2d221000000000077777077777077770777770777770007727277277277772777772222222000
0444444000aaa200006006000f9a79a002000020111111115ddddd11000000000077077000077077000770770770000007727277277277222772772222220000
000000000099990000777700001551000000000011111111000e2000000000000077000077777077000770770777770007727277277277222772772222220000
088888000a2222a00777777000155100007000700111111100e00200000000000077077077077077000770770000770007727277277277222772772222220000
855570000a7aaa90071771700022220000070700001111110e000020000000000077777077777077000777770777770007777777277277772772772222200000
855100680aaaa990071771700227e2200288788000011110200000020000000000ddddd0ddddd0dd000ddddd0ddddd000ddddddd2dd2dddd2dd2dd2222200000
8550006800a799000767767002e22220228878800000111002000020000000000000000000000000000000000000000000000222222222222222222220000000
00000680000a90000677776002722e20267777700000110002200220000000000000000000000000000000000000000000000002222222222222222220000000
000d6680000a9000007777000deeeed0628878800000100000200200000000000000000000000000000000000000000000000002272222222222222220000000
00888800009494000067670000dddd00228878800000000000222200000000000000000000000000000000000000000000000027722222227222222000000000
0fff4444444141110000000000000000fff4444444411110007ccc00000000000000000000000000000000000000000000002227222222277222000000000000
0ff4444444441111ff770000000076ffff4444444414111000700c00000000000000000000000000000000000000000000222277727722270000000000000000
07dd77ddddddddd6ffdd70000007ddff7dddaddddddddd6007c00cc000000000000000000000000000000000000000002022772dd27722777000000000000000
07dd7dddddddddd6f4dd7700007d7df479a7a9aaada999600c0000c00000000007777700000000000000000077777000222277222277772dd000000077777000
0077dd7dddddd66044d7d77007d7dd4407779aa999996600c000000c000777770777770777700000007777707777707777727727727777200077777077777000
00077dd9dd99660044dd7d707ddddd44007997aaa99960000c0000c0000777770770770777707777707777707707727777727727727722277077777077000000
000077aa9996600044ddddd77ddddd44000779a99966000000c00c00000770770777770770007777707707707727722227727727727722277077077077777000
000000767660000044ddddd67adadd440000777666000000000cc000000770770770000770007700007707707727727777727727727722277077777000077000
000007776660000044dddd9769a9aa44000007676600000000000000000770770777770770007777707707707727727727727727727777277077000077777000
00007d9a99d6000044aada9669a9a94400007da9dd60000000000000000777770ddddd077000000770777770dd2dd2777772772772dddd2770777770ddddd000
0007d97aaa9d600044a9a9966999a9440007ddddddd6000000000000000777770000000dd000777770ddddd0002222ddddd2772dd222222772ddddd000000000
007979aa99999600149999600699a914007d7ddddddd60000000000000077000000000000000ddddd0000000022222222222dd222222222dd200000000000000
079a7a9aaaaa99604199966000699a4107d7ddddddddd60000000000000770000000000000000000000000000222222222222222222222222200000000000000
069aaa999999a99611996600000699117ddddddddddddd6000000000000dd0000000000000000000000000000222222222222222222222222220000000000000
0fff4444444141111199600000006911fff444444441111000000000000000000000000000000000000000000000022222222222222222222220000000000000
0ff44444444411111166000000000611ff4444444414111000000000000000000000000000000000000000000000000022222222222222222222200000000000
00777700002222000000000000000000000880000002200000000000000000000000000000000000000000000000000000022222222222222222000000000000
07000070020000200004289000000000008008000020020000000000000000000000000000000000000000000000000000022222222222222222000000000000
07000070020000200002090000000000008008800220022000000000000000000000000000000000000000000000000000000002222222222222000000000000
7777777722222222001d110000000000018008800c20022000000000000000000000000000000000000000000000000000000000000222222222000000000000
777007772220022201d1111000000000011001800cc00c2000000000000000000000000000000000000000000000000000000000000000222220000000000000
77770777222202220111111000000000011001100cc00c0000000000000000000000000000000000000000000000000000000000000000000220000000000000
777777772222222201d11110000000000010010000c00c0000000000000000000000000000000000000000000000000000000000000000000000000000000000
0777777002222220001111000000000000011000000cc00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000100100000000000000000000000000000000000000000000000000000000000000000000000000
0110011001000010111111110001111000000110001111000100001000100100400000000880088000000760000000000004400002200220a000000000044000
010000100100001001000010001110000001011001111110010000100111011049000000878088880000766000e0080000777600272222727a0a0a0000777600
000000000110011000100100011000100000100001011010001001000111111029900000e88888884007660008828880007996002262262277a727a000711600
0000000001111110000110000100011000010100011111100010010001111110299000008e888888017660000e8888800079760052276225aa99999900717600
010000100101101000100100000111000010000000100100010000100011110029000000088888800416000008888820079a99605526d255a902002007dc1160
011001100011110011111111011110000100000000011000010000100001100020000000008888000a400000008882007979a99d05d55d50900900907d7dc11d
00000000000000000000000000000000000000000000000000100100000000000000000000088000d0040000000820000666ddd000555500000099000666ddd0
000009900a900000000000c700000000990924990449099000000000011000000000000045080000000dd0000dd0000000088800888e00000000666651100000
0009a888889a9000000000c707000000099994494499990000000000177100000000000500900000000110000110000000e888888888888000d6d6dddd110000
000981881889000000000cc72770000099f0ffd999fd9ff9000000011171100011000004080800d100d11060011d0000088888888888888800d64dd6d2110000
000888888888000000000cc722770000111ffff99dfff9f900000111111111101111011501d0dd1100d11676611d0000088888888888888800d4a4dd29210000
00008711788200000000cc17227700009fd111fffff55ff90000000552520000011110111d0d111000d17667671d0000888882777688888e00d646dd12110000
00008788782200000000ccc72777000044f111fffff77992000000077699a0000111107117011110000dc1661cd0000088882777776888e000ddddddd1110000
00662888822550000000cccc7777000042fddd1111fdd9440000000776999a000011102882011100000016776100000088881117111788880005a1d191900000
0006722222770000000cccccc677666029fff2f11f2ff9920000006677609990011111122111111000006555560000008888d07770d1888000005a1a19000000
00016777567d0000000ccccc66776666999f2ff77ff2f444000066ddd77700000001111111111000000661551660000080886c676c67288000100aa991001000
001117677711d00000ccccccc7776660949f2f7777f2f999000666ddd5777000000011111d11000000006d11d6000000008e7ce88c778800001d0d2dd4011000
01111115611121d00ccccc11cc7760009294277117744409066ddddd5577600000005111111d0000000006dd60000000008077888c770800005d649429121100
01882115515288210cccccccccc000009294941771949940dddddd5557776000000511111111d00000000676700d6d6000007ceeeec6000006d5299999942160
18882d1111888821cccccc11ccc0000099494477779409447555557777660000000511111111d00000009d6d6966dd6d00000ef27fe0000012dd498998921165
1282111111d882d1000ccccc6cccc00099494944949449900666666666000000000511111111d00000007a8897dd66d600000e2222e000005255288888842165
1d211115111d211d00cccccc77ccc00022424944949904400000202000000000000551111115500000066699676ddddd000006eeee7000005ddd548888221225
1d1115111511111d00cccccc7770000022429920220990440000e0e0000000000000555555550000006767666677d6d6000007666670000055d5dd1414151115
__label__
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111116611111111111122222211111111111188888811111111111115d661111111111111118881111111111111444211411111111111
111aaa7111aaa1111111111667116661111112ddd777211ddd111111822228112221111111551167115551111111889911819991111111442141114441111111
11aaa77711a1a1111114116671116161111112d11667211d1d111111828228112121111115dddddd51515111111189a998819191111111421412114141111111
11aaaa7a11a1a1111111266711116161111112dd1677211d1d1111118218281121211111116d76761151511111189aaa98119191111111214124114141111111
11aaaaaa11a1a11111114271111161611111112d1672111d1d1111118221281121211111116d76761151511111129aaa98819191111111441244114141111111
119aaaa911aaa11111144421111166611111112dd772111ddd1111118222281122211111116d76761155511111112aaa22119991111111112444114441111111
111999911111111111124114111111111111111222211111111111118888881111111111116d7676111111111111122221111111111111244444111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
01100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001111111111111111111
01000010010000100100001001000010010000100100001001000010010000100100001001000010010000100100001001000010010001111111111111111111
00000000000888888888888888888888888888888888888888888888888888888888888888888888888888888888888888000000000001111111111111111111
00000000000822222222222222222222222222222222222222222222222222222222222222222222222222222222222228000000000001182118211111111111
01000010010822882888288828882888288828822222282222222212222222222222222222222222444411222882288228000010010001872188821188818881
f11001100118282228282828228228282282282822222822222221112222222222222222222222227d7dd6228782888828100110011001e88288821111818181
0000000000082822288828882282288822822828222228222222221222222222222222222222222227a96222e8888888280000000000018e8888221118818181
00000000000828222828282222822828228228282222282222222222222222222222222222222222226622228e88888828000000000001188882211111818181
0110011001182288282828222282282828882828222228882222222222222222222222222222222226a962222888888228100110011001118822111188818881
010000100108222222222222222222222222222222222222222222222222222222222222222222226a9996222288882228000010010001111221111111111111
00000000000829929249924492992222222222222222222222222222222222222222222222222222444411222228822228000000000001111111111111111111
00000000000822999944944999922222222222222222222222222222222222222222222222222222222222222222222228000000000000000000000000000000
010000100108299f2ffd999fd9ff9222222222222222222222222222222222222222222222222222299922228282888228f00010010000100100001001000010
0110011001182111ffff99dfff9f9222222222222222222222222222222222222222222222222222292922228282828228100110011001100110011001100110
00000000000829fd111fffff55ff9222222222222222222222222222222222222222222222222222292922228882888228000000000000000066666666666666
000f00000008244f111fffff77992222222222222222222222222222222222222222222222222222292922222282828228000000000000000060000000000000
011001100118242fddd1111fdd944222222222222222222222222222222222222222222222222222299922222282888228100110011001100160011001100110
010000100108229fff2f11f2ff992222222222222222222222222222222222222222222222222222222222222222222228000010010000100160001777666010
0000000000082999f2ff77ff2f444222222222222222222222222222222222222222222222222222222222222222222228000000000000000060007777766600
0000000000082949f2f7777f2f999222222444411222222222222222227622222222888888222222222222222222222228000000000000000060007117711600
010000100108292942771177444292277727d7dd6222222277222222276622772222822228227722222aaa722222222228000010010000100160007117711610
0110011001182929494177194994222722227a96222777222722242276622227222282822822272222aaa7772222222228100110011001100160017227722610
0000000000082994944777794294422777222662222222222722221766222227222282182822272222aaaa7a2222222228000000000000000060007667766600
0000000000082994949449494499222227226a96222777222722224162222227222282212822272222aaaaaa2222222228000000000000000060007777776600
011001100118222424944949924422277726a99962222222777222a4222222777222822228227772229aaaa92222222228100110011001100160011767676110
01000010010822242992222299244222222444411222222222222d22422222222222888888222222222999922222222228000010010000100160001001000010
00000000000822222222222222222222222222222222222222222222222222222222222222222222222222222222222228000000000000000060000000000000
00000000000888888888888888888888888888888888888888888888888888888888888888888888888888888888888888000000000000000066666666666666
01000010010000100100001001000010010000100100001001000010010000100100001001000010010000100100001001000010010000100100001001000010
01100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
01100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110
01000010010000100100001001000010010000100100001001000010010000100100001001000010010000100100001001000010010000100100001001000010
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
01000010010000100100001001000010010000100100001001000010010000100100001001000010010000100100001001000010010000100100001001000010
01100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
01100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110
01000010010000100100001001000010010000100100001001000010010000100100001001000010010000100100001001000010010000100100001001000010
00000000ccccccccccccccc000001111111111111110000011111111111111100000111111111111111000001111111111111110000000000000000000000000
00000000cfffffffffffffc000001ccccccccccccc1000001ccccccccccccc1000001eeeeeeeeeeeee1000001eeeeeeeeeeeee10000ccccccccccccc00000000
01000010c4999444444444c001001daaaddddddddd1000101daaaddddddddd100100128882222222221000101282822222222210010c11111111111c01000010
01100110c4449444444444c001101dddaddddddddd1001101dddaddddddddd100110128222222222221001101282822222222210010c11111111111c01100110
00000000c4999444444444c000001dddaddddddddd1000001ddaaddddddddd100000128882222222221000001288822222222210000c11111111111c00000000
00000000c4911111111144c000001d11a1111111dd1000001d11a1111111dd100000121181111111221000001211811111112210000c11111111111c00000000
01100110c4999000000044c001101d00a0000000dd1001101daaa0000000dd100110128880000000221001101200800000002210010c11111111111c01100110
01000010c4000000000044c001001d0000000000dd1000101d0000000000dd100100120000000000221000101200000000002210010c11111111111c01000010
00000000c4000000000044c000001d0000000000dd1000001d0000000000dd100000120000000000221000001200000000002210000c11111111111c00000000
00000000c4000aa9900044c000001d0004444000dd1000001d000aaa0000dd1000001200000ddd00221000001200777776002210000c11112211111c00000000
01000010c400aaa9990044c001001d0044444400dd1000101d00a9aa9000dd10010012000dd111d0221000101207777777602210010c11121121111c01000010
01100110c400aaaa990044c001101d0066554400dd1001101d009949a900dd1001101200d1111110221001101207077077702210010c11221122111c01100110
00000000c400a111190044c000001d0f6ff654f0dd1000001d0a44449aa0dd100000120011661110221000001200277207702210000c11c21122111c00000000
00000000c400aa11990044c000001d067f7f5f40dd1000001d0914144a90dd10000012016d6d6110221000001207077077602210000c11cc11c2111c00000000
01100110c4000aa9900044c001101d06fdfff640dd1001101d0a4e44aaa0dd1001101200f1f1f6d0221001101207677677602210010c11cc11c1111c01100110
01000010c4000199100044c001001d06ffff6440dd1000101d0794477490dd10010012066fff0660221000101207111766002210010c111c11c1111c01000010
00000000c4099111199044c000001d00dffd0400dd1000001d00a77a4aa0dd10000012060fff0600221000001207111160002210000c1111cc11111c00000000
00000000c409a9999a9044c000001d00dddd0000dd1000001d08a88a8a20dd100000120602220600221000001207222270002210000c11111111111c00000000
01000010c4019aaaa91044c001001d0d2dd24600dd1000101d08a9888280dd100100120011111660221000101207722670602210010c11111111111c01000010
01100110c40199aa991044c001101d0442244d00dd1001101d0788882270dd100110120111111160221001101206776770002210010c11111111111c01100110
00000000c4059a99a95044c000001d044444d5d0dd1000001d0774884770dd100000120012e21160221000001200667776002210000c11111111111c00000000
00000000c405aa99aa5044c000001d04dd444d50dd1000001d0088888200dd1000001201fe88f100221000001200066777702210000c11111111111c00000000
01100110c40099aa990044c001101d0d9addd0d0dd1001101d0888282220dd1001101201288e2110221001101200006667602210010c11111111111c01100110
01000010c4002a99a20044c001001d04dd4440d0dd1000101d0888828220dd100100120112221110221000101207067060702210010c11111111111c01000010
00000000c4009222290044c000001d0444444000dd1000001d0888282220dd100000120112221110221000001200007006002210000c11111111111c00000000
00000000c1111111111111c000001111111111111110000011111111111111100000111111111111111000001111111111111110000ccccccccccccc00000000
01000010ccccccccccccccc001001111111111111110001011111111111111100100111111111111111000101111111111111110010000000000000001000010
01100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110
00000000001000010000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000011100111001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
01100110011001110110111001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110
01000010010000100100001001000010010000100100001001000010010000100100001001000010010000100100001001000010010000100100001001000010
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0100f010f1000010f10000100100001001000010010000100100001001000010010000100100001001000010010000100100001001ee001001eee01001000010
0110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001e0e11e01e0011001100110
00000000000000000000000f00000f00000000000000000000000000f0000000000000ff00ff000000000000000000000000000000e0e00000eee00000000000
000000000000f000000000000f000000000000000000000000000000000000000000000000000000f0000000000000000000000000e0e00e0000e000f000f000
01100110f1100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001eee11001eee11001100110
0100001001000010010000100100001001f0001001000010010000100100001001000010010000100100001001000010010000100100001001000010010f0010
0000000000000000000000000000000000000000000000000000f000000000000f0000000000000000000000000000000f0000f000f00000f000000000000000
000000002222222222222220000022222222222222200000222222222222222000002222222222222220000022222222222222200000ee0fee00ee00e0000000
010000102fffffffffffff2001002fffffffffffff2000102fffffffffffff2001002fffffffffffff2000102fffffffffffff200108888888888888e1000010
0110011024999444444444200110249994444444442001102499944444444420011024999444444444200110249994444444442001e822222222222801100110
0000000024949444444444200000249494444444442000002494944444444420000024949444444444200000249494444444442000e822222222222800000000
000000f02494944444444420000024949444444444200000249494444444442000002494944444444420000024949444444444200008222222222228e0000000
0110011024919111111144200110249191111111442001102491911111114420f1102491911111114420011024919111111144200108222222222228e1100110
010000102499900000f0442001002499900000004420001024999000000044200100249990000000442000102499900000004420f1e822222222222801000010
000000002400000f000044200000240000000000442000002400000000004420000024000000000044200000240000000000442000e822222222222800f00000
000000002400000000f0442000002400000f0000442000002400000000004420000024f0000000004420000024000000000044200008222222222228e0000000
010000102400000044004420010024000000440044200010240000004400442001002400056650004420001024000000440044200108222288222228e1000010
0110011024004444440044200110240044444400442001102400444444004420011024005766750044200110240044444400442001e822282282222801100110
0000000024004ffff4004420000024004ffff4004420000024004ffff400442000002406761167604420000024004ffff400442000e822282288222800000000
00000000240f11f11ff044200000240f11f11ff04420f000240f11f11ff04420000024051211215044200000240f11f11fff44200f08221822882228e0000000
01100110240fffdffff044200110240fffdffff044200110240fffdffff0442001102406611116604420011f240fffdffff044200108221122182228e1100110
01000010240024444a9044200100240024444a9044200010240024444a904420010024006611660044200010240024444a90442001e822112211222801000010
000000f024008244a9a04420000024008244a9a04420000024008244a9a0442000002400261162004420000024008244a9a0442000e822212212222800000000
00000000240888299a1044200000240888299a1044200000240888299a104420000024000222200044200000240888299a1044200008222211222228e0000000
0100001024088999912044200100240889999120442000102408899991204420010024007d22d7004420001024088999912044200108222222222228e100001f
01100110240899191280442001102408991912804420011024089919128044200110240766dd667044200110240899191280442001e822222222222801100110
000000002409911912804420000024099119128f4420000024099119128f4420000024011766711044200000240991191280442000e822222222222800000000
000000002409919912804420000024099199128044200000240991991280442000002405d16615d04420000024099199128044200008222222222228e0000000
01100110240999911280442001102409999112804420011024099991128044200110240d676676504420011024099991128044200108222222222228e1100110
010000102401991122804420010024019911228044200010240199112280442001002405166661d044200010240199112280442001e822222222222801000010
0000000f240111122880442000002401111228804420000024011112288044200000240d51661d5044200000240111122880442000e822222222222800000000
0000000024022222888044200000240222228880442000002402222288804420000f2405d511d5504420000024022222888044200008222222222228e0000000
010000102111111111111120010021111111111111200010211111111111112001002111111111111120001021111111111111200108888888888888e1000010
01100110222222222222222f0110222222222222222001102222222222222220011022222222222222200110222222222222222001ee00ee00ee00ee01100110
0000000000000000000000f000000000000f0f00000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000
0000000000f00000f0f000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11777777711111111111117771777177717771111177717171711171111111171111111777771111111111111177717711771111117771717177717711111111
11717771711111777111117171717171117171111171117171711171111111171111117717177111117771111171117171717111111711717171717171111111
11777777711111111111117771771177117771111177117171711171111111171111117771777111111111111177117171717111111711717177117171111111
11711111711111777111117171717171117171111171117171711171111111171111117717177111117771111171117171717111111711717171717171111111
11777777711111111111117171717177717171111171111771777177711111171111111777771111111111111177717171777111111711177171717171111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
__gff__
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007000000000000000000
__sfx__
000100002e620073302b6300433023630073301d6301b63019630186301663014630116300c6300863005630046200462006320086200462001620003200162003620063200562003610016100b3200061000620
000400002e73332545327433253500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000400003276326754157432174400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0102000032763395653476332565397633456532763395651a6441a6421a6321a6321a6221a6221a6121a61200000000000000000000000000000000000000000000000000000000000000000000000000000000
010300003e72302665002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
01040000326131a765326133176330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0115000026761297652d765307652f7652b7652d7652d763327523275532742327453273232735327223272400000000000000000000000000000000000000000000000000000000000000000000000000000000
011500003276132765317633176530763307652f7632f7652d7532d7552d7422d7452d7322d7352d7222d72400000000000000000000000000000000000000000000000000000000000000000000000000000000
000200002672332735000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
010300001a6441a6421a6341a6321a6241a6221a6141a6121a6001a6001a6001a6001a6001a6001a6001a6001a6001a6001a6001a6001a6001a6001a6001a6000000000000000000000000000000000000000000
00040000006000060000600006000432018620343200832006320316202d62029620216201a620196201762003320056200062000600006000060000600006000060000600006000060000600006000060000600
001500002673028730297302673028730287322573025732267302873029730267302b7302b7322b7322b7342d7302b730297302d7302b7302b73228730287322973128735267352873525730257322573225734
001500001a7351d7351a7351d7351c7351f7351c7351f7351a7351d7351a7351d735187351c735187351c735187351d735187351d735187351c735187351c7351a7351d7351a7351d735197351c735197351c735
001500000e0350e0240e0200e020090350902409020090200e0350e0240e0200e0200c0350c0240c0200c020110351102411020110200c0350c0240c0200c0200e0350e0240e0200e02009035090240902009020
001500000262339615396153961502623396153961539615026233961539615396150262339615396153961502623396153961539615026233961539615396150262339615396153961502623396153961539615
00150000267302873029730267302873028732257302573226730297302d73032730307303073230732307342e7312d7352b7352e7352d7312b735297352d7352b73729733287352973526731267352673526734
001500001a7351d7351a7351d7351c7351f7351c7351f7351a7351d7351a7351d735187351c735187351c735187351d735187351d735187351c735187351c7351a7351d735197351c7351a7351d7352173526735
001500000e0350e0240e0200e020090350902409020090200e0350e0240e0200e0200c0350c0240c0200c020110351102411020110200c0350c0240c0200c0200e0350e02409025090240e0350e0240e0200e020
001500000262339615396153961502623396153961539615026233961539615396150262339615396153961502623396153961539615026233961539615396150262339615026153961502623216152d61539615
001500003272326525327272652531723255253172725525327232652532727265253472328525347272852535723295253572729525347232852534727285253272326525327272652531723255253172725525
001500001d7231d1251d7211d1251c7231c1251c7211c1251d7231d1251d7211d1251f7231f1251f7211f125217232112521721211251f7231f1251f7211f1251d7231d1251d7211d1251c7231c1251c7211c125
001500000e0350e0250e0250e025090350902509025090250e0350e0250e0250e0250c0350c0250c0250c025110351102511025110250c0350c0250c0250c0250e0350e0250e0250e02509035090250902509025
001500003272326525327272652531723255253172725525327232652532727265253472328525347272852535723295253572729525347232852534727285253272326525317272552532723295253972726525
001500001d7231d1251d7211d1251c7231c1251c7211c1251d7231d1251d7211d1251f7231f1251f7211f125217232112521721211251f7231f1251f7211f1251d7231d1251c7211c1251d7231a125157210e125
001500000e0350e0240e0200e020090350902409020090200e0350e0240e0200e0200c0350c0240c0250c025110351102411020110200c0350c0240c0200c0200e0350e02409025090240e0350e0240e0200e020
001500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001500001a7101a7101a7201a7201c7301c7301c7401c7401d7401d7401d7301d7301c7201c7201c7101c7101a7101a7101a7201a7201c7301c7301c7401c7401d7401d7401d7301d7301f7201f7201f7101f710
001500000e0430e0300e0200e010090430903009020090100e0430e0300e0200e0100c0430c0300c0200c010110431103011020110100c0430c0300c0200c0100e0430e0300e0200e01009043090300902009010
001500001d7101d7101d7201d7201f7301f7301f7401f740217402174021730217301f7201f7201f7101f7101d7101d7101d7201d7201f7301f7301f7401f74021740217401f7301f7301d7201d7201d7101d710
001500001a7101a7101a7201a7201c7301c7301c7401c7401d7401d7401d7301d7301c7201c7201c7101c7101a7101a7101a7201a7201c7301c7301c7401c7401d7401d7401c7301c7301a7201a7201a7101a710
001500000e0430e0300e0200e010090430903009020090100e0430e0300e0200e0100c0430c0300c0200c010110431103011020110100c0430c0300c0200c0100e0430e03009020090100e0430e0300e0200e010
001500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001500001a7131a7151a7231a7251c7331c7351c7431c7451d7431d7451d7331d7351c7231c7251c7131c7151a7131a7151a7231a7251c7331c7351c7431c7451d7431d7451d7331d7351f7231f7251f7131f715
001500000e0430e0300e0200e010090430903009020090100e0430e0300e0200e0100c0430c0300c0200c010110431103011020110100c0430c0300c0200c0100e0430e0300e0200e01009043090300902009010
001500001d7131d7151d7251d7251f7331f7351f7451f745217432174521735217351f7231f7251f7151f7151d7131d7151d7251d7251f7331f7351f7451f74521743217451f7331f7351d7231d7271d7151d717
001500001a7131a7151a7251a7251c7331c7351c7451c7451d7431d7451d7351d7351c7231c7251c7151c7151a7131a7151a7251a7251c7331c7351c7451c7451d7431d7451c7331c7351a7231a7251a7151a715
001500000e0430e0300e0200e010090430903009020090100e0430e0300e0200e0100c0430c0300c0200c010110431103011020110100c0430c0300c0200c0100e0430e03009020090100e0430e0300e0200e010
001500002673028520297302652028730285222573025522267302852029730265202b7302b5222b7322b5242d7302b520297302d5202b7302b52228730285222973128525267352852525730255222573225524
001500001a5251d7351a5251d7351c5251f7351c5251f7351a5251d7351a5251d735185251c735185251c735185251d735185251d735185251c735185251c7351a5251d7351a5251d735195251c735195251c735
001500000e0331a025260251a025090331502521025150250e0331a025260251a0250c033180252402518025110331d025290251d0250c0331802524025180250e0331a025260251a02509033150252102515025
00150000267302852029730265202873028527257302552226730295202d73732527307303052230732305242e7312d5252b7332e5252d7312b525297332d5252b73729523287352d52532731325253273532524
001500001a5251d7351a5251d7351c5251f7351c5251f7351a5251d7351a5251d735185251c735185251c735185251d735185251d735185251c735185251c7351a5251d735195251c7351a5251d7352152526735
001500000e0331a025260251a025090331502521025150250e0331a025260251a0250c033180252402518025110331d025290251d0250c0331802524025180250e0331a02509023150250e0331a0252602532025
001500003271226012327172601231722250223172725022327322603232737260323472228022347272802235712290123571729012347222802234727280223273226032327372603231722250223172725022
001500001d0121d7171d0121d7121c0221c7271c0221c7221d0321d7371d0321d7321f0221f7271f0221f722210122171721012217121f0221f7271f0221f7221d0321d7371d0321d7321c0221c7271c0221c722
001500000e0331a0250e0251a025090331502509025150250e0331a0250e0251a0250c033180250c02518025110331d025110251d0250c033180250c025180250e0331a0250e0251a02509033150250902515025
001500003271326012327122601231723250223172225022327332603232732260323472328022347222802235713290123571229012347232802234722280223273326032317332503232743290453974526045
001500001d0131d7121d0121d7121c0231c7221c0221c7221d0331d7321d0321d7321f0231f7221f0221f722210132171221012217121f0231f7221f0221f7221d0331d7321c0331c7321d0231a725150250e725
001500000e0331a0250e0231a025090331502509023150250e0331a0250e0231a0250c033180250c02318025110331d025110231d0250c033180250c02318025020330e0250902315025020330e025020230e025
001500001a0151a7151a0151a7151c0251c7251c0251c7251d0351d7351d0351d7351f0251f7251f0251f725210152171521015217151f0251f7251f0251f7251d0351d7351d0351d7351c0251c7251c0251c725
001500000e0331a0250e0251a025090331502509025150250e0331a0250e0251a0250c033180250c02518025110331d025110251d0250c033180250c025180250e0331a0250e0251a02509033150250902515025
001500001a015267151a015267151c025287251c025287251d035297351d035297351f0252b7251f0252b725210152d715210152d7151f0252b7251f0252b7251d035297351c035287351a025297252102526725
001500000e0331a0250e0231a025090331502509023150250e0331a0250e0231a0250c033180250c02318025110331d025110231d0250c033180250c02318025020330e0250902315025020330e025020230e025
001500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002623216152d61539615
__music__
00 41424344
01 0b0c0d0e
00 0f101112
00 1314150e
00 16171812
00 2526270e
00 28292a12
00 2b2c2d0e
00 2e2f3012
00 41313275
02 41333435
01 191a1b44
00 1c1d1e44
00 1f202144
02 22232444
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment