pico-8 cartridge // http://www.pico-8.com
version 30
__lua__
-- the lost night
-- by afk & jp
-- flags
-- 00=wall
-- 01=interactive
-- 02=door enter
-- 03=door exit
-- 06=water
-- 07=fence
-- 7442
-- 6974
function _init()
menuitem(1,"clear game", clear_save)
-- menuitem(2,"toggle god",function()god=not god end)
-- god=true
tscreen,
last_shop,
fadedir,
fadespd=0,2492,true,0.0058
debug,
parts,
c0ls,
wind,
world_baddies={},{},{},{},{}
cartdata"the_lost_night"
overworld=split"0,0,0,0,112,48"
-- overworld=split"0,0,0,0,16,16"
battle_x,
battle_y,
battle_w,
battle_h=19,78,90,47
dirx=split"-1,1,0,0,1,1,-1,-1"
diry=split"0,0,-1,1,-1,1,1,-1"
drw_bigs=split2d[[
31|96|16|22|-7
%64|96|15|21|-6
%47|96|17|21|-8
%79|96|9|25|-5
%88|96|07|23|-6
%104|96|8|24|-8
]]
mapv,
camv,
shake=v2zero(),v2zero(),v2zero()
-- [typ][hard]
drones_hp_lvls=split2d[[
1|1|1|3|3|3|5|5|5|5|5|5|7|7|7|7|7|7|9|9|9|9|9|9%
1|1|1|3|3|3|4|4|5|5|6|6|7|7|8|8|9|9|10|10|11|11|12|12%
1|1|1|3|3|3|4|4|5|5|6|6|7|7|8|8|9|9|10|10|11|11|12|12%
1|5|5|5|5|7|7|7|7|7|7|10|10|10|10|10|10|10|16|16|16|16|24|24%
1|1|1|2|2|2|3|3|3|3|3|3|4|4|4|4|5|5|5|5|6|6|6|6%
1|1|1|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|9|20|20
]]
baddies_hp_lvls=split2d[[
1|2|2|3|3|3|3|3|3|3|3|3|4|4|4|4|5|5|5|5|5|5|6|6%
1|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|6|6|6|6%
1|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|6|6|6|6%
1|5|5|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2%
1|2|2|2|2|2|2|2|2|2|2|2|3|3|3|3|3|3|3|3|3|3|4|4%
1|2|2|3|3|5|5|5|5|7|5|5|5|5|5|6|6|6|6|7|7|8|8|8
]]
acc_lvls=split".06,.075,.09,.15,.12"
-- bullets attrib
size_lvls=split"1,2,3,4"
pwr_lvls=split"1,2,3,4,5"
rate_lvls=split".04,.055,.065,.08,.1"
spd_lvls=split"1,1.2,1.4,1.6,1.8"
rooms_setup()
start_title()
end
function _update60()
tim=time()
wave=sin(tim/2)/2.5
coswave=cos(tim)*.2
_upd()
upd_wind()
do_parts()
end
function _draw()
_drw()
clip()
camera()
drw_wind()
fadein()
-- dopal()
for i=0,15 do
pal(i,i+128,1)
end
pal(137,9,1)
--★ 19 tokens
clip()
cursor(2,2)
color(8)
for txt in all(debug) do
print(txt)
end
end
function start_game()
items_setup()
unlocks_setup()
load_game()
-- reload(0x2000,0x2000,0x1000)
a_map,
a_msg,
a_room=overworld
spwn_things()
_drw,_upd=drw_game,upd_game
music(-1,1000)
fadeout()
music(10)
end
function spwn_things(skip)
markers={}
local celx,cely,sx,sy,celw,celh=unpack(a_map)
p_ini()
for y=cely,celh+cely-1 do
for x=celx,celw+celx-1 do
local tile,is_interact=mget(x,y)
local is_interact=fget(tile,1)
local _x,_y=(x-celx)*8+sx,(y-cely)*8+sy
-- -- ★ 17
-- if tile==2 then
-- p_v=v2:new(_x,_y)
-- mset(x,y,0)
-- end
if tile==119 then
p_v=v2:new(_x,_y-4)
end
if is_interact then
spwn_marker(_x,_y)
end
end
end
local entry
if a_room then
entry=split(a_room[2][5],"|")
end
if entry then
local x,y=unpack(entry)
p_v=v2:new(x*8,y*8)
end
do_map()
camv=mapv*8
do_camera()
-- setups
dog_ini()
txt_setup()
npc_setup()
baddies_setup()
if skip then return end
check_spwn_baddies()
end
function start_room()
world_baddies=baddies
norm_p_pos(a_room)
a_map=split(a_room[2][1],"|")
old_p_v=p_v+0
spwn_things()
fadeout()
end
function save_game()
local x,y=get_coords(last_shop)
local stats={
convert_coords(x,y+1),
p_hp,
candy,
max_hp,
acc_lvl,
pwr_lvl,
rate_lvl,
size_lvl,
spd_lvl
}
-- 1-9 levls
-- 10-20 unlocks
for i=1,#stats do
dset(i-1,stats[i])
end
local i=10
for unlock in all(unlocks) do
dset(i,unlock)
i+=1
end
local i=34
for itm in all(items_sold) do
dset(i,itm)
i+=1
end
end
function load_game()
local coords=0
local stats={
-- 1 coords
2492,
-- 2 p_hp
10,
-- 3 candy
45,
-- 4 max_hp
10,
-- 5 acc_lvl
1,
-- 6 pwr_lvl
1,
-- 7 rate_lvl
1,
-- 8 size_lvl
1,
-- 9 spd_lvl
1
}
for i=1,9 do
local val=dget(i-1)
if val != 0 then
stats[i]=val
end
end
coords,
p_hp,
candy,
max_hp,
acc_lvl,
pwr_lvl,
rate_lvl,
size_lvl,
spd_lvl=unpack(stats)
local x,y=get_coords(coords)
p_v=v2:new(x,y)
p_v*=8
for i=10,33 do
local val=dget(i)
if val != 0 then
add(unlocks,val)
end
end
items_sold={}
for i=34,64 do
local val=dget(i)
if val != 0 then
add(items_sold,val)
end
end
for i in all(items_sold) do
items[i][2][4]=true
end
hard=#unlocks+1
end
function clear_save()
sfx"52"
for i=0,64 do
dset(i,0)
end
end
-->8
-- setups
function txt_setup()
texts={}
final_msg=split[[wELCOME BACK MY CHILD.,
,dID YOU ENJOY YOURSELF
,AS ONE OF THEM?
,...
,cANDY?
,sURE i'LL HAVE SOME.
,
,thanks for playing!
]]
local coords=[[
61|20|⌂ mY hOME.
%60|23|aaghh!◆... SORRY. i◆MISTOOK YOU FOR A◆HORRIBLE CHILD.◆tAKE THESE.◆dON'T FOLOW ME.
%53|27|hAVE YOU BEEN TO PEPE'S◆PLAZA? THERE IS A NICE◆LADY THAT MAKES◆AN EXCELENT EARTH SOUP!.
%55|34|iF YOU GET KNOCKED OUT◆YOU'LL RETURN TO THE◆LAST VENDING MACHINE◆YOU USED.
%62|38|pUMPKIN hOUSE lOOKOUT->
%57|41|tHE PUMPKIN HOUSE IS◆SCARY,YOU CAN USE THE◆LOOKOUT TO APPRICIATE◆THE ARCHITECTURE THOUGH.
%58|45|wATER.◆IF YOU CAN'T SWIM◆YOU CAN'T CROSS OVER
%45|42|"pEPE pLAZA"◆A PLACE WHERE EVERYONE◆IS LATE.
%40|41|i WAS LATE.◆SHE'S LATE TOO i GUESS.
%42|35|tHEY SAY cHIPS CAN◆RAISE YOUR HEALTH◆PERMANENTLY.->
%34|37|mY BOY CHUBS LOVED MY◆EARTH SOUP. hE WAS A◆WEIRD ONE.i REMEMBER◆HIM ON NIGHTS LIKE THIS◆hAVE SOME soup.
%39|24|iF YOU'RE NOT FEELIG◆GREAT GET SOME TEA AT A◆VENDING MACHINE.
%36|29|tHE SNACKS IN VENDING◆MACHINES MAKE ME FEEL◆STRONGER AND FASTER.◆mOM DISAGREES
%33|24|i'M TOO TIRED◆TO MOVE. gET ME◆SOME eARTH sOUP◆AND I'LL LET YOU PASS.
%36|21|wHAT A GREAT CHICKEN!
%38|19|cHICKENS FRIGHTEN ME.
%43|26|iT'S LOCKED.◆tHE KEY-HOLE IS SHAPED◆LIKE A BONE.◆THERE'S A DOG ON◆THE OTHER SIDE!
%43|23|bARK!◆yOU PET THE DOG
%21|29|fIND MY DOG!
%24|8|i HOPE TONIGHT◆THE GHOSTS WILL TAKE ME.
%30|9|"fISHING IS◆NOT VERY FUN"◆◆tHAT'S A QUOTE FROM◆A BOOK I WAS READING.◆I LOST IT THO 😐
%29|10|fROG RIVER ->
%14|11|i FEEL SOMETHING'S OFF◆ABOUT YOU.
%2|5|tHE GREAT PUMPKIN IS ANGRY.◆i CAN FEEL IT.
%2|5|sOMEONE IS LOOKING FOR◆YOU.◆◆aRE YOU LOOKING BACK?
%5|4|☉insight☉ CORNER.
%5|1|a BOOK ABOUT FISHING◆◆eww!! IT'S WET.
%6|14|a HORNED kEY◆WONDER WHO DROPPED IT?
%34|1|yOU LOSE YOURSELF IN◆THE STAR PATTERNED◆BOOTS.
%38|6|we'll be together◆again!♥
%42|4|tHE BRIDGE COLLAPSED◆iM FINE ON THIS◆SIDE THO
%23|35|a BOULDER IS IN YOUR WAY.◆MAYBE YOU CAN BLAST IT◆WITH EXPLOSIVES.
%19|42|aN OLD FURNACE◆"tORTILLA kING"◆lOOKS A LITTLE OLD BUT◆IT SHOULD STILL WORK.◆
%29|42|aS THE NIGHT PASSES◆THE SPIRITS GET◆STRONGER.
%22|46|...hMM, mUSHROOMS.◆THE SMELL MAKES YOU◆DIZZY
%9|19|i SAW A KEY◆UP THERE.
%3|23|hAhAhA.◆tHAT'S sAD.
%1|23|aND THEN lUISA SAID◆"lOU, I'M LEAVING YOU"
%10|33|yO nERD!◆gOT SOME SHROOMS?
%1|38|sMALLEST ONE.◆tAKE MY POWER.◆bE WEIGHTLESS
%13|44|tHE COYOTE STATUE'S EYES◆SHINE.◆"A FEATHERED OFFERING"
%7|42|aN OLD hORNED DOOR
%79|1|wE USED TO DRAMA
%89|3|i DON'T HAVE ILLEGAL◆FIREWORKS HIDDEN IN◆MY BACKYARD!
%86|21|i LOVE SHOPPING!
%82|22|wE USED TO DRAMA
%89|28|yOU'RE DOING GREAT!◆◆wHA? nO◆I'M TALKING TO MYSELF.
%107|5|mAUSOLEUM
%97|1|a pALOMA◆lIGHTING THIS SHOULD BE◆A blast!
%110|43|wE NEVER RETURN◆FROM THE pUMPKIN hOUSE.
%50|4|bOOK HOUSE
%76|19|wEENIE RACE!◆EVERY DAY◆ IN PEPE PLAZA
%74|30|yO! i'VE ALWAYS WANTED◆TO MAKE TORTILLAS◆BY HAND.◆i'D SET UP IN THE PLAZA,◆AND SLOWLY CREATE DEMAND◆AND BOOM!◆JACK-UP THE PRICE.◆HNNN... CAPITALISM♥
%71|25|nEED CANDY REEEEAL BAD◆:SWEATS:
%76|26|aN OLD RUSTED KEY.◆kINDA' LOOKS LIKE A◆SKULL.◆IT'S A sPOO KEY!
%66|25|a bone SHAPED KEY.
%99|28|i'M NOT SELLING CANDY
%108|23|bEING CLOSER MAEKS◆TEH MIND SL...P AWY..
%109|29|sPOOKY gATE
%93|42|dO NOT LET FENCES STOP◆YOU, YOUNG ONE.
%84|37|I..DON'T FEEL TOO GOOD,◆MY FEET ARE ROOTED TO◆THE EARTH
%75|43|pUMPKIN HOUSE◆yOU MADE IT BACK◆COME IN
]]
if a_room then
coords=a_room[2][2]
end
coords=split2d(coords)
for t in all(coords) do
local x,y,txt=unpack(t)
add_interact(
x,y,txt,
texts
)
if not has_unlock(nil,convert_coords(x,y)) then
spwn_marker(x*8,y*8)
end
end
end
function npc_setup()
npcs={}
npcs_i={}
-- x,y,type,flip (default true)
local coords=[[
53|27|1
%60|23|5|
%36|29|2|
%39|24|8|
%21|29|3|
%33|24|04
%34|37|05
%57|41|1|
%42|35|7
%55|34|6
%29|42|8|
%40|41|1
%24|8|2
%10|33|03
%30|09|6|
%2|5|5
%14|11|7|
%9|19|1|
%1|23|6
%3|23|2|
%38|19|5|
%38|6|7
%42|4|4|
%99|28|4|
%86|21|8
%89|28|3
%82|22|1
%89|3|2|
%71|25|6|
%84|37|1|
%110|43|3|
%108|23|7|
%22|46|022
%13|44|024
%36|21|023
%5|1|021
%7|42|016
%6|14|017
%1|38|010
%23|35|027
%19|42|031
%74|30|07
%76|26|029
%109|29|028
%93|42|012
%97|1|030
%66|25|026
%43|23|018
%43|26|025
%34|1|019
%79|1|8|
%-7|12|011|
]]
if a_room then
coords=a_room[2][3]
end
coords=split2d(coords)
for c in all(coords) do
npc_add(unpack(c))
end
end
function rooms_setup()
rooms={}
-- x$y$room
-- mapcoords
-- texts
-- npc
-- spwn_points
-- playercoords
-- exit coords - optional
local coords=[[
60$18$
112|0|24|24|10|10
>
7|9|uMM...◆wHY ARE YOU HERE?
%10|5|wHY DO PEOPLE◆KEEP BARGING IN?◆I EVEN PUT UP A SIGN◆
%12|7|"tHE ART OF ART"◆... OK
>
7|9|1
%10|5|4|false
%7|8|14
%10|8|14|false
%9|8|13
%5|4|15
%12|7|15
<60$30$
123|0|45|25|5|10
>
9|6|tHAT GUY...◆gIVES ME THE CREEPS
%6|6|pEOPLE THINK IM CREEPY◆😐
>
9|6|2|false
%6|6|4
>
8|5|5|0|0
<55$27$
112|10|0|40|16|6
>
13|7|tHANKS FOR COMING!◆... NOW LEAVE.
>
13|7|7|false
%4|8|13
%8|8|13
%12|6|14|true
>
10|7|5|0|1
<42$27$
112|0|24|24|10|10
>
10|5|wHERE DID ALL OUR◆FURNNITURE GO?
%7|8|mY TEACHER SAYS GHOSTS◆AREN'T REAL.◆bUT I'VE SEEN SOME SHIT.◆😐
>
10|5|7|false
%7|8|3
<36$23$
112|24|8|32|15|8
>
14|7|tHE TOWN◆WAS BUILT AROUND THE◆OLD pUMPKIN HOUSE.◆gIVEN THAT NAME BECAUSE◆ONCE A YEAR, STRANGE◆PUMPKINS WITH FACES◆GROW AROUND IT.
%4|8|i FEEL WEIRD PRESENCES◆WHEN I'M OUTSIDE.
>
14|7|6|false
%4|8|1
%15|11|20
<45$33$
118|16|24|40|10|7
>
8|7|sHE THINKS SPIRITS◆PASS THROUGH THE TOWN◆DRESSED AS CHILDERN◆ON NIGHTS LIKE THIS.
%6|7|i WAS TEN WHEN I CROSSED◆THE RIVER, JUMPED THE◆FENCE, AND PEEKED◆INTO pUMPKIN HOUSE.
>
8|7|6|
%6|7|7
<35$42$
113|32|8|0|14|16
>
6|7|fEELING PRESSURE◆IN THE ROOM.◆
>
6|7|3
%3|4|20
%4|4|20
%5|4|20
%6|4|20
%7|4|20
%8|4|20
%9|4|20
%10|4|20
%11|4|20
%2|11|20
%3|11|20
%4|11|20
%5|11|20
%6|11|20
%8|11|20
%9|11|20
%10|11|20
%11|11|20
%7|11|15
>
8|12|5|0|1
%5|9|1|1◆0◆2|.6
%12|3|1◆5|8◆0◆2|.5
%12|2|2|2|1
>
2|14
>
4|1|36|39
<37$39$
113|32|8|0|14|16
>
14|10|tHE HOUSE FEELS◆DIFFERENT
>
14|10|3|
%3|4|20
%4|4|20
%5|4|20
%6|4|20
%7|4|20
%8|4|20
%9|4|20
%10|4|20
%11|4|20
%2|11|20
%3|11|20
%4|11|20
%5|11|20
%6|11|20
%8|11|20
%9|11|20
%10|11|20
%11|11|20
%7|11|15
>
8|1|1|0|0
>
4|2
>
2|15|35|42
<55$40$
112|16|45|35|5|8
>
8|6|oNLY THE WIND LIVES HERE.
>
8|6|13
%6|9|14
%9|9|14|true
>
8|7|1|0|1
<22$23$
112|16|45|35|5|8
>
7|8|i SAW A DOG-PERSON◆ROAMING THE WASTELANDS.
>
8|6|13
%7|6|13
%7|8|2
<18$20$
112|16|45|35|5|8
>
9|6|wHEN i WAS A LAD◆kIDS WOULD SOMETIMES◆DISSAPPEAR.◆tHAT'S WHY i'VE NEVER◆LEFT THIS HOUSE.◆sORRY ABOUT THE SMELL.
>
8|8|15
%9|8|15
%9|6|4|true
<28$19$
118|16|24|40|10|7
>
4|7|oUR FAMILY sTOPPED◆A DINER ROBBERY ONCE.◆a WHOMPING BUFFET◆IF YOU WILL.
>
4|7|6
%6|9|20
%6|8|20
%8|8|14
<25$7$
123|0|43|25|5|10
>
9|7|bORK!bORK!◆(fINALLY MY OWN PLACE.)◆
>
9|7|18
<2$2$
118|16|24|40|10|7
>
9|7|gETTING A TASTE OF LIFE?
>
9|7|24
%8|8|27
%9|9|27
<0$28$
112|16|45|35|5|8
>
7|6|gOT MY BUTT KICKED◆AT A BUFFET...◆tWICE.
>
7|6|4
<41$0$
112|0|24|24|10|10
>
10|4|fROG RIVER?◆mORE LIKE ROCK RIVER◆◆aM i RIGHT?
>
10|4|5|
>
7|6|4|0|1
<68$22$
112|24|8|32|15|8
>
13|8|mY TWIN WENT THERE◆SAYING "HE" WAS CALLING◆
>
13|8|1|
<109$5$
112|0|24|24|10|10
>
8|8|sAVE US?
>
8|8|22
%6|10|6
%10|10|5|
<82$26$
112|10|0|40|16|6
>
8|8|LLEGAS AL FINAL◆Y DESPUES QUE?
>
9|8|23
<1$42$
113|32|8|0|14|16
>
5|6|yOU SMELL LIKE◆MUSHROOMS
>
2|6|24|
%5|6|24
%6|6|20
%7|6|20
%8|6|20
%9|6|20
%10|6|20
%11|6|20
%12|6|20
%2|11|20
%3|11|20
%4|11|20
%5|11|20
%6|11|20
>
8|8|2◆1◆4◆3|7◆4◆6◆8◆3◆5|1
>
2|14
>
4|1|4|38
<4$38$
113|32|8|0|14|16
>
5|6|yOU STILL SMELL LIKE◆MUSHROOMS
>
2|6|24|
%5|6|24
%6|6|20
%7|6|20
%8|6|20
%9|6|20
%10|6|20
%11|6|20
%12|6|20
%2|11|20
%3|11|20
%4|11|20
%5|11|20
%6|11|20
>
8|12|2|0|0
>
4|2
>
2|15|1|42
<9$30$
113|32|8|0|14|16
>
11|3|dON'T MIND ME◆I'M JUST CHILLIN
>
2|7|20
%4|8|20
%6|7|20
%8|8|20
%10|7|20
%12|8|20
%4|4|20
%7|11|20
%11|3|23
>
8|12|2|0|0
>
2|14
>
4|1|7|27
<7$27$
113|32|8|0|14|16
>
11|3|jESUS! GET GOING◆WILL YA?
>
2|7|20
%4|8|20
%6|7|20
%8|8|20
%10|7|20
%12|8|20
%4|4|20
%7|11|20
%11|3|23
>
8|12|2|0|0
>
4|2
>
2|15|9|30
<62$45$
112|24|8|32|15|8
>
3|6|tHIS IS THE PATH◆OF MOBILITY, LITTLE ONE
>
12|11|20
%12|10|20
%12|9|20
%12|8|20
%12|7|20
%6|7|20
%5|8|20
%3|6|9
%3|10|20
>
8|12|2|0|0
>
15|10
>
2|11|36|0
<36$0$
112|24|8|32|15|8
>
0|0|
>
12|11|20
%12|10|20
%12|9|20
%12|8|20
%12|7|20
%6|7|20
%5|8|20
%3|10|20
>
8|12|2|0|0
>
2|10
>
15|11|62|45
<51$3$
113|32|8|0|14|16
>
6|2|bOOKS?◆wE GOT 'EM
>
6|2|5|
%6|3|13
%4|4|15
%4|6|15
%4|8|15
%4|10|15
%8|4|15
%8|6|15
%8|8|15
%8|10|15
%12|4|15
%12|6|15
%12|8|15
%12|10|15
>
8|12|2◆4|0◆1◆2◆3|1
>
4|2
>
2|15|54|9
<54$9$
113|32|8|0|14|16
>
6|2|bOOKS?◆wE GOT 'EM
>
6|2|5|
%6|3|13
%4|4|15
%4|6|15
%4|8|15
%4|10|15
%8|4|15
%8|6|15
%8|8|15
%8|10|15
%12|4|15
%12|6|15
%12|8|15
%12|10|15
>
8|12|2|0|0
>
2|14
>
4|1|51|3
<84$22$
113|32|8|0|14|16
>
0|0|
>
2|9|20
%3|9|20
%4|9|20
%5|9|20
%6|9|20
%7|9|20
%8|9|20
%9|9|20
%10|9|20
>
8|12|2|0|0
>
4|2
>
2|15|94|30
<94$30$
113|32|8|0|14|16
>
0|0|
>
2|9|20
%3|9|20
%4|9|20
%5|9|20
%6|9|20
%7|9|20
%8|9|20
%9|9|20
%10|9|20
>
8|12|2|0|0
>
2|14
>
4|1|84|22
<105$41$
112|24|8|32|15|8
>
0|0|
>
4|9|27
>
0|0|0|0|0
>
15|10
>
2|11|93|37
<93$37$
112|24|8|32|15|8
>
0|0|
>
4|9|27
>
0|0|0|0|0
>
2|10
>
15|11|105|41
<22$39$
112|24|8|32|15|8
>
0|0|0
>
3|7|22
%5|8|22|
%12|9|22
>
5|6|4|0|1
>
15|10
>
2|11|18|39
<18$39$
112|24|8|32|15|8
>
0|0|0
>
3|7|22
%5|8|22|
%12|9|22
>
0|0|0|0|0
>
2|10
>
15|11|22|39
<73$41$
113|32|8|0|14|16
>
4|3|yOU'RE BACK◆LET'S GO HOME.
>
4|3|11
%3|6|20
%4|6|20
%5|6|20
%6|6|20
%7|6|20
%8|6|20
%9|6|20
%8|4|20
%8|3|20
%8|2|20
%8|9|13
%5|11|20
%4|11|20
%3|11|20
%2|11|20
%11|11|20
%12|11|20
%13|11|20
%14|11|20
%10|11|15
%6|11|15
>
10|4|6|0◆3◆4|1
%8|11|1◆2◆3◆4◆5◆6|0◆2◆3◆4◆5◆6|1
>
2|14
>
4|1|-10|12
]]
for c in all(split(coords,"<")) do
local x,y,room=unpack(split(c,"$"))
add_room(
x,y,room
)
end
end
function unlocks_setup()
unlocks={}
locks={}
--x|y|id|msg|requirement
local coords=split2d[[
60|23|gramps◆yOU GOT 45 SWEETS!%
34|1|dash◆dASH BY PRESSING 🅾️%
01|38|water◆wALK ON WATER%
93|42|fence◆pASS THROUGH THIN FENCES%
43|23|dog◆tHEY FOLOW YOU NOW%
34|37|key1◆yOU GOT EARTH SOUP%
33|24|gate1◆THE GUY FADED. WTF?◆key1%
22|46|key2◆yOU GOT MUSHROOMS%
10|33|gate2◆i'M GONNA TRIP◆key2%
66|25|key4◆gOT BONE KEY%
43|26|gate4◆cLOSER TO DOG◆key4%
97|01|key5◆GOT AN EXPLOSIVE%
23|35|gate5◆bOOM!◆key5%
19|42|key6◆fURNACE ACQUIRED%
74|30|gate6◆hEHE I''LL BE RICH◆key6%
76|26|key7◆GOT THE SKULL KEY%
109|29|gate7◆tHE JAW UNHINGES◆key7%
06|14|key9◆gOT THE HORNED KEY%
07|42|gate9◆iT CLICKS OPEN◆key9%
36|21|key10◆yOU GOT A CHICKEN%
13|44|gate10◆tHE STATUE CRUMBLES◆key10%
05|01|key11◆gOT A WET BOOK%
30|09|gate11◆tHANKS! yOU FOUND IT◆key11]]
for t in all(coords) do
local x,y,id=unpack(t)
add_interact(
x,y,id,
locks
)
end
end
function baddies_setup()
spwn_points={}
-- x|y|typs|locs|ratio
local coords=[[
38|28|5|0|.9
%37|29|1◆5|0◆3◆2|.1
%59|37|1◆5|0◆2|0.8
%43|42|1◆5|0◆2◆1◆3◆4|.4
%51|41|1◆5|0◆3|.7
%24|26|1◆5◆2|0◆1◆2◆3◆4|.5
%27|38|1◆2|0◆2◆4|.9
%20|9|1◆2◆5|0◆2◆1◆3◆5|.8
%28|6|1◆2◆5|0|.9
%6|3|1◆2|0◆3|1
%13|8|5◆2|0◆1◆3|.9
%6|17|3|0◆2|1
%13|23|1◆2◆3◆5|0◆1◆5|.3
%4|27|2|0◆4◆6◆7|.3
%13|39|1◆3|0◆7|.6
%5|35|2◆5|0◆6|.6
%6|46|4|0|.5
%23|43|4◆3|0◆2|.7
%40|12|1◆2◆5|0◆4◆1|.5
%51|18|5|0◆1◆2|.9
%59|7|4|0◆7|1
%40|17|1|0|1
%65|5|3|0|1
%74|10|1◆2◆3◆4◆5|0◆3◆4◆8◆1◆7|.8
%70|19|2◆4|0◆2|.9
%68|26|1◆2◆3◆4◆5|0◆2◆4◆6|.8
%88|5|1◆2◆3◆4◆5|0|1
%99|19|4|0|1
%102|1|1◆3◆4|0◆7◆6|.8
%102|11|5◆2|0◆6◆4|.6
%107|25|1◆2◆3◆4◆5|0◆4◆7|.7
%87|43|4◆1◆3|0◆1◆2|1
%85|45|4◆2◆5|0◆1◆2◆4◆3|1
%109|39|4◆5◆2|0◆4◆3◆2|1
%73|39|6|0|1
%44|10|1◆5|0◆2|.8
]]
if a_room then
coords=a_room[2][4]
end
coords=split2d(coords)
-- ∧disable baddies
-- coords=nil
for spwn in all(coords) do
add_spwn_point(unpack(spwn))
end
end
function items_setup()
items={}
-- text◆price◆sprite
local items_string=[[hp tea◆1◆63
,chips◆10◆62
,soda◆10◆61
,bacon◆10◆60
,tkyk◆15◆59
,pizza◆15◆58
,pop◆20◆57
]]
items_og=split(items_string)
-- x,y,item
local coords=split2d[[
45|36|2
%20|1|2
%101|37|2
%99|24|2
%80|01|2
%56|36|3
%06|19|3
%80|36|3
%52|21|3
%33|28|4
%19|44|4
%87|27|4
%65|45|4
%27|20|5
%51|10|5
%20|39|5
%110|18|5
%26|43|6
%97|08|6
%107|44|6
%78|26|6
%36|38|7
%27|02|7
%32|38|7
]]
for c in all(coords) do
local x,y,i=unpack(c)
add_interact(
x,y,items_og[i],
items
)
end
end
-->8
--screens
function start_title()
fadeperc=.5
start_stars()
_upd=upd_title
_drw=drw_title
music(13)
end
function upd_title()
if btnp(❎) then
start_game()
end
end
function drw_title()
cls()
drw_stars()
local x=25
local y=30
circfill(x+38,y+23+blink(),30,13)
sspr(0,96,31,24,x,y+blink(),62,48)
y+=66
local txt="❎start game"
x=hcntr(txt)
print(txt,x-4,y,14)
drw_txts("an rpg by,@eljovenpaul,@afk_mario",y+10,13)
end
function start_gover()
_drw=drw_gover
_upd=upd_gover
start_stars()
music(-1,1000)
fadeout()
music(8,100)
end
function upd_gover()
if btnp(❎) or btnp(🅾️) then
start_title()
end
end
function drw_gover()
drw_stars()
drw_txts(
"game over,press ❎ to continue",
60+blink(),
14
)
end
function upd_game()
do_map()
p_interact()
if not a_msg then
p_mov()
upd_dog()
upd_baddies()
end
end
function drw_game()
cls()
do_camera()
if not a_room then
rect(mapmin.x,mapmin.y+4,mapmax.x+1,mapmax.y+5,14)
end
map(unpack(a_map))
drw_parts()
drw_npcs()
drw_dog()
drw_player()
drw_baddies()
do_markers()
end
function upd_camera()
local b = mapv*8
local c = camv-b
if c:mag() > 1 then
camv-=c:norm()*8
camera(camv.x,camv.y)
else
-- add(debug,camv.x)
-- add(debug,mapv.x)
check_spwn_baddies()
camv=b
_upd=upd_game
camera(camv.x,camv.y)
end
end
function do_camera()
camv+=shake
camera(camv.x,camv.y)
end
function do_map(force)
local celx,
cely,
sx,
sy,
celw,
celh=unpack(a_map)
local old=mapv
mapmin=v2:new(sx,sy-4)
mapmax=v2:new(sx+celw*8-2,sy+celh*8-6)
local x,y=(p_v.x+4)\8,(p_v.y+4)\8
x=x\16
y=y\16
x*=16
y*=16
mapv=v2:new(x,y)
if old != mapv then
if not a_room and not force then
_upd=upd_camera
end
end
end
function start_shop()
_drw=drw_shop
_upd=upd_shop
sfx"52"
start_stars()
shop_i=0
shop_shake=0
norm_p_pos(a_item)
last_shop=a_item[1]
local itm={-1,split(items_og[1],"◆")}
shop_items={itm,a_item}
music(-1,1000)
fadeout()
music(8,100)
end
function upd_shop()
if btnp(⬆️) then shop_i-=1 end
if btnp(⬇️) then shop_i+=1 end
shop_i=shop_i%3
shop_shake=max(0,shop_shake-.125)
if btnp(❎) then
if shop_i<#shop_items then
local item=shop_items[shop_i+1]
local txt,price,s,sold=unpack(item[2])
if
sold or
price>candy
then
shop_shake+=1
sfx"53"
show_msg(sold and "sold out" or "not enough candy",30)
return
end
if s == 63 then
p_hp=min(p_hp+5,max_hp)
elseif s== 62 then
max_hp+=3
p_hp=max_hp
elseif s==61 then
rate_lvl+=1
elseif s==60 then
spd_lvl+=1
elseif s==59 then
acc_lvl+=1
elseif s==58 then
pwr_lvl+=1
elseif s==57 then
size_lvl+=1
end
candy-=price
item[2][4]=true
sfx"52"
if item[1] != -1 then
add(items_sold,item[1])
end
else
a_item=nil
sfx"52"
music(-1,1000)
fadeout()
music"10"
save_game()
_upd=upd_game
_drw=drw_game
end
end
shop_items[1][2][4]=p_hp==max_hp
end
function drw_shop()
local x,y,w,h=28,20
y+=blink()
x-=(2-rnd"4"*shop_shake)
drw_stars()
drw_stats(x+30,y-6,52,66)
drw_items(x,y+62,80)
-- machine
local _x,_y=x-2,y+26
spr(206,_x,_y,2,4)
spr(206,_x+8,_y,2,4,true)
_x+=1
_y-=10
-- candy count
win(_x,_y,22,9,14)
spr(5,_x+2,_y+2,2,1)
print(digits2(candy),_x+13,_y+2)
end
function drw_stats(x,y,w,h)
local s=0
if shop_i<#shop_items then
s=shop_items[shop_i+1][2][3]
end
win(x,y-3,w,h,14)
x+=13
print("YOU",x,y,13)
y+=7
stats={
{"hp:"..p_hp.."/"..max_hp,63},
{"maxhp:"..max_hp,62},
{"move:"..acc_lvl,59}
}
for stt in all(stats) do
drw_stat(x,y,s,unpack(stt))
y+=6
end
y+=4
print("ATTACK",x,y,13)
y+=7
local stats={
{"size:"..size_lvl,57},
{"power:"..pwr_lvl,58},
{"rate:"..rate_lvl,61},
{"speed:"..spd_lvl,60}
}
for stt in all(stats) do
drw_stat(x,y,s,unpack(stt))
y+=6
end
end
function drw_stat(x,y,s,txt,ss)
local c=s==ss and 7 or 6
print(txt,x,y,c)
local pls=s==63 and "+5" or "+1"
if c==7 then
print(pls,x-9,y)
end
end
function drw_items(x,y,w)
for i=1,#shop_items do
local c=i-1==shop_i and 15 or 6
local bc=i-1==shop_i and 7 or 14
local item=shop_items[i]
local txt,price,s,sold=unpack(item[2])
win(x-2,y-3,w+4,12,bc)
spr(s,x,y-1)
print(txt,x+10,y+1,c)
local txt=sold and "out" or "buy"
print(txt,x+w-12,y+1,c)
if not sold then
c=i-1==shop_i and 15 or 14
spr(5,x+w-32,y+1,2,1)
print(digits2(price),x+w-22,y+1,c)
end
local s=item.s
s=63
local _x=x+26
y+=13
end
local c=2==shop_i and 15 or 6
local bc=2==shop_i and 7 or 14
x=x+w-18
win(x,y-2,19,9,bc)
print("exit",x+2,y,c)
end
function drw_txts(txts,y,c)
local lns=split(txts)
for txt in all(lns) do
x=hcntr(txt)
oprint8(txt,x,y,c)
y+=6
end
end
-->8
-- player
function p_ini()
crnr_size=v2:new(3,3)
p_of=v2:new(1,5)
p_size=v2:new(4,4)
p_d=v2zero()
p_dsh=v2zero()
end
function p_interact()
local col_v=p_v+p_of
if point_vs_map(col_v,2) then
a_room=check_interact(rooms)
if a_room then start_room() end
end
-- exit room
if point_vs_map(col_v,3) then
local cx,
cy,
exit,
go_back=col_v.x\8,
col_v.y\8,
a_room[2][6],true
if exit then
exit=split2d(exit)
for itm in all(exit) do
local x1,y1,x2,y2=unpack(itm)
if x1 == cx and y1 == cy then
p_v=v2:new(x2*8,y2*8+4)
go_back=false
if x2<0 then
p_v.y-=2
music(-1,1000)
add_wind(
12,
12,
105,
#final_msg*7+6,
final_msg
)
end
end
end
end
if go_back then
p_v=old_p_v
end
p_d=v2zero()
p_dsh=v2zero()
a_room=nil
a_map=overworld
do_map(true)
spwn_things()
-- if the char is going back
-- to the overworld where
-- they came from
-- don't respawn the baddies
-- but use the old ones
if go_back then
baddies=world_baddies
end
fadeout()
end
if btnp(❎) then
if a_msg then
a_msg.dur=15
a_msg.onend=save_unlock
a_msg=nil
sfx"60"
else
local txt=check_interact(texts)
if txt then
talk(txt[2])
sfx"61"
return
end
a_item=check_interact(items)
if a_item then return start_shop() end
end
end
end
function check_interact(arr)
local x,y=(p_v.x+4)\8,(p_v.y+4)\8
local o=get_interact(x,y,arr)
if o then return o end
for i=1,8 do
local _x=x+dirx[i]
local _y=y+diry[i]
o=get_interact(_x,_y,arr)
if o then return o end
end
end
function p_mov()
local is_dsh=p_dsh:mag()>0
local n=v2zero()
local ix,
iy,
acc,
frc,
dsh_spd,
dsh_frc=0,0,.085,.815,1.2,0.95
local jp=sin(tim*3)*.04
if btn(➡️) then
ix+=1
p_fx=false
p_fy=false
end
if btn(⬅️) then
ix-=1
p_fx=true
p_fy=false
end
if btn(⬆️) then
iy-=1
p_fy=true
end
if btn(⬇️) then
iy+=1
p_fy=false
end
if ix*iy !=0 then
ix*=0.707
iy*=0.707
end
-- dash btn
if
btnp(🅾️) and
not is_dsh and
has_unlock"dash"
then
p_dsh.x+=ix*dsh_spd
p_dsh.y+=iy*dsh_spd
sfx"62"
end
p_d.x += ix*acc
p_d.y += iy*acc
p_d.x -= ix*jp
p_d.y -= iy*jp
if is_col_obj({
v=p_v,
size=p_size,
of=p_of
},baddies)
then
return start_battle()
end
local res=do_collisions(p_v,p_d,p_dsh,p_size,p_of)
p_v=res.v
p_v+=p_d+p_dsh
p_d*=frc
p_dsh*=dsh_frc
if abs(p_dsh.x)<.2 then p_dsh.x=0 end
if abs(p_dsh.y)<.2 then p_dsh.y=0 end
if abs(p_d.x)<.02 then p_d.x=0 end
if abs(p_d.y)<.02 then p_d.y=0 end
-- walk juice
if
p_d:mag() != 0 and
tim*100%1 == 0 and
p_dsh:mag() == 0
then
sfx"63"
spwn_dust(p_v.x,p_v.y)
end
-- dash juice
if
p_dsh:mag() > .5 and
flr(tim*20)%2==0
then
spwn_dash_dust(p_v.x,p_v.y,p_d.x,p_d.y)
end
end
function drw_player()
local s = p_fy and 3 or 2
local x,y=p_v.x,p_v.y
-- body
local bx,by,hx,hy=x,y,x,y
--candy
local cx,cy=bx+5,by+6
if p_fx then
cx=bx-1
bx+=2
hx-=1
end
local osc=cos(tim*3)
-- idle
if p_d:mag()==0 then
hy+=min(0,sin(tim*.9))+1.2
end
-- vertical movement
if
abs(p_d.y) > 0 and
p_d.x ==0
then
hy+=min(.2,osc)+1
end
-- horizontal movement
if abs(p_d.x) > 0 then
hy+=1
hx+=min(.2,osc)+1
end
local body={24,8,5,3,bx,by+7,5,3,p_fx}
local head={s,hx,hy,1,1,p_fx}
osspr(unpack(body))
ospr(unpack(head))
sspr(unpack(body))
sspr(40,8,3,4,cx,cy)
spr(unpack(head))
end
function do_collisions(v,d,dsh,size,of)
local w,h=size.x,size.y
local nx=v.x+d.x+dsh.x
local ny=v.y+d.y+dsh.y
local n=v2:new(nx,ny)
local col_n=n+of
local col_a=n+of-1
local col_b=n+of
col_b.y-=1
col_b.x+=2
local col_c=n+of+2
local col_d=n+of
col_d.y+=2
col_d.x-=1
-- if there is no collision then just return
if not is_solid(n,size,of) then return {v=v,d=d,dsh=dsh} end
local crnr=crrct_crnrs(
d,
col_a,col_b,col_c,col_d
)
if crnr > 0 then
v.x+=dirx[crnr]*.3
v.y+=diry[crnr]*.3
else
if is_solid(
v2:new(nx,v.y),
size,
of
) then
d.x *= 0
dsh.x *= -1
end
if is_solid(
v2:new(v.x,ny),
size,
of
) then
d.y *= 0
dsh.y *= -1
end
end
return {v=v,d=d,dsh=dsh}
end
function crrct_crnrs(
p_dir,a,b,c,d
)
local dx=p_dir.x
local dy=p_dir.y
local cols={}
local _a=is_solid(a,crnr_size)
local _b=is_solid(b,crnr_size)
local _c=is_solid(c,crnr_size)
local _d=is_solid(d,crnr_size)
add(cols,_a)
add(cols,_b)
add(cols,_c)
add(cols,_d)
local cnt=0
for c in all(cols) do
if c then cnt+=1 end
if cnt>1 then return 0 end
end
-- moving up
if dy < 0 then
if _a then return 2 end
if _b then return 1 end
end
-- moving right
if dx > 0 then
if _b then return 4 end
if _c then return 3 end
end
-- moving down
if dy > 0 then
if _c then return 1 end
if _d then return 2 end
end
-- moving left
if dx < 0 then
if _a then return 4 end
if _d then return 3 end
end
return 0
end
function dog_ini()
p_pos={}
dog_rate=0
dog_rate_t=0
dog_v=p_v
dog_f=false
end
function upd_dog()
if not has_unlock"dog" then return end
dog_rate_t=max(0,dog_rate_t-.1)
if
p_v != p_pos[#p_pos] and
dog_rate_t == 0
then
dog_rate_t=1
add(p_pos,p_v)
end
local a=dog_v
local b=p_pos[1]
if b then
local c=b-a
if c:mag() > 10 then
dog_f=b.x>a.x
dog_v+=c:norm()*0.5
if tim*100%20 == 0 then
spwn_dust(v.x+4,v.y-3)
end
else
del(p_pos,b)
end
end
end
function drw_dog()
if not has_unlock"dog" then return end
local s=get_frame({40,41})
local x,y=dog_v.x,dog_v.y+blink()
ospr(s,x,y,1,1,dog_f)
spr(s,x,y,1,1,dog_f)
end
function norm_p_pos(int)
local coords=int[1]
local x,y=get_coords(coords)
p_v=v2:new(x*8,((y)*8)+4)
p_d=v2zero()
p_dsh=v2zero()
end
-->8
-- npcs
function npc_add(x,y,typ,fx)
if has_unlock(nil,convert_coords(x,y)) then return end
local faces=split"48,49,50,53,27,28,29,30,7,8,23,24,121,122,126,56,55,40,20,90,9,10,240,241,242,243,249,246,247,248,244"
local bodies=split2d[[
24|24|6|4
%24|28|6|4
%32|24|6|4
%32|28|6|4
%80|8|6|4
%80|12|6|4
%24|24|6|4
%32|24|6|4
%56|16|5|5
%56|16|5|5
%56|16|5|5
%56|16|5|5
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
%100|32|1|1
]]
local npc={
v=v2:new(x,y),
fx=fx,
face=faces[typ],
body=bodies[typ],
t=rnd()*10,
typ=typ
}
local coords=convert_coords(x,y)
add(npcs_i,coords)
npcs[coords]=npc
end
function drw_npcs()
for i in all(npcs_i) do
local n=npcs[i]
local v,
face,
body,
typ,
t,
fx=n.v*8,
n.face,
n.body,
n.typ,
n.t,
n.fx
local x,y=v.x,v.y
local sx,sy,sw,sh=unpack(body)
local hy=y
if typ<13 then
hy+=min(0,sin((tim+t)*.8))+1.2
end
osspr(sx,sy,sw,sh,x+1,y+7,sw,sh,fx)
ospr(face,x,hy,1,1,fx)
sspr(sx,sy,sw,sh,x+1,y+7,sw,sh,fx)
spr(face,x,hy,1,1,fx)
end
end
-->8
-- baddies
function add_spwn_point(
x,
y,
typ,
locs,
prob
)
local point = {
x=x,
y=y,
typ=split(typ,"◆"),
locs=split(locs,"◆"),
prob=prob
}
add(spwn_points,point)
return point
end
function check_spwn_baddies()
local mapx,mapy=mapv.x,mapv.y
baddies={}
for pnt in all(spwn_points) do
local x,y,typ=pnt.x,pnt.y,pnt.typ
local locs,prob=pnt.locs,pnt.prob
local inside=point_box(
x,y,mapx,mapy,mapx+16,mapy+16
)
if inside then
for loc in all(locs) do
if rnd() < prob then
if loc == 0 then
spwn_baddie(x*8,y*8,rnd(typ))
else
local _x,_y=x+dirx[loc],y+diry[loc]
spwn_baddie(_x*8,_y*8,rnd(typ))
end
end
end
end
end
end
function spwn_baddie(x,y,typ,mn,mx)
local faces=split"17,1,35,36,16,23"
local bodies=split"32,22,34,37,54,22"
local smlls=split"11,13,14,15,12,253"
local names=split"cHUBS,kUNKY,gUPSY,lUISA,sPOOP,bOSS"
local candies=split"2,2,2,2,2,3"
-- rate in which the big
-- baddies spwn drones
local rates=split".006,.005,.008,.007,.006,.008"
-- ammount of drones a big
-- baddie can spwn
local counts=split"2,2,2,2,2,2"
local mxhp=baddies_hp_lvls[typ][hard]
local b={
v=v2:new(x,y),
d=v2zero(),
dsh=v2zero(),
of=v2:new(1,6),
size=v2:new(4,4),
fx=rnd()>0.5,
face=faces[typ],
body=bodies[typ],
upd=upd_baddie,
wait=0,
stuck=0,
trgt=v2:new(x,y),
t=rnd()*10,
r=30,
big=drw_bigs[typ],
smll=smlls[typ],
hp=mxhp,
mxhp=mxhp,
typ=typ,
name=names[typ],
flsh=0,
rate=rates[typ],
rate_t=0,
cnt=counts[typ],
candy=candies[typ]
}
add(baddies,b)
return b
end
function upd_baddies(b)
sort(baddies,
function(a,b)
return a.v.y>b.v.y
end
)
for b in all(baddies) do
b:upd()
end
end
function upd_baddie(bad)
-- b.v+=0.1
local v=bad.v
local of=bad.of
local a=v+of
local b=p_v+4
local d=bad.d
local size=bad.size
local n=v2:new(nx,ny)
local spd=0.32
local mt=(bad.trgt-v):mag()
local mp=(a-b):mag()
local dsh=bad.dsh
if mp > bad.r then
if mt < 1 then
if bad.wait == 0 then
bad.trgt=get_rnd_trgt(v,32)
bad.wait=30+rnd"150"
else
bad.wait=max(0,bad.wait-1)
spd=0
end
bad.stuck=0
else
if bad.stuck == 120 then
bad.trgt=get_rnd_trgt(v,8)
bad.stuck=0
bad.wait=30+rnd"150"
else
bad.stuck=min(120,bad.stuck+1)
end
end
else
bad.trgt=p_v
bad.wait=0
bad.stuck=0
end
d+=(bad.trgt-v):norm()*0.09
d.x=mid(-spd,d.x,spd)
d.y=mid(-spd,d.y,spd)
local col_bad=is_col_obj(bad,baddies)
if col_bad then
dsh=(v-col_bad.v):norm()*0.5
d*=0
-- return
end
if is_solid(
v2:new(v.x+d.x+dsh.x,v.y),
size,of
)then
d.x*=0
dsh.x*=0
end
if is_solid(
v2:new(v.x,v.y+d.y+dsh.y),
size,of
) then
d.y*=0
dsh.y*=0
end
bad.v+=d+dsh
bad.d=d*0.9
bad.dsh=dsh*0.9
bad.fx=bad.trgt.x < bad.v.x
end
function get_rnd_trgt(v,r)
local solid=true
local _v=v2zero()
local mapx,mapy=mapv.x*8,mapv.y*8
while solid do
local ang=rnd()
local _x=v.x+sin(ang)*r
local _y=v.y+cos(ang)*r
_x=mid(mapx+8,_x,mapx+112)
_y=mid(mapy+8,_y,mapy+112)
_v=v2:new(_x,_y)
solid=point_vs_map(_v,0)
end
return _v
end
function drw_baddies()
for b in all(baddies) do
local x,
y,
w,
h,
fx,
face,
body=b.v.x,
b.v.y,
b.size.x,
b.size.y,
b.fx,
b.face,
b.body
local hy,by=y+blink(),y+6
-- no te escucho
ospr(body,x,by,1,1,fx)
ospr(face,x,hy,1,1,fx)
spr(body,x,by,1,1,fx)
spr(face,x,hy,1,1,fx)
end
end
-->8
-- battle
function start_battle()
bg_ani=split"42,43,44,45,46,47"
wind={}
drones,
bullets,
battle_candy,
ship_v,
ship_d,
ship_rate,
ship_rate_t,
ship_t,
ship_flsh,
a_msg={},
{},
0,
v2:new(61,118),
v2zero(),
rate_lvls[rate_lvl],
0,
0,
0
get_battle_baddies()
music(63,300)
_upd,_drw=upd_battle,drw_battle
fadeout(true)
music()
end
function upd_battle()
ship_mov()
do_bullets()
upd_big_baddies()
upd_drones()
doge_y=battle_x+battle_w-4
doge_x=lerp(
battle_x+1,
doge_y
,(sin(tim/20)+1)/2
)
if not has_unlock"dog" then
doge_x=-2
elseif tim*100%10 == 0 and
rnd() > .5
then
fire_bullet(
doge_x+2,
doge_y+10,
1,
0,
.6
)
end
if p_hp == 0 then
start_gover()
end
for bad in all(battle_baddies) do
if bad.hp>0 then return end
end
for bad in all(battle_baddies) do
battle_candy+=bad.candy
del(baddies,bad)
end
-- end battle
talk(split"yOU SCARED OFF THE,GHOSTS!,tHEY DROPPED SOME CANDY")
candy+=battle_candy
bullets={}
music"17"
a_msg.butt=false
a_msg.onend=function()
a_msg=nil
_upd=upd_game
_drw=drw_game
fadeout(true)
music(10,100)
end
tscreen=1
_upd=upd_post_battle
end
function upd_post_battle()
tscreen=max(0,tscreen-.015)
if tscreen != 0 then return end
a_msg.butt=true
if btnp(❎) then
a_msg.dur=0
sfx"60"
end
end
function drw_battle()
cls()
drw_big_baddies()
local x,y,w=ship_v.x,ship_v.y,50
hp_bar(64-w/2,126,w,p_hp,max_hp,7)
win(battle_x,battle_y,battle_w,battle_h,14)
clip(battle_x+1,battle_y+1,battle_w-2,battle_h-2)
drw_parts()
drw_bullets()
drw_drones()
spr(25,doge_x,battle_y+battle_h-6)
if ship_t>0 then
pal(5,7)
end
if ship_flsh>0 then all_col"7" end
spr(31,x,y)
pal()
if battle_candy > 0 then
clip()
local x,y=ship_v.x-6,ship_v.y-16
spr(5,x+3,y,2,1)
print(
digits2(candy-battle_candy),
x+14,
y,
14
)
print(
"+"..digits2(battle_candy),
x+10,
y+8,
14
)
end
end
function get_battle_baddies()
battle_baddies={}
for bad in all(baddies) do
if
(bad.v-p_v):mag()<30 and
#battle_baddies < 5
then
add(battle_baddies,bad)
end
end
end
function ship_mov()
local ix,iy,spd,frcc=0,0,1,.9
local acc=acc_lvls[acc_lvl]
ship_t=max(0,ship_t-.5)
ship_flsh=max(0,ship_flsh-.06)
if btn(➡️) then ix+=1 end
if btn(⬅️) then ix-=1 end
if btn(⬇️) then iy+=1 end
if btn(⬆️) then iy-=1 end
if
btn(❎) and
ship_rate_t == 0
then
-- start_game()
ship_rate_t=1
ship_t=3
fire_bullet(
ship_v.x+3,
ship_v.y-2,
1,size_lvls[size_lvl],
spd_lvls[spd_lvl]
)
end
if ix*iy != 0 then
ix*=0.707
iy*=0.707
end
ship_d.x+=ix*acc
ship_d.y+=iy*acc
ship_d.x=mid(-spd,ship_d.x,spd)
ship_d.y=mid(-spd,ship_d.y,spd)
if
ship_v.x+ship_d.x<battle_x or
ship_v.x+ship_d.x+6>battle_x+battle_w
then
ship_d.x*=-1
end
if
ship_v.y+ship_d.y<battle_y or
ship_v.y+ship_d.y+4>battle_y+battle_h
then
ship_d.y*=-1
end
ship_v+=ship_d
ship_d*=frcc
ship_rate_t=max(0,ship_rate_t-ship_rate)
end
function fire_bullet(x,y,typ,r,spd)
local ts={3,0}
local ds={-1,1}
local b = {
v=v2:new(x,y),
r=r,
typ=typ,
spd=spd,
d=ds[typ],
t=ts[typ]
}
sfx"57"
add(bullets,b)
return b
end
function do_bullets()
for b in all(bullets) do
b.v.y+=b.d*b.spd
b.t=max(0,b.t-0.2)
-- player bullets
if b.typ == 1 then
for drone in all(drones) do
local _c=(drone.v+2)-b.v
if
_c:mag()<4+size_lvls[size_lvl]
and
drone.v.y>battle_y
then
sfx"56"
if drone.flsh == 0 then
drone.hp=max(0,drone.hp-pwr_lvls[pwr_lvl])
drone.flsh+=1
end
if drone.hp == 0 then
local bad=drone.bad
bad.hp=max(0,bad.hp-1)
bad.flsh+=1
explode(drone.v)
del(drones,drone)
sfx"55"
end
del(bullets,b)
end
end
end
-- baddies bullets
if b.typ == 2 then
local of=v2:new(3,2)
local c=b.v-(ship_v+of)
if ship_flsh == 0 then
if c:mag() < b.r + 2 then
p_hp=max(0,p_hp-1)
ship_flsh+=1
sfx"54"
del(bullets,b)
return
end
end
end
if
b.v.y+b.r<battle_y or
b.v.y-b.r>battle_y+battle_h
then
del(bullets,b)
end
end
end
function drw_bullets()
for b in all(bullets) do
local c=b.typ == 1 and 14 or 6
local x,y,t=b.v.x,b.v.y,b.t
if t>0 then
local r=b.r+3
r-=3-t
circfill(x,y+2,r,14)
end
circ(x,y,b.r,c)
end
end
function spwn_drone(x,y,bad)
local rates=split".008,.02,.015,.02,.009,.02"
local spds=split"1,1,1,1,1,1"
local typ=bad.typ
local drone={
v=v2:new(x,y),
bad=bad,
spd=spds[typ],
flsh=0,
rate=rates[typ],
rate_t=0,
t=rnd(),
hp=drones_hp_lvls[typ][hard]
}
add(drones,drone)
return drone
end
function upd_drones()
for drone in all(drones) do
drone.rate_t=max(0,drone.rate_t-drone.rate)
drone.flsh=max(0,drone.flsh-.06)
local typ=drone.bad.typ
drone.v.x+=get_battle_dx(typ)*drone.spd
drone.v.y+=get_battle_dy(typ)*drone.spd
if drone.rate_t == 0 then
drone.rate_t=1
fire_bullet(
drone.v.x+3,
drone.v.y+4,
2,
1,
.5
)
end
if
drone.v.y>141 or
drone.v.x>115 or
drone.v.x<5
then
del(drones,drone)
end
if drone.bad.hp==0 then
explode(drone.v)
del(drones,drone)
end
end
end
function drw_drones()
for drone in all(drones) do
local s=drone.bad.smll
if drone.flsh > 0 then all_col"7" end
spr(s,drone.v.x,drone.v.y)
pal()
end
end
function upd_big_baddies()
for bttl in all(battle_baddies) do
bttl.rate_t=max(0,bttl.rate_t-bttl.rate)
if bttl.hp > 0 then
bttl.flsh=max(0,bttl.flsh-.06)
if bttl.rate_t==0 then
local typ=bttl.typ
local x,y=get_battle_x(typ),get_battle_y(typ)
bttl.rate_t=1
for i=1,rnd(bttl.cnt)+1 do
spwn_drone(x+i*6,y,bttl)
end
end
end
end
end
function drw_big_baddies()
clip(0,17,128,57,0)
bg02(bg_ani[flr(tim*10%#bg_ani+1)])
clip()
line(0,15,128,15,5)
line(0,75,128,75,5)
local bigx=split"64,38,90,14,114"
for i=#battle_baddies,1,-1 do
local b=battle_baddies[i]
if b.hp > 0 then
local x=bigx[i]
local y=35+sin(tim+b.t)*2+.1
if b.flsh > 0 then all_col"7" end
local sx,sy,sw,sh,dx=unpack(b.big)
sspr(sx,sy,sw,sh,x+dx,y)
if b.typ > 4 then
sspr(sx,sy,sw,sh,x+dx+sw,y,sw,sh,true)
end
pal()
x-=11
y=2
local w,h=23,10
rectfill(x+1,y+1,x+w-2,y+h-2,15)
win(x,y,w,h,14)
print(b.name,x+2,y+2,5)
local x+=1
local y+=1+h
hp_bar(x,y,w-3,b.hp,b.mxhp,14)
end
end
end
function get_battle_x(typ)
if typ==2 then
-- ◆…➡️
return 11
elseif typ==3 then
-- ⬅️…◆
return 101
-- elseif typ==5 then
-- return rnd(split"22,35,67,83")
end
return rnd(split"22,35,67,83")
end
function get_battle_y(typ)
if typ==2 or typ==3 then
return rnd({86,96})
end
return 70
end
function get_battle_dx(typ)
if typ==1 then
return wave
elseif typ==2 then
return .1+wave
elseif typ==3 then
return -.1-wave
elseif typ==4 then
return 0
elseif typ==5 then
return wave
elseif typ==6 then
return coswave
end
end
function get_battle_dy(typ)
if typ==1 then
return .08
elseif typ==2 then
return sin(tim)*.5
elseif typ==3 then
return coswave
elseif typ==4 then
return sin(tim)*.3+.05
elseif typ==5 then
return coswave+.08
elseif typ==6 then
return wave+.08
end
end
-->8
-- interacts
function add_room(x,y,room)
local coords=convert_coords(x,y)
local r={}
for i in all(split(room,">"))do
add(r,i)
end
rooms[coords]={coords,r}
end
function add_interact(x,y,item,arr)
local i=convert_coords(x,y)
if has_unlock(nil,i) then return end
arr[i]={i,split(item,"◆")}
end
function get_interact(x,y,arr)
return arr[convert_coords(x,y)]
end
function spwn_marker(x,y)
add(markers,v2:new(x,y))
end
function do_markers()
for v in all(markers) do
local c=(p_v+4)-(v+4)
if c:magsmll() <= 13 then
spr(112,v.x+1,v.y-5+blink())
end
end
end
function get_coords(num)
return num%128,num\128
end
function convert_coords(x,y)
return x+y*128
end
function save_unlock()
local unlock=check_interact(locks)
if not unlock then return end
local pos,obj=unpack(unlock)
local id,msg,require=unpack(obj)
if has_unlock(id) then return end
if
require and
not has_unlock(require)
then
return
end
-- local x,y=get_coords(pos)
-- explode(v2:new(x*8,y*8))
talk({msg})
sfx"52"
add(unlocks,pos)
hard+=1
save_game()
spwn_things(true)
return true
end
function has_unlock(id,coord)
for unlock in all(unlocks)do
local _id=unpack(locks[unlock][2])
if
_id==id
then
return true
end
if unlock == coord then
return true
end
end
end
-->8
-- collisions
function is_solid(v,size,of)
local of=of or v2zero()
if box_box_alt(
v,v+size,
mapmin,
mapmax
) then
return true
end
-- ★ 4 tokens
if god then
return
end
if box_vs_map(v,size,of,0) then return true end
if box_vs_map(v,size,of,-1) then return true end
if not has_unlock"water" then
if box_vs_map(v,size,of,6) then return true end
end
if not has_unlock"fence" then
if box_vs_map(v,size,of,7) then return true end
end
end
function is_col_obj(o,arr)
local v,size,of=o.v,o.size,o.of
local a1,a2=v+of,v+of+size
for i in all(arr) do
local b1,b2=i.v+i.of,i.v+i.of+i.size
if i != o then
if box_box(a1,a2,b1,b2) then
return i
end
end
end
end
function box_vs_map(v,size,of,f)
local v=v+of
local a,b,c,d=v,
v+size,
v2:new(v.x+size.x,v.y),
v2:new(v.x,v.y+size.y)
local func=f==-1 and point_vs_npc or point_vs_map
if func(a,f) then return a end
if func(b,f) then return b end
if func(c,f) then return c end
if func(d,f) then return d end
end
function point_vs_map(v,f)
local v=v+0
local celx,cely,sx,sy=unpack(a_map)
v.x-=sx
v.y-=sy
local mx=flr(v.x/8)
local my=flr(v.y/8)
mx+=celx
my+=cely
return fget(mget(mx,my),f)
end
function point_vs_npc(v)
return get_interact(flr(v.x/8),flr(v.y/8),npcs)
end
function box_box (a1,a2,b1,b2)
return a1.x < b2.x and
a2.x > b1.x and
a1.y < b2.y and
a2.y > b1.y
end
function box_box_alt(a1,a2,b1,b2)
return a1.x<b1.x or
a2.x>b2.x or
a1.y<b1.y or
a2.y>b2.y
end
function point_box(x,y,x1,y1,x2,y2)
return x>x1 and x<x2 and y>y1 and y<y2
end
-->8
--tools
function oprint8(_t,_x,_y,_c)
for i=1,8 do
print(_t,_x+dirx[i],_y+diry[i],0)
end
print(_t,_x,_y,_c)
end
function blink()
return flr(min(0,sin(tim)))
end
function all_col(col)
for i=0,15 do
pal(i,col)
end
end
function ospr(s,x,y,w,h,fx,fy)
-- all colors to outline
all_col"0"
for i=1,4 do
spr(s,x+dirx[i],y+diry[i],w,h,fx,fy)
end
pal()
end
function osspr(sx,sy,sw,sh,dx,dy,dw,dh,fx,fy)
-- all colors to outline
all_col"0"
-- draw outline
for i=1,4 do
sspr(sx,sy,sw,sh,dx+dirx[i],dy+diry[i],dw,dh,fx,fy)
end
pal()
end
function sort(a,cmp)
for i=1,#a do
local j=i
while j>1 and cmp(a[j-1],a[j]) do
a[j],a[j-1]=a[j-1],a[j]
j-=j
end
end
end
function lerp(a,b,t)
return a*(1-t)+b*t
end
function bg02(s)
local spd,a,b=20,21,13
local sx,sy=flr(s%16)*8,flr(s/16)*8
local t=tim*spd
local go=sin((t%100)/100)
for y=0,128 do
local lo=sin(((t+y)%100)/100)
for x=0,128,8 do
local _sy=sy+(y+go*a+lo*b*sin(tim/2)-.2)%8
sspr(sx,_sy,8,1,x,y)
end
end
end
function digits2(n)
return n<10 and "0"..n or n
end
function star(x,y,t)
local osc=sin(t*tim/1.5+.3)*2.5
line(
x-.5+osc/2,
y,
x+1.5-osc/2,
y,
5
)
line(
x,
y-1.5+osc,
x,
y+2.5-osc,
5
)
end
function hcntr(s)
return 64-#s*2
end
function get_frame(ani)
return ani[flr(tim*100/15)%#ani+1]
end
function split2d(s)
if not s then return end
local arr=split(s,"%")
for i=1,#arr do
arr[i]=split(arr[i],"|")
end
return arr
end
-->8
-- vector2
v2={}
function v2zero()
return v2:new()
end
function v2:new(x,y)
v={}
v.x=x or 0
v.y=y or 0
setmetatable(v,self)
self.__index=self
return v
end
function v2.__add(a,b)
if type(b) == "number" then
return v2:new(a.x+b,a.y+b)
end
return v2:new(a.x+b.x,a.y+b.y)
end
function v2.__sub(a, b)
if type(b) == "number" then
return v2:new(a.x-b,a.y-b)
end
return v2:new(a.x-b.x,a.y-b.y)
end
function v2.__mul(a, b)
if type(a) == "number" then
return v2:new(b.x*a,b.y*a)
elseif type(b) == "number" then
return v2:new(a.x*b,a.y*b)
end
return a.x * b.x + a.y * b.y
end
function v2.__div(a,b)
if type(a) == "number" then
return v2:new(b.x/a,b.y/a)
elseif type(b) == "number" then
return v2:new(a.x/b,a.y/b)
end
end
function v2.__eq(a,b)
return a.x==b.x and a.y==b.y
end
--https://www.lexaloffle.com/bbs/?pid=38407
function v2:magsmll()
local nx=self.x*0x0.01
local ny=self.y*0x0.01
return sqrt(nx*nx+ny*ny)*0x100
end
function v2:mag()
return sqrt(self.x*self.x+self.y*self.y)
end
function v2:norm()
return self/self:mag()
end
-->8
-- juice
function spwn_part(
x,
y,
dx,
dy,
mage,
carr,
rarr
)
local p = {
x=x,
y=y,
dx=dx,
dy=dy,
age=0,
mage=mage,
c=carr[1],
carr=carr,
r=rarr[1],
rarr=rarr,
}
add(parts,p)
return p
end
function do_parts()
for part in all(parts) do
part.age+=1
part.x+=part.dx
part.y+=part.dy
if #part.carr == 1 then
part.c=part.carr[1]
else
local ci=part.age/part.mage
ci=1+flr(ci*#part.carr)
part.c=part.carr[ci]
end
if #part.rarr == 1 then
part.r=part.rarr[1]
else
local ri=part.age/part.mage
ri=1+flr(ri*#part.rarr)
part.r=part.rarr[ri]
end
if part.age > part.mage then
del(parts,part)
end
end
end
function drw_parts()
for part in all(parts) do
circfill(part.x,part.y,part.r,part.c)
end
end
--★
function spwn_dust(x,y)
local ang=rnd()
local _x,_y=x+6+sin(ang),y+9
if not p_fx then _x-=5 end
spwn_part(
_x,_y,
0,0,
30,
split"6,6,13",
split"1,0"
)
end
function spwn_dash_dust(x,y,dx,dy)
local rarr={rnd(split"1,1,1,2"),1}
local carr=split"15,14,14,14,5"
local ang=rnd()
local _x=x+4+sin(ang)*3
local _y=y+6+cos(ang)*2
spwn_part(
_x,_y,dx*.2,dy*.2,
40,carr,rarr
)
end
function explode(v)
local rarr=split"3,2,1,1,0"
local carr=split"7,15,14,13"
for i=1,3 do
local x,y=v.x+1,v.y
local ang=rnd()
x+=sin(ang)*.2
y+=cos(ang)*.2
spwn_part(
x,
y,
0,
-rnd()*.5,
40,
carr,
rarr
)
end
end
function dofade()
local t=fadeperc
local c=0
local w=16
for i=0,8 do
for j=0,8 do
local x=i*w
local osc1=sin(t+i*0.1)
local osc2=sin(t+j*0.03)
local y=j*w+osc1*w
local r=osc2*w
local _x=fadedir and x or y
local _y=fadedir and y or x
circfill(_x,_y,r,c)
if r>4 and fadedir then
circ(_x,_y,r-3,5)
circfill(_x,_y,r/2-3,14)
end
end
end
end
function fadein(spd)
if fadeperc>0 then
fadeperc=max(fadeperc-fadespd,0)
dofade()
end
end
-- ★ 3 tokens
function fadeout(_dir)
fadedir=_dir
fadespd=_dir and.0058 or .009
camera()
fadeperc=1
local lmt=.6
repeat
fadeperc=max(fadeperc-fadespd,lmt)
dofade()
flip()
until fadeperc==lmt
fadeperc=lmt
end
-->8
-- ui
function hp_bar(x,y,w,hp,mxhp,c)
local x1=x
local x2=x1+(hp*w/mxhp)
line(x1,y,x1+w,y,5)
line(x1,y,x2,y,c)
end
function win(x,y,w,h,c)
line(x+1,y,x+w-2,y,c)--top
line(x+w-1,y+1,x+w-1,y+h-2,c)--right
line(x+w-2,y+h-1,x+1,y+h-1,c)--bottom
line(x,y+1,x,y+h-2,c)--left
end
function add_wind(x,y,w,h,txt)
local w={
x=x,
y=y,
w=w,
h=h,
txt=txt
}
add(wind,w)
return w
end
function drw_wind()
for w in all(wind) do
local wx,wy,ww,wh=w.x,w.y,w.w,w.h
rectfill(wx+1,wy+1,wx+ww-2,wy+wh-2,0)
win(wx,wy,ww,wh,14)
clip(wx,wy,ww-2,wh-2)
wy+=4
wx+=4
for i=1,#w.txt do
local txt=w.txt[i]
print(txt,wx+4,wy,14)
wy+=6
end
clip()
if w.dur == nil and w.butt then
oprint8("❎",wx+ww-15,wy+1+blink(),14)
end
end
end
function upd_wind()
for w in all(wind) do
if w.dur!=nil then
w.dur-=1
if w.dur<=0 then
local dif=w.h/4
w.y+=dif/2
w.h-=dif
if w.h<3 then
if w.onend then
w.onend()
end
del(wind,w)
end
end
end
end
end
-- ★ 34
function show_msg(txt,dur)
local wid=(#txt+2)*4+7
local w=add_wind(
63-wid/2,
50,
wid,
13,
{txt}
)
w.dur=dur
end
function talk(txt,y)
if not txt then return end
local y=y or 50
a_msg=add_wind(
12,
y,
105,
#txt*7+6,
txt
)
a_msg.butt=true
end
function start_stars()
stars={}
for i=1,25 do
add(stars,{flr(rnd"128"),flr(rnd"128"),rnd()})
end
end
function drw_stars()
cls()
for s in all(stars) do
star(unpack(s))
end
end
-->8
-- big baddies
--function drw_creep(x,y)
-- sspr(94,96,10,25,x-5,y)
---- local ct = 4
---- --creep
---- for i=0,14 do
---- line(
---- x+1-ct-i*cos(i*.979),
---- y+i+8,
---- x+1+ct+i*cos(i*.979),
---- y+i+8,14
---- )
---- end
----
---- rectfill(x-2,y+18,x+5,y+26,14)
---- ovalfill(x-6,y-18,x-2,y-2,14)
---- ovalfill(x+5,y-18,x+9,y-2,14)
---- circfill(x,y-2,10,14)
---- circfill(x-5,y-3,7,7)
---- circfill(x,y-3,7,7)
---- circfill(x-3,y+3,5,7)
---- circfill(x-9,y-3,2,13)
---- circfill(x+2,y,2,13)
---- ovalfill(x-6,y,x-3,y+7,13)
---- rectfill(x-3,y+23,x,y+30,14)
---- rectfill(x+3,y+23,x+6,y+30,14)
---- rectfill(x+5,y+31,x+7,y+32,14)
---- circfill(x+1,y+25,1,6)
---- rectfill(x-1,y+31,x+1,y+32,14)
---- circfill(x-5,y+15,2,6)
---- circfill(x+3,y+15,2,6)
--end
--
--function drw_eye_guy(x,y)
-- sspr(66,96,15,21,x-6,y)
-- --eyeguy
---- circfill(x-1,y,15,14)
---- circfill(x-5,y-4,5,15)
---- circfill(x,y,7,13)
---- circfill(x,y,5,7)
---- circfill(x+1,y+1,2,13)
---- pset(x,y,7)
---- rectfill(x-9,y+12,x-5,y+18,14)
---- circfill(x-7,y+17,2,14)
---- rectfill(x-2,y+15,x+2,y+24,14)
---- circfill(x,y+23,2,14)
---- rectfill(x+5,y+12,x+9,y+20,14)
---- circfill(x+7,y+19,2,14)
--end
--
--function drw_chubbs(x,y)
-- sspr(31,96,16,22,x-7,y)
-- --body
---- circfill(x+12,y+13,4,6)
---- circfill(x+12,y+16,4,6)
---- circfill(x-2,y+18,10,13)
---- circfill(x+2,y+18,10,13)
---- rectfill(x-13,y+9,x+12,y+19,6)
---- circfill(x-13,y+14,4,6)
---- circfill(x-13,y+17,4,6)
---- circfill(x-5,y+29,2,13)
---- circfill(x+5,y+29,2,13)
---- rectfill(x-8,y+11,x-2,y+19,13)
---- circfill(x-5,y+17,2,15)
---- --head
---- circfill(x-2,y-1,12,6)
---- circfill(x+2,y-1,12,6)
---- ovalfill(x+10,y-7,x+14,y+5,7)
---- circfill(x-4,y-1,7,7)
---- circfill(x-4,y-1,4,13)
---- line(x+4,y+5,x+9,y+5,13)
---- circfill(x+5,y-14,2,6)
---- circfill(x-4,y-14,2,6)
--end
--
--function drw_ghost(x,y)
-- sspr(81,96,13,23,x-6,y)
-- --body
---- circfill(x,y,10,7)
---- circfill(x,y+7,10,7)
---- circfill(x,y+21,3,7)
---- circfill(x,y+18,3,7)
---- circfill(x-6,y+16,3,7)
---- circfill(x-6,y+13,3,7)
---- circfill(x+5,y+13,5,7)
---- circfill(x+7,y+18,2,7)
---- --face
---- ovalfill(x-8,y-1,x-2,y+1,13)
---- ovalfill(x+2,y-1,x+8,y+1,13)
---- pset(x-4,y,14)
---- pset(x+4,y,14)
---- line(x-5,y+4,x+4,y+4,13)
---- line(x-8,y+3,x-7,y+3,13)
---- line(x+6,y+3,x+7,y+3,13)
--end
--
--function drw_squid(x,y)
-- sspr(47,96,19,21,x-8,y)
---- local ct=3
---- --head
---- for i=0,12 do
---- line(x-ct-i,y-10+i,x+ct+i,y-10+i,6)
---- end
----
---- circfill(x-11,y+6,5,6)
---- circfill(x+11,y+6,5,6)
---- rectfill(x-13,y+3,x+13,y+18,6)
---- line(x-12,y+19,x+12,y+19,6)
---- rectfill(x-8,y+5,x+8,y+23,13)
---- ovalfill(x-11,y+3,x+11,y+12,13)
---- ovalfill(x-3,y+14,x+3,y+26,6)
---- circfill(x-5,y+8,3,7)
---- circfill(x+5,y+8,3,7)
---- ovalfill(x-8,y+10,x+8,y+16,14)
---- pset(x-5,y+8,13)
---- pset(x+5,y+8,13)
---- circfill(x+11,y-8,7,14)
---- circfill(x+11,y-8,4,7)
---- circfill(x+10,y-7,2,13)
---- circfill(x+2,y-9,2,14)
---- circfill(x+9,y+1,2,14)
---- circfill(x-5,y-2,2,14)
--end
--
__gfx__
000000000eeeee00000d0000000d0000000d00000e0eef0000000000000000000006770000ee70000077000006060000077000000eee0000006600000e0e0000
00000000eff55ee00e9e9e000e9e9e000e9e9e00e6e77ff00000000007700770007777707eeede00077770000776700077770000e777e000066660000d7d0000
00700700ef5775e09e9999e09e9e99e09e9999e000e77ff00000000000f77f0000677760eedeede00677600007d67000de7e0000e7dde00066ddd60007d70000
00077000ee57d5e09ed999d09e9999e09ed999d000ffff6ee00000000077770000657750deeddeee000e00776d6660007ddd0000e7dde000667d7600eeee0000
00077000eee55ee09e9dd9e09e9999e09e9559e0000ffe0e000000000075777700676760ddeeeee707e007776fddd000777700000eee000006eee6000ee00000
00700700eeeeeee09999e9e0e999e9e0999559e000000000000000000066775700d6d6d00ddeeffd777000660d0d0000707000000e0e000000d6d000e0e00000
000000000eeeee000eeeee000eeeee000eeeee00000000000000000000077566000ddd0000dd7dd06660000e0000000000000000000000000000000000000000
000000000e0e0e0000000000000000000000000000000000000000000000666000000000000dd0000e0000e00000000000000000000000000000000000000000
07777700007007000eeeee0000666000000000000d0000000e0e0e000000d0000f000f006560000007eee000000000000000000000000000777000000eeeee00
7777777006666600effeeee007777000000f777fd0d00000000e0e0000e9e9e000eee00077700000777e70000ddd0000055550000555550077777700e5e9e5e0
7777777067777670effffee0777660000000dd60eee00000000e00000e9999e9fefffef057500000e7777000dddddd005777755055555550777ee770e9e9e9e0
77de7ed067dd7670ee5555e000000000d00dddd00e000000000000000e5599550ef17e00707000007eeee000ddfff6f0555555005557777007e5ee50e9eee9e0
7777777067dd7670eee55ee006666600d6dd6dd600000000000000000e579957fef77ef00000000055d50000dff55f50667d7d005775757007eedde00eeeee00
77dddd7067777670eeeeeee077777700fdddd0dd00000000000000000e9dddd90deeed0000000000556560000dffddf0777666005777ee7007eeeee000000000
07777700066666000eeeee00000000000ffff0ff000000000000000000eeeee000ddd00000000000655500000df6fff00777770055777750007ee70000000000
00000000000000000e0e0e0000000000000000000000000000000000000000000000000000000000050500000000000000000000050000500000000000000000
06d6600006d6600000066000000000000000000000ee000000777700077700000607000000000000050050500500550005055055500050500050550505050555
66d6666606d666600066e600000000000e000e000eeee00000777700077770000777000006070000505555005005555000555500505505055000000550505005
66d666d666d6666666dddd60000000000e000e00ee6e6e0007777000077790007757000007770000005555500055555050550550005000500500500005055500
66fd660d66d666d666d7d7600ee000000e777700eeeeee0007777000779660005777700077577000055555550555055505500055550000050505550550555550
d6dddd0066fd660d06eeee00e77e000007777d000e6e000000777700666660006677770757777700505555550055555000550550005000505000500005055505
0ddddd00dddddd00066d6d00ed7e00000ed7d7000e0e000000077700000000000077777766777777005555505005550550055505500505055050000550505000
00d0d00000d0d000000d60000ee0000000e7d000e0e0000000007000000000000777767007777677505050005050550050505005005050000000505005500055
0000000000000000000000000e000000000000000000000000000000000000000767677007767670505005050050050550550050500505050505505550505050
000e0e000000000000000000f888000077e700000000000077777700000000000055550000dff00000fff00000dfd000ddd00000066660000fefefe066660000
0eeeee0005555500005555007fff7000e777e00000777700777777007600000057eeee750d6df6000ff770000ddded00e7e000006dddd6000667770006ff6660
eeeeeef055555550585555500ddd0000066600000677776077777700d7760000e775577e0d6dd600ff777e000deddd006e7600006777e600667e7e000677ff66
fe77777055666660555eeee00606000008080000065577500777770007d70076570000750d6dd600f77e77006dddddf00e7e00006e77760077eee70006ee776f
f7767670656566505ee5e5e0eeee000077676000077755700707700007d77777575005750dfdd600dd777e7066ddd66006e760006ee776007e77660006efee66
e77ee770066886605eee8ee06eee60007666670007777770000700000776d55dee7557ee0ddddd0000dd77700666ff0000e7e00067ee760077e6660006eeee60
077777000666660055eeee00055500000dddd00000777700000000007ddd00005e5005e5000e00000000dd7000000000006e76006dddd600efefef0000666600
000000000000000050000000070700000e00e000000000000000000055000000eee77eee000f000000000070000000000006dd00066660000000000000000000
055555555555555555555550fff55fff055555505eeeeeeeeeeeffeeefeeeee5000555555555555555555000000055555555000000005eeeeee500005ee5eeee
5efeeeefeeeefeeefffeefe5ff5ee5ff5eeeeff55eeeeefeeeeeeeeeeeeefee5005eeeeeeeeeeeeeeeeee50000005eeeeee5000000005eeeeee500005ee5eeee
5f55555555555555555555e5ff5fe5ff5feeeee55effeeeeeeeeeeeeeeeeeef505effefefeffeefefeeffe5000005eeeeee50000000055eeee5500005ee5eeee
5e5eeeeeeeeeeeeeeeeee5e5ff5ff5ff5eeeeee55eeeeeeeeefeeeefeeeeeee55eeeeeeeeeeeeeeeeeeeeee500005eeeeee50000000005555550000055555555
5eeeeeeeeeeeeeeeeeeeeee5ff5ef5ff5eeeeee55feefeeefeeefeeefeefeef55efefffeeffeeffefffefee50000555555550000000000000000000000000000
555555555555555555555555ff5ee5ff5555555555ff5fff5fff5fff5ff5ff555eeeeeeeeeeeeeeeeeeeeee500005eeeeee50000000000000000000000000000
5eeefeeeeeeeffeeeeeefee5ff5ee5ff5eeeeef55f55f555f555f555f55f55f55efffeefffeefeffefefefe500005eeeeee50000000000000000000000000000
5eeeeeeefeffeeefefeeefe5ff5555ff5feeeee55ffffffffffffffffffffff55eeeeeeeeeeeeeeeeeeeeee500005eeeeee50000000000000000000000000000
5ffffffffffffffffffffff5ffffffff00500500005ff500055555505555555500eeeeeeddddddddeeeeeeee0000000000555550000000000000555000000000
5ffffffffffffffffffffef55555555505f55f50505ee5055ffffff55eeeeee500efeeeeddddddddeeeeeeee0555000005000005055555000005555500000000
5ffffffffffffffffffffff55fefeee505e55e50055ef5505eeeeee55eeeeee50efeeeeeddddddddeeeeeeee0505005005055505050005000000555000000000
5ffffffffffffffffffffff55efefee55ffffff55e5ee5e55e7f77e55eeeeee50feeeeee55555555eeeeeeee0555000005050505050505000000000000000000
5ffffffffffffffffffffff55eefefe505d55d505e0ff0e55e777fe55ffffff50feeeeeedddddddd555555550000000005055505050005000555005555555555
5feffffffffffffffffffff55555555505e55e50505ee5005e7f77e55ffffef50feeeeeeddddddddeeeeeeee000555000500000505555500555550555eee5eee
5fffffeffffffffffffffff5ffffffff05e55e50005ee5055eeeeee55ffffff50efeeeeedddddddd55555555000505000055555000000055555550005eee5eee
5ffffffffffffffffffffff5ffffffff00500500050550055e5555e55555555500feeeee5555555555555555000555005000000000000055055500005eee5eee
5ffffffffffffffffffffff5e555555efffeffffeeeeee0005555500eeeeeeee5555e555ddddddddeeeeeeee00000e00000000e0550555550000000000000000
5fffffffff5555fffffffff55eeeefe5ffffffffeeeefe005feefe50eeeeeeee5efe5fefddddddddeeeeeeee0000ee000000e000000000000050000000000000
5ffffffff5efee5ffffffff55ed77de5ffffffffeeeeefe05e55ee50eeeeeeee5efe5fefdd5555dd5555555500000e000e000ee0555555050555000000000000
5ffffffff5eefe5ffffffff55edddde5ffffffffeeeeeef05eeeee50eeeeeeeefefe5eee55dddd555ddffff500000ee00e000e00555555550000000000000000
5ffffffff555555ffffffff55feeeee5ffffffffeeeeeef05ee5e5e5eeeeeeee5eee5eeedddddddd5dedfdd500000e0000ee0e00000000000000005000000000
5feffeeffffffffffeeeffe55eeee5d5feffefeeeeeeeef005eefee5eeeeeeee5efe5fefddd5dddd5fdffde500000e00000eee0e555555500000055500000000
5eeeeeeeeeeeeeeeeeeeeee55eefeee5eeeeeeeeeeeeefe005eeee50eeeeeeee5efe5fefdddddddd5555555500005e5000000e0e555055550005000000000000
055555555555555555555550e555555e55555555eeeeef0005555550eeeeeeee5555e55555555555eeeeeeee0000555000000eee000000000055500000000000
055500000555555000000000055555505fe5500000055ef5f555555fdddddddd0eeeeee000000000f00000005e5005e50055550000000000fddddddffeeeeeff
577750005efeefe5000000005effffe55555e550055e55555eeeeee5dddddddd0eeeeee000000000f0ffff005e5055e505ffff5005050000fffffffffef77eff
057500005effffe5000bb0005f6767f55eeef5e55e5feee55fefefe5df8888fd00000000effffffef00d00005f5005f55feffff505050505fedededffe7ffeff
005000005eeeeee500bbbb005ff676f5555555f55f5555555555555588ffff880eeeeee0effffffed0ffff005f5005e55ffffef500000505dedfdeddfef7feff
0000000055ffff55000bb0005eeeeee55effeef55feeffe55ffffff5ffffffff00000000feeeeeefdeedee005e5505f55effefe500000000dedededdfdddddff
000000005feffef50000000005555550555555555555555555555555fff8ffff0eeeeee0dddddddd0ddddd005f5005f55eeeeee500505000dffffffdffffffff
0000000005feef5000000000005ee5005fffffe55efffff55ffffff5ffffffff00000000dff55ffd0d000d005e5005f505dddd5000505000ddedededeeeeeeee
000000000555555000000000005ee5005d55d5d55d5d55d5555555558ffffff800000000500000050d000d00050050505055550500000000ddededed55555555
c5c5c50000e5b7c7b7e6c5d517000085560000c6d7e60055000000000000005575b6d50000d50000d7d500b40515151525062600000054343434000000849494
a4e5053416260000e500d500000000000000000000d500000000e5e5d5d5e5e500000055550000005500d75555e5005500f6f67676767676767676767676f600
000000000000868686c7e5c7c700008556c5d7b6d700d55517e500000000e51717000000c5c5c5d5b500e5b4063616f726e5000000c50667346700d500061616
26e50626f4e4e50000d5e50000e5d500e500e5d5e5e5000000000000e50000000000555500e500e55555d7d75500005500f676a587a5a5a5a5a5a5a5a5a57600
94a4000000000000e50000000000e6857676560000d7b50017b500c5c500b51717d6d6d617c5c517d6d6d6d6f4f4f4e4e500c500042445061626c5d6d6d60004
1424b7b7b7b7b74745454557b7b7b7b7b75555555555555555550000044424000055555555000055d700d70055d700550076a59595959696959696959695a500
647400d5000000e500c50000e500d78576767656d5c5d5d55517d6d6d6d6175555d7b500d5c5c5d5000000c5d700e500000000005474e5e5e500000000000434
3425c500d5c6c500e5e500d5e50000c5c5c50000e50000e555e555041444142455e55500e55555d7e5d7d70055e5d75500769596969595959695959696959500
9494a400000000000000000000d7857676867656b50424d50055d6d6d6d6550055c7c755c7c7d50000d7d700d565c5d7d70000e5052500c565000000e5000646
4626000000b6000000d5000000d5d5c565c500000000e555e500843434673434a400e555d7d700d7d70000e555d7005500767695959595969595959595959600
141414141447000000e6d7d70000e5857686041414642500b555b5c5c5b555454555d5000055000000c5c600868686d7c6c5e50006042400e500c5000000e555
5500d5000000005767676747e500e5c5c5c500c5c5c50055008434161636161634a40055d765e5e5d700d7d75500e5550076a595969595959596959596959600
67d6d6d636164700d7000000c5c50000d5860534163425b500550000000055d5655500d56504442400d7b6c5c5c5c5c5b600d700005474000000e50000c53717
55170000c60055949494949455d50000c500d5c500c50055c5344626c5c5c5064634c555d700d70000e5d7001700005500a69695959595959695959595a67600
67c5c5c5c58556e6d700d7d7e6d700d7c5473646654636000055000000005500d584a40000361625d700c5c5f5f5f5c5c5d70055550534245555551700c5c5c5
c5004500b6b7005754c57447c65500c600000000c5c50055b467d6d6c5c5c5d6d667c455d700d717555555170000005500a59596959595959595959595767600
94a4c5c5c5855600d7d7c7d70000d700c547f4f4f455f400005500b5000055d6d65474d500000067c5d7c5b4d5c6d5c4c5d7c500d7063436000000b700c5c5c5
00b54500e555d50434163424b65500b6d5d500000000e555d4f400b5d6d6d600e6f4e455d7e50055041424c5c5e5005500969595959596959595969595a5a500
64744766b7b716c7d7d7d7c7d7b58494a455d500d5550000d555d6d6d6d655d5c505340414240525c500c5b4d5b6d5c4c5d7c50000e544c5e500c70000c50017
551700c6c555c60525360525e5550000e500c5000000e55500e545454545454545e500550000175706361647c5e5005500959596959595959695959595959500
b736b7e5b700d7d7d7d7d7b5d7c7b7b5b755d5d50055d5c60055d6d6d6d65500d505253646260626c5d7c5b4d537d5c4c500c500000044e50000c50000000055
550000b600b7b60625d605260055c50000c50000d5000055550000e600e600e600000055d7b55517d6d6d617c5e5005500769696969595959595959596959600
b5b500c66600c6c7d7b5d7d7c555e5d7e50017b766d5c5b6c655650000005500c50525c50000d717e600c6c5f4f4f4c5c6b5c5c5d500b50000e500c600042455
5500c5000055e50067c56737c5b700e5c60000d500d500e600555500000000e600555555b5005557d6d6d647c500e55500a59696959595959595959596959500
00d7c6b667d7b6666600d700d7d7d700d7d7b765b75517c5b6550000b54455d6d605344700c500d700d7b6c5c5c5c5c5b600000000000000b50000b604646424
c7b7b700005500c6710071c5c545c5c5b6c5c5c5c5c5c500e600e6555555555555e60000454547c5c5c5c565c500005500959695959596959596959596959500
4700b60000b5d700c644c7d7c7d700d7d500c5d7e5c5c545c55500b5001655e50005154447e6000000c5000000e5000000c500e600c5008494a48556b7463646
b765b7b700b7e5b600c500c5c545c5c5e5c5c5c5c5c5c5008576560000e600000085765600e655e5e5d7e5d700c5c55500969595959595969595959595959600
6747d7000000c5d7b61655c755d7c7d700c500d700000045458555555555560000053404141424d6d6d6d6d6c5c5c5d6d6d6d6d6d6849464647400e5b5e5d6e5
e5c5b517c60055b75555b75555c5000000000000000000e6000000e600857656e600d7857656550000d70000c5c5c5550096779596959595959695969595f600
6767470000c5c5c500e5005500c55500d7e584a455e50000b5857676767656b5000646671646b7000000e600c717c7e6000000e600064667462600b500e5e5e5
00b50017b600000000c500000000c500d5000000000000000000855600d7000000d7000000554755555555555555551700f687f6f6f6f6f6f6f6f6f6f6f6f600
0e0e00e00000000000000000000000000000066006600000eee000000000000000000eeeee0000000e0000e00007777000000000000000000077777777777777
ee0ee0ee000ee00000e0000000000000000006600660000e777e006660000000000eeeeeeeee0000ee000ee00077777000000000000009e90700000000000000
ee0e00e0e0ee000000ee000000000000000666666666000e7dde66666660000000eeffffeeeee000ee000ee00777777000000000009e99e9700eeeeeeeeeeeee
ee00e0e0e0eee00000ee000000000000006677776666700e7ddee666666600000eefffdddddeee0eeeeeeee0777777700000000009e99e9970eeeeeeeeeeeeee
ee00000000000eee00eeee000000000006677dd77666d700eee666ee666660000efffdd777ddee0777777eee77ddd7700000000009e555e970eeeeeeeeeeeeee
ee00000eee00ee0ee0eee00000eee0000667dddd7666d7000ee666ee66666600eeffdd77777ddee7777777ee7ddeed7000000000995eee5970eee77777777777
ee0000ee0ee0eee000ee00000eeee0000667dddd7666d7006666666666666660eeffd777dd77deedd77777ee77ddd77000000000995e775970ee777777777777
ee0000ee0ee00eee00ee00000eeeee0006677dd77666d7066e6ddddddddd6666eeffd77d7dd7deedd77dd7ee7777777000000000995e775970ee777777f77777
ee0000ee0ee000eee0ee0000eeeeeee000667777dddd700666dd77ddd77dd666eeefd77dddd7dee77d7dd7ee7d777770000000009995559570ee77777fff7ff7
eeeee0ee0ee0ee0ee0eeee000000000000066666666600066dd7777d7777dd66eeeedd77dd7ddee77dd77ee0777dddd0000000009e9e999570ee77ff7fff7ff7
0eee000eee000eee000eeee000000000666dd6666666660066d7777d7777d6600eeeedd777ddee007dd7ee007777777000000000ee9559e970ee77ff7fff7ff7
00000000000000000000000000e00006666ddd666666666006eeeeeeeeeee6000eeeeedddddeee000777e00077777770000000000999955570ee777777777777
00ee000ee0000000000ee00000ee0006666ddd666666666006eeeeeeeeeee60000eeeeeeeeeee0000eeee00077777770000000000e9e995570ee7fffffffffff
0eee000ee0000000000ee00000ee0006666ddd66666666600666eeeeeee66600000eeeeeeeeee000eeeeee00777777700000000000eee9e970ee777777777777
0eee000ee0ee000ee00ee00000eeee06666dff6666666660066d6666666d6600000eeeeeeeeee00e66ee66e0077777700000000000000eee70ee777f77777777
0eeee00ee0000eeeee0ee00000eee006666dffddddddd660066dd66666dd6600000eeeeeee0ee00e66ee66e007777770000000007000707070ee77fff7f77f7f
0eeeee0ee0ee0ee0ee0ee0ee00ee0006666dddddddddd660006dd66666dd6000000eee0eee0ee000eeeeee0007777770000000000777007070ee77fff7f7ff7f
0ee0ee0ee0ee0ee0ee0eee0ee0ee000066ddddddddddd6000000d66666d000000000e00eee0ee0000eeee00007777770000000000000077070ee77fff7f7ff7f
0ee00eeee0ee0ee0ee0ee00ee0ee000000ddddddddddd00000000066600000000000000eee0e000000eee00007777770000000000000700770ee777777777777
0ee00eeee0ee0ee0ee0ee00ee0eeee00000ddddddddd000000000000000000000000000eee0000000ee6ee0000707770000000000077007070ee7fffffffffff
0ee000eee00ee0eeee0ee00ee00eeee00006660006660000000000000000000000000000e00000000ee0ee0000007770000000000000000070ee777777777777
0000000000000000ee000000000000000006600006600000000000000000000000000000000000000ee0eee000000770000000000000000070eee77777777777
0000000000000eeee00000000000000000000000000000000000000000000000000000000000000000ee0ee000000000000000000000000070eeeeeeeeeeeeee
000000000000eeee0000000000000000000000000000000000000000000000000000000000000000000e00e000000000000000000000000070eeeeeeeeeeeeee
000ee000600600000055550007700000077777700777777000555500000077700077700000077d000000000000000000000000000999000070eeee6666666666
07777000d66d000055755755777000006d5dd5d67dedddd75577775500060777007776000077d6600000000000ffff00000000009595900070eeee6666666666
0d7d7700e66e0000ee7777ee777600006d5555d6e75f5ed7e7d77d7e000677660dd6777000dd6660000000000fddddf0000000009e5e900070eeeeeeeeeeeeee
ee777777d66d50005e0770e5dd6760006dddddd6ee77777e57d77d7500070606077dd77d000dd000000000000fddddf0000000000999000070eeeeeeeeeeeeee
0e7777770dd56d055e5775e500d6777066666666eeeeeeee5e7777e50076666007777d0007006070000000000effffe00000000070707000700ee00000000000
0777777700566d50ee5775ee000d77700de7e7d00eeeeee0e507705e06760000776d00007770077d000000000deeeed000000000000000000700007777777777
077767660d56d6d05e7777e5000077d00dddddd0000eee00e506605e07607000dd000000d77d0dd6000000000edddde000000000000000000077770000000000
007776600d060d50ee7557ee0000dd00d000000d00000000ee7777ee00700000000000006dd660d60000000000eeee0000000000000000000000000000000000
__label__
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglllllggggggggggglgggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggglllllgggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggggglgggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggggglgggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggggglgggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglgggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggglggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggggggggggggglggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggtttttttttttggggggggggggggggggglggggggggggggggggggggglggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggtttttttttttttttttttgggggggggggggglllgggggggggggggggggggglggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggtttttttttttttttttttttttggggggggggggglggggggggggggggggggglllllggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggtttttttttttttttttttttttttttttgggggggggglggggggggggggggggggggglggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggtttttttttttttttttttttttttttttttggggggggggggggggggggggggggggggglggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggtttttttttttttttttttttttttttttttttttggggggggggggggggggggggggggggglggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggtttttttttttttttttttttttttttttttttttttgggggggggggggggggggggggggggglggggggggggggggggg
ggggggggggggggggggggggggggguugguugggguugggggtttttttttttttttttttttttttttttttttttttttggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguugguugggguuggggtttttttttttttttttttttttttttttttttttttttttgggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggguuuugguuuugguuuugtttttuuuuttttttttttuuttttttttttttttttttttttgggggggggggggggggggggggggggglgggggggggggggg
ggggggggggggglggggggggggguuuugguuuugguuuuttttttuuuuttttttttttuutttttttttttttttttttttttggggggggggggggggggggggggggglgggggggggggggg
lgggggggggggggggggggggggguuuugguugggguugtuuttuuuuttttttttttttuuuuttttttttttttttttttttttggggggggggggggggggggggggglllggggggggggggg
lgggggggggggggggggggggggguuuugguugggguuttuuttuuuuttttttttttttuuuutttttttttttttttttttttttggggggggggggggggggggggggglgggggggggggggg
lgggggggggggggggggggggggguuuugggguugguuttuuttuuuuuuttttttttttuuuuttttttttttttttttttttttttgggggggggggggggggggggggglgggggggggggggg
lgggggggggggggggggggggggguuuugggguugguuttuuttuuuuuuttttttttttuuuuttttttttttttttttttttttttggggggggggggggggggggggggggggggggggggggg
lllgggggggggggggggggggggguuuuggggggggttttttttttttttuuuuuuttttuuuuuuuutttttttttttttttttttttgggggggggggggggggggggggggggggggggggggg
lgggggggggggggggggggggggguuuugggggggtttttttttttttttuuuuuuttttuuuuuuuuttttttttttttttttttttttggggggggggggggggggggggggggggggggggggg
lgggggggggggggggggggggggluuuugggggggtttuuuuuuttttuuuuttuuuuttuuuuuuttttttttttttttttttttttttggggggggggggggggggggggggggggggggggggg
lgggggggggggggggggggggggguuuugggggggtttuuuuuuttttuuuuttuuuuttuuuuuuttttttttttttttttttttttttggggggggggggggggggggggggggggggggggggg
lgggggggggggggggggggggggguuuuggggggttuuuuttuuuuttuuuuuuttttttuuuutttttttttttttttttttttttttttgggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggguuuuggggggttuuuuttuuuuttuuuuuuttttttuuuutttttttttttttttttttttttttttgggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggguuuugggggtttuuuuttuuuuttttuuuuuuttttuuuuttttttttttttttttttttttttttttggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggguuuugggggtttuuuuttuuuuttttuuuuuuttttuuuuttttttttttttttttttttttttttttggggggggggggggggggggggggggggggggggg
gggggggggglgggggggggggggguuuugggggtttuuuuttuuuuttttttuuuuuuttuuuuttttttttttttttttttttttttttttggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggguuuugggggtttuuuuttuuuuttttttuuuuuuttuuuuttttttttttttttttttttttttttttggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggguuuuuuuuuuttuuuuttuuuuttuuuuttuuuuttuuuuuuuutttttttttttttttttttttttttgggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggguuuuuuuuuuttuuuuttuuuuttuuuuttuuuuttuuuuuuuutttttttttttttttttttttttttgggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuuuuttttttuuuuuuttttttuuuuuuttttttuuuuuuuutttttttttttttttttttttttgggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuuuuttttttuuuuuuttttttuuuuuuttttttuuuuuuuutttttttttttttttttttttttgggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggttttttttttttttttttttttttttttttttttttttttttttuutttttttttttttttgggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggttttttttttttttttttttttttttttttttttttttttttttuutttttttttttttttgggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggguuuuttttttuuuuttttttttttttttttttttuuuuttttttttttuuuutttttttttttttgggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggguuuuttttttuuuuttttttttttttttttttttuuuuttttttttttuuuutttttttttttttgggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuuuuttttttuuuuttttttttttttttttttttuuuuttttttttttuuuutttttttttttttgggggggggggggggggggggggglggggggggg
ggggggggggggggggggggggggggguuuuuuttttttuuuuttttttttttttttttttttuuuuttttttttttuuuutttttttttttttgggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuuuuttttttuuuuttuuuuttttttuuuuttttuuuuttttttttttuuuuuuuutttttttttgggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuuuugtttttuuuuttuuuuttttttuuuuttttuuuuttttttttttuuuuuuuuttttttttggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuuuuuuttttuuuuttttttttuuuuuuuuuuttuuuuttttttttttuuuuuuttttttttttggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuuuuuuttttuuuuttttttttuuuuuuuuuuttuuuuttttttttttuuuuuuttttttttttggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuuuuuuuuttuuuuttuuuuttuuuuttuuuuttuuuuttuuuuttttuuuuttttttttttttggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuuuuuuuuttuuuuttuuuuttuuuuttuuuuttuuuuttuuuuttttuuuutttttttttttgggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuugguuuuttuuuuttuuuuttuuuuttuuuuttuuuuuuttuuuuttuuuutttttttttttgggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuugguuuuttuuuuttuuuuttuuuuttuuuuttuuuuuuttuuuuttuuuuttttttttttggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuugggguuuuuuuuttuuuuttuuuuttuuuuttuuuuttttuuuuttuuuuttttttttttggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuugggguuuuuuuuttuuuuttuuuuttuuuuttuuuuttttuuuuttuuuuttttttttttggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuugggguuuuuuuuttuuuuttuuuuttuuuuttuuuuttttuuuuttuuuuuuuutttttgggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuugggguuuuuuuuttuuuuttuuuuttuuuuttuuuuttttuuuuttuuuuuuuuttttggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggguuuugggggguuuuuuttttuuuuttuuuuuuuuttuuuuttttuuuuttttuuuuuuuuttggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggglluuuugggggguuuuuuttttuuuuttuuuuuuuuttuuuuttttuuuuttttuuuuuuuutgggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggglggggggggggggtttttttttttttttttuuuuttttttttttttttttttttttttttggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggglgggggggggggggttttttttttttttttuuuutttttttttttttttttttttttttgggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggglggggggggggggggtttttttttuuuuuuuuttttttttttttttttttttttttttggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggglgggggggggggggggttttttttuuuuuuuutttttttttttttttttttttttttgggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggtttttuuuuuuuuttttttttttttttttttttttttttggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggttttuuuuuuuutttttttttttttttttttttttttgggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggtttttttttttttttttttttttttttttttttttggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggtttttttttttttttttttttttttttttttggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggtttttttttttttttttttttttttttttgggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggtttttttttttttttttttttttggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggtttttttttttttttttttggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggtttttttttttggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggglllllggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggglggggggggggggggggggggggggggggggggggggglggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggglgglgggggggggggggggggggggggggggggggggglggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggglggggggggggggggggggggggggggggggggggggglggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggglggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggglllllggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggglgggggggggggggggggggggggggggggggggggggggggggggglgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggglggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggglggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggglggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggguuuuuggguuguuuguuuguuuguuugggggguuguuuguuuguuuggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggguuguguuguggggugguguguguggugggggguggguguguuuguggggggggggggggggggggggggggggggggggggggggggggg
glgggggggggggggggggggggggggggggggggggguuuguuuguuuggugguuuguugggugggggguggguuuguguguugggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggguuguguuggguggugguguguguggugggggguguguguguguguggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggguuuuugguugggugguguguguggugggggguuuguguguguguuuggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggtttgttggggggtttgtttggttgggggtttgtgtggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggtgtgtgtgggggtgtgtgtgtgggggggtgtgtgtggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggtttgtgtgggggttggtttgtgggggggttggtttggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggtgtgtgtgggggtgtgtgggtgtgggggtgtgggtggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggglggggggggggggggggggtgtgtgtgggggtgtgtgggtttgggggtttgtttggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggglgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggglllggggggggggggtggtttgtgggtttggttgtgtgtttgttggtttgtttgtgtgtggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggglggggggggggggtgtgtgggtggggtggtgtgtgtgtgggtgtgtgtgtgtgtgtgtggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggglggggggggggggtgtgttggtggggtggtgtgtgtgttggtgtgtttgtttgtgtgtggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggtgggtgggtggggtggtgtgtttgtgggtgtgtgggtgtgtgtgtggggggggggggggggggggggggggggggggggggggggggg
ggggggglgggggggggggggggggggggggggggggggggttgtttgtttgttggttgggtggtttgtgtgtgggtgtggttgtttggggggggggggggggggggggggggggggggggggggggg
ggggggglgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggglllggggggggggggggggggggggggggggggggggggtggtttgtttgtgtgggggtttgtttgtttgtttggttggggggggggggglggggggggggggggggggggggggggggggg
ggggggglggggggggggggggggggggggggggggggggggggtgtgtgtgtgggtgtgggggtttgtgtgtgtggtggtgtggggggggggggglggggggggggggggggggggggggggggggg
ggggggglggggggggggggggggggggggggggggggggggggtgtgtttgttggttggggggtgtgtttgttgggtggtgtggggggggggggglggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggtgggtgtgtgggtgtgggggtgtgtgtgtgtggtggtgtggggggggggggglggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggttgtgtgtgggtgtgtttgtgtgtgtgtgtgtttgttgggggggggggglllllggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggggggggggggggggggglggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggggggggggggggggggggggglggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglllgggggggggggggggggggggggggglggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggglggggggglggggggggggggggggggggggggggggggggggggggggggggggggggg
__gff__
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000001010101010101010101010000000000010101018001030140000100000000000101010601400140000001000000000100010001010101000a01010101000001
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__map__
5152494a545d000000005d007d7d007d000060616461625b505152005c55404142555c606362556061636267655d5e404353434343534342000000005867676500000000000058686867650000005e5e5e550000005e40414141426064646464767b0055555555555555555555555500004849496a4949494a00000067676700
535241424c00005b00000000000000005d5b006c565d007d505352005e4b606162555c5c5c00555867686868686800505343535353435352006c00006c586767650000006e5867676867655e0000000056550000000050434343624f4f4f4f4f005e555e00665e006600005e6c665e55485a5a5a5a5a5a5a5a4a006a5a5a5a6a
515263624c0000000000005b5d5c000000005e6b00006c7d505152560055000000555c00005857676767676767655b605353535353535362006b6e006b6e586765006e0058656e5867655555550000005e00550000006061616200004041425e000055005e6e005e6d6d6d6d6b6e00555a69595969595959595a005a5969695a
53524c4f4e5c00004042000000000000000000006c7d6b005053525c0055005c00555c0058675767676767676765006661616163616161660000000058676767656c0058676868555555000000550000005e54000000555c0000004546476255555555005e005e6e005e665e6d55005559695959595959696959006969595969
51524c5e00730000504340414200005c5e00004b6b4c7d7d505152000055000000005555555557676767676765545e6d6d6d73596d6d6d556c006e6867676500006b6868676767557c0000000055005e0000540000000000005c5c6061625d00007555000066006d66006e0048434a5569595969595959695959005969695969
61624c000000000050515153524c54545400004d4f4e005d5053525454540000005e004b686868686767686868684c5b005c5c5c5c5c5e556b005868686868006c005867676768557c0000000000555555550000000000000000005e005e0000005e5e6d6d5e5e6d6d5e00734363435569595959595959596959006959695959
4f4f4e005b00004b60616464624c5e404200005d5b005d4b5051524c000000000000004b686868676767676868684c00005c5b5d5b5c006600000058676765006b6e00586767676800005e005e5e00000000000000000000000000000000000000005e6d006d00005e6c006d5e6d5e5559596959596959595969005969695959
005b0000005c004d4f4f4f4f4f4e6c505200000000005e4b6063624c000048444a75767674545e58676767655e54005e005c5c5c5c404266006e006e6c58676765000058676768650000005e00005e005c0000005c00000000000000000000000075555566546654556b5466005e005559596959596959596959005959596959
000000484a00005e00000000005d6b5052005c000000004d4f4f4f4e5b0060616200000000586767676767676765006c004041414146476600006c006b6e586767686767676765000000000000005e5e000000000000000000440000000000000056555e6e5e006e0000006d006e5e556f69595969776959596f006f5977696f
00004846464a00004041414200005c60625c0000005b5b005e5e5e000000000000005b5b004042586767655d00005d6b005051616161635500006b0000586767686867676765006c00000000005e58655e00000040414141414142005e000000000055006c5e5e6d6d5e6d5e6d6d6c556f6f6f6f6f786f6f6f6f006f6f786f6f
5d4b505353524c4b504343524c5c5d54545c0000006c00000000000000730000000000000050435558676500005c000000505256006c5b556e0000006e586767676767676c6e006b00005e005e586767655e005c506161436161520000000000000055006b6d666e006c5e666d5e6b556f676a676767676a67675a5a5a6a676f
004b607f61624c4b606464624c005c48494a0000006b0000005c0000004849494a000000005043555867655d00005b5d0060625c006b5c5500005867676767656e5867656b000000000000005e586767655e0000504361616143526d6d6d5d404142555e006d6e6d6d6b006d00005e55675a5a5a5a5a5a5a5a5a6959695a5a67
004d4f4f4f4f4e4d4f4f4f4f4e00005051525d0000005e000000000000504343526d6d6d6d7b62006d586566545454545454540000000066005867676767656e6c5867676768656e00000000005e58655e000000604546464647625d00006d50434342550000000055556e00006e55005a59695969595969595959695959695a
6c0000005e5554555554555e0048494a604454445444544454556d6d5550434352000000006d6d6d0058655e00005c5b5c6e54545454545400006e5867656e006b586767676867650000005e5c005e5e0000005e0060616161620000000000505151525e76000000005500000055000069595969696959595969695959695969
6b5e6c005b556d6d6d6d555b00454647556d005c000000005e5d005c557b61617b00000000005e0000586765000000000000000000000000000000006e0000000058676767686767655c00000000005c00000000005d5e6d00000000000000607f7f6200550000000000555e007600006f77595959695969696959596959596f
00006b5d00550000005b55000060616255005e00005e5c5c5455005d555e5e5e00000000000000005b5e68685b006c005b6e005b005e00000000444141446c0000686868676867655c0000000000000000005c000000006d5e00000000005c005d5e5d00550000005e5500005e5e55006f786f6f6f6f6f6f6f6f6f6f6f6f6f6f
0000000000555d005d0055000054545454000000000000007676000055005b005d00000000000000005e686800006b005e00005e5d00005b0000404141426b0000586767676865000000000000005d000000000000005d6d00000000005e005d00000000550000000055005e000055000044444400000067676a67676a676700
000000000055000000005500005e00557b5e0000005c005b000055005500000000000000000000005b5867655b000000006c0000005e6c00445746464646574444676765000000000000005e005e00404141425e0000006d5d00404141444200005c000055005e000000755454747d7d485a5a5a4a00675a5a5a5a5a5a5a5a67
6d6d6d6d555b000000005b55000000557b544042005e40414241444144414142665d540000005d005b586765005b006c5c6b5d006c006b00555d6061636200557467650000000000005e0048494a445761615741415700005e4b50616161524c5e000000555d00000000555e005556005a5969695a005a59695969596969695a
434c4b43555b565b5c00005500005e577b5c45474c4b504352614464636464646554540000005d5d005b586500006c6b6c005b5d6b5b005b55005c5c005c5c557b00000000005d5e5e5e5e607f634b504343434343524c6d004b50436143524c00000000555571005d00550000557d7d59596959590059695969595959596969
434c4b435500000000000055000000557b4b63624c4b6064625e5e564f5b5c58656d6d6d6d6d6d6d0000586765006b006b5b005454404200555d000000735d557b004041425e5e5e5e5e00006d7157576161616161574c5e5d4b60616161624c005d5e00555e00715b0055005e557d7d69595969590059595959596959595959
4f5e5d4f555b5c005d5b5e55005c00557b4d4f4e4c4b5b5c0000005e5e00484a5744005b5d5b00445c005b5865005b6c0000586556454768555c5d00005c5d557b406161525e5c5e5e5c5e0000714b505353535353524c6d004d4f4f4f4f4f4e0000005d555d005b5d5d555e0055007d59595959690059695959697759695959
005d5e000054540000005400000000557b5e40424c4b4042000000004849464744454141414141474c75555555746c6b005867650060625555005c5d5c5c0055745045476354546e5e5e5e5e00714b606161616163624c00005d40444141425454545454555e0000005e765555767d7d5969597759006f6f6f6f6f786f6f6f6f
000000005d005400404200005b0000577b4b60624c4b6362005b5c5e6064646244616161636161625d556d6d6d556b586767655d000000004054556d6d555440426061626d0000715e5e5d0000714d4f4f4f4f4f4f4f4e00005e50435143525c005c5d5c545e0000555500005e555e006f6f6f786f0000000000000000000000
5d00005c000054006062446c000000557b4d4f4f4e4d4f4f6d6d6d484a4f4f4e005e4d4f4f4f4f4e55556d6d6d40414254005e0054484a5b606255546d556061625c5c5c0000007171717171710000005e5d0000005e0000000050534353525c005c0056550000550000000000555e7d006767676a676700000067676a670000
000000000000545c4f4f766b5d005b557b5e005d00005e00005c4b45474c5c5757005c5e005c5e004041426d6d4546475c005b005b454658656c005e5b0000484a5c005c005d5d5d7576745d005555754444444444745c5d5c5e71515351710000005d00550000550000005e00555e7d675a5a5a5a5a5a6700675a5a5a5a6700
40425c000000404200005500000000557b54555c5c55000000004b60624c005555416d6d6d6d41415051526d405743575b40414254455741426b005e00005460625c5c5c00005d005053526e00005650534363435352575757575061436152444042000055000000005500007c7d5e7d5a6969596959695a675a596969595a00
505244005d0050635b005500005d0057555d007d6c0054005b004d4f544e005757006d6d6d6d5d4b607f636d60646164546064625c606463624c5d00000054005d006e005d006e005051626e006e4b5061616d6161624c565e007151535171765051414255000000007600007d7d7d0069695959595969595a69696959695900
6364624c5e00504f005b484a5c0000586500006c6b6e005500005d40425c005555565c00005c5d4d4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4e0000404142005e005e000000000060616e005d004b50575c6d5c4f4f4e5e5d4b50534353524c60617f62555e00555500005e007d5e7569595969596959696959595959695900
4f4f4f6c0000505c5c406062426d6d58655c006b6b7d00555d004b60624c5b575700005c0000005b5e005d005e005d005b00005d005e00005c005d4b50435174550000005e00005e7b7b0000744042404141414141424c00004b45464646474c005e000055000000557d007d557d757b69696959596959696959695959696900
6d6d6d6b5c7d504652634f4f624c0058655c5b7d6b7d5b55005b4d4f4f4e5e555500005c5d005b005d6c7d0040414141425c000000005c48494a004b635143525500404200006e00000000557b6064606161646161624c5d004b57616161634c00005e005576555e555e5500557d7b7569775959696959595a59695969696900
5c5d5c00005c6061624f5c5c7b7d0058657d006c00007d550000005d5d000055576c5c0000000000006b004b504343515240425c5d0040454647005d5d6161646200505341425e00006e00005d004d4f4f4f4f4f4f4f4e005e4d4f4f4f4f4f4e005e005555000000555e5e55555e007b6f786f6f686868686f6f686868687800
__sfx__
000e00000d0520d0520d0520d002080520805208052080020d0520d0520d0520d002080520805208052080020d0520d00208052080020d0520d00210052100020f052100520f052100520f052100520c0520c052
010e00000c54307503135430000031625000000c543000000c54307503135430000031625000000c543000000c54307503135430000031625000000c543000000c543075031354300000316250c5430c54300000
000e0000077530775319052077531c052077531905207753200522005207753077531c0521c052077530775319052190521905219052190521905219052190520775307753077530775307753077530775307753
010e00000d0520d0520d0520d002080520805208052080020705207052070520d00208052080520805208002080520d0020905208002080520d00209052100020805206002060521000204052060520205202052
010e0000077530775319052077531c0520775319052077532005220052077530775321052210520775307753200522105220052210522005221052200522105220052077531e052077531c052077531805218052
010e00001905007753140500775319050077531c050077531b050077531805007753140500775318050077531905007753140500775310050077531405007753190500775314050077530d050077030000000000
010e00000d0520d0520d0520d002080520805208052080020d0520d00210052100020f052080021205208002100520d0020d0520c7020c0520d00208052100020d0520d052040021000201052010520105201052
010e00000d0520d0520d0520d002080520805208052080020d0520d0520d0520d002080520805208052080020d0520d00208052080020d0520d00208052100020705207052070520705208052080520800208002
010e00000d0520d0520d0520d002100521005210052100020f0520f0520f0520d00212052120521205208002100521005210052080020d0520d0520d052100020f0520f0520f0520700208052080520805208052
010e00000105201052010520d0020d0520d0520d052080020c0520c0520c0520d0020d0520d0520d052080020d0520d002100520e002070520d00208052100020705207052070520705208052080520800208002
010e00001405207703100520770312052077030f05207703100520b0020d052090020f0520700214052090020d0520d052040020900208052080520b002040020405204052070020500201052010520100200002
010e0000190501905520050077531c050077531e0500775319050077531c050077531f050077532005007753250500775320050077531f05007753200500775323050077531e5320775324050077531f53207753
010e0000200522005200002000021c0501f00220050000021f0521f05200002000021b0521b0521c00200002200522005200002000021f0500000220050000021805218052000020000219052190520000200002
010e00002505007753200500775325052250520775307753240500775320050077532305223052077530775321050077531c050077531b050077531c0500775320050077531b0500775318050077531b05007753
011a000007555005050e555005051255512505005050050507555005050e555005051255512505005050050507555005050e555005051255512505005050050507555005050e5550050512555125051555500505
011a000005555005050c555005051055500505005050050505555005050c555005051055500505005050050505555005050c5550050510555005050050500505005550050507555005050c555005050755500505
011a00002305526005260550c005210550c005230550c0051f0550c005210550c0051e0550c0051f0550c0051a0551a0551a0551a0451a0451a0351a0251a0150c0050c0050c0050c0050c0050c0050c00523005
011a0000210552100524055240051f0551f00521055210051d0551d0051f0551f0051c0551c0051d0551d00518055180551805518045180451803518025180150c0050c0050c0050c0050c0050c0050c0050c005
011a00000c0050c00526055240052a0550c005260550c0052f0522f0422f0522f0422f0352f0052a0550c0052605226042260522604226052260422603226022260150c0050c0050c0050c0050c0050c0050c005
011a00000c7050c705247550c705287550c705247550c7052d7522d7422d7522d7422d7350c7052b7552a7452975229742297522975229752297422973229722297150c7050c7050c7050c7050c7050c7050c705
012d00001a5551d555155551d5551a5551d555155551d5551a5551d555155551d5551a5551d555155551d555195551c555155551c555195551c555155551c555195551c555155551c555195551c555155551c555
012d0000260422605524045220452005220055210422104500000210402004521045220522104520045210451c0521f045190452204221045000002804225055000002204221055000051f055000051d0451c055
012d0000135551555516555135551a5551655515555135550e555105551155513555155550050011555105551355516555155551355511555155551355511555105551355511555105550e555005000d5500d555
012d00001d0521f0451c05526045210522104221055000000000000000200452105525045220551d045220551c0421f055190451605515042160551504516055190421a055190451a0551c0421d0551f04521055
012d00001a055210551d0551f055100551d0552005521055260422605524045220452104021055000000000022055220001f0552205521055000001d0551c0001f055210551d0551c0551a055000000000000000
01200000130451f0451a0452604514045200451804524045130451f0451a0452604514045200451804524045130451f0451a0452604514045200451804524045130451f0451a0452604514045200451804524045
01200000237322373223732237321f7321f7321f7321f73523735007052673500705217350070523735007021f7321f7321f7321f7321a7321a7321a7321a7350070000700007000070000700007000070000700
01200000131250c105131220c105131250c105131220c105131250c105131220c105131250c105131220c105131250c105131220c105131250c105131220c105131250c105131220c105131250c1051312213125
012000001f732007001a732187321a7321a7351f7021d7321f7321f7321f73500700207322073220735007001f7321f732237321f735007001a7321a7321d7321a73500700147321473218732117321375500700
01200000110451d0450f0451b045110451d0450e0451a045130451f0450e0451a0450c045180450e0451a045110451d0450f0451b045110451d0450e0451a045130451f0450e0451a0450c045180450e0451a045
01200000111250c105111220c105111250c105111220c105131250c105131220c105131250c105131220c105111250c105111220c105111250c105111220c105131250c105131220c105131251d0001312213125
0109000020055070051b055070051a0551a0051b055070051e055070051b055070051a055070051b0550700514052140521405214055070050700507005070050700507005070050700507005070050700507005
01090000195550c505145550c5051355513505145550c505175550c505145550c505135550c505145550c5050d5520d5520d5520d5550c5050c5050c5050c5050c5050c5050c5050c5050c5050c5050c5050c505
012000001873220702207322270223702247322370223732237021f73223702207321f7021f7321f702137321b732007002b7021a7321b7322f702207321f7322f7021a7322b7022f702187321a7321773224702
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
010c0000137521850119552106021c552185021955218502205522055220054245022455224552250542450525552255522555225552255422553225522255121850218502185021850218505185021850200504
010c0000107541270420754007041c75414704197540a7041475414754117040a7041b7541b7540a7040050419754197541975419754197541975419754197540050400504005040050400504000040000400700
010c00000453309500045030950004533005000450300500045330750004503005000453300500075000950004533005000050000500075330753307533075330753307500075330050007533005000753300500
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000300001c0501c0502303023030270202702023020230201c0101c01023010230101c0151c015060000400001000000000300002000020000000000000000000000000000000000000000000000000000000000
000100001f0501c0501a05015150111500c15012050100500e0500c0500c1500905009050041500315002150001500015000150001001a0001500011000100001c00000100270000400000000000000000000000
00030000247702a7702a770247601d7601c7501a750127000e7000a70009700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700
0003000025153291632d1632e1732f1732f1732b17328163251632416324153031530310303103031030310303103031030310303103031030310303103031030310303103031030310303103031030310303103
010200002165325653286532865314123141331414314153171631715317153101631016017160151000e1000e0000e0000200002000020000200002000020000200002000020000200002000020000200002000
000200000b152147521a7521c052160521c0520410204102041020410204102041020410204102041020410204102041020410204102041020410204102041020410204102041020410204102041020400204002
00010000161201f1401f140211201a100191001610014100131001310013100121001210012100121001310014100171001810000100001000010000100001000010000100001000010000100001000010000100
00010000000002d020300303204034030350203602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00020000257402575023720217301f740007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700
00020000297202e7302c7403273034720000001a70000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00020000157341554429704287041a0241a0341d7441d5441e744287041f7341f53421704237042352422734267042270427554265442b704007042302423534247340070420724285442474426734227541f744
00010000006200e720037000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__music__
01 00010244
00 03010444
00 00010244
00 06010544
00 07010b44
00 08010c44
00 09010d44
02 0a014344
01 0e101244
02 0f111344
01 14154344
00 14174344
02 16184344
01 191a1b44
00 191c1b44
00 1d1e2144
02 1d1e4344
01 23242544
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 41424344
00 201f4344