ÿþ<!DOCTYPE HTML> <html> <!-- HEADER --> <head> <audio id="cave" src=".\cave.wav" loop></audio> <audio id="open" src=".\open_water.wav" loop></audio> <audio id="deep" src=".\deep.wav" loop></audio> <audio id="town" src=".\town.wav" loop></audio> <audio id="attack" src=".\urchin.wav" loop></audio> <audio id="jingle" src=".\jingle.wav" loop></audio> <audio id="potion" src=".\caldron_potion.wav" loop></audio> <audio id="crunch" src=".\crunch.wav"></audio> <audio id="beep" src=".\beep.wav"></audio> <audio id="bubble" src=".\bubble.wav"></audio> <audio id="nope" src=".\nope.wav"></audio> <audio id="pick" src=".\pick_up.wav"></audio> <audio id="crash" src=".\crash.wav"></audio> <title></title> <script type="bitsyGameData" id="exportedGameData"> # BITSY VERSION 4.8 ! ROOM_FORMAT 1 PAL 0 NAME cave 91,143,200 46,4,69 119,103,201 96,83,163 PAL 1 NAME outside 141,198,245 133,119,184 189,167,254 215,254,187 254,136,157 254,188,146 125,254,206 215,205,254 254,222,177 242,212,235 97,120,172 254,247,183 PAL 2 NAME down 47,61,145 132,120,254 254,199,237 215,254,187 177,143,254 215,205,254 197,237,254 PAL 3 NAME light_sea 141,198,245 133,119,184 182,228,244 206,163,163 208,232,178 173,96,181 88,99,195 254,203,117 60,173,151 232,142,142 137,147,168 254,250,178 254,210,246 254,184,209 237,93,75 PAL 4 NAME deep_sea 132,120,255 47,61,145 158,187,254 234,189,254 233,213,254 173,96,181 254,174,215 205,254,178 PAL 5 NAME close 163,204,244 193,157,143 184,167,219 179,236,255 PAL 6 NAME big 179,236,254 201,149,152 162,159,209 192,185,208 PAL 7 NAME closeclose 163,204,244 179,145,132 237,178,218 254,130,146 254,240,177 173,96,181 254,146,129 PAL 8 NAME title 178,171,254 33,11,84 33,11,84 254,176,136 121,146,255 255,95,153 PAL 9 237,93,75 121,146,255 255,147,184 ROOM 0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,a,a,a,a,a,a,a,a,a,a,a,a,a,a,0 0,a,0,0,0,0,0,0,0,0,0,0,0,0,a,0 0,a,0,0,0,0,0,0,0,0,0,0,0,0,a,0 0,a,0,0,0,0,0,0,0,0,0,0,0,0,a,0 0,a,0,a,a,0,0,0,0,0,0,0,0,0,a,0 0,a,0,0,0,0,0,0,0,0,0,0,0,0,a,0 0,a,0,0,0,0,0,0,0,0,0,0,0,0,a,0 0,a,0,0,0,0,0,0,0,0,0,0,0,0,a,0 0,a,0,0,0,0,0,0,0,0,0,0,0,0,a,0 0,a,0,0,0,0,0,0,0,0,0,0,0,0,a,0 0,a,0,0,0,0,0,0,0,0,0,0,0,0,a,0 0,a,0,0,0,0,0,0,0,0,0,0,0,0,a,0 0,a,0,0,0,0,0,0,0,0,0,0,0,0,a,0 0,a,a,a,a,a,a,a,a,a,a,a,a,a,a,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 PAL 0 ROOM 1 1,27,1,1,1,e,1,1,1,1,1,28,1,29,1,1 1,1,2a,2b,1,1,2a,1,1,1,1,1,1,1,1,2c e,1,1,2d,2a,2e,1,1,1,28,1,2f,2g,2h,1,1 1,1,1,2i,1,1,1,2j,2k,2l,1,1,1,2m,2n,1 1,2o,1,1,2p,2q,2r,2s,2t,2u,2v,2w,2x,1,1,1 2y,28,2z,30,31,32,33,34,35,36,37,38,39,3a,3b,1 1,1,3c,3d,3e,3f,3g,3h,3i,3j,3k,3l,3m,3n,1,1 1,1,3o,3p,3q,0,3r,3s,0,0,0,3t,3u,0,3v,1 1,1,3w,3x,0,3y,3z,40,0,0,41,42,43,0,44,1 1,1,45,0,0,46,47,0,0,0,0,48,49,4a,4b,1 1,4c,1w,0,0,4d,4e,4f,0,zq,0,4h,4i,4j,4k,4l 1,1,1,4m,4n,4o,4p,0,0,4q,4r,1br,0,4t,4u,1 1,4v,1,4w,4x,4y,4z,50,51,52,53,54,55,56,1,57 1,1,1,4v,58,59,5a,5b,5c,5d,5e,5f,5g,5h,5i,1 1,5j,1,5k,1,1,5l,5m,5n,5n,5o,5p,1,27,2c,5r 1u,10c,5s,10c,10c,10c,10c,5t,10c,10c,10c,10c,5u,5i,10c,5v NAME cave1 ITM 1 3,15 ITM 1 6,15 ITM 1 9,15 ITM 1 12,15 ITM 1 15,15 EXT 15,15 2 12,9 PAL 0 ROOM 2 1,27,1,1,1,e,1,1,1,1,1,28,1,29,1,1 1,1,2a,2b,1,1,2a,1,1,1,1,1,1,1,1,2c e,1,1,2d,2a,2e,1,1,1,28,1,2f,2g,2h,1,1 1,1,1,2i,1,1,1,2j,2k,2l,1,1,1,2m,2n,1 1,2o,1,1,2p,2q,2r,2s,2t,2u,2v,2w,2x,1,1,1 2y,28,2z,30,31,32,33,34,35,36,37,38,39,3a,3b,1 1,1,3c,3d,3e,3f,3g,3h,3i,3j,3k,3l,3m,3n,1,1 1,1,3o,3p,3q,0,3r,3s,0,0,0,0,0,0,3v,1 1,1,3w,3x,0,0,0,0,0,0,41,0,0,0,44,1 1,1,45,0,0,0,0,0,0,0,0,0,0,0,4b,1 1,4c,1w,0,0,0,0,0,0,zq,0,0,0,0,4k,4l 1,1,1,4m,4n,0,0,0,0,4q,4r,104,0,4t,4u,1 1,4v,1,4w,4x,4y,4z,50,51,52,53,54,55,56,1,57 1,1,1,4v,58,59,5a,5b,5c,5d,5e,5f,5g,5h,5i,1 1,5j,1,5k,1,1,5l,5m,5n,5n,5o,5p,1,27,2c,5r 1u,10c,5s,10c,10c,10c,10c,5t,10c,10c,10c,10c,5u,5i,10c,5v NAME cave2 EXT 1,10 3 15,10 PAL 0 ROOM 3 0,0,0,5w,0,5x,0,5y,5z,0,60,0,61,0,0,0 0,0,0,62,0,63,0,0,64,0,65,66,67,68,0,0 0,0,69,0,0,6a,0,0,6b,0,0,6c,0,6d,0,0 0,0,0,0,0,0,0,0,0,0,0,0,6f,0,0,0 0,4s,0,0,9x,0,0,0,6h,108,106,6i,6j,6k,0,0 0,0,0,6l,6m,0,0,0,107,0,6o,6p,6q,6r,0,0 0,6s,0,0,0,0,0,0,0,0,6t,6u,0,0,0,0 0,0,0,0,6e,0,0,0,0,0,0,0,0,0,0,6v 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6w,1 0,109,6x,0,6z,0,0,0,0,0,0,0,70,0,71,72 0,10a,73,74,0,0,0,75,76,0,0,77,78,0,79,7a 0,0,0,0,0,7b,7c,10b,0,0,0,0,0,0,105,7d 7e,7f,7g,0,0,0,7h,7i,0,0,7j,7k,7l,7m,7n,1 1,1,7o,7p,7q,7r,0,7s,7t,7u,7v,7w,7x,7y,1,1 1,1,1,1,1,7z,80,1,1,5l,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 NAME outside_right ITM e 8,13 EXT 1,12 9 1,0 EXT 2,12 9 2,0 EXT 4,13 9 4,0 EXT 5,13 9 5,0 EXT 6,13 9 6,0 EXT 3,12 9 3,0 EXT 7,13 9 7,0 EXT 8,13 9 8,0 EXT 9,13 9 9,0 EXT 10,13 9 10,0 EXT 11,13 9 11,0 EXT 12,13 9 12,0 EXT 13,12 9 13,0 EXT 15,10 2 2,10 EXT 0,0 4 15,0 EXT 0,1 4 15,1 EXT 0,2 4 15,2 EXT 0,3 4 15,3 EXT 0,4 4 15,4 EXT 0,5 4 15,5 EXT 0,6 4 15,6 EXT 0,7 4 15,7 EXT 0,8 4 15,8 EXT 0,9 4 15,9 EXT 0,10 4 15,10 EXT 0,11 4 15,11 PAL 1 ROOM 4 0,0,0,5w,0,5x,0,5y,5z,0,60,0,61,0,0,0 0,0,0,62,0,63,0,0,64,0,65,66,67,68,0,0 0,0,69,0,0,6a,0,0,6b,0,0,6c,0,6d,0,0 9k,9l,0,103,102,0,0,0,0,0,zw,az,0,0,9w,0 0,0,9n,0,0,0,0,0,0,0,0,b4,0,0,0,0 0,9p,9q,0,0,0,9r,0,0,0,b9,ba,0,0,0,0 0,0,0,0,0,0,0,0,0,0,bc,bd,0,0,0,9x 0,6l,0,9y,0,0,6s,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,9z,0,0 0,0,0,101,100,0,0,0,0,0,0,0,6j,a0,0,0 0,0,a1,0,a3,0,0,0,a4,0,0,0,0,0,a5,0 a6,0,a7,a8,0,0,0,0,0,0,0,0,0,125,a9,aa 1,ab,ac,ad,ae,af,ag,ah,ai,0,ak,0,0,al,am,an 1,1,1,1,1,1,1,1,ao,ap,aq,ar,as,at,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 NAME outside_center ITM e 6,12 EXT 0,11 10 0,0 EXT 1,11 10 1,0 EXT 3,12 10 3,0 EXT 4,12 10 4,0 EXT 5,12 10 5,0 EXT 6,12 10 6,0 EXT 12,12 10 12,0 EXT 15,12 10 15,0 EXT 14,12 10 14,0 EXT 13,12 10 13,0 EXT 15,0 3 0,0 EXT 15,1 3 0,1 EXT 15,2 3 0,2 EXT 15,3 3 0,3 EXT 15,4 3 0,4 EXT 15,5 3 0,5 EXT 15,6 3 0,6 EXT 15,7 3 0,7 EXT 15,8 3 0,8 EXT 15,9 3 0,9 EXT 15,10 3 0,10 EXT 15,11 3 0,11 EXT 0,0 5 15,0 EXT 0,1 5 15,1 EXT 0,2 5 15,2 EXT 0,3 5 15,3 EXT 0,4 5 15,4 EXT 0,5 5 15,5 EXT 0,6 5 15,6 EXT 0,7 5 15,7 EXT 0,8 5 15,8 EXT 0,9 5 15,9 EXT 0,10 5 15,10 PAL 1 ROOM 5 1,au,1,2c,av,1,1,1,aw,0,ax,0,ay,0,0,0 1,1,1,1,1,1,1,1,b0,zr,65,66,b1,b2,0,0 1,1,1,b5,1,1,1,5s,1,b6,b7,b8,0,6d,0,0 1,1,1,1,1,1,1,1,1,1,1,bb,0,0,0,0 1,2l,1,72,1,1,be,bf,bg,bh,bi,126,0,70,4s,0 1,1,1,1,1,1,bj,bk,0,bl,127,0,0,0,0,0 bm,1,1,bn,bo,bp,bq,114,0,bs,0,ds,0,0,0,0 bt,bu,bv,bw,3s,0,0,bx,by,0,0,0,0,0,0,a4 0,0,0,0,0,0,0,0,113,0,0,0,8p,0,0,0 9b,bz,c0,0,0,0,c1,0,0,0,0,0,0,115,c2,0 1,ct,1,7e,c3,c4,c5,c6,c7,0,89,0,c8,0,0,128 ca,1,1,cb,1,1,cc,cd,ce,0,0,0,cf,cg,ch,ci 1,cj,1,1,1,1,1,1,1,ck,cl,0,cm,cn,co,1 1,1,1,1,1,1,1,4l,1,1,cp,25,1,ca,1,2m 1,1,1,1,2e,1,1u,1,1,cq,1,cr,cj,1,1,1 1,1,1,1,1,1,1,1,1,1,1,cs,1,5i,1,1 NAME outside_left ITM e 5,10 EXT 15,11 11 15,0 EXT 14,11 11 14,0 EXT 13,12 11 13,0 EXT 9,12 11 9,0 EXT 8,11 11 8,0 EXT 7,10 11 7,0 EXT 6,10 11 6,0 EXT 5,10 11 5,0 EXT 11,15 6 11,0 EXT 0,8 8 14,14 EXT 0,9 8 13,14 EXT 15,0 4 0,0 EXT 15,1 4 0,1 EXT 15,2 4 0,2 EXT 15,3 4 0,3 EXT 15,4 4 0,4 EXT 15,5 4 0,5 EXT 15,6 4 0,6 EXT 15,7 4 0,7 EXT 15,8 4 0,8 EXT 15,9 4 0,9 EXT 15,10 4 0,10 PAL 1 ROOM 6 ct,1,1,1,1,1,1,1,1,27,cu,0,cv,1,1,1u 1,cw,1,1,cx,5s,1,1,1,cy,cz,0,d0,d1,1,1 1,1,5s,1,1,1,1,d2,d3,0,0,0,0,d4,d5,bm 2c,1,1,1,1,bm,d6,0,0,0,0,0,0,0,d7,x 1,28,d8,1,1,d9,10d,0,0,da,0,0,0,0,db,2x 1,y,dc,dd,74,0,0,0,0,0,0,0,0,0,0,de df,dg,0,0,0,0,0,9x,0,0,0,dh,0,di,dj,dk dl,0,0,0,0,0,0,0,0,dm,0,c1,0,0,0,dn 0,0,0,do,dp,0,dr,0,0,0,0,0,ds,0,0,0 0,0,0,0,0,0,0,0,0,9r,0,0,0,0,0,0 0,dt,0,0,0,0,0,0,0,0,du,0,0,0,0,dv 0,0,0,0,0,0,0,0,6l,0,10f,0,dx,dy,0,0 0,0,dz,0,e0,0,0,0,0,0,0,0,0,0,4s,0 e0,0,0,0,0,0,0,0,0,0,0,e1,0,0,0,6l zx,e2,e3,0,0,6s,e4,e5,e6,e7,e8,e9,zr,0,74,ea eb,ec,ed,ee,ef,eg,eh,1,1,5i,ao,1,7e,ei,ej,5q NAME outside_down1 ITM f 6,12 EXT 11,0 5 11,15 EXT 0,7 7 15,7 EXT 0,8 7 15,8 EXT 0,9 7 15,9 EXT 0,10 7 15,10 EXT 0,11 7 15,11 EXT 0,12 7 15,12 EXT 0,13 7 15,13 PAL 2 ROOM 7 1,ek,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,72,1,1,1,1,1,1,1,1,2n,1 1,1,1,2f,1,1,1,1,1,1,1,el,1,1,1,1 1,1,1,1,1,2y,1,1,1,1,1,1,2f,1,1,1 2h,1,1,1,em,72,1,1,1,1,1,1,1,1,1,4v 1,1,en,eo,da,ep,eq,5d,er,es,et,1,1,1,1,1 eu,ev,10d,0,0,0,0,0,0,ew,ex,ey,ez,f0,f1,f2 f3,0,0,0,0,0,0,0,0,0,0,10i,f4,0,0,0 74,0,0,f5,0,0,0,f4,0,0,10j,0,f7,0,0,0 0,f4,0,0,0,f8,0,0,0,8a,0,f9,fa,0,0,0 0,0,0,fb,0,fd,0,0,0,0,0,0,0,0,0,0 0,0,10e,fe,ff,10h,0,0,0,0,0,0,0,0,0,0 dh,12a,fg,0,fh,0,0,9r,0,0,0,0,0,0,0,0 fi,fj,129,fl,fm,0,0,0,fn,fo,12b,74,0,fp,fq,c0 1,1,1,1,27,fr,fs,ft,fu,fv,as,fw,fx,fy,fz,1 1,1,1,5j,g0,1,1,1,1,2f,1,1,1,1,1,1 NAME outside_down_left ITM f 8,10 EXT 15,7 6 0,7 EXT 15,8 6 0,8 EXT 15,9 6 0,9 EXT 15,10 6 0,10 EXT 15,11 6 0,11 EXT 15,12 6 0,12 EXT 15,13 6 0,13 PAL 2 ROOM 8 g1,g2,g3,g4,g5,g6,0,0,0,0,g7,g8,g9,ga,gb,gc gd,ge,gf,gg,gh,gi,0,gj,gk,gl,gm,gn,go,gp,gq,gr gs,gt,gu,gv,gw,gx,gy,gz,h0,h1,h2,h3,h4,h5,h6,h7 h8,h9,ha,zs,hb,hc,hd,0,he,0,hf,hg,0,0,hh,hi 0,hj,hk,hl,zy,hm,hn,ho,hp,hq,hr,hs,ht,hu,hv,0 hw,hx,hy,hz,i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,0,0 ia,ib,ic,id,ie,if,ig,ih,ii,ij,ik,il,0,0,0,0 im,in,io,ip,iq,ir,is,it,iu,iv,0,0,0,0,0,0 0,0,0,3s,0,iw,ix,10r,iy,iz,0,0,0,0,10m,j0 0,0,0,0,j1,j3,0,0,j4,j5,0,0,0,0,j6,10l 0,0,0,0,0,0,0,0,0,0,0,0,j7,j8,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,j9,ja,0 0,0,jb,10n,jc,10o,0,0,0,0,0,0,0,0,0,110 0,0,0,0,je,jf,10p,0,0,0,0,0,0,0,0,jg 0,0,0,jh,10q,0,0,0,0,0,0,0,0,ji,jj,jk 0,0,0,0,0,0,0,jl,jm,10z,jn,10z,jo,jp,jq,111 NAME outside_left2_big ITM e 6,15 EXT 14,14 5 0,8 EXT 13,14 5 0,9 PAL 6 ROOM 9 0,0,0,0,0,0,0,0,0,0,0,jr,0,0,0,0 0,0,0,6s,0,0,0,0,0,0,0,0,0,0,dm,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dh,0,0,0,0,0,0,0,0,dh,0,0,0,0,0,89 0,0,0,js,0,0,0,0,0,0,0,0,dt,0,0,0 jt,ju,0,0,0,0,0,0,0,0,0,0,0,0,0,0 10y,jv,0,0,0,0,0,jw,jx,0,0,0,0,9y,0,0 jy,jz,0,0,0,0,k0,k1,k2,0,9r,0,0,0,0,0 0,k3,k4,k5,0,0,0,k6,k7,0,0,0,0,0,0,0 k8,k9,ka,kb,kc,kd,0,0,ke,0,kf,kg,kh,ki,0,0 kj,kk,kl,km,kn,a6,c0,zy,ko,kp,kq,kr,ks,kt,ku,kv 1,kw,kx,ky,kz,1,1,1,l0,l1,l2,l3,l4,l5,l6,l7 1,l8,l9,la,lb,lc,ld,le,lf,1,lg,lh,li,1,1,1 1,28,5q,1,1,lj,lk,ll,lm,ln,1,1,1,1,1,1 1,1,ca,1,1,lo,lp,lq,lr,1,1,1,5j,ls,1,1 1,1,1,1,1,1,1,1,1,1,1,1,bm,1,1,1 NAME close1 EXT 0,0 3 1,12 EXT 1,0 3 1,12 EXT 15,0 3 13,12 EXT 14,0 3 13,12 EXT 13,0 3 13,12 EXT 2,0 3 2,12 EXT 3,0 3 3,12 EXT 4,0 3 4,13 EXT 5,0 3 5,13 EXT 6,0 3 6,13 EXT 7,0 3 7,13 EXT 8,0 3 8,13 EXT 9,0 3 9,13 EXT 10,0 3 10,13 EXT 11,0 3 11,13 EXT 12,0 3 12,13 EXT 0,1 10 15,1 EXT 0,2 10 15,2 EXT 0,3 10 15,3 EXT 0,4 10 15,4 EXT 0,5 10 15,5 EXT 0,6 10 15,6 EXT 0,7 10 15,7 EXT 0,8 10 15,8 PAL 5 ROOM 10 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,8w,0,0,0,0,0,0,6g,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,lt,lu,0,0,0,6s,0,0,0,0,0,0,0,0 0,0,0,lv,lw,lx,0,0,0,0,0,ly,0,0,0,0 0,e4,zr,zs,lz,m0,m1,0,0,0,0,0,0,0,0,0 0,m2,m3,0,m4,m5,m6,0,0,0,0,0,0,0,0,0 0,0,m7,m8,m9,ma,mb,0,0,0,0,0,0,0,mc,0 0,md,me,mf,mg,mh,mi,0,0,jr,0,0,0,0,0,0 0,mk,ml,mm,mn,mo,mp,0,0,0,12c,0,0,0,0,0 c0,mq,mr,ms,mt,0,mu,0,0,0,mv,mw,mx,e4,my,mz 1,n0,n1,n2,n3,n4,n5,ee,c3,n6,n7,n8,n9,na,1,1 1,nb,nc,nd,ne,nf,1,1,cj,ng,nh,ni,nj,nk,1,1 1,ao,nl,nm,nn,no,2y,1,1,np,nq,nr,ns,1,1,1 1,1,72,cb,1,1,5q,1,nt,ao,nu,nv,nw,d8,nx,1 1,1,1,2f,1,1,1,1,1,1,1,1,1,1,1,1 NAME close2 EXT 0,0 4 0,11 EXT 1,0 4 1,11 EXT 2,0 4 1,11 EXT 3,0 4 3,12 EXT 4,0 4 3,12 EXT 5,0 4 4,12 EXT 6,0 4 5,12 EXT 7,0 4 5,12 EXT 8,0 4 6,12 EXT 9,0 4 6,12 EXT 10,0 4 12,12 EXT 11,0 4 12,12 EXT 12,0 4 13,12 EXT 13,0 4 13,12 EXT 14,0 4 14,12 EXT 15,0 4 15,12 EXT 15,1 9 0,1 EXT 15,2 9 0,2 EXT 15,3 9 0,3 EXT 15,4 9 0,4 EXT 15,5 9 0,5 EXT 15,6 9 0,6 EXT 15,7 9 0,7 EXT 15,8 9 0,8 EXT 15,9 9 0,8 EXT 15,10 9 0,8 EXT 0,1 11 15,1 EXT 0,2 11 15,2 EXT 0,3 11 15,3 EXT 0,4 11 15,4 EXT 0,5 11 15,5 EXT 0,6 11 15,6 EXT 0,7 11 15,7 EXT 0,8 11 15,8 PAL 5 ROOM 11 0,0,0,0,0,0,0,0,0,e0,0,0,0,0,0,0 0,0,0,6m,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,6l,0,0 0,0,0,0,0,0,0,0,0,0,6s,0,0,0,0,0 0,dh,0,0,0,8a,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,10w,ny,nz,0,0,0,0,0,0,0,0,0 0,0,0,0,10x,o0,o1,0,0,0,0,0,0,0,dv,0 0,0,e1,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,o2,o3,o4,o5,o6,0,0,0,0,0,0,0 o7,o8,o9,oa,ob,oc,od,oe,of,0,0,0,0,0,og,fl oh,oi,oj,ok,ol,om,on,oo,op,oq,or,os,ap,ot,pb,112 1,lo,ou,ov,ow,ox,oy,oz,p0,p1,p2,p3,p4,p5,p6,72 1,1,1,1,1,1,1,1,e,1,1,p7,p8,ma,p9,pa 1,1,bm,1u,1,1,1,1,1,1,pb,pc,pd,pe,pf,1 1,b5,1,1,1,1,1,1,pb,1,1,57,pg,p0,ph,1 NAME close3 EXT 0,0 5 5,10 EXT 1,0 5 5,10 EXT 2,0 5 5,10 EXT 3,0 5 5,10 EXT 4,0 5 5,10 EXT 5,0 5 6,10 EXT 6,0 5 7,10 EXT 7,0 5 8,11 EXT 8,0 5 9,12 EXT 9,0 5 10,13 EXT 15,0 5 15,11 EXT 14,0 5 15,11 EXT 13,0 5 15,11 EXT 12,0 5 14,11 EXT 11,0 5 13,12 EXT 10,0 5 12,12 EXT 15,1 10 0,1 EXT 15,2 10 0,2 EXT 15,3 10 0,3 EXT 15,4 10 0,4 EXT 15,5 10 0,5 EXT 15,6 10 0,6 EXT 15,7 10 0,7 EXT 15,8 10 0,8 EXT 15,9 10 0,8 EXT 15,10 10 0,8 PAL 5 ROOM 12 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,12e,pm,pn,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,pt,pu,pv,pw,px,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,q2,q3,q4,q5,q6,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,qb,qc,qd,qe,qf,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,12d,qk,ql,qm,0,po,10c,10c,pl,0,qn,qo,qp,0,po pl,qq,qr,qs,qt,qu,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME ponytail_mer PAL 3 ROOM 13 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,r1,0,r2,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,r3,r4,r5,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,r6,r7,r8,r9,ra,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,rb,rc,rd,re,rf,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,0,rg,12g,12h,rh,po,10c,10c,pl,0,qn,qo,qp,0,po pl,ri,12g,12g,12g,rj,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME stingray PAL 3 ROOM 14 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,rk,12i,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,rl,rm,rn,ro,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,rp,rq,0,12j,rr,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,rs,rt,ru,rv,rw,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,rx,ry,rz,s0,s1,po,10c,10c,pl,0,qn,qo,qp,0,po pl,s2,s3,s4,0,0,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME tropical_fish PAL 3 ROOM 15 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,0,0,0,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,0,0,s5,s6,12k,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,s7,s8,s9,sa,sb,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,sc,sd,se,sf,sg,po,10c,10c,pl,0,qn,qo,qp,0,po pl,sh,si,sj,0,0,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME turtle PAL 3 ROOM 16 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,sl,sm,0,sn,so,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,sp,sq,sr,ss,st,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,su,0,12l,sv,0,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,sw,0,sx,sy,sz,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,t0,t1,t2,t3,t4,po,10c,10c,pl,0,qn,qo,qp,0,po pl,0,12m,0,t5,t6,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME octopus PAL 3 ROOM 17 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,12n,t7,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,t8,t9,ta,tb,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,tc,td,te,tf,tg,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,0,th,ti,tj,0,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,0,tk,tl,tm,0,po,10c,10c,pl,0,qn,qo,qp,0,po pl,tn,to,tp,tq,tr,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME shark_mer PAL 3 ROOM 18 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,ts,tt,tu,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,tv,12q,12p,tw,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,0,tx,ty,tz,u0,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,u1,u2,u3,u4,0,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,0,u5,u6,u7,0,po,10c,10c,pl,0,qn,qo,qp,0,po pl,u8,u9,ua,ub,12o,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME goldfish_mer PAL 3 ROOM 19 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,uc,ud,ue,uf,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,138,ug,uh,ui,uj,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,uk,ul,um,un,uo,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,up,uq,ur,us,0,po,10c,10c,pl,0,qn,qo,qp,0,po pl,ut,uu,uv,uw,0,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME glowfish_mer PAL 4 ROOM 20 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,ux,uy,uz,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,v0,12r,12t,v1,v2,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,12s,v3,v4,v5,v6,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,v7,v8,v9,va,vb,po,10c,10c,pl,0,qn,qo,qp,0,po pl,vc,vd,ve,vf,vg,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME jellyfish1 PAL 3 ROOM 21 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,12u,12v,12w,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,12x,vh,vi,vj,12y,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,12z,vk,vl,vm,vn,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,130,131,vo,vp,132,po,10c,10c,pl,0,qn,qo,qp,0,po pl,133,134,135,136,137,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME jellyfish2 PAL 4 ROOM 22 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,0,vq,0,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,0,vr,vs,139,0,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,vt,vu,vv,vw,vx,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,vy,vz,13a,w0,w1,po,10c,10c,pl,0,qn,qo,qp,0,po pl,w2,13b,w3,w4,w5,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME star PAL 7 ROOM 23 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,w6,13c,w7,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,0,w8,w9,wa,wb,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,wc,wd,we,wf,wg,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,wh,wi,wj,wk,wl,po,10c,10c,pl,0,qn,qo,qp,0,po pl,wm,wn,wo,wp,wq,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME jellyfish_mer PAL 4 ROOM 24 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,0,0,0,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,wr,13d,ws,wt,0,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,wu,wv,ww,wx,wy,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,wz,x0,x1,x2,x3,po,10c,10c,pl,0,qn,qo,qp,0,po pl,0,0,0,0,0,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME fish PAL 3 ROOM 25 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,x4,x5,x6,x7,x8,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,x9,xa,xb,xc,xd,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,xe,xf,xg,xh,10u,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,xi,xj,10t,xk,x9,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,0,xl,xm,xn,xe,po,10c,10c,pl,0,qn,qo,qp,0,po pl,xo,xp,xq,xr,xs,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME whale_shark PAL 3 ROOM 26 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,xt,xu,xv,0,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,xw,xx,xy,xz,y0,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,0,y1,y2,y3,y4,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,y5,y6,y7,y8,y9,po,10c,10c,pl,0,qn,qo,qp,0,po pl,ya,yb,yc,0,0,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME goby_fish PAL 7 ROOM 27 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,0,0,0,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,0,yd,ye,yf,yg,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,yh,yi,yj,yk,yl,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,ym,yn,yo,yp,yq,po,10c,10c,pl,0,qn,qo,qp,0,po pl,yr,13e,ys,yt,13f,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME bulleye_pistol_shrimp PAL 7 ROOM 28 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,0,yu,13h,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,yv,yw,13g,yx,yy,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,yz,z0,0,z1,z2,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,z3,z4,13j,z5,z6,po,10c,10c,pl,0,qn,qo,qp,0,po pl,z7,z8,z9,13i,za,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME blob PAL 4 ROOM 29 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c pi,pj,pj,pj,pj,pj,pk,10c,10c,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,10c,10c,pl,pp,pq,zv,pr,ps,po pl,0,0,0,0,0,po,10c,10c,pl,py,pz,q0,10v,q1,po pl,0,zb,zc,zd,13k,po,10c,10c,pl,0,q7,q8,q9,qa,po pl,ze,13n,zf,zg,zh,po,10c,10c,pl,0,qg,qh,qi,qj,po pl,13l,zi,13m,zj,zk,po,10c,10c,pl,0,qn,qo,qp,0,po pl,zl,zm,zn,zo,zp,po,10c,10c,pl,qv,qw,10v,12f,qx,po qy,qz,qz,qz,qz,qz,r0,10c,10c,qy,qz,qz,qz,qz,qz,r0 10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10k,10k,10k,10c,10c,10c,10c,10c,10c 10c,10c,10c,10c,10c,10c,10k,10c,10c,10k,10c,10c,10c,10c,10c,10c NAME gulper_eel PAL 4 ROOM 30 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 pi,pj,pj,pj,pj,pj,pk,1,1,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,1,1,pl,pp,pq,66,pr,ps,po pl,116,117,0,118,119,po,1,1,pl,py,pz,q0,10v,q1,po pl,rb,11a,11b,11c,11d,po,1,1,pl,0,q7,q8,q9,qa,po pl,11e,11f,11g,11h,11i,11j,1,1,pl,0,qg,qh,qi,qj,po pl,11k,11l,11m,11n,11o,11p,1,1,pl,0,qn,qo,qp,0,po pl,11q,11r,11s,11t,11u,po,1,1,pl,qv,qw,10v,12f,qx,po qy,11v,11w,11x,11y,11z,r0,1,1,qy,p0,p0,p0,p0,p0,r0 1,1,120,121,122,123,1,1,1,1,1,1,1,1,1,1 1,1,ao,124,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,10c,10c,1,1,1,1,1,1,1 NAME cat ITM 2 2,12 ITM 3 2,13 ITM 4 3,13 ITM 5 3,14 ITM 6 3,12 ITM 7 4,12 ITM 8 4,13 ITM 9 5,13 ITM a 5,12 ITM b 6,9 ITM c 6,10 ITM d 1,8 PAL 7 ROOM 31 1,aj,b3,br,c9,dq,dw,aj,f6,fc,br,c9,dq,b3,f6,1 j2,13o,13p,13q,13r,13s,13t,13u,13v,13w,13q,13r,13s,1be,13x,13y 13z,140,141,142,0,143,0,144,145,1bf,142,0,143,146,147,148 149,14a,14b,0,0,1bk,0,0,0,0,1bj,1bi,0,0,14f,14g 14h,14i,0,14j,14k,14l,14m,14n,14o,14p,14q,14r,14s,0,14t,14u 14v,14w,14x,1bl,14y,1bc,14z,150,151,152,1bm,153,154,0,155,156 157,158,0,0,0,159,15a,15b,1bo,15c,15d,1bd,15e,0,15f,15g j2,15h,15i,0,15j,15k,15l,15m,15n,15o,15p,15q,0,0,15r,15s 15t,15u,1b8,0,0,0,15v,0,0,15w,0,1bj,0,0,15x,15y 15z,160,1b9,0,161,162,163,1ba,164,165,166,167,0,0,168,169 149,14a,14b,16a,1bb,1bn,16b,1bp,16c,0,16d,1bb,0,0,14f,14g 14h,14i,0,0,0,0,16e,16f,16g,16h,16i,0,0,0,14t,14u 14v,14w,14x,0,0,0,1bh,16j,16k,1bq,1bg,16l,0,0,155,156 13z,16m,16n,0,0,0,0,0,0,0,0,0,0,1b7,mx,148 15t,16o,16p,16q,16r,16s,16t,16u,16v,16w,16q,16r,16s,1b6,16x,15y 1,16y,1b5,16z,170,171,172,173,174,175,16z,170,171,1b5,176,1 NAME title EXT 0,14 1 0,15 EXT 1,15 1 0,15 PAL 8 ROOM 32 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 pi,pj,pj,pj,pj,pj,pk,1,1,pi,pj,pj,pj,pj,pj,pk pl,0,0,0,0,0,po,1,1,pl,pp,pq,zv,pr,ps,po pl,0,1a0,1a1,1a2,1a3,po,1,1,pl,py,pz,q0,10v,q1,po pl,1a4,1a5,1a6,1a7,1a8,po,1,1,pl,0,q7,q8,q9,qa,po pl,1a9,1aa,1ab,1ac,1ad,po,1,1,pl,0,qg,qh,qi,qj,po pl,1ae,1af,1ag,1ah,1ai,po,1,1,pl,0,qn,qo,qp,0,po pl,1bs,1aj,1ak,1al,1am,po,1,1,pl,qv,qw,10v,12f,qx,po qy,p0,p0,p0,p0,p0,r0,1,1,qy,p0,p0,p0,p0,p0,r0 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,10c,10c,1,1,1,1,1,1,1 NAME urchin PAL 3 ROOM 33 1,27,1,1,1,e,1,1,1,1,1,28,1,29,1,1 1,1,2a,2b,1,1,2a,1,1,1,1,1,1,1,1,2c e,1,1,2d,2a,2e,1,1,1,28,1,2f,2g,2h,1,1 1,1,1,2i,1,1,1,2j,2k,2l,1,1,1,2m,2n,1 1,2o,1,1,2p,2q,2r,2s,2t,2u,2v,2w,2x,1,1,1 2y,28,2z,30,31,32,33,34,35,36,37,38,39,3a,3b,1 1,1,3c,3d,3e,3f,3g,3h,3i,3j,3k,3l,3m,3n,1,1 1,1,3o,3p,3q,0,3r,3s,0,0,0,3t,3u,0,3v,1 1,1,3w,3x,0,0,0,0,0,0,41,1bu,43,0,44,1 1,1,45,0,0,0,0,0,0,0,0,1bt,49,4a,4b,1 1,4c,1w,0,0,0,0,0,0,zq,0,4h,4i,4j,4k,4l 1,1,1,4m,4n,0,0,0,0,4q,4r,1br,0,4t,4u,1 1,4v,1,4w,4x,4y,4z,50,51,52,53,54,55,56,1,57 1,1,1,4v,58,59,5a,5b,5c,5d,5e,5f,5g,5h,5i,1 1,5j,1,5k,1,1,5l,5m,5n,5n,5o,5p,1,27,2c,5r 1u,10c,5s,10c,10c,10c,10c,5t,10c,10c,10c,10c,5u,5i,10c,5v NAME cave3 ITM g 3,15 ITM g 7,15 ITM g 11,15 EXT 4,15 34 5,15 PAL 0 ROOM 34 1,27,1,1,1,e,1,1,1,1,1,28,1,29,1,1 1,1,2a,2b,1,1,2a,1,1,1,1,1,1,1,1,2c e,1,1,2d,2a,2e,1,1,1,28,1,2f,2g,2h,1,1 1,1,1,2i,1,1,1,2j,2k,2l,1,1,1,2m,2n,1 1,2o,1,1,2p,2q,2r,2s,2t,2u,2v,2w,2x,1,1,1 2y,28,2z,30,31,32,33,34,35,36,37,38,39,3a,3b,1 1,1,3c,3d,3e,3f,3g,3h,3i,3j,3k,3l,3m,3n,1,1 1,1,3o,3p,3q,0,3r,3s,0,0,0,3t,3u,0,3v,1 1,1,3w,3x,0,3y,3z,40,0,0,41,1bu,43,0,44,1 1,1,45,0,0,46,47,0,0,0,0,1bt,49,4a,4b,1 1,4c,1w,0,0,4d,4e,4f,0,zq,0,4h,4i,4j,4k,4l 1,1,1,4m,4n,4o,4p,0,0,4q,4r,1br,0,4t,4u,1 1,4v,1,4w,4x,4y,4z,50,51,52,53,54,55,56,1,57 1,1,1,4v,58,59,5a,5b,5c,5d,5e,5f,5g,5h,5i,1 1,5j,1,5k,1,1,5l,5m,5n,5n,5o,5p,1,27,2c,5r 1u,10c,5s,10c,10c,10c,10c,5t,10c,10c,10c,10c,5u,5i,10c,5v NAME cave4 ITM g 7,15 ITM g 11,15 ITM h 9,15 EXT 9,15 35 10,15 PAL 0 ROOM 35 1,27,1,1,1,e,1,1,1,1,1,28,1,29,1,1 1,1,2a,2b,1,1,2a,1,1,1,1,1,1,1,1,2c e,1,1,2d,2a,2e,1,1,1,28,1,2f,2g,2h,1,1 1,1,1,2i,1,1,1,2j,2k,2l,1,1,1,2m,2n,1 1,2o,1,1,2p,2q,2r,2s,2t,2u,2v,2w,2x,1,1,1 2y,28,2z,30,31,32,33,34,35,36,37,38,39,3a,3b,1 1,1,3c,3d,3e,3f,3g,3h,3i,3j,3k,3l,3m,3n,1,1 1,1,3o,3p,3q,0,3r,3s,0,0,0,3t,3u,0,3v,1 1,1,3w,3x,0,3y,3z,40,0,0,41,42,43,0,44,1 1,1,45,0,0,46,47,0,0,0,0,48,49,4a,4b,1 1,4c,1w,0,0,4d,4e,4f,0,zq,0,4h,4i,4j,4k,4l 1,1,1,4m,4n,4o,4p,0,0,4q,4r,1br,0,4t,4u,1 1,4v,1,4w,4x,4y,4z,50,51,52,53,54,55,56,1,57 1,1,1,4v,58,59,5a,5b,5c,5d,5e,5f,5g,5h,5i,1 1,5j,1,5k,1,1,5l,5m,5n,5n,5o,5p,1,27,2c,5r 1u,10c,5s,10c,10c,10c,10c,5t,10c,10c,10c,10c,5u,5i,10c,5v NAME cave5 ITM i 8,9 ITM g 11,15 EXT 12,15 36 13,15 PAL 0 ROOM 36 1,27,1,1,1,e,1,1,1,1,1,28,1,29,1,1 1,1,2a,2b,1,1,2a,1,1,1,1,1,1,1,1,2c e,1,1,2d,2a,2e,1,1,1,28,1,2f,2g,2h,1,1 1,1,1,2i,1,1,1,2j,2k,2l,1,1,1,2m,2n,1 1,2o,1,1,2p,2q,2r,2s,2t,2u,2v,2w,2x,1,1,1 2y,28,2z,30,31,32,33,34,35,36,37,38,39,3a,3b,1 1,1,3c,3d,3e,3f,3g,3h,3i,3j,3k,3l,3m,3n,1,1 1,1,3o,3p,3q,0,3r,3s,0,0,0,0,0,0,3v,1 1,1,3w,3x,0,0,0,0,0,0,41,0,0,0,44,1 1,1,45,0,0,0,0,0,0,0,0,0,0,0,4b,1 1,4c,1w,0,0,0,0,0,0,zq,0,0,0,0,4k,4l 1,1,1,4m,4n,0,0,0,0,4q,4r,1br,0,4t,4u,1 1,4v,1,4w,4x,4y,4z,50,51,52,53,54,55,56,1,57 1,1,1,4v,58,59,5a,5b,5c,5d,5e,5f,5g,5h,5i,1 1,5j,1,5k,1,1,5l,5m,5n,5n,5o,5p,1,27,2c,5r 1u,10c,5s,10c,10c,10c,10c,5t,10c,10c,1,10c,5u,5i,10c,5v NAME cave6 ITM i 8,9 END 0 15,15 PAL 0 TIL 1 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 2 11111111 11111001 11111011 11110011 11110110 11100110 11111100 11111100 TIL 3 11111111 10011111 00000000 00000000 00000000 00000000 00000000 01100000 TIL 4 11001100 11110111 11111111 00011111 00000001 00111000 00111111 01111111 TIL 5 00000000 00000000 00000000 11100000 11111110 01111111 00011111 10011111 TIL 6 11111111 11111111 11111110 11111110 11111110 11111101 11111101 11111111 TIL 7 10111000 10110000 01100000 01000000 00000000 10000000 00000000 00000000 TIL 8 00100000 00000000 00000000 00000000 00000000 00000001 00000011 00000011 TIL 9 01111111 01111111 01111111 11111111 11111111 11111111 11111111 11111111 TIL 10 00000011 00000001 00000011 00000001 00000000 00000000 00000000 00000000 TIL 11 00111000 10011110 00011110 11111111 01111111 00001111 00000001 00000000 TIL 12 00000000 00000000 00000000 11110000 11111100 11111110 11111111 00111111 TIL 13 00000011 00010001 00000001 00000000 00001000 00101111 11111111 11111111 TIL 14 11111100 11110000 11100000 11100000 11000000 10000000 00000000 00000000 TIL 15 00000000 00000000 00000000 00000000 00000011 00000110 00000011 00000011 TIL 16 00000000 00000000 00111110 01111111 01111111 01111111 01111111 11111111 TIL 17 00000000 00000000 00000000 11000000 11100000 11110000 11110000 11111000 TIL 18 00001111 00000001 00000000 00000000 00000000 00000000 00000000 00000000 TIL 19 11111111 11111111 01111111 00001111 00000111 00000111 00000111 00000001 TIL 20 00000001 00000001 00000001 00000000 00000000 00000000 00000000 00000000 TIL 21 00000000 00000000 10000000 10000011 00001101 00111101 01111101 11111001 WAL false TIL 22 01111111 01111111 11111111 11111111 11111111 11111111 11111111 11111111 TIL 23 00000000 00000000 00000000 00000000 00000000 00000001 00001011 00001111 TIL 24 00000000 00000000 00000000 00000000 00000000 00000000 10010100 11011110 TIL 25 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001 TIL 26 11111001 11111001 11111011 11111011 11111111 11111111 11111111 11111111 TIL 27 11111111 11111111 11111111 11111111 11101111 11111111 11111111 11111111 WAL true TIL 28 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111011 TIL 29 11111111 11111111 11111111 11111111 11111111 11111110 11111111 11111111 TIL 30 11111111 11111111 11111110 11111110 11111100 11111110 11111111 11101111 WAL true TIL 31 11000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 > 11000000 00000000 00000000 00000000 00001000 00111000 11110000 11100000 TIL 32 00000000 00000000 00000000 00000000 00001100 00010100 00010100 00010100 TIL 33 00001000 00000000 00000000 00001000 00011100 00010100 00010100 00010100 > 00000000 00000000 00000000 00001000 00011100 00010100 00010100 00010100 TIL 34 00000001 00000010 00000010 00000011 00000011 00000011 00000001 00000111 TIL 35 10011000 00000100 00111100 11111100 11111100 11111100 11111000 11111111 TIL 36 00011100 00010100 00010100 00100010 01110001 01111111 01111111 00111110 TIL 37 00000000 00000000 00000000 00000000 00001000 00011100 00010100 00100010 TIL 38 00000000 00000010 00000001 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 39 00111111 01111011 11110011 00000001 00000000 00000000 00000000 00000001 > 00111111 00111011 01110011 01100001 01000000 00100000 00000000 00000000 TIL 40 00000000 00000000 00000000 00000000 01000000 10100000 01000000 00000000 > 00000000 00000000 00000000 00000000 00000000 01000000 10100000 01000000 NAME ponytail_mer1 COL 3 TIL 41 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME bubble COL 3 TIL 42 00000011 00000000 00000000 00000000 00000000 00000000 00000000 00000001 > 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000010 NAME cecaelia COL 3 TIL 43 11111110 10101000 11111000 01110000 00100000 01110000 11111000 11111100 > 10101000 11111000 01110000 00100000 01110000 11111000 11111100 11111010 NAME cecaelia COL 3 TIL 44 00111111 00011111 00011111 00011111 00011111 00011111 00011111 00001111 WAL true TIL 45 11111000 11111100 11111100 11111100 11111100 11111100 11111100 11111100 WAL true TIL 46 00000010 00000000 00000000 00000000 00000000 00000000 00000000 00000001 > 00000001 00000010 00000000 00000000 00000000 00000000 00000000 00000000 NAME ponytail_mer1 COL 3 TIL 47 01010100 01111100 00111000 00010000 01111100 10111010 10111010 00111001 > 00111001 01010100 01111100 00111000 00010000 01111100 10111010 10111010 NAME ponytail_mer1 COL 3 TIL 48 00000010 00000010 00000100 00000100 10000001 01000011 01100111 01111111 > 00000010 00000100 00000100 10000001 01000011 01100111 01111111 00111111 NAME cecaelia COL 3 TIL 49 11111010 11111010 11111001 11111001 11111100 11111110 11111111 01111011 > 11111010 11111001 11111001 11111100 11111110 11111111 01111011 00111000 NAME cecaelia COL 3 TIL 50 00010000 10010010 00001000 01001000 00000000 11111111 01111110 11111111 > 00000010 10000100 01000100 10001000 00000000 11111111 01111110 11111111 TIL 51 00000000 00000000 00000000 00000000 00000001 00000001 00000011 00000011 TIL 52 00000000 11111111 01111111 11111111 11111111 11111111 11111111 11111111 TIL 53 00000000 11100000 11000000 11100000 11110000 11110000 11111000 11011000 WAL true TIL 54 01010000 00100000 00000000 00000000 01001000 00010000 00000000 11111100 > 00100000 01010000 00100000 00000000 00010000 00001000 00000000 11111100 TIL 55 00000000 00000001 00000011 00000011 00000011 00000011 00000011 00000001 > 00000000 00000000 00000000 00000000 00001111 00011111 00100011 00000001 TIL 56 00000111 10000011 00000001 00000000 00000001 10000001 11000011 11100111 > 00000011 00000011 00000001 00000000 00000001 10000001 11000011 11100111 TIL 57 11111111 11111111 11011111 11111111 11111111 11111111 11111111 11111111 TIL 58 11111110 11111110 11111100 11111110 11111111 11111111 11111111 11111111 WAL true TIL 59 00110000 01110000 01100010 11100001 11100001 11110011 11111111 11111111 > 00001110 00011100 00111000 01111000 11110000 11100001 11111111 11111111 TIL 60 00000000 00010000 00001000 00001000 00001000 00000100 00000100 00000100 NAME sunbeam COL 11 TIL 61 00000000 00001000 00001000 00000100 00000100 00000010 00000010 00000010 NAME sunbeam COL 11 TIL 62 00100000 00100000 01000000 01000000 01000000 10000000 10000000 10000000 NAME sunbeam COL 11 TIL 63 00001000 00001000 00001000 00001000 00010000 00010000 00010000 00010000 NAME sunbeam COL 11 TIL 64 10000000 10000000 10000000 01000000 01000000 01000000 01000000 01000000 NAME sunbeam COL 11 TIL 65 00000100 00000010 00000010 00000010 00000001 00000001 00000001 00000000 NAME sunbeam COL 11 TIL 66 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 NAME sunbeam COL 11 TIL 67 00000001 00000001 00000000 00000000 00000000 00000000 00000000 00000000 NAME sunbeam COL 11 TIL 68 00000000 00000000 10000000 10000000 10000000 01000000 01000000 00100000 NAME sunbeam COL 11 TIL 69 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME sunbeam COL 11 TIL 70 00000000 00100000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 71 00000111 00000011 00000011 00100011 00111111 00100011 11111001 10001000 WAL true TIL 72 11111111 11111111 11111111 11111111 11111111 11111111 11111111 01111111 WAL true TIL 73 00110001 00110000 01100000 00000000 00000000 00000000 00000000 00000000 > 01100011 01100000 11000000 00000000 00000000 00000000 00000000 00000000 NAME golfish_mer1 COL 8 TIL 74 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME golfish_mer1 COL 8 TIL 75 00000001 00000000 00000001 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 76 01110000 11011000 01110000 00000000 00000000 00000000 00000000 00000000 > 10111000 01101100 10111000 00000000 00000000 00000000 00000000 00000000 TIL 77 00000000 00000000 00000000 00000000 01000000 00000000 00000000 00000000 TIL 78 00000000 00000000 00000000 00000000 00000000 00000001 00000000 00000000 TIL 79 11111000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 80 00000000 00000011 00000111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 81 10000000 10000000 10000000 00000000 00000000 00000000 00000000 00000000 TIL 82 00011000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 83 00000110 00000011 00000001 00000001 00000001 00000001 00000000 00000000 TIL 84 00000000 00000000 00000000 00000000 00001111 00011101 00011101 00001111 TIL 85 00000000 00000000 00000000 00000000 10110000 11000000 11000000 10110000 TIL 86 00000000 00000000 00000000 00000011 00000111 00001110 00000111 00000111 TIL 87 00000000 00000000 00000000 10000000 11010000 11100000 11010000 10010000 TIL 88 00000000 00000000 00000000 00000000 00000000 00011110 00111111 01110111 TIL 89 00000000 00000000 00000000 00000000 00000000 00000000 01000000 00000000 TIL 90 00000000 00000000 00000000 00000000 00000000 00000000 00000110 00000000 TIL 91 00000000 00000000 00000000 00000000 00001001 00000111 00000111 00001001 TIL 92 00000000 00000000 00000000 00000000 11100000 11110000 11110000 11100000 TIL 93 00000000 00000000 00000000 00000000 00000000 00000000 01111000 01111100 TIL 94 00000000 00000000 00000000 00000000 10000000 11000000 01100000 01100000 TIL 95 00000000 00000011 00000000 00000000 00000000 00000000 00000000 00000000 TIL 96 11101110 01111100 00111000 00000000 00000000 00000000 00000000 00000000 TIL 97 00000000 00000000 00000000 00000000 01111000 01111000 10000110 10001001 TIL 98 00000000 00000010 00000010 00000001 00000000 00000000 00000000 00000010 TIL 99 00000000 00000000 00000000 11110000 11111000 01111000 00111000 00111100 TIL 100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 > 00000000 00000000 00000000 00000000 00000000 00000000 10000000 01000000 NAME octopus COL 4 TIL 101 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 NAME octopus COL 4 TIL 102 00000000 00000000 00000000 00000000 00000000 01000000 10100000 01000000 > 00000000 00000000 00000000 00000000 00000000 10000000 01000000 10000000 NAME tropical_fish COL 5 TIL 103 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000000 NAME tropical_fish COL 5 TIL 104 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00100000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 105 00000000 00000000 00000000 00000000 00000001 00000001 00000001 00000001 TIL 106 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000000 TIL 107 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000010 00000000 00000001 00000000 00000000 00000000 00000000 00000000 NAME fish COL 7 TIL 108 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME fish COL 7 TIL 109 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 > 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000011 NAME golfish_mer1 COL 8 TIL 110 00000000 00000000 00000000 00000000 00000001 00000111 00001111 00001111 NAME ground COL 2 TIL 111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME ground WAL true COL 2 TIL 112 11111111 11111111 11111111 11111111 11111101 11111111 11111111 11111111 WAL true TIL 113 00100000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME jellyfish1 COL 9 TIL 114 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 > 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000001 NAME jellyfish1 COL 9 TIL 115 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 > 00000000 00000000 00000000 00000000 00000000 00000000 00000001 01010000 NAME stingray1 COL 10 TIL 116 00000000 00000000 00000000 00000000 00000111 00000100 00000100 00000100 NAME cat1 COL 2 TIL 117 00000000 00000000 00000000 00000000 11000000 00110000 00001100 11000010 NAME cat1 COL 2 TIL 118 00000000 00000000 00000000 00000000 00000011 00001100 00010000 00100001 NAME cat1 COL 2 TIL 119 00000000 00000000 00000000 11100000 00100000 00100000 10100000 10100000 NAME cat1 COL 2 TIL 120 11101000 11101000 11101000 11110100 11110100 11111010 11111101 11111110 TIL 121 01011111 00101111 00101111 00010111 00010111 00010111 11101011 10101011 TIL 122 11101000 11010000 11010000 11010000 10101111 10101010 11001010 11110101 TIL 123 00101111 01011111 01011111 10111111 01111111 11111111 11111111 11111111 TIL 124 10100111 01011111 11111111 11111111 11111111 11111111 11111111 11111111 TIL 125 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00001000 00000110 00000011 TIL 126 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 10000000 00000000 00000000 TIL 127 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 128 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00100000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 129 10000000 00000000 00000000 00000000 00000000 00000000 00001111 11111111 > 00000000 00000000 00000000 00000000 00000000 00000000 00001111 11111111 TIL 130 01000000 10000000 10000000 10000000 10000000 01100011 00011101 00000001 NAME jellyfish2 COL 4 TIL 131 00000000 00000000 00000000 00000000 11100000 00010000 00001100 10000011 NAME jellyfish2 COL 4 TIL 132 00000001 00000001 00000001 00000001 11000010 00111100 00010000 00110000 NAME jellyfish2 COL 4 TIL 133 00000000 00000000 00000001 00000011 00000110 00000100 00000110 00000010 NAME jellyfish2 COL 4 TIL 134 10000001 10000001 10000001 00000000 00000000 00000000 00000000 00000000 NAME jellyfish2 COL 4 TIL 135 00000000 00000000 10000000 11000000 01000000 11000000 10000000 10000000 NAME jellyfish2 COL 4 TIL 136 01000000 01110000 00011000 00001000 00001000 00011000 00110000 00100000 NAME jellyfish2 COL 4 TIL 137 00100000 00110000 00011000 00001000 00011000 00110000 00100000 00100000 NAME jellyfish2 COL 4 TIL 138 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001 NAME glowfish COL 3 TIL 139 00000000 00000000 00000000 00000000 00000000 10000000 10000000 01000000 NAME star COL 3 TIL 140 00010000 00001000 00000110 00000001 00000000 00000000 00000000 00000000 TIL 141 00010000 00010000 00100000 11000000 00000000 00000000 00000000 00000000 TIL 142 00001001 00000110 00000000 00000000 00000000 00000000 00000000 00000000 TIL 143 00100100 00011000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 144 10010000 01100000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 145 00000010 00000001 00000000 00000000 00000000 00000000 00000000 00000000 TIL 146 00000010 00000010 00000001 00000000 00000000 00000000 00000000 00000000 TIL 147 00000010 00000100 00011000 11100000 00000000 00000000 00000000 00000000 TIL 148 00101111 00101111 00101111 00101111 00101111 00101111 00101111 00101111 TIL 149 11111101 11111101 11111110 11111110 11111111 11111111 11111111 11111111 TIL 150 00010000 00010000 10010000 00010000 00010000 11100000 00000000 00000000 NAME letter COL 5 TIL 151 00010010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 152 00100000 00010000 00000000 00000000 00000000 00000000 00000000 00000001 NAME letter COL 5 TIL 153 10001000 00000100 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 154 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00011101 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00111010 NAME fishies COL 3 TIL 155 00000000 00111100 01000010 10000001 10000001 01000010 00111100 00000000 TIL 156 01011111 01011111 10111111 01111111 01111111 10111111 01011111 01011111 TIL 157 11111101 11111101 11111101 11111101 11111101 11111101 11111110 11111110 TIL 158 00000000 00000000 00000000 00000000 00000000 00000000 10000000 10001111 TIL 159 01000000 10100000 10100000 10100000 10100000 10100000 10100010 11000000 NAME letter COL 5 TIL 160 10100000 01010000 10001111 10000000 00000000 00000000 00000000 00000000 TIL 161 00000000 00000000 00000001 00000010 00000010 00000001 00000000 00000010 NAME letter COL 5 TIL 162 00000000 00000000 11000011 00100100 00000111 11000100 00100100 00100011 NAME letter COL 5 TIL 163 00000000 00000000 10000111 01001000 11000000 00000111 01001000 10001000 NAME letter COL 5 TIL 164 00000000 00001100 10001010 10000110 10000011 10010010 10010010 10010010 NAME letter COL 5 TIL 165 00000010 00100010 00000111 00100010 10100010 00100010 00100010 00010001 NAME letter COL 5 TIL 166 00000000 00000000 10001110 00010001 00010000 00010000 00010000 10010001 NAME letter COL 5 TIL 167 00100000 00100000 00101100 00110010 00100010 00100010 00100010 00100010 NAME letter COL 5 TIL 168 10000001 01000010 00111100 00000000 00000000 00000000 00000000 00000000 TIL 169 01111111 10111111 01011111 01011111 00101111 00101111 00101111 00101111 TIL 170 00000000 11000000 00111111 11000000 11111111 11111111 11111111 11111111 TIL 171 00100100 11011011 00111100 11111111 11111111 11111111 11111111 11111111 TIL 172 00000000 00000011 11111100 00000011 11111111 11111111 11111111 11111111 TIL 173 10010000 01101100 11110011 11111100 11111111 11111111 11111111 11111111 TIL 174 00000010 00001101 11110011 00001111 11111111 11111111 11111111 11111111 TIL 175 01000000 10110000 11001111 11110000 11111111 11111111 11111111 11111111 TIL 176 00000010 00001101 11110011 00000111 11111111 11111111 11111111 11111111 TIL 177 00000000 00000000 00000000 00000000 00000000 00000000 11111111 00000000 TIL 178 00000000 00000000 00000000 00000000 00000000 00000000 11000000 00110000 TIL 179 00000000 00000000 00000000 00000000 00000000 00000000 00111111 11000000 TIL 180 00000010 00000010 00000001 00000001 00000000 00000000 00000000 00000000 TIL 181 11111111 11111111 01111111 01110000 10101111 01011111 01011111 10101111 TIL 182 11111111 11111111 11111111 11111111 01111111 10111111 10111111 01111111 TIL 183 11111111 11111111 11111111 11111111 11111011 11111011 11111011 11111011 TIL 184 11111111 11111111 11111111 11111111 11011111 11011111 11011111 11011111 TIL 185 11111111 11111111 11111111 11111111 01111111 01111111 01111111 01111111 TIL 186 11111111 11111111 11111111 11000011 10111101 01111110 01111110 10111101 TIL 187 11010000 11010000 10100000 10100000 01000000 10000000 10000000 01000000 TIL 188 00000001 00000001 00000010 00000010 00000010 00000010 00000010 00000010 TIL 189 00000000 00000000 00000000 00000000 00000001 00000011 00000011 00001110 TIL 190 11111111 11111111 11111111 11111111 11111111 11111111 01111111 01110000 TIL 191 10111111 01011111 01011111 01011111 01011111 01011111 01011101 00111111 TIL 192 11110101 11110101 11110101 11110101 11110101 11110101 11110011 11110111 TIL 193 11111111 11111111 11111111 11111111 11111111 11111111 11100011 11011101 TIL 194 11111101 11111101 11111101 11111101 11111101 11111101 11111100 01111101 TIL 195 01111111 01111111 01111111 01111111 01111111 01111111 11111111 11111110 TIL 196 11111111 11111111 11111111 11111111 11111111 11111111 00011111 11101111 TIL 197 11001001 11100010 11111111 11111111 11111111 11111111 11111111 11111111 TIL 198 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11000011 TIL 199 11010000 11010000 11010000 11010000 11010000 11010000 10100000 10100000 TIL a 11111111 10000001 10000001 10011001 10011001 10000001 10000001 11111111 TIL b 11011111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL c 11111111 11110111 11100110 11100110 11101100 11001100 10011100 10111000 TIL d 00000011 00000011 00001111 00001111 00001111 00011111 00111111 00111111 TIL e 11111111 11111111 11111111 11111111 11111011 11111111 11111111 11111111 WAL true TIL f 00111000 11111000 11110000 11110000 11110000 11110000 11100000 11100000 TIL g 00000000 00000000 00000000 00000000 00000001 00000000 00000001 00000111 TIL h 00111111 11111111 00111111 11111011 01111101 11111001 11110001 11100001 TIL i 11111111 11111111 11111111 11111111 11100111 11100111 11000001 11000011 TIL j 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111001 TIL k 11100000 11100000 11100000 11110000 11110000 11110001 11100000 11111000 TIL l 00001111 00000111 00001111 00011111 11111100 11111110 01111110 01111111 TIL m 11000001 11000000 11000000 00000000 10000000 10000000 00000000 10000000 TIL n 10000111 00000111 00001111 00000011 00000011 00000111 00000111 00000111 TIL o 11111011 11111001 11111011 11111111 11111111 11111111 11110011 11110111 TIL p 11111111 11111111 11111111 11111110 11111000 11110000 11100000 10000000 TIL q 11111111 11000001 00000000 00000000 00000000 00000000 00000000 00000000 TIL r 11111111 11111111 00111111 00000011 00000000 00000000 00000000 00000000 TIL s 11111111 11011111 10011110 00011100 00111000 00000000 00000000 00000000 TIL t 11111111 11000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL u 11111111 01111111 00000111 00000111 00001111 00000001 00000001 00000011 TIL v 11111111 00111110 00000000 00100000 10000000 11000000 11111000 01111000 TIL w 00000001 00000011 00000011 00000001 00000000 00000000 00010000 00000001 TIL x 11111111 11111111 11111111 11111111 11011111 11111111 11111111 11111111 WAL true TIL y 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111110 WAL true TIL z 11111111 11111100 11111000 11110000 11000000 10000000 00000000 00000000 WAL true TIL 1a 11111110 11111100 11111000 11110000 11100000 11000000 11000000 10000000 TIL 1b 10111111 10111111 01011111 00101111 00011100 00001111 00000001 00000000 TIL 1c 11111000 11111000 11111000 11111000 11110000 11100000 11011000 00011000 TIL 1d 00000001 00000000 00000001 00001001 00011011 00011111 00111111 00111111 TIL 1e 11111111 11111110 11111100 11111000 11110000 11100000 11100000 11100000 TIL 1f 00000000 00000000 00000000 00000000 00000001 00000001 00000000 00000000 TIL 1g 01110011 01100011 11100011 11111111 11111111 11111111 11111111 01111111 TIL 1h 11111111 11111111 11111111 11111111 11111110 11111100 11111100 11111000 WAL false TIL 1i 11000000 10000000 10000000 00000000 00000000 00000000 00000000 00000000 TIL 1j 01111111 00111111 00111111 00011111 00001111 00001111 00000111 00000111 WAL false TIL 1k 11111111 11111111 11111111 11111111 11111111 11111110 11111100 11111000 TIL 1l 11110000 11100000 11000000 10000000 00000000 00000000 00000000 00000000 TIL 1m 00000000 00000000 00000000 00000000 00011000 00111000 00111000 01110011 TIL 1n 00000000 00000000 00000000 10000000 11000000 11000000 10000000 10000000 TIL 1o 00000011 00000011 00000011 00000001 00000001 00000001 00000001 00000001 TIL 1p 11110000 11100000 11000000 11000000 10000000 10000000 00000000 00000000 TIL 1q 00000000 00000000 00000011 00000000 00000000 00000000 00000000 00000000 TIL 1r 01100011 01100011 11001110 11011110 11011111 11111111 00111111 00000011 TIL 1s 10000000 00000000 00000000 00100000 11100000 11110000 11110000 11110000 TIL 1t 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000000 TIL 1u 11111111 11111111 11111111 11111111 11110111 11111111 11111111 11111111 TIL 1v 00000011 00000000 00000000 00000000 00000000 00000000 00000001 00000000 TIL 1w 11000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 1x 00000000 00000001 00000001 00000001 00000000 00011000 01111101 01111101 TIL 1y 11110111 11110111 11111111 11111111 11111111 11111111 11111111 11111111 TIL 1z 00000010 00000110 00001110 00001100 00001001 00000000 00000000 00000000 TIL 2a 11111111 11111111 11110111 11111111 11111111 11111111 11111111 11111111 WAL false TIL 2b 11111101 11111111 11111111 11111111 11111111 11111111 11111111 11111111 TIL 2c 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11110111 WAL true TIL 2d 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11011111 TIL 2e 11111111 11111111 11111111 11111111 11111111 11111111 11111101 11111111 TIL 2f 11111111 11111111 11111111 11111111 11111111 11101111 11111111 11111111 TIL 2g 11111111 11111111 11111111 11111111 11111111 11111111 11110111 11111111 WAL true TIL 2h 11111111 11111111 11111111 11101111 11111111 11111111 11111111 11111111 WAL true TIL 2i 11111111 11111101 11111111 11111111 11111111 11111111 11111111 11111111 TIL 2j 11111111 11111111 11111111 11111111 11111111 11111111 11111111 10001111 WAL true TIL 2k 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11000001 WAL true TIL 2l 11111011 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 2m 11111111 11111111 11111111 11111111 11111111 11111111 11011111 11111111 WAL true TIL 2n 11111111 11110111 11111111 11111111 11111111 11111111 11111111 11111111 TIL 2o 11111111 11111111 11111111 11111011 11111111 11111111 11111111 11111111 TIL 2p 11111111 11111111 11111111 11111111 11111111 11111110 11111000 11100000 WAL true TIL 2q 11111111 11111111 11111000 11000000 10000000 00000000 00000000 00000000 WAL false TIL 2r 11111100 00011100 00011100 00001110 00001110 00000110 00000110 00000100 > 11111100 00011000 00011100 00011100 00001100 00001110 00000110 00000011 TIL 2s 00011111 00011000 00110000 00100000 00000000 00000000 00000000 00000000 > 00011111 00011000 00010000 00001000 00000000 00000000 00000000 00000000 TIL 2t 00000000 00000000 00000000 00000000 00100000 01110000 01010000 01010000 TIL 2u 00001111 00000000 00000000 00000000 00000000 00000000 00000000 00001000 TIL 2v 11111111 11111111 00000011 00000000 00000000 00000000 00000000 00000000 WAL false TIL 2w 11111111 11111111 11111111 01111111 00000111 00000011 00000000 00000000 WAL true TIL 2x 11111111 11111111 11111111 11111111 11111111 11111111 01111111 00111111 WAL true TIL 2y 11111111 11111110 11111111 11111111 11111111 11111111 11111111 11111111 TIL 2z 11111111 11111111 11111111 10111111 11111111 11111111 11111111 11111111 WAL true TIL 3a 11111111 11111111 11111111 11111111 11111111 11111111 01111111 11111111 WAL true TIL 3b 11111111 11111011 11111111 11111111 11111111 11111111 11111111 11111111 TIL 3c 11111111 11111111 11111111 11111111 11111111 11111110 11111110 11111110 WAL true TIL 3d 11000011 10000000 10000000 00000000 00000000 00000000 00000000 00000000 TIL 3e 10000000 11000000 01000000 00100000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 3f 00010100 00110010 01000111 01111111 01111111 11111110 10000000 01111111 TIL 3g 00100010 00111010 00111110 00111110 11111111 00000000 00000000 11000000 TIL 3h 00000100 00000100 00000100 00000011 11110000 00010000 00010000 00010000 WAL true TIL 3i 00000000 00000000 00000000 11111111 00000000 00000000 00000000 00000000 WAL false TIL 3j 11111111 00000000 00000000 11111111 00000000 00000000 00000000 00000000 WAL false TIL 3k 10111110 01111111 00000000 11111111 00000000 00000000 00000000 00000000 TIL 3l 00000000 11000000 01000000 10000000 00000000 00000000 00000000 00000000 TIL 3m 00000011 10001111 01111111 00111111 00000000 00000000 00000000 00000000 > 00000001 00000111 00001111 00011111 00011100 00010000 00000000 00000000 TIL 3n 11111111 11111111 11111111 10000111 00000011 00000001 00000001 00000000 WAL false TIL 3o 11111111 11111111 11111111 11111101 11111100 11111000 11111000 11111000 WAL true TIL 3p 10000000 11100000 11110000 11111100 01111111 00001110 00000000 00000000 > 00000000 11000000 11110000 11111000 00111000 00011100 00001100 00001000 TIL 3q 00000000 00000000 00000000 10000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 3r 00111111 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 3s 11100000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 3t 00000000 00000000 00000000 00000000 00000000 00000011 00000111 00000111 > 00000000 00000000 00000000 00000000 00000011 00000111 00000111 00000011 NAME cecaelia COL 3 TIL 3u 00000000 00000000 00000000 00000000 00000000 00000110 10001111 11111111 > 00000000 00000000 00000000 00000000 00000110 10001111 11111111 11111110 NAME cecaelia COL 3 TIL 3v 11111111 01111111 01111111 01111111 00111111 00111111 00111111 00111111 WAL true TIL 3w 11111110 01111111 11111111 11111000 11111000 11111000 11111000 11111000 > 11111100 01111110 11111111 11111011 11111001 11111000 11111000 11111000 WAL true TIL 3x 00000000 11000000 10000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 3y 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000001 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 NAME ponytail_mer1 COL 3 TIL 3z 00000000 00000000 00000000 00000000 00000000 11000000 11000000 00111001 > 00000000 00000000 00000000 00000000 00000000 00000000 11000000 11000000 NAME ponytail_mer1 COL 3 TIL 4a 00000000 00000000 00000000 00010000 00100000 11100000 11000000 10000100 > 00000000 00000000 00010000 00100000 11100000 11000000 10000100 11001000 NAME cecaelia COL 3 TIL 4b 00001111 00001111 00001111 00001111 00001111 00001111 00001111 00001111 WAL true TIL 4c 11111111 11111111 11111110 11111110 11111110 11111110 11111110 11111111 WAL false TIL 4d 00000001 00000010 00000000 00000000 00000000 00000000 00000000 00000001 > 00000001 00000001 00000010 00000000 00000000 00000000 00000000 00000000 NAME ponytail_mer1 COL 3 TIL 4e 01111001 01111000 01111000 01110000 01100000 01000000 11100000 10110000 > 00111001 01111001 01111000 01111000 01110000 01100000 01000000 11100000 NAME ponytail_mer1 COL 3 TIL 4f 00000000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 10000000 00000000 00000000 00000000 00000000 00000000 NAME ponytail_mer1 COL 3 TIL 4g 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01000000 TIL 4h 00111111 00011101 00000001 00000010 00010010 00001100 00000111 00000000 > 00011101 00000001 00000010 00010010 00001100 00000111 00000000 00000000 NAME cecaelia COL 3 TIL 4i 00111000 00111100 01011111 01011100 01001100 10001100 00011000 00100000 > 00111100 01011111 01011100 01001100 10001100 00011000 00100000 00000000 NAME cecaelia COL 3 TIL 4j 11001000 00111000 00010000 11100000 00000000 00000000 00000000 00000000 > 00111000 00010000 11100000 00000000 00000000 00000000 00000000 00000000 NAME cecaelia COL 3 TIL 4k 00001111 00001111 00001111 00001111 00001111 00011111 00011111 00011111 WAL true TIL 4l 11111111 11111111 11111111 11111111 10111111 11111111 11111111 11111111 TIL 4m 10000000 10000000 11000000 11000000 11000000 11100000 11110000 11110000 TIL 4n 00000000 00000000 00000000 00000000 00000000 00000010 00001001 00010001 > 00000000 00000000 00000000 00000000 00000000 00000000 10000000 01000000 TIL 4o 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME ponytail_mer1 COL 3 TIL 4p 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 10110000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME ponytail_mer1 COL 3 TIL 4q 01000000 10100000 01001000 00001000 10001000 01001000 01000100 00100100 > 01010000 00100001 00000100 00001000 01001000 01000100 00100100 00101000 NAME caldron_smoke COL 3 TIL 4r 00000000 01000000 10100000 01000000 00000000 01000000 10000000 10000000 > 10000000 01000000 10000000 00000000 00000000 01000000 01000000 10000000 NAME caldron_smoke COL 3 TIL 4s 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00100000 TIL 4t 00000001 00010001 00001001 00001100 00001100 00000110 00000110 00000111 > 00000000 00000011 00000101 00000000 01111100 10111110 00001111 00000111 TIL 4u 00011111 10011111 11111111 11111111 01111111 00111111 01111111 01111111 > 00011111 11011111 11111111 01111111 00111111 00111111 01111111 11111111 WAL true TIL 4v 11111111 01111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 4w 11111000 11111100 11111100 11111110 11111111 11111111 11111111 11111111 WAL true TIL 4x 00110001 01100001 01100001 01110011 01110011 10110111 11110111 11110110 > 01100000 00110000 00110000 00110001 00111001 10111011 11111011 11110111 TIL 4y 10000000 10000000 10000000 00000000 00000100 00001000 00011000 00110000 > 01100000 11000000 11000000 10000000 10000000 00000000 00000001 00000110 TIL 4z 00000001 00000010 00000001 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000001 00000000 00000000 00000000 00000000 00000000 TIL 5a 00000001 00000001 00000001 00000001 10000000 10000000 10000000 11000000 > 00000001 00000001 00000001 00100001 11000000 11000000 10000000 11000000 TIL 5b 11111111 11111101 11111101 11111011 11111111 00000000 00000000 00000000 WAL true TIL 5c 10000011 10000011 10000011 10000001 00000000 00000000 00000000 00000000 TIL 5d 11111111 11111111 11111111 11111111 11111111 00000000 00000000 00000000 WAL true TIL 5e 11011000 11011000 10111000 11110000 11100000 00000000 00000000 00000000 WAL true TIL 5f 01111000 11111100 11110100 11101100 01111000 00000000 00000000 00000000 WAL true TIL 5g 00100001 00010000 00011000 00011100 00001100 00001111 00001111 00011111 > 00000000 00100000 01000000 01100000 01110000 00111111 00011111 00011111 TIL 5h 11111111 11111111 01111111 01111111 11111111 11111111 11111111 11111111 WAL true TIL 5i 11111111 11111111 11111111 11111110 11111111 11111111 11111111 11111111 TIL 5j 11110111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 5k 11111111 11111111 11111101 11111111 11111111 11111111 11111111 11110111 WAL true TIL 5l 11111100 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 5m 00000000 11000000 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 5n 00000000 00000000 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 5o 00000000 00000111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 5p 00000001 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 5q 11111111 11111111 11101111 11111111 11111111 11111111 11111111 11111111 TIL 5r 11111111 11111101 11111111 11111111 11111111 10111111 11111111 11111111 WAL true TIL 5s 11111111 11111111 11111111 11110111 11111111 11111111 11111111 11111111 WAL false TIL 5t 11111111 11111111 11111111 11011111 11111111 11111111 11111111 11111111 WAL false TIL 5u 11111111 11111110 01111111 11111111 11111111 11111111 11111111 11111111 WAL false TIL 5v 11111111 11111111 11111101 11111111 11111111 01111111 11111111 11111111 TIL 5w 00000000 00000100 00001000 00001000 00001000 00010000 00010000 00100000 NAME sunbeam COL 11 TIL 5x 00000000 00000100 00000100 00000100 00000100 00000100 00001000 00001000 NAME sunbeam COL 11 TIL 5y 00000000 00000001 00000001 00000001 00000001 00000000 00000000 00000000 NAME sunbeam COL 11 TIL 5z 00000000 00000000 00000000 00000000 00000000 10000000 10000000 10000000 NAME sunbeam COL 11 TIL 6a 00010000 00010000 00100000 00100000 00100000 00100000 00100000 00000000 NAME sunbeam COL 11 TIL 6b 01000000 00100000 00100000 00100000 00100000 00100000 00000000 00000000 NAME sunbeam COL 11 TIL 6c 10000000 10000000 10000000 01000000 01000000 01000000 00100000 00100000 NAME sunbeam COL 11 TIL 6d 00100000 00100000 00010000 00010000 00000000 00000000 00000000 00000000 NAME sunbeam COL 11 TIL 6e 00100000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 6f 00000000 00000000 00000000 00000000 00000000 00011101 00110110 00011101 > 00000000 00000000 00000000 00000000 00000000 00111010 01101100 00111010 TIL 6g 00000000 00000000 00000000 00000000 00000000 00010000 00000000 00000000 TIL 6h 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000010 > 00000000 00000000 00000000 00000000 00000000 00000000 00000010 00000101 NAME fish COL 7 TIL 6i 00000000 00000000 01110100 11011000 01110100 00000000 00000000 00000000 > 00000000 00000000 11101000 10110000 11101000 00000000 00000000 00000000 TIL 6j 00000000 00000000 00000000 00111010 01101100 00111010 00000000 00000000 > 00000000 00000000 00000000 01110100 11011000 01110100 00000000 00000000 TIL 6k 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01110100 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11101000 TIL 6l 00000000 00010000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 6m 00000000 00000000 00000000 00000000 00000001 00000000 00000000 00000000 TIL 6o 00001110 00011011 00001110 00000000 00000000 00000000 00000000 00000000 > 00011101 00110110 00011101 00000000 00000000 00000000 00000000 00000000 TIL 6p 10000000 00000111 10001101 00000111 00000000 00000000 00000000 00000000 > 00000000 00001110 00011011 00001110 00000000 00000000 00000000 00000000 TIL 6q 00000000 01000000 10000000 01000000 00000000 00000000 00000000 00000000 > 00000000 10000000 00000000 10000000 00000000 00000000 00000000 00000000 TIL 6r 11011000 01110100 00000000 00000000 00000000 00000000 00000000 00000000 > 10110000 11101000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 6s 00000000 00000000 00000000 00000100 00000000 00000000 00000000 00000000 TIL 6t 00000000 00000000 00000000 00000011 00000110 00000011 00000000 00000000 > 00000000 00000000 00000000 00000111 00001101 00000111 00000000 00000000 TIL 6u 00000000 00000000 00000000 10100000 11000000 10100000 00000000 00000000 > 00000000 00000000 00000000 01000000 10000000 01000000 00000000 00000000 TIL 6v 00000000 00000111 00011111 00111111 01111111 11111111 11111111 11111111 WAL true TIL 6w 00000001 00000001 00000011 00000011 00000011 00000111 00000111 00000111 WAL true TIL 6x 00000000 00000000 00000000 00000011 00001111 00011111 11111111 11110000 > 00000000 00000000 00000000 00000110 00011111 00111111 11111110 11100000 NAME golfish_mer1 COL 8 TIL 6z 00010000 00101000 00010000 00000000 01000000 00000000 00000000 00000000 > 00100000 01010000 00100000 00000000 10000000 00000000 00000000 00000000 NAME golfish_mer1 COL 8 TIL 7a 00000011 00000001 00000001 00000001 00000001 00000001 00000011 00000111 TIL 7b 00000101 00000011 00000101 00000000 00000000 00000000 00000000 00000000 > 00000010 00000001 00000010 00000000 00000000 00000000 00000000 00000000 TIL 7c 11000000 01100000 11000000 00000000 00000000 00000000 00000000 00001011 > 11100000 10110000 11100000 00000000 00000000 00000000 00000000 00000101 TIL 7d 00111111 01111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 7e 11100000 11111100 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 7f 00000000 00000000 00000001 10000010 11000100 11100100 11110100 11111110 TIL 7g 00000000 00000000 11110000 01001100 11000010 00001010 10110001 01000101 TIL 7h 00000110 00001011 00000000 00000000 00000000 00000000 00000000 00000000 > 00000011 00000101 00000000 00000000 00000000 00000000 00000000 00000000 TIL 7i 11000000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 > 01100000 11000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 7j 00000000 00000000 00000000 00000011 00000100 00000100 00000110 00111100 TIL 7k 00000000 00000000 00000000 10000000 01000000 10100000 00010000 01010000 TIL 7l 00000000 00001000 00000111 00000011 00000001 00001001 00010000 00010000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000110 00001100 TIL 7m 00000000 00000000 00000000 10000000 10000001 11000111 11101111 11111111 > 00001000 00110000 01100000 11000000 11000001 11000111 11101111 11111111 TIL 7n 00000001 00000011 00001111 00111111 11111111 11111111 11111111 11111111 WAL true TIL 7o 10001101 11100010 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 7p 00000000 00000000 11110000 11111100 11111110 11111111 11111111 11111111 WAL true TIL 7q 00000010 00000100 00001100 00011100 00011001 00111001 11111111 11111111 > 00100000 00010000 00011000 00011000 00011000 00111001 11111111 11111111 TIL 7r 00000000 10000000 01000000 11000000 11000000 10000000 10000000 11100000 > 00000000 00000000 00000000 01110000 11111000 11001000 10000000 11100000 TIL 7s 00000000 00000000 00000000 00000000 00000000 00000000 00000111 00011111 TIL 7t 00000000 00000000 00000000 00000000 00000000 00011111 11111111 11111111 TIL 7u 00000000 00000000 00000000 00000000 00000000 11000000 11110000 11110000 TIL 7v 01000101 01010010 01000110 01001010 00110001 00001101 00000011 00011111 TIL 7w 11110000 00001000 01000100 00100100 00001000 01010000 11111111 11111111 TIL 7x 00011000 00011100 00001101 00001111 00000111 00111111 11111111 11111111 > 00001100 00001100 00001101 00001111 00000111 00111111 11111111 11111111 TIL 7y 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 7z 11111000 11111100 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL 8a 00000100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 8b 00000000 00010000 00110000 01101000 00110000 00010000 00000000 00001000 TIL 8c 00000000 00000000 00000000 00000000 00000011 00000111 00001110 00000111 TIL 8d 00000000 00000000 00000000 00000000 11001000 11101000 01110000 11101000 TIL 8e 00000000 00000000 00000000 00000000 00000000 00000000 00011111 00111011 TIL 8f 00011110 00000000 00000000 00000000 00000000 00000000 01100000 10000000 TIL 8g 01000000 00000000 00000000 00000111 00001110 00001110 00000111 00000000 TIL 8h 00000000 00000000 00010000 00010000 00000000 00000000 00000000 00000000 TIL 8i 00001000 00000001 00000011 00000011 00000001 00000000 00000000 00000000 TIL 8j 00000000 11100100 11111000 11111000 11100100 00000000 00000000 00000000 TIL 8k 00000011 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 8l 11001000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 8m 00111011 00011111 00000000 00000000 00000000 00000000 00000000 00000000 TIL 8n 10000000 01100000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 8o 00000000 00000000 00000000 00000000 00000000 01111001 11111110 11111110 TIL 8p 00000000 00000000 00000000 00000000 00001000 00000000 00000000 00000000 TIL 8q 01111001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 8r 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000111 TIL 8s 00000000 00000000 00000000 00000000 00000100 00001010 00001011 00000100 TIL 8t 00000000 00000000 00000000 00000000 00000000 00010000 00010000 00000000 TIL 8u 00110000 01111000 11111111 11111111 11111111 11111001 00000001 00000010 TIL 8v 00011111 00111111 10110110 11111110 11111110 10000000 00000000 00000000 TIL 8w 00000000 00000000 00100000 00000000 00000000 00000000 00000000 00000000 TIL 8x 00011100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 8y 00000001 00000000 00000000 00000001 00000000 00000000 00000000 00000000 TIL 8z 00111100 11111110 11101110 01111100 00000000 00000000 00000000 00000000 TIL 9a 00100000 00011000 10011000 11011000 11010000 01100000 01110000 11111111 TIL 9b 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11100000 TIL 9c 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000011 TIL 9d 00000000 00000000 00000000 00000000 01100000 10000001 10000001 10000010 TIL 9e 00000000 00000000 00000000 00000000 00000000 10000000 00000000 00000000 TIL 9f 00000001 00000001 00011111 00011111 01100001 01101100 01100000 01100001 TIL 9g 10001001 11000000 10000110 10000110 10111111 01000000 11000000 11000110 TIL 9h 00000000 11000000 11000000 11000000 11000000 00100000 00100000 00011000 TIL 9i 00000110 00001100 00001100 00001100 00001110 00001111 00000111 00000011 TIL 9j 00011110 00001111 00001111 00001111 00000111 00001111 10011111 10111111 TIL 9k 00000000 00001100 00100111 00110111 00001110 00110111 00100110 00001100 > 00000000 00011000 01001110 01101111 00011101 01101111 01001100 00011000 WAL false TIL 9l 00000000 00000000 00000000 10000000 11000000 10000000 00000000 00000000 > 00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 TIL 9m 00000000 00000000 00000000 00000000 00000000 01000000 10100000 01000000 TIL 9n 00000000 00000010 00000011 00000000 00000011 00000010 00000000 00000000 > 00000001 00000100 00000110 00000001 00000110 00000100 00000001 00000000 NAME tropical_fish COL 5 TIL 9p 00000000 00000110 00010011 00011011 00000111 00011011 00010011 00000110 > 00000000 00001100 00100111 00110111 00001110 00110111 00100110 00001100 WAL false TIL 9q 00000000 00000000 10000000 11000000 01100000 11000000 00000000 00000000 > 00000000 00000000 00000000 10000000 11000000 10000000 00000000 00000000 TIL 9r 00000000 00000010 00000000 00000000 00000000 00000000 00000000 00000000 TIL 9s 00000000 00000000 00000000 00000000 00000000 00000000 01000000 10100000 TIL 9t 00000000 00000000 00000000 00000000 00000111 00001111 00001001 00000001 TIL 9u 00000000 00011000 01111111 11111111 11111001 10000010 10001100 10000000 TIL 9v 00011000 01111000 01010001 11110000 00000000 00000000 00000000 00000000 TIL 9w 01000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 9x 00000000 01000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 9y 00000000 00000000 00000000 00000000 00000000 00000000 00001000 00000000 TIL 9z 00000000 00000000 00000000 00000000 00000000 00000000 00111010 01101100 > 00000000 00000000 00000000 00000000 00000000 00000000 01110100 11011000 TIL a0 00111010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 01110100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL a1 00000000 00000000 00000001 00000001 00000001 00000001 00000001 00000000 > 00000000 00000001 00000001 00000001 00000001 00000001 00000000 00000001 NAME octopus COL 4 TIL a3 01000000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 > 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME octopus COL 4 TIL a4 00000000 00000000 00000000 00000000 00000000 00100000 00000000 00000000 TIL a5 00011101 00110110 00011101 00000000 00000000 00000000 00000000 00000000 > 00111010 01101100 00111010 00000000 00000000 00000000 00000000 00000000 TIL a6 00000000 00000000 00000000 00000000 00000000 00000000 11111100 11111111 TIL a7 00000001 00000011 00010010 00001100 00000000 00000000 00000000 00000000 > 00000011 00010010 00001100 00000000 00000000 00000000 00000000 00000000 NAME octopus WAL true COL 4 TIL a8 11110000 01011000 01001001 00100110 00100000 00010000 00000000 00000000 > 01011000 01001001 00100110 00100000 00010000 00000000 00000000 00000000 NAME octopus WAL true COL 4 TIL a9 00000000 00000000 00100000 01000000 11000100 11000011 11000001 11000001 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL aa 00000000 00000000 00000000 00000000 00000000 00000000 10000000 11000000 > 00000000 00000000 00000000 00000000 00010000 01100000 11000000 11000000 TIL ab 11111000 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL ac 00000000 11100000 11111110 11111111 11111111 11111111 11111111 11111111 WAL true TIL ad 00000000 00000000 00000001 11100010 11111110 11111111 11111111 11111111 TIL ae 00000000 00001111 11110000 00000010 10010000 11100100 11111111 11111111 TIL af 00000000 11110000 10001110 00010011 10000001 00011111 11111111 11111111 TIL ag 00000000 00000000 00000000 10000000 11111100 11111111 11111111 11111111 TIL ah 00000000 00000000 00000000 00000000 00000000 00000000 11100000 11111111 TIL ai 00000000 00010000 00101000 00010000 00000100 00000000 00000000 00000000 > 00000000 00100000 01010000 00100000 00001001 00000001 00000000 00000000 NAME tutle COL 6 TIL ak 00000000 00000000 00000000 00000000 00000000 10000000 00000000 10000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME tutle COL 6 TIL al 00000001 00000001 00001001 00010001 00010001 00110000 00110000 00111000 > 00000011 00000011 00000001 00000001 00000000 11100000 01110000 00111000 TIL am 11000000 11000000 11000001 11100011 11101111 11111111 11111111 11111111 > 10000000 10000000 11000001 11000011 11101111 11111111 11111111 11111111 TIL an 11000011 11111111 11111111 11111111 11111111 11111111 11111111 11111111 TIL ao 11111110 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL ap 00000000 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL aq 00000000 11111000 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL ar 00000000 00000000 10000000 11110000 11111111 11111111 11111111 11111111 WAL true TIL as 00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111111 WAL true TIL at 00111001 00011111 00011111 01111111 11111111 11111111 11111111 11111111 WAL true TIL au 11111111 11111111 11111111 01111111 11111111 11111111 11111111 11111111 TIL av 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111101 TIL aw 11000000 11100000 11110000 11111000 11111100 11111100 11111100 11111100 WAL true TIL ax 00000000 00010000 00010000 00010000 00001000 00001000 00001000 00000100 NAME sunbeam COL 11 TIL ay 00000000 00001000 00001000 00001000 00000100 00000100 00000010 00000010 NAME sunbeam COL 11 TIL az 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME ponytail_mer2 COL 3 TIL b0 11111110 11111110 11111110 11111110 11111111 11111111 11111111 11111111 WAL true TIL b1 00000010 00000001 00000001 00000000 00000000 00000000 00000000 00000000 NAME sunbeam COL 11 TIL b2 00000000 00000000 00000000 10000000 10000000 01000000 01000000 01000000 NAME sunbeam COL 11 TIL b4 11100000 00100000 10010000 10000000 00000000 00000000 10000000 01000000 > 11000000 11100000 00100000 10010000 10000000 00000000 00000000 10000000 NAME ponytail_mer2 COL 3 TIL b5 11111111 11111111 11111111 11111101 11111111 11111111 11111111 11111111 WAL false TIL b6 10000000 11100011 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL b7 00000000 11110000 11111110 11111111 11111111 11111111 11111111 11111111 WAL true TIL b8 00000000 00000000 00000000 00000000 11000000 11100000 11110000 11110000 WAL true TIL b9 00010111 00100111 00100111 01000111 00000111 00000011 00000001 00000000 > 00010111 00010111 00100111 00100111 01000111 00000111 00000011 00000001 NAME ponytail_mer2 WAL true COL 3 TIL ba 01000000 00100000 10100000 10010000 10000000 10000000 10000000 10000000 > 01000000 01000000 00100000 10100000 10010000 10000000 10000000 10000000 NAME ponytail_mer2 COL 3 TIL bb 11110000 11111000 11111000 11111000 11111000 11110000 11110000 11000000 WAL true TIL bc 00000001 00000011 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000001 00000011 00000000 00000000 00000000 00000000 00000000 NAME ponytail_mer2 COL 3 TIL bd 11000000 01100000 00000000 00000000 00000000 00000000 00000000 00000000 > 10000000 11000000 01100000 00000000 00000000 00000000 00000000 00000000 NAME ponytail_mer2 COL 3 TIL be 11111111 11111111 11111111 11111111 11111111 11111110 11110000 11100000 WAL true TIL bf 11111111 11111111 11111111 11111111 11111111 10000010 10000010 01000101 WAL true TIL bg 11111111 11111111 11111111 11111111 11111100 00100000 00100000 11000000 WAL true TIL bh 11111111 11111111 11111001 10010000 00001000 00001001 00010001 00010001 > 11111111 11111111 11111001 10010001 00010000 00001000 00001000 00000100 WAL true TIL bi 11111000 10100000 00010000 10001000 10001000 00010000 00010000 00001000 > 11111000 10100000 00010000 00001100 11000010 00100001 00010000 00000000 TIL bj 11000000 11000000 10000000 10000000 11000000 10100000 10011000 00000100 > 11000000 11000000 10000000 10000000 11100001 10011110 10000000 00000000 TIL bk 00111000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL bl 00010000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL bm 11111111 11101111 11111111 11111111 11111111 11111111 11111111 11111111 TIL bn 11111111 11111111 11111111 11111111 11111111 11111111 11111100 11100010 WAL true TIL bo 11111111 11111111 11111111 11111111 11111110 10000100 00000100 00011000 WAL true TIL bp 11111111 11111110 11111100 11110000 00000000 00000000 00000000 00000000 WAL true TIL bq 10000000 10000000 10000000 01000000 00000000 00000000 00000000 00000000 > 10000000 01100000 00000000 00000000 00000000 00000000 00000000 00000000 TIL bs 00000000 00000000 00000000 00100000 01010000 00100000 00000000 10000000 > 00000000 00000000 00100000 01010000 00100000 00000000 10000000 00000000 NAME jellyfish1 COL 9 TIL bt 11111111 11111111 11111111 11111111 11111111 11111111 11111110 11000000 WAL true TIL bu 11111111 11111111 11111111 11111111 11111111 11110000 00000000 00000000 WAL true TIL bv 11111111 11111111 11111100 11110000 10000000 00000000 00000000 00000000 WAL true TIL bw 10000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL bx 00000001 00000001 00000000 00000000 00000001 00000001 00000000 00000000 > 00000001 00000000 00000000 00000001 00000001 00000000 00000000 00000000 NAME jellyfish1 COL 9 TIL by 00000100 11111100 10101000 10101000 00100100 00100100 10101000 10101000 > 11111100 10101000 10101000 00100100 00100100 10101000 10101000 00100000 NAME jellyfish1 WAL true COL 9 TIL bz 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001111 TIL c0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111111 TIL c1 00000000 00000000 10000000 00000000 00000000 00000000 00000000 00000000 TIL c2 00000000 00000000 00000000 01000000 10100000 01000000 00000000 00000000 > 00000000 00000000 01000000 10100000 01000000 00000000 00000000 00000000 NAME stingray1 COL 10 TIL c3 00000000 00000000 11110000 11111111 11111111 11111111 11111111 11111111 WAL true TIL c4 00000000 00000000 00000000 00000000 11110000 11111100 11111111 11111111 TIL c5 00000000 00000000 00000000 00000001 00001110 00011100 00011000 11011000 > 00000000 00000000 01000000 00100000 00110000 00110000 00011000 11011000 TIL c6 00000000 00000000 00000000 00000100 00000010 00000010 00000110 00001110 > 00000000 00000000 00000000 00000000 11000000 01100000 00110000 00110000 TIL c7 00000000 00000000 00000000 00000000 00000000 00000000 00010000 00100000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL c8 00000000 00000000 00000100 00000110 00000111 00000111 00000011 00000011 > 00000000 00000100 00000110 00000111 00000111 00000011 00000011 00000011 NAME stingray1 COL 10 TIL ca 11111111 11111111 11111011 11111111 11111111 11111111 11111111 11111111 WAL true TIL cb 11111111 11111111 11111111 11111111 11111111 10111111 11111111 11111111 TIL cc 11111100 11111100 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL cd 00011100 00111100 11111000 11110000 11111111 11111111 11111111 11111111 > 00111000 00111000 11111000 11110000 11111111 11111111 11111111 11111111 WAL true TIL ce 01100000 01100000 01100000 11100000 11000000 11000000 11111000 11111100 > 00000000 00111000 01111100 11100010 11000000 11000000 11111000 11111100 TIL cf 00000011 00000001 00000001 00000000 00000000 00000000 00000000 00000000 > 00000001 00000001 00000000 00000000 00000000 00000000 00000000 00000000 NAME stingray1 COL 10 TIL cg 01110110 10101100 11111100 11111000 00100000 00100000 00000000 00000000 > 10101100 11111100 11111000 00100000 00100000 00000000 00000000 00000000 NAME stingray1 COL 10 TIL ch 00000000 00000100 00000010 00000011 00000011 00000001 00000001 00000111 > 00000000 00000000 00000000 00001110 00010111 00000011 00000001 00000111 TIL ci 00010000 00010000 00110000 00110000 00111000 10011000 10011000 11111111 > 00000001 00000110 00001100 00001100 00011000 00011000 10011000 11111111 TIL cj 11111111 11111111 11111111 11111111 11111111 11011111 11111111 11111111 WAL true TIL ck 00000000 11000000 11110000 11111110 11111111 11111111 11111111 11111111 WAL false TIL cl 00000000 00000000 00000000 00000000 11000000 11100000 11110000 11110000 WAL false TIL cm 00000000 00000000 00000000 00000011 00011111 01111111 11111111 11111111 TIL cn 00000000 00000111 00111111 11111111 11111111 11111111 11111111 11111111 WAL false TIL co 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111011 WAL true TIL cp 11111000 11111000 11111100 11111100 11111100 11111110 11111111 11111111 WAL true TIL cq 11111111 11111111 11111111 11111111 11111111 11111111 10111111 11111111 WAL false TIL cr 00000001 00000001 00000001 00000001 00000001 00000001 10000001 11000001 TIL cs 11000001 11100001 11100001 11110001 11110001 11111001 11111011 11111111 TIL ct 11111111 11111111 11111101 11111111 11111111 11111111 11111111 11111111 WAL true TIL cu 11111110 11111110 11111100 11111100 11111000 11111000 11110000 11110000 WAL true TIL cv 01111111 01111111 00111111 00111111 00011111 00011111 00011111 00011111 WAL true TIL cw 11111111 11111111 11111111 11111111 11111111 11110111 11111111 11111111 TIL cx 11111111 10111111 11111111 11111111 11111111 11111111 11111111 11111111 TIL cy 11111111 11111111 11111111 11111111 11111111 11111111 11111000 11100000 WAL true TIL cz 11100000 11100000 11100000 11000000 10000000 00000000 00000000 00000000 TIL d0 00001111 00001111 00000111 00000111 00000011 00000001 00000001 00000000 WAL false TIL d1 11111011 11111111 11111111 11111111 11111111 11111111 11111111 01111111 WAL true TIL d2 11111111 11111111 11111111 11111110 11111000 11110000 11000000 10000000 WAL true TIL d3 11111111 11111110 11000000 00000000 00000000 00000000 00000000 00000000 TIL d4 00111111 00001111 00000111 00000001 00000000 00000000 00000000 00000000 TIL d5 11111111 11111111 11111111 11111111 01111111 00111111 00111111 00011111 WAL true TIL d6 11111111 11111110 11111100 11111100 11111000 11111000 11110000 11100000 WAL true TIL d7 00011111 00011111 00001111 00001111 00001111 00001111 00001111 00001111 WAL true TIL d8 11111111 11111111 11111111 11111111 11111111 11111101 11111111 11111111 TIL d9 11111111 11111111 11111110 11111100 11111000 11100000 11000000 00000000 WAL true TIL da 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000010 TIL db 00000111 00000111 00000111 00000111 00000011 00000000 00000000 00000000 TIL dc 11111111 11111111 11111111 11111000 11000000 10000000 00000000 00000000 WAL true TIL dd 11111111 11100000 00000000 00000000 00000000 00000000 00000000 00000000 TIL de 00111111 00011111 00001111 00001111 00000111 00000111 00000111 00000111 TIL df 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111000 WAL true TIL dg 11111100 11111100 11111000 11110000 11110000 11100000 00000000 00000000 WAL true TIL dh 00000000 00000000 00000000 00000010 00000000 00000000 00000000 00000000 TIL di 00000000 00000001 00000001 00011111 00111011 00001111 00011001 00000000 > 00000000 00000011 00000011 00111111 01110111 00011111 00110010 00000000 TIL dj 00000000 10000000 11000100 11001100 11111000 10000100 00000000 00000000 > 00000000 00000000 10001000 10011000 11110000 00001000 00000000 00000000 TIL dk 00000011 00000011 00000011 00000111 00000111 00000111 00000111 00000111 WAL false TIL dl 11000000 11000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL dm 00000000 00000000 00000000 00001000 00000000 00000000 00000000 00000000 TIL dn 00000111 00000111 00000011 00000011 00000001 00000001 00000000 00000000 TIL do 00000000 00000000 00000000 00000000 00000101 00000011 00000000 00000000 > 00000000 00000000 00000000 00000000 00000010 00000001 00000000 00000000 NAME gulping_eel1 COL 3 TIL dp 00000000 00000000 00000111 00011111 11111100 11100000 00000000 00000000 > 00000000 00000000 00000011 00001111 11111110 11110000 00000000 00000000 NAME gulping_eel1 COL 3 TIL dr 00000000 01000000 10100000 01000000 00000000 00000000 00000000 00000000 > 00000000 00100000 01010000 00100000 10000000 00000000 00000000 00000000 NAME gulping_eel1 COL 3 TIL ds 00000000 00000000 00000000 00000000 00000010 00000000 00000000 00000000 TIL dt 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001000 TIL du 00000000 00000000 00000000 00000000 00000000 00001000 00010100 00001000 > 00000000 00000000 00000000 00000000 00000000 00010000 00101000 00010000 NAME glowfish_mer1 COL 4 TIL dv 00000000 00000000 00000000 00000000 00000000 00000100 00000000 00000000 TIL dx 01111000 11111110 11111111 11111111 11111011 11110001 10000000 01100001 > 11110000 11111100 11111110 11111111 11110111 11100011 00000001 11000011 NAME glowfish_mer1 COL 4 TIL dy 00000000 00000000 00000000 10000000 10100000 11100000 10000000 10000000 > 00000000 00000000 00000000 00000000 01000000 11000000 00000000 00000000 NAME glowfish_mer1 COL 4 TIL dz 00000000 00000000 00000000 00000000 00000000 00000000 00000100 00000000 TIL e0 00000000 00000000 00000000 00000000 00100000 00000000 00000000 00000000 TIL e1 00000010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL e2 00000000 00000000 00000000 00000000 00000000 00000000 11111100 00000010 TIL e3 00000000 00000000 00000000 00010000 00101000 00010000 01000000 00000000 > 00000000 00000000 00100000 01010000 00100000 00000000 01000000 00000000 TIL e4 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000011 TIL e5 00000000 00000000 00000000 00000000 00000111 00011111 01111111 11111111 WAL true TIL e6 00000000 00000000 00011111 11111111 11111111 11111111 11111111 11111111 WAL true TIL e7 00000000 01110000 11111110 11111111 11111111 11110111 11111111 01111111 WAL true TIL e8 00000000 00000000 00000000 11111000 11111110 11111111 11111111 11111111 WAL true TIL e9 00000000 00000000 00000000 00000000 00000000 11100000 11111100 11111111 TIL ea 00000000 00000000 00000000 00000000 00000001 00000111 00011111 11111111 WAL true TIL eb 10000010 11000010 11110010 11111111 11111111 11111111 11111111 11111111 WAL true TIL ec 10000001 00110010 01001000 11111111 11111111 11111111 11111111 11111111 WAL true TIL ed 00000000 10001111 10111111 11111101 11111111 11111111 11111111 11111111 WAL true TIL ee 00000000 11111100 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL ef 00000000 00000000 00000000 11000000 11111111 11111111 11111111 11111111 WAL true TIL eg 00000000 00000000 00000111 00111111 11111111 11111111 11111111 11111111 WAL true TIL eh 00011111 11111111 11111111 11111110 11111111 11111111 11111111 11111111 WAL true TIL ei 00000000 00000000 10000000 11111111 11111111 11111111 11111111 11111111 WAL true TIL ej 00000011 00011111 01111111 11111111 11111110 11111111 11111111 11111111 WAL true TIL ek 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11101111 WAL false TIL el 11111111 11111111 11111111 11111110 11111111 10111111 11111111 11111111 TIL em 11111111 11111111 11111111 11111111 11111111 11111111 11111111 10000000 WAL true TIL en 11111111 11111111 11111111 11111111 11111111 11111100 11111000 11100000 WAL true TIL eo 11111100 11110000 11000000 10000000 00000000 00000000 00000000 00000000 TIL ep 00001111 00000011 00000000 00000000 00000000 00000000 00000000 00000000 TIL eq 11111111 11111111 11111111 00011111 00000111 00000000 00000000 00000000 WAL true TIL er 11111111 11111111 11111111 11110000 10000000 00000000 00000000 00000000 WAL true TIL es 11111111 11111111 00011111 00000011 00000000 00000000 00000000 00000000 WAL true TIL et 11111111 11111111 11111111 11111111 01111111 00111111 00011111 00001111 WAL true TIL eu 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111100 WAL true TIL ev 11111111 11111111 11111110 11111100 11111000 11100000 00000000 00000000 WAL true TIL ew 00000000 00000000 00000000 00000000 00000000 00000000 00010000 00000000 TIL ex 00000111 00000011 00000000 00000000 00000000 00000000 00000000 00000000 TIL ey 11111111 11111111 11111111 00111111 00000111 00000000 00000000 00000000 WAL true TIL ez 11111111 11111111 11111000 11100000 10000000 00000000 00000000 00000000 WAL true TIL f0 11111111 00000001 00000000 00000000 00000000 00000000 00000000 00000000 TIL f1 11111111 11111111 00111111 00011111 00000111 00000001 00000000 00000000 WAL true TIL f2 11111111 11111111 11111111 11111111 11111111 11111111 00111111 00000011 WAL true TIL f3 11111000 11110000 11100000 11000000 11000000 10000000 10000000 10000000 WAL true TIL f4 00000000 00000000 00000000 01000000 00000000 00000000 00000000 00000000 TIL f5 00000000 00000000 00001000 00000000 00000000 00000000 00000000 00000000 TIL f7 00000000 00000000 00000000 00000000 10000000 01000000 01000000 11000000 > 00000000 00000000 00000000 00000000 00000000 10000000 01000000 01000000 NAME jellyfish2 COL 5 TIL f8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00010000 > 00000000 00000000 00000000 00000000 00000000 00000000 00010000 00101000 NAME jellyfish_mer1 COL 6 TIL f9 00001010 00001010 00010010 00010010 00001010 00001010 00000010 00000000 > 00011111 00001010 00001010 00010010 00010010 00001010 00001010 00000010 NAME jellyfish2 WAL true COL 5 TIL fa 10000000 10000000 01000000 01000000 10000000 10000000 00000000 00000000 > 11000000 10000000 10000000 01000000 01000000 10000000 10000000 00000000 NAME jellyfish2 COL 5 TIL fb 00000000 00000000 00000000 00000000 00000000 00000000 00000011 00000011 > 00000000 00000000 00000000 00000000 00000000 00000011 00000011 00000000 NAME jellyfish_mer1 COL 6 TIL fd 00101000 00010000 00000000 01000000 00000000 00000000 10000000 10000000 > 00010000 00000000 01000000 00000000 00000000 10000000 10000000 00000000 NAME jellyfish_mer1 COL 6 TIL fe 00000000 00000000 00000000 00000001 00000001 00000010 00000000 00000000 > 00000000 00000000 00000001 00000001 00000010 00000000 00000000 00000000 NAME jellyfish_mer1 COL 6 TIL ff 01111100 10111010 10111010 00111001 01111101 01111100 01111100 11010110 > 10111010 10111010 00111001 01111101 01111100 01111100 11010110 10010010 NAME jellyfish_mer1 WAL true COL 6 TIL fg 00000000 00000000 00000000 00000000 00000000 00000000 00010000 11100000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL fh 10010010 01010100 01010100 01010100 10010010 10010010 00010000 00000000 > 01010100 01010100 01010100 10010010 10010010 00010000 00000000 00000000 NAME jellyfish_mer1 COL 6 TIL fi 00000000 00000000 10000000 11000000 11110000 11111111 11111111 11111111 WAL true TIL fj 00000011 00000111 00000111 00001110 00001110 00001110 11000110 11111111 > 00001100 00001100 00001110 00001110 00001110 00000110 11000110 11111111 TIL fk 10000000 00000000 00000000 00000000 00000000 00000000 00001111 11111111 TIL fl 00000000 00000000 00000000 00000000 00000000 00000000 11111111 11111111 TIL fm 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111000 TIL fn 00000000 00001000 00000100 00000110 00000110 00001110 00001110 00011100 > 00000000 00000000 10000000 01100000 01110000 00110000 00111000 00111000 TIL fo 00000000 00000000 00000000 00000000 00100000 00010000 00011000 00011000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000011 TIL fp 00000000 00000000 00000000 00000000 00000000 00111111 01001000 10000101 TIL fq 00000000 00000000 00000000 00000000 00000000 10000000 01000000 00101111 TIL fr 00000000 11000000 11100000 11110000 11111100 11111111 11111111 11111111 WAL true TIL fs 00000000 00000000 00000000 00000000 00000011 11111111 11111111 11111111 WAL true TIL ft 00000000 00000000 00001111 11111111 11111111 11111111 11111111 11111111 WAL true TIL fu 00111100 01111000 11110000 11111111 11111111 11111111 11111111 11111111 > 01111000 11110000 11110000 11111111 11111111 11111111 11111111 11111111 WAL true TIL fv 00011000 00111000 11111000 11110000 11111111 11111111 11111111 11111111 > 00001110 00111100 11111000 11110000 11111111 11111111 11111111 11111111 WAL true TIL fw 00000000 00000000 00000000 00000000 00000000 11100001 11111111 11111111 WAL true TIL fx 00000000 00000000 00000000 00000111 00111111 11111111 11111111 11111111 WAL true TIL fy 10100000 10001111 11111111 11111111 11111111 11111111 11111111 11011111 WAL true TIL fz 11111111 11111111 11111111 01111111 11111111 11111011 11111111 11111111 WAL true TIL g0 11111111 11111111 01111111 11111111 11111111 11111111 11111111 11111111 TIL g1 10011001 00011001 01000000 00000000 10100110 10100110 00100000 00000000 WAL true TIL g2 00110010 00000000 00001001 10100000 10000000 10001010 00011000 01000000 WAL true TIL g3 00000010 00101000 00000010 01000000 00001010 00100000 10000001 00010100 WAL true TIL g4 00000100 01010000 00000000 10010100 00000000 01010000 00000100 01000000 WAL true TIL g5 00000000 10010101 00000001 00101000 10000001 00000000 00100100 10000001 WAL true TIL g6 00101010 10000010 10010100 00000100 11111000 00010000 01100000 10000000 WAL true TIL g7 00010010 00010000 00100001 00101000 00100010 00101000 00100001 00101001 WAL true TIL g8 01000000 00100000 00011000 01000111 00000000 00010110 10000110 10010000 WAL true TIL g9 00000000 00000000 00000000 00000000 11100001 00111110 10110000 10000010 WAL true TIL ga 00000000 00000000 00000001 00011110 11100000 00010110 11010110 11010000 WAL true TIL gb 00000111 00111000 11110100 00110000 10000010 00000000 01001101 01001101 TIL gc 00100000 00000000 11010011 11000011 00001000 00000000 00110100 00110100 TIL gd 00010011 11010011 11010000 00000000 00001000 01101000 01100101 00001001 TIL ge 01000100 01010001 00000100 01000000 00001111 11110000 00000101 11010001 TIL gf 00000001 00100000 00000000 00111111 11000001 00001100 10101100 10000001 TIL gg 00001000 00000000 11111111 00001000 01100000 01100011 00000011 11110000 TIL gh 00000110 00011000 00000000 11110000 00001110 01000001 00011010 00011000 TIL gi 00000000 00000000 00000000 00000000 00000000 11000000 00111000 00000110 TIL gj 00000000 00000000 00000001 00000001 00000010 00000010 00000100 00001011 TIL gk 00000000 00000000 11000000 00110000 00101001 10000110 00010000 00000010 TIL gl 00000000 00000001 00001110 01110000 10000110 00010110 11010000 11010000 TIL gm 00100000 11000100 00000100 10110000 10110010 10000010 00000010 01011000 TIL gn 00010000 00000110 11000110 11010000 00010000 00000011 01101011 01101000 TIL go 00011010 01011000 01000001 01000001 00001101 00101100 00100000 00100000 TIL gp 00000000 00001011 01101011 01100000 00000100 00000100 10110000 10110010 TIL gq 00000001 00100000 00100110 00100110 00000000 11010000 11010011 00000011 TIL gr 00000100 00000000 10000010 10011010 10011010 00000000 01000001 01001101 TIL gs 00110000 11000000 00000000 00010010 01000000 00000001 00010000 11000100 TIL gt 00111000 00000110 01000001 00000000 00001000 00100000 00000010 01000000 TIL gu 00111100 10000001 11000101 00111000 00000111 10100000 01000000 01000000 TIL gv 00000111 10100000 10011000 00011001 00000001 11000100 00110000 00001110 TIL gw 10000001 00011101 00100000 10000001 10011000 00011001 10000001 00010000 TIL gx 10100001 10001100 00001100 11100000 00001110 10000000 10011000 00011001 TIL gy 11000000 00111111 10000010 11010000 00000101 10010001 00000110 01101000 TIL gz 11110011 01001000 00001000 00100001 00000101 11110000 00001100 00000011 TIL h0 01011010 01011010 00000000 10000001 10101101 00101100 00000001 01010010 TIL h1 00000011 00001011 01101000 01100000 00000100 10010010 11111110 00000001 TIL h2 01011001 01000000 00000110 00010110 11010000 11000011 00001011 11110000 TIL h3 00000000 00000101 10110101 10110100 00000000 01000010 00011010 01011001 TIL h4 00100110 10000110 10010000 00010000 00000011 11001011 11111111 10000000 TIL h5 10000010 00000010 01011000 01011001 00000001 00101111 11110000 00000000 TIL h6 00001000 01101000 01100001 00000101 01100111 11111000 00000000 00000000 TIL h7 00001100 00100001 10100110 10011000 11100000 00100010 01001000 01000000 TIL h8 00110001 00001000 00000100 00000010 00000001 00000000 00000000 00000000 TIL h9 00010001 00000000 10000100 00000000 00101000 10000010 10010001 01000001 TIL ha 01000000 01000000 10000000 10000000 10000000 10000000 00000000 00000000 TIL hb 11100010 00011000 00000100 00000010 00000001 00000001 00000001 00000001 TIL hc 01000001 00010101 10011000 00000010 01100010 01100010 00001010 00000010 TIL hd 01101000 00001000 00010000 11010000 11010000 00010000 00010000 11010000 TIL he 10010100 01001000 00110000 00000000 00000000 00000000 00000000 00000000 TIL hf 00001010 00000100 00000101 00000010 00000011 00000000 00000000 00000000 TIL hg 00000010 01000100 00011000 01100000 10000000 00000000 00000000 00000000 WAL false TIL hh 00000000 00000000 00000000 00000000 00000000 00111000 01000100 01000100 > 00000000 00000000 00000000 00000000 01110000 10001000 10001000 10001000 WAL true TIL hi 00100010 00011000 00000110 00000001 00000000 00000000 00000000 00000000 WAL true TIL hj 01000101 01000010 01010010 01000010 01000100 01100100 01001000 01110000 TIL hk 00000110 00000101 00000100 00000110 00000100 00000100 00001000 00001010 TIL hl 00000000 00000000 11000000 00100000 10010000 00001000 01000110 00010001 TIL hm 10110000 10110010 01000100 01000101 01010101 00100000 00100000 00000111 TIL hn 11010000 00010000 00010000 10100000 10100001 00001110 01111101 10001100 TIL ho 00000000 00000000 00000011 00111101 11001000 00000000 00110100 00110000 TIL hp 00000000 00011111 11100100 10010001 00010100 00000001 11001001 11001000 TIL hq 00000000 11111111 00010000 00000100 01010001 00000100 10010000 00000001 TIL hr 00000000 11111111 10000000 00001010 00100000 00000100 00010000 01000010 TIL hs 00000000 00000000 11111111 00100010 00001000 10000010 00100000 10000100 TIL ht 00000000 00000000 00000000 11111111 00010010 01000000 00000001 10101100 TIL hu 00000000 00000000 00000010 10000101 01100010 00010000 01010000 00010000 WAL true TIL hv 01000100 00111000 00000000 00000000 00000000 00000000 00000000 00000000 > 01110000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL hw 00000000 00000000 00000000 00000000 00000000 00000000 01110000 01001100 TIL hx 00000000 00000000 00000000 00000000 00000000 00000000 00000011 00011100 TIL hy 00001000 00001010 00001000 00001010 00001000 01110001 10000001 00101100 WAL false TIL hz 10000000 00000101 01100001 01100100 00000100 00000001 00110001 00110100 TIL i0 00111000 10001111 10101100 00100000 00000110 10010110 10010000 00010000 TIL i1 01111000 10000101 00110101 10110100 10000000 00000010 01011010 01011000 TIL i2 00100000 10000000 10010011 00010011 00000000 11001000 11001001 00001001 TIL i3 10000010 00000000 01001101 01001101 01000001 00000000 10100000 10100110 TIL i4 00000000 00000101 00110100 00110100 00000000 00000010 10011010 10011010 TIL i5 01001000 00000010 00000000 01010001 11000100 00000000 00100000 10001001 TIL i6 00010000 00000100 01010000 00000010 00001000 10100010 00001000 00000000 TIL i7 00000000 10100001 00000100 10000000 00100001 00000100 01000000 00010010 TIL i8 00001100 01000000 00001111 00000000 00100011 00001100 00110000 11000000 TIL i9 10100000 00100000 11000000 10000000 00000000 00000000 00000000 00000000 TIL ia 10001010 10100001 00000100 11000000 11010110 00010110 00000000 01100000 TIL ib 01100001 10000101 00110100 10110100 10000000 10000010 00011010 01011000 TIL ic 10101100 10100000 00000000 00010110 11010110 11010000 00000001 00000101 TIL id 10000100 10000000 10011010 00011010 01000000 00000001 10101101 10101101 TIL ie 00000011 11001011 11001000 00001000 00001001 01100001 01100100 00000100 TIL if 01000001 00000001 00101100 00101100 10100000 10000000 00010110 00010110 TIL ig 00000000 00110100 00110100 10000000 10000010 10011010 00011000 01000001 TIL ih 00100110 00000000 11010000 11010011 00000011 00001000 01101001 01100110 TIL ii 10000000 00000010 01001100 01001000 00110001 01000100 10010000 00000000 TIL ij 00100000 00000010 10001000 00100000 00001001 01000000 00010000 00000010 TIL ik 01001010 00000000 10100100 00011111 00100000 01000000 10000000 10000000 WAL true TIL il 10000011 00101100 11110000 00000000 00000000 00000000 00000000 00000000 WAL true TIL im 01101011 00001011 00000000 11010100 00100101 00010010 00001100 00000000 WAL true TIL in 01000001 00100100 01111111 10000000 00000000 00000000 00000000 00000000 WAL true TIL io 00110100 10110000 10000010 01111100 00000010 00000001 00000001 00000000 WAL true TIL ip 00000000 11010000 11000110 00010110 10000000 00010001 01000110 10011000 WAL true TIL iq 00000000 10110010 10111111 01100000 10000000 00000000 00000000 00000000 WAL true TIL ir 11000000 11001011 11111100 00000000 00000000 00000000 00000000 00000000 WAL true TIL is 01011001 11111110 00000000 00000000 00000000 00000000 00000000 00000000 WAL true TIL it 11111000 00001000 00010010 00010000 00001000 00000110 00000001 00000000 WAL true TIL iu 00000010 10010000 00000000 00001001 10000000 00100010 10001000 01000000 WAL true TIL iv 01000001 00001001 01000001 00000101 00010010 00000010 10001010 00000010 WAL true TIL iw 00000000 00000000 00000000 00000000 00000000 00000000 00010000 00011010 > 00000000 00000000 00000000 00000000 00000000 00000000 00001000 00001101 NAME shark_mer1 COL 3 TIL ix 00000000 00000000 00000000 00000000 00000000 00000000 00000010 00000101 > 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000010 NAME shark_mer1 COL 3 TIL iy 00100100 00010000 00001001 00000100 00000100 00000010 00000010 00000010 WAL true TIL iz 00100100 00000100 01000100 00010100 10001000 00001000 00101000 00010000 WAL true TIL j0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11000000 TIL j1 00000001 00000011 00000111 00001111 00001100 00111000 00001000 00001000 > 00000000 00000001 00000011 00000111 00000110 00011100 00000100 00000100 NAME shark_mer1 WAL true COL 3 TIL j3 10111001 11111101 11111111 10000100 00111000 00000000 00000000 00000000 > 11011100 11111110 11111111 11000010 00011100 00000000 00000000 00000000 NAME shark_mer1 WAL true COL 3 TIL j4 00000010 00000010 00000010 00000011 00000010 00000011 00000000 00000000 TIL j5 10010000 00010000 00100000 00100000 01000000 10000000 00000000 00000000 WAL true TIL j6 00011011 00001111 00000000 00000000 00000000 00000000 00000000 00000000 > 00110111 00011110 00000000 00000000 00000000 00000000 00000000 00000000 TIL j7 00000000 00000111 00001101 00000111 00000000 00000000 00000000 00000000 > 00000000 00001111 00011011 00001111 00000000 00000000 00000000 00000000 TIL j8 00000000 10110000 11000000 10110000 00000000 00000000 00000000 00000000 > 00000000 01100000 10000000 01100000 00000000 00000000 00000000 00000000 TIL j9 00000000 00000000 00000000 00000001 00000011 00000001 00000000 00000000 > 00000000 00000000 00000000 00000011 00000110 00000011 00000000 00000000 TIL ja 00000000 00000000 00000000 11101100 01110000 11101100 00000000 00000000 > 00000000 00000000 00000000 11011000 11100000 11011000 00000000 00000000 TIL jb 00000000 00000000 00000000 11011110 00111011 11011110 00000000 00000000 > 00000000 00000000 00000000 01101111 00011101 01101111 00000000 00000000 TIL jc 00000000 00000000 00000000 00000000 00000000 00000000 00110111 00001110 > 00000000 00000000 00000000 00000000 00000000 00000000 00011011 00000111 TIL jd 00000000 00000000 00000000 00000000 00000001 00000111 00001111 00001111 TIL je 00110111 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00011011 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL jf 10000000 00000000 00000000 00000000 01101111 00011101 01101111 00000000 > 11000000 00000000 00000000 00000000 00110111 00001110 00110111 00000000 TIL jg 00011111 00011111 00011111 00011111 00111111 00111111 00111111 00111111 NAME ground WAL true COL 2 TIL jh 01101111 00011101 01101111 00000000 00000000 00000000 00000000 00000000 > 00110111 00001110 00110111 00000000 00000000 00000000 00000000 00000000 TIL ji 00000000 00000000 00000000 00000000 00000100 00000000 00000000 00000000 NAME ground COL 2 TIL jj 00000000 00000000 00001000 00000000 00000000 00000000 00000000 01000011 NAME ground COL 2 TIL jk 00111111 00111111 00111111 01111111 01111111 01111111 11111111 11111111 NAME ground WAL true COL 2 TIL jl 00000000 00000000 00000000 00000000 00000000 00000000 00000111 01111111 NAME ground WAL false COL 2 TIL jm 00000000 00000000 00000000 00000000 00000000 00000000 11111000 11111111 NAME ground WAL false COL 2 TIL jn 00000000 00000000 00000000 00000000 00000000 01111111 11111111 11111111 NAME ground WAL false COL 2 TIL jo 00000000 00000000 00000000 00000111 00111111 01111111 11111111 11111111 NAME ground WAL true COL 2 TIL jp 00000000 00111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME ground WAL true COL 2 TIL jq 00001111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME ground WAL true COL 2 TIL jr 00000000 00000000 00000000 00010000 00000000 00000000 00000000 00000000 TIL js 00000000 00000000 00000000 00000000 00000000 00001000 00000000 00000000 TIL jt 00000000 00000000 00000000 00111111 11000000 00000000 00000110 00000001 > 00000000 00000000 00000000 00011111 01100000 10000000 00000011 00000000 NAME bubble_close COL 3 TIL ju 00000000 00000000 00000000 00000000 11000000 00100000 00010000 00010000 > 00000000 00000000 00000000 10000000 01100000 00010000 00001000 10001000 NAME bubble_close COL 3 TIL jv 10001000 10001000 01001000 01001000 00001000 00010000 00010000 00100000 > 01000100 01000100 00100100 00100100 00000100 00001000 00001000 00010000 NAME bubble_close COL 3 TIL jw 00000000 00000000 00000000 00000000 00001111 00110000 01000000 10000001 > 00000000 00000000 00000000 00000000 00000111 00011000 00100000 01000000 NAME bubble_close COL 3 TIL jx 00000000 00000000 00000000 00000000 11000000 00110000 00001000 10000100 > 00000000 00000000 00000000 00000000 11100000 00011000 00000100 01000010 NAME bubble_close COL 3 TIL jy 11000000 00111111 00000000 00000000 00000000 00000000 00000000 00000000 > 01100000 00011111 00000000 00000000 00000000 00000000 00000000 00000000 NAME bubble_close COL 3 TIL jz 11000000 00000000 00000000 00000000 00000000 00000000 00000000 01110000 > 01100000 10000000 00000000 00000000 00000000 00000000 00000000 01110000 NAME bubble_close COL 3 TIL k0 00000000 00000001 00000001 00000001 00000001 00000001 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME bubble_close COL 3 TIL k1 10000000 00000000 00000000 00000000 00000000 00000000 10000000 10000000 > 01000000 10000000 10000000 10000000 10000000 10000000 01000000 01000000 NAME bubble_close COL 3 TIL k2 01000100 00100010 00100010 00010010 00010010 00000010 00000100 00000100 > 00100010 00010001 00010001 00001001 00001001 00000001 00000010 00000010 NAME bubble_close COL 3 TIL k3 10001000 10001000 10001000 01110000 00000000 00000000 00000000 00000000 NAME bubble_close COL 3 TIL k4 00000000 00000011 00000100 00000100 00001000 00001000 00010000 00010000 TIL k5 00000000 00000000 10000000 01000000 01000000 00100000 00100000 00010000 TIL k6 01000000 00110000 00001111 00000000 00000000 00000000 00000000 00000000 > 00100000 00011000 00000111 00000000 00000000 00000000 00000000 00000000 NAME bubble_close COL 3 TIL k7 00001000 00110000 11000000 00000000 00000000 00000000 00000000 00000000 > 00000100 00011000 11100000 00000000 00000000 00000000 00000000 00000000 NAME bubble_close COL 3 TIL k8 00000011 00000010 00000010 00000001 00000001 00000000 00000000 00000000 TIL k9 10000000 01111000 00000111 00000000 00000000 10000000 10000000 01000001 TIL ka 00010001 00010001 00100001 11000001 00000000 00000000 00000000 11001100 TIL kb 00010000 00001000 00001001 00000110 10000000 01000000 01000001 10000010 TIL kc 00000000 00111111 11000000 00000000 00000001 11000001 00000010 00000100 TIL kd 00000000 10000000 10000000 10000000 00000000 00000000 00000000 00000000 TIL ke 00000000 00000000 00000000 00011100 00100010 00100010 00100010 00011100 NAME bubble_close COL 3 TIL kf 00000000 00000000 00000000 00000000 00000001 00000010 00000100 00000100 TIL kg 00000000 00000000 00000000 01100000 10100000 00100000 10100000 10010001 TIL kh 00000000 00000000 00000000 00000000 00110000 01001100 10000011 00010000 TIL ki 00000000 00000000 00000000 00000000 00000000 00000000 11000000 00111000 TIL kj 00000000 00000000 00000000 00000000 00000000 11111111 11111111 11111111 WAL true TIL kk 00100000 00010000 00001000 00000100 00000010 10000010 11111010 11111010 WAL true TIL kl 00110010 00000010 00000000 00000000 00001100 00010000 00010000 00100000 WAL true TIL km 10001100 00110000 00000000 00000000 00100000 00011000 00000100 00000100 WAL true TIL kn 00001000 00010000 00100000 01000000 10000000 10011100 01011111 01011111 WAL true TIL ko 00000000 00000000 00000000 00000000 00000001 00000010 00000010 00000011 TIL kp 00000000 00000011 00111100 11000000 00001000 00010100 00001000 10000000 TIL kq 00001010 11111001 00000000 00000000 00011111 01100000 00001110 00000001 WAL false TIL kr 01010001 01001010 00000100 00000000 11000000 00100000 00100000 10100000 WAL true TIL ks 00100010 01000100 00000100 00000000 00000000 00000000 00000000 00000000 WAL true TIL kt 00000110 01000010 10010010 00000100 00000111 00000000 00000000 00000000 WAL true TIL ku 00000000 00000000 00000001 00001110 11110000 00000111 00000000 00000011 WAL true TIL kv 00000000 11100000 10010000 00001000 01101000 10001000 00001000 00001000 WAL true TIL kw 11110010 11110100 11110100 11110100 11110100 11110100 11110100 11110111 WAL true TIL kx 01000000 01000001 00000010 00000100 00001001 00010011 01100111 10001111 WAL true TIL ky 00001000 10000100 01000100 00100010 10010000 11001000 11100100 11110010 WAL true TIL kz 01011111 01011111 01011111 01001111 00101111 00101111 00101111 00101111 WAL true TIL l0 00000001 11110000 11111110 11111111 11111111 11111111 11111111 11111111 WAL true TIL l1 00000000 11000000 00111000 10000111 11110000 11111111 11111111 11111111 WAL true TIL l2 00110000 00001111 00000000 11000011 00100100 10100010 10101001 10010100 WAL true TIL l3 00100000 11000000 00000000 11110010 00001001 01101001 00100100 10110010 WAL true TIL l4 00000000 00000000 00000000 01000100 00100010 00010001 10001110 01110000 WAL true TIL l5 00000011 00011100 00010001 10001011 01011011 11100011 00001111 11111111 WAL true TIL l6 11100000 00011100 11000011 11111000 11111110 11111111 11111111 11111111 WAL true TIL l7 11101000 00001000 00010000 11100111 00001111 11111111 11111111 11111111 WAL true TIL l8 11110000 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL l9 00011111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL la 11111001 11111100 11111110 11111111 11111111 11111111 11111111 11111111 TIL lb 00101111 11101111 00001111 11111111 11111111 11111111 11111111 11111111 TIL lc 11111111 11111111 11111111 11111111 11111111 11111110 11111100 11111101 TIL ld 11111111 11111111 11111111 11111111 00001111 01100000 10010110 00001001 TIL le 11111111 11111111 11111111 11111111 11111111 00011111 11000001 00101100 TIL lf 11111111 11111111 11111111 11111111 11111111 11111111 11111111 00000111 TIL lg 11010100 11010010 11010011 11011100 11000001 11111111 11111111 11111111 TIL lh 10111001 10111100 00111111 01111111 11111111 11111111 11111111 11111111 TIL li 10000111 00111111 11111111 11111111 11111111 11111111 11111111 11111111 TIL lj 11111101 11111101 11111101 11111101 11111101 11111101 11111101 11111100 TIL lk 01100100 10100100 00010010 00010010 00010000 00001000 00001000 10001000 TIL ll 10010010 10001001 00000101 00000100 01000000 01000100 00100100 10100010 TIL lm 11110000 01001111 00100100 00000000 10010010 01010111 01001000 10010011 TIL ln 01111111 00011111 11001111 00101111 11001111 00011111 01111111 11111111 TIL lo 11111110 11111110 11111110 11111111 11111111 11111111 11111111 11111111 TIL lp 10001000 10001000 01001001 01110001 00100011 10011100 11000001 11111111 TIL lq 10100010 10100011 00101100 01110001 10000111 00111111 11111111 11111111 TIL lr 11100111 00001111 01111111 11111111 11111111 11111111 11111111 11111111 TIL ls 11111111 11111111 11111111 11111111 11111111 11111111 11111011 11111111 TIL lt 00001000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL lu 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111100 TIL lv 10000011 01000000 00100000 00010000 00001000 00000100 00000010 00000001 WAL true TIL lw 10000000 01100000 00011000 00000110 00000001 00000000 00000000 00000000 WAL true TIL lx 00000000 00000000 00000000 00000000 00000000 10000000 01000000 00100000 TIL ly 00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000000 TIL lz 00000000 10001000 10000100 01000100 01000010 01000010 00100001 00100001 WAL true TIL m0 00010000 00001000 00000100 00000010 00000001 00000000 00000000 00000000 WAL true TIL m1 00000000 00000000 00000000 00000000 00000000 10000000 10000000 01000000 TIL m2 00000010 00000001 00000001 00000001 00000000 00000000 00000000 00000000 TIL m3 01000000 00100000 00010000 00001000 10000100 10000010 10000010 01000001 WAL true TIL m4 00010000 00010000 00010000 00001000 00001000 00001000 00000100 00000100 WAL true TIL m5 10000000 10000000 10000000 01000000 01000000 00100000 00100000 00100000 WAL true TIL m6 01000000 00100000 00100000 00010000 00010000 00010000 00001000 00001000 WAL true TIL m7 01000001 01000000 01000000 01000000 01000000 01000100 01000100 01000100 WAL true TIL m8 00000000 10000000 10000000 10000000 01000000 01000000 01000000 00100000 TIL m9 00000100 00000100 00000010 00000010 00000010 00000010 00000010 00000010 WAL false TIL ma 00100000 00100000 00010000 00010000 00010000 00010000 00010000 00010000 WAL true TIL mb 00001000 00001000 00000100 00000100 00000100 00000100 00000100 00000100 WAL true TIL mc 00000000 00000000 00000000 00000000 00000000 01000000 00000000 00000000 TIL md 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000001 TIL me 01000100 10000100 10000100 10000100 10000100 00001000 00001000 00001000 WAL true TIL mf 00100000 00100000 00100000 00010000 00010000 00010000 00010000 00010000 WAL true TIL mg 00000100 00000100 00000100 00001000 00001000 00010000 00100000 01000000 WAL true TIL mh 00010000 00010000 00010000 00010000 00010000 00100000 00100000 00100000 WAL true TIL mi 00000100 00000100 00000100 00000100 00000100 00000100 00000100 00000100 WAL true TIL mj 00000000 00000000 10000000 10000000 00000000 00000000 00000000 00000000 TIL mk 00000010 00000010 00000100 00000100 00001000 00001000 00010000 00010000 WAL true TIL ml 00010000 00010000 00010000 00100000 00100000 01000000 01000000 01000000 WAL true TIL mm 00100000 00100001 00100010 01000010 01000100 01000100 01001000 10001000 WAL true TIL mn 10000000 00000000 00000000 00000000 00000000 00000001 00000001 00000010 WAL true TIL mo 00100000 01000000 01000000 10000000 10000000 00000000 00000000 00000000 WAL true TIL mp 00000100 00000100 00000100 00000100 00001000 00001000 00001000 00010000 WAL true TIL mq 00100000 00100000 00100000 01000000 01000000 01000000 01000000 01000000 WAL true TIL mr 01000000 01000001 01000001 01000001 10000010 10000010 10000010 10000010 WAL true TIL ms 10001000 00010000 00010000 00010000 00010000 00010000 11010000 11010000 WAL true TIL mt 00000010 00000010 00000100 00000100 00000100 00000100 00001000 00001000 WAL true TIL mu 00010000 00010000 00100000 00100000 01000000 01000000 10000000 00000000 WAL true TIL mv 00000000 00000000 00000000 00000000 00000000 00000011 00011100 00100000 TIL mw 00000000 00000000 00000000 00000000 00000000 11111111 01000001 11000001 TIL mx 00000000 00000000 00000000 00000000 00000000 00000000 11100000 00011000 TIL my 00000000 00000000 00000000 00000000 00000000 00000000 00111111 11111111 TIL mz 00000000 00000000 00000000 00000000 00000000 00000000 11110000 11111111 TIL n0 01000000 01000000 01000000 00100000 10100000 10100000 10100000 10010000 TIL n1 10000010 10000001 10000001 10000001 10000001 10000000 01000000 01000000 TIL n2 01010000 01010000 01001000 01101000 00101000 10101000 10100100 10110100 TIL n3 00001000 00001000 00001000 00001000 00001000 00001000 00001000 00001000 TIL n4 00000001 00000010 00000010 00000100 00000101 00000101 00001001 00001011 TIL n5 00000000 01111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL n6 00000000 00000000 00000001 00000010 11000010 11110100 11110100 11100100 WAL true TIL n7 01000000 10000000 01000000 01000000 01100000 00110001 00010110 00001000 WAL true TIL n8 10000011 10000010 10000110 10000100 10001000 11111100 01000011 01100000 WAL true TIL n9 00000100 00000010 00001101 00001000 00011000 01110000 11000001 10000111 WAL true TIL na 01111111 00111111 10011111 01000011 01111001 11000101 10000101 00001001 WAL true TIL nb 11010000 11010000 11001000 11101000 11100100 11110010 11111001 11111100 TIL nc 01000000 01000000 00100000 00100000 00010000 00001000 00000000 10000000 TIL nd 10010100 01010010 01001010 00100001 00010001 00001000 00001000 00000100 TIL ne 00000100 00000100 00000100 00000100 00000010 10000010 10000010 01000000 TIL nf 00010011 00010111 00010111 00010111 00010111 00010011 00001011 00001001 TIL ng 11101000 11101111 11101001 11101000 11101000 11101000 11101000 11101111 TIL nh 00001000 00001000 10010110 11110010 00010001 00011101 00010011 10010000 TIL ni 00100001 00100001 01000111 11101100 00011000 01000111 00100100 11000100 TIL nj 11001100 00111000 00100000 00010000 00110011 11101100 00001001 00001011 TIL nk 00010011 00100111 01001111 10011111 00111111 01111111 11111111 11111111 TIL nl 01100000 00011000 11000111 11110000 11111111 11111111 11111111 11111111 TIL nm 00000101 00001001 11110011 00000111 11111111 11111111 11111111 11111111 TIL nn 01000000 00100000 10011000 11000111 11110000 11111111 11111111 11111111 TIL no 00000101 00000101 01111001 10000011 00111111 11111111 11111111 11111111 TIL np 11101000 11100100 11110100 11110100 11110010 11111010 11111001 11111100 TIL nq 11111000 00000110 00001101 00001001 00011001 00110011 01100010 11000010 TIL nr 10001011 01001000 11110100 00100100 00100110 00100011 00100001 00110001 TIL ns 10001011 11001011 01101011 00110011 00010111 00010111 00100111 11001111 TIL nt 11111111 11111111 11111111 11111111 11111111 11111111 11101111 11111111 TIL nu 00111010 10000111 11110000 11111111 11111111 11111111 11111111 11111111 TIL nv 00010011 11111100 00000001 11111111 11111111 11111111 11111111 11111111 TIL nw 10011111 00111111 11111111 11111111 11111111 11111111 11111111 11111111 TIL nx 11011111 11111111 11111111 11111111 11111111 11111111 11111111 11101111 TIL ny 00000000 00001111 00110000 01000000 10000001 10000000 00000000 00000000 > 00000000 00000111 00011000 00100000 01000000 01000000 10000000 10000000 NAME bubble_close COL 3 TIL nz 00000000 11000000 00110000 00001000 10000100 01000100 00100010 00100010 > 00000000 11100000 00011000 00000100 11000010 00100010 00010001 00010001 NAME bubble_close COL 3 TIL o0 00000000 00000000 00000000 10000000 10000000 01000000 00110000 00001111 > 10000000 10000000 10000000 01000000 01000000 00100000 00011000 00000111 NAME bubble_close COL 3 TIL o1 00010010 00010010 00000010 00000100 00000100 00001000 00110000 11000000 > 00001001 00001001 00000001 00000010 00000010 00000100 00011000 11100000 NAME bubble_close COL 3 TIL o2 00000000 00000000 00000000 00000000 00000000 00000000 00000011 00001100 TIL o3 00000000 00000000 00000000 00000000 00000000 00000000 11111100 00000011 TIL o4 00011100 00100010 00100010 00100010 00011100 00000000 00000000 00000000 NAME bubble_close COL 3 TIL o5 00000000 00000100 00000100 00000100 00000100 00001000 00001000 00001000 TIL o6 00000000 00000000 00000000 00000000 00000000 00001000 00001000 00001000 TIL o7 00000000 00000000 00000000 00000000 00000000 11110000 11111110 11111100 WAL true TIL o8 00000000 00000000 00000000 00000011 00001100 00110000 01000000 10000001 WAL true TIL o9 00000000 00111111 11000010 00100000 00100011 01000111 00000111 11100111 WAL true TIL oa 00000000 11000000 00111111 00001000 10000100 11000100 11000100 11000100 WAL true TIL ob 00110000 11000000 10000000 01000000 00100000 00100000 00100000 00100000 TIL oc 00000000 00000000 00000001 00000001 00000000 00000000 00000000 00000000 TIL od 11000000 00100000 10010000 10001000 00000110 00000001 00111111 11000000 WAL false TIL oe 00010000 00010000 00100000 01000000 10000000 01100001 00011110 00000000 TIL of 00010000 00010000 00010000 00100000 01000000 10000000 00000000 00000000 TIL og 00000000 00000000 00000000 00000000 00000000 00000000 00000111 11111111 TIL oh 11111001 11111010 11111010 11111011 11111000 11111111 11111111 11111111 TIL oi 00000110 00001000 00001011 11001011 00101011 10011011 11000010 11111110 WAL true TIL oj 00010011 11001000 11000111 10011000 00100011 01000100 01001000 10001010 TIL ok 10001000 00010000 00000000 11111000 00000111 00011001 01100010 10000100 WAL true TIL ol 00100000 01000000 10000000 00011111 11100001 01010000 01001010 01001011 WAL true TIL om 00000001 00111000 11000100 00110011 00001000 10001000 01000101 01000100 WAL true TIL on 00011111 11000000 00111000 00000110 10000001 01000000 00100000 10011000 WAL true TIL oo 11111111 00000000 00000000 00000000 11100000 00011110 00000001 00100000 WAL true TIL op 11111111 00000000 00000000 00000000 00000000 00000000 00000000 10000000 WAL true TIL oq 10000000 01100111 00011000 00000000 00000000 00000001 00000001 00001001 WAL true TIL or 00000000 11000000 00100111 00010111 11100111 00001111 01111111 00111111 WAL true TIL os 00000000 00011111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL ot 00111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL ou 10001010 10010010 00010110 11000110 11111111 11111111 11111111 11111111 TIL ov 10100100 10101000 10101010 00101010 11100010 11111110 11111111 11111111 TIL ow 01001001 01000101 10010101 10110101 10110101 00110001 11111111 11111111 TIL ox 00100010 10100010 10010001 11010100 11000111 11111111 11111111 11111111 TIL oy 11000110 01110001 01111100 01111111 11111111 11111111 11111111 11111111 TIL oz 00011111 10001000 01001000 00100100 10010010 11001110 11100000 11111111 TIL p0 00000000 11111111 00000000 11111111 11111111 11111111 11111111 11111111 TIL p1 00011000 11100100 00000011 11111000 11111111 11111111 11111111 11111111 TIL p2 10011111 01011111 11011111 00011111 11111111 11111111 11111111 11111111 TIL p3 11111111 11111111 11111111 11111111 11111111 11111110 11111100 11111001 TIL p4 11111111 11111111 11111111 11111000 00000011 01111100 10000000 00010000 TIL p5 11111111 11111111 11111111 00000000 11111111 00000000 00100000 00100000 TIL p6 11111111 11111111 11111111 00111111 10000011 01111001 00000100 00100010 TIL p7 11111010 11111010 11111010 11111010 11111001 11111101 11111101 11111100 TIL p8 00010000 00001000 00001000 00001000 00000100 00000100 00000100 10000010 TIL p9 00100001 00100001 00100001 00100001 01000001 01000010 01000010 10000010 TIL pa 01111111 01111111 01111111 01111111 01111111 01111111 11111111 11111111 TIL pb 11111111 11011111 11111111 11111111 11111111 11111111 11111111 11111111 WAL true TIL pc 11111110 11111110 11111111 11111111 11111111 11111111 11111111 11111111 TIL pd 10000010 01000001 01000001 00100000 10010000 11001000 11001000 11010000 TIL pe 00010000 00001000 00001001 10001001 10001001 00000000 00000000 00000000 TIL pf 10000100 10000101 00001001 00001011 00010011 00100111 00100111 00010111 TIL pg 11010000 11011111 11000000 11111111 11111111 11111111 11111111 11111111 TIL ph 00010111 11110111 00000111 11111111 11111111 11111111 11111111 11111111 TIL pi 11111111 11111111 11111111 11111111 11111111 11111000 11111011 11111010 NAME border TIL pj 11111111 11111111 11111111 11111111 11111111 00000000 11111111 00000000 NAME border TIL pk 11111111 11111111 11111111 11111111 11111111 00011111 11011111 01011111 NAME border TIL pl 11111010 11111010 11111010 11111010 11111010 11111010 11111010 11111010 NAME border TIL pm 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11110001 NAME ponytail COL 4 TIL pn 00000000 00000000 00000000 00000000 00000000 00000000 11100000 00010000 NAME ponytail COL 4 TIL po 01011111 01011111 01011111 01011111 01011111 01011111 01011111 01011111 NAME border TIL pp 00000000 00000000 00000000 00000000 00000001 00000011 00000011 00000111 NAME nessy COL 5 TIL pq 00000000 00000000 00000000 01111000 11111110 11111111 11111111 11111111 NAME nessy COL 5 TIL pr 00000000 00000000 00000000 00000111 00011111 00111111 01111111 01111111 NAME nessy COL 5 TIL ps 00000000 00000000 00000000 10000000 11100000 11110000 11110000 11111000 NAME nessy COL 5 TIL pt 00001111 00011111 00011111 00111111 00111111 00111111 00111111 00111111 NAME ponytail COL 4 TIL pu 11111101 11111110 11111110 11111110 11000011 10000011 10000111 11001111 NAME ponytail COL 4 TIL pv 00010000 00011111 00111111 01111111 11111111 11111111 11111111 11111111 NAME ponytail COL 4 TIL pw 00000000 11111000 11111110 11111111 11111111 11111111 11111111 11111111 NAME ponytail COL 4 TIL px 00000000 00000000 00000000 00000000 10000000 10000000 11000000 11000000 NAME ponytail COL 4 TIL py 00000111 00000111 00000111 00000111 00000011 00000011 00000000 00000000 NAME nessy COL 5 TIL pz 11111111 11111111 11111111 11111111 11111111 11111111 11111111 00011111 NAME nessy COL 5 TIL q0 10000000 10000000 11111111 11111111 11111111 11111111 11111111 11111111 NAME nessy COL 5 TIL q1 11111000 11111000 11111000 11111000 11110000 11110000 11100000 10000000 NAME nessy COL 5 TIL q2 00111111 00111111 00111111 00111111 00111111 00011111 00011111 00001111 NAME ponytail COL 4 TIL q3 11110111 11110111 11100111 11100111 11100111 11000111 11000111 11000111 NAME ponytail COL 4 TIL q4 11110111 11110001 11110000 11100000 11100011 11100000 11001100 11001000 NAME ponytail COL 4 TIL q5 11111111 11111111 00000011 00000001 00001101 10000000 00000110 00000100 NAME ponytail COL 4 TIL q6 11000000 11100000 11100000 11100000 11100000 11100000 01100000 01000000 NAME ponytail COL 4 TIL q7 00111111 00111111 00111111 01111110 01111100 01111011 01111000 01110011 NAME nessy COL 5 TIL q8 11011111 10001111 00001111 00000111 10000011 00000000 00000000 00000001 NAME nessy COL 5 TIL q9 11111110 11111111 11111111 11111111 11111111 11111111 00111111 10001111 NAME nessy COL 5 TIL qa 00000000 00000000 00000000 10000000 10000000 10000000 10000000 11000000 NAME nessy COL 5 TIL qb 00001111 00001111 00000111 00000111 00000111 00001111 00001110 00011100 NAME ponytail COL 4 TIL qc 11000011 10011111 10010011 10001001 00000100 00001001 00001110 00000100 NAME ponytail COL 4 TIL qd 11001000 10000000 10101000 00101000 00000000 00000000 10000000 01000000 NAME ponytail COL 4 TIL qe 00100100 00100000 00000101 00000101 00000000 11100000 00000000 00000000 NAME ponytail COL 4 TIL qf 01000000 01000000 01000000 01000000 01000000 01000000 10000000 10000000 NAME ponytail COL 4 TIL qg 01110001 01110001 01110100 01110000 00110010 00111000 00111000 00110100 NAME nessy COL 5 TIL qh 00000000 00010000 00010000 10000000 00000000 00111110 00000000 00000000 NAME nessy COL 5 TIL qi 10000010 10000000 00010001 10000000 00100010 00000111 00000111 00001011 NAME nessy COL 5 TIL qj 01000000 10000000 10000000 10000000 01000000 11000000 00000000 00000000 NAME nessy COL 5 TIL qk 00000100 00000000 00000100 00000000 00000000 00000000 00000000 00000000 NAME ponytail COL 4 TIL ql 00100000 00011000 00000111 00000100 00000100 00000100 00000100 00111000 NAME ponytail COL 4 TIL qm 00000001 00000110 11111000 00100000 00100000 00100000 00100000 00010000 NAME ponytail COL 4 TIL qn 00010010 00011001 00001000 00000100 00000000 00000000 00000000 00000000 NAME nessy COL 5 TIL qo 00000000 10000000 01111111 00100001 00100001 11111111 11111111 01111111 NAME nessy COL 5 TIL qp 00010010 01100110 10000100 00001000 00000000 11000000 11000000 10000000 NAME nessy COL 5 TIL qq 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000010 NAME ponytail COL 4 TIL qr 00000011 00001111 00110011 01000011 10000111 00000111 00000111 00001111 NAME ponytail COL 4 TIL qs 11000100 11100010 11110001 11111001 11111100 11111110 11111111 11111111 NAME ponytail COL 4 TIL qt 00011100 10100011 11000111 11001111 10011111 00011111 00111111 11111111 NAME ponytail COL 4 TIL qu 00000000 00000000 11000000 10100000 10010000 10001000 11001000 11000100 NAME ponytail COL 4 TIL qv 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000011 NAME nessy COL 5 TIL qw 00000001 00001111 00111111 01111111 11111111 11111111 11111111 11111111 NAME nessy COL 5 TIL qx 00000000 00000000 00000000 10000000 11000000 11100000 11100000 11110000 NAME nessy COL 5 TIL qy 11111010 11111011 11111000 11111111 11111111 11111111 11111111 11111111 NAME border TIL qz 00000000 11111111 00000000 11111111 11111111 11111111 11111111 11111111 NAME border TIL r0 01011111 11011111 00011111 11111111 11111111 11111111 11111111 11111111 NAME border TIL r1 00000000 00000000 00000000 00000000 00000000 00110000 01001000 01001000 NAME stingray COL 6 TIL r2 00000000 00000000 00000000 00000000 00000000 00000000 00001100 00010010 NAME stingray COL 6 TIL r3 01001000 01000100 01000100 00100100 00100011 00100000 01000000 01000000 NAME stingray COL 6 TIL r4 00000000 00000000 00000000 00000000 11111110 00000001 00000000 00000000 NAME stingray COL 6 TIL r5 00010010 00010010 00100010 00100010 00100100 11000100 00000100 00000100 NAME stingray COL 6 TIL r6 00000000 00000001 00000001 00000010 00000010 00000010 00000010 00000010 NAME stingray COL 6 TIL r7 10000000 00000000 00000000 00000000 00000000 00000001 00000001 00000001 NAME stingray COL 6 TIL r8 00000000 00000000 00000000 01000000 00000000 10000000 00000000 00000000 NAME stingray COL 6 TIL r9 00000100 00000010 00000001 01000001 00000000 00110000 00100000 00100000 NAME stingray COL 6 TIL ra 00000000 00000000 00000000 00000000 10000000 10000000 01000000 01000000 NAME stingray COL 6 TIL rb 00000010 00000010 00000010 00000001 00000001 00000000 00000000 00000000 NAME stingray COL 6 TIL rc 00010001 00001000 00000000 00000000 00000000 10000000 01100000 11111111 NAME stingray COL 6 TIL rd 00000010 00000010 00000000 00000000 00000000 00111111 00000000 11111111 NAME stingray COL 6 TIL re 00100010 00000100 00000000 00000000 00000000 11000000 00000001 11111111 NAME stingray COL 6 TIL rf 01000000 01000000 01000000 01000000 10000000 10000000 00000000 11000000 NAME stingray COL 6 TIL rg 11111111 11111111 11111111 01111111 00111111 00011111 01111111 11111111 NAME stingray COL 6 TIL rh 11000000 11000000 11000000 10000000 00000000 00000000 00000000 10000000 NAME stingray COL 6 TIL ri 00000011 00000111 00001111 00001111 00011111 00011111 00111111 00111111 NAME stingray COL 6 TIL rj 11000000 11100000 11100000 11110000 11110000 11111000 11111000 11111000 NAME stingray COL 6 TIL rk 00000000 00000000 00000000 00000000 00111000 00100110 00010001 00010000 NAME tropical_fish COL 7 TIL rl 00000000 00000000 00000000 00000000 01110000 10001100 01000010 00100001 NAME tropical_fish COL 7 TIL rm 00001000 00001000 00001000 00001000 00000100 00000100 00000100 00000100 NAME tropical_fish COL 7 TIL rn 00100000 00011000 00000110 00000001 00000000 00000000 00000000 00000000 NAME tropical_fish COL 7 TIL ro 00000000 00000000 00000000 10000000 01100000 00010000 00001000 00000100 NAME tropical_fish COL 7 TIL rp 00100000 00010000 00010000 00001000 00001000 00000100 00000100 00000100 NAME tropical_fish COL 7 TIL rq 10000100 10000010 01000010 01000010 00100010 00100010 00010010 00010010 NAME tropical_fish COL 7 TIL rr 00000000 00000000 00000000 10000000 10000000 01000000 01000000 00100000 NAME tropical_fish COL 7 TIL rs 00000010 00000010 00000010 00000001 00000001 00000001 00000010 00000010 NAME tropical_fish COL 7 TIL rt 00001010 00000110 00000000 00000000 00000000 00000000 00000000 00000000 NAME tropical_fish COL 7 TIL ru 00000000 00000000 00000000 00000101 00000101 00000000 00000000 00000000 NAME tropical_fish COL 7 TIL rv 00110000 00100000 00100000 00000000 00000000 00000000 00000000 00000000 NAME tropical_fish COL 7 TIL rw 00100000 00011100 00000010 00000010 00000100 00000010 00000010 00001100 NAME tropical_fish COL 7 TIL rx 00000010 00000100 00000100 00000100 00001000 00001000 00010000 00010000 NAME tropical_fish COL 7 TIL ry 00000001 00000010 00000110 00000100 00001000 00001000 00010000 00100001 NAME tropical_fish COL 7 TIL rz 00000000 10000000 10000000 10000000 10000000 10000000 10000000 00000000 NAME tropical_fish COL 7 TIL s0 00000000 00000000 00000000 00000001 00000110 00011000 01100000 10000000 NAME tropical_fish COL 7 TIL s1 00010000 00100000 01000000 10000000 00000000 00000000 00000000 00000000 NAME tropical_fish COL 7 TIL s2 00100000 00100000 01000011 10001100 11110000 00000000 00000000 00000000 NAME tropical_fish COL 7 TIL s3 01000001 10000010 00000010 00000100 00001000 00011111 00000000 00000000 NAME tropical_fish COL 7 TIL s4 00000001 00000010 00001100 00110000 11000000 00000000 00000000 00000000 NAME tropical_fish COL 7 TIL s5 00000000 00000000 00000000 00000000 00000000 00000001 00000010 00000100 NAME turtle COL 8 TIL s6 00000000 00000000 00000000 00000000 00111110 11000001 00000000 00000000 NAME turtle COL 8 TIL s7 00000000 00000000 00000000 00000000 11111000 10011111 10011111 10110011 NAME turtle COL 8 TIL s8 00000000 00000000 00000000 00000000 00000000 00000000 10000000 11011000 NAME turtle COL 8 TIL s9 00001000 00010000 00010000 00010000 00100000 00100001 01000000 01000000 NAME turtle COL 8 TIL sa 00000000 00001100 00001000 00001000 00001000 00000000 00100000 10000100 NAME turtle COL 8 TIL sb 00010000 00001000 00001000 00000100 00000100 00000100 00000100 00000100 NAME turtle COL 8 TIL sc 10100001 10100001 10100001 11100111 10111100 10010000 10010000 10010000 NAME turtle COL 8 TIL sd 11111100 01111101 01111110 01111100 01111100 01111100 01111110 00111110 NAME turtle COL 8 TIL se 10000000 00000000 00000000 00000000 00000000 00000001 00000010 00000100 NAME turtle COL 8 TIL sf 00000011 00000000 00000000 00000000 01111111 10000000 00000000 00000000 NAME turtle COL 8 TIL sg 11111100 00001000 00010000 11100000 00000000 00000000 00000000 00000000 NAME turtle COL 8 TIL sh 10111000 11101100 10000111 10000010 10000010 10000010 10000110 11111111 NAME turtle COL 8 TIL si 00111111 11111111 10011111 00001111 00001111 00011000 00010000 11111111 NAME turtle COL 8 TIL sj 00001000 11110000 11111000 11111100 11111100 11111000 01001100 11111100 NAME turtle COL 8 TIL sk 00000000 00000000 00000000 00000000 01000000 10100000 01000000 00000000 TIL sl 00110100 10010100 01000100 10010100 01000100 00101000 00011000 00010000 NAME octopus COL 9 TIL sm 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00011111 NAME octopus COL 9 TIL sn 00000000 00000000 00000000 00000011 00000100 00001000 00010011 00010100 NAME octopus COL 9 TIL so 00000000 00000000 11111100 00000011 00000000 01111000 00111011 00000001 NAME octopus COL 9 TIL sp 00000000 00000001 00000010 00000100 00001000 00010000 00010000 00100000 NAME octopus COL 9 TIL sq 01100000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME octopus COL 9 TIL sr 11000000 00100000 00010000 00001000 00000100 00000100 00000010 00000010 NAME octopus COL 9 TIL ss 00100001 00101010 00101001 00100110 00101000 00101000 00010000 00000000 NAME octopus COL 9 TIL st 10111000 00000011 11111001 00000100 00000010 00000001 00000000 00000000 NAME octopus COL 9 TIL su 00100000 01000000 01000000 01000000 01000000 01000000 01000000 01000000 NAME octopus COL 9 TIL sv 00000000 00000000 10000000 10000000 10000000 01000000 01000000 01000000 NAME octopus COL 9 TIL sw 00100000 00100000 00100000 00010000 00010000 00001000 00001000 00000100 NAME octopus COL 9 TIL sx 00000000 00000000 00000000 00000001 00000010 00000100 00000100 00000100 NAME octopus COL 9 TIL sy 00110000 00001000 00000100 11100010 00010001 00001001 11001000 10000000 NAME octopus COL 9 TIL sz 00000000 00000000 00000000 00000000 00000000 00000000 10000000 10000000 NAME octopus COL 9 TIL t0 00000010 00000001 00000000 11111000 00000110 00000001 00000000 00000000 NAME octopus COL 9 TIL t1 00000000 00000000 11000000 00111000 00000110 00000001 10000001 01100010 NAME octopus COL 9 TIL t2 00000100 00000010 00000000 00000000 00000000 00000000 00000001 00000000 NAME octopus COL 9 TIL t3 10000000 00000000 00000000 00000000 00000000 00000000 00000000 11000001 NAME octopus COL 9 TIL t4 01000000 01000000 01000000 01000000 01000000 01000000 10000000 00000001 NAME octopus COL 9 TIL t5 00111110 00010000 00001000 00000110 00000001 00000000 00000000 00000000 NAME octopus COL 9 TIL t6 00000010 00000010 00000100 00001000 11110000 00000000 00000000 00000000 NAME octopus COL 9 TIL t7 00000000 00000000 00000000 00100000 01000000 11000000 11000000 01000000 NAME sharkgirl COL 10 TIL t8 00000011 00000010 00000110 00000110 00001100 00001100 00001100 00001100 NAME sharkgirl COL 10 TIL t9 01000000 01000000 01000001 00100011 00100111 00011111 00001111 00001110 NAME sharkgirl COL 10 TIL ta 00000000 01111111 11111111 11111000 11000000 00000000 00000000 00000000 NAME sharkgirl COL 10 TIL tb 00000000 11100000 11111000 00000100 00000010 00000010 00000001 00000001 NAME sharkgirl COL 10 TIL tc 00001100 00001100 00001100 00001100 00001110 00000111 00000111 00000001 NAME sharkgirl COL 10 TIL td 00011110 00011100 00011100 00011101 00011101 00011001 11111001 11111001 NAME sharkgirl COL 10 TIL te 01001000 10001000 11111111 00000000 00000000 00000100 01111001 00100010 NAME sharkgirl COL 10 TIL tf 00010001 00010000 11111111 00000001 01100001 10000001 00111001 00010001 NAME sharkgirl COL 10 TIL tg 00000000 10000000 10000000 00000000 00000000 00000000 00000000 00000000 NAME sharkgirl COL 10 TIL th 00011010 01111010 01001100 00100000 00010000 00100110 00111010 00001001 NAME sharkgirl COL 10 TIL ti 01110010 00000100 00000100 00000100 00001000 00010000 00000011 00000000 NAME sharkgirl COL 10 TIL tj 10111001 10000001 00000001 00000001 00000001 00000001 10000010 00000010 NAME sharkgirl COL 10 TIL tk 00010100 00010100 00010100 00001000 00000000 00000000 00000000 00000000 NAME sharkgirl COL 10 TIL tl 10000000 01100000 00011111 00010000 00010000 00010000 00010000 11100000 NAME sharkgirl COL 10 TIL tm 00000100 00011000 11100000 10000000 10000000 10000000 10000000 01000000 NAME sharkgirl COL 10 TIL tn 00000000 00000000 00000000 00000001 00000011 00000111 00000111 00001111 NAME sharkgirl COL 10 TIL to 00001111 00111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME sharkgirl COL 10 TIL tp 00000000 10000000 11110000 11111110 11111111 11111111 11111111 11111111 NAME sharkgirl COL 10 TIL tq 00110000 00001100 00000111 00000110 10000110 11110110 11111111 11111111 NAME sharkgirl COL 10 TIL tr 00000000 00000000 00000000 10000000 01000000 00100000 11100000 11110000 NAME sharkgirl COL 10 TIL ts 00000000 00000000 00000000 00000000 00000001 00000111 00011111 00111111 NAME goldfish COL 11 TIL tt 00000000 00000000 00000000 00111111 11111111 11111111 11111111 11111111 NAME goldfish COL 11 TIL tu 00000000 00000000 00000000 11000000 11110000 11111000 11111000 11111100 NAME goldfish COL 11 TIL tv 00000000 00000000 00000011 00001111 00011111 00111111 00111111 00111111 NAME goldfish COL 11 TIL tw 11111100 11111100 11111100 11111100 11111100 11111100 11111100 11111000 NAME goldfish COL 11 TIL tx 01111111 01111111 01111111 01111111 01111111 01111110 01111100 01111000 NAME goldfish COL 11 TIL ty 11111111 10111111 10011111 00000111 00000000 01100000 00010001 11000000 NAME goldfish COL 11 TIL tz 11111111 11110111 11111001 11111110 11111110 00111100 10000100 01100100 NAME goldfish COL 11 TIL u0 11111000 11110000 11000000 00000000 00000000 00000000 00000000 00000000 NAME goldfish COL 11 TIL u1 00000000 00000001 00000001 00000000 00000000 00000000 00000000 00000000 NAME goldfish COL 11 TIL u2 00110000 11110000 00100010 10010111 01000010 10011000 11101000 00000100 NAME goldfish COL 11 TIL u3 10000000 10000010 00000010 00000000 00000000 00000000 00001111 00000000 NAME goldfish COL 11 TIL u4 01000100 01000100 00000100 00000100 00000100 10000100 00001000 00001000 NAME goldfish COL 11 TIL u5 00000010 00000001 00000000 00000000 00000000 00000000 00000000 00000011 NAME goldfish COL 11 TIL u6 00000000 10000000 01111111 01000010 01000010 01000010 01000010 10000001 NAME goldfish COL 11 TIL u7 00010000 01100000 10000000 00000000 00000000 00000000 00000000 00000000 NAME goldfish COL 11 TIL u8 00000000 00000000 00000011 00000100 00001000 00010000 00010000 00100000 NAME goldfish COL 11 TIL u9 00111100 11001010 00000101 00000100 00000010 00000001 00000000 00000000 NAME goldfish COL 11 TIL ua 00000000 00000000 10000000 01111011 00000100 00000100 11001010 00111011 NAME goldfish COL 11 TIL ub 11000000 00110000 11011100 00010010 00100001 00100000 01000000 10000000 NAME goldfish COL 11 TIL uc 00000000 00000111 00011111 00111111 01111111 11111100 11110000 11110000 NAME glowfish COL 3 TIL ud 00000000 11111111 11111110 11111001 11110111 00001000 00000000 00000000 NAME glowfish COL 3 TIL ue 00000000 00000000 11111000 11000110 11100001 11100000 00110000 00010000 NAME glowfish COL 3 TIL uf 00000000 00000000 00000000 00000000 00000000 10000000 01000000 01000000 NAME glowfish COL 3 TIL ug 11100000 11100000 11100000 11100000 11100011 11000000 11000011 11000010 NAME glowfish COL 3 TIL uh 00000000 00000000 00000000 01000100 10000011 00000000 00000001 00000001 NAME glowfish COL 3 TIL ui 00010000 00010000 00010000 00010000 10010000 00010000 10010000 00010000 NAME glowfish COL 3 TIL uj 01000000 00100000 00100000 00100000 01110000 10001000 10001000 10001000 NAME glowfish COL 3 TIL uk 00000001 00000111 00000100 00000010 00000001 00000010 00000011 00000000 NAME glowfish COL 3 TIL ul 11000111 11000000 11000100 00001001 00000000 01100000 11100000 11110000 NAME glowfish COL 3 TIL um 00010011 00010000 10000010 00000100 00000000 00000000 00010000 00000000 NAME glowfish COL 3 TIL un 10010000 00010000 01010000 10010000 00010000 00010000 00100000 00100000 NAME glowfish COL 3 TIL uo 01110000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME glowfish COL 3 TIL up 00000001 00000001 00000011 00000011 00000111 00000111 00001111 00001111 NAME glowfish COL 3 TIL uq 11111000 11111110 11111111 11111111 11111111 11111111 11111111 11111110 NAME glowfish COL 3 TIL ur 00000000 00000001 11111111 00001111 11111111 11111111 00001111 00000111 NAME glowfish COL 3 TIL us 01110000 11110000 11111000 11111000 11111000 11111100 11111100 11111110 NAME glowfish COL 3 TIL ut 00011111 00011111 00001100 00010000 00100000 01000000 01000000 10000000 NAME glowfish COL 3 TIL uu 11110000 10000000 01000000 00100000 00011100 00000011 00000000 00000000 NAME glowfish COL 3 TIL uv 00000011 00000000 00000000 00000000 00000001 11111110 00000000 00000000 NAME glowfish COL 3 TIL uw 11111110 11111110 00111100 01001000 10000100 00000010 00000010 00000001 NAME glowfish COL 3 TIL ux 00000000 00000000 00000000 00000000 00000000 00000000 00000111 00111000 NAME jellyfish1 COL 12 TIL uy 00000000 00000000 00000000 00000000 00000000 11111111 00000000 00000000 NAME jellyfish1 COL 12 TIL uz 00000000 00000000 00000000 00000000 00000000 11100000 00011000 00000110 NAME jellyfish1 COL 12 TIL v0 00000000 00000000 00000001 00000001 00000010 00000010 00000010 00000100 NAME jellyfish1 COL 12 TIL v1 00000001 00000000 00000000 00000000 00000000 00000000 00000000 10000000 NAME jellyfish1 COL 12 TIL v2 00000000 10000000 01000000 01000000 01000000 00100000 00100000 00100000 NAME jellyfish1 COL 12 TIL v3 00000000 00000001 00000001 00000001 00001000 00000000 00010010 00000000 NAME jellyfish1 COL 12 TIL v4 00000000 10000000 00000000 00000000 00000000 00111111 00100000 00011111 NAME jellyfish1 COL 12 TIL v5 00000000 00110000 00100000 00100100 00000000 10000000 10000100 00000000 NAME jellyfish1 COL 12 TIL v6 00010000 00010000 00010000 00001000 10001000 00000100 00000010 00000001 NAME jellyfish1 COL 12 TIL v7 01000000 10000000 10000000 10000000 10000000 01100011 00011101 00000001 NAME jellyfish1 COL 12 TIL v8 00000000 00000000 00000000 00000000 11100000 00010000 00001100 10000011 NAME jellyfish1 COL 12 TIL v9 00000000 00000000 00000000 00000000 00000000 00000111 00011000 11100000 NAME jellyfish1 COL 12 TIL va 00000000 00000000 00000000 00000000 00000000 00000011 11111100 01000000 NAME jellyfish1 COL 12 TIL vb 00000001 00000001 00000001 00000001 11000010 00111100 00010000 00110000 NAME jellyfish1 COL 12 TIL vc 00000000 00000000 00000001 00000011 00000110 00000100 00000110 00000010 NAME jellyfish1 COL 12 TIL vd 10000001 10000001 10000001 00000000 00000000 00000000 00000000 00000000 NAME jellyfish1 COL 12 TIL ve 00000000 00000000 10000000 11000000 01000000 11000000 10000000 10000000 NAME jellyfish1 COL 12 TIL vf 01000000 01110000 00011000 00001000 00001000 00011000 00110000 00100000 NAME jellyfish1 COL 12 TIL vg 00100000 00110000 00011000 00001000 00011000 00110000 00100000 00100000 NAME jellyfish1 COL 12 TIL vh 01000000 10000000 00000000 00000000 00000000 00000001 00000001 00000000 NAME jellyfish2 COL 4 TIL vi 00000000 00000000 00000000 00000000 00000000 11110101 11110101 11101000 NAME jellyfish2 COL 4 TIL vj 00000001 00000000 00000000 00000000 00000000 11110000 11110000 11100000 NAME jellyfish2 COL 4 TIL vk 00000000 00000001 00000001 00000011 00000100 00000000 00000000 00000000 NAME jellyfish2 COL 4 TIL vl 00000000 10000000 00000000 10000000 00000000 00001111 00010000 00111111 NAME jellyfish2 COL 4 TIL vm 00000000 00110000 00100000 01110000 00001000 00000000 10000000 11000000 NAME jellyfish2 COL 4 TIL vn 00010000 00010000 00010000 00001000 00001000 00000100 00000010 00000001 NAME jellyfish2 COL 4 TIL vo 00100111 00100011 00011111 00000000 00000000 00000111 00011000 11100000 NAME jellyfish2 COL 4 TIL vp 11000000 11000000 10000000 00000000 00000000 00000011 11111100 01000000 NAME jellyfish2 COL 4 TIL vq 00000000 00000000 00000000 00000000 00100000 01010000 01001000 10001000 NAME star COL 3 TIL vr 00000000 00000000 00000001 00000001 00000001 00000010 00000010 00000010 NAME star COL 3 TIL vs 10000100 10000010 00000010 00000001 00000001 00000000 00000000 00000000 NAME star COL 3 TIL vt 00000000 00000000 00000000 00000000 11111100 00000011 00000000 00000000 NAME star COL 3 TIL vu 00000010 00000110 00000101 00000100 00000100 11100100 00011000 00000000 NAME star COL 3 TIL vv 00000000 00001100 10011010 01111111 00011110 00011110 00001100 00000000 NAME star COL 3 TIL vw 01000000 01100000 10100000 00010000 00010000 00001000 00000111 00000000 NAME star COL 3 TIL vx 00000000 00000000 00000000 00000111 00111000 11000000 00000000 00000000 NAME star COL 3 TIL vy 00000000 00000000 00000000 10000000 01000000 00100000 00010000 00001000 NAME star COL 3 TIL vz 00000000 00000000 00000000 00000001 00000001 00000001 00000001 00011100 NAME star COL 3 TIL w0 00000000 00000000 00000000 00001100 00001000 00001000 00001000 00000011 NAME star COL 3 TIL w1 00000000 00000000 00000000 00000000 00000000 00000001 00000010 10000100 NAME star COL 3 TIL w2 00000100 00000010 00000001 00000001 00000010 00000100 00001000 00010000 NAME star COL 3 TIL w3 00000000 00000000 00000000 00100000 00011111 00000000 00000000 00000000 NAME star COL 3 TIL w4 00000011 00000000 00000000 00000000 11000000 00000000 00000000 00000000 NAME star COL 3 TIL w5 10001000 00001000 00000100 00000010 00000001 00000000 00000000 00000000 NAME star COL 3 TIL w6 00000000 00000011 00001111 00011111 00111111 00111011 01110001 01111011 NAME jellymer COL 4 TIL w7 00000000 11000000 11110000 11111100 11111110 11111110 11111111 11111111 NAME jellymer COL 4 TIL w8 01111111 01111111 01111111 11111111 11111111 11111111 11111111 11111100 NAME jellymer COL 4 TIL w9 11111111 11111111 11111111 11111111 11111111 11111111 11111111 00000000 NAME jellymer COL 4 TIL wa 11111111 11111111 11111111 11111111 11111111 11111111 11111111 00000110 NAME jellymer COL 4 TIL wb 10000000 10000000 10000000 10000000 10000000 10000000 00000000 00000000 NAME jellymer COL 4 TIL wc 00000000 00000001 00000001 00000001 00000001 00000001 00000001 00000001 NAME jellymer COL 4 TIL wd 11111100 11111100 11111100 11111100 11111101 11111100 11111100 11111100 NAME jellymer COL 4 TIL we 11000000 10000000 10000010 00000010 00000000 00000000 00000010 00000010 NAME jellymer COL 4 TIL wf 01100110 01000111 01000111 00000111 00100111 00000111 00001111 00001111 NAME jellymer COL 4 TIL wg 00000000 00000000 00000000 10000000 10000000 10000000 10000000 10000000 NAME jellymer COL 4 TIL wh 00000001 00000001 00000001 00000001 00000001 00000010 00001111 00011111 NAME jellymer COL 4 TIL wi 11111010 11111001 11110000 11110000 11100000 11000000 00000000 00000011 NAME jellymer COL 4 TIL wj 00000000 10000000 01111111 01000010 01111110 01011010 01111110 10011001 NAME jellymer COL 4 TIL wk 00011111 01111111 10111111 00011111 00000111 00000011 00000000 11000000 NAME jellymer COL 4 TIL wl 10000000 10000000 10000000 10000000 10000000 01000000 11110000 11111000 NAME jellymer COL 4 TIL wm 00111111 00111111 00111110 00111110 00111110 00011101 00001101 00000011 NAME jellymer COL 4 TIL wn 00111100 01001100 10001111 10001100 11111111 11111111 11111111 11111111 NAME jellymer COL 4 TIL wo 00000000 00000000 11111111 00000000 11111111 11111111 11111111 11111111 NAME jellymer COL 4 TIL wp 00111100 00110010 11110001 00110001 11111111 11111111 11111111 11111111 NAME jellymer COL 4 TIL wq 11111100 11111100 01111100 01111100 01111100 10111000 10110000 11000000 NAME jellymer COL 4 TIL wr 00000000 00000000 00000000 00001100 00001010 00001001 00000100 00000100 NAME fish COL 13 TIL ws 00000000 00000000 00000000 00000000 00111110 00010001 00001000 01111000 NAME fish COL 13 TIL wt 00000000 00000000 00000000 00000000 00000000 10000000 01100000 00010000 NAME fish COL 13 TIL wu 00000100 00000010 00000010 00000010 00000010 00000010 00000010 00000100 NAME fish COL 13 TIL wv 01000001 00100110 00111000 00000000 00000000 00000000 00110000 01010000 NAME fish COL 13 TIL ww 10000000 00000000 00000000 00000000 00000000 00000000 00000001 00110000 NAME fish COL 13 TIL wx 00001100 00000010 00000001 00110000 00100000 01110000 00000000 01000000 NAME fish COL 13 TIL wy 00000000 00000000 00000000 10000000 10000000 01110000 00010000 00100000 NAME fish COL 13 TIL wz 00000100 00000100 00001001 00001010 00001100 00000000 00000000 00000000 NAME fish COL 13 TIL x0 01001000 10000100 00000011 00000000 00000000 00000000 00000000 00000000 NAME fish COL 13 TIL x1 01000010 01111100 00000000 11000000 00111111 00000000 00000000 00000000 NAME fish COL 13 TIL x2 00000000 00000001 00000110 00111000 11000000 00000000 00000000 00000000 NAME fish COL 13 TIL x3 10010000 01110000 00000000 00000000 00000000 00000000 00000000 00000000 NAME fish COL 13 TIL x4 00000000 11000000 11100000 11100000 11000000 00000000 00000000 00000000 NAME whale_shark2 COL 3 TIL x5 00000000 00000000 00000000 00110000 01111000 01111000 00110000 00000000 NAME whale_shark2 COL 3 TIL x6 11110000 01100000 00000000 00000000 00000000 00000000 00000000 00000000 NAME whale_shark2 COL 3 TIL x7 00000000 00000000 00000000 00000000 00000000 01100000 11110000 11110000 NAME whale_shark2 COL 3 TIL x8 01111000 01111000 00110000 00000000 00000000 00000000 00000000 00000000 NAME whale_shark2 COL 3 TIL x9 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00011000 NAME whale_shark2 COL 3 TIL xa 00000000 00000000 00000000 00000000 00000011 00000111 00000111 00000011 NAME whale_shark2 COL 3 TIL xb 00000000 00000000 00000000 00000000 00000000 10000000 10000000 00000000 NAME whale_shark2 COL 3 TIL xc 01100000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME whale_shark2 COL 3 TIL xd 00000000 00000000 00000001 00000011 00000011 00000001 00000000 00000000 NAME whale_shark2 COL 3 TIL xe 00111100 00111100 00011000 00000000 00000000 00000000 00000000 00000000 NAME whale_shark2 COL 3 TIL xf 00000000 00000000 00000000 00000000 00000011 00000100 00001000 00001001 NAME whale_shark2 COL 3 TIL xg 00000000 00000000 00000000 11111111 00000000 00111110 11111111 11111111 NAME whale_shark2 COL 3 TIL xh 00000011 00000111 00000111 10000011 01100000 00010000 10001000 11001000 NAME whale_shark2 COL 3 TIL xi 00000000 00000000 00000000 00000000 00011000 00111100 00111100 00011000 NAME whale_shark2 COL 3 TIL xj 00010011 00010011 00010011 00010011 00010011 00010011 00010011 00001001 NAME whale_shark2 COL 3 TIL xk 11100100 01100100 11100100 11100100 11100100 11100100 11100100 11001000 NAME whale_shark2 COL 3 TIL xl 00001000 00000100 00000011 00000000 00000000 00000000 00000000 00000000 NAME whale_shark2 COL 3 TIL xm 11111111 00111110 00000000 11111111 00000000 00000000 00000110 00001111 NAME whale_shark2 COL 3 TIL xn 10001000 00010000 01100000 10000000 00000000 00000000 00000000 00000000 NAME whale_shark2 COL 3 TIL xo 00000000 00000000 00000000 00000000 10000000 11000000 11000000 10000000 NAME whale_shark2 COL 3 TIL xp 00000000 00011000 00111100 00111100 00011000 00000000 00000000 00000000 NAME whale_shark2 COL 3 TIL xq 00001111 00000110 00000000 00000000 00000000 00000000 00000000 00000000 NAME whale_shark2 COL 3 TIL xr 00000000 00000000 00000000 00000000 00000000 00000000 01100000 11110000 NAME whale_shark2 COL 3 TIL xs 00000000 00000000 00001100 00011110 00011110 00001100 00000000 00000000 NAME whale_shark2 COL 3 TIL xt 00000000 00000000 00000000 00000000 00110000 01001000 10000100 00000010 NAME goby_fish COL 4 TIL xu 00000000 00111000 00100111 00100000 00101000 00100100 00010010 00010010 NAME goby_fish COL 4 TIL xv 00000000 00000000 00000000 11000000 00100000 10010000 01001000 01000100 NAME goby_fish COL 4 TIL xw 00100001 00010000 00001000 10001000 01000100 01000100 00100000 00100000 NAME goby_fish COL 4 TIL xx 00010001 10010001 01010001 01010001 00100000 00000000 00111100 01000011 NAME goby_fish COL 4 TIL xy 00100100 00100010 00010010 00010001 00000000 00000000 00000000 10000000 NAME goby_fish COL 4 TIL xz 00000000 00000000 00000000 11110000 00001111 00000000 00000000 00000000 NAME goby_fish COL 4 TIL y0 00000000 00000000 00000000 00000000 00000000 11100000 00011000 00000100 NAME goby_fish COL 4 TIL y1 10000000 10001100 10000011 10011000 10000110 01000000 00111111 00000000 NAME goby_fish COL 4 TIL y2 01100000 00010000 10000000 01100000 00000000 00110000 11000000 00000000 NAME goby_fish COL 4 TIL y3 00001100 00010010 00010010 00001100 00000000 00000001 00000000 00000000 NAME goby_fish COL 4 TIL y4 00000010 00000001 00000001 00000001 00000001 00000001 11111110 00000100 NAME goby_fish COL 4 TIL y5 00000000 00010001 00100010 01000100 00001000 10010001 01000010 00110000 NAME goby_fish COL 4 TIL y6 00000000 00010000 00100001 01000010 10000100 00001000 00010000 00100000 NAME goby_fish COL 4 TIL y7 00000000 11000000 00100000 00101001 01001001 01001001 01001001 10001001 NAME goby_fish COL 4 TIL y8 00000000 00000111 11111000 00000000 00000000 00000000 00000000 00000000 NAME goby_fish COL 4 TIL y9 00111000 11000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME goby_fish COL 4 TIL ya 00001100 00000011 00000000 00000000 00000000 00000000 00000000 00000000 NAME goby_fish COL 4 TIL yb 01000000 10000001 00000010 00000100 00001000 00000110 00000001 00000000 NAME goby_fish COL 4 TIL yc 10010010 00010010 00100010 00100100 01000100 00000100 10001000 01110000 NAME goby_fish COL 4 TIL yd 00000000 00000000 00000000 00000000 00000000 00000111 00111000 11000000 NAME shrimp COL 6 TIL ye 00000000 00000000 00000000 00000000 11111000 00000110 00000001 00000000 NAME shrimp COL 6 TIL yf 00000000 00000000 00000000 00000000 00000000 00000000 10000000 01000000 NAME shrimp COL 6 TIL yg 00000000 00000000 00000001 00000001 00000001 00000001 00000001 00000010 NAME shrimp COL 6 TIL yh 00000011 11111100 01000010 00100001 00100000 00010000 00010000 00010000 NAME shrimp COL 6 TIL yi 00000000 00000000 00000000 00000000 10000001 10000000 01000000 01000000 NAME shrimp COL 6 TIL yj 00000000 00000110 00001001 10001001 00100110 01000000 00000010 00000001 NAME shrimp COL 6 TIL yk 00100000 00010000 00001000 00000100 00000010 00000001 00000000 10000000 NAME shrimp COL 6 TIL yl 00000010 00000010 00000100 00000100 00001000 00001000 10010000 01100000 NAME shrimp COL 6 TIL ym 00010000 00100000 00100000 01000000 10000001 00000000 11111111 00010010 NAME shrimp COL 6 TIL yn 01000000 01000000 10000000 10000000 00000000 01111100 10000010 00000010 NAME shrimp COL 6 TIL yo 00000000 00000001 00001110 00010000 00010000 00001000 00001000 00000100 NAME shrimp COL 6 TIL yp 01111111 10000000 00000000 00100000 00010000 00001000 00000100 00000010 NAME shrimp COL 6 TIL yq 11011100 00000011 00000000 00000000 00000000 00000000 00000000 00000000 NAME shrimp COL 6 TIL yr 00010010 00100010 00100001 00100001 00100001 01000001 01000001 01000001 NAME shrimp COL 6 TIL ys 00000100 00000010 10000010 10000001 10000000 01000000 01000000 00100000 NAME shrimp COL 6 TIL yt 00000001 00000000 00000000 00000000 10000000 01000000 00100000 00010000 NAME shrimp COL 6 TIL yu 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01111111 NAME blob COL 6 TIL yv 00000000 00000000 00000000 00000001 00000010 00000100 00001000 00010000 NAME blob COL 6 TIL yw 00000011 00011100 01100000 10000000 00000000 00000000 00000000 00000000 NAME blob COL 6 TIL yx 01110000 00001110 00000001 00000000 00000000 00000000 00000000 00000000 NAME blob COL 6 TIL yy 00000000 00000000 10000000 01100000 00011000 00000100 00000010 00000001 NAME blob COL 6 TIL yz 00010000 00100000 00100001 01000000 01000000 10000000 00000000 00000000 NAME blob COL 6 TIL z0 00000000 00000000 00000000 00000000 00100000 00010000 00010000 00010000 NAME blob COL 6 TIL z1 00000000 00000000 00000000 00000000 00000000 00000010 00000100 00000100 NAME blob COL 6 TIL z2 00000000 00000000 00000000 00000000 00010000 00000000 00000000 00000000 NAME blob COL 6 TIL z3 00000000 00000000 00000001 00000110 00001000 00010011 00010100 00010001 NAME blob COL 6 TIL z4 00001000 00110100 11000111 00011000 11100011 00001100 01110000 10000000 NAME blob COL 6 TIL z5 00001000 00010111 01110000 10001110 01100001 00011100 00000011 00000000 NAME blob COL 6 TIL z6 00000000 00000000 11100000 00011000 11000100 00110010 10001010 01100010 NAME blob COL 6 TIL z7 00001110 00000000 10000000 01110000 00001110 00000001 00000000 00000000 NAME blob COL 6 TIL z8 00000000 00000000 00000000 00000000 00000000 11100000 00011111 00000000 NAME blob COL 6 TIL z9 00000000 00000000 00000000 00000000 00000000 00000001 11111110 00000000 NAME blob COL 6 TIL za 00011100 00000000 00000000 00000011 00111100 11000000 00000000 00000000 NAME blob COL 6 TIL zb 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00001111 NAME eel COL 7 TIL zc 00000000 00000000 00000000 00000000 00000000 00111111 11111111 11111111 NAME eel COL 7 TIL zd 00000000 00000000 00000000 00000000 00000000 11110000 11111110 11111111 NAME eel COL 7 TIL ze 00000000 00000001 00000111 00011111 01111111 11111111 11111111 11111111 NAME eel COL 7 TIL zf 11111011 11110001 11111011 10111111 01101111 11011110 11111110 11111110 NAME eel COL 7 TIL zg 11111111 11111111 11111111 11111111 10000000 00000000 00000000 00000000 NAME eel COL 7 TIL zh 11110000 11111000 11111100 00011110 00000000 00000000 00000000 00000000 NAME eel COL 7 TIL zi 11111111 11111111 11111001 11100001 11000001 10000011 00000111 00001111 NAME eel COL 7 TIL zj 00000000 00000000 00000000 10000000 11000000 11110000 11111111 11111111 NAME eel COL 7 TIL zk 00000000 00000000 00000000 00000011 00001111 01111110 11111100 11111000 NAME eel COL 7 TIL zl 11110000 11000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME eel COL 7 TIL zm 00011111 00111111 00111111 00000111 00000000 00000000 00000000 00000000 NAME eel COL 7 TIL zn 11111111 11111111 11111111 11111111 00000000 00000000 00000000 00000000 NAME eel COL 7 TIL zo 11111111 11111111 11111111 11111110 00000000 00000000 00000000 00000000 NAME eel COL 7 TIL zp 11110000 11100000 10000000 00000000 00000000 00000000 00000000 00000000 NAME eel COL 7 TIL zq 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00100000 NAME caldron_smoke COL 3 TIL zr 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 TIL zs 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL zt 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME jellyfish_2 TIL zu 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 NAME jellyfish_2 TIL zv 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 NAME nessy COL 5 TIL zw 00000000 00000000 00000000 00000000 01000000 10100000 01000000 00000000 > 00000000 00000000 00000000 00000000 00000000 01000000 10100000 01000000 NAME ponytail_mer2 COL 3 TIL zx 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 TIL zy 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11000000 TIL zz 00000000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 10a 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME goldfish_mer1 COL 8 TIL 10b 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11000000 NAME fish_ TIL 10c 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME wall_not WAL false TIL 10d 11000000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 10e 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 10f 00000000 00000010 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000100 00000000 00000001 00000000 00000000 00000000 00000000 NAME glowfish_mer1 COL 4 TIL 10g 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 10h 00000000 00000000 00000000 00000000 00000000 10000000 00000000 00000000 > 00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 NAME jellyfish_mer1 COL 6 TIL 10i 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME jellyfish2 COL 5 TIL 10j 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000001 00000000 00000000 00000000 00000000 00000000 00000000 NAME jellyfish2 COL 5 TIL 10k 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME wall WAL true TIL 10l 10000000 01100000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 11000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 10m 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001111 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00011110 TIL 10n 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 TIL 10o 00000000 00000000 00000000 00000000 00000000 00000000 10000000 11000000 > 00000000 00000000 00000000 00000000 00000000 00000000 11000000 01100000 TIL 10p 00000000 00000000 00000000 00000000 00000000 10000000 00000000 00000000 > 00000000 00000000 00000000 00000000 10000000 11000000 10000000 00000000 TIL 10q 00000000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 > 10000000 11000000 10000000 00000000 00000000 00000000 00000000 00000000 TIL 10r 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 NAME shark_mer1 COL 3 TIL 10s 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME wall WAL true TIL 10t 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME whale_shark2 WAL false COL 3 TIL 10u 00000000 10000000 10000000 00000000 00000000 00000000 00000000 00000000 NAME whale_shark2 COL 3 TIL 10v 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME nessy COL 5 TIL 10w 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000001 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME bubble_close COL 3 TIL 10x 00000001 00000001 00000001 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME bubble_close COL 3 TIL 10y 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 NAME bubble_close COL 3 TIL 10z 00000000 00000000 00000000 00000000 00000000 00000000 11111111 11111111 NAME ground WAL false COL 2 TIL 11a 11110001 11111000 01111101 01111100 00111000 10000000 10000000 01100000 NAME cat1 COL 2 TIL 11b 00111111 11000000 00000000 00000000 00000000 00000000 00000000 00001000 NAME cat1 COL 2 TIL 11c 11000011 00100111 00000111 00000111 00000010 00000000 00000001 00001001 NAME cat1 COL 2 TIL 11d 10100000 00100000 01000000 01000000 10000000 10000000 00000000 00000000 NAME cat1 COL 2 TIL 11e 00000000 00000000 00001100 00000011 00000000 00000000 00000000 00011111 NAME cat1 COL 2 TIL 11f 00010000 00010000 00010000 00010000 11010010 00010000 00001010 11101000 NAME cat1 COL 2 TIL 11g 00110000 01001000 01001000 00110000 00000000 10000011 00000001 00010001 NAME cat1 COL 2 TIL 11h 00110001 01001001 01001001 00110000 00000010 10001000 00000010 00010000 NAME cat1 COL 2 TIL 11i 00000000 00000000 00000011 10001100 10000000 01000000 01011111 01000000 NAME cat1 COL 2 TIL 11j 00011111 11011111 00011111 01011111 01011111 00011111 11101111 00011111 TIL 11k 00000000 00000000 00000001 00000110 00000000 00000000 00000000 00000000 NAME cat1 COL 2 TIL 11l 00001000 01100100 10000010 00000001 00000110 00001000 00010000 00100000 NAME cat1 COL 2 TIL 11m 00001110 00000000 00000000 00000000 11000000 00110000 00001111 00000000 NAME cat1 COL 2 TIL 11n 11100000 00000000 00000000 00000001 00000110 00011001 11100000 00000000 NAME cat1 COL 2 TIL 11o 01011000 10000110 10000001 00000000 00000000 00000000 10000000 10000000 NAME cat1 COL 2 TIL 11p 01011111 01011111 10011111 01011111 01011111 01011111 01011111 01011111 TIL 11q 00000000 00000000 00000000 00000000 00000001 00000001 00000010 00000010 NAME cat1 COL 2 TIL 11r 01000000 01000010 10000100 10000100 00000100 00001000 00001000 00001000 NAME cat1 COL 2 TIL 11s 00000000 00000000 00000000 00010000 00010000 00100000 00100000 01000000 NAME cat1 COL 2 TIL 11t 00000000 00010000 00010000 00001000 00001000 00000100 00000100 00000100 NAME cat1 COL 2 TIL 11u 01000000 01000000 01000000 00100000 00100000 00100000 00100000 00010000 NAME cat1 COL 2 TIL 11v 00000000 11111111 00000000 11111111 11111111 11111111 11111111 11111111 TIL 11w 00001000 11001000 00010000 11010000 11010000 11010000 11010000 11010000 TIL 11x 01000000 01000000 01000000 10111111 10111111 10111111 10111111 01011111 TIL 11y 00000010 00000010 00000010 11111010 11111010 11110100 11110100 11101000 TIL 11z 00010000 00010111 00010000 00010111 00010111 00010111 00101111 00101111 TIL 12a 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00100000 00010000 00011000 TIL 12b 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 10000000 00000000 00000000 TIL 12c 00000000 00000000 00000100 00001010 00000100 00000000 00000010 00000000 > 00000000 00000000 00000000 00000100 00001010 00000100 00000000 00000010 NAME cat1 COL 2 TIL 12d 00011000 00010000 00000000 00000000 00000000 00000000 00000000 00000000 NAME ponytail COL 4 TIL 12e 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000011 NAME ponytail COL 4 TIL 12f 11100000 11111100 11111111 11111111 11111111 11111111 11111111 11111111 NAME nessy COL 5 TIL 12g 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME stringray WAL false COL 6 TIL 12h 11111111 11111111 11111111 11111111 11111111 11111110 11111111 11111111 NAME stingray WAL false COL 6 TIL 12i 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11000000 NAME tropical_fish COL 7 TIL 12j 00000010 00000001 00000001 00000000 00000000 00000000 00000000 00000000 NAME tropical_fish COL 7 TIL 12k 00000000 00000000 00000000 00000000 00000000 10000000 01000000 00100000 NAME turtle COL 8 TIL 12l 00000001 00000001 00000000 00000000 00000000 00000000 00000000 00000000 NAME octopus COL 9 TIL 12m 00011100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME octopus COL 9 TIL 12n 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000001 NAME sharkgirl COL 10 TIL 12o 00000000 00000000 00000000 00000000 00000000 10000000 10000000 01000000 NAME goldfish COL 11 TIL 12p 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME goldfish WAL false COL 11 TIL 12q 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME goldfish WAL false COL 11 TIL 12r 01000000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME jellyfish1 COL 12 TIL 12s 00000100 00000100 00000100 00001000 00001000 00010000 00100000 01000000 NAME jellyfish1 COL 12 TIL 12t 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00100000 NAME jellyfish1 COL 12 TIL 12u 00000000 00000000 00000000 00000000 00000000 00000000 00000111 00111000 NAME jellyfish2 COL 4 TIL 12v 00000000 00000000 00000000 00000000 00000000 11111111 00000000 00000000 NAME jellyfish2 COL 4 TIL 12w 00000000 00000000 00000000 00000000 00000000 11100000 00011000 00000110 NAME jellyfish2 COL 4 TIL 12x 00000000 00000000 00000001 00000001 00000010 00000010 00000010 00000100 NAME jellyfish2 COL 4 TIL 12y 00000000 10000000 01000000 01000000 01000000 00100000 00100000 00100000 NAME jellyfish2 COL 4 TIL 12z 00000100 00000100 00000100 00001000 00001000 00010000 00100000 01000000 NAME jellyfish2 COL 4 TIL 13a 00000000 00000000 00000000 10000000 00000000 00000000 00000000 00000000 NAME star COL 3 TIL 13b 00011100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME star COL 3 TIL 13c 00000000 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME jellymer COL 4 TIL 13d 00000000 00000000 00000000 00000000 00000000 00000000 10000000 10000000 NAME fish COL 13 TIL 13e 00000001 00000001 00000000 00000000 00000000 00000000 00000000 00000000 NAME shrimp COL 6 TIL 13f 10000000 01100000 00011000 00000110 00000001 00000000 00000000 00000000 NAME shrimp COL 6 TIL 13g 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME blob COL 6 TIL 13h 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 NAME blob COL 6 TIL 13i 00000000 00000000 00000000 00000000 00000000 11111111 00000000 00000000 NAME blob COL 6 TIL 13j 00000000 00000000 00000000 11111111 00000000 00000000 00000000 00000000 NAME blob COL 6 TIL 13k 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11000000 NAME eel COL 7 TIL 13l 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111100 NAME eel COL 7 TIL 13m 11111110 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME eel COL 7 TIL 13n 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME eel COL 7 TIL 6n 00001000 01100100 10000010 00000001 00000110 00001100 00011000 00110000 TIL 6y 00000000 00000000 00000000 00000000 00000001 00000001 00000011 00000010 TIL 9o 01100000 01000010 11000100 10000100 00000100 00001000 00001000 00001000 TIL a2 00000010 11111111 00000000 11111111 11111111 11111111 11111111 11111111 TIL aj 11111111 11111111 11111111 11111111 11111111 11111111 11111100 11110011 TIL b3 11111111 11111111 11111111 11111111 11111111 11111111 00000000 11111111 TIL br 11111111 11111111 11111111 11111111 11111111 11111111 00111111 11001111 TIL c9 11111111 11111111 11111111 11111111 11111111 11111111 11000000 00111111 TIL dq 11111111 11111111 11111111 11111111 11111111 11111111 11111111 00111100 TIL dw 11111111 11111111 11111111 11111111 11111111 11111111 00000011 11111100 TIL f6 11111111 11111111 11111111 11111111 11111111 11111111 00001111 11110011 TIL fc 11111111 11111111 11111111 11111111 11111111 11111111 11110000 11001111 TIL j2 11111111 11111111 11111111 11111111 11111110 11111110 11111101 11111101 TIL 13o 11101100 11010000 10011110 01100001 10100000 10100000 00100000 00010000 TIL 13p 00000000 00000000 00000000 10000000 01000000 00100000 00100000 00010000 TIL 13q 00110110 00001001 00000110 00001001 00010000 00010000 00010000 00010000 TIL 13r 11000000 00000000 00000000 00000000 10000000 10000000 10000000 10000000 TIL 13s 11011011 00100100 00011000 00100100 01000010 01000010 01000010 01000010 TIL 13t 00000011 00000000 00000000 00000000 00000001 00000001 00000001 00000001 TIL 13u 01101100 10010000 01100000 10010000 00001000 00001000 00001000 00001000 TIL 13v 00001101 00000010 00000001 00000010 00000100 00000100 00000100 00000100 TIL 13w 10110000 01000000 10000000 01000000 00100000 00100000 00100000 00100000 TIL 13x 00001101 00000010 00011110 01100001 10000001 00000001 00000001 00000010 TIL 13y 11111111 11111111 01111111 10111111 01011111 01011111 00101111 00101111 TIL 13z 11111101 11111101 11111101 11111101 11111101 11111101 11111101 11111101 TIL 14a 00000000 00000000 10000000 10001111 01010000 10100000 10100000 01010000 TIL 14b 00000000 00000000 00000000 00000000 10000000 01000000 01000000 10000000 TIL 14c 00000000 00000000 00000000 00000000 00000100 00000100 00000100 00000100 TIL 14d 00000000 00000000 00000000 00000000 00100000 00100000 00100000 00100000 TIL 14e 00000000 00000000 00000000 00000000 10000000 10000000 10000000 10000000 TIL 14f 00000000 00000000 00000000 00111100 01000010 10000001 10000001 01000010 TIL 14g 00101111 00101111 01011111 01011111 10111111 01111111 01111111 10111111 TIL 14h 11111110 11111110 11111101 11111101 11111101 11111101 11111101 11111101 TIL 14i 10001111 10000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 14j 00000000 00000000 00000011 00000100 00000000 00000011 00000100 00000100 NAME letter COL 5 TIL 14k 00000000 00000000 10000000 01000000 01000000 11000000 01000000 01000000 NAME letter COL 5 TIL 14l 00000100 00000100 00110100 01001100 10000100 10000100 10000100 01000100 NAME letter COL 5 TIL 14m 00000000 01110000 10001001 00001001 01111001 10001001 10001000 01110100 NAME letter COL 5 TIL 14n 00000000 00000000 00010000 00010000 00010000 00010000 10010000 01110000 NAME letter COL 5 TIL 14o 00000000 00000000 00100000 00000010 00100011 00100010 00100010 00100010 NAME letter COL 5 TIL 14p 00000000 00000000 00000000 11000000 00100000 00100000 00100000 00100000 NAME letter COL 5 TIL 14q 00100000 00100000 00100000 01111000 00100000 00100000 00100000 00100000 NAME letter COL 5 TIL 14r 10000000 10000000 10000000 10110000 11001000 10001000 10001000 10001000 NAME letter COL 5 TIL 14s 00000000 00000000 01110000 10001000 11111000 10000000 10001000 01110000 NAME letter COL 5 TIL 14t 00111100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 14u 01011111 01011111 00101111 00101111 00101111 00101111 00101111 00101111 TIL 14v 11111110 11111110 11111111 11111111 11111111 11111111 11111110 11111110 TIL 14w 10000000 10001111 01010000 10100000 10100000 01010000 10001111 10000000 TIL 14x 00000000 00000000 10000000 01000000 01000000 10000000 00000000 00000000 TIL 14y 10100000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 14z 00000000 00000000 00000000 00000001 00000001 00000000 00000000 00000100 NAME letter COL 5 TIL 15a 00001010 00001010 00001010 00001010 00001010 00001010 00001100 00001000 NAME letter COL 5 TIL 15b 00000000 00000000 00000000 00000000 00000000 00000000 00011100 00100010 NAME letter COL 5 TIL 15c 00000010 00000010 00000010 00000010 00000010 00000010 00000011 10000010 NAME letter COL 5 TIL 15d 10000000 10000000 10000000 10000000 10000000 10000000 00000000 00000001 NAME letter COL 5 TIL 15e 00110110 00011101 00000000 00000000 00000000 00000000 00000000 00000000 > 01101100 00111010 00000000 00000000 00000000 00000000 00000000 00000000 NAME fishies COL 3 TIL 15f 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00111100 TIL 15g 00101111 00101111 00101111 00101111 00101111 00101111 01011111 01011111 TIL 15h 01010000 10100000 10100000 01010000 10001111 10000000 00000000 00000000 TIL 15i 10000000 01000000 01000000 10000000 00000000 00000000 00000000 00000000 TIL 15j 00000000 00000001 00000010 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 15k 10000010 10000010 10000010 10000010 10000001 01100000 00000000 00000000 NAME letter COL 5 TIL 15l 00011000 00101001 00001010 00001100 00001010 00001010 00001010 00001010 NAME letter COL 5 TIL 15m 00111110 00100000 00100010 00011100 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 15n 00000101 00000100 00000100 00000100 00000011 00000000 00000000 00000000 NAME letter COL 5 TIL 15o 01000110 11101010 01000010 01000011 10000010 00000010 00000010 00000010 NAME letter COL 5 TIL 15p 00000000 01000000 10000001 00000001 10000000 10000000 10000000 10000000 NAME letter COL 5 TIL 15q 00010000 11110000 00010000 00010000 11101000 00000000 00000000 00000000 NAME letter COL 5 TIL 15r 01000010 10000001 10000001 01000010 00111100 00000000 00000000 00000000 TIL 15s 10111111 01111111 01111111 10111111 01011111 01011111 00101111 00101111 TIL 15t 11111101 11111101 11111101 11111101 11111110 11111110 11111111 11111111 TIL 15u 00000000 00000000 00000000 00000000 10000000 10001111 01010000 10100000 TIL 15v 00001100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 15w 00000011 00000000 00000000 00000000 00000010 00000010 00000010 00000010 NAME letter COL 5 TIL 15x 00000000 00000000 00000000 00000000 00000000 00111100 01000010 10000001 TIL 15y 00101111 00101111 00101111 00101111 01011111 01011111 10111111 01111111 TIL 15z 11111111 11111111 11111110 11111110 11111101 11111101 11111101 11111101 TIL 16a 00000000 00000000 00000000 00000000 01011100 00110110 01011100 00000000 > 00000000 00000000 00000000 00000000 00101110 00011011 00101110 00000000 NAME fishies COL 3 TIL 16b 00000111 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 16c 01101100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 16d 00001110 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 16e 00000000 00000000 00000000 00100000 01110000 11111000 00100000 00100000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME start COL 4 TIL 16f 00000000 00000000 00000000 00000000 11101110 10000100 11100100 00100100 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME start COL 4 TIL 16g 00000000 00000000 00000000 00000000 11101110 10101010 11101100 10101010 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME start COL 4 TIL 16h 00000000 00000000 00000000 00000000 11100001 01000011 01000000 01000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME start COL 4 TIL 16i 00000000 00000000 00000000 10000000 11000000 11100000 10000000 10000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME start COL 4 TIL 16j 11100100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME start COL 4 TIL 16k 10101010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME start COL 4 TIL 16l 00000000 00000000 00000000 00000000 00011101 00110110 00011101 00000000 > 00000000 00000000 00000000 00000000 00111010 01101100 00111010 00000000 NAME fishies COL 3 TIL 16m 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000110 TIL 16n 00000000 00000000 00000000 00000000 00000000 00000000 11000000 00100000 TIL 16o 00001000 00010000 00010000 00100000 10100000 10100000 01100001 10011110 TIL 16p 00010000 00010000 00010000 00100000 00100000 01000000 10000000 00000000 TIL 16q 00000110 00001001 00010000 00010000 00010000 00010000 00001001 00000110 TIL 16r 00000000 00000000 10000000 10000000 10000000 10000000 00000000 00000000 TIL 16s 00011000 00100100 01000010 01000010 01000010 01000010 00100100 00011000 TIL 16t 00000000 00000000 00000001 00000001 00000001 00000001 00000000 00000000 TIL 16u 01100000 10010000 00001000 00001000 00001000 00001000 10010000 01100000 TIL 16v 00000001 00000010 00000100 00000100 00000100 00000100 00000010 00000001 TIL 16w 10000000 01000000 00100000 00100000 00100000 00100000 01000000 10000000 TIL 16x 00000100 00000010 00000010 00000001 00000001 10000001 01100001 00011110 TIL 16y 11010000 11101100 11110011 11111100 11111111 11111111 11111111 11111111 TIL 16z 00001001 00110110 11001111 00111111 11111111 11111111 11111111 11111111 TIL 17a 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11000011 TIL 17b 00000000 00000000 00000000 00000000 00000000 00000000 11110000 00001100 TIL 17c 00000000 00000000 00000000 00000000 00000000 00000000 00001111 00110000 TIL 1b2 11111101 11110010 00001100 11110000 00000000 00000000 00000000 00000000 TIL 1b3 10111111 01001111 00110000 00001111 00000000 00000000 00000000 00000000 TIL 1b4 11111101 11110010 00001100 11111000 00000000 00000000 00000000 00000000 TIL 1b5 00000000 00000000 11111111 00000000 11111111 11111111 11111111 11111111 TIL 1b6 00000010 00000010 00000010 00000001 00000001 00000000 00000000 00000000 TIL 1b7 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 TIL 1b8 00000000 00000000 00000000 00000000 00000000 00000000 10000000 01000000 TIL 1b9 01000000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 1ba 00000000 00000000 00000000 10000000 10000000 10000000 10000000 10000000 NAME letter COL 5 TIL 1bb 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 1bc 00111010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 1bd 00000000 00000000 00000000 00000000 00000000 00000000 11100000 00010000 NAME letter COL 5 TIL 1be 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000010 TIL 1bf 01000000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 1bg 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME start COL 4 TIL 1bh 00100000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME start COL 4 TIL 1bi 00000000 00000000 00000000 00000000 10000000 10000000 10000000 10000000 NAME letter COL 5 TIL 1bj 00000000 00000000 00000000 00000000 00100000 00100000 00100000 00100000 NAME letter COL 5 TIL 1bk 00000000 00000000 00000000 00000000 00000100 00000100 00000100 00000100 NAME letter COL 5 TIL 1bl 00000011 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 1bm 00011000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 1bn 11000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 1bo 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000011 NAME letter COL 5 TIL 1bp 01000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME letter COL 5 TIL 1bq 01000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME start COL 4 TIL 1br 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00100000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 17d 11111110 11111110 11111110 11111110 11111110 11111111 11111111 11111110 TIL 17e 00000011 00000011 00000011 00000011 00000011 00000001 00000001 00000001 TIL 17f 11111000 11111000 11111100 11111100 11111000 11111000 11111100 11111100 TIL 17g 00000111 00000011 00000011 00000011 00000011 00000011 00000011 00000011 TIL 17h 11000000 11000000 11000000 11100000 11100000 11100000 11100000 11100000 TIL 17i 11111110 11111110 11111110 11111110 11111110 11111110 11111110 11111110 TIL 17j 01111111 01111111 01111111 01111111 00111111 00111111 00111111 00111111 TIL 17k 11111111 11111110 11111001 11111011 11110111 11111111 11101111 11011111 TIL 17l 11111000 11110000 11110000 11100000 11000000 10000000 10000000 00000000 TIL 17m 11111111 00000010 00000000 00000000 00000000 00000000 00000000 00000000 TIL 17n 00000000 11100000 00111000 00000000 00000000 00000000 00000000 00000000 TIL 17o 00000000 00000000 00000000 00000000 01100000 00001111 00001111 00000000 TIL 17p 11111100 11111100 11111100 11111100 11111100 11111100 11111100 11111100 TIL 17q 00000011 00000011 00000011 00000011 00000011 00000011 00000001 00000001 TIL 17r 11100000 11000000 11100000 11100000 11100000 11100000 11100000 11100000 TIL 17s 11111110 11111110 11111110 11111110 11111110 11111111 11111111 11111111 TIL 17t 01111111 01111111 01111111 01111111 01111110 01111101 01011101 00111011 TIL 17u 10011110 10111110 01111100 01111100 11111000 11111000 11110000 11110000 TIL 17v 00000001 00000001 00000001 00000111 00000111 00000110 00001111 00011111 TIL 17w 10000000 00000000 00000100 00000100 00000000 00000110 00000000 00000000 TIL 17x 00000001 00000001 00000001 00000001 00000001 00000011 00000001 00000001 TIL 17y 11100000 11100000 11100000 11100000 11100000 11100000 11100000 11100000 TIL 17z 00001111 00000111 00000111 00000111 00000111 00000111 00000111 00000111 TIL 18a 00110011 01100111 01100111 11001111 10011111 10011111 00111111 01111110 TIL 18b 11100000 11100000 11000000 11000000 10000000 10000000 00000000 00000000 TIL 18c 00111111 00111111 00111111 10111111 00111111 00111110 00111110 00111100 TIL 18d 00001100 11011100 11111100 11111100 11111100 11111100 01111000 01110000 TIL 18e 00000011 00000001 00000001 00000001 00000001 00000001 00000001 00000001 TIL 18f 11100000 11100000 11100000 11110000 11100000 11100000 11100000 11100000 TIL 18g 00000111 00000111 00000111 00000111 00000111 00000111 00000111 00000111 TIL 18h 11111111 11111111 11111110 11111100 11111111 11111111 11111111 11111111 TIL 18i 00001100 00011001 01111011 11110111 11101111 11011111 11011111 11111111 TIL 18j 11111110 11111100 11111000 11111000 11110000 11100000 11100000 11000000 TIL 18k 01110000 01110000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 18l 01000000 00001000 00000000 00000000 00000000 00000000 00000000 00000000 TIL 18m 11110000 11100000 11100000 11100000 11100000 11100000 11100000 11110000 TIL 18n 00000111 00000111 00000111 00000001 00000011 00000111 00000111 00001111 TIL 18o 11111111 11111111 11110011 11100111 11001111 10011111 10111111 01111111 TIL 18p 11111111 11111111 11111111 11111111 11111110 11111000 11110000 11000000 TIL 18q 10000000 11000000 10000000 10000000 00001000 00111100 00010000 00000000 TIL 18r 10000000 10000000 10000000 00000000 10000000 00000000 00000000 00000000 TIL 18s 11111100 11111100 11111100 11111100 11111110 11111110 11111110 11111110 TIL 18t 11100000 11110000 11100000 11110000 11011000 11100000 11000000 00000000 TIL 18u 11111111 11111111 00011111 00000000 00000000 00000000 00000000 00000000 TIL 18v 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 TIL 18w 01111111 01111111 11111111 01111111 01111111 01111111 01111111 01111111 TIL 18x 11111110 11111000 11110000 11100000 11000000 00000000 00000000 00000000 TIL 18y 00000000 00000000 00000000 00000000 00110000 00000011 00000000 00000000 TIL 18z 00000000 00000000 00000000 00000000 10111000 11111100 11111110 00011111 TIL 19a 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00110000 TIL 19b 01111111 01111111 01111111 01111111 01111111 01111111 01111111 01111111 TIL 19c 11111110 11111110 11111110 11111110 11111110 11111110 11111111 11111110 TIL 19d 00000000 00000000 00010100 00011111 00111111 00111111 00100111 00110111 TIL 19e 00000000 00000000 00000000 10000000 11000000 11100000 11110000 11110000 TIL 19f 10010000 11100000 00011111 00000111 00000001 00000001 00000000 00000000 TIL 19g 00000000 00000000 00000000 10000000 11000000 11111000 11111111 11111111 TIL 19h 11000000 11000000 11000000 10000000 11000000 11000000 11000000 11000000 TIL 19i 11111100 11111000 11110000 11110000 11100000 11000000 10000000 00000000 TIL 19j 00111111 00011111 00001111 00000011 00000000 00000000 00000000 00000000 TIL 19k 11110000 11110000 11100000 11000000 00100000 00000000 00000000 00000000 TIL 19l 01111111 01111111 11111111 11111111 11111111 01111111 00111011 00000011 TIL 19m 11000000 11000000 11000000 11000000 11000000 11000000 11000000 10000000 TIL 19n 01111111 01111110 00111100 00110000 01100000 00000000 00000000 00000000 TIL 19o 00000000 00000000 01000000 11000000 11100000 11111100 01111111 01111111 TIL 19p 00001111 00001111 00011111 00111111 00111111 01111111 11111111 11111111 TIL 19q 11111111 11111111 11111111 11111111 11111111 11101101 11111110 11111111 TIL 19r 00000000 00000000 00000000 00000000 00000000 00000000 01000000 10000000 TIL 19s 00111111 00011111 00001111 00001111 00000111 00000011 00000011 00000001 TIL 19t 11111111 11111111 11111111 11111111 11111110 11111100 11111000 11110000 TIL 19u 10000000 11000000 10000000 00000000 00000000 00000000 00000000 00000000 TIL 19v 11111111 11111111 11111111 11111110 11111110 01111100 11111100 11111100 TIL 19w 11110000 11100000 11000000 10000000 10000000 00000000 00000000 00000000 TIL 19x 11111000 11111000 11110000 11100000 11100000 01000001 01000001 00000001 TIL 19y 00000000 00000000 00000001 00000001 00000000 00000000 00000001 00000001 TIL 19z 00000000 00000000 00000001 00000001 00000001 00000001 00000001 00000001 TIL 1a0 00000000 00000000 00000011 00000011 00000001 01000001 01110000 00110000 NAME urchin COL 14 TIL 1a1 00000000 00000000 00000100 10000100 10000100 10001100 11001001 11011001 NAME urchin COL 14 TIL 1a2 00000000 00000000 00000000 00000000 11000000 10000001 10000010 10001111 NAME urchin COL 14 TIL 1a3 00000000 00000000 00000000 00000000 10000000 10000000 10000000 00000000 NAME urchin COL 14 TIL 1a4 00000010 00000011 00000000 00000000 00000000 00011111 00000111 00000001 NAME urchin COL 14 TIL 1a5 00111100 00011110 11001111 01100111 00110111 11011011 11111111 11111111 NAME urchin COL 14 TIL 1a6 10111001 01111011 00111011 11111111 11111111 11111111 11111111 11111111 NAME urchin COL 14 TIL 1a7 10011111 10111110 11111110 11111001 11110111 11111111 11111101 11111110 NAME urchin COL 14 TIL 1a8 00000000 00000000 01000000 11000000 00000000 00011110 11111000 11100100 NAME urchin COL 14 TIL 1a9 00000000 00000001 00000011 00011111 00000000 00000011 00000111 00011111 NAME urchin COL 14 TIL 1aa 01111111 10111111 11111111 11111111 11111111 11111111 11111111 11111111 NAME urchin COL 14 TIL 1ab 11111111 11111111 01111111 10011110 11001100 11011110 11111111 11111111 NAME urchin COL 14 TIL 1ac 11111111 11111111 10111111 01111111 11111111 11111111 11111111 11111111 NAME urchin COL 14 TIL 1ad 11111100 10110000 11100000 00000000 11100000 11111110 11111111 11100000 NAME urchin COL 14 TIL 1ae 01111100 00000001 00000001 00000111 00001110 00001100 00011000 00000000 NAME urchin COL 14 TIL 1af 11111111 11111111 11011111 10111111 00111111 01111111 01111111 11110111 NAME urchin COL 14 TIL 1ag 00000000 11111111 11111111 11111111 11111111 11111111 11111111 11011111 NAME urchin COL 14 TIL 1ah 00011111 11111111 11111111 11111111 11111111 11111111 11111101 10111110 NAME urchin COL 14 TIL 1ai 11000000 01110000 11111000 11111100 11000011 11000000 11100000 01110000 NAME urchin COL 14 TIL 1aj 11110111 11100111 11001111 11001111 11001110 10001110 00001100 00001100 NAME urchin COL 14 TIL 1ak 11011111 10011111 00001101 00001100 00001100 00001100 00000000 00000000 NAME urchin COL 14 TIL 1al 11011111 11101111 11100111 11100001 01110000 00101000 00011000 00001000 NAME urchin COL 14 TIL 1am 00011100 00000100 10000010 11000000 01000000 00000000 00000000 00000000 NAME urchin COL 14 TIL 1bs 00000000 00000000 00000001 00000001 00000001 00000001 00000001 00000000 NAME urchin COL 14 TIL 1bt 01110010 01110010 01110100 00011000 10000001 01000011 01100111 01111111 > 01110010 01110100 00011000 10000001 01000011 01100111 01111111 00111111 NAME 1bt nessy COL 3 TIL 1bu 00000011 00000000 00000000 00000000 00000000 00000000 00100000 00100001 > 00000000 00000000 00000000 00000000 00000000 00100000 00100001 01110010 NAME 1bu nessy COL 3 SPR 10 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME glowfish_mer_bubble DLG SPR_17 POS 19 8,15 SPR 11 01000000 10000000 00000000 01000111 00001000 00010000 00010000 00011111 > 10000000 01000000 10000000 00000000 01000111 00001000 00010000 00010000 NAME jellyfish2 DLG SPR_b POS 7 11,8 COL 5 SPR 12 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME jellyfish2_bubble DLG SPR_18 POS 21 8,15 SPR 13 00000000 00000000 00000000 00111000 01010100 11111110 10111011 00010001 > 00000000 00000000 00111000 01010100 11111110 10111011 00010001 01111100 NAME jellyfish_mer1 DLG SPR_c POS 7 4,10 COL 6 SPR 14 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME jellyfish_mer_bubble DLG SPR_19 POS 23 7,15 SPR 15 11000010 01001000 11100000 00000000 00000000 00000000 00000000 00000000 > 11100001 10100100 11110000 00000000 00000000 00000000 00000000 00000000 NAME shark_mer1 DLG SPR_d POS 8 6,9 COL 3 SPR 16 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME shark_mer_bubble DLG SPR_1a POS 17 7,15 SPR 17 00001100 01000000 00001111 00000000 00100011 00001100 00110000 11000000 NAME whale_shark1 DLG SPR_e POS 8 12,5 COL 1 SPR 18 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME whale_shark_bubble DLG SPR_1b POS 25 8,15 SPR 19 00000000 00000011 00000100 00000100 00001000 00001000 00010000 00010000 NAME star1 DLG SPR_f POS 9 2,8 COL 1 SPR A 11000110 11111110 01010100 01111100 00111000 01111100 01010100 10010010 > 00000000 11000110 11111110 01010100 01111100 00111000 01111100 10010010 POS 31 0,15 SPR a 10100000 11100000 11100000 11111100 01111110 01010110 01010011 00000010 > 00000000 10100000 11100000 11100000 11111100 01111110 01010110 01010011 NAME cat1 DLG SPR_0 POS 10 11,10 SPR b 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME cave DLG SPR_q POS 2 10,8 SPR c 00010000 00000111 00001010 00001111 00000111 00000010 00001111 00010111 > 00000000 00010000 00000111 00001010 00001111 00000111 00000010 00001111 NAME ponytail_mer2 DLG SPR_1 POS 4 10,4 COL 3 SPR d 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME ponytail_mer_bubble DLG SPR_y POS 12 8,15 SPR e 00000001 11100000 11110000 01010010 01010000 11110000 11110000 11100000 > 11100000 11110000 01010010 01010000 11110000 11110000 11100000 11110000 NAME octopus DLG SPR_2 POS 4 3,10 COL 4 SPR f 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME octopus_bubble DLG SPR_z POS 16 7,15 SPR g 11000000 01110001 01111000 11101100 01111000 01100000 11000000 00000000 > 10000000 11100010 11110000 11011000 11110000 11000000 10000000 00000000 NAME tropical_fish DLG SPR_6 POS 4 3,4 COL 5 SPR h 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME tropical_fish_bubble DLG SPR_10 POS 14 7,15 SPR i 00000000 11111111 01111111 11111111 11111111 11111111 11111111 11111111 NAME caldron DLG SPR_1g POS 2 9,12 COL 1 SPR j 00000000 00000000 00000000 00001110 11011111 11111111 00011111 00100000 > 00000000 00000000 00000000 00011100 10111110 11111111 00111110 01000001 NAME turtle DLG SPR_5 POS 4 9,12 COL 6 SPR k 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME turtle_bubble DLG SPR_11 POS 15 8,15 SPR l 00000000 00000000 10000000 00111010 01101100 00111010 00000000 00000000 > 00000000 00000000 00000000 01110100 11011000 01110100 00000000 00000000 NAME fish DLG SPR_4 POS 3 9,5 COL 7 SPR m 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME fish_bubble DLG SPR_12 POS 24 8,15 SPR n 00000000 00000000 00000011 00001111 11101010 11111110 00100000 01000000 > 00000000 00000000 00000110 00011110 11010100 11111100 01000000 10000000 NAME goldfish_mer1 DLG SPR_3 POS 3 3,9 COL 8 SPR o 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME goldfish_mer_bubble DLG SPR_13 POS 18 7,15 SPR p 00010100 00110010 01000111 01111111 01111111 11111110 10000000 01111111 NAME potion DLG SPR_r POS 2 5,6 COL 1 SPR q 00000000 00000000 00000000 00000000 00001100 00010100 00010100 00010100 NAME potion DLG SPR_s POS 2 5,5 COL 1 SPR r 00100010 00111010 00111110 00111110 11111111 00000000 00000000 11000000 NAME potion DLG SPR_t POS 2 6,6 COL 1 SPR s 10011000 00000100 00111100 11111100 11111100 11111100 11111000 11111111 NAME potion DLG SPR_v POS 2 8,5 COL 1 SPR t 00011100 00010100 00010100 00100010 01110001 01111111 01111111 00111110 NAME potion DLG SPR_u POS 2 9,5 COL 1 SPR u 00000000 00000000 00000000 00000000 00001000 00011100 00010100 00100010 NAME potion DLG SPR_w POS 2 10,5 COL 1 SPR v 00000000 00000000 00000000 00000000 00000000 00000000 11111100 00000010 NAME blob DLG SPR_8 POS 6 1,14 COL 1 SPR w 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME blob_bubble DLG SPR_7 POS 28 8,15 SPR x 00000000 00000000 11000000 11110000 01101001 00111100 00000000 00000000 > 00000000 00000000 11100000 11111000 00110100 00011110 00000000 00000000 NAME gulping_eel DLG SPR_9 POS 6 5,8 COL 3 SPR y 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME gulping_eel_bubble DLG SPR_16 POS 29 7,15 SPR z 00110000 01001000 01011101 10010101 00011111 00000001 00000000 00000000 > 01100000 10010001 10111011 00101011 00111111 00000011 00000001 00000000 NAME glowfish_mer1 DLG SPR_a POS 6 11,11 COL 4 SPR 1a 00000000 00000000 10000000 01000000 01000000 00100000 00100000 00010000 NAME star1 DLG SPR_g POS 9 3,8 COL 1 SPR 1b 00000000 00111111 11000000 00000000 00000001 11000001 00000010 00000100 NAME star1 DLG SPR_h POS 9 4,9 COL 1 SPR 1c 10000000 01111000 00000111 00000000 00000000 10000000 10000000 01000001 NAME star1 DLG SPR_i POS 9 1,9 COL 1 SPR 1d 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME star_bubble DLG SPR_1c POS 22 8,15 SPR 1e 00000000 00000011 00111100 11000000 00001000 00010100 00001000 10000000 NAME goby_fish1 DLG SPR_j POS 9 9,10 COL 1 SPR 1f 00001010 11111001 00000000 00000000 00011111 01100000 00001110 00000001 NAME goby_fish1 DLG SPR_k POS 9 10,10 COL 1 SPR 1g 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME goby_fish_bubble DLG SPR_1d POS 26 8,15 SPR 1h 11000000 00100000 10010000 10001000 00000110 00000001 00111111 11000000 NAME shrimp1 DLG SPR_l POS 11 6,10 COL 1 SPR 1i 00000000 00000000 00000001 00000001 00000000 00000000 00000000 00000000 NAME shrimp1 DLG SPR_n POS 11 5,10 COL 1 SPR 1j 00110000 11000000 10000000 01000000 00100000 00100000 00100000 00100000 NAME shrimp1 DLG SPR_o POS 11 4,10 COL 1 SPR 1k 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME shrimp_bubble DLG SPR_1f POS 27 8,15 SPR 1l 00000000 00000000 00000000 00000000 00000000 01110000 10001000 00000100 > 00000000 00000000 00000000 00000000 01110000 10001000 00000100 00000100 NAME jellyfish1 DLG SPR_m POS 5 8,6 COL 9 SPR 1m 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME jellyfish1_bubble DLG SPR_14 POS 20 7,15 SPR 1n 01010000 01110000 10101001 01110011 11111111 11111111 01110110 01110110 > 01110000 10101001 01110011 11111111 11111111 01110110 01110110 01110110 NAME stingray1 DLG SPR_p POS 5 13,10 COL 10 SPR 1o 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME stingray_bubble DLG SPR_15 POS 13 8,15 SPR 1p 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME cat1 POS 10 11,11 SPR 1q 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME cat_bubble DLG SPR_1e POS 30 8,15 SPR 1r 00111100 01000010 10001001 10000101 10000101 10000001 01000010 00111100 NAME urchin DLG SPR_x POS 32 8,15 ITM 0 00000000 00000000 00000000 00111100 01100100 00100100 00011000 00000000 NAME tea DLG ITM_0 COL 1 ITM 1 00000000 00000000 00111100 01000010 01000010 00111100 10000000 00000000 > 00000000 01111000 10000100 10000100 01111000 00000000 10000000 00000000 DLG ITM_2 ITM 2 00001000 00001000 00010000 00010000 00010000 00010000 00010000 00010000 ITM 3 00001000 00001000 00001000 00000100 00000100 00000010 00000001 00000000 ITM 4 01000000 00100000 00100000 00010000 00010000 00010000 11101000 10101000 ITM 5 10100000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ITM 6 01000000 01000000 01000000 10000000 10000000 10000000 10000000 01000000 ITM 7 00000010 00000010 00000010 00000010 00000010 00000100 00000100 00001000 ITM 8 00001000 00010000 00010000 00010000 00101111 00101010 00001010 00000000 ITM 9 00100000 01000000 01000000 10000000 00000000 00000000 00000000 00000000 ITM a 00010000 00010000 00010000 00010000 00010000 00010000 00100000 00100000 ITM b 00000000 11000000 00000000 00000000 00000000 00000000 11100000 00000000 ITM c 00000000 00000000 10000000 00000000 00000000 00000000 00000000 00000000 ITM d 00000010 00000010 00000010 00000001 00000001 00000000 00000000 00000000 ITM e 00000000 00010000 01010100 00111000 11111110 00111000 01010100 00010000 > 00000000 00001000 00101010 00011100 01111111 00011100 00101010 00001000 NAME urchin DLG ITM_3 ITM f 00000000 00000000 00000000 00010000 00111000 00010000 00000000 00000000 > 00000000 00000000 00001000 00011100 00001000 00000000 00000000 00000000 NAME glowy DLG ITM_4 ITM g 00000000 00000000 00111100 01000010 01000010 00111100 10000000 00000000 > 00000000 01111000 10000100 10000100 01111000 00000000 10000000 00000000 DLG ITM_5 ITM h 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 DLG ITM_6 ITM i 00000000 01000000 00000000 00000010 00000000 00000000 00010000 00000000 > 00000000 00001000 00000000 00000000 00000000 01000000 00000010 00000000 DLG SPR_0 (soundeffect "beep"){exit "cat,7,15"} DLG ITM_0 """ You found a nice warm cup of tea """ DLG SPR_1 (soundeffect "beep"){exit "ponytail_mer,7,15"} DLG SPR_2 (soundeffect "beep"){exit "octopus,8,15"} DLG SPR_3 (soundeffect "beep"){exit "goldfish_mer,8,15"} DLG SPR_4 (soundeffect "beep"){exit "fish,7,15"} DLG SPR_5 (soundeffect "beep"){exit "turtle,7,15"} DLG SPR_6 (soundeffect "beep"){exit "tropical_fish,8,15"} DLG SPR_7 """ {sequence - {clr1}blob:{clr1} ... {exit "outside_down1,1,13"} - {clr1}blob:{clr1} ... {exit "outside_down1,1,13"} - {clr1}blob:{clr1} ... {exit "outside_down1,1,13"} - {clr1}blob:{clr1} ... {exit "outside_down1,1,13"} - {clr1}blob:{clr1} you are valid.. {exit "outside_down1,1,13"} - {clr1}blob:{clr1} ... {exit "outside_down1,1,13"} } """ DLG SPR_8 (soundeffect "beep"){exit "blob,7,15"} DLG SPR_9 (soundeffect "beep"){exit "gulper_eel,8,15"} DLG SPR_a (soundeffect "beep"){exit "glowfish_mer,7,15"} DLG SPR_b (soundeffect "beep"){exit "jellyfish2,7,15"} DLG SPR_c (soundeffect "beep"){exit "jellyfish_mer,8,15"} DLG SPR_d (soundeffect "beep"){exit "shark_mer,8,15"} DLG SPR_e (soundeffect "beep"){exit "whale_shark,7,15"} DLG SPR_f (soundeffect "beep"){exit "star,7,15"} DLG SPR_g (soundeffect "beep"){exit "star,7,15"} DLG SPR_h (soundeffect "beep"){exit "star,7,15"} DLG SPR_i (soundeffect "beep"){exit "star,7,15"} DLG SPR_j (soundeffect "beep"){exit "goby_fish,7,15"} DLG SPR_k (soundeffect "beep"){exit "goby_fish,7,15"} DLG SPR_l (soundeffect "beep"){exit "bulleye_pistol_shrimp,7,15"} DLG SPR_m (soundeffect "beep"){exit "jellyfish1,8,15"} DLG SPR_n (soundeffect "beep"){exit "bulleye_pistol_shrimp,7,15"} DLG SPR_o (soundeffect "beep"){exit "bulleye_pistol_shrimp,7,15"} DLG SPR_p (soundeffect "beep"){exit "stingray,7,15"} DLG ITM_1 """ ggg{sequence - - } """ DLG ITM_2 """ {sequence - the sea witch.. a powerful entity feared and revered by every creature in the whole ocean.. they say you mustn't seek them out.. but if you do you must be very careful tricky people those witches.. be ready to lose something dear in exchange for their service ..they will turn you into a polyp if you give them a bad yelp review... - and now.. deep in a cave on the edge of mermaidia.. a lone mermaid seeks to make a deal.. with the devil itself.. - {clr1}sandy:{clr1} nessy, you gotta help me! {clr3}nessy:{clr3} ... {clr1}sandy:{clr1} come on! i just need a {wvy}tiny-innie little totally miniscule{wvy} {rbw}potion{rbw}! {clr3}nessy:{clr3} ..sandy that's a lot of work for something i dont think you even need.. plus its dangerious! {clr1}sandy:{clr1} ... {clr1}sandy:{clr1} you can just admit you cant do it yet.. you're still {wvy}learning and stuff{wvy} {clr3}nessy:{clr3} {shk}what? no!{shk} i can do it!! i'm super good at potions! {clr1}sandy:{clr1} its ok to admit you cant do everything yet {clr3}nessy:{clr3} {shk}y-you!!{shk} i TOTALLY CAN DO IT! {clr1}sandy:{clr1} so you'll make it? are you sure that's wise? isn't it {wvy}"dangerious"{wvy}? it's totally ok if you {wvy}dont{wvy} make it {clr3}nessy:{clr3} {shk}JUST YOU WAIT! I'LL MAKE IT! I'LL SHOW YOU!{shk} {clr1}sandy:{clr1} yay! thanx! {clr3}nessy:{clr3} ... {clr3}nessy:{clr3} ... {clr1}sandy:{clr1} ;^) <3 {clr3}nessy:{clr3} ..y-you! you tricked me! {clr1}sandy:{clr1} i {wvy}looooooove{wvy} you too {clr3}nessy:{clr3} heck off, monster >:( {clr1}sandy:{clr1} <3 <3 <3 - {clr3}nessy:{clr3} i dont actually have all the ingredients for this kind of potion though.. my mom used up all that was left {clr1}sandy:{clr1} where can you get them? {clr3}nessy:{clr3} here and there.. around the town i guess {clr1}sandy:{clr1} well i'll help you! {clr3}nessy:{clr3} thanks.. {clr1}sandy:{clr1} where should i start? {clr3}nessy:{clr3} um.. well i need some.. um.. gelidium longipes.. {clr1}sandy:{clr1} o'kay! you can count on me! {clr3}nessy:{clr3} ..thanks - ..and now that sandy is out of the way, nessy can go peacefully find all the dumb ingredients.. the magic bubble should help to locate them.. } """ DLG SPR_q """ { - start == 1 ? (soundeffect "bubble"){wvy}you need the following ingredients:{wvy} {wvy}a glowing {rbw}tear{rbw}, a shiny {rbw}coin{rbw}, some colourful {rbw}scraps{rbw}, some jelly {rbw}toxins{rbw}, a sharp {rbw}tooth{rbw}, a pretty {rbw}pearl{rbw}!{wvy}{start = 0} - else ? (soundeffect "bubble"){wvy}the ingredients you have:{wvy} { - tear == 1 ? {wvy}you have {rbw}1{rbw} glowing {rbw}tear{rbw},{wvy} - else ? {wvy}you don't have glowing {rbw}tear{rbw},{wvy} }{ - coin == 1 ? {wvy}you have {rbw}1{rbw} shiny {rbw}coin{rbw},{wvy} - else ? {wvy}you don't have a shiny {rbw}coin{rbw},{wvy} }{ - confetti == 1 ? {wvy}you have {rbw}some{rbw} colourful {rbw}scraps{rbw},{wvy} - else ? {wvy}you don't have any colourful {rbw}scraps{rbw},{wvy} }{ - toxin == 1 ? {wvy}you have {rbw}some{rbw} jelly {rbw}toxins{rbw},{wvy} - else ? {wvy}you don't have any jelly {rbw}toxins{rbw},{wvy} }{ - tooth == 1 ? {wvy}you have {rbw}1{rbw} sharp {rbw}tooth{rbw},{wvy} - else ? {wvy}you don't have a sharp {rbw}tooth{rbw},{wvy} }{ - pearl == 1 ? {wvy}and you have {rbw}1{rbw} pretty {rbw}pearl{rbw}!{wvy} - else ? {wvy}and you don't have a pretty {rbw}pearl{rbw}!{wvy} } } """ DLG SPR_r a potion for.. frog bites? DLG SPR_s a potion for.. frog bites? DLG SPR_t this seems to be a cream to help make your scales sparkly and shiny.. DLG SPR_u ..is this.. vodka? {shk}wtf mom{shk} DLG SPR_v """ a big jug full of snakes... well of course thats very important for a household to have.. apparently.. """ DLG SPR_w i dont even know what this is.. DLG ITM_3 """ {sequence - (soundeffect "pick")you found a PURPLE SEA URCHIN! {urchin = 1} - (soundeffect "pick")you found another PURPLE SEA URCHIN! {urchin = 2} - (soundeffect "crunch"){shk}oh no!!! you stepped on the sea urchin!!!{shk} {exit "urchin,7,15"} - (soundeffect "pick")another PURPLE SEA URCHIN.. {urchin = 3} } """ DLG SPR_x """ {clr1}ivan:{clr1} stepped on me. stepped on me? are you kidding? This guy was dancing on me. I mean just look at this, broken, broken, gone, gone, broken, broken, broken! {clr2}nessy:{clr2} i'm so sorry!! {clr1}ivan:{clr1} kids these days!! D:< {exit "outside_left,5,10"} """ DLG SPR_y """ {sequence - {clr1}sandy:{clr1} hey nessy! i'm like sooo close to finding the uh jelly?? long? pipes?? seaweed! {clr2}nessy:{clr2} ..thanks for helping out {clr1}sandy:{clr1} its totally no problem! {exit "outside_center,9,4"} - {clr1}sandy:{clr1} is this the seaweed thingy you need? {clr2}nessy:{clr2} ..uh no sorry {clr1}sandy:{clr1} ..oh damn these are hard to find, huh... {clr2}nessy:{clr2} yeah.. {clr1}sandy:{clr1} it's ok! i wont give up!! {exit "outside_center,9,4"} } """ DLG SPR_z """ {sequence - {clr3}coral:{clr3} hey kiddo wassup? {clr2}nessy:{clr2} just.. doing stuff {clr3}coral:{clr3} wanna check out my juggling skillz? {clr2}nessy:{clr2} um.. sure {clr1}CORAL SHOWS OFF THEIR JUGGLING SKILLZ. THEY START OFF STRONG AND NESSY SEEMS ACTUALLY IMPRESSED. THEN THE BALLS UNCURL.. AND THEY ARE FISH. NESSY SHAKES THEIR HEAD AS CORAL FEELS EMBARRASSED BY THEIR CHEATING.{clr1} {clr2}nessy:{clr2} ..shame on you {clr3}coral:{clr3} h..eh.. {exit "outside_center,4,10"} - {clr3}coral:{clr3} sorry about that.. i mean come on you didn't really think i could juggle underwater.. {clr2}nessy:{clr2} .... {clr3}coral:{clr3} you did! omg haha you're so cute! {clr2}nessy:{clr2} ..well its not like {rbw}magic{rbw} exist here.... why couldn't juggling be a thing. {clr3}coral:{clr3} ..never change, never lose your sense of wonder.. back in my days- {clr2}nessy:{clr2} oh fudge off! {clr3}coral:{clr3} >:^) {exit "outside_center,4,10"} } """ DLG SPR_10 """ {sequence - {clr1}A.J:{clr1} heeeeeey nes-nes! {clr2}nessy:{clr2} hey {clr1}A.J:{clr1} didja see?! {clr2}nessy:{clr2} see what? {clr1}A.J:{clr1} my bands poster!! we're going to play on Mermaidia Day!! it's gonna be blast!! {clr2}nessy:{clr2} oh that's nice.. {clr1}A.J:{clr1} you should come!! {clr2}nessy:{clr2} i'll think about it.. {exit "outside_center,4,4"} - {clr1}A.J:{clr1} oh yeah i found this pearl.. my papa's necklace broke earlier.. {clr2}nessy:{clr2} oh no! {pearl = 1} {clr1}A.J:{clr1} yeah but it's fine, they're going to make some earring now and don't need this one anymore! i just don't know what to do with this one.. {clr2}nessy:{clr2} ... {clr1}A.J:{clr1} do you want it? {clr2}nessy:{clr2} um.. you sure? {clr1}A.J:{clr1} yeah why not :) {clr3}A.J. GIVES NESSY A PEARL{clr3} {clr2}nessy:{clr2} thanks! {clr1}A.J:{clr1} no problem ;) just promise you'll actually think about coming to my band's performance!{exit "outside_center,4,4"} - {clr1}A.J:{clr1} didja think about? {clr2}nessy:{clr2} still thinking about it.. {clr1}A.J:{clr1} well okay! take your time! Mermaidia Day is still a couple of weeks away :) {exit "outside_center,4,4"} } """ DLG SPR_11 """ {sequence - {clr1}pearly:{clr1} hey nessy {clr2}nessy:{clr2} hey pearls {clr1}pearly:{clr1} did you see the new cafe that's opened up in the other town? {clr2}nessy:{clr2} ..no i havn't had time to go anywhere.. {clr1}pearly:{clr1} oh.. well i'm hoping a cafe will open in our little corner of the world.. {clr2}nessy:{clr2} that'd be nice.. i really want some frozen lemonade without havn't to go out of my way.. {clr1}pearly:{clr1} yeah, that's the dream.. {exit "outside_center,9,11"} - {clr1}pearly:{clr1} i wish we could get a Mer Merton's here.. i mean what kind of mermaidia are we if we dont even have a Mer Merton's! {clr2}nessy:{clr2} ..i miss the ice caps.. {clr1}pearly:{clr1} well even the lemonade you like isn't the same everywhere {clr2}nessy:{clr2} yeah.. true.. {clr1}pearly:{clr1} maybe we should make a petition! {clr2}nessy:{clr2} if you make it.. i'll sign it {clr3}PEARLY'S EYES GLIMMER{clr3} {exit "outside_center,9,11"} - {clr1}pearly:{clr1} neeeeeessy!! {clr2}nessy:{clr2} ..yeah? {clr3}PEARLY THRUST A PIECE OF PRESSED CORAL INTO NESSY'S FACE{clr3} {clr1}pearly:{clr1} lookie look! {clr2}nessy:{clr2} ... {clr1}pearly:{clr1} you said you'd sign it! {clr2}nessy:{clr2} ..alright {clr3}NESSY SIGHS BUT SIGNS THE PETITION ANYWAY{clr3} {clr1}pearly:{clr1} i hope this works!! {exit "outside_center,9,11"} - {clr1}pearly:{clr1} .....so it didn't work {clr2}nessy:{clr2} ...i didn't think it would {clr1}pearly:{clr1} :( {clr2}nessy:{clr2} ..don't give up {exit "outside_center,9,11"} } """ DLG SPR_12 """ {clr2}nessy:{clr2} hello sir! {clr3}Sir Arthur of Mermaidia Yard:{clr3} ..better not be doing anything illegal! {clr2}nessy:{clr2} ..of course not {exit "outside_right,8,5"} """ DLG SPR_13 """ {sequence - {clr2}nessy:{clr2} hey.. {clr1}kay jay:{clr1} sup! {clr2}nessy:{clr2} just handing out here? {clr1}kay jay:{clr1} mostly hiding from A.J. at the moment lol {clr2}nessy:{clr2} ? {clr1}kay jay:{clr1} oh they just keep going on and on about their band and its like dude! i'm in the band! {clr2}nessy:{clr2} ha ha {clr1}kay jay:{clr1} you wouldn't be laughing if you were in my shoes! {clr2}nessy:{clr2} A.J. doesn't seem too bad.. {clr1}kay jay:{clr1} that's because they know not to annoy you lol {exit "outside_right,4,9"} - {clr1}kay jay:{clr1} you totes should check out our band on Mermaidia Day though! we're gonna be performing! {clr2}nessy:{clr2} oh maybe i will.. {clr1}kay jay:{clr1} we're been practising! i think we finally are starting to sound good together :P {clr2}nessy:{clr2} thats nice {clr1}kay jay:{clr1} we even got neon to agree to sing a couple of songs! {clr2}nessy:{clr2} oooh i love their songs.. they have such a pretty voice {clr1}kay jay:{clr1} yeah!! god they are just so good! {exit "outside_right,4,9"} - {clr2}nessy:{clr2} so when are you going to ask neon out? {clr1}kay jay:{clr1} {shk}w..ph..i-i.. wuh?!!!?!{shk} {clr2}nessy:{clr2} lmao ha ha {clr1}kay jay:{clr1} d-dont u dare tease me about it!! what am i even supposed to do?!! they are so perfect!! what! do i just walk up to them and say "hey date me"?!!! thats crazy!! {clr2}nessy:{clr2} i mean thats ideally what you should do lol {clr1}kay jay:{clr1} ...MMMPHHHHHH!! {clr2}nessy:{clr2} fine fine lol {exit "outside_right,4,9"} } """ DLG SPR_14 """ {sequence - {clr1}june:{clr1} nessy, guuuurl! how are you?! {clr2}nessy:{clr2} ...... {clr1}june:{clr1} oh right.. i'm sorry!! {clr1}june:{clr1} NESSY, BUUUUDDY! how are you?! {clr2}nessy:{clr2} oh i'm good.. just looking for stuff.. {clr1}june:{clr1} for a potion? {clr2}nessy:{clr2} yeah... {gh = 0} {clr1}june:{clr1} anything i can help with? {clr2}nessy:{clr2} oh well.. i do need some jellfish toxin {clr1}june:{clr1} sure i can give you some!! ..but i need some algea to make some.. i kinda used some up.. {clr2}nessy:{clr2} oh yeah sure i'll get you some! {clr1}june:{clr1} thanks friend :D {exit "outside_left,9,6"} - { - {item "glowy"} == 2 ? {sequence - {clr2}nessy:{clr2} hey june, here.. {clr3}NESSY GIVES JUNE SOME ALGEA{clr3} {clr1}june:{clr1} oh thanks! {clr2}nessy:{clr2} yeah.. no problem.. {clr1}june:{clr1} and here just gimmie a moment.. {clr3}JUNE EATS THE ALGEA JUNE TENSES HER SQUISHY SEETHROUGH HOT BOD THAT SHE ACHIEVED THRU YOGA JUNE PRODUCES SOME TOXIN {toxin = 1} JUNE AND NESSY PANIC SINCE NESSY, THE IDIOT, DIDN'T BRING ANY CONTAINERS THEY FIND A PLASTIC BAG FLOATING JUNE GIVES NESSY A PLASTIC BAG FULL OF JELLYFISH TOXINS{clr3} {clr2}nessy:{clr2} ..well that felt crazy.. {clr1}june:{clr1} lmao nes bud, you gotta be more prepared lol {clr2}nessy:{clr2} ..dont judge me {clr1}june:{clr1} LOL {exit "outside_left,9,6"} - { - gh == 0 ? {sequence - {clr2}nessy:{clr2} how's your sister doing? {clr1}june:{clr1} oh she's all like going through her goth emo phase lol {clr2}nessy:{clr2} ah.. {gh = 1} {clr1}june:{clr1} i'm like guuurl just forget about her! ..but i guess breakups are never easy and take time.. {clr2}nessy:{clr2} oh.. {clr1}june:{clr1} well she became a "goth girfriend" before this but like the emo thing is new.. {clr2}nessy:{clr2} i see.. {exit "outside_left,9,6"} - {clr1}june:{clr1} her gf honestly didn't even deserve her! like my sis is such a good person! {clr2}nessy:{clr2} yeah.. {gh = 2} {clr1}june:{clr1} maybe a little blunt and standoffish but like deep, deep, deep down she's got a heart of gold! {clr1}june:{clr1} ..and if some stupid mer can't see that then they totally dont deserve my sister! {clr2}nessy:{clr2} ..you're a good sibling {clr1}june:{clr1} :D {exit "outside_left,9,6"} } - gh == 1 ? {clr1}june:{clr1} her gf honestly didn't even deserve her! like my sis is such a good person! {clr2}nessy:{clr2} yeah.. {gh = 2} {clr1}june:{clr1} maybe a little blunt and standoffish but like deep, deep, deep down she's got a heart of gold! {clr1}june:{clr1} ..and if some stupid mer can't see that then they totally dont deserve my sister! {clr2}nessy:{clr2} ..you're a good sibling {clr1}june:{clr1} :D {exit "outside_left,9,6"} - gh == 2 ? {clr1}june:{clr1} well hope your potion goes good! {clr2}nessy:{clr2} thanks {exit "outside_left,9,6"} } } - else ? {sequence - {clr2}nessy:{clr2} how's your sister doing? {clr1}june:{clr1} oh she's all like going through her goth emo phase lol {clr2}nessy:{clr2} ah.. {gh = 1} {clr1}june:{clr1} i'm like guuurl just forget about her! ..but i guess breakups are never easy and take time.. {clr2}nessy:{clr2} oh.. {clr1}june:{clr1} well she became a "goth girfriend" before this but like the emo thing is new.. {clr2}nessy:{clr2} i see.. {exit "outside_left,9,6"} - {clr1}june:{clr1} her gf honestly didn't even deserve her! like my sis is such a good person! {clr2}nessy:{clr2} yeah.. {gh = 2} {clr1}june:{clr1} maybe a little blunt and standoffish but like deep, deep, deep down she's got a heart of gold! {clr1}june:{clr1} ..and if some stupid mer can't see that then they totally dont deserve my sister! {clr2}nessy:{clr2} ..you're a good sibling {clr1}june:{clr1} :D {exit "outside_left,9,6"} } } } """ DLG SPR_15 """ {sequence - {clr3}yargnits:{clr3} sweater buddy! {clr2}nessy:{clr2} sweater buddy!! {clr3}yargnits:{clr3} sweater buddy!!! {clr2}nessy:{clr2} sweater buddy!!!! {clr3}yargnits:{clr3} sweater buddy!!!!! {clr2}nessy:{clr2} sweater buddy!!!!!! {clr1}YARGNITS WINKS AT NESSY{clr1} {clr1}NESSY WINKS AT YARGNITS{clr1} {exit "outside_left,13,9"} - {clr3}yargnits:{clr3} frankly i think its gotten a bit too warm to wear a sweater.. {clr2}nessy:{clr2} yeah.. its too much for a swim on the town.. but its nice in my cave at least.. {clr3}yargnits:{clr3} that's nice.. i've taken to swimming to the deep water every now and then.. its a bit too cold for me {clr2}nessy:{clr2} yeah i generally don't stay there too long {clr3}yargnits:{clr3} ....i hate how i dont like the cold.. but the warmth isnt that much better.. {clr2}nessy:{clr2} i just want to wear a sweater forever.. {clr3}yargnits:{clr3} same.. {exit "outside_left,13,9"} - {clr3}yargnits:{clr3} wish it was sweater weather all the time.. {clr2}nessy:{clr2} yeah.. {clr3}yargnits:{clr3} guess i'll suffer... {exit "outside_left,13,9"} } """ DLG SPR_16 """ {sequence - {clr3}flotsam jr:{clr3} heeey nerd! {clr1}nessy:{clr1} hey neeerd! {clr3}flotsam jr:{clr3} rude {clr1}nessy:{clr1} haha tough shit {clr3}flotsam jr:{clr3} fair enough.. so what up? {clr1}nessy:{clr1} just chilling.. {clr3}flotsam jr:{clr3} mm.. did you the play last night? {clr1}nessy:{clr1} sadly not.. i had to finish up a potion {clr3}flotsam jr:{clr3} sucks.. it was a mertha merstie mystery! it was like mermy and merppence were asked to solve the case of counterfeit sanddollars by inspector merriot- {clr1}nessy:{clr1} ah! don't spoil it for me!! {clr3}flotsam jr:{clr3} sorry! sorry! {exit "outside_down1,6,8"} - {clr1}nessy:{clr1} ugh i hope i can go to the play tomorrow.. {clr3}flotsam jr:{clr3} i hope so to! i really need someone to talk to!!!!! {clr1}nessy:{clr1} you can wait! {exit "outside_down1,6,8"} } """ DLG SPR_17 """ {sequence - {clr3}florence:{clr3} ......sniff {hh = 1} {clr1}nessy:{clr1} f-florence? whats wrong?? {clr3}florence:{clr3} ...jules broke up with me.. {clr1}nessy:{clr1} w-what?! but.. {clr3}florence:{clr3}y-yeah.. look i don't realy want to talk about it.. {clr1}nessy:{clr1} ok.. {exit "outside_down1,10,11"} - {clr2}NESSY SNEAKS UP AND STEALS A GLOWING TEAR BEFORE IT HITS THE SANDY GROUND{clr2} {tear = 1} {clr1}nessy:{clr1} (..well im officially the worst friend..) {exit "outside_down1,10,11"} - {clr3}florence:{clr3} ..sniff.. sniiiiiff... {clr1}nessy:{clr1} ... {exit "outside_down1,10,11"} } """ DLG SPR_18 """ {sequence - {clr1}nessy:{clr1} hey jules {clr3}july:{clr3} hm.. {clr1}nessy:{clr1} ..ok {exit "outside_down_left,10,8"} - {clr1}nessy:{clr1} hey i was wondering if- {clr3}july:{clr3} HMMMM...... {clr1}nessy:{clr1} ..ok {exit "outside_down_left,10,8"} - { - gh == 2 ? { - hh == 1 ? {clr1}nessy:{clr1} (..wait a sec.. dont tell me these two just broke up with each other.. was this some misunderstanding?? ugh i'm not getting in the middle of this...) {exit "outside_down_left,10,8"} - else ? {clr1}nessy:{clr1} hey i was wondering if- {clr3}july:{clr3} HMMMM...... {clr1}nessy:{clr1} ..ok {exit "outside_down_left,10,8"} } - else ? { - gh == 2 ? {clr1}nessy:{clr1} (..wait a sec.. dont tell me these two just broke up with each other.. was this some misunderstanding?? ugh i'm not getting in the middle of this...) {exit "outside_down_left,10,8"} - else ? {clr1}nessy:{clr1} hey i was wondering if- {clr3}july:{clr3} HMMMM...... {clr1}nessy:{clr1} ..ok {exit "outside_down_left,10,8"} } - else ? {clr1}nessy:{clr1} hey i was wondering if- {clr3}july:{clr3} HMMMM...... {clr1}nessy:{clr1} ..ok {exit "outside_down_left,10,8"} } } """ DLG SPR_19 """ {sequence - {clr3}neon:{clr3} hiya nes! {clr1}nessy:{clr1} hey neon.. {clr3}neon:{clr3} hey do you mind helping me out.. {clr1}nessy:{clr1} uh sure..? {clr3}neon:{clr3} i'm trying to decide what to wear for a show.. i'm going to be singing with panic! at the seafloor.. {clr1}nessy:{clr1} so you want to look nice for kay jay? {clr3}neon:{clr3} {shk}wa-wa-what?!! n-no!!{shk} {clr1}nessy:{clr1} ha ha you're so transparent {clr2}NESSY SNICKERS AND NEON POUTS, CROSSING HER ARMS AND BLUSHING{clr2} {exit "outside_down_left,5,10"} - {clr3}neon:{clr3} buuuuuut what should i wear?? {clr1}nessy:{clr1} something cute..? {clr3}neon:{clr3} all my clothes are cute!! {clr1}nessy:{clr1} neon.. all i wear is sweaters.. i'm rly not good at clothes.. {clr3}neon:{clr3} :| {exit "outside_down_left,5,10"} } """ DLG SPR_1a """ {sequence - {clr3}hunter:{clr3} hey, babes.. {clr2}nessy:{clr2} hey hunter.. {clr3}hunter:{clr3} ..do you need a tooth? {clr2}nessy:{clr2} a tooth? {clr3}hunter:{clr3} i was fighting this dude behind the swimminglot of McMernald's and while i was trying to talk them down they just like punched me and i totally beat their ass afterwards but my tooth was all wobbly and now it fell out.. {clr2}nessy:{clr2} ... {clr3}hunter:{clr3} so do you need a tooth? {tooth = 1} {clr2}nessy:{clr2} ..sure {clr1}HUNTER GIVES YOU THEIR BLOODY TOOTH.. IT IS KINDA GROSS{clr1} {exit "outside_left2_big,7,9"} - {clr3}hunter:{clr3} ... {clr2}nessy:{clr2} hm? {clr3}hunter:{clr3} ..do you think i'm till hot? {clr2}nessy:{clr2} what's bringing this on? {clr3}hunter:{clr3} i guess like scars are one thing.. plenty of people are into them which works out for me... but a missing tooth.. {clr2}nessy:{clr2} ... {clr2}nessy:{clr2} i mean i can probably make you a fake tooth we can magic into your mouth.. {clr3}hunter:{clr3} ooh.. can it be silver with some cool design? {clr2}nessy:{clr2} sure.. {clr3}hunter:{clr3} thanks, babes {exit "outside_left2_big,7,9"} - {clr3}hunter:{clr3} you're real cool, babes, you know that right? {clr2}nessy:{clr2} ..mh... {clr2}nessy:{clr2} ..thanks {clr3}hunter:{clr3} good, kno your value {exit "outside_left2_big,7,9"} } """ DLG SPR_1b """ {sequence - {clr3}mr. whale shark:{clr3} hullo, nessy {clr2}nessy:{clr2} h-hello, mr. whale! {clr3}mr. whale shark:{clr3} lovely day we're having, isn't it! {clr2}nessy:{clr2} it is nice.. {clr3}mr. whale shark:{clr3} my husband has just gotten back from visiting their mother and brought back their coin collection! {clr2}nessy:{clr2} oh whoa! it's those human shiny thingies my mom told me about right? {clr3}mr whale shark:{clr3} indeed! {clr2}nessy:{clr2} cool.. {exit "outside_left2_big,12,6"} - { - {item "urchin"} >= 3 ? {sequence - {clr3}mr. whale shark:{clr3} oh what's that you got there, dearie? {clr2}nessy:{clr2} oh.. um.. just some sea urchins i found {clr3}mr. whale shark:{clr3} ooh sea urchins! i still remember the days when those were the currency of the ocean.. {clr2}nessy:{clr2} really? {clr3}mr. whale shark:{clr3} sadly yes.. it was before many really thought about how the urchins felt about it themselves.. {clr2}nessy:{clr2} oh no should i have left them alone? {clr3}mr whale shark:{clr3} oh no most sea urchins are quite happy to find someone they can use to travel farther than they can go themselves {clr2}nessy:{clr2} ..oh {clr3}mr whale shark:{clr3} you can give them to me and i'll ask them where they want to go.. i speak a good amount of the urchin language! {clr2}nessy:{clr2} oh uh yeah sure.. here {clr1}NESSY GIVES SEA URCHINS TO MR. WHALE SHARK{clr1} {exit "outside_left2_big,12,6"} - {clr2}nessy:{clr2} hey um.. mr. whale shark? {clr3}mr. whale shark:{clr3} yes, dearie? {clr2}nessy:{clr2} does your husband have any coins they don't really need? {clr3}mr. whale shark:{clr3} mmm.. i have this coin that they gave me? {clr2}nessy:{clr2} oh no gosh.. that's yours and.. stuff {clr3}mr whale shark:{clr3} oh i don't mind, dearie! here's have it! {clr1}MR. WHALE SHARK GIVES A COIN TO NESSY{clr1} {coin = 1} {clr2}nessy:{clr2} oh wow thank you so much! {clr3}mr whale shark:{clr3} it is my pleasure! {exit "outside_left2_big,12,6"} - {clr3}mr. whale shark:{clr3} have a good day, nessy-dear! {clr2}nessy:{clr2} t-thank you, you too! {exit "outside_left2_big,12,6"} } - else ? {clr2}nessy:{clr2} are coins really actually shiny? {clr3}mr. whale shark:{clr3} well some are and others are more dull i suppose.. {clr2}nessy:{clr2} mmm.. i heard they are made with a material not native to the ocean.. {clr3}mr. whale shark:{clr3} yes i think that is true! many human things are made of materials that don't really exist here... honestly i think we are better off without all that junk {clr2}nessy:{clr2} ..so you aren't really fond of coins either? {clr3}mr. whale shark:{clr3} coins aren't too bad but in general i am indeed not a fan of human things {clr2}nessy:{clr2} ..i see {exit "outside_left2_big,12,6"} } } """ DLG SPR_1c """ {sequence - {clr1}starlet:{clr1} hiya nes! {clr3}nessy:{clr3} hey star.. {clr1}starlet:{clr1} omg im gonna be planning the best party ever! {clr3}nessy:{clr3} is there an occasion? {clr1}starlet:{clr1} not! at! all! {clr2}STARLET JUMPS AND THROWS CONFETTI IN THE AIR{clr2} {confetti = 1} {clr3}nessy:{clr3} oh alright then.. {clr2}NESSY PICKS SOME OF THE CONFETTI UP AND PUTS IT IN THEIR NONEXISTENT POCKETS{clr2}{exit "close1,2,7"} - {clr3}nessy:{clr3} good luck with the party preparations.. {clr1}starlet:{clr1} thanks!! {exit "close1,2,7"} } """ DLG SPR_1d """ {sequence - {clr3}nessy:{clr3} h- {clr1}goby:{clr1} ssshhh! {clr3}nessy:{clr3} wh- {clr1}goby:{clr1} {shk}SSSHHHHHHHH!{shk} {exit "close1,9,9"} - {clr3}nessy:{clr3} goby.. what are you doing? {clr1}goby:{clr1} i'm trying to listen to this cool podcast! my earbuds are kinda messed up but i dont have any other ones so.. {clr3}nessy:{clr3} oh.. i'll leave you to it.. {clr1}goby:{clr1} {shk}yes thank you{shk} {exit "close1,9,9"} } """ DLG SPR_1e """ {cycle - {clr2}kittykat:{clr2} meowr? {exit "close2,10,10"} - {clr2}kittykat:{clr2} meowr purrrrrrrr.. {exit "close2,10,10"} - {clr1}nessy:{clr1} you're a good kitty.. {clr2}kittykat:{clr2} purrrrrrrrrrrrrrrr! {exit "close2,10,10"} } """ DLG SPR_1f """ {sequence - {clr3}nessy:{clr3} hello, whiskers.. {clr1}whiskers:{clr1} hello, nessy! thanks for that potion last night! {clr3}nessy:{clr3} it was no problem {clr1}whiskers:{clr1} my claw feels so much better now :D {clr3}nessy:{clr3} im glad to hear it, let me know if you'll be needing another one.. {clr1}whiskers:{clr1} will do :D {exit "close3,5,9"} - {clr1}whiskers:{clr1} have a nice day, nessy! {clr3}nessy:{clr3} thanks.. {exit "close3,5,9"} } """ DLG ITM_4 """ {sequence - (soundeffect "pick")some GLOWING ALGEA!{glow = 1} - (soundeffect "pick")another bit of GLOWING ALGEA!{glow = 2} } """ DLG SPR_1g """ { - coin == 1 ? {sequence - {potion = potion + 1} - } - else ? }{ - confetti == 1 ? {sequence - {potion = potion + 1} - } - else ? }{ - toxin == 1 ? {sequence - {potion = potion + 1} - } - else ? }{ - tear == 1 ? {sequence - {potion = potion + 1} - } - else ? }{ - tooth == 1 ? {sequence - {potion = potion + 1} - } - else ? }{ - pearl == 1 ? {sequence - {potion = potion + 1} - } - else ? }{ - potion >= 6 ? (music "jingle"){rbw}YOU HAVE COLLECTED ALL THE INGREDIENTS! PLEASE STAND BY AS THE POTION IS BREWING!!{rbw} {rbw}{wvy}. .. ... ....{wvy} {wvy}whoooosh!!{rbw}{wvy}(musicEnd "potion") {exit "cave3,0,15"} - else ? (soundeffect "nope"){shk}you don't have all the ingredients!!{shk} } """ DLG ITM_5 """ {sequence - ...and so the {rbw}potion{rbw} is done - {clr1}sandy:{clr1} hey hey nessy! i still couldn't find- {clr3}nessy:{clr3} its ok.. i've finished it {clr1}sandy:{clr1} whoa! awesome!! {clr1}sandy:{clr1} gimmie gimmie!! {clr3}nessy:{clr3} just be careful.. NESSY GIVES THE POTION TO SANDY - {clr3}nessy:{clr3} {shk}SAAANDY!!!!{shk} {clr1}sandy:{clr1} ..oops.... {clr3}nessy:{clr3} {shk}I'M GOING TO KILL YOU!!!!!{shk} SANDY HAS USED THE MOVE "FLEE" NESSY USED THE COUNTERMOVE "RUN-AFTER-YOUR-BEST-FRIEND" ...AND NOW THE CAVE IS EMPTY } """ DLG ITM_6 (soundeffect "crash")WHOOSH CLUNK! END 0 ..and so concludes our glimpse into the life of a sea witch :) VAR start 1 </script> <style> html { margin:0px; padding:0px; } body { margin:0px; padding:0px; overflow:hidden; background:#ffffff; } #game { background:black; width:100vw; max-width:100vh; margin:auto; display:block; } </style> <!-- SCRIPTS --> <script> function startExportedGame() { attachCanvas( document.getElementById("game") ); load_game( document.getElementById("exportedGameData").text.slice(1) ); } </script> <script> //hex-to-rgb method borrowed from stack overflow function hexToRgb(hex) { // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; hex = hex.replace(shorthandRegex, function(m, r, g, b) { return r + r + g + g + b + b; }); var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); return result ? { r: parseInt(result[1], 16), g: parseInt(result[2], 16), b: parseInt(result[3], 16) } : null; } function componentToHex(c) { var hex = c.toString(16); return hex.length == 1 ? "0" + hex : hex; } function rgbToHex(r, g, b) { return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); } function hslToHex(h,s,l) { var rgbArr = hslToRgb(h,s,l); return rgbToHex( Math.floor(rgbArr[0]), Math.floor(rgbArr[1]), Math.floor(rgbArr[2]) ); } function hexToHsl(hex) { var rgb = hexToRgb(hex); return rgbToHsl(rgb.r, rgb.g, rgb.b); } // really just a vector distance function colorDistance(a1,b1,c1,a2,b2,c2) { return Math.sqrt( Math.pow(a1 - a2, 2) + Math.pow(b1 - b2, 2) + Math.pow(c1 - c2, 2) ); } function hexColorDistance(hex1,hex2) { var color1 = hexToRgb(hex1); var color2 = hexToRgb(hex2); return rgbColorDistance(color1.r, color1.g, color1.b, color2.r, color2.g, color2.b); } // source : http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c /* accepts parameters * h Object = {h:x, s:y, v:z} * OR * h, s, v */ function HSVtoRGB(h, s, v) { var r, g, b, i, f, p, q, t; if (arguments.length === 1) { s = h.s, v = h.v, h = h.h; } i = Math.floor(h * 6); f = h * 6 - i; p = v * (1 - s); q = v * (1 - f * s); t = v * (1 - (1 - f) * s); switch (i % 6) { case 0: r = v, g = t, b = p; break; case 1: r = q, g = v, b = p; break; case 2: r = p, g = v, b = t; break; case 3: r = p, g = q, b = v; break; case 4: r = t, g = p, b = v; break; case 5: r = v, g = p, b = q; break; } return { r: Math.round(r * 255), g: Math.round(g * 255), b: Math.round(b * 255) }; } /* accepts parameters * r Object = {r:x, g:y, b:z} * OR * r, g, b */ function RGBtoHSV(r, g, b) { if (arguments.length === 1) { g = r.g, b = r.b, r = r.r; } var max = Math.max(r, g, b), min = Math.min(r, g, b), d = max - min, h, s = (max === 0 ? 0 : d / max), v = max / 255; switch (max) { case min: h = 0; break; case r: h = (g - b) + d * (g < b ? 6: 0); h /= 6 * d; break; case g: h = (b - r) + d * 2; h /= 6 * d; break; case b: h = (r - g) + d * 4; h /= 6 * d; break; } return { h: h, s: s, v: v }; } // source : https://gist.github.com/mjackson/5311256 /** * Converts an HSL color value to RGB. Conversion formula * adapted from http://en.wikipedia.org/wiki/HSL_color_space. * Assumes h, s, and l are contained in the set [0, 1] and * returns r, g, and b in the set [0, 255]. * * @param Number h The hue * @param Number s The saturation * @param Number l The lightness * @return Array The RGB representation */ function hslToRgb(h, s, l) { var r, g, b; if (s == 0) { r = g = b = l; // achromatic } else { function hue2rgb(p, q, t) { if (t < 0) t += 1; if (t > 1) t -= 1; if (t < 1/6) return p + (q - p) * 6 * t; if (t < 1/2) return q; if (t < 2/3) return p + (q - p) * (2/3 - t) * 6; return p; } var q = l < 0.5 ? l * (1 + s) : l + s - l * s; var p = 2 * l - q; r = hue2rgb(p, q, h + 1/3); g = hue2rgb(p, q, h); b = hue2rgb(p, q, h - 1/3); } return [ r * 255, g * 255, b * 255 ]; } /** * From: http://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion * * Converts an RGB color value to HSL. Conversion formula * adapted from http://en.wikipedia.org/wiki/HSL_color_space. * Assumes r, g, and b are contained in the set [0, 255] and * returns h, s, and l in the set [0, 1]. * * @param {number} r The red color value * @param {number} g The green color value * @param {number} b The blue color value * @return {Array} The HSL representation */ function rgbToHsl(r, g, b){ r /= 255, g /= 255, b /= 255; var max = Math.max(r, g, b), min = Math.min(r, g, b); var h, s, l = (max + min) / 2; if(max == min){ h = s = 0; // achromatic }else{ var d = max - min; s = l > 0.5 ? d / (2 - max - min) : d / (max + min); switch(max){ case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; } h /= 6; } return [h, s, l]; } </script> <script> function Font() { this.getData = function() { return fontdata; } var charSize = 6 * 8; this.getChar = function(char) { var startIndex = char.charCodeAt(0) * charSize; return fontdata.slice( startIndex, startIndex + charSize ); } var fontdata = [ /* num: 0 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 1 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,1,0,1,1, 0,1,0,0,0,1, 0,1,0,1,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 2 */ 0,0,1,1,1,0, 0,1,1,1,1,1, 0,1,0,1,0,1, 0,1,1,1,1,1, 0,1,0,0,0,1, 0,1,1,1,1,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 3 */ 0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,1,1,1,1, 0,1,1,1,1,1, 0,1,1,1,1,1, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 4 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /*0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,0,1,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,0,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0,*/ /* num: 5 */ 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,1,1,1,1,1, 0,1,1,1,1,1, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 6 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,1,1,1,1,1, 0,1,1,1,1,1, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 7 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 8 */ 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,0,0,1,1, 1,1,0,0,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, /* num: 9 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 10 */ 1,1,1,1,1,1, 1,1,1,1,1,1, 1,0,0,0,0,1, 1,0,1,1,0,1, 1,0,1,1,0,1, 1,0,0,0,0,1, 1,1,1,1,1,1, 1,1,1,1,1,1, /* num: 11 */ 0,0,0,0,0,0, 0,0,0,1,1,1, 0,0,0,0,1,1, 0,0,1,1,0,1, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 12 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 13 */ 0,0,0,1,0,0, 0,0,0,1,1,0, 0,0,0,1,0,1, 0,0,0,1,0,0, 0,0,1,1,0,0, 0,1,1,1,0,0, 0,1,1,0,0,0, 0,0,0,0,0,0, /* num: 14 */ 0,0,0,0,1,1, 0,0,1,1,0,1, 0,0,1,0,1,1, 0,0,1,1,0,1, 0,0,1,0,1,1, 0,1,1,0,1,1, 0,1,1,0,0,0, 0,0,0,0,0,0, /* num: 15 */ 0,0,0,0,0,0, 0,1,0,1,0,1, 0,0,1,1,1,0, 0,1,1,0,1,1, 0,0,1,1,1,0, 0,1,0,1,0,1, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 16 */ 0,0,1,0,0,0, 0,0,1,1,0,0, 0,0,1,1,1,0, 0,0,1,1,1,1, 0,0,1,1,1,0, 0,0,1,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, /* num: 17 */ 0,0,0,0,1,0, 0,0,0,1,1,0, 0,0,1,1,1,0, 0,1,1,1,1,0, 0,0,1,1,1,0, 0,0,0,1,1,0, 0,0,0,0,1,0, 0,0,0,0,0,0, /* num: 18 */ 0,0,0,1,0,0, 0,0,1,1,1,0, 0,1,1,1,1,1, 0,0,0,1,0,0, 0,1,1,1,1,1, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 19 */ 0,0,1,0,1,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,1,0,1,0, 0,0,0,0,0,0, /* num: 20 */ 0,0,1,1,1,1, 0,1,0,1,0,1, 0,1,0,1,0,1, 0,0,1,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,0,0,0, /* num: 21 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,0,1,1,0,0, 0,0,1,0,1,0, 0,0,0,1,1,0, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 22 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 0,1,1,1,1,0, 0,0,0,0,0,0, /* num: 23 */ 0,0,0,1,0,0, 0,0,1,1,1,0, 0,1,1,1,1,1, 0,0,0,1,0,0, 0,1,1,1,1,1, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,1,1,1,0, /* num: 24 */ 0,0,0,1,0,0, 0,0,1,1,1,0, 0,1,1,1,1,1, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 25 */ 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,1,1,1,1,1, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 26 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,1,1,0, 0,1,1,1,1,1, 0,0,0,1,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 27 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,1,0,0, 0,1,1,1,1,1, 0,0,1,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 28 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,1,1, 0,0,0,0,0,0, /* num: 29 */ 0,0,0,0,0,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,1,1,1,1,1, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 30 */ 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,1,1,1,1,1, 0,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 31 */ 0,1,1,1,1,1, 0,1,1,1,1,1, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 32 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 33 */ 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 34 */ 0,1,1,0,1,1, 0,1,1,0,1,1, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 35 */ 0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,1,1,1,1, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,1,1,1,1,1, 0,0,1,0,1,0, 0,0,0,0,0,0, /* num: 36 */ 0,0,1,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,0, 0,0,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 37 */ 0,1,1,0,0,1, 0,1,1,0,0,1, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,1,1, 0,1,0,0,1,1, 0,0,0,0,0,0, /* num: 38 */ 0,0,1,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,1,0,1,0,1, 0,1,0,0,1,0, 0,0,1,1,0,1, 0,0,0,0,0,0, /* num: 39 */ 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 40 */ 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 41 */ 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, /* num: 42 */ 0,0,0,0,0,0, 0,0,1,0,1,0, 0,0,1,1,1,0, 0,1,1,1,1,1, 0,0,1,1,1,0, 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 43 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,1,1,1,1,1, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 44 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,1,0,0,0, /* num: 45 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 46 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 47 */ 0,0,0,0,0,0, 0,0,0,0,0,1, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 48 ZERO!!!!*/ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,1,1, 0,1,0,1,0,1, 0,1,1,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 49 */ 0,0,0,1,0,0, 0,0,1,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 50 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,0,0,0,0,1, 0,0,0,1,1,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,1,1,1,1, 0,0,0,0,0,0, /* num: 51 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,0,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 52 */ 0,0,0,0,1,0, 0,0,0,1,1,0, 0,0,1,0,1,0, 0,1,0,0,1,0, 0,1,1,1,1,1, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,0,0, /* num: 53 */ 0,1,1,1,1,1, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 54 */ 0,0,0,1,1,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 55 */ 0,1,1,1,1,1, 0,0,0,0,0,1, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, /* num: 56 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 57 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,1, 0,0,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 58 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 59 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,1,0,0,0, /* num: 60 */ 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 0,0,0,0,0,0, /* num: 61 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 62 */ 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 0,0,0,0,0,1, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, /* num: 63 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,0,0,0,0,1, 0,0,0,1,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 64 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,1,1,1, 0,1,0,1,0,1, 0,1,0,1,1,1, 0,1,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 65 Start of Capital Letters*/ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,1,1,1,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,0,0,0,0, /* num: 66 */ 0,1,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,0,0,0,0,0, /* num: 67 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 68 */ 0,1,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,0,0,0,0,0, /* num: 69 */ 0,1,1,1,1,1, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,1,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,1,1, 0,0,0,0,0,0, /* num: 70 */ 0,1,1,1,1,1, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,1,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, /* num: 71 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,0, 0,1,0,1,1,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,0, /* num: 72 */ 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,1,1,1,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,0,0,0,0, /* num: 73 */ 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 74 */ 0,0,0,0,0,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 75 */ 0,1,0,0,0,1, 0,1,0,0,1,0, 0,1,0,1,0,0, 0,1,1,0,0,0, 0,1,0,1,0,0, 0,1,0,0,1,0, 0,1,0,0,0,1, 0,0,0,0,0,0, /* num: 76 */ 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,1,1, 0,0,0,0,0,0, /* num: 77 */ 0,1,0,0,0,1, 0,1,1,0,1,1, 0,1,0,1,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,0,0,0,0, /* num: 78 */ 0,1,0,0,0,1, 0,1,1,0,0,1, 0,1,0,1,0,1, 0,1,0,0,1,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,0,0,0,0, /* num: 79 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 80 */ 0,1,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, /* num: 81 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,1,0,1, 0,1,0,0,1,0, 0,0,1,1,0,1, 0,0,0,0,0,0, /* num: 82 */ 0,1,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,1,0,0,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,0,0,0,0, /* num: 83 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 84 */ 0,1,1,1,1,1, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 85 */ 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 86 */ 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,0,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 87 */ 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,1,0,1, 0,1,0,1,0,1, 0,1,0,1,0,1, 0,1,0,1,0,1, 0,0,1,0,1,0, 0,0,0,0,0,0, /* num: 88 */ 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,0,1,0, 0,0,0,1,0,0, 0,0,1,0,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,0,0,0,0, /* num: 89 */ 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,0,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 90 */ 0,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,0, /* num: 91 */ 0,0,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 92 */ 0,0,0,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 0,0,0,0,0,1, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 93 */ 0,0,1,1,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 94 */ 0,0,0,1,0,0, 0,0,1,0,1,0, 0,1,0,0,0,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 95 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, /* num: 96 */ 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 97 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,1, 0,0,1,1,1,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,0, /* num: 98 */ 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,0,0,0,0,0, /* num: 99 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,0, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 100 */ 0,0,0,0,0,1, 0,0,0,0,0,1, 0,0,1,1,1,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,0, /* num: 101 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,1,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 102 */ 0,0,0,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, /* num: 103 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,1,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,1, 0,0,1,1,1,0, /* num: 104 */ 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,0,0,0,0, /* num: 105 */ 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,1,0, 0,0,0,0,0,0, /* num: 106 */ 0,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, /* num: 107 */ 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,1,0, 0,1,0,1,0,0, 0,1,1,0,0,0, 0,1,0,1,0,0, 0,1,0,0,1,0, 0,0,0,0,0,0, /* num: 108 */ 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,1,0, 0,0,0,0,0,0, /* num: 109 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,0,1,0, 0,1,0,1,0,1, 0,1,0,1,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,0,0,0,0, /* num: 110 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,0,0,0,0, /* num: 111 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 112 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,1,0,0,0,0, /* num: 113 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,1,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,1, /* num: 114 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,1,0, 0,0,1,0,0,1, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, /* num: 115 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 116 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 117 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,1,1,0, 0,0,1,0,1,0, 0,0,0,0,0,0, /* num: 118 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,0,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 119 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,1,0,1, 0,1,1,1,1,1, 0,0,1,0,1,0, 0,0,0,0,0,0, /* num: 120 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,0,0,0,0, /* num: 121 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,1,1,0,0,0, /* num: 122 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,1,0, 0,0,1,1,0,0, 0,1,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,0, /* num: 123 */ 0,0,0,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,1,1,0, 0,0,0,0,0,0, /* num: 124 */ 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, /* num: 125 */ 0,0,1,1,0,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,1,1, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 126 */ 0,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 127 */ 0,0,0,1,0,0, 0,0,1,1,1,0, 0,1,1,0,1,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 128 */ 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,1,1,0,0, /* num: 129 */ 0,1,0,0,1,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,1,1,0, 0,0,1,0,1,0, 0,0,0,0,0,0, /* num: 130 */ 0,0,0,0,1,1, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,1,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 131 */ 0,0,1,1,1,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,1, 0,0,1,1,1,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,0, /* num: 132 */ 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,1, 0,0,1,1,1,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,0, /* num: 133 */ 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,1, 0,0,1,1,1,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,0, /* num: 134 */ 0,0,1,1,1,0, 0,0,1,0,1,0, 0,0,1,1,1,0, 0,0,0,0,0,1, 0,0,1,1,1,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,0, /* num: 135 */ 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,0, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,1,1,0,0, /* num: 136 */ 0,0,1,1,1,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,1,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 137 */ 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,1,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 138 */ 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,1,1,1,0, 0,1,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 139 */ 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,1,0, 0,0,0,0,0,0, /* num: 140 */ 0,0,0,1,0,0, 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,1,0, 0,0,0,0,0,0, /* num: 141 */ 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,1,0, 0,0,0,0,0,0, /* num: 142 */ 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,1,0, 0,1,0,0,0,1, 0,1,1,1,1,1, 0,1,0,0,0,1, 0,0,0,0,0,0, /* num: 143 */ 0,0,1,1,1,0, 0,0,1,0,1,0, 0,0,1,1,1,0, 0,1,1,0,1,1, 0,1,0,0,0,1, 0,1,1,1,1,1, 0,1,0,0,0,1, 0,0,0,0,0,0, /* num: 144 */ 0,0,0,0,1,1, 0,0,0,0,0,0, 0,1,1,1,1,1, 0,1,0,0,0,0, 0,1,1,1,1,0, 0,1,0,0,0,0, 0,1,1,1,1,1, 0,0,0,0,0,0, /* num: 145 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 0,0,0,1,0,1, 0,1,1,1,1,1, 0,1,0,1,0,0, 0,0,1,1,1,1, 0,0,0,0,0,0, /* num: 146 */ 0,0,1,1,1,1, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,1,1,1,1, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,1,1, 0,0,0,0,0,0, /* num: 147 */ 0,0,1,1,1,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 148 */ 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 149 */ 0,1,1,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 150 */ 0,0,1,1,1,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,1,1,0, 0,0,1,0,1,0, 0,0,0,0,0,0, /* num: 151 */ 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,1,1,0, 0,0,1,0,1,0, 0,0,0,0,0,0, /* num: 152 */ 0,0,1,0,1,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,1,1,0,0,0, /* num: 153 */ 0,1,0,0,1,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 154 */ 0,0,1,0,1,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 155 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 156 */ 0,0,0,1,1,0, 0,0,1,0,0,1, 0,0,1,0,0,0, 0,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,1, 0,1,0,1,1,1, 0,0,0,0,0,0, /* num: 157 */ 0,1,0,0,0,1, 0,0,1,0,1,0, 0,0,0,1,0,0, 0,1,1,1,1,1, 0,0,0,1,0,0, 0,1,1,1,1,1, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 158 */ 0,1,1,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,1,0,1,0, 0,1,0,1,1,1, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,0,0,0,0, /* num: 159 */ 0,0,0,0,1,0, 0,0,0,1,0,1, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, /* num: 160 */ 0,0,0,1,1,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,1, 0,0,1,1,1,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,0, /* num: 161 */ 0,0,0,1,1,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,1,0, 0,0,0,0,0,0, /* num: 162 */ 0,0,0,1,1,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 163 */ 0,0,0,1,1,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,1,1,0, 0,0,1,0,1,0, 0,0,0,0,0,0, /* num: 164 */ 0,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,0,0,0,0, /* num: 165 */ 0,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,1,0,1,0, 0,1,0,1,1,0, 0,1,0,0,1,0, 0,0,0,0,0,0, /* num: 166 */ 0,0,1,1,1,0, 0,0,0,0,0,1, 0,0,1,1,1,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,0, 0,0,1,1,1,1, 0,0,0,0,0,0, /* num: 167 */ 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,0, /* num: 168 */ 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,1,0,0, 0,1,0,0,0,0, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 169 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,1, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 170 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 171 */ 0,1,0,0,0,0, 0,1,0,0,1,0, 0,1,0,1,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,0,0,0,1,0, 0,0,0,1,1,1, 0,0,0,0,0,0, /* num: 172 */ 0,1,0,0,0,0, 0,1,0,0,1,0, 0,1,0,1,0,0, 0,0,1,0,1,1, 0,1,0,1,0,1, 0,0,0,1,1,1, 0,0,0,0,0,1, 0,0,0,0,0,0, /* num: 173 */ 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 174 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,1, 0,1,0,0,1,0, 0,0,1,0,0,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 175 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,0,1,0,0,1, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 176 */ 0,1,0,1,0,1, 0,0,0,0,0,0, 1,0,1,0,1,0, 0,0,0,0,0,0, 0,1,0,1,0,1, 0,0,0,0,0,0, 1,0,1,0,1,0, 0,0,0,0,0,0, /* num: 177 */ 0,1,0,1,0,1, 1,0,1,0,1,0, 0,1,0,1,0,1, 1,0,1,0,1,0, 0,1,0,1,0,1, 1,0,1,0,1,0, 0,1,0,1,0,1, 1,0,1,0,1,0, /* num: 178 */ 1,0,1,0,1,0, 1,1,1,1,1,1, 0,1,0,1,0,1, 1,1,1,1,1,1, 1,0,1,0,1,0, 1,1,1,1,1,1, 0,1,0,1,0,1, 1,1,1,1,1,1, /* num: 179 */ 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, /* num: 180 */ 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 1,1,1,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, /* num: 181 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,1,1,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, /* num: 182 */ 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 1,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, /* num: 183 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, /* num: 184 */ 0,0,0,0,0,0, 1,1,1,1,0,0, 0,0,0,1,0,0, 1,1,1,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, /* num: 185 */ 0,1,0,1,0,0, 1,1,0,1,0,0, 0,0,0,1,0,0, 1,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, /* num: 186 */ 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, /* num: 187 */ 0,0,0,0,0,0, 1,1,1,1,0,0, 0,0,0,1,0,0, 1,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, /* num: 188 */ 0,1,0,1,0,0, 1,1,0,1,0,0, 0,0,0,1,0,0, 1,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 189 */ 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 1,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 190 */ 0,0,0,1,0,0, 1,1,1,1,0,0, 0,0,0,1,0,0, 1,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 191 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, /* num: 192 */ 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 193 */ 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 1,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 194 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, /* num: 195 */ 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,1,1, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, /* num: 196 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 197 */ 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 1,1,1,1,1,1, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, /* num: 198 */ 0,0,0,1,0,0, 0,0,0,1,1,1, 0,0,0,1,0,0, 0,0,0,1,1,1, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, /* num: 199 */ 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,1,1, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, /* num: 200 */ 0,1,0,1,0,0, 0,1,0,1,1,1, 0,1,0,0,0,0, 0,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 201 */ 0,0,0,0,0,0, 0,1,1,1,1,1, 0,1,0,0,0,0, 0,1,0,1,1,1, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, /* num: 202 */ 0,1,0,1,0,0, 1,1,0,1,1,1, 0,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 203 */ 0,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,0,0,0, 1,1,0,1,1,1, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, /* num: 204 */ 0,1,0,1,0,0, 0,1,0,1,1,1, 0,1,0,0,0,0, 0,1,0,1,1,1, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, /* num: 205 */ 0,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 206 */ 0,1,0,1,0,0, 1,1,0,1,1,1, 0,0,0,0,0,0, 1,1,0,1,1,1, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, /* num: 207 */ 0,0,0,1,0,0, 1,1,1,1,1,1, 0,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 208 */ 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 1,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 209 */ 0,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, /* num: 210 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, /* num: 211 */ 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,1,1,1,1, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 212 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, /* num: 213 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, 1,1,1,1,1,1, /* num: 214 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, /* num: 215 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, /* num: 216 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, /* num: 217 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, /* num: 218 */ 0,0,0,0,0,0, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, /* num: 219 */ 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1,1, /* num: 220 */ 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, /* num: 221 */ 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, /* num: 222 */ 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, /* num: 223 */ 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, /* num: 224 */ 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, /* num: 225 */ 0,0,0,0,0,0, 0,1,1,1,0,0, 0,1,0,0,1,0, 0,1,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,1,1,0,0, 0,1,0,0,0,0, /* num: 226 */ 0,1,1,1,1,0, 0,1,0,0,1,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, /* num: 227 */ 0,0,0,0,0,0, 0,1,1,1,1,1, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,0,0,0,0,0, /* num: 228 */ 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,1, 0,0,1,1,1,1, 0,1,0,0,0,1, 0,0,1,1,1,1, 0,0,0,0,0,0, /* num: 229 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,1,1, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 230 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,1,1,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, /* num: 231 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 232 */ 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 233 */ 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,1,1,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 234 */ 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,1,1,0,1,1, 0,0,0,0,0,0, /* num: 235 */ 0,0,1,1,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* num: 236 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,0,1,0,1, 0,1,0,1,0,1, 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 237 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,1,0,1,0,1, 0,1,0,1,0,1, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, /* num: 238 */ 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,0, 0,1,1,1,1,0, 0,1,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 239 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 240 */ 0,0,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 241 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 242 */ 0,1,0,0,0,0, 0,0,1,1,0,0, 0,0,0,0,1,0, 0,0,1,1,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,0, /* num: 243 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, 1,1,1,0,0,0, 1,0,0,1,1,0, 1,0,0,0,0,1, 1,0,0,0,0,0, 1,1,1,1,1,1, /* num: 244 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,1,1,1, 0,1,1,0,0,1, 1,0,0,0,0,1, 0,0,0,0,0,1, 1,1,1,1,1,1, /* num: 245 */ 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, /* num: 246 */ 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,1,0,0,0,1, 0,0,1,1,1,0, 0,0,0,0,0,0, /* num: 247 */ 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, 1,1,1,1,1,0, /* num: 248 */ 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, 1,1,1,1,0,0, /* num: 249 */ 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, 1,1,1,0,0,0, /* num: 250 */ 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, 1,1,0,0,0,0, /* num: 251 */ 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, /* num: 252 */ 0,0,1,0,1,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,1,1,0, 0,0,1,0,1,0, 0,0,0,0,0,0, /* num: 253 */ 0,1,1,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* num: 254 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 1,1,0,0,1,0, 1,1,0,0,1,1, 1,1,1,1,1,0, 0,0,1,1,1,1, /* num: 255 */ 0,1,0,0,1,0, 1,1,1,1,1,1, 0,1,0,0,1,0, 0,1,0,0,1,0, 1,1,1,1,1,1, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0 ]; } // Font() </script> <script> function Script() { this.CreateInterpreter = function() { return new Interpreter(); }; this.CreateUtils = function() { return new Utils(); }; var Interpreter = function() { var env = new Environment(); var parser = new Parser( env ); this.SetDialogBuffer = function(buffer) { env.SetDialogBuffer( buffer ); }; // TODO -- maybe this should return a string instead othe actual script?? this.Compile = function(scriptName, scriptStr) { // console.log("COMPILE"); var script = parser.Parse( scriptStr ); env.SetScript( scriptName, script ); } this.Run = function(scriptName, exitHandler) { // Runs pre-compiled script // console.log("RUN"); env.GetScript( scriptName ) .Eval( env, function() { if(exitHandler!=null) exitHandler(); } ); // console.log("SERIALIZE!!!!"); // console.log( env.GetScript( scriptName ).Serialize() ); } this.Interpret = function(scriptStr, exitHandler) { // Compiles and runs code immediately // console.log("INTERPRET"); var script = parser.Parse( scriptStr ); script.Eval( env, function() { if(exitHandler!=null) exitHandler(); } ); } this.HasScript = function(name) { return env.HasScript(name); }; this.ResetEnvironment = function() { env = new Environment(); parser = new Parser( env ); } // TODO : move to utils? // for reading in dialog from the larger file format this.ReadDialogScript = function(lines, i) { return parser.ReadDialogScript(lines,i); } this.Parse = function(scriptStr) { // parses a script but doesn't save it return parser.Parse( scriptStr ); } this.Eval = function(scripTree, exitHandler) { // runs a script stored externally scripTree.Eval( env, function() { if(exitHandler!=null) exitHandler(); } ); } this.CreateExpression = function(expStr) { return parser.CreateExpression( expStr ); } this.SetVariable = function(name,value,useHandler) { env.SetVariable(name,value,useHandler); } this.DeleteVariable = function(name,useHandler) { env.DeleteVariable(name,useHandler); } this.HasVariable = function(name) { return env.HasVariable(name); } this.SetOnVariableChangeHandler = function(onVariableChange) { env.SetOnVariableChangeHandler(onVariableChange); } this.GetVariableNames = function() { return env.GetVariableNames(); } this.GetVariable = function(name) { return env.GetVariable(name); } } var Utils = function() { // for editor ui this.CreateDialogBlock = function(children,doIndentFirstLine) { if(doIndentFirstLine === undefined) doIndentFirstLine = true; var block = new BlockNode( BlockMode.Dialog, doIndentFirstLine ); for(var i = 0; i < children.length; i++) { block.AddChild( children[i] ); } return block; } this.ChangeSequenceType = function(oldSequence,type) { if(type === "sequence") { return new SequenceNode( oldSequence.options ); } else if(type === "cycle") { return new CycleNode( oldSequence.options ); } else if(type === "shuffle") { return new ShuffleNode( oldSequence.options ); } return oldSequence; } this.CreateSequenceBlock = function() { var option1 = new BlockNode( BlockMode.Dialog, false /*doIndentFirstLine*/ ); var option2 = new BlockNode( BlockMode.Dialog, false /*doIndentFirstLine*/ ); var sequence = new SequenceNode( [ option1, option2 ] ); var block = new BlockNode( BlockMode.Code ); block.AddChild( sequence ); return block; } this.CreateIfBlock = function() { var leftNode = new BlockNode( BlockMode.Code ); leftNode.AddChild( new FuncNode("item", [new LiteralNode("0")] ) ); var rightNode = new LiteralNode( 1 ); var condition1 = new ExpNode("==", leftNode, rightNode ); var condition2 = new ElseNode(); var result1 = new BlockNode( BlockMode.Dialog ); var result2 = new BlockNode( BlockMode.Dialog ); var ifNode = new IfNode( [ condition1, condition2 ], [ result1, result2 ] ); var block = new BlockNode( BlockMode.Code ); block.AddChild( ifNode ); return block; } } /* BUILT-IN FUNCTIONS */ // TODO: better way to encapsulate these? function sayFunc(environment,parameters,onReturn) { // console.log("SAY FUNC"); // console.log(parameters); if( parameters[0] != undefined && parameters[0] != null ) { // console.log(parameters[0]); // console.log(parameters[0].toString()); // var textStr = parameters[0].toString(); var textStr = "" + parameters[0]; // console.log(textStr); var onFinishHandler = function() { // console.log("FINISHED PRINTING ---- SCRIPT"); onReturn(null); }; // called when dialog is finished printing environment.GetDialogBuffer().AddText( textStr, onFinishHandler ); } else onReturn(null); } function linebreakFunc(environment,parameters,onReturn) { // console.log("LINEBREAK FUNC"); environment.GetDialogBuffer().AddLinebreak(); onReturn(null); } function itemFunc(environment,parameters,onReturn) { var itemId = parameters[0]; if(names.item.has(itemId)) itemId = names.item.get(itemId); // id is actually a name var itemCount = player().inventory[itemId] ? player().inventory[itemId] : 0; // TODO : ultimately the environment should include a reference to the game state // console.log("ITEM FUNC " + itemId + " " + itemCount); onReturn(itemCount); } function addOrRemoveTextEffect(environment,name) { if( environment.GetDialogBuffer().HasTextEffect(name) ) environment.GetDialogBuffer().RemoveTextEffect(name); else environment.GetDialogBuffer().AddTextEffect(name); } function rainbowFunc(environment,parameters,onReturn) { addOrRemoveTextEffect(environment,"rbw"); onReturn(null); } // TODO : should the colors use a parameter instead of special names? function color1Func(environment,parameters,onReturn) { addOrRemoveTextEffect(environment,"clr1"); onReturn(null); } function color2Func(environment,parameters,onReturn) { addOrRemoveTextEffect(environment,"clr2"); onReturn(null); } function color3Func(environment,parameters,onReturn) { addOrRemoveTextEffect(environment,"clr3"); onReturn(null); } function wavyFunc(environment,parameters,onReturn) { addOrRemoveTextEffect(environment,"wvy"); onReturn(null); } function shakyFunc(environment,parameters,onReturn) { addOrRemoveTextEffect(environment,"shk"); onReturn(null); } /* BUILT-IN OPERATORS */ function setExp(environment,left,right,onReturn) { // console.log("SET " + left.name); if(left.type != "variable") { // not a variable! return null and hope for the best D: onReturn( null ); return; } right.Eval(environment,function(rVal) { environment.SetVariable( left.name, rVal ); // console.log("VAL " + environment.GetVariable( left.name ) ); left.Eval(environment,function(lVal) { onReturn( lVal ); }); }); } function equalExp(environment,left,right,onReturn) { // console.log("EVAL EQUAL"); // console.log(left); // console.log(right); right.Eval(environment,function(rVal){ left.Eval(environment,function(lVal){ onReturn( lVal === rVal ); }); }); } function greaterExp(environment,left,right,onReturn) { right.Eval(environment,function(rVal){ left.Eval(environment,function(lVal){ onReturn( lVal > rVal ); }); }); } function lessExp(environment,left,right,onReturn) { right.Eval(environment,function(rVal){ left.Eval(environment,function(lVal){ onReturn( lVal < rVal ); }); }); } function greaterEqExp(environment,left,right,onReturn) { right.Eval(environment,function(rVal){ left.Eval(environment,function(lVal){ onReturn( lVal >= rVal ); }); }); } function lessEqExp(environment,left,right,onReturn) { right.Eval(environment,function(rVal){ left.Eval(environment,function(lVal){ onReturn( lVal <= rVal ); }); }); } function multExp(environment,left,right,onReturn) { right.Eval(environment,function(rVal){ left.Eval(environment,function(lVal){ onReturn( lVal * rVal ); }); }); } function divExp(environment,left,right,onReturn) { right.Eval(environment,function(rVal){ left.Eval(environment,function(lVal){ onReturn( lVal / rVal ); }); }); } function addExp(environment,left,right,onReturn) { right.Eval(environment,function(rVal){ left.Eval(environment,function(lVal){ onReturn( lVal + rVal ); }); }); } function subExp(environment,left,right,onReturn) { right.Eval(environment,function(rVal){ left.Eval(environment,function(lVal){ onReturn( lVal - rVal ); }); }); } /* ENVIRONMENT */ var Environment = function() { var dialogBuffer = null; this.SetDialogBuffer = function(buffer) { dialogBuffer = buffer; }; this.GetDialogBuffer = function() { return dialogBuffer; }; var functionMap = new Map(); functionMap.set("say", sayFunc); functionMap.set("br", linebreakFunc); functionMap.set("item", itemFunc); functionMap.set("rbw", rainbowFunc); functionMap.set("clr1", color1Func); functionMap.set("clr2", color2Func); functionMap.set("clr3", color3Func); functionMap.set("wvy", wavyFunc); functionMap.set("shk", shakyFunc); functionMap.set("exit", exitFunc); this.HasFunction = function(name) { return functionMap.has(name); }; this.EvalFunction = function(name,parameters,onReturn) { // console.log(functionMap); // console.log(name); functionMap.get( name )( this, parameters, onReturn ); } var variableMap = new Map(); this.HasVariable = function(name) { return variableMap.has(name); }; this.GetVariable = function(name) { return variableMap.get(name); }; this.SetVariable = function(name,value,useHandler) { // console.log("SET VARIABLE " + name + " = " + value); if(useHandler === undefined) useHandler = true; variableMap.set(name, value); if(onVariableChangeHandler != null && useHandler) onVariableChangeHandler(name); }; this.DeleteVariable = function(name,useHandler) { if(useHandler === undefined) useHandler = true; if(variableMap.has(name)) { variableMap.delete(name); if(onVariableChangeHandler != null && useHandler) onVariableChangeHandler(name); } }; var operatorMap = new Map(); operatorMap.set("=", setExp); operatorMap.set("==", equalExp); operatorMap.set(">", greaterExp); operatorMap.set("<", lessExp); operatorMap.set(">=", greaterEqExp); operatorMap.set("<=", lessEqExp); operatorMap.set("*", multExp); operatorMap.set("/", divExp); operatorMap.set("+", addExp); operatorMap.set("-", subExp); this.HasOperator = function(sym) { return operatorMap.get(sym); }; this.EvalOperator = function(sym,left,right,onReturn) { operatorMap.get( sym )( this, left, right, onReturn ); } var scriptMap = new Map(); this.HasScript = function(name) { return scriptMap.has(name); }; this.GetScript = function(name) { return scriptMap.get(name); }; this.SetScript = function(name,script) { scriptMap.set(name, script); }; var onVariableChangeHandler = null; this.SetOnVariableChangeHandler = function(onVariableChange) { onVariableChangeHandler = onVariableChange; } this.GetVariableNames = function() { return Array.from( variableMap.keys() ); } } function leadingWhitespace(depth) { var str = ""; for(var i = 0; i < depth; i++) { str += " "; // two spaces per indent } // console.log("WHITESPACE " + depth + " ::" + str + "::"); return str; } /* NODES */ var TreeRelationship = function() { this.parent = null; this.children = []; this.AddChild = function(node) { this.children.push( node ); node.parent = this; }; this.VisitAll = function(visitor) { visitor.Visit( this ); for( var i = 0; i < this.children.length; i++ ) { this.children[i].VisitAll( visitor ); } }; } var BlockMode = { Code : "code", Dialog : "dialog" }; var BlockNode = function(mode, doIndentFirstLine) { Object.assign( this, new TreeRelationship() ); // Object.assign( this, new Runnable() ); this.type = "block"; this.mode = mode; this.Eval = function(environment,onReturn) { // console.log("EVAL BLOCK " + this.children.length); if( this.onEnter != null ) this.onEnter(); var lastVal = null; var i = 0; function evalChildren(children,done) { if(i < children.length) { // console.log(">> CHILD " + i); children[i].Eval( environment, function(val) { // console.log("<< CHILD " + i); lastVal = val; i++; evalChildren(children,done); } ); } else { done(); } }; var self = this; evalChildren( this.children, function() { if( self.onExit != null ) self.onExit(); onReturn(lastVal); } ); } if(doIndentFirstLine === undefined) doIndentFirstLine = true; // This is just for serialization this.Serialize = function(depth) { if(depth === undefined) depth = 0; console.log("SERIALIZE BLOCK!!!"); console.log(depth); console.log(doIndentFirstLine); var str = ""; var lastNode = null; if (this.mode === BlockMode.Code) str += "{"; // todo: increase scope of Sym? for (var i = 0; i < this.children.length; i++) { var curNode = this.children[i]; if(curNode.type === "block" && lastNode && lastNode.type === "block" && !isBlockWithNoNewline(curNode) && !isBlockWithNoNewline(lastNode)) str += "\n"; var shouldIndentFirstLine = (i == 0 && doIndentFirstLine); var shouldIndentAfterLinebreak = (lastNode && lastNode.type === "function" && lastNode.name === "br"); if(this.mode === BlockMode.Dialog && (shouldIndentFirstLine || shouldIndentAfterLinebreak)) str += leadingWhitespace(depth); str += curNode.Serialize(depth); lastNode = curNode; } if (this.mode === BlockMode.Code) str += "}"; return str; } } function isBlockWithNoNewline(node) { return isTextEffectBlock(node) || isMultilineListBlock(node); } function isTextEffectBlock(node) { if(node.type === "block") { if(node.children.length > 0 && node.children[0].type === "function") { var func = node.children[0]; if(func.name === "clr1" || func.name === "clr2" || func.name === "clr3" || func.name === "wvy" || func.name === "shk" || func.name === "rbw") { return true; } } } return false; } function isMultilineListBlock(node) { if(node.type === "block") { if(node.children.length > 0) { var child = node.children[0]; if(child.type === "sequence" || child.type === "cycle" || child.type === "shuffle" || child.type === "if") { return true; } } } return false; } var FuncNode = function(name,arguments) { Object.assign( this, new TreeRelationship() ); // Object.assign( this, new Runnable() ); this.type = "function"; this.name = name; this.arguments = arguments; this.Eval = function(environment,onReturn) { if( this.onEnter != null ) this.onEnter(); // console.log("FUNC"); // console.log(this.arguments); var argumentValues = []; var i = 0; function evalArgs(arguments,done) { if(i < arguments.length) { // Evaluate each argument arguments[i].Eval( environment, function(val) { argumentValues.push( val ); i++; evalArgs(arguments,done); } ); } else { done(); } }; var self = this; // hack to deal with scope evalArgs( this.arguments, function() { // Then evaluate the function // console.log("ARGS"); // console.log(argumentValues); if( self.onExit != null ) self.onExit(); environment.EvalFunction( self.name, argumentValues, onReturn ); } ); } this.Serialize = function(depth) { var isDialogBlock = this.parent.mode && this.parent.mode === BlockMode.Dialog; if(isDialogBlock && this.name === "say") { // TODO this could cause problems with "real" say functions return this.arguments[0].value; // first argument should be the text of the {say} func } else if(isDialogBlock && this.name === "br") { return "\n"; } else { var str = ""; str += this.name; for(var i = 0; i < this.arguments.length; i++) { str += " "; str += this.arguments[i].Serialize(depth); } return str; } } } var LiteralNode = function(value) { Object.assign( this, new TreeRelationship() ); // Object.assign( this, new Runnable() ); this.type = "literal"; this.value = value; this.Eval = function(environment,onReturn) { onReturn(this.value); } this.Serialize = function(depth) { var str = ""; if(this.value === null) return str; if(typeof this.value === "string") str += '"'; str += this.value; if(typeof this.value === "string") str += '"'; return str; } } var VarNode = function(name) { Object.assign( this, new TreeRelationship() ); // Object.assign( this, new Runnable() ); this.type = "variable"; this.name = name; this.Eval = function(environment,onReturn) { // console.log("EVAL " + this.name + " " + environment.HasVariable(this.name) + " " + environment.GetVariable(this.name)); if( environment.HasVariable(this.name) ) onReturn( environment.GetVariable( this.name ) ); else onReturn(null); // not a valid variable -- return null and hope that's ok } // TODO: might want to store nodes in the variableMap instead of values??? this.Serialize = function(depth) { var str = "" + this.name; return str; } } var ExpNode = function(operator, left, right) { Object.assign( this, new TreeRelationship() ); this.type = "operator"; this.operator = operator; this.left = left; this.right = right; this.Eval = function(environment,onReturn) { // console.log("EVAL " + this.operator); var self = this; // hack to deal with scope environment.EvalOperator( this.operator, this.left, this.right, function(val){ // console.log("EVAL EXP " + self.operator + " " + val); onReturn(val); } ); // NOTE : sadly this pushes a lot of complexity down onto the actual operator methods } this.Serialize = function(depth) { var isNegativeNumber = this.operator === "-" && this.left.type === "literal" && this.left.value === null; if(!isNegativeNumber) { var str = ""; str += this.left.Serialize(depth); str += " " + this.operator + " "; str += this.right.Serialize(depth); return str; } else { return this.operator + this.right.Serialize(depth); // hacky but seems to work } } this.VisitAll = function(visitor) { visitor.Visit( this ); if(this.left != null) this.left.VisitAll( visitor ); if(this.right != null) this.right.VisitAll( visitor ); }; } var SequenceBase = function() { this.Serialize = function(depth) { var str = ""; str += this.type + "\n"; for (var i = 0; i < this.options.length; i++) { // console.log("SERIALIZE SEQUENCE "); // console.log(depth); str += leadingWhitespace(depth + 1) + Sym.List + " " + this.options[i].Serialize(depth + 2) + "\n"; } str += leadingWhitespace(depth); return str; } this.VisitAll = function(visitor) { visitor.Visit( this ); for( var i = 0; i < this.options.length; i++ ) { this.options[i].VisitAll( visitor ); } }; } var SequenceNode = function(options) { Object.assign( this, new TreeRelationship() ); Object.assign( this, new SequenceBase() ); this.type = "sequence"; this.options = options; var index = 0; this.Eval = function(environment,onReturn) { // console.log("SEQUENCE " + index); this.options[index].Eval( environment, onReturn ); var next = index + 1; if(next < this.options.length) index = next; } } var CycleNode = function(options) { Object.assign( this, new TreeRelationship() ); Object.assign( this, new SequenceBase() ); this.type = "cycle"; this.options = options; var index = 0; this.Eval = function(environment,onReturn) { // console.log("CYCLE " + index); this.options[index].Eval( environment, onReturn ); var next = index + 1; if(next < this.options.length) index = next; else index = 0; } } var ShuffleNode = function(options) { Object.assign( this, new TreeRelationship() ); Object.assign( this, new SequenceBase() ); this.type = "shuffle"; this.options = options; var optionsShuffled = []; function shuffle(options) { optionsShuffled = []; var optionsUnshuffled = options.slice(); while(optionsUnshuffled.length > 0) { var i = Math.floor( Math.random() * optionsUnshuffled.length ); optionsShuffled.push( optionsUnshuffled.splice(i,1)[0] ); } } shuffle(this.options); var index = 0; this.Eval = function(environment,onReturn) { // OLD RANDOM VERSION // var index = Math.floor(Math.random() * this.options.length); // this.options[index].Eval( environment, onReturn ); optionsShuffled[index].Eval( environment, onReturn ); index++; if (index >= this.options.length) { shuffle(this.options); index = 0; } } } var IfNode = function(conditions, results, isSingleLine) { Object.assign( this, new TreeRelationship() ); this.type = "if"; this.conditions = conditions; this.results = results; this.Eval = function(environment,onReturn) { // console.log("EVAL IF"); var i = 0; var self = this; function TestCondition() { // console.log("EVAL " + i); self.conditions[i].Eval(environment, function(val) { // console.log(val); if(val == true) { self.results[i].Eval(environment, onReturn); } else if(i+1 < self.conditions.length) { i++; TestCondition(); // test next condition } else { onReturn(null); // out of conditions and none were true } }); }; TestCondition(); } if(isSingleLine === undefined) isSingleLine = false; // This is just for serialization this.Serialize = function(depth) { var str = ""; if(isSingleLine) { str += this.conditions[0].Serialize() + " ? " + this.results[0].Serialize(); if(this.conditions.length > 1 && this.conditions[1].type === "else") str += " : " + this.results[1].Serialize(); } else { str += "\n"; for (var i = 0; i < this.conditions.length; i++) { str += leadingWhitespace(depth + 1) + Sym.List + " " + this.conditions[i].Serialize(depth) + " ?\n"; str += this.results[i].Serialize(depth + 2) + "\n"; } str += leadingWhitespace(depth); } return str; } this.IsSingleLine = function() { return isSingleLine; } this.VisitAll = function(visitor) { visitor.Visit( this ); for( var i = 0; i < this.conditions.length; i++ ) { this.conditions[i].VisitAll( visitor ); } for( var i = 0; i < this.results.length; i++ ) { this.results[i].VisitAll( visitor ); } }; } var ElseNode = function() { Object.assign( this, new TreeRelationship() ); this.type = "else"; this.Eval = function(environment,onReturn) { onReturn(true); } this.Serialize = function() { return "else"; } } var Sym = { // DialogOpen : "/\"", // DialogClose : "\"/", DialogOpen : '"""', DialogClose : '"""', CodeOpen : "{", CodeClose : "}", Linebreak : "\n", // just call it "break" ? Separator : ":", List : "-", String : '"' }; var Parser = function(env) { var environment = env; this.Parse = function(scriptStr) { // console.log("NEW PARSE!!!!!!"); // TODO : make this work for single-line, no dialog block scripts var state = new ParserState( new BlockNode(BlockMode.Dialog), scriptStr ); if( state.MatchAhead(Sym.DialogOpen) ) { // multi-line dialog block var dialogStr = state.ConsumeBlock( Sym.DialogOpen, Sym.DialogClose ); state = new ParserState( new BlockNode(BlockMode.Dialog), dialogStr ); state = ParseDialog( state ); } // else if( state.MatchAhead(Sym.CodeOpen) ) { // NOTE: This causes problems when you lead with a code block // // code-block: should this ever happen? // state = ParseCodeBlock( state ); // } else { // single-line dialog block state = ParseDialog( state ); } // console.log( state.rootNode ); return state.rootNode; }; this.ReadDialogScript = function(lines, i) { var scriptStr = ""; if (lines[i] === Sym.DialogOpen) { scriptStr += lines[i] + "\n"; i++; while(lines[i] != Sym.DialogClose) { scriptStr += lines[i] + "\n"; i++; } scriptStr += lines[i]; i++; } else { scriptStr += lines[i]; } return { script:scriptStr, index:i }; } var ParserState = function( rootNode, str ) { this.rootNode = rootNode; this.curNode = this.rootNode; var sourceStr = str; var i = 0; this.Index = function() { return i; }; this.Count = function() { return sourceStr.length; }; this.Done = function() { return i >= sourceStr.length; }; this.Char = function() { return sourceStr[i]; }; this.Step = function(n) { if(n===undefined) n=1; i += n; }; this.MatchAhead = function(str) { // console.log(str); str = "" + str; // hack to turn single chars into strings // console.log(str); // console.log(str.length); for(var j = 0; j < str.length; j++) { if( i + j >= sourceStr.length ) return false; else if( str[j] != sourceStr[i+j] ) return false; } return true; } this.Peak = function(end) { var str = ""; var j = i; // console.log(j); while(j < sourceStr.length && end.indexOf( sourceStr[j] ) == -1 ) { str += sourceStr[j]; j++; } // console.log("PEAK ::" + str + "::"); return str; } this.ConsumeBlock = function( open, close ) { var startIndex = i; var matchCount = 0; if( this.MatchAhead( open ) ) { matchCount++; this.Step( open.length ); } while( matchCount > 0 && !this.Done() ) { if( this.MatchAhead( close ) ) { matchCount--; this.Step( close.length ); } else if( this.MatchAhead( open ) ) { matchCount++; this.Step( open.length ); } else { this.Step(); } } // console.log("!!! " + startIndex + " " + i); return sourceStr.slice( startIndex + open.length, i - close.length ); } this.Print = function() {console.log(sourceStr);}; }; function ParseDialog(state) { // console.log("PARSE DIALOG"); state.Print(); // for linebreak logic: add linebreaks after lines with dialog or empty lines (if it's not the very first line) var hasBlock = false; var hasDialog = false; var isFirstLine = true; // console.log("---- PARSE DIALOG ----"); var text = ""; var addTextNode = function() { // console.log("TEXT " + text.length); if (text.length > 0) { // console.log("TEXT " + text); // console.log("text!!"); // console.log([text]); state.curNode.AddChild( new FuncNode( "say", [new LiteralNode(text)] ) ); text = ""; hasDialog = true; } } while ( !state.Done() ) { if( state.MatchAhead(Sym.CodeOpen) ) { addTextNode(); state = ParseCodeBlock( state ); // console.log("CODE"); var len = state.curNode.children.length; if(len > 0 && state.curNode.children[len-1].type === "block") { var block = state.curNode.children[len-1]; if(isMultilineListBlock(block)) hasDialog = true; // hack to get correct newline behavior for multiline blocks } hasBlock = true; } // NOTE: nested dialog blocks disabled for now // else if( state.MatchAhead(Sym.DialogOpen) ) { // addTextNode(); // state = ParseDialogBlock( state ); // These can be nested (should they though???) // hasBlock = true; // } else { if ( state.MatchAhead(Sym.Linebreak) ) { addTextNode(); /* NOTES: linebreaks SHOULD happen on - lines with text (including the first or last line) - empty lines (that are NOT the first or last line) linebreaks should NOT happen on - lines with only CODE blocks - empty FIRST or LAST lines also, apparently: - NEVER line break on the last line */ var isLastLine = (state.Index() + 1) == state.Count(); // console.log("block " + hasBlock); // console.log("dialog " + hasDialog); var isEmptyLine = !hasBlock && !hasDialog; // console.log("empty " + isEmptyLine); var isValidEmptyLine = isEmptyLine && !(isFirstLine || isLastLine); // console.log("valid empty " + isValidEmptyLine); var shouldAddLinebreak = (hasDialog || isValidEmptyLine) && !isLastLine; // last clause is a hack (but it works - why?) // console.log("LINEBREAK? " + shouldAddLinebreak); if( shouldAddLinebreak ) { // console.log("NEWLINE"); // console.log("empty? " + isEmptyLine); // console.log("dialog? " + hasDialog); state.curNode.AddChild( new FuncNode( "br", [] ) ); // use function or character? } // linebreak logic isFirstLine = false; hasBlock = false; hasDialog = false; text = ""; } else { text += state.Char(); } state.Step(); } } addTextNode(); // console.log("---- PARSE DIALOG ----"); // console.log(state); return state; } function ParseDialogBlock(state) { var dialogStr = state.ConsumeBlock( Sym.DialogOpen, Sym.DialogClose ); var dialogState = new ParserState( new BlockNode(BlockMode.Dialog), dialogStr ); dialogState = ParseDialog( dialogState ); state.curNode.AddChild( dialogState.rootNode ); return state; } function ParseIf(state) { var conditionStrings = []; var resultStrings = []; var curIndex = -1; var isNewline = true; var isConditionDone = false; var codeBlockCount = 0; while( !state.Done() ) { if(state.Char() === Sym.CodeOpen) codeBlockCount++; else if(state.Char() === Sym.CodeClose) codeBlockCount--; var isWhitespace = (state.Char() === " " || state.Char() === "\t"); var isSkippableWhitespace = isNewline && isWhitespace; var isNewListItem = isNewline && (codeBlockCount <= 0) && (state.Char() === Sym.List); if(isNewListItem) { curIndex++; isConditionDone = false; conditionStrings[curIndex] = ""; resultStrings[curIndex] = ""; } else if(curIndex > -1) { if(!isConditionDone) { if(state.Char() === "?" || state.Char() === "\n") { // TODO: use Sym // end of condition isConditionDone = true; } else { // read in condition conditionStrings[curIndex] += state.Char(); } } else { // read in result if(!isSkippableWhitespace) resultStrings[curIndex] += state.Char(); } } isNewline = (state.Char() === Sym.Linebreak) || isSkippableWhitespace || isNewListItem; state.Step(); } // console.log("PARSE IF:"); // console.log(conditionStrings); // console.log(resultStrings); var conditions = []; for(var i = 0; i < conditionStrings.length; i++) { var str = conditionStrings[i].trim(); if(str === "else") { conditions.push( new ElseNode() ); } else { var exp = CreateExpression( str ); conditions.push( exp ); } } var results = []; for(var i = 0; i < resultStrings.length; i++) { var str = resultStrings[i]; var dialogBlockState = new ParserState( new BlockNode(BlockMode.Dialog), str ); dialogBlockState = ParseDialog( dialogBlockState ); var dialogBlock = dialogBlockState.rootNode; results.push( dialogBlock ); } state.curNode.AddChild( new IfNode( conditions, results ) ); return state; } function IsSequence(str) { // console.log("IsSequence? " + str); return str === "sequence" || str === "cycle" || str === "shuffle"; } // TODO: don't forget about eating whitespace function ParseSequence(state, sequenceType) { // console.log("SEQUENCE " + sequenceType); state.Print(); var isNewline = false; var itemStrings = []; var curItemIndex = -1; // -1 indicates not reading an item yet var codeBlockCount = 0; while( !state.Done() ) { if(state.Char() === Sym.CodeOpen) codeBlockCount++; else if(state.Char() === Sym.CodeClose) codeBlockCount--; var isWhitespace = (state.Char() === " " || state.Char() === "\t"); var isSkippableWhitespace = isNewline && isWhitespace; var isNewListItem = isNewline && (codeBlockCount <= 0) && (state.Char() === Sym.List); if(isNewListItem) { // console.log("found next list item"); curItemIndex++; itemStrings[curItemIndex] = ""; } else if(curItemIndex > -1) { if(!isSkippableWhitespace) itemStrings[curItemIndex] += state.Char(); } isNewline = (state.Char() === Sym.Linebreak) || isSkippableWhitespace || isNewListItem; // console.log(state.Char()); state.Step(); } // console.log(itemStrings); // console.log("SEQUENCE DONE"); var options = []; for(var i = 0; i < itemStrings.length; i++) { var str = itemStrings[i]; var dialogBlockState = new ParserState( new BlockNode( BlockMode.Dialog, false /* doIndentFirstLine */ ), str ); dialogBlockState = ParseDialog( dialogBlockState ); var dialogBlock = dialogBlockState.rootNode; options.push( dialogBlock ); } // console.log(options); if(sequenceType === "sequence") state.curNode.AddChild( new SequenceNode( options ) ); else if(sequenceType === "cycle") state.curNode.AddChild( new CycleNode( options ) ); else if(sequenceType === "shuffle") state.curNode.AddChild( new ShuffleNode( options ) ); return state; } function ParseFunction(state, funcName) { var args = []; var curSymbol = ""; function OnSymbolEnd() { curSymbol = curSymbol.trim(); console.log("PARAMTER " + curSymbol); args.push( StringToValue(curSymbol) ); console.log(args); curSymbol = ""; } while( !( state.Char() === "\n" || state.Done() ) ) { if( state.MatchAhead(Sym.CodeOpen) ) { var codeBlockState = new ParserState( new BlockNode(BlockMode.Code), state.ConsumeBlock( Sym.CodeOpen, Sym.CodeClose ) ); codeBlockState = ParseCode( codeBlockState ); var codeBlock = codeBlockState.rootNode; args.push( codeBlock ); curSymbol = ""; } else if( state.MatchAhead(Sym.String) ) { /* STRING LITERAL */ var str = state.ConsumeBlock(Sym.String, Sym.String); // console.log("STRING " + str); args.push( new LiteralNode(str) ); curSymbol = ""; } else if(state.Char() === " " && curSymbol.length > 0) { OnSymbolEnd(); } else { curSymbol += state.Char(); } state.Step(); } if(curSymbol.length > 0) { OnSymbolEnd(); } state.curNode.AddChild( new FuncNode( funcName, args ) ); return state; } function IsValidVariableName(str) { var reg = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/; var isValid = reg.test(str); console.log("VALID variable??? " + isValid); return isValid; } function StringToValue(valStr) { if(valStr[0] === Sym.CodeOpen) { // CODE BLOCK!!! var codeStr = (new ParserState( null, valStr )).ConsumeBlock(Sym.CodeOpen, Sym.CodeClose); //hacky var codeBlockState = new ParserState( new BlockNode( BlockMode.Code ), codeStr ); codeBlockState = ParseCode( codeBlockState ); return codeBlockState.rootNode; } else if(valStr[0] === Sym.String) { // STRING!! console.log("STRING"); var str = ""; var i = 1; while (i < valStr.length && valStr[i] != Sym.String) { str += valStr[i]; i++; } console.log(str); return new LiteralNode( str ); } else if(valStr === "true") { // BOOL return new LiteralNode( true ); } else if(valStr === "false") { // BOOL return new LiteralNode( false ); } else if( !isNaN(parseFloat(valStr)) ) { // NUMBER!! // console.log("NUMBER!!! " + valStr); return new LiteralNode( parseFloat(valStr) ); } else if(IsValidVariableName(valStr)) { // VARIABLE!! // console.log("VARIABLE"); return new VarNode(valStr); // TODO : check for valid potential variables } else { // uh oh return new LiteralNode(null); } } var setSymbol = "="; var ifSymbol = "?"; var elseSymbol = ":"; // var operatorSymbols = ["==", ">", "<", ">=", "<=", "*", "/", "+", "-"]; var operatorSymbols = ["-", "+", "/", "*", "<=", ">=", "<", ">", "=="]; // operators need to be in reverse order function CreateExpression(expStr) { expStr = expStr.trim(); function IsInsideString(index) { var inString = false; for(var i = 0; i < expStr.length; i++) { if(expStr[i] === Sym.String) inString = !inString; if(index === i) return inString; } return false; } function IsInsideCode(index) { var count = 0; for(var i = 0; i < expStr.length; i++) { if(expStr[i] === Sym.CodeOpen) count++; else if(expStr[i] === Sym.CodeClose) count--; if(index === i) return count > 0; } return false; } var operator = null; // set is special because other operator can look like it, and it has to go first in the order of operations var setIndex = expStr.indexOf(setSymbol); if( setIndex > -1 && !IsInsideString(setIndex) && !IsInsideCode(setIndex) ) { // it might be a set operator if( expStr[setIndex+1] != "=" && expStr[setIndex-1] != ">" && expStr[setIndex-1] != "<" ) { // ok it actually IS a set operator and not ==, >=, or <= operator = setSymbol; var variableName = expStr.substring(0,setIndex).trim(); // TODO : valid variable name testing var left = IsValidVariableName(variableName) ? new VarNode( variableName ) : new LiteralNode(null); var right = CreateExpression( expStr.substring(setIndex+setSymbol.length) ); var exp = new ExpNode( operator, left, right ); return exp; } } // special if "expression" for single-line if statements var ifIndex = expStr.indexOf(ifSymbol); if( ifIndex > -1 && !IsInsideString(ifIndex) && !IsInsideCode(ifIndex) ) { operator = ifSymbol; var conditionStr = expStr.substring(0,ifIndex).trim(); var conditions = [ CreateExpression(conditionStr) ]; var resultStr = expStr.substring(ifIndex+ifSymbol.length); var results = []; function AddResult(str) { var dialogBlockState = new ParserState( new BlockNode(BlockMode.Dialog), str ); dialogBlockState = ParseDialog( dialogBlockState ); var dialogBlock = dialogBlockState.rootNode; results.push( dialogBlock ); } var elseIndex = resultStr.indexOf(elseSymbol); // does this need to test for strings? if(elseIndex > -1) { conditions.push( new ElseNode() ); var elseStr = resultStr.substring(elseIndex+elseSymbol.length); var resultStr = resultStr.substring(0,elseIndex); AddResult( resultStr.trim() ); AddResult( elseStr.trim() ); } else { AddResult( resultStr.trim() ); } return new IfNode( conditions, results, true /*isSingleLine*/ ); } for( var i = 0; (operator == null) && (i < operatorSymbols.length); i++ ) { var opSym = operatorSymbols[i]; var opIndex = expStr.indexOf( opSym ); if( opIndex > -1 && !IsInsideString(opIndex) && !IsInsideCode(opIndex) ) { operator = opSym; var left = CreateExpression( expStr.substring(0,opIndex) ); var right = CreateExpression( expStr.substring(opIndex+opSym.length) ); var exp = new ExpNode( operator, left, right ); return exp; } } if( operator == null ) { return StringToValue(expStr); } } this.CreateExpression = CreateExpression; function ParseExpression(state) { var line = state.Peak( [Sym.Linebreak] ); // console.log("EXPRESSION " + line); var exp = CreateExpression( line ); // console.log(exp); state.curNode.AddChild( exp ); state.Step( line.length ); return state; } function ParseCode(state) { // TODO : how do I do this parsing??? one expression per block? or per line? while ( !state.Done() ) { if( state.Char() === " " || state.Char() === "\t" || state.Char() === "\n" ) { // TODO: symbols? IsWhitespace func? state.Step(); // consume whitespace } else if( state.MatchAhead(Sym.CodeOpen) ) { state = ParseCodeBlock( state ); } // NOTE: nested dialog blocks disabled for now // else if( state.MatchAhead(Sym.DialogOpen) ) { // state = ParseDialogBlock( state ); // These can be nested (should they though???) // } else if( state.Char() === Sym.List && (state.Peak([]).indexOf("?") > -1) ) { // TODO : symbols? matchahead? // console.log("PEAK IF " + state.Peak( ["?"] )); state = ParseIf( state ); } else if( environment.HasFunction( state.Peak( [" "] ) ) ) { // TODO --- what about newlines??? var funcName = state.Peak( [" "] ); state.Step( funcName.length ); state = ParseFunction( state, funcName ); } else if( IsSequence( state.Peak( [" ", Sym.Linebreak] ) ) ) { var sequenceType = state.Peak( [" ", Sym.Linebreak] ); state.Step( sequenceType.length ); state = ParseSequence( state, sequenceType ); } else { state = ParseExpression( state ); } } return state; } function ParseCodeBlock(state) { var codeStr = state.ConsumeBlock( Sym.CodeOpen, Sym.CodeClose ); // console.log("PARSE CODE"); // console.log(codeStr); var codeState = new ParserState( new BlockNode(BlockMode.Code), codeStr ); codeState = ParseCode( codeState ); state.curNode.AddChild( codeState.rootNode ); return state; } } } // Script() </script> <script> function Dialog() { this.CreateRenderer = function() { return new DialogRenderer(); }; this.CreateBuffer = function() { return new DialogBuffer(); }; var DialogRenderer = function() { var textboxInfo = { img : null, width : 104, height : 8+4+2+5, //8 for text, 4 for top-bottom padding, 2 for line padding, 5 for arrow top : 12, left : 12, bottom : 12, //for drawing it from the bottom }; var font = new Font(); var context = null; this.AttachContext = function(c) { context = c; }; this.ClearTextbox = function() { if(context == null) return; //create new image none exists if(textboxInfo.img == null) textboxInfo.img = context.createImageData(textboxInfo.width*scale, textboxInfo.height*scale); // fill text box with black for (var i=0;i<textboxInfo.img.data.length;i+=4) { textboxInfo.img.data[i+0]=0; textboxInfo.img.data[i+1]=0; textboxInfo.img.data[i+2]=0; textboxInfo.img.data[i+3]=255; } }; var isCentered = false; this.SetCentered = function(centered) { isCentered = centered; }; this.DrawTextbox = function() { if(context == null) return; if (isCentered) { context.putImageData(textboxInfo.img, textboxInfo.left*scale, ((height/2)-(textboxInfo.height/2))*scale); } else if (player().y < mapsize/2) { //bottom context.putImageData(textboxInfo.img, textboxInfo.left*scale, (height-textboxInfo.bottom-textboxInfo.height)*scale); } else { //top context.putImageData(textboxInfo.img, textboxInfo.left*scale, textboxInfo.top*scale); } }; var arrowdata = [ 1,1,1,1,1, 0,1,1,1,0, 0,0,1,0,0 ]; this.DrawNextArrow = function() { // console.log("draw arrow!"); var top = (textboxInfo.height-5) * scale; var left = (textboxInfo.width-(5+4)) * scale; for (var y = 0; y < 3; y++) { for (var x = 0; x < 5; x++) { var i = (y * 5) + x; if (arrowdata[i] == 1) { //scaling nonsense for (var sy = 0; sy < scale; sy++) { for (var sx = 0; sx < scale; sx++) { var pxl = 4 * ( ((top+(y*scale)+sy) * (textboxInfo.width*scale)) + (left+(x*scale)+sx) ); textboxInfo.img.data[pxl+0] = 255; textboxInfo.img.data[pxl+1] = 255; textboxInfo.img.data[pxl+2] = 255; textboxInfo.img.data[pxl+3] = 255; } } } } } }; var text_scale = 2; //using a different scaling factor for text feels like cheating... but it looks better this.DrawChar = function(char, row, col) { char.offset = {x:0, y:0}; char.SetPosition(row,col); char.ApplyEffects(effectTime); var charData = font.getChar( char.char ); var top = (4 * scale) + (row * 2 * scale) + (row * 8 * text_scale) + Math.floor( char.offset.y ); var left = (4 * scale) + (col * 6 * text_scale) + Math.floor( char.offset.x ); for (var y = 0; y < 8; y++) { for (var x = 0; x < 6; x++) { var i = (y * 6) + x; if ( charData[i] == 1 ) { //scaling nonsense for (var sy = 0; sy < text_scale; sy++) { for (var sx = 0; sx < text_scale; sx++) { var pxl = 4 * ( ((top+(y*text_scale)+sy) * (textboxInfo.width*scale)) + (left+(x*text_scale)+sx) ); textboxInfo.img.data[pxl+0] = char.color.r; textboxInfo.img.data[pxl+1] = char.color.g; textboxInfo.img.data[pxl+2] = char.color.b; textboxInfo.img.data[pxl+3] = char.color.a; } } } } } // call printHandler for character char.OnPrint(); }; var effectTime = 0; // TODO this variable should live somewhere better this.Draw = function(buffer,dt) { // TODO move out of the buffer?? (into say a dialog box renderer) effectTime += dt; this.ClearTextbox(); buffer.ForEachActiveChar( this.DrawChar ); if( buffer.CanContinue() ) this.DrawNextArrow(); this.DrawTextbox(); if( buffer.DidPageFinishThisFrame() && onPageFinish != null ) onPageFinish(); }; /* this is a hook for GIF rendering */ var onPageFinish = null; this.SetPageFinishHandler = function(handler) { onPageFinish = handler; }; this.Reset = function() { effectTime = 0; // TODO - anything else? } } var DialogBuffer = function() { var buffer = [[[]]]; // holds dialog in an array buffer var pageIndex = 0; var rowIndex = 0; var charIndex = 0; var nextCharTimer = 0; var nextCharMaxTime = 50; // in milliseconds var isDialogReadyToContinue = false; var activeTextEffects = []; this.CurPage = function() { return buffer[ pageIndex ]; }; this.CurRow = function() { return this.CurPage()[ rowIndex ]; }; this.CurChar = function() { return this.CurRow()[ charIndex ]; }; this.CurPageCount = function() { return buffer.length; }; this.CurRowCount = function() { return this.CurPage().length; }; this.CurCharCount = function() { return this.CurRow().length; }; this.ForEachActiveChar = function(handler) { // Iterates over visible characters on the active page var rowCount = rowIndex + 1; for (var i = 0; i < rowCount; i++) { var row = this.CurPage()[i]; var charCount = (i == rowIndex) ? charIndex+1 : row.length; // console.log(charCount); for(var j = 0; j < charCount; j++) { var char = row[j]; if(char) handler( char, i /*rowIndex*/, j /*colIndex*/ ); } } } this.Reset = function() { buffer = [[[]]]; pageIndex = 0; rowIndex = 0; charIndex = 0; isDialogReadyToContinue = false; activeTextEffects = []; isActive = false; }; this.DoNextChar = function() { // console.log("DO NEXT CHAR"); nextCharTimer = 0; //reset timer //time to update characters if (charIndex + 1 < this.CurCharCount()) { //add char to current row charIndex++; } else if (rowIndex + 1 < this.CurRowCount()) { //start next row rowIndex++; charIndex = 0; } else { //the page is full! isDialogReadyToContinue = true; didPageFinishThisFrame = true; // console.log("WAITING FOR INPUT"); } // console.log(this.CurChar()); if(this.CurChar() != null) this.CurChar().OnPrint(); // make sure we hit the callback before we run out of text }; this.Update = function(dt) { didPageFinishThisFrame = false; didFlipPageThisFrame = false; // this.Draw(dt); // TODO move into a renderer object if (isDialogReadyToContinue) { return; //waiting for dialog to be advanced by player } nextCharTimer += dt; //tick timer if (nextCharTimer > nextCharMaxTime) { this.DoNextChar(); } }; this.Skip = function() { console.log("SKIPPP"); didPageFinishThisFrame = false; didFlipPageThisFrame = false; // add new characters until you get to the end of the current line of dialog while (rowIndex < this.CurRowCount()) { this.DoNextChar(); if(isDialogReadyToContinue) { //make sure to push the rowIndex past the end to break out of the loop rowIndex++; charIndex = 0; } } rowIndex = this.CurRowCount()-1; charIndex = this.CurCharCount()-1; }; this.FlipPage = function() { didFlipPageThisFrame = true; isDialogReadyToContinue = false; pageIndex++; rowIndex = 0; charIndex = 0; } this.EndDialog = function() { console.log("END!!!!"); isActive = false; // no more text to show... this should be a sign to stop rendering dialog } this.Continue = function() { console.log("CONTINUE"); if (pageIndex + 1 < this.CurPageCount()) { //start next page this.FlipPage(); return true; /* hasMoreDialog */ } else { //end dialog mode this.EndDialog(); return false; /* hasMoreDialog */ } }; var isActive = false; this.IsActive = function() { return isActive; }; this.CanContinue = function() { return isDialogReadyToContinue; }; function DialogChar(char,effectList) { this.char = char; this.effectList = effectList.slice(); // clone effect list (since it can change between chars) this.color = { r:255, g:255, b:255, a:255 }; this.offset = { x:0, y:0 }; // in pixels (screen pixels?) this.row = 0; this.col = 0; this.SetPosition = function(row,col) { this.row = row; this.col = col; }; this.ApplyEffects = function(time) { for(var i = 0; i < this.effectList.length; i++) { var effectName = this.effectList[i]; TextEffects[ effectName ].DoEffect( this, time ); } } var printHandler = null; // optional function to be called once on printing character this.SetPrintHandler = function(handler) { printHandler = handler; } this.OnPrint = function() { if (printHandler != null) { console.log("PRINT HANDLER ---- DIALOG BUFFER"); printHandler(); printHandler = null; // only call handler once (hacky) } } }; function AddWordToCharArray(charArray,word,effectList) { for(var i = 0; i < word.length; i++) { charArray.push( new DialogChar( word[i], effectList ) ); } return charArray; } var charsPerRow = 32; this.AddText = function(textStr,onFinishHandler) { console.log("ADD TEXT " + textStr); //process dialog so it's easier to display var words = textStr.split(" "); // var curPageIndex = this.CurPageCount() - 1; // var curRowIndex = this.CurRowCount() - 1; // var curRowArr = this.CurRow(); var curPageIndex = buffer.length - 1; var curRowIndex = buffer[curPageIndex].length - 1; var curRowArr = buffer[curPageIndex][curRowIndex]; for (var i = 0; i < words.length; i++) { var word = words[i]; var wordLength = word.length + ((i == 0) ? 0 : 1); if (curRowArr.length + wordLength <= charsPerRow || curRowArr.length <= 0) { //stay on same row var wordWithPrecedingSpace = ((i == 0) ? "" : " ") + word; curRowArr = AddWordToCharArray( curRowArr, wordWithPrecedingSpace, activeTextEffects ); } else if (curRowIndex == 0) { //start next row buffer[ curPageIndex ][ curRowIndex ] = curRowArr; buffer[ curPageIndex ].push( [] ); curRowIndex++; curRowArr = buffer[ curPageIndex ][ curRowIndex ]; curRowArr = AddWordToCharArray( curRowArr, word, activeTextEffects ); } else { //start next page buffer[ curPageIndex ][ curRowIndex ] = curRowArr; buffer.push( [] ); curPageIndex++; buffer[ curPageIndex ].push( [] ); curRowIndex = 0; curRowArr = buffer[ curPageIndex ][ curRowIndex ]; curRowArr = AddWordToCharArray( curRowArr, word, activeTextEffects ); } } //destroy any empty stuff var lastPage = buffer[ buffer.length-1 ]; var lastRow = lastPage[ lastPage.length-1 ]; if( lastRow.length == 0 ) lastPage.splice( lastPage.length-1, 1 ); if( lastPage.length == 0 ) buffer.splice( buffer.length-1, 1 ); //finish up lastPage = buffer[ buffer.length-1 ]; lastRow = lastPage[ lastPage.length-1 ]; if( lastRow.length > 0 ) { var lastChar = lastRow[ lastRow.length-1 ]; lastChar.SetPrintHandler( onFinishHandler ); } console.log(buffer); isActive = true; }; this.AddLinebreak = function() { var lastPage = buffer[ buffer.length-1 ]; if( lastPage.length <= 1 ) { console.log("LINEBREAK - NEW ROW "); // add new row lastPage.push( [] ); } else { // add new page buffer.push( [[]] ); } console.log(buffer); isActive = true; } /* new text effects */ this.HasTextEffect = function(name) { return activeTextEffects.indexOf( name ) > -1; } this.AddTextEffect = function(name) { activeTextEffects.push( name ); } this.RemoveTextEffect = function(name) { activeTextEffects.splice( activeTextEffects.indexOf( name ), 1 ); } /* this is a hook for GIF rendering */ var didPageFinishThisFrame = false; this.DidPageFinishThisFrame = function(){ return didPageFinishThisFrame; }; var didFlipPageThisFrame = false; this.DidFlipPageThisFrame = function(){ return didFlipPageThisFrame; }; }; /* NEW TEXT EFFECTS */ var TextEffects = new Map(); var RainbowEffect = function() { // TODO - should it be an object or just a method? this.DoEffect = function(char,time) { var h = Math.abs( Math.sin( (time / 600) - (char.col / 8) ) ); var rgb = hslToRgb( h, 1, 0.5 ); char.color.r = rgb[0]; char.color.g = rgb[1]; char.color.b = rgb[2]; char.color.a = 255; } }; TextEffects["rbw"] = new RainbowEffect(); var ColorEffect = function(index) { this.DoEffect = function(char) { var pal = getPal( curPal() ); var color = pal[ parseInt( index ) ]; console.log(color); char.color.r = color[0]; char.color.g = color[1]; char.color.b = color[2]; char.color.a = 255; } }; TextEffects["clr1"] = new ColorEffect(0); TextEffects["clr2"] = new ColorEffect(1); // TODO : should I use parameters instead of special names? TextEffects["clr3"] = new ColorEffect(2); var WavyEffect = function() { this.DoEffect = function(char,time) { char.offset.y += Math.sin( (time / 250) - (char.col / 2) ) * 4; } }; TextEffects["wvy"] = new WavyEffect(); var ShakyEffect = function() { function disturb(func,time,offset,mult1,mult2) { return func( (time * mult1) - (offset * mult2) ); } this.DoEffect = function(char,time) { char.offset.y += 3 * disturb(Math.sin,time,char.col,0.1,0.5) * disturb(Math.cos,time,char.col,0.3,0.2) * disturb(Math.sin,time,char.row,2.0,1.0); char.offset.x += 3 * disturb(Math.cos,time,char.row,0.1,1.0) * disturb(Math.sin,time,char.col,3.0,0.7) * disturb(Math.cos,time,char.col,0.2,0.3); } }; TextEffects["shk"] = new ShakyEffect(); } // Dialog() </script> <script> var xhr; var canvas; var context; var ctx; var title = ""; var room = {}; var tile = {}; var sprite = {}; var item = {}; var dialog = {}; var palette = { "0" : [[0,0,0],[255,0,0],[255,255,255]] //start off with a default palette (can be overriden) }; var ending = {}; var variable = {}; // these are starting variable values -- they don't update (or I don't think they will) var playerId = "A"; var names = { room : new Map(), tile : new Map(), // Note: Not currently enabled in the UI sprite : new Map(), item : new Map(), /*dialog : new Map()*/ // TODO /*ending : new Map()*/ // TODO }; function updateNamesFromCurData() { names.room = new Map(); for(id in room) { if(room[id].name != undefined && room[id].name != null) names.room.set( room[id].name, id ); } names.tile = new Map(); for(id in tile) { if(tile[id].name != undefined && tile[id].name != null) names.tile.set( tile[id].name, id ); } names.sprite = new Map(); for(id in sprite) { if(sprite[id].name != undefined && sprite[id].name != null) names.sprite.set( sprite[id].name, id ); } names.item = new Map(); for(id in item) { if(item[id].name != undefined && item[id].name != null) names.item.set( item[id].name, id ); } } //stores all image data for tiles, sprites, drawings var imageStore = { source: {}, render: {} }; var spriteStartLocations = {}; /* VERSION */ var version = { major: 4, // for file format / engine changes minor: 8 // for editor changes and bugfixes }; function getEngineVersion() { return version.major + "." + version.minor; } /* FLAGS */ var flags; function resetFlags() { flags = { ROOM_FORMAT : 0 // 0 = non-comma separated, 1 = comma separated }; } resetFlags(); //init flags on load script function clearGameData() { title = ""; room = {}; tile = {}; sprite = {}; item = {}; dialog = {}; palette = { //start off with a default palette (can be overriden) "0" : { name : null, colors : [[0,0,0],[255,0,0],[255,255,255]] } }; ending = {}; isEnding = false; //todo - correct place for this? variable = {}; //stores all image data for tiles, sprites, drawings imageStore = { source: {}, render: {} }; spriteStartLocations = {}; names = { room : new Map(), tile : new Map(), sprite : new Map(), item : new Map() }; } var width = 128; var height = 128; var scale = 4; //this is stupid but necessary var tilesize = 8; var mapsize = 16; var curRoom = "0"; var key = { left : 37, right : 39, up : 38, down : 40, space : 32, enter : 13, w : 87, a : 65, s : 83, d : 68, r : 82 }; var prevTime = 0; var deltaTime = 0; //methods used to trigger gif recording var didPlayerMoveThisFrame = false; var onPlayerMoved = null; // var didDialogUpdateThisFrame = false; var onDialogUpdate = null; //inventory update UI handles var onInventoryChanged = null; var onVariableChanged = null; var isPlayerEmbeddedInEditor = false; function getGameNameFromURL() { var game = window.location.hash.substring(1); // console.log("game name --- " + game); return game; } function attachCanvas(c) { canvas = c; canvas.width = width * scale; canvas.height = width * scale; ctx = canvas.getContext("2d"); dialogRenderer.AttachContext(ctx); } var curGameData = null; function load_game(game_data, startWithTitle) { curGameData = game_data; //remember the current game (used to reset the game) dialogBuffer.Reset(); scriptInterpreter.ResetEnvironment(); // ensures variables are reset -- is this the best way? // console.log(dialog); parseWorld(game_data); // console.log(dialog); setInitialVariables(); renderImages(); onready(startWithTitle); // console.log(dialog); } function reset_cur_game() { if (curGameData == null) return; //can't reset if we don't have the game data stopGame(); clearGameData(); load_game(curGameData); } var update_interval = null; function onready(startWithTitle) { if(startWithTitle === undefined || startWithTitle === null) startWithTitle = true; clearInterval(loading_interval); document.addEventListener('keydown', onkeydown); document.addEventListener('keyup', onkeyup); canvas.addEventListener('touchstart', ontouchstart); canvas.addEventListener('touchmove', ontouchmove); canvas.addEventListener('touchend', ontouchend); update_interval = setInterval(update,-1); console.log("TITLE ??? " + startWithTitle); if(startWithTitle) // used by editor startNarrating(title); } function setInitialVariables() { for(id in variable) { var value = variable[id]; // default to string if(value === "true") { value = true; } else if(value === "false") { value = false; } else if(!isNaN(parseFloat(value))) { value = parseFloat(value); } scriptInterpreter.SetVariable(id,value); } scriptInterpreter.SetOnVariableChangeHandler( onVariableChanged ); } // OLD VERSION: DEPRECATED // function onTouch(e) { // console.log("MOUSEDOWN"); // //dialog mode // // if (isDialogMode) { // if(dialogBuffer.IsActive()) { // if (dialogBuffer.CanContinue()) { // var hasMoreDialog = dialogBuffer.Continue(); // if(!hasMoreDialog) { // onExitDialog(); // } // } // else { // dialogBuffer.Skip(); // } // return; // } // if (isEnding) { // reset_cur_game(); // return; // } // //walking mode // var off = getOffset(e); // var x = Math.floor(off.x / (tilesize*scale)); // var y = Math.floor(off.y / (tilesize*scale)); // //abort if you touch the square you're already on // if (player().x == x && player().y == y) { // return; // } // //did we touch a sprite? // var touchedSprite = null; // for (id in sprite) { // var spr = sprite[id]; // if (spr.room === curRoom) { // if (spr.x == x && spr.y == y) { // touchedSprite = id; // } // } // } // //respond to sprite touch // if (touchedSprite) { // var spr = sprite[touchedSprite]; // // console.log(Math.abs(player().x - spr.x)); // // console.log(Math.abs(player().y - spr.y)); // if ( Math.abs(player().x - spr.x) == 0 // && Math.abs(player().y - spr.y) == 1 ) // { // //touched a sprite next to you // } // else if ( Math.abs(player().y - spr.y) == 0 // && Math.abs(player().x - spr.x) == 1 ) // { // //touched a sprite next to you // } // else // { // return; //oh no! touched a sprite that's out of range // } // startSpriteDialog( touchedSprite /*spriteId*/ ); // return; // } // //did we touch an open square? // var row = room[curRoom].tilemap[y]; // // console.log(row); // var til = row[x]; // // console.log(til); // if ( room[curRoom].walls.indexOf(til) != -1 ) { // //touched a wall // return; // } // //find path to open square, if there is one // var map = collisionMap(curRoom); // var path = breadthFirstSearch( map, {x:player().x, y:player().y}, {x:x,y:y} ); // path = path.slice(1); //remove player's start square // //console.log( pathToString(path) ); // player().walkingPath = path; // } // TODO: this is likely broken function breadthFirstSearch(map, from, to) { from.trail = []; var visited = []; var queue = [from]; visited.push( posToString(from) ); //console.log( "~ bfs ~"); //console.log( posToString(from) + " to " + posToString(to) ); while ( queue.length > 0 ) { //grab pos from queue and mark as visited var curPos = queue.shift(); //console.log( posToString(curPos) ); //console.log( ".. " + pathToString(curPos.trail) ); //console.log( visited ); if (curPos.x == to.x && curPos.y == to.y) { //found a path! var path = curPos.trail.splice(0); path.push( curPos ); return path; } //look at neighbors neighbors(curPos).forEach( function(n) { var inBounds = (n.x >= 0 && n.x < 16 && n.y >= 0 && n.y < 16); if (inBounds) { var noCollision = map[n.y][n.x] <= 0; var notVisited = visited.indexOf( posToString(n) ) == -1; if (noCollision && notVisited) { n.trail = curPos.trail.slice(); n.trail.push(curPos); queue.push( n ); visited.push( posToString(n) ); } } }); } return []; // no path found } function posToString(pos) { return pos.x + "," + pos.y; } function pathToString(path) { var s = ""; for (i in path) { s += posToString(path[i]) + " "; } return s; } function neighbors(pos) { var neighborList = []; neighborList.push( {x:pos.x+1, y:pos.y+0} ); neighborList.push( {x:pos.x-1, y:pos.y+0} ); neighborList.push( {x:pos.x+0, y:pos.y+1} ); neighborList.push( {x:pos.x+0, y:pos.y-1} ); return neighborList; } function collisionMap(roomId) { var map = [ [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] ]; for (r in room[roomId].tilemap) { var row = room[roomId].tilemap[r]; for (var c = 0; c < row.length; c++) { if (room[roomId].walls.indexOf( row[x] ) != -1) { map[r][c] = 1; } } } for (id in sprite) { var spr = sprite[id]; if (spr.room === roomId) { map[spr.y][spr.x] = 2; } } return map; } function getOffset(evt) { var offset = { x:0, y:0 }; var el = evt.target; var rect = el.getBoundingClientRect(); offset.x += rect.left + el.scrollLeft; offset.y += rect.top + el.scrollTop; offset.x = evt.clientX - offset.x; offset.y = evt.clientY - offset.y; return offset; } function stopGame() { console.log("stop GAME!"); document.removeEventListener('keydown', onkeydown); document.removeEventListener('keyup', onkeyup); canvas.removeEventListener('touchstart', ontouchstart); canvas.removeEventListener('touchmove', ontouchmove); canvas.removeEventListener('touchend', ontouchend); clearInterval(update_interval); } /* loading animation */ var loading_anim_data = [ [ 0,1,1,1,1,1,1,0, 0,0,1,1,1,1,0,0, 0,0,1,1,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,1,0,0,1,0,0, 0,0,1,0,0,1,0,0, 0,1,1,1,1,1,1,0, ], [ 0,1,1,1,1,1,1,0, 0,0,1,0,0,1,0,0, 0,0,1,1,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,1,0,0,1,0,0, 0,0,1,1,1,1,0,0, 0,1,1,1,1,1,1,0, ], [ 0,1,1,1,1,1,1,0, 0,0,1,0,0,1,0,0, 0,0,1,0,0,1,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,1,1,0,0, 0,0,1,1,1,1,0,0, 0,1,1,1,1,1,1,0, ], [ 0,1,1,1,1,1,1,0, 0,0,1,0,0,1,0,0, 0,0,1,0,0,1,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,1,1,0,0, 0,0,1,1,1,1,0,0, 0,1,1,1,1,1,1,0, ], [ 0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,1, 1,1,1,0,0,1,1,1, 1,1,1,1,1,0,0,1, 1,1,1,1,1,0,0,1, 1,1,1,0,0,1,1,1, 1,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,0, ] ]; var loading_anim_frame = 0; var loading_anim_speed = 500; var loading_interval = null; function loadingAnimation() { //create image var loadingAnimImg = ctx.createImageData(8*scale, 8*scale); //draw image for (var y = 0; y < 8; y++) { for (var x = 0; x < 8; x++) { var i = (y * 8) + x; if (loading_anim_data[loading_anim_frame][i] == 1) { //scaling nonsense for (var sy = 0; sy < scale; sy++) { for (var sx = 0; sx < scale; sx++) { var pxl = 4 * ( (((y*scale)+sy) * (8*scale)) + ((x*scale)+sx) ); loadingAnimImg.data[pxl+0] = 255; loadingAnimImg.data[pxl+1] = 255; loadingAnimImg.data[pxl+2] = 255; loadingAnimImg.data[pxl+3] = 255; } } } } } //put image on canvas ctx.putImageData(loadingAnimImg,scale*(width/2 - 4),scale*(height/2 - 4)); //update frame loading_anim_frame++; if (loading_anim_frame >= 5) loading_anim_frame = 0; } function update() { var curTime = Date.now(); deltaTime = curTime - prevTime; if (!isNarrating && !isEnding) { updateAnimation(); drawRoom( room[curRoom] ); // draw world if game has begun } else { //make sure to still clear screen ctx.fillStyle = "rgb(" + getPal(curPal())[0][0] + "," + getPal(curPal())[0][1] + "," + getPal(curPal())[0][2] + ")"; ctx.fillRect(0,0,canvas.width,canvas.height); } // if (isDialogMode) { // dialog mode if(dialogBuffer.IsActive()) { dialogRenderer.Draw( dialogBuffer, deltaTime ); dialogBuffer.Update( deltaTime ); } else if (!isEnding) { moveSprites(); if (player().walkingPath.length > 0) { var dest = player().walkingPath[ player().walkingPath.length - 1 ]; ctx.fillStyle = "#fff"; ctx.globalAlpha = 0.5; ctx.fillRect( dest.x * tilesize*scale, dest.y * tilesize*scale, tilesize*scale, tilesize*scale ); ctx.globalAlpha = 1; } } // keep moving avatar if player holds down button if( !dialogBuffer.IsActive() && !isEnding ) { if( curPlayerDirection != Direction.None ) { playerHoldToMoveTimer -= deltaTime; if( playerHoldToMoveTimer <= 0 ) { movePlayer( curPlayerDirection ); playerHoldToMoveTimer = 150; } } } prevTime = curTime; //for gif recording if (didPlayerMoveThisFrame && onPlayerMoved != null) onPlayerMoved(); didPlayerMoveThisFrame = false; // if (didDialogUpdateThisFrame && onDialogUpdate != null) onDialogUpdate(); // didDialogUpdateThisFrame = false; /* hacky replacement */ if (onDialogUpdate != null) dialogRenderer.SetPageFinishHandler( onDialogUpdate ); } var animationCounter = 0; var animationTime = 400; function updateAnimation() { animationCounter += deltaTime; if ( animationCounter >= animationTime ) { // animate sprites for (id in sprite) { var spr = sprite[id]; if (spr.animation.isAnimated) { spr.animation.frameIndex = ( spr.animation.frameIndex + 1 ) % spr.animation.frameCount; } } // animate tiles for (id in tile) { var til = tile[id]; if (til.animation.isAnimated) { til.animation.frameIndex = ( til.animation.frameIndex + 1 ) % til.animation.frameCount; } } // animate items for (id in item) { var itm = item[id]; if (itm.animation.isAnimated) { itm.animation.frameIndex = ( itm.animation.frameIndex + 1 ) % itm.animation.frameCount; } } // reset counter animationCounter = 0; } } var moveCounter = 0; var moveTime = 200; function moveSprites() { moveCounter += deltaTime; if (moveCounter >= moveTime) { for (id in sprite) { var spr = sprite[id]; if (spr.walkingPath.length > 0) { //move sprite var nextPos = spr.walkingPath.shift(); spr.x = nextPos.x; spr.y = nextPos.y; var end = getEnding( spr.room, spr.x, spr.y ); var ext = getExit( spr.room, spr.x, spr.y ); var itmIndex = getItemIndex( spr.room, spr.x, spr.y ); if (end) { //if the sprite hits an ending if (id === playerId) { // only the player can end the game startNarrating( ending[end.id], true /*isEnding*/ ); } } else if (ext) { //if the sprite hits an exit //move it to another scene spr.room = ext.dest.room; spr.x = ext.dest.x; spr.y = ext.dest.y; if (id === playerId) { //if the player changes scenes, change the visible scene curRoom = ext.dest.room; } } else if(itmIndex > -1) { var itm = room[ spr.room ].items[ itmIndex ]; room[ spr.room ].items.splice( itmIndex, 1 ); if( spr.inventory[ itm.id ] ) spr.inventory[ itm.id ] += 1; else spr.inventory[ itm.id ] = 1; if(onInventoryChanged != null) onInventoryChanged( itm.id ); if(id === playerId) startItemDialog( itm.id /*itemId*/ ); // stop moving : is this a good idea? spr.walkingPath = []; } if (id === playerId) didPlayerMoveThisFrame = true; } } moveCounter = 0; } } function getSpriteAt(x,y) { for (id in sprite) { var spr = sprite[id]; if (spr.room === curRoom) { if (spr.x == x && spr.y == y) { return id; } } } return null; } var Direction = { None : -1, Up : 0, Down : 1, Left : 2, Right : 3 }; var curPlayerDirection = Direction.None; var playerHoldToMoveTimer = 0; var keyDownList = []; function onkeydown(e) { if(e.keyCode == key.left || e.keyCode == key.right || e.keyCode == key.up || e.keyCode == key.down || !isPlayerEmbeddedInEditor) e.preventDefault(); if( keyDownList.indexOf( e.keyCode ) != -1 ) { // key already down --- do nothing return; } curPlayerDirection = Direction.None; if( dialogBuffer.IsActive() ) { /* CONTINUE DIALOG */ if (dialogBuffer.CanContinue()) { var hasMoreDialog = dialogBuffer.Continue(); if(!hasMoreDialog) { console.log("EXIT DIALOG --- onkeydown") onExitDialog(); } } else { dialogBuffer.Skip(); } } else if ( isEnding ) { /* RESTART GAME */ reset_cur_game(); } else { /* WALK */ if ( e.keyCode == key.left || e.keyCode == key.a ) { curPlayerDirection = Direction.Left; } else if ( e.keyCode == key.right || e.keyCode == key.d ) { curPlayerDirection = Direction.Right; } else if ( e.keyCode == key.up || e.keyCode == key.w ) { curPlayerDirection = Direction.Up; } else if ( e.keyCode == key.down || e.keyCode == key.s ) { curPlayerDirection = Direction.Down; } movePlayer( curPlayerDirection ); if( curPlayerDirection != Direction.None ) { playerHoldToMoveTimer = 500; } /* RESTART GAME */ if ( e.keyCode === key.r && ( e.getModifierState("Control") || e.getModifierState("Meta") ) ) { if ( confirm("Restart the game?") ) { reset_cur_game(); } } } if( keyDownList.indexOf( e.keyCode ) == -1 ) keyDownList.push( e.keyCode ); console.log("KEY DOWN " + keyDownList.length ); console.log(keyDownList); } function movePlayer(direction) { var spr = null; if ( curPlayerDirection == Direction.Left && !(spr = getSpriteLeft()) && !isWallLeft()) { player().x -= 1; didPlayerMoveThisFrame = true; } else if ( curPlayerDirection == Direction.Right && !(spr = getSpriteRight()) && !isWallRight()) { player().x += 1; didPlayerMoveThisFrame = true; } else if ( curPlayerDirection == Direction.Up && !(spr = getSpriteUp()) && !isWallUp()) { player().y -= 1; didPlayerMoveThisFrame = true; } else if ( curPlayerDirection == Direction.Down && !(spr = getSpriteDown()) && !isWallDown()) { player().y += 1; didPlayerMoveThisFrame = true; } var ext = getExit( player().room, player().x, player().y ); var end = getEnding( player().room, player().x, player().y ); var itmIndex = getItemIndex( player().room, player().x, player().y ); // do items first, because you can pick up an item AND go through a door if (itmIndex > -1) { // TODO pick up items (what about touch?) // console.log("HIT ITM "); // console.log( itmIndex ); var itm = room[ player().room ].items[ itmIndex ]; // console.log(itm); room[ player().room ].items.splice( itmIndex, 1 ); if( player().inventory[ itm.id ] ) player().inventory[ itm.id ] += 1; else player().inventory[ itm.id ] = 1; if(onInventoryChanged != null) onInventoryChanged( itm.id ); startItemDialog( itm.id /*itemId*/ ); // console.log( player().inventory ); } if (end) { startNarrating( ending[end.id], true /*isEnding*/ ); } else if (ext) { player().room = ext.dest.room; player().x = ext.dest.x; player().y = ext.dest.y; curRoom = ext.dest.room; } else if (spr) { startSpriteDialog( spr /*spriteId*/ ); } } function onkeyup(e) { if(e.keyCode == key.left || e.keyCode == key.right || e.keyCode == key.up || e.keyCode == key.down || !isPlayerEmbeddedInEditor) e.preventDefault(); if( keyDownList.indexOf( e.keyCode ) != -1 ) keyDownList.splice( keyDownList.indexOf( e.keyCode ), 1 ); // todo is this robust enough? if( keyDownList.length <= 0 ) curPlayerDirection = Direction.None; console.log(e.keyCode); console.log("KEY UP " + keyDownList.length ); console.log(keyDownList); console.log("_____"); } var touchInfo = { isDown : false, startX : 0, startY : 0, curX : 0, curY : 0 }; function ontouchstart(e) { e.preventDefault(); if( e.changedTouches.length > 0 ) { touchInfo.isDown = true; console.log(e); touchInfo.startX = touchInfo.curX = e.changedTouches[0].clientX; touchInfo.startY = touchInfo.curY = e.changedTouches[0].clientY; console.log("MOUSE DOWN"); console.log(touchInfo); curPlayerDirection = Direction.None; } } var swipeDistance = 30; function ontouchmove(e) { e.preventDefault(); console.log("MOUSE MOVE"); console.log(touchInfo); if( !dialogBuffer.IsActive() && touchInfo.isDown && e.changedTouches.length > 0 ) { touchInfo.curX = e.changedTouches[0].clientX; touchInfo.curY = e.changedTouches[0].clientY; var prevDirection = curPlayerDirection; console.log( touchInfo.curX - touchInfo.startX ); if( touchInfo.curX - touchInfo.startX <= -swipeDistance ) { curPlayerDirection = Direction.Left; } else if( touchInfo.curX - touchInfo.startX >= swipeDistance ) { curPlayerDirection = Direction.Right; } else if( touchInfo.curY - touchInfo.startY <= -swipeDistance ) { curPlayerDirection = Direction.Up; } else if( touchInfo.curY - touchInfo.startY >= swipeDistance ) { curPlayerDirection = Direction.Down; } if( curPlayerDirection != prevDirection ) { movePlayer( curPlayerDirection ); playerHoldToMoveTimer = 300; // reset center touchInfo.startX = touchInfo.curX; touchInfo.startY = touchInfo.curY; } } } function ontouchend(e) { e.preventDefault(); console.log("MOUSE UP"); console.log(touchInfo); touchInfo.isDown = false; if( curPlayerDirection == Direction.None ) { // tap! if( dialogBuffer.IsActive() ) { /* CONTINUE DIALOG */ if (dialogBuffer.CanContinue()) { var hasMoreDialog = dialogBuffer.Continue(); if(!hasMoreDialog) { console.log("EXIT DIALOG --- onkeydown") onExitDialog(); } } else { dialogBuffer.Skip(); } } else if ( isEnding ) { /* RESTART GAME */ reset_cur_game(); } } curPlayerDirection = Direction.None; } function getItemIndex( roomId, x, y ) { for( var i = 0; i < room[roomId].items.length; i++ ) { var itm = room[roomId].items[i]; if ( itm.x == x && itm.y == y) return i; } return -1; } function getSpriteLeft() { //repetitive? return getSpriteAt( player().x - 1, player().y ); } function getSpriteRight() { return getSpriteAt( player().x + 1, player().y ); } function getSpriteUp() { return getSpriteAt( player().x, player().y - 1 ); } function getSpriteDown() { return getSpriteAt( player().x, player().y + 1 ); } function isWallLeft() { return (player().x - 1 < 0) || isWall( player().x - 1, player().y ); } function isWallRight() { return (player().x + 1 >= 16) || isWall( player().x + 1, player().y ); } function isWallUp() { return (player().y - 1 < 0) || isWall( player().x, player().y - 1 ); } function isWallDown() { return (player().y + 1 >= 16) || isWall( player().x, player().y + 1 ); } function isWall(x,y,roomId) { if(roomId == undefined || roomId == null) roomId = curRoom; var tileId = getTile( x, y ); if( tileId === '0' ) return false; // Blank spaces aren't walls, ya doofus if( tile[tileId].isWall === undefined || tile[tileId].isWall === null ) { // No wall-state defined: check room-specific walls var i = room[roomId].walls.indexOf( getTile(x,y) ); return i > -1; } // Otherwise, use the tile's own wall-state return tile[tileId].isWall; } function getItem(roomId,x,y) { for (i in room[roomId].items) { var item = room[roomId].items[i]; if (x == item.x && y == item.y) { return item; } } return null; } function getExit(roomId,x,y) { for (i in room[roomId].exits) { var e = room[roomId].exits[i]; if (x == e.x && y == e.y) { return e; } } return null; } function getEnding(roomId,x,y) { for (i in room[roomId].endings) { var e = room[roomId].endings[i]; if (x == e.x && y == e.y) { return e; } } return null; } function getTile(x,y) { // console.log(x + " " + y); var t = getRoom().tilemap[y][x]; return t; } function player() { return sprite[playerId]; } // Sort of a hack for legacy palette code (when it was just an array) function getPal(id) { return palette[ id ].colors; } function getRoom() { return room[curRoom]; } function isSpriteOffstage(id) { return sprite[id].room == null; } function parseWorld(file) { resetFlags(); var lines = file.split("\n"); var i = 0; while (i < lines.length) { var curLine = lines[i]; // console.log(lines[i]); if (i == 0) { i = parseTitle(lines, i); } else if (curLine.length <= 0 || curLine.charAt(0) === "#") { //skip blank lines & comments i++; } else if (getType(curLine) == "PAL") { i = parsePalette(lines, i); } else if (getType(curLine) === "ROOM" || getType(curLine) === "SET") { //SET for back compat i = parseRoom(lines, i); } else if (getType(curLine) === "TIL") { i = parseTile(lines, i); } else if (getType(curLine) === "SPR") { i = parseSprite(lines, i); } else if (getType(curLine) === "ITM") { i = parseItem(lines, i); } else if (getType(curLine) === "DRW") { i = parseDrawing(lines, i); } else if (getType(curLine) === "DLG") { i = parseDialog(lines, i); } else if (getType(curLine) === "END") { i = parseEnding(lines, i); } else if (getType(curLine) === "VAR") { i = parseVariable(lines, i); } else if (getType(curLine) === "!") { i = parseFlag(lines, i); } else { i++; } } placeSprites(); if (player().room != null) { curRoom = player().room; } // console.log(names); } //TODO this is in progress and doesn't support all features function serializeWorld() { var worldStr = ""; /* TITLE */ worldStr += title + "\n"; worldStr += "\n"; /* VERSION */ worldStr += "# BITSY VERSION " + getEngineVersion() + "\n"; // add version as a comment for debugging purposes worldStr += "\n"; /* FLAGS */ for (f in flags) { worldStr += "! " + f + " " + flags[f] + "\n"; } worldStr += "\n" /* PALETTE */ for (id in palette) { worldStr += "PAL " + id + "\n"; if( palette[id].name != null ) worldStr += "NAME " + palette[id].name + "\n"; for (i in getPal(id)) { for (j in getPal(id)[i]) { worldStr += getPal(id)[i][j]; if (j < 2) worldStr += ","; } worldStr += "\n"; } worldStr += "\n"; } /* ROOM */ for (id in room) { worldStr += "ROOM " + id + "\n"; if ( flags.ROOM_FORMAT == 0 ) { // old non-comma separated format for (i in room[id].tilemap) { for (j in room[id].tilemap[i]) { worldStr += room[id].tilemap[i][j]; } worldStr += "\n"; } } else if ( flags.ROOM_FORMAT == 1 ) { // new comma separated format for (i in room[id].tilemap) { for (j in room[id].tilemap[i]) { worldStr += room[id].tilemap[i][j]; if (j < room[id].tilemap[i].length-1) worldStr += "," } worldStr += "\n"; } } if (room[id].name != null) { /* NAME */ worldStr += "NAME " + room[id].name + "\n"; } if (room[id].walls.length > 0) { /* WALLS */ worldStr += "WAL "; for (j in room[id].walls) { worldStr += room[id].walls[j]; if (j < room[id].walls.length-1) { worldStr += ","; } } worldStr += "\n"; } if (room[id].items.length > 0) { /* ITEMS */ for (j in room[id].items) { var itm = room[id].items[j]; worldStr += "ITM " + itm.id + " " + itm.x + "," + itm.y; worldStr += "\n"; } } if (room[id].exits.length > 0) { /* EXITS */ for (j in room[id].exits) { var e = room[id].exits[j]; if ( isExitValid(e) ) { worldStr += "EXT " + e.x + "," + e.y + " " + e.dest.room + " " + e.dest.x + "," + e.dest.y; worldStr += "\n"; } } } if (room[id].endings.length > 0) { /* ENDINGS */ for (j in room[id].endings) { var e = room[id].endings[j]; // todo isEndingValid worldStr += "END " + e.id + " " + e.x + "," + e.y; worldStr += "\n"; } } if (room[id].pal != null) { /* PALETTE */ worldStr += "PAL " + room[id].pal + "\n"; } worldStr += "\n"; } /* TILES */ for (id in tile) { worldStr += "TIL " + id + "\n"; worldStr += serializeDrawing( "TIL_" + id ); if (tile[id].name != null && tile[id].name != undefined) { /* NAME */ worldStr += "NAME " + tile[id].name + "\n"; } if (tile[id].isWall != null && tile[id].isWall != undefined) { /* WALL */ worldStr += "WAL " + tile[id].isWall + "\n"; } if (tile[id].col != null && tile[id].col != undefined && tile[id].col != 1) { /* COLOR OVERRIDE */ worldStr += "COL " + tile[id].col + "\n"; } worldStr += "\n"; } /* SPRITES */ for (id in sprite) { worldStr += "SPR " + id + "\n"; worldStr += serializeDrawing( "SPR_" + id ); if (sprite[id].name != null && sprite[id].name != undefined) { /* NAME */ worldStr += "NAME " + sprite[id].name + "\n"; } if (sprite[id].dlg != null) { worldStr += "DLG " + sprite[id].dlg + "\n"; } if (sprite[id].room != null) { /* SPRITE POSITION */ worldStr += "POS " + sprite[id].room + " " + sprite[id].x + "," + sprite[id].y + "\n"; } if (sprite[id].inventory != null) { for(itemId in sprite[id].inventory) { worldStr += "ITM " + itemId + " " + sprite[id].inventory[itemId] + "\n"; } } if (sprite[id].col != null && sprite[id].col != undefined && sprite[id].col != 2) { /* COLOR OVERRIDE */ worldStr += "COL " + sprite[id].col + "\n"; } worldStr += "\n"; } /* ITEMS */ for (id in item) { worldStr += "ITM " + id + "\n"; worldStr += serializeDrawing( "ITM_" + id ); if (item[id].name != null && item[id].name != undefined) { /* NAME */ worldStr += "NAME " + item[id].name + "\n"; } if (item[id].dlg != null) { worldStr += "DLG " + item[id].dlg + "\n"; } if (item[id].col != null && item[id].col != undefined && item[id].col != 2) { /* COLOR OVERRIDE */ worldStr += "COL " + item[id].col + "\n"; } worldStr += "\n"; } /* DIALOG */ for (id in dialog) { worldStr += "DLG " + id + "\n"; worldStr += dialog[id] + "\n"; worldStr += "\n"; } /* ENDINGS */ for (id in ending) { worldStr += "END " + id + "\n"; worldStr += ending[id] + "\n"; worldStr += "\n"; } /* VARIABLES */ for (id in variable) { worldStr += "VAR " + id + "\n"; worldStr += variable[id] + "\n"; worldStr += "\n"; } return worldStr; } function serializeDrawing(drwId) { var drwStr = ""; for (f in imageStore.source[drwId]) { for (y in imageStore.source[drwId][f]) { var rowStr = ""; for (x in imageStore.source[drwId][f][y]) { rowStr += imageStore.source[drwId][f][y][x]; } drwStr += rowStr + "\n"; } if (f < (imageStore.source[drwId].length-1)) drwStr += ">\n"; } return drwStr; } function isExitValid(e) { var hasValidStartPos = e.x >= 0 && e.x < 16 && e.y >= 0 && e.y < 16; var hasDest = e.dest != null; var hasValidRoomDest = (e.dest.room != null && e.dest.x >= 0 && e.dest.x < 16 && e.dest.y >= 0 && e.dest.y < 16); return hasValidStartPos && hasDest && hasValidRoomDest; } function placeSprites() { for (id in spriteStartLocations) { //console.log(id); //console.log( spriteStartLocations[id] ); //console.log(sprite[id]); sprite[id].room = spriteStartLocations[id].room; sprite[id].x = spriteStartLocations[id].x; sprite[id].y = spriteStartLocations[id].y; //console.log(sprite[id]); } } /* ARGUMENT GETTERS */ function getType(line) { return getArg(line,0); } function getId(line) { return getArg(line,1); } function getArg(line,arg) { return line.split(" ")[arg]; } function getCoord(line,arg) { return getArg(line,arg).split(","); } function parseTitle(lines, i) { title = lines[i]; i++; return i; } function parseRoom(lines, i) { var id = getId(lines[i]); room[id] = { id : id, tilemap : [], walls : [], exits : [], endings : [], items : [], pal : null, name : null }; i++; // create tile map if ( flags.ROOM_FORMAT == 0 ) { // old way: no commas, single char tile ids var end = i + mapsize; var y = 0; for (; i<end; i++) { room[id].tilemap.push( [] ); for (x = 0; x<mapsize; x++) { room[id].tilemap[y].push( lines[i].charAt(x) ); } y++; } } else if ( flags.ROOM_FORMAT == 1 ) { // new way: comma separated, multiple char tile ids var end = i + mapsize; var y = 0; for (; i<end; i++) { room[id].tilemap.push( [] ); var lineSep = lines[i].split(","); for (x = 0; x<mapsize; x++) { room[id].tilemap[y].push( lineSep[x] ); } y++; } } while (i < lines.length && lines[i].length > 0) { //look for empty line // console.log(getType(lines[i])); if (getType(lines[i]) === "SPR") { /* NOTE SPRITE START LOCATIONS */ var sprId = getId(lines[i]); if (sprId.indexOf(",") == -1 && lines[i].split(" ").length >= 3) { //second conditional checks for coords /* PLACE A SINGLE SPRITE */ var sprCoord = lines[i].split(" ")[2].split(","); spriteStartLocations[sprId] = { room : id, x : parseInt(sprCoord[0]), y : parseInt(sprCoord[1]) }; } else if ( flags.ROOM_FORMAT == 0 ) { // TODO: right now this shortcut only works w/ the old comma separate format /* PLACE MULTIPLE SPRITES*/ //Does find and replace in the tilemap (may be hacky, but its convenient) var sprList = sprId.split(","); for (row in room[id].tilemap) { for (s in sprList) { var col = room[id].tilemap[row].indexOf( sprList[s] ); //if the sprite is in this row, replace it with the "null tile" and set its starting position if (col != -1) { room[id].tilemap[row][col] = "0"; spriteStartLocations[ sprList[s] ] = { room : id, x : parseInt(col), y : parseInt(row) }; } } } } } else if (getType(lines[i]) === "ITM") { var itmId = getId(lines[i]); var itmCoord = lines[i].split(" ")[2].split(","); var itm = { id: itmId, x : parseInt(itmCoord[0]), y : parseInt(itmCoord[1]) }; room[id].items.push( itm ); } else if (getType(lines[i]) === "WAL") { /* DEFINE COLLISIONS (WALLS) */ room[id].walls = getId(lines[i]).split(","); } else if (getType(lines[i]) === "EXT") { /* ADD EXIT */ var exitArgs = lines[i].split(" "); //arg format: EXT 10,5 M 3,2 [AVA:7 LCK:a,9] [AVA 7 LCK a 9] var exitCoords = exitArgs[1].split(","); var destName = exitArgs[2]; var destCoords = exitArgs[3].split(","); var ext = { x : parseInt(exitCoords[0]), y : parseInt(exitCoords[1]), dest : { room : destName, x : parseInt(destCoords[0]), y : parseInt(destCoords[1]) } }; room[id].exits.push(ext); } else if (getType(lines[i]) === "END") { /* ADD ENDING */ var endId = getId( lines[i] ); var endCoords = getCoord( lines[i], 2 ); var end = { id : endId, x : parseInt( endCoords[0] ), y : parseInt( endCoords[1] ) }; room[id].endings.push(end); } else if (getType(lines[i]) === "PAL") { /* CHOOSE PALETTE (that's not default) */ room[id].pal = getId(lines[i]); } else if (getType(lines[i]) === "NAME") { var name = lines[i].split(/\s(.+)/)[1]; room[id].name = name; names.room.set( name, id); } i++; } return i; } function parsePalette(lines,i) { //todo this has to go first right now :( var id = getId(lines[i]); i++; var colors = []; var name = null; while (i < lines.length && lines[i].length > 0) { //look for empty line var args = lines[i].split(" "); if(args[0] === "NAME") { name = lines[i].split(/\s(.+)/)[1]; } else { var col = []; lines[i].split(",").forEach(function(i) { col.push(parseInt(i)); }); colors.push(col); } i++; } palette[id] = { name : name, colors : colors }; return i; } function parseTile(lines, i) { var id = getId(lines[i]); var drwId = null; var name = null; i++; if (getType(lines[i]) === "DRW") { //load existing drawing drwId = getId(lines[i]); i++; } else { // store tile source drwId = "TIL_" + id; i = parseDrawingCore( lines, i, drwId ); } //other properties var colorIndex = 1; // default palette color index is 1 var isWall = null; // null indicates it can vary from room to room (original version) while (i < lines.length && lines[i].length > 0) { //look for empty line if (getType(lines[i]) === "COL") { colorIndex = parseInt( getId(lines[i]) ); } else if (getType(lines[i]) === "NAME") { /* NAME */ name = lines[i].split(/\s(.+)/)[1]; names.tile.set( name, id ); } else if (getType(lines[i]) === "WAL") { var wallArg = getArg( lines[i], 1 ); if( wallArg === "true" ) { isWall = true; } else if( wallArg === "false" ) { isWall = false; } } i++; } //tile data tile[id] = { drw : drwId, //drawing id col : colorIndex, animation : { isAnimated : (imageStore.source[drwId].length > 1), frameIndex : 0, frameCount : imageStore.source[drwId].length }, name : name, isWall : isWall }; return i; } function parseSprite(lines, i) { var id = getId(lines[i]); var drwId = null; var name = null; i++; if (getType(lines[i]) === "DRW") { //load existing drawing drwId = getId(lines[i]); i++; } else { // store sprite source drwId = "SPR_" + id; i = parseDrawingCore( lines, i, drwId ); } //other properties var colorIndex = 2; //default palette color index is 2 var dialogId = null; var startingInventory = {}; while (i < lines.length && lines[i].length > 0) { //look for empty line if (getType(lines[i]) === "COL") { /* COLOR OFFSET INDEX */ colorIndex = parseInt( getId(lines[i]) ); } else if (getType(lines[i]) === "POS") { /* STARTING POSITION */ var posArgs = lines[i].split(" "); var roomId = posArgs[1]; var coordArgs = posArgs[2].split(","); spriteStartLocations[id] = { room : roomId, x : parseInt(coordArgs[0]), y : parseInt(coordArgs[1]) }; } else if(getType(lines[i]) === "DLG") { dialogId = getId(lines[i]); } else if (getType(lines[i]) === "NAME") { /* NAME */ name = lines[i].split(/\s(.+)/)[1]; names.sprite.set( name, id ); } else if (getType(lines[i]) === "ITM") { /* ITEM STARTING INVENTORY */ var itemId = getId(lines[i]); var itemCount = parseFloat( getArg(lines[i], 2) ); startingInventory[itemId] = itemCount; } i++; } //sprite data sprite[id] = { drw : drwId, //drawing id col : colorIndex, dlg : dialogId, room : null, //default location is "offstage" x : -1, y : -1, walkingPath : [], //tile by tile movement path (isn't saved) animation : { isAnimated : (imageStore.source[drwId].length > 1), frameIndex : 0, frameCount : imageStore.source[drwId].length }, inventory : startingInventory, name : name }; return i; } function parseItem(lines, i) { var id = getId(lines[i]); var drwId = null; var name = null; i++; if (getType(lines[i]) === "DRW") { //load existing drawing drwId = getId(lines[i]); i++; } else { // store item source drwId = "ITM_" + id; // these prefixes are maybe a terrible way to differentiate drawing tyepes :/ i = parseDrawingCore( lines, i, drwId ); } //other properties var colorIndex = 2; //default palette color index is 2 var dialogId = null; while (i < lines.length && lines[i].length > 0) { //look for empty line if (getType(lines[i]) === "COL") { /* COLOR OFFSET INDEX */ colorIndex = parseInt( getArg( lines[i], 1 ) ); } // else if (getType(lines[i]) === "POS") { // /* STARTING POSITION */ // var posArgs = lines[i].split(" "); // var roomId = posArgs[1]; // var coordArgs = posArgs[2].split(","); // spriteStartLocations[id] = { // room : roomId, // x : parseInt(coordArgs[0]), // y : parseInt(coordArgs[1]) // }; // } else if(getType(lines[i]) === "DLG") { dialogId = getId(lines[i]); } else if (getType(lines[i]) === "NAME") { /* NAME */ name = lines[i].split(/\s(.+)/)[1]; names.item.set( name, id ); } i++; } //item data item[id] = { drw : drwId, //drawing id col : colorIndex, dlg : dialogId, // room : null, //default location is "offstage" // x : -1, // y : -1, animation : { isAnimated : (imageStore.source[drwId].length > 1), frameIndex : 0, frameCount : imageStore.source[drwId].length }, name : name }; // console.log("ITM " + id); // console.log(item[id]); return i; } function parseDrawing(lines, i) { // store drawing source var drwId = getId( lines[i] ); return parseDrawingCore( lines, i, drwId ); } function parseDrawingCore(lines, i, drwId) { imageStore.source[drwId] = []; //init list of frames imageStore.source[drwId].push( [] ); //init first frame var frameIndex = 0; var y = 0; while ( y < tilesize ) { var l = lines[i+y]; var row = []; for (x = 0; x < tilesize; x++) { row.push( parseInt( l.charAt(x) ) ); } imageStore.source[drwId][frameIndex].push( row ); y++; if (y === tilesize) { i = i + y; if ( lines[i] != undefined && lines[i].charAt(0) === ">" ) { // start next frame! imageStore.source[drwId].push( [] ); frameIndex++; //start the count over again for the next frame i++; y = 0; } } } //console.log(imageStore.source[drwId]); return i; } function renderImages() { // console.log(" -- RENDER IMAGES -- "); //init image store for (pal in palette) { imageStore.render[pal] = { "1" : {}, //images with primary color index 1 (usually tiles) "2" : {} //images with primary color index 2 (usually sprites) }; } //render images required by sprites for (s in sprite) { var spr = sprite[s]; renderImageForAllPalettes( spr ); } //render images required by tiles for (t in tile) { var til = tile[t]; renderImageForAllPalettes( til ); } //render images required by tiles for (i in item) { var itm = item[i]; renderImageForAllPalettes( itm ); } } function renderImageForAllPalettes(drawing) { // console.log("RENDER IMAGE"); for (pal in palette) { // console.log(pal); var col = drawing.col; var colStr = "" + col; // slightly hacky initialization of image store for palettes with more than 3 colors ~~~ SECRET FEATURE DO NOT USE :P ~~~ if(imageStore.render[pal][colStr] === undefined || imageStore.render[pal][colStr] === null) { // console.log("UNDEFINED " + colStr); imageStore.render[pal][colStr] = {}; } // console.log(drawing); // console.log(drawing.drw); // console.log(imageStore); var imgSrc = imageStore.source[ drawing.drw ]; if ( imgSrc.length <= 1 ) { // non-animated drawing var frameSrc = imgSrc[0]; // console.log(drawing); // console.log(imageStore); imageStore.render[pal][colStr][drawing.drw] = imageDataFromImageSource( frameSrc, pal, col ); } else { // animated drawing var frameCount = 0; for (f in imgSrc) { var frameSrc = imgSrc[f]; var frameId = drawing.drw + "_" + frameCount; imageStore.render[pal][colStr][frameId] = imageDataFromImageSource( frameSrc, pal, col ); frameCount++; } } } } function imageDataFromImageSource(imageSource, pal, col) { //console.log(imageSource); var img = ctx.createImageData(tilesize*scale,tilesize*scale); for (var y = 0; y < tilesize; y++) { for (var x = 0; x < tilesize; x++) { var px = imageSource[y][x]; for (var sy = 0; sy < scale; sy++) { for (var sx = 0; sx < scale; sx++) { var pxl = (((y * scale) + sy) * tilesize * scale * 4) + (((x*scale) + sx) * 4); if ( px === 1 && getPal(pal).length > col ) { img.data[pxl + 0] = getPal(pal)[col][0]; //ugly img.data[pxl + 1] = getPal(pal)[col][1]; img.data[pxl + 2] = getPal(pal)[col][2]; img.data[pxl + 3] = 255; } else { //ch === 0 img.data[pxl + 0] = getPal(pal)[0][0]; img.data[pxl + 1] = getPal(pal)[0][1]; img.data[pxl + 2] = getPal(pal)[0][2]; img.data[pxl + 3] = 255; } } } } } return img; } function parseDialog(lines, i) { var id = getId(lines[i]); i++; // TODO : use this for titles & endings too var results = scriptInterpreter.ReadDialogScript(lines,i); dialog[id] = results.script; i = results.index; return i; } function parseEnding(lines, i) { var id = getId(lines[i]); i++; var text = lines[i]; i++; ending[id] = text; return i; } function parseVariable(lines, i) { var id = getId(lines[i]); i++; var value = lines[i]; i++; variable[id] = value; return i; } function parseFlag(lines, i) { var id = getId(lines[i]); var valStr = lines[i].split(" ")[2]; flags[id] = parseInt( valStr ); i++; return i; } function drawTile(img,x,y,context) { if (!context) { //optional pass in context; otherwise, use default context = ctx; } context.putImageData(img,x*tilesize*scale,y*tilesize*scale); } function drawSprite(img,x,y,context) { //this may differ later (or not haha) drawTile(img,x,y,context); } function drawItem(img,x,y,context) { drawTile(img,x,y,context); //TODO these methods are dumb and repetitive } function drawRoom(room,context,frameIndex) { // context & frameIndex are optional if (!context) { //optional pass in context; otherwise, use default (ok this is REAL hacky isn't it) context = ctx; } //clear screen context.fillStyle = "rgb(" + getPal(curPal())[0][0] + "," + getPal(curPal())[0][1] + "," + getPal(curPal())[0][2] + ")"; context.fillRect(0,0,canvas.width,canvas.height); //draw tiles for (i in room.tilemap) { for (j in room.tilemap[i]) { var id = room.tilemap[i][j]; if (id != "0") { //console.log(id); if (tile[id] == null) { // hack-around to avoid corrupting files (not a solution though!) id = "0"; room.tilemap[i][j] = id; } else { // console.log(id); drawTile( getTileImage(tile[id],getRoomPal(room.id),frameIndex), j, i, context ); } } } } //draw items for (var i = 0; i < room.items.length; i++) { var itm = room.items[i]; drawItem( getItemImage(item[itm.id],getRoomPal(room.id),frameIndex), itm.x, itm.y, context ); } //draw sprites for (id in sprite) { var spr = sprite[id]; if (spr.room === room.id) { drawSprite( getSpriteImage(spr,getRoomPal(room.id),frameIndex), spr.x, spr.y, context ); } } } function getTileImage(t,palId,frameIndex) { if( frameIndex === undefined ) frameIndex = null; // no default parameter support on iOS var drwId = t.drw; if (!palId) palId = curPal(); // TODO : will this break on iOS? if ( t.animation.isAnimated ) { if (frameIndex != null) { // use optional provided frame index // console.log("GET TILE " + frameIndex); drwId += "_" + frameIndex; } else { // or the one bundled with the tile drwId += "_" + t.animation.frameIndex; } } return imageStore.render[ palId ][ t.col ][ drwId ]; } function getSpriteImage(s,palId,frameIndex) { if( frameIndex === undefined ) frameIndex = null; // no default parameter support on iOS var drwId = s.drw; if (!palId) palId = curPal(); if ( s.animation.isAnimated ) { if (frameIndex != null) { drwId += "_" + frameIndex; } else { drwId += "_" + s.animation.frameIndex; } } return imageStore.render[ palId ][ s.col ][ drwId ]; } function getItemImage(itm,palId,frameIndex) { //aren't these all the same???? if( frameIndex === undefined ) frameIndex = null; // no default parameter support on iOS var drwId = itm.drw; // console.log(drwId); if (!palId) palId = curPal(); if ( itm.animation.isAnimated ) { if (frameIndex != null) { drwId += "_" + frameIndex; } else { drwId += "_" + itm.animation.frameIndex; } } // console.log(imageStore.render[ palId ][ itm.col ]); // console.log(imageStore.render[ palId ][ itm.col ][ drwId ]); return imageStore.render[ palId ][ itm.col ][ drwId ]; } function curPal() { return getRoomPal(curRoom); } function getRoomPal(roomId) { if (room[roomId].pal != null) { //a specific palette was chosen return room[roomId].pal; } else { if (roomId in palette) { //there is a palette matching the name of the room return roomId; } else { //use the default palette return "0"; } } return "0"; } var isDialogMode = false; var isNarrating = false; var isEnding = false; var dialogModule = new Dialog(); var dialogRenderer = dialogModule.CreateRenderer(); var dialogBuffer = dialogModule.CreateBuffer(); function onExitDialog() { // var breakShit = null; // breakShit(); console.log("EXIT DIALOG"); isDialogMode = false; if (isNarrating) isNarrating = false; if (isDialogPreview) { isDialogPreview = false; if (onDialogPreviewEnd != null) onDialogPreviewEnd(); } } /* TODO - titles and endings should also take advantage of the script pre-compilation if possible?? - could there be a namespace collision? - what about dialog NAMEs vs IDs? - what about a special script block separate from DLG? */ function startNarrating(dialogStr,end) { console.log("NARRATE " + dialogStr); if(end === undefined) end = false; isNarrating = true; isEnding = end; startDialog(dialogStr); } function startItemDialog(itemId) { var dialogId = item[itemId].dlg; // console.log("START ITEM DIALOG " + dialogId); if(dialog[dialogId]){ var dialogStr = dialog[dialogId]; startDialog(dialogStr,dialogId); } } function startSpriteDialog(spriteId) { var spr = sprite[spriteId]; var dialogId = spr.dlg ? spr.dlg : spriteId; // console.log("START SPRITE DIALOG " + dialogId); if(dialog[dialogId]){ var dialogStr = dialog[dialogId]; startDialog(dialogStr,dialogId); } } function startDialog(dialogStr,scriptId) { if(dialogStr.length <= 0) { console.log("ON EXIT DIALOG -- startDialog 1"); onExitDialog(); return; } isDialogMode = true; dialogRenderer.Reset(); dialogRenderer.SetCentered( isNarrating /*centered*/ ); dialogBuffer.Reset(); scriptInterpreter.SetDialogBuffer( dialogBuffer ); var onScriptEnd = function() { if(!dialogBuffer.IsActive()){ console.log("ON EXIT DIALOG -- startDialog 2"); onExitDialog(); } }; if(scriptId === undefined) { scriptInterpreter.Interpret( dialogStr, onScriptEnd ); } else { if( !scriptInterpreter.HasScript(scriptId) ) scriptInterpreter.Compile( scriptId, dialogStr ); scriptInterpreter.Run( scriptId, onScriptEnd ); } } var isDialogPreview = false; function startPreviewDialog(script, onScriptEnd) { isNarrating = true; isDialogMode = true; isDialogPreview = true; dialogRenderer.Reset(); dialogRenderer.SetCentered( true ); dialogBuffer.Reset(); scriptInterpreter.SetDialogBuffer( dialogBuffer ); onDialogPreviewEnd = onScriptEnd; scriptInterpreter.Eval( script, null ); } /* =================================== DIALOG EXIT FUNCTION MOD (mildmojo) =================================== Usage: {exit "<room name>,<x>,<y>"} Example: {exit "FinalRoom,8,4"} WARNING: In exit coordinates, the top left tile is (0,0). In sprite coordinates, the BOTTOM left tile is (0,0). Make sure you use EXIT coordinates for X and Y. Installation: 1. Paste all this code at the bottom of your exported game's HTML file, right BEFORE the last /script> tag. 2. Search the HTML file for "functionMap.set" and paste this line after all the other ones: functionMap.set("exit", exitFunc); NOTE: For full editor integration, you'd also need to paste this code at the end of the editor's `bitsy.js` file and add the `functionMap` line above to the editor's `script.js`. If you'd rather use the vanilla editor, just make sure not to edit dialog with {exit} calls in the dialog window. Always edit them in the dialog textbox of the sprite/item window. Editing a sprite or item's dialog in the dialog window will replace your `{exit "room,5,6"}` with `{}` and you probably won't notice. License: WTFPL (do WTF you want with it) */ // Global variable to store data from the exit function encountered in dialog. var queuedDialogExit = null; // Hook into the game reset and make sure exit data gets cleared. var _clearGameData = clearGameData; clearGameData = function() { _clearGameData.apply(this, arguments); queuedDialogExit = null; }; // Hook into the dialog finish event; if there was an {exit}, travel there now. var _onExitDialog = onExitDialog; onExitDialog = function() { _onExitDialog.apply(this, arguments); if (queuedDialogExit) { doPlayerExit(queuedDialogExit); queuedDialogExit = null; } }; // Implement the {exit} dialog function. It saves the room name and destination // X/Y coordinates so we can travel there after the dialog is over. function exitFunc(environment, parameters, onReturn) { parameters = parameters[0].split(','); var roomName = parameters[0]; var x = parameters[1]; var y = parameters[2]; var roomId = names.room.get(roomName); if (!roomName || x === undefined || y === undefined) { console.warn('{exit} was missing parameters! Usage: {exit "roomname,x,y"}'); } if (roomId === undefined) { console.warn("Bad {exit} parameter: Room '" + roomName + "' not found!"); } else { queuedDialogExit = { room: roomId, x: Number(x), y: Number(y) }; } onReturn(null); } // `dest` looks like {room: roomId, x: Int, y: Int} function doPlayerExit(dest) { player().room = dest.room; player().x = dest.x; player().y = dest.y; curRoom = dest.room; } (function (bitsy) { 'use strict'; var hackOptions = { musicByRoom: { 0: 'S', 1: 'cave', 2: 'cave', 3: 'town', 4: 'town', 5: 'town', 6: 'deep', 7: 'deep', 8: 'open', 9: 'town', 10: 'town', 11: 'town', 12: 'town', 13: 'town', 14: 'town', 15: 'town', 16: 'town', 17: 'open', 18: 'town', 19: 'deep', 20: 'town', 21: 'deep', 22: 'town', 23: 'deep', 24: 'town', 25: 'open', 26: 'town', 27: 'town', 28: 'deep', 29: 'deep', 30: 'town', 31: 'cave', 32: 'attack', 33: 'potion', 34: 'potion', 35: 'potion', 36: 'potion' } //You need to put an entry in this list for every ROOM NUMBER that is accessible by the player, //and then specify the song ID for each room. Expand this list to as many rooms as you need. //If the player moves between rooms with the same audio ID the music keeps playing seamlessly. //Undefined rooms will keep playing whatever music they were last playing //You may add a song ID of 'S' to make a room fall silent. }; bitsy = bitsy && bitsy.hasOwnProperty('default') ? bitsy['default'] : bitsy; /** @file utils @summary miscellaneous bitsy utilities @author Sean S. LeBlanc */ /*helper used to inject code into script tags based on a search string*/ function inject(searchString, codeToInject) { var args = [].slice.call(arguments); codeToInject = flatten(args.slice(1)).join(''); // find the relevant script tag var scriptTags = document.getElementsByTagName('script'); var scriptTag; var code; for (var i = 0; i < scriptTags.length; ++i) { scriptTag = scriptTags[i]; var matchesSearch = scriptTag.textContent.indexOf(searchString) !== -1; var isCurrentScript = scriptTag === document.currentScript; if (matchesSearch && !isCurrentScript) { code = scriptTag.textContent; break; } } // error-handling if (!code) { throw 'Couldn\'t find "' + searchString + '" in script tags'; } // modify the content code = code.replace(searchString, searchString + codeToInject); // replace the old script tag with a new one using our modified code var newScriptTag = document.createElement('script'); newScriptTag.textContent = code; scriptTag.insertAdjacentElement('afterend', newScriptTag); scriptTag.remove(); } /** * Helper for getting an array with unique elements * @param {Array} array Original array * @return {Array} Copy of array, excluding duplicates */ function unique(array) { return array.filter(function (item, idx) { return array.indexOf(item) === idx; }); } function flatten(list) { if (!Array.isArray(list)) { return list; } return list.reduce(function (fragments, arg) { return fragments.concat(flatten(arg)); }, []); } /** @file kitsy-script-toolkit @summary makes it easier and cleaner to run code before and after Bitsy functions or to inject new code into Bitsy script tags @license WTFPL (do WTF you want) @version 2.0.0 @requires Bitsy Version: 4.5, 4.6 @author @mildmojo @description HOW TO USE: import {before, after, inject} from "./kitsy-script-toolkit.js"; before(targetFuncName, beforeFn); after(targetFuncName, afterFn); inject(searchString, codeFragment1[, ...codefragmentN]); For more info, see the documentation at: https://github.com/seleb/bitsy-hacks/wiki/Coding-with-kitsy */ // Examples: inject('names.sprite.set( name, id );', 'console.dir(names)'); // inject('names.sprite.set( name, id );', 'console.dir(names);', 'console.dir(sprite);'); // inject('names.sprite.set( name, id );', ['console.dir(names)', 'console.dir(sprite);']); function inject$1(searchString, codeFragments) { var kitsy = kitsyInit(); var args = [].slice.call(arguments); codeFragments = flatten(args.slice(1)); kitsy.queuedInjectScripts.push({ searchString: searchString, codeFragments: codeFragments }); } // Ex: before('load_game', function run() { alert('Loading!'); }); // before('show_text', function run(text) { return text.toUpperCase(); }); // before('show_text', function run(text, done) { done(text.toUpperCase()); }); function before(targetFuncName, beforeFn) { var kitsy = kitsyInit(); kitsy.queuedBeforeScripts[targetFuncName] = kitsy.queuedBeforeScripts[targetFuncName] || []; kitsy.queuedBeforeScripts[targetFuncName].push(beforeFn); } // Ex: after('load_game', function run() { alert('Loaded!'); }); function after(targetFuncName, afterFn) { var kitsy = kitsyInit(); kitsy.queuedAfterScripts[targetFuncName] = kitsy.queuedAfterScripts[targetFuncName] || []; kitsy.queuedAfterScripts[targetFuncName].push(afterFn); } function kitsyInit() { // return already-initialized kitsy if (bitsy.kitsy) { return bitsy.kitsy; } // Initialize kitsy bitsy.kitsy = { queuedInjectScripts: [], queuedBeforeScripts: {}, queuedAfterScripts: {} }; var oldStartFunc = bitsy.startExportedGame; bitsy.startExportedGame = function doAllInjections() { // Only do this once. bitsy.startExportedGame = oldStartFunc; // Rewrite scripts and hook everything up. doInjects(); applyAllHooks(); // Start the game bitsy.startExportedGame.apply(this, arguments); }; return bitsy.kitsy; } function doInjects() { bitsy.kitsy.queuedInjectScripts.forEach(function (injectScript) { inject(injectScript.searchString, injectScript.codeFragments); }); _reinitEngine(); } function applyAllHooks() { var allHooks = unique(Object.keys(bitsy.kitsy.queuedBeforeScripts).concat(Object.keys(bitsy.kitsy.queuedAfterScripts))); allHooks.forEach(applyHook); } function applyHook(functionName) { var superFn = bitsy[functionName]; var superFnLength = superFn.length; var functions = []; // start with befores functions = functions.concat(bitsy.kitsy.queuedBeforeScripts[functionName] || []); // then original functions.push(superFn); // then afters functions = functions.concat(bitsy.kitsy.queuedAfterScripts[functionName] || []); // overwrite original with one which will call each in order bitsy[functionName] = function () { var args = [].slice.call(arguments); var i = 0; runBefore.apply(this, arguments); // Iterate thru sync & async functions. Run each, finally run original. function runBefore() { // All outta functions? Finish if (i === functions.length) { return; } // Update args if provided. if (arguments.length > 0) { args = [].slice.call(arguments); } if (functions[i].length > superFnLength) { // Assume funcs that accept more args than the original are // async and accept a callback as an additional argument. functions[i++].apply(this, args.concat(runBefore.bind(this))); } else { // run synchronously var newArgs = functions[i++].apply(this, args) || args; runBefore.apply(this, newArgs); } } }; } function _reinitEngine() { // recreate the script and dialog objects so that they'll be // referencing the code with injections instead of the original bitsy.scriptModule = new bitsy.Script(); bitsy.scriptInterpreter = bitsy.scriptModule.CreateInterpreter(); bitsy.dialogModule = new bitsy.Dialog(); bitsy.dialogRenderer = bitsy.dialogModule.CreateRenderer(); bitsy.dialogBuffer = bitsy.dialogModule.CreateBuffer(); } var currentMusic; var roomMusicFlag = null; function playSound(soundParam) { if (!soundParam) { return; } document.getElementById(soundParam).play(); } function changeMusic(newMusic) { if (!newMusic) { return; } if (newMusic === currentMusic) { return; } if (newMusic === 'S') { if (currentMusic !== 'S' && currentMusic) { document.getElementById(currentMusic).pause(); document.getElementById(currentMusic).currentTime = 0.0; } currentMusic = newMusic; return; } if (currentMusic === undefined) { document.getElementById(newMusic).play(); currentMusic = newMusic; } else { if (currentMusic !== 'S'&& currentMusic) { document.getElementById(currentMusic).pause(); document.getElementById(currentMusic).currentTime = 0.0; } document.getElementById(newMusic).play(); currentMusic = newMusic; } } after('drawRoom', function () { if (roomMusicFlag !== bitsy.curRoom) { changeMusic(hackOptions.musicByRoom[bitsy.curRoom]); roomMusicFlag = bitsy.curRoom; } }); var queuedMusic = null; // Hook into game load and rewrite custom functions in game data to Bitsy format. before('load_game', function (game_data, startWithTitle) { // Rewrite custom functions' parentheses to curly braces for Bitsy's // interpreter. Unescape escaped parentheticals, too. var fixedGameData = game_data .replace(/(^|[^\\])\((music(End)? ".+?")\)/g, "$1{$2}") // Rewrite (music...) to {music...} .replace(/\\\((music(End)? ".+")\\?\)/g, "($1)") // Rewrite \(music...\) to (music...) .replace(/(^|[^\\])\((soundeffect ".+?")\)/g, "$1{$2}") // Rewrite (soundeffect) to {soundeffect} .replace(/\\\((soundeffect ".+")\\?\)/g, "($1)"); // Rewrite \(soundeffect...\) to (soundeffect...) return [fixedGameData, startWithTitle]; }); // Hook into the game reset and make sure music data gets cleared. after('clearGameData', function () { queuedMusic = null; }); // Hook into the dialog finish event; if there was a {musicEnd}, play it now. after('onExitDialog', function () { if (queuedMusic) { changeMusic(queuedMusic); queuedMusic = null; } }); // Implement the {music} dialog function. It changes the music track as soon as // it is called. bitsy.musicFunc = function (environment, parameters, onReturn) { var musicParams = _getMusicParams('music', parameters); if (!musicParams) { return; } changeMusic(musicParams); onReturn(null); }; // Implement the {musicEnd} dialog function. It saves the new track name and // changes it once the dialog closes. bitsy.musicEndFunc = function (environment, parameters, onReturn) { queuedMusic = _getMusicParams('musicEnd', parameters); onReturn(null); }; bitsy.soundeffectFunc = function (environment, parameters, onReturn) { var soundParams = _getMusicParams('soundeffect', parameters); if (!soundParams) { return; } playSound(soundParams); onReturn(null); }; // Rewrite the Bitsy script tag, making these new functions callable from dialog. inject$1( 'var functionMap = new Map();', 'functionMap.set("music", musicFunc);', 'functionMap.set("musicEnd", musicEndFunc);', 'functionMap.set("soundeffect", soundeffectFunc);' ); function _getMusicParams(musicFuncName, parameters) { var params = parameters[0].split(','); var trackName = params[0]; if (!trackName) { console.warn('{' + musicFuncName + '} was missing parameters! Usage: {' + musicFuncName + ' "track name"}'); return null; } return trackName; } // End of (music) dialog function mod }(window)); /** <ØÁß @file transparent sprites @summary makes all sprites have transparent backgrounds @license MIT @version 1.0.0 @author Sean S. LeBlanc @description Makes all sprites have transparent backgrounds. i.e. tiles can be seen underneath the player, sprites, and items. HOW TO USE: Copy-paste this script into a script tag after the bitsy source */ (function (bitsy) { 'use strict'; var hackOptions = { // if true, overrides scaling behaviour to reduce the setup time + memory use, // but the game will be blurry unless you've added pixelated image CSS scaling: false }; bitsy = bitsy && bitsy.hasOwnProperty('default') ? bitsy['default'] : bitsy; // override imageDataFromImageSource to use transparency for background pixels // and save the results to a custom image cache var _imageDataFromImageSource = bitsy.imageDataFromImageSource; bitsy.imageDataFromImageSource = function (imageSource, pal) { var cache; return function (args) { if (cache) { return cache; } // get the bitsy image data var img = _imageDataFromImageSource.apply(undefined, args); // make background pixels transparent var bg = bitsy.getPal(pal)[0]; var i; // discard unnecessary pixels if (hackOptions.scaling) { var scaledImg = bitsy.ctx.createImageData(img.width / bitsy.scale, img.height / bitsy.scale); for (var y = 0; y < scaledImg.height; ++y) { for (var x = 0; x < scaledImg.width; ++x) { var idx = (y * scaledImg.width + x) * 4; var idx2 = (y * bitsy.scale * img.width + x * bitsy.scale) * 4; scaledImg.data[idx + 0] = img.data[idx2 + 0]; scaledImg.data[idx + 1] = img.data[idx2 + 1]; scaledImg.data[idx + 2] = img.data[idx2 + 2]; scaledImg.data[idx + 3] = img.data[idx2 + 3]; } } img = scaledImg; } // set background pixels to transparent for (i = 0; i < img.data.length; i += 4) { if ( img.data[i + 0] === bg[0] && img.data[i + 1] === bg[1] && img.data[i + 2] === bg[2] ) { img.data[i + 3] = 0; } } // give ourselves a little canvas + context to work with var spriteCanvas = document.createElement("canvas"); spriteCanvas.width = bitsy.tilesize * (hackOptions.scaling ? 1 : bitsy.scale); spriteCanvas.height = bitsy.tilesize * (hackOptions.scaling ? 1 : bitsy.scale); var spriteContext = spriteCanvas.getContext("2d"); // put bitsy data to our canvas spriteContext.clearRect(0, 0, bitsy.tilesize, bitsy.tilesize); if (hackOptions.scaling) { spriteContext.putImageData(img, 0, 0, 0, 0, bitsy.tilesize, bitsy.tilesize); } else { spriteContext.putImageData(img, 0, 0); } // save it in our cache cache = spriteCanvas; // return our image return cache; }.bind(undefined, arguments) }; // override drawTile to draw from our custom image cache // instead of putting image data directly bitsy.drawTile = function (img, x, y, context) { if (!context) { //optional pass in context; otherwise, use default context = bitsy.ctx; } if (hackOptions.scaling) { context.drawImage( img(), x * bitsy.tilesize * bitsy.scale, y * bitsy.tilesize * bitsy.scale, bitsy.tilesize * bitsy.scale, bitsy.tilesize * bitsy.scale ); } else { context.drawImage( img(), x * bitsy.tilesize * bitsy.scale, y * bitsy.tilesize * bitsy.scale ); } }; }(window)); /* NEW SCRIPT STUFF */ var scriptModule = new Script(); var scriptInterpreter = scriptModule.CreateInterpreter(); var scriptUtils = scriptModule.CreateUtils(); // TODO: move to editor.js? // scriptInterpreter.SetDialogBuffer( dialogBuffer ); </script> </head> <!-- DOCUMENT BODY --> <body onload='startExportedGame()'> <!-- GAME CANVAS --> <canvas id='game'style='-ms-interpolation-mode: nearest-neighbor; image-rendering: -moz-crisp-edges; image-rendering: pixelated;'></canvas> </body> </html>