Tablet V source code View raw source. pico-8 cartridge // http://www.pico-8.com version 42 __lua__ -- tablet v -- cork game jam 2024 -- caoimhe -- https://oakreef.ie -- made with advanced micro olatformer starter kit -- https://www.lexaloffle.com/bbs/?tid=28793 --config -------------------------------- --sfx snd= { jump=0, } --music tracks mus= { } -->8 -->8 --maths -------------------------------- --point to box intersection. function intersects_point_box(px,py,x,y,w,h) if flr(px)>=flr(x) and flr(px)<flr(x+w) and flr(py)>=flr(y) and flr(py)<flr(y+h) then return true else return false end end --box to box intersection function intersects_box_box( x1,y1, w1,h1, x2,y2, w2,h2) local xd=x1-x2 local xs=w1*0.5+w2*0.5 if abs(xd)>=xs then return false end local yd=y1-y2 local ys=h1*0.5+h2*0.5 if abs(yd)>=ys then return false end return true end --check if pushing into side tile and resolve. --requires self.dx,self.x,self.y, and --assumes tile flag 0 == solid --assumes sprite size of 8x8 function collide_side(self) local offset=self.w/3 for i=-(self.w/3),(self.w/3),2 do if self.dx < 0 then if self.x < 4 then self.x=4 self.dx=0 return true end end --if self.dx>0 then if fget(mget((self.x+(offset))/8,(self.y+i)/8),0) then self.dx=0 self.x=(flr(((self.x+(offset))/8))*8)-(offset) return true end --elseif self.dx<0 then if fget(mget((self.x-(offset))/8,(self.y+i)/8),0) then self.dx=0 self.x=(flr((self.x-(offset))/8)*8)+8+(offset) return true end -- end end --didn't hit a solid tile. return false end --check if pushing into floor tile and resolve. --requires self.dx,self.x,self.y,self.grounded,self.airtime and --assumes tile flag 0 or 1 == solid function collide_floor(self) --only check for ground when falling. if self.dy<0 then return false end local landed=false --check for collision at multiple points along the bottom --of the sprite: left, center, and right. for i=-(self.w/3),(self.w/3),2 do local tile=mget((self.x+i)/8,(self.y+(self.h/2))/8) if fget(tile,0) or (fget(tile,1) and self.dy>=0) then self.dy=0 self.y=(flr((self.y+(self.h/2))/8)*8)-(self.h/2) self.grounded=true self.airtime=0 landed=true end end return landed end --check if pushing into roof tile and resolve. --requires self.dy,self.x,self.y, and --assumes tile flag 0 == solid function collide_roof(self) --check for collision at multiple points along the top --of the sprite: left, center, and right. for i=-(self.w/3),(self.w/3),2 do if fget(mget((self.x+i)/8,(self.y-(self.h/2))/8),0) then self.dy=0 self.y=flr((self.y-(self.h/2))/8)*8+8+(self.h/2) self.jump_hold_time=0 end end end --make 2d vector function m_vec(x,y) local v= { x=x, y=y, --get the length of the vector get_length=function(self) return sqrt(self.x^2+self.y^2) end, --get the normal of the vector get_norm=function(self) local l = self:get_length() return m_vec(self.x / l, self.y / l),l; end, } return v end --square root. function sqr(a) return a*a end --round to the nearest whole number. function round(a) return flr(a+0.5) end -->8 --utils -------------------------------- cptspr = {1,2,3,20,21,22,23,65,66,67,68,69,70,71,72,73,74,128,129,130,144,145,146,161} --print with corrupt characters function printx(str,x,y,col) print(str,x,y,col) local st=-1 local nd=-1 for i=1,#str do if str[i] == '#' then --print('#',x+i*4-4,y,8) if st==-1 then st=i nd=i else nd=i end else if st!=-1 then rectfill(x+(st-1)*4-1, y-1, x+(st+nd-st)*4-1, y+5,4) for j=0,nd-st do srand(i+j+st+nd+#str) local s=rnd(cptspr) local xf = flr(rnd(4)) local yf = flr(rnd(2)) for i=0,15 do pal(i,rnd({0,1,2,3,4,5,6,7})) end sspr(s%16*8+xf, flr(s/16)*8+yf, 4, 6, x+(st+j-1)*4-1, y-1) pal() end st=-1 nd=-1 end end end srand(time()) end --print string with outline. function printo(str,startx, starty,col, col_bg) print(str,startx+1,starty,col_bg) print(str,startx-1,starty,col_bg) print(str,startx,starty+1,col_bg) print(str,startx,starty-1,col_bg) print(str,startx+1,starty-1,col_bg) print(str,startx-1,starty-1,col_bg) print(str,startx-1,starty+1,col_bg) print(str,startx+1,starty+1,col_bg) print(str,startx,starty,col) end --print string centered with --outline. function printc( str,x,y, col,col_bg, special_chars) local len=(#str*4)+(special_chars*3) local startx=x-(len/2) local starty=y-2 printo(str,startx,starty,col,col_bg) end --objects -------------------------------- --make the player function m_player(x,y) --todo: refactor with m_vec. local p= { x=x, y=y, dx=0, dy=0, w=8, h=16, max_dx=0.6,--max x speed max_dy=2,--max y speed jump_speed=-1.5,--jump veloclity acc=0.05,--acceleration dcc=0.9,--decceleration air_dcc=0.98,--air decceleration grav=0.15, attacking=0, --helper for more complex --button press tracking. --todo: generalize button index. attack_button= { update=function(self) --start with assumption --that not a new press. self.is_pressed=false if btn(4) then if not self.is_down then self.is_pressed=true end self.is_down=true self.ticks_down+=1 else self.is_down=false self.is_pressed=false self.ticks_down=0 end end, --state is_pressed=false,--pressed this frame is_down=false,--currently down ticks_down=0,--how long down }, jump_button= { update=function(self) --start with assumption --that not a new press. self.is_pressed=false if btn(5) then if not self.is_down then self.is_pressed=true end self.is_down=true self.ticks_down+=1 else self.is_down=false self.is_pressed=false self.ticks_down=0 end end, --state is_pressed=false,--pressed this frame is_down=false,--currently down ticks_down=0,--how long down }, jump_hold_time=0,--how long jump is held min_jump_press=5,--min time jump can be held max_jump_press=10,--max time jump can be held jump_btn_released=true,--can we jump again? grounded=false,--on ground airtime=0,--time since grounded --animation definitions. --use with set_anim() anims= { ["stand"]= { ticks=1,--how long is each frame shown. frames={2},--what frames are shown. }, ["walk"]= { ticks=8, frames={3,4,5,6}, }, ["jump"]= { ticks=1, frames={1}, }, ["slide"]= { ticks=1, frames={7}, }, }, atk_len=18, atk_anims = { {8,16,8,4,-3,-3}, {17,16,10,3,-3,-3}, {17,16,12,3,-2,-2}, {32,16,8,6,-3,-3}, {40,16,8,6,-3,-3}, }, curanim="walk",--currently playing animation curframe=1,--curent frame of animation. animtick=0,--ticks until next frame should show. flipx=false,--show sprite be flipped. --request new animation to play. set_anim=function(self,anim) if(anim==self.curanim)return--early out. local a=self.anims[anim] self.animtick=a.ticks--ticks count down. self.curanim=anim self.curframe=1 end, --call once per tick. update=function(self) --todo: kill enemies. --track button presses local bl=btn(0) --left local br=btn(1) --right --move left/right if self.attacking>self.atk_len-6 or not(bl or br) then if self.grounded then self.dx*=self.dcc else self.dx*=self.air_dcc end elseif bl then self.dx-=self.acc br=false--handle double press elseif br then self.dx+=self.acc end --limit walk speed self.dx=mid(-self.max_dx,self.dx,self.max_dx) --move in x self.x+=self.dx --hit walls collide_side(self) --jump buttons self.jump_button:update() self.attack_button:update() --jump is complex. --we allow jump if: -- on ground -- recently on ground -- pressed btn right before landing --also, jump velocity is --not instant. it applies over --multiple frames. if self.jump_button.is_down then --is player on ground recently. --allow for jump right after --walking off ledge. local on_ground=(self.grounded or self.airtime<5) --was btn presses recently? --allow for pressing right before --hitting ground. local new_jump_btn=self.jump_button.ticks_down<10 --is player continuing a jump --or starting a new one? if self.jump_hold_time>0 or (on_ground and new_jump_btn) then if(self.jump_hold_time==0)sfx(snd.jump)--new jump snd self.jump_hold_time+=1 --keep applying jump velocity --until max jump time. if self.jump_hold_time<self.max_jump_press then self.dy=self.jump_speed--keep going up while held end end else self.jump_hold_time=0 end if self.attacking > 0 then self.attacking-=1 else if self.attack_button.is_pressed then self.attacking=self.atk_len end end --move in y self.dy+=self.grav self.dy=mid(-self.max_dy,self.dy,self.max_dy) self.y+=self.dy --floor if not collide_floor(self) then self:set_anim("jump") self.grounded=false self.airtime+=1 end --roof collide_roof(self) --handle playing correct animation when --on the ground. if self.grounded then if br then if self.dx<0 then --pressing right but still moving left. self:set_anim("slide") else self:set_anim("walk") end elseif bl then if self.dx>0 then --pressing left but still moving right. self:set_anim("slide") else self:set_anim("walk") end else self:set_anim("stand") end end --flip if br then self.flipx=false elseif bl then self.flipx=true end --anim tick self.animtick-=1 if self.animtick<=0 then self.curframe+=1 local a=self.anims[self.curanim] self.animtick=a.ticks--reset timer if self.curframe>#a.frames then self.curframe=1--loop end end end, --draw the player draw=function(self) local a=self.anims[self.curanim] local frame=a.frames[self.curframe] spr(frame, self.x-(self.w/2), self.y-(self.h/2), self.w/8,self.h/8, self.flipx, false) if self.attacking == 0 then sspr(0,16,6,8,self.x-3,self.y-3,6,8,self.flipx) else local l=self.atk_len local a=self.atk_anims[flr((l-self.attacking)/(l/#self.atk_anims))+1] local xf=self.flipx and a[4]-a[5]-14 or a[5] sspr(a[1],a[2],a[3],a[4],self.x+xf,self.y+a[6],a[3],a[4],self.flipx) end end, } return p end --make the camera. function m_cam(target) local c= { tar=target,--target to follow. pos=m_vec(target.x,target.y), --how far from center of screen target must --be before camera starts following. --allows for movement in center without camera --constantly moving. pull_threshold=16, --min and max positions of camera. --the edges of the level. pos_min=m_vec(64,64), pos_max=m_vec(960,64), shake_remaining=0, shake_force=0, update=function(self) self.shake_remaining=max(0,self.shake_remaining-1) --follow target outside of --pull range. if self:pull_max_x()<self.tar.x then self.pos.x+=min(self.tar.x-self:pull_max_x(),4) end if self:pull_min_x()>self.tar.x then self.pos.x+=min((self.tar.x-self:pull_min_x()),4) end if self:pull_max_y()<self.tar.y then self.pos.y+=min(self.tar.y-self:pull_max_y(),4) end if self:pull_min_y()>self.tar.y then self.pos.y+=min((self.tar.y-self:pull_min_y()),4) end --lock to edge if(self.pos.x<self.pos_min.x)self.pos.x=self.pos_min.x if(self.pos.x>self.pos_max.x)self.pos.x=self.pos_max.x if(self.pos.y<self.pos_min.y)self.pos.y=self.pos_min.y if(self.pos.y>self.pos_max.y)self.pos.y=self.pos_max.y end, cam_pos=function(self) --calculate camera shake. local shk=m_vec(0,0) if self.shake_remaining>0 then shk.x=rnd(self.shake_force)-(self.shake_force/2) shk.y=rnd(self.shake_force)-(self.shake_force/2) end return self.pos.x-64+shk.x,self.pos.y-64+shk.y end, pull_max_x=function(self) return self.pos.x+self.pull_threshold end, pull_min_x=function(self) return self.pos.x-self.pull_threshold end, pull_max_y=function(self) return self.pos.y+self.pull_threshold end, pull_min_y=function(self) return self.pos.y-self.pull_threshold end, shake=function(self,ticks,force) self.shake_remaining=ticks self.shake_force=force end } return c end -->8 --game flow -------------------------------- --reset the game to its initial --state. use this instead of --_init() function reset() ticks=0 p1=m_player(8,100) p1:set_anim("walk") cam=m_cam(p1) end -->8 --p8 functions -------------------------------- function _init() reset() end function _update60() ticks+=1 p1:update() cam:update() --demo camera shake -- if(btnp(4))cam:shake(15,2) end function _draw() cls(0) camera(cam:cam_pos()) map(0,0,0,0,128,128) p1:draw() --hud camera(0,0) clip(0,0,128,32) rectfill(0,0,127,32,4) for i, l in pairs(text[1]) do local y=32+8*i-time()*4 if y >-6 and y< 36 then printx(l,2,32+8*i-time()*4,0) end end clip() palt(7,true) palt(0,false) sspr(0,88,128,8,0,32) palt() end -->8 --text text={ { " tablet v", "", "they stood at the forest's edge", "gazing at the top of the cedar", "tree, gazing at the entrance to", "the forest. where humbaba would", "walk there was a trail, the", "roads led straight on, the path", "was excellent. then they saw", "the cedar mountain, the", "dwelling of the gods, the", "throne dais of imini.", "across the face of the mountain", "the cedar brought forth", "luxurious foliage, its shade", "was good, extremely pleasant.", "the thornbushes were matted", "together, the w##d# were a", "thicket ### #### among the", "cedars, ### ## ## ## #### ", "#### the boxwood, the forest", "was surrounded by a ravine two", "leagues long, ########### ## ", "## #### #### ############### ", "and again for two-thirds,", "#### #### ## #### ########## ", "############################# ", "############ ################ ", "##### ############ ########## ", "##### suddenly the swords ### ", "and after the sheaths ####### ", "#####the axes were smeared### ", "##################dagger and sword", "", "", "", "", "", " alone", "", "", "", "", "", "humbaba spoke to gilgamesh saying:", "\"he does not come###### ", "####################################### ", "################################## ", "###################################### ", "###########enlil####################### ", "enkidu spoke to humbaba, saying:", "\"humbaba #### one alone", "#####strangers###### ", "a slippery path is not feared", "by two people who help each", "other.", "", "", "", "twice three times...", "a three-ply rope cannot be cut", "the mighty lion--two cubs can roll him over." }} __gfx__ 01234567000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 89abcdef000111000001110000011100000111000001110000011100000111000000000000000000000000000000000000000000000000000000000000000000 00700700001414000014140000141400001414000014140000141400001414000000000000000000000000000000000000000000000000000000000000000000 00077000001444000014440000144400001444000014440000144400001444000000000000000000000000000000000000000000000000000000000000000000 00077000001144000011440000114400001144000011440000114400001144000000000000000000000000000000000000000000000000000000000000000000 00700700022122000221220002212200002122000021220002212200022122000000000000000000000000000000000000000000000000000000000000000000 00000000022122000221220002212200002122000021220002212200022122000000000000000000000000000000000000000000000000000000000000000000 00000000002222000022220000222200002222000022220000222200002222000000000000000000000000000000000000000000000000000000000000000000 00000000001220000012204000122040001224000012200000122400001220000000000000000000000000000000000000000000000000000000000000000000 00000000001220000012200400122004001224000012200000122400001220000000000000000000000000000000000000000000000000000000000000000000 00000000001222000012220000122200001222000012220000122200001222000000000000000000000000000000000000000000000000000000000000000000 00000000004022000012220000122200001222000012220000122200001222000000000000000000000000000000000000000000000000000000000000000000 00000000004005000042220000222220000455000022222000045500000405000000000000000000000000000000000000000000000000000000000000000000 00000000040050000040050004400050005400000550004000540000000405000000000000000000000000000000000000000000000000000000000000000000 00000000044055000040050004000050005440000500004000544000004000500000000000000000000000000000000000000000000000000000000000000000 00000000000000000044055004400055000440000550004400044000004400550000000000000000000000000000000000000000000000000000000000000000 2200000022000000a224449aaaaaa000220000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000 220000002200090002200900000000002200000a2200000000000000000000000000000000000000000000000000000000000000000000000000000000000000 4000000004449aaa0000000000000000040000aa0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000 4000000000090000000000000000000000490aa00409000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0490000000000000000000000000000000049a000049aaaa00000000000000000000000000000000000000000000000000000000000000000000000000000000 09aa0000000000000000000000000000000009000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000aa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1ff11ff10bbbbbbbbbbbbbb0000013bbbb310000bbbbbbbb000013bb00000000b3b1000000100100001001000000000000000000000000000000008882888200 49944994bb3b3b3bb3b3b3bb00013b3bb3331000b3b3b3b300133b3b00000000bb33100001011000000110100001000000000000000000000000082888288280 01100110b3b333333b3b3b3b000013bbbb3100003b3b3b3b000133bb00001010b3b1000010101011110101010000001000000000000000000000888288888882 00000000bb333131131333bb01013b3bb33310101333313100133b3b01013130bb33100010011101101110010000000000000000000000000088888889998828 00000000b3b310100101333b131333bbbb33313103131010000133bb13133331b3b33100011000100100011001000000000000000000000008118899a00a9888 00000000bb310000000013bb33333b3bb3b3b3b30101000000001b3bb3b3b3b3bb33100010101100001101010000000000000000000000008118899000009982 00000000b3b310000001333bb3b3b3bbbb3b3b3b00000000000133bb3b3b3b3bb3b33100101101011010110100000100000000000000000088889a000000a928 00000000bb310000000013bbbbbbbbb00bbbbbbb0000000000001b3bbbbbbbbbbb31000011000110011000110000000000000000000000008880900000099a88 10000000000000010001333bb3331000000000000000000000000000cccccccc0000000000000000000000000000000000000000000000000007900000099882 1010001000010101000013b33b3100000000000000000000000000000c0c00c00000000000000000000000000000000000000000000000000079900000099828 10000000100000010000133bb3310000000000000000000000000000000001000000000000000000000000000000000000000000000000000799000000aa8880 10101000001010010000011331100000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000998880 11000000000100010000010110100000000000000000000000000000001010010000000000000000000000000000000000000000000000000000000000998820 100100010000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a8280 11000000000000010000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000a98882 10000000010000010000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000998828 10100000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000998888 10010000000010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000998882 100000000010000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a8828 10100000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a98888 10000000010001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009998882 00000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009998822 00000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000998828 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a8888 00000000000000000000000000000000000000000000000000000000500500500000000000000000000000000000000000000000000000001ff11ff11ff11ff1 00000000000000000000000000000000000000000000900000000000550600000000000000000000000000000000000000000000000000004994499449944994 00000000000000000000000000000000000000000009a90000000000605500000000000000000000000000000000000000000000000000000110011001198118 0000000000000000000000000000000000000000000a7a0000000000600500000000000000000000000000000000000000000000000000000000000000098888 00000000000000000000000000055500000000000009f900000000000006000000000000000000000000000000000000000000000000000000000000000a8822 00000000000000000000000000555550000000000001400000000000000600000000000000000000000000000000000000000000000000000000000000099888 0000000000000000000000000005055000500000000140000033500000060000000000000000000000000000000000000000000000000000000000000000a988 00000000000000000000000000555500055005000000100003555300000000000000000000000000000000000000000000000000000000000000000000009988 000ffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00ff6666666666666666ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00f6fffff6f6f6f6ffff6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00f6ff6ff6f6f6f6f6ff6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00ff66fff6f6f6f6ff66ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000ffff0f6f6f6f60ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000f6f6f6f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000f6f6f6f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 66666666f6f6f6f60666666000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 6ffffff6f6f6f6f66fff6ff600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 6ffffff6f6f6f6f66ffff6f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 6ffffff6f6f6f6f66ffffff600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 6ffffff6f6f6f6f66ffffff600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 6ffffff6f6f6f6f66ffffff600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 6ffffff6f6f6f6f66ffffff600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 66666666f6f6f6f60666666000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000f6f6f6f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000f6f6f6f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000f6f6f6f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000f6f6f6f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000006666666666000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000006ffffffffff600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000006ffffffffffff60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00006666666666666666000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00444444444000000000000044444444444444444444444440000004444444444444444444444444444444444444444444444444444444444444444444444444 00000400000044440000000000444444444444444444000004444400000004444444400000000000000000000000444444444444400000044444444444000000 04440004444444444444444044000000000000000000444444444444444440000000004404444444444044444440000000000000004444400000000000044444 00444404444440444444444044444444444444444444444404444400444444444444444440444444444404444444444444444404444444404444444444404444 70044440044444044444444400000000000044444444404444444444000044444444444444000000000004444444444444444440000000004444444444440400 77704444404000000000000007777777777700000044444444444444444444000440000000077777777770000000000000000000777777770000000000000007 77770000000077777777777777777777777777777000000000000000000000077000777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737 __label__ 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444440004000400040444000400044444040444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444044040404040444044440444444040444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444044000400440444004440444444040444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444044040404040444044440444444000444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444044040400040004000440444444404444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44000404040004040444444004000440044004004444440004000444440004040400044444000440040004000440040004404440044444000400444004000444 44404404040444040444440444404404040404040444440404404444444044040404444444044404040404044404444044044404444444044404040444044444 44404400040044000444440004404404040404040444440004404444444044000400444444004404040044004400044044444400044444004404040444004444 44404404040444440444444404404404040404040444440404404444444044040404444444044404040404044444044044444444044444044404040404044444 44404404040004000444440044404400440044000444440404404444444044040400044444044400440404000400444044444400444444000400040004000444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 44400400040004000400444004444400040004444400040404000444440004400400044444400400044444000404040004444440040004004400040004444444 44044404044404404404040444444404044044444440440404044444444044040404044444040404444444404404040444444404440444040404040404444444 00444444444000000000000044444444444444444444444440000004444444444444444444444444444444444444444444444444444444444444444444444444 00000400000044440000000000444444444444444444000004444400000004444444400000000000000000000000444444444444400000044444444444000000 04440004444444444444444044000000000000000000444444444444444440000000004404444444444044444440000000000000004444400000000000044444 00444404444440444444444044444444444444444444444404444400444444444444444440444444444404444444444444444404444444404444444444404444 00044440044444044444444400000000000044444444404444444444000044444444444444000000000004444444444444444440000000004444444444440400 00004444404000000000000001011010110000000044444444444444444444000440000000000000000000000000000000000000110000110000000000000000 00000000000000000000101011011011010100000000000000000000000000000000000001000000000000000000101101011011010110101101101101011011 00000110001100000000011000111100011000000000000000000000000000000000000000000000000000000000110001101100011001100011110001101100 01000010010000100100000000000000000000100100001001000000000000000000000000000000000100000000000000000010010010000000000000000000 10100101100000011010000000000000000001011000010110000001000000000000000000000001010100010000000000000001101010100010000000000000 01011010101111010101000000000000000010101011101010110000001000000000000000001000000100000010000000001101010110000000000000000000 10011001110110111001000000000000000010011101100111010000000000000000000000000010100100000000000000001011100110101000000000000000 01100110001001000110000000000000000001100010011000100100000000000000000000000001000101000000000000000100011011000000000000000000 01011010110000110101000000000000000010101100101011000000000000000000000000000000010100000000000000000011010110010001000000000000 11011011010110101101000000000000000010110101101101010000010000000000000000000000000100000100000000001010110111000000000000000000 00111100011001100011000000000000000011000110110001100000000000000000000000000100000100000000000000000110001110000000000000000000 01000000000000100100000000000000000000100100001001000010010000000000100000000000000100000000001001000010010010000000000000000000 10100000000000011010000000000000000001011000010110000101100000000000101000100001010100000000000110100001101010100010000000000001 01010000000011010101000000000000000010101011101010111010101100000000100000001000000100000000110101011101010110000000000000000000 10010000000010111001000000000000000010011101100111011001110100000000101010000010100100000000101110011011100110101000000000000000 01100000000001000110000000000000000001100010011000100110001000000000110000000001000100000000010001100100011011000000000000000100 01010000000000110101000000000000000010101100101011001010110000000000100100010000010100000000001101010011010110010001000000000000 11010000000010101101000000000000000010110101101101011011010100000000110000000000000100000000101011011010110111000000000000000000 00110000000001100011000000000000000011000110110001101100011000000000100000000100000100000000011000110110001110000000000000000000 00000010010000000000000000000000000000000000000000000010010000100100100000000000000100100100001001000000000010000000000000000000 00000001101000000000000000000000000000000000000000000101100001011000101000100001010100011010000110100000000010100010000000000000 00001101010100000000000000000000000000000000000000001010101110101011100000001000000111010101110101010000000010000000000000000000 00001011100100000000000000000000000000000000000000001001110110011101101010000010100110111001101110010000000010101000000000000000 00000100011000000000000000000000000000000000000000000110001001100010110000000001000101000110010001100000000011000000000000000000 00000011010100000000000000000000000000000000000000001010110010101100100100010000010100110101001101010000000010010001000000000000 00001010110100000000000000000000000000000000000000001011010110110101110000000000000110101101101011010000000011000000000000000000 00000110001100000000000000000000000000000000000000001100011011000110100000000100000101100011011000110000000010000000000000000000 01000010010000000000000000000000000000000000000000000000000000000000100000000000000100000000000000000000000010000000000000000000 10100101100000000000000000000000000000000000000000000000000000000000101000100001010100000000000000000000000010100010000000000000 01011010101100000000000000000000000000000000000000000000000000000000100000001000000100000000000000000000000010000000000000000000 10011001110100000000000000000000000000000000000000000000000000000000101010000010100100000000000000000000000010101000000000000000 01100110001000000000000000000000000000000000000000000000000000000000110000000001000100000000000000000000000011000000000000000000 01011010110000000000000000000000000000000000000000000000000000000000100100010000010100000000000000000000000010010001000000000000 11011011010100000000000000000000000000000000000000000000000000000000110000000000000100000000000000000000000011000000000000000000 00111100011000000000000000000000000000000000000000000000000000000000100000000100000100000000000000000000000010000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000101000100000000000000000000000000000000010100010000000000000 00000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000101010000000000000000000000000000000000010101000000000000000 00000000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000011000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000100100010000000000000000000000000000000010010001000000000000 00000000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000011000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000001110000000000000000000000000010100010000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000014140000000000000000000000000010000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000014440000000000000000000000000010101000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000011440000000000000000000000000011000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000221220000000000000000000000000010010001000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000221220000000000000000000000000011000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000422220000000000000000000000000010000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000412200000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000049200000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000009aa20000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000012aa0000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000422aa000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000040040000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000044044000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000044044000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00110 00000000000000000000000000000000000000000000000000000000000000000000bb3b3b3bb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bb1ff1 00000000000000000000000000000000000000000000000000000000000000000000b3b333333b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b4994 00000000000000000000000000000000000000000000000000000000000000000000bb3331311333313113333131133331311333313113333131131333bb0110 00000000000000000000000000000000000000000000000000000000000000055500b3b3101003131010031310100313101003131010031310100101333b0000 00000000000000000000000000000000000000000000000000000000000000555550bb3100000101000001010000010100000101000001010000000013bb0000 00000000000000000000000000000000000000000000000000000000000000050550b3b3100000000000000000000000000000000000000000000001333b0000 00000000000000000000000000000000000000000000000000000000000000555500bb3100000000000000000000000000000000000000000000000013bb0000 0000000000000000000000000000000000000000000000000000000000000bbbbbbb001001000000000000000000000000000000000000000000000013bb0000 000000000000000000000000000000000000000000000000000000000000bb3b3b3b00011010000000000000000000000000000000000000000000133b3b0000 000000000000000000000000000000000000000000000000000000000000b3b33333110101010000000000000000000000000000000000000000000133bb0000 000000000000000000000000000000000000000000000000000000000000bb33313110111001000000000000000000000000000000000000000000133b3b0000 000000000000000000000000000000000000000000000000000000000000b3b31010010001100000000000000000000000000000000000000000000133bb0000 000000000000000000000000000000000000000000000000000000000000bb31000000110101000000000000000000000000000000000000000000001b3b0000 000000000000000000000000000000000000000000000000000000335000b3b31000101011010000000000000000000000000000000000000000000133bb0000 000000000000000000000000000000000000000000000000000003555300bb31000001100011000000000000000000000000000000000000000000001b3b0000 00000000000000000000000000000000000000000000000000000bbbbbbb0010010000000000000000000000000000000000000000000000000000100100cccc 0000000000000000000000000000000000000000000000000000bb3b3b3b01011000000000000000000000000000000000000000000000000000000110100c0c 0000000000000000000000000000000000000000000000000000b3b3333310101011000000000000000000000000000000000000000000000000110101010000 0000000000000000000000000000000000000000000000000000bb33313110011101000000000000000000000000000000000000000000000000101110010100 0000000000000000000000000000000000000000000000000000b3b3101001100010000000000000000000000000000000000000000000000000010001100010 0000000000000000000000000000000000000000000000000000bb31000010101100000000000000000000000000000000000000000000000000001101010000 5000000000000000000000000000000000000000000000500000b3b3100010110101000000000000000000000000000000000000000000000000101011010100 5300000000000000000000000000000000000000000005500500bb31000011000110000000000000000000000000000000000000000000000000011000110000 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb3b1000000000000001001000000000000000000000000000000000000000000001001000000 b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bb33100000000000000110100000000000000000000000000000000000000000000110100000 3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bb3b1000000000000110101010000000000000000000000000000000000000000110101010000 3131133331311333313113333131133331311333313113333131bb33100000000000101110010000000000000000000000000000000000000000101110010000 1010031310100313101003131010031310100313101003131010b3b3310000000000010001100000000000000000000000000000000000000000010001100000 0000010100000101000001010000010100000101000001010000bb33100000000000001101010000000000000000000000000000000000000000001101010000 0000000000000000000000000000000000000000000000000000b3b3310000000000101011010000000000000000000000000000000000000000101011010000 0000000000000000000000000000000000000000000000000000bb31000000000000011000110000000000000000000000000000000000000000011000110000 __gff__ 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002010101010101010100000001000000000001010000000000000000000000100000000000000000000000000000020201010000000000000000000000000202 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __map__ 71717171717171717171717171717171717100000000004949490000000000004b4b00004a494a4a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073737373737373737373737373737373 7070707070707070704970707070704a4900000000004a4b4a49494949490000004a4a4a004a4949000000000000004a4a0000004a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073737373737373737373737373737373 70707070707070707070707070707049000000000049494a494b4a00004a4949494a4b4a4a4a494a4a00000000004a4a4a0000004a4a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073737373737373737373737373737373 7070707049707049494a70707070704a004a494b4b0000004949494949494b4a4a0000004b4b4a4a00490000004a4a4a000000004a4a4a00000000004949000000000000004a00000000000000000000000000000000000000000000000000000000000000000000000000000000000073737373737373737373737373737373 70707070707049004a4949707070704a004a494b4b00004b000049494a49494949495149494a4a0000494949004a4a00000000004a4a4a4a4a00004949490000000000004a4a00007700000000000074770000000000000000005f00000000000000000000000000000000000000000073737373737373737373737373737373 49707049497049494a004a7070704a494a000049494b0000514b004a50000000004a4a4a00004949495000494900005100000000004a4a4a4a494949004a000000004a4a4a000000747400000000777700815f00000000005f919100000000000000000000000000000000000000000073737373737373737373737373737373 494970704970704a494a0070514a4a004a0000494949005051004a4a50004b0000005100000000000050000061000051000000000000004a4a494900004a0000004a4a4a0000000000747400007774779191915f5f5f815f91915f00000000000000000000000000000000000000000073737373737373737373737373737373 70704a4b494a4a50494949605151004a0000000000494950514a4a00500000000000510000000000005000006100005100000000000000514b500000000000005000490000000000770074774b77770000008191915f5f8191000000000000000000000000000000000000000000000073737373737373737373737373737373 4a500000614a4a500049005051614a490000000000000050510000005000004b4b0051000000000000500000610000510000000000000051005000000000000050004900000000000000005700400000000000009181826f00000000000000000000000000000000000000000000000073737373737373737373737373737373 0060004b610000500051005061510000000000000000005000000000500000000000510000000000000000006100000000000000000000514b60000000000073500049004e4f0000000000574b400000000000005e5f6f6f00000000000000000000000000000000000000000000000073737373737373737373737373737373 00604b00510000500051006051510000404040000000000000000000500000004b00000000000000000000000000000000000000000000610000000000000000500049005e5f0000000000574b400000000000005e825f6f00000000000000000000000000000000000000000000000073737373737373737373737373737373 0050000061000000005100505151000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f00000000005700400000000000005e00006f00000000000000000000000000000000000000000000000073737373737373737373737373737373 00504b0051000000000000606100004040404000000073414545454545424040404040404040404040404c404040404040404c4c40404040454040404040404040404040407f40404040404040404040404c4c4c4c4c4c4040404040444444444444444c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c404040 00600000000000737400000000510000000000000076414a0000000000460000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073737373737373737373737373737373 00760000000076414200760051517600000000007441497000000000004a5757575757575757575757575757575757575757575757575757575757575757575757575753575757575757575757575757575757575757575757575757575757575757575757575757737373737373737373737373737373737373737373737373 49454545454545535245454545454545454545454548704a00000000004a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __sfx__ 01060000250512b051330513d05100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000