Skip to content

Instantly share code, notes, and snippets.

@arachonteur
Created May 13, 2018 17:15
Show Gist options
  • Save arachonteur/ab35fe71a603f48e86b4ee8ff4f95be9 to your computer and use it in GitHub Desktop.
Save arachonteur/ab35fe71a603f48e86b4ee8ff4f95be9 to your computer and use it in GitHub Desktop.
Tiny Dungeon TIC-80 Cartridge & Source
-- title: Tiny Dungeon
-- author: team slime
-- desc: a dashing dungeon game
-- saveid: td
local a={}_mget=mget;_mset=mset;_btn=btn;_btnp=btnp;_sfx=sfx;local b=0;function sfx(...)if game.flags.sound then return _sfx(...)else return false end end;function mget(c,d)return _mget(Camera.x+c,Camera.y+d)end;function btn(...)local e=_btn(...)if e then game.moved=true end;return e end;function btnp(...)local e=_btnp(...)if e then game.moved=true end;return e end;function mset(c,d,f)if b==0 then a[c..","..d]={x=c,y=d,id=mget(c,d)}end;return _mset(Camera.x+c,Camera.y+d,f)end;t=0;lt=0;dt=0;dts={}avg_dt=0;game={qs=0,timer=0,width=240,height=138,roomWidth=30,roomHeight=17,collapse=0,shutter=0,buttons=0,broken=false,drawMap=false,orbs={},flagOrder={{"has_g","has_b","has_m","has_r"},{"sound","music","loaded","opened_final_zone"}},flags={has_r=false,has_b=false,has_g=false,has_m=false,sound=true,music=true,loaded=false,opened_final_zone=false},save=function(self)for g,h in ipairs(self.flagOrder)do local i=""for j,k in pairs(h)do if self.flags[k]then i=i.."1"else i=i.."0"end end;pmem(g,i)end end,load=function(self)for g,h in ipairs(self.flagOrder)do local l=tostring(pmem(g))for j,k in ipairs(h)do if l:sub(j,j)=="1"then trace(string.format("Flag %i:%i (%s): true",g,j,k))self.flags[k]=true else trace(string.format("Flag %i:%i (%s): false",g,j,k))self.flags[k]=false end end end;if not self.flags.loaded then self.flags={has_r=false,has_b=false,has_g=false,has_m=false,sound=true,music=true,loaded=true,opened_final_zone=false}self:save()self:load()end end,start={x=1,y=1},playerSpawn={x=0,y=0},current={x=1,y=1},checkPoint={},score=1000,speed=1,prompts={},scenes={},activeScene="menu",queuedScene=false,setScene=function(self,m)self.queuedScene=m;if self.scenes[m].resetOnLoad then self.scenes[m]=scene(self.scenes[m].init,true)end end,playing=1,queuePlay=1,play=function(self,f)if f~=self.playing then trace(string.format("Playing track %i",f))self:stop()self.queuePlay=f end end,stop=function(self)music()self.playing=false end,getEntities=function(self,n)if n==nil then n=function(entity)return true end end;local o={}for g,entity in pairs(self.scenes[self.activeScene].entities)do if n(entity)then table.insert(o,entity)end end;return o end,add=function(self,...)return self.scenes[self.activeScene]:add(...)end,get=function(self,...)return self.scenes[self.activeScene]:get(...)end,remove=function(self,...)return self.scenes[self.activeScene]:remove(...)end,update=function(self,...)return self.scenes[self.activeScene]:update(...)end,draw=function(self,...)return self.scenes[self.activeScene]:draw(...)end,cleanup=function(self)return self.scenes[self.activeScene]:cleanup()end}seenTiles={}Button={UP=0,DOWN=1,LEFT=2,RIGHT=3,A=4,B=5,X=6,Y=7}Camera={x=0,y=0,w=30,h=17,sx=0,sy=0,transparent=0,scale=1,visible=false,bg=0,offset={x=0,y=0}}GlitchTiles={}function cam()return Camera.x,Camera.y,Camera.w,Camera.h,Camera.sx,Camera.sy,Camera.transparent,Camera.scale,function(t,c,d)local player=game:get("player")if t==190 then if game.flags.controller then return 188 else return 190 end end;if t==191 then if game.flags.controller then return 189 else return 191 end end;if t==206 then if game.flags.controller then return 204 else return 206 end end;if t==207 then if game.flags.controller then return 205 else return 207 end end;if t==115 then return 0 end;if t==67 then if game.broken then if GlitchTiles[c..','..d]then return GlitchTiles[c..','..d]else GlitchTiles[c..','..d]=math.random(1,256)return GlitchTiles[c..','..d]end else return 1 end end;if t==68 then return game.flags.has_g and 69 or 68 end;if t==84 then return game.flags.has_b and 85 or 84 end;if t==100 then return game.flags.has_m and 101 or 100 end;if t==116 then return game.flags.has_r and 117 or 116 end;if t==70 then return not game.flags.has_g and 70 or 86 end;if t==71 then return not game.flags.has_b and 71 or 87 end;if t==72 then return not game.flags.has_m and 72 or 88 end;if t==73 then return not game.flags.has_r and 73 or 89 end;if game.collapse>0 then if math.random(1,math.max(1,math.floor(100-game.collapse)*100))==1 then return math.random(1,512)end end;if t==45 then if game.shutter>0 then if 0==game.lastShutter then local p=mtp(c-Camera.x,d-Camera.y)game:add(particle(p.x,p.y))end;return 13 else if game.shutter~=game.lastShutter then local p=mtp(c-Camera.x,d-Camera.y)game:add(particle(p.x,p.y))end;return 45 end end;if t==2 then return 0 end;if t==3 then local q=ptm(player.x,player.y)if math.dist(q.x,q.y,c-Camera.x,d-Camera.y)<=2.75 then return 1 else return 0 end end;if t==16 or t==18 or t==20 or t==22 then return 15 end;if t==17 or t==19 or t==21 or t==23 then return 15,2,0 end;if t==33 or t==35 or t==37 or t==39 then return 15,0,1 end;if t==32 or t==34 or t==36 or t==38 then return 15,0,3 end;if t==7 then if game:get("player").state==PlayerState.DASH or btn(Button.A)and game:get("player").state==PlayerState.MOVE then return 7 else return 6 end end;if isPit(t)then local r=mtp(c-Camera.x,d-Camera.y)if math.random(1,500)==1 then game:add(particle(r.x,r.y,0,math.random(5,20),math.random(1,2)==1 and{498}or{499},math.random(1,10)/10))end;return t end;return t end end;function printf(s,c,d,u,v,...)u=u and u or 1;v=v and v or 15;local w={{x=0,y=1},{x=1,y=0},{x=-1,y=0},{x=0,y=-1}}for g,x in pairs(w)do print(s,c+x.x,d+x.y,u,...)end;return print(s,c,d,v,...)end;function math.dist(y,z,A,B)return((A-y)^2+(B-z)^2)^0.5 end;function math.sign(C)return C>0 and 1 or C<0 and-1 or 0 end;function math.lerp(D,E,t)return(1-t)*D+t*E end;function math.cerp(D,E,t)local F=(1-math.cos(t*math.pi))*.5;return D*(1-F)+E*F end;function math.clamp(G,H,I,J)if J==nil then J=false end;assert(G and H and I,"math.clamp called with not enough arguments.")if H>I then H,I=I,H end;if J then if G<H then return I elseif G>I then return H else return G end end;return math.max(H,math.min(I,G))end;function math.multiple(C,K)K=K or 10;return math.round(C/K)*K end;function rotate(c,d,L)local M=math.cos(L)local N=math.sin(L)return{x=c*M-d*N,y=c*N+d*M}end;function math.angle(y,z,A,B)return math.atan2(B-z,A-y)end;function mtp(c,d,O)if O then return c*8,d*8 else return{x=c*8,y=d*8}end end;function ptm(c,d)return{x=math.floor(c-c%8)/8,y=math.floor(d-d%8)/8}end;function scene(init,P)return{queuedToRemove={},entityOrder={},doneInit=false,init=init,resetOnLoad=P,entities={},add=function(self,entity,Q)if entity==nil then return false end;if entity.name==nil then if Q==nil then entity.name=entity.class.."_"..math.random(1000)..time()else entity.name=Q end end;self.entities[entity.name]=entity;table.insert(self.entityOrder,entity.name)end,get=function(self,entity)return self.entities[entity]end,remove=function(self,Q)if type(Q)=="string"then table.insert(self.queuedToRemove,Q)else table.insert(self.queuedToRemove,Q.name)end end,_remove=function(self,Q)local entity=nil;if type(Q)=="string"then entity=self.entities[Q]else for R,S in pairs(self.entities)do if S==Q then Q=R;entity=S end end end;if entity.onRemove then entity:onRemove()end;self.entities[Q]=nil;return entity end,update=function(self,dt,T)if not self.doneInit then self:init()self.doneInit=true end;for Q,entity in pairs(self.entityOrder)do local entity=self:get(entity)if entity~=nil then entity:input(dt,T)entity:update(dt,T)entity:animate(dt,T)end end end,draw=function(self)for Q,entity in pairs(self.entityOrder)do local entity=self:get(entity)if entity~=nil then if entity.visible then entity:draw()end end end end,cleanup=function(self)for g,Q in pairs(self.queuedToRemove)do for g,entity in ipairs(self.entityOrder)do if entity==Q then self:_remove(Q)table.remove(self.entityOrder,g)end end end;self.queuedToRemove={}end}end;function entity(U)local V={id=0,class="entity",x=0,y=0,shutter=0,sprite=0,dir=1,flip=0,rotate=0,w=1,h=1,scale=1,transparent=0,visible=true,alwaysVisible=false,locked=false,isKeyEntity=false,animated=true,frames={},frameRate=0.2,frameLife=0,frameIndex=1,age=0,health=5,maxHealth=5,direction=0,canHitTwice=false,radius=4,input=function(self,dt,T)end,update=function(self,dt,T)self.age=self.age+dt end,animate=function(self,dt,T)dt=dt*T;if self.frameIndex>#self.frames then self.frameIndex=1 end;if self.animated then self.frameLife=self.frameLife+dt end;if self.frameLife>self.frameRate then self.frameIndex=self.frameIndex+1;self.frameLife=0;if self.frameIndex>#self.frames then self.frameIndex=1 end end;self.sprite=self.frames[self.frameIndex]end,draw=function(self,dt)local W=false;local player=game:get("player")W=true;if self.locked then offset=Camera.offset else offset={x=0,y=0}end;if self.alwaysVisible or W then spr(self.sprite,self.x+offset.x,self.y+offset.y,self.transparent,self.scale,self.flip,self.rotate,self.w,self.h)end end,takeHealth=function(self,X)self.health=self.health-X end,checkDamage=function(self,dt,T)local Y=false;local player=game:get("player")if overlap(self,player)and player.state==PlayerState.DASH then if player:hit(self)and not self.canHitTwice then if not self.damaged then Y=true;player.bonus=player.bonus+self.shutter end;self.damaged=true end end;if self.damaged then if self.onTakeDamage then self:onTakeDamage(dt,T,Y)end end;if self.health<=0 then game:remove(self)poof(self.x,self.y)end;return self.damaged end,onRemove=function(self)end}if U~=nil then for Z,_ in pairs(U)do V[Z]=_ end end;return V end;Color={BLACK=0,WHITE=15,YELLOW=14,CYAN=13,MAGENTA=12,RED=11,BLUE=10,GREEN=9}CollidingTiles={1,3,7,13,29,31,47,48,49,64,65,74,75,76,77,78,79,80,81,90,91,92,93,94,95,96,97,103,104,106,107,108,118,119,120,112,113,115,128,129,130,131,132,133,134,135,136,146,147,148,149,150,151,152,162,163,164,165,166,167,168,180,181,182,183,184,185,196,197,198,199,200}ActiveTiles={2,7,14,45,82,83,98,99}PitTiles={8,9,10,11,12,24,25,26,27,28,40,41,42,43,44}Direction={UP=114,DOWN=115,LEFT=130,RIGHT=131}OrbLocations={GREEN={spr=86,x=5,y=6},BLUE={spr=87,x=5,y=7},MAGENTA={spr=88,x=2,y=6},RED={spr=89,x=8,y=4}}DirectionAngles={UP=math.rad(0),DOWN=math.rad(180),LEFT=math.rad(270),RIGHT=math.rad(90)}function isPit(f)local a0=false;for g,a1 in pairs(PitTiles)do if a1==f then a0=true end end;return a0 end;function isActive(f)local a0=false;for g,a1 in pairs(ActiveTiles)do if a1==f then a0=true end end;if f==45 then a0=game.shutter>0 end;return a0 end;function tileCollides(f)local a2=false;for g,a3 in pairs(CollidingTiles)do if a3==f then a2=true end end;local player=game:get("player")if f==7 then a2=player.state~=PlayerState.DASH end;if f==45 then a2=game.shutter>0 end;if f==68 then a2=not game.flags.has_g end;if f==84 then a2=not game.flags.has_b end;if f==100 then a2=not game.flags.has_m end;if f==116 then a2=not game.flags.has_r end;if f==70 then a2=game.flags.has_g end;if f==71 then a2=game.flags.has_b end;if f==72 then a2=game.flags.has_m end;if f==73 then a2=game.flags.has_r end;return a2 end;Score={TINY=50,SMALL=250,MEDIUM=500,LARGE=1000,HUGE=5000,MAXIMUM=10000}PlayerState={MOVE=0,DASH=1,FALL=2,DIE=3}LoadCode={x1y2=function()local E=game:get('button_0')E.shutter=1;E.age=0;E.qs=0;E.text="The end."E._update=E.update;E.update=function(self,dt,T)self:_update(dt,T)if self.active then local player=game:get("player")player.doUpdate=false;self.age=self.age+dt*T;self.qs=self.qs+dt*T;if self.qs>0.25 then self.qs=0;if#player.orbs>0 then table.remove(player.orbs,1)end;local a4=game:getEntities(function(entity)return entity.isTank end)trace(#a4)if#a4>0 then a4[#a4]:setOff()end end;if self.age>1 then self.shutter=0;local t=entity()t.qs=0;t.text="The end."t.age=0;t.update=function(self,dt,T)self.qs=self.qs+dt*T;if self.qs>0.05 then self.qs=0;if self.age<#self.text then sfx(9)end;self.age=self.age+1 end end;t.draw=function(self)print(self.text:sub(1,math.floor(self.age)),15*8,14*8,Color.WHITE)end;game:add(t)end end end;E.onPress=function(self,dt,T)self.active=true end end,x2y8=function()for g,entity in pairs(game:getEntities())do if entity.class=="enemy"then entity.maxHealth=1;entity.health=1;entity.shutter=0 end end end,x8y1=function()game:get('button_0').onPress=function(self,dt,T)game.flags={loaded=true,has_r=false,has_m=false,has_g=false,has_b=false,sound=true,music=true,opened_final_zone=false}game:save()end;game:get('button_1').onPress=function(self,dt,T)game.flags.sound=not game.flags.sound end;game:get('button_2').onPress=function(self,dt,T)game.flags.music=not game.flags.music;if not game.flags.music then game:stop()else game:play(1)end end;game:get('button_3').onPress=function(self,dt,T)game:save()end end}function loadRoom(c,d,a5,a6)local a7=30;local a8=17;if c<=0 then c=8+c end;if d<=0 then d=8+d end;trace("Loading room: "..c..", "..d)for a9,a3 in pairs(a)do mset(a3.x,a3.y,a3.id)end;Camera.x=(c-1)*a7;Camera.y=(d-1)*a8;game.buttons=0;game.collapse=0;b=0;game:play(1)local aa={UP=false,DOWN=false,LEFT=false,RIGHT=false}if a5~=nil then game.current.dir=a5 end;for g,ab in pairs(game.scenes.play.entities)do if not ab.isKeyEntity then game:remove(ab)end end;a={}for ac=0,a7-1 do for ad=0,a8-1 do local t=mget(ac,ad)local D=game.add;if t==50 then mset(ac,ad,2)D(game,button(ac*8,ad*8))elseif t==52 then mset(ac,ad,14)D(game,arrow(ac*8,ad*8,Direction.UP))elseif t==53 then mset(ac,ad,14)D(game,arrow(ac*8,ad*8,Direction.LEFT))elseif t==54 then mset(ac,ad,14)D(game,arrow(ac*8,ad*8,Direction.DOWN))elseif t==55 then mset(ac,ad,14)D(game,arrow(ac*8,ad*8,Direction.RIGHT))elseif t==66 then mset(ac,ad,2)local E=button(ac*8,ad*8)E.name="shutterbutton_"..#game:getEntities()E.onPress=function(self,dt,T)self.shutter=0 end;E.shutter=1;D(game,E)elseif t==91 then mset(ac,ad,2)D(game,proptank(ac*8,ad*8))elseif t==68 then if game.flags.has_g then mset(ac,ad,69)end elseif t==84 then if game.flags.has_b then mset(ac,ad,85)end elseif t==102 then mset(ac,ad,2)D(game,portal(ac*8,ad*8))elseif t==100 then if game.flags.has_r then mset(ac,ad,101)end elseif t==116 then if game.flags.has_m then mset(ac,ad,117)end elseif t==86 then mset(ac,ad,2)D(game,pedestal(ac*8-4,ad*8-4,Color.GREEN,game.flags.has_g))elseif t==87 then mset(ac,ad,2)D(game,pedestal(ac*8-4,ad*8-4,Color.BLUE,game.flags.has_b))elseif t==88 then mset(ac,ad,2)D(game,pedestal(ac*8-4,ad*8-4,Color.MAGENTA,game.flags.has_m))elseif t==89 then mset(ac,ad,2)D(game,pedestal(ac*8-4,ad*8-4,Color.RED,game.flags.has_r))elseif t==156 then D(game,entity{x=ac*8,y=ad*8,w=2,h=2,frames={154},update=function(self,dt,T)self.visible=not game.flags.sound end})elseif t==201 then mset(ac,ad,2)D(game,trash(ac*8,ad*8))elseif t==158 then D(game,entity{x=ac*8,y=ad*8,w=2,h=2,frames={154},update=function(self,dt,T)self.visible=not game.flags.music end})elseif t==211 then mset(ac,ad,2)if game.current.x==1 or not game.flags.has_g then D(game,wizard(ac*8,ad*8))end elseif t==212 then mset(ac,ad,2)if game.current.x==1 or not game.flags.has_r then D(game,pirika(ac*8,ad*8))end elseif t==213 then mset(ac,ad,2)if game.current.x==1 or not game.flags.has_b then D(game,evilOrb(ac*8,ad*8))end elseif t==214 then mset(ac,ad,2)if game.current.x==1 or not game.flags.has_m then D(game,carrion(ac*8,ad*8))end elseif t==233 then mset(ac,ad,2)D(game,ufo(ac*8,ad*8))elseif t==215 then mset(ac,ad,2)D(game,finalBoss(ac*8,ad*8))elseif t==240 then mset(ac,ad,2)if not game:get("player")then D(game,cursor(ac*8,ad*8),"cursor")D(game,player(ac*8,ad*8),"player")D(game,health(1,1),"health")D(game,scorer(1,16),"scorer")game.playerSpawn.x=game:get("player").x;game.playerSpawn.y=game:get("player").y end elseif t==243 then mset(ac,ad,2)D(game,squid(ac*8,ad*8))elseif t==241 then mset(ac,ad,2)D(game,snake(ac*8,ad*8))elseif t==242 then mset(ac,ad,2)D(game,dog(ac*8,ad*8))elseif t==208 then mset(ac,ad,0)D(game,coin(ac*8,ad*8))elseif t==209 then mset(ac,ad,2)D(game,heart(ac*8,ad*8))elseif t==224 then mset(ac,ad,2)D(game,spawner(ac*8,ad*8))elseif t==225 then mset(ac,ad,2)D(game,fly(ac*8,ad*8))elseif t==226 then mset(ac,ad,2)D(game,skull(ac*8,ad*8))elseif t==227 then mset(ac,ad,2)D(game,hat(ac*8-8,ad*8-8))elseif t==228 then mset(ac,ad,2)D(game,rubra(ac*8,ad*8))elseif t==229 then mset(ac,ad,2)D(game,beamboy(ac*8,ad*8))elseif t==230 then mset(ac,ad,2)D(game,plant(ac*8,ad*8))elseif t==231 then mset(ac,ad,2)D(game,leaper(ac*8,ad*8))elseif t==232 then mset(ac,ad,2)D(game,ghost(ac*8,ad*8))elseif t==114 then mset(ac,ad,2)D(game,tank((ac-1)*8,(ad-1)*8))elseif t==144 then mset(ac,ad,2)D(game,bulletBoy(ac*8,ad*8,DirectionAngles.RIGHT))elseif t==145 then mset(ac,ad,2)D(game,bulletBoy(ac*8,ad*8,DirectionAngles.DOWN))elseif t==160 then mset(ac,ad,2)D(game,bulletBoy(ac*8,ad*8,DirectionAngles.LEFT))elseif t==161 then mset(ac,ad,2)D(game,bulletBoy(ac*8,ad*8,DirectionAngles.UP))elseif t==18 then aa.UP={x=ac,y=ad}elseif t==19 then aa.DOWN={x=ac,y=ad}elseif t==34 then aa.LEFT={x=ac,y=ad}elseif t==35 then aa.RIGHT={x=ac,y=ad}elseif t==22 and a6 then aa.UP={x=ac,y=ad}elseif t==23 and a6 then aa.DOWN={x=ac,y=ad}elseif t==38 and a6 then aa.LEFT={x=ac,y=ad}elseif t==39 and a6 then aa.RIGHT={x=ac,y=ad}end end end;if a5~=nil then local ae='UP'if a5==Direction.UP then ae='DOWN'elseif a5==Direction.DOWN then ae='UP'elseif a5==Direction.LEFT then ae='RIGHT'elseif a5==Direction.RIGHT then ae='LEFT'end;if aa[ae]~=false then local af=mtp(aa[ae].x,aa[ae].y)if ae=='UP'then game:get("player").x=af.x;game:get("player").y=af.y+8 elseif ae=='DOWN'then game:get("player").x=af.x;game:get("player").y=af.y-8 elseif ae=='LEFT'then game:get("player").x=af.x+8;game:get("player").y=af.y elseif ae=='RIGHT'then game:get("player").x=af.x-8;game:get("player").y=af.y end else trace("Attempted to enter room with no matching door.")end end;if LoadCode['x'..c..'y'..d]then trace('Checking x: '..c..', y: '..d)LoadCode['x'..c..'y'..d]()end;b=1 end;function ghost(c,d)local ag=enemy(c,d)ag.frames={368,369,370,371}ag.frameRate=1/12;ag.state=0;ag.moveSpeed=20;ag.transparent=Color.GREEN;ag.inhaleTimer=0;ag.update=function(self,dt,T)local player=game:get("player")if self.state==0 then if math.dist(self.x+4,self.y+4,player.x+4,player.y+4)>15 then local ah=self.moveSpeed*dt*T;local offset=rotate(ah,ah,math.angle(self.x,self.y,player.x,player.y))self.x=self.x+offset.x;self.y=self.y+offset.y else self.state=1;self.frames={384,385,386,387}self.frameIndex=1;self.frameRate=1;sfx(3,"C-4",30,3)end elseif self.state==1 then local ah=self.moveSpeed*0.75*dt*T;local offset=rotate(ah,ah,math.angle(self.x,self.y,player.x,player.y)-math.rad(40))self.x=self.x+offset.x;self.y=self.y+offset.y;if self.frameIndex==#self.frames then self.inhaleTimer=3;self.state=2;self.frames={386,387}self.frameRate=1/15 end elseif self.state==2 then local ah=self.moveSpeed*1.25*dt*T;local offset=rotate(ah,ah,math.angle(self.x,self.y,player.x,player.y)-math.rad(40))self.x=self.x+offset.x;self.y=self.y+offset.y;self.inhaleTimer=self.inhaleTimer-dt*T;if self.inhaleTimer<=0 then for c=1,9 do game:add(bullet(self.x,self.y,60*c))end;game:remove(self)end end end;return ag end;function trash(c,d)local t=enemy(c,d)t.frames={185}t.update=function(self,dt,T)self:checkDamage(dt,T)end;t.onTakeDamage=function(self,dt,T,Y)if Y then game:add(heart(self.x,self.y))poof(self.x,self.y)self.frames={169}end end;return t end;function leaper(c,d)local ai=enemy(c,d)ai.frames={345,346,347,346,345}ai.frameRate=1/12;ai.health=3;ai.maxHealth=3;ai.skitter={dir=0,speed=0,age=math.random(1,50)/10,skitters=math.random(1,5)}ai.onTakeDamage=fly().onTakeDamage;ai.update=function(self,dt,T)if not self:checkDamage(dt,T)then self.skitter.age=self.skitter.age+dt*T;if self.speed~=0 then local offset={x=self.speed*dt*T,y=self.speed*dt*T}offset=rotate(offset.x,offset.y,math.rad(self.dir))local aj=ptm(self.x+offset.x+4,self.y+offset.y+4)if tileCollides(mget(aj.x,aj.y))or isPit(mget(aj.x,aj.y))then offset={x=0,y=0}end;self.x=self.x+offset.x;self.y=self.y+offset.y end;if self.skitter.age>0.5 then self.skitter.age=0;self.skitter.skitters=self.skitter.skitters+1;if math.random(1,3)==2 then self.speed=0 else self.speed=15;self.dir=math.random(0,360)end;if self.skitter.skitters>5 then self.skitter.skitters=0;game:add(bullet(self.x,self.y,game:get("player")))sfx(19,"C-4",15,3)end end end;if self.health<=0 then game:remove(self)end end;return ai end;function score(X,c,d)game.score=game.score+Score[X]local ak=tostring(Score[X])local player=game:get("player")local c=c and c or player.x;local d=d and d or player.y;local al=particle(c,d,10,50)al.numbers={}al.draw=function(self,dt)for g,am in ipairs(self.numbers)do spr(am,self.x+g*4,self.y,0)end end;for j=1,#ak do local an=ak:sub(j,j)if an=="5"then table.insert(al.numbers,464)elseif an=="2"then table.insert(al.numbers,465)elseif an=="1"then table.insert(al.numbers,480)else table.insert(al.numbers,481)end end;game:get("scorer").visAge=0;game:add(al)end;function cursor(c,d)return entity{x=c,y=d,angle=0,distance=0,frames={282},frameRate=1/12,alwaysVisible=true,isKeyEntity=true,visible=false,update=function(self,dt)end,_draw=entity().draw,draw=function(self,dt)self:_draw(dt)local player=game:get("player")line(self.x+4,self.y+4,player.x+4,player.y+4,15)end}end;function spawner(c,d)return entity{class="enemy",x=c,frameRate=1/12,health=3,maxHealth=3,y=d,frames={292,293,294,293},direction=0,spawned=false,age=0,speed=0,state=0,spawns={},timeSinceSpawn=0,update=function(self,dt,T)self:checkDamage(dt,T)local ao=dt*T;if not self.damaged then if self.state==0 then self.spawned=false;self.frames={292,293,294,293}self.timeSinceSpawn=self.timeSinceSpawn+dt*T;if math.random(1,250)==1 then self.state=1 end elseif self.state==1 then self.frames={292,293,294,295,296,297}if self.frameIndex==#self.frames and not self.spawned then local ap=fly(self.x,self.y)ap.health=1;ap.maxHealth=1;table.insert(self.spawns,ap)game:add(ap)self.state=0;self.spawned=true;self.timeSinceSpawn=0;sfx(4,"C-4",15,3)end end end end,_draw=entity().draw,draw=enemy().draw,onTakeDamage=function(self,dt,T,Y)if Y then self:takeHealth(1)self.damaged=false;if self.health==0 then for c=1,5 do game:add(particle(self.x,self.y,nil,nil,{500}))end;for g,entity in pairs(self.spawns)do if game:get(entity.name)then entity.health=0 end end;game:remove(self)end end end}end;function enemy(c,d)return entity{shutter=1,class="enemy",x=c,y=d,frames={276,277,278,279,278,277},direction=math.rad(math.random(0,360)),age=0,speed=7,damaged=false,update=function(self,dt,T)self:checkDamage(dt,T)end,_draw=entity().draw,draw=function(self,dt)self:_draw(dt)if self.health~=self.maxHealth then rect(self.x,self.y-3,math.lerp(0,8,self.health/self.maxHealth),2,11)end end}end;function button(c,d,aq)local V=entity{x=c,y=d,name='button_'..game.buttons,pressed=false,onPress=aq,frames={50},update=function(self,dt,T)local player=game:get("player")if overlap(self,player)then if not self.pressed then self.pressed=true;game:add(particle(self.x,self.y,nil,15))sfx(9,"C-4",15,3)self.frames={51}if self.onPress then self:onPress(dt,T)end end else if self.pressed then self.frames={50}sfx(9,"C-4",15,3)self.pressed=false end end end}game.buttons=game.buttons+1;return V end;function bullet(c,d,ar,as)local V=entity{x=c,y=d,onFinish=as,class="bullet",target=ar,frames={504,505,506,507},frameRate=1/20,angle=false,radius=2,collides=false,friendly=false,pierces=false,speed=30,update=function(self,dt,T)if not self:checkDamage(dt,T)then if self.angle==false then if type(self.target)=="number"then self.angle=self.target-math.rad(40)else self.angle=math.angle(self.x,self.y,self.target.x,self.target.y)-math.rad(45)end end;local at=self.speed*dt*T;local offset=self.offset and{x=self.offset.x*dt*T,y=self.offset.y*dt*T}or rotate(at,at,self.angle)local C={x=self.x+offset.x,y=self.y+offset.y}local t=ptm(C.x,C.y)if tileCollides(mget(t.x,t.y))and mget(t.x,t.y)~=7 then if self.onFinish then self:onFinish()end;game:remove(self)end;if type(self.target)~="number"then self.target=math.angle(self.x,self.y,self.target.x,self.target.y)end;if self.friendly then local au=false;for g,entity in pairs(game:getEntities(function(entity)return entity.class=="enemy"end))do if overlap(self,entity)then entity.health=entity.health-1;au=true end end;if au then if self.onFinish then self:onFinish()end;game:remove(self)end else local player=game:get("player")if overlap(self,player)then if player.iframes==0 and player.state==PlayerState.MOVE then if self.onFinish then self:onFinish()end;player:takeHealth(1)game:remove(self)end end end;self.x=C.x;self.y=C.y;if self.onUpdate then self:onUpdate(dt,T)end end end}V.onTakeDamage=function(self,dt,T,Y)if Y then game:remove(self)end end;return V end;function fly(c,d)local F=enemy(c,d)F.frameRate=1/16;F.health=2;F.maxHealth=2;F.radius=4;F.direction=math.rad(math.random(0,360))F.age=0;F.speed=15;F.update=function(self,dt,T)if not self:checkDamage(dt,T)then self.age=self.age+dt*T;if self.age>3 then self.age=0;self.direction=math.rad(math.random(0,360))end;local offset={x=self.speed*dt*T,y=self.speed*dt*T}local av=rotate(offset.x,offset.y,self.direction)local ar={x=self.x+av.x+4,y=self.y+av.y+4}local a3=ptm(ar.x,ar.y)if tileCollides(mget(a3.x,a3.y))then offset={x=0,y=0}self.age=0;self.direction=self.direction+math.rad(180)end;self.x=self.x+av.x;self.y=self.y+av.y;local player=game:get("player")if overlap(self,player)and player.state==PlayerState.MOVE and player.iframes==0 then player:takeHealth(1)end end;if self.health<=0 then for c=1,5 do game:add(particle(self.x,self.y,nil,nil,{500}))end;game:remove(self)end end;F.onTakeDamage=function(self,dt,T,Y)if Y then self:takeHealth(1)self.age=0;self.damaged=false end end;return F end;function bulletBoy(c,d,x)local E=entity{x=c,y=d}E.dir=x;if x==DirectionAngles.UP then E.rotate=3 elseif x==DirectionAngles.LEFT then E.rotate=2 elseif x==DirectionAngles.DOWN then E.rotate=1 elseif x==DirectionAngles.RIGHT then E.rotate=0 end;E.frames={360,361,362,363}E.shotThisFrame=false;E.update=function(self,dt,T)if self.frameIndex==#self.frames then if not self.shotThisFrame then self.shotThisFrame=true;local E=bullet(self.x,self.y,game:get("player"))if self.dir==DirectionAngles.UP then E.offset={x=0,y=-40}elseif self.dir==DirectionAngles.DOWN then E.offset={x=0,y=40}elseif self.dir==DirectionAngles.LEFT then E.offset={x=-40,y=0}elseif self.dir==DirectionAngles.RIGHT then E.offset={x=40,y=0}end;game:add(E)end else self.shotThisFrame=false end end;return E end;function beamboy(c,d)local E=enemy(c,d)E.health=3;E.radius=8;E.maxHealth=3;E.angle=0;E.maxRange=20;E.range=0;E.cooldown=0;E.lastRange=0;E.shotCooldown=0;E.update=function(self,dt,T)self.lastRange=self.range;self.shotCooldown=self.shotCooldown-dt*T;if not self:checkDamage(dt,T)then if self.range<self.maxRange then self.range=self.range+10*dt*T end;local player=game:get("player")self.angle=self.angle+math.rad(100)*dt*T*(1+self.maxHealth-self.health)if self.angle>math.rad(180)then self.angle=self.angle-math.rad(360)end;local aw=math.angle(self.x+4,self.y+4,player.x+4,player.y+4)local ax=math.rad(15)if math.clamp(self.angle,aw-ax,aw+ax)==self.angle then if math.dist(self.x,self.y,player.x,player.y)<self.range*1.5 then if self.shotCooldown<=0 then self.shotCooldown=0.2;game:add(bullet(self.x,self.y,self.angle))end end end end;self.target=rotate(self.range,self.range,self.angle-math.rad(44))end;E.__draw=E.draw;E.draw=function(self,dt)line(self.x+4,self.y+4,self.x+4+self.target.x,self.y+4+self.target.y,11)local ay={x=self.x,y=self.y}self.y=ay.y-1;self:__draw(dt)local az={302,303}self.x=ay.x-6;self.y=ay.y+4;self.sprite=az[self.frameIndex]self:_draw(dt)self.y=self.y-8;self:_draw(dt)self.x=ay.x+6;self.flip=1;self.sprite=az[self.frameIndex]self:_draw(dt)self.y=self.y+8;self:_draw(dt)self.y=self.y-4;self.flip=0;self.frames={301,301}self.x=self.x-7;self.x=ay.x;self.y=ay.y end;E.onTakeDamage=function(self,dt,T,Y)if Y then self.range=0;self.angle=0;self:takeHealth(1)self.cooldown=0 end;self.cooldown=self.cooldown+dt*T;if self.cooldown>0.2 then self.visible=true;self.cooldown=0;self.damaged=false else self.visible=not self.visible end end;return E end;function rubra(c,d)local e=enemy(c,d)e.health=3;e.maxHealth=3;e.frames={298,299,300}e.lastShot=0;e.update=function(self,dt,T)if not self:checkDamage(dt,T)then self.lastShot=self.lastShot+dt*T;self.frameRate=1/math.lerp(0,30,self.lastShot/3)if self.lastShot>3 then self.lastShot=0;for c=1,math.random(3,7)do local player=game:get("player")local L=math.angle(self.x,self.y,player.x,player.y)+math.rad(math.random(-15,15))local E=bullet(self.x,self.y,L)E.speed=math.random(20,50)game:add(E)end end end end;e.onTakeDamage=function(self,dt,T,Y)if Y then self:takeHealth(1)self.lastShot=0;self.damaged=false end end;return e end;function skull(c,d)local aA=enemy(c,d)aA.maxHealth=1;aA.health=1;aA.angle=0;aA.distance=15;aA.transparent=9;aA.frames={280}aA.frameRate=1/20;aA.lastShot=0;aA.speed=2;aA.shutter=0;aA.shaking=false;aA.activated=false;aA.update=function(self,dt,T)local player=game:get("player")if self.activated then if self.shaking then self.shaking=false;poof(self.x,self.y,true)sfx(22,"C-4",15,3)end;self.lastShot=self.lastShot+dt*T;local offset=rotate(self.distance,self.distance,self.angle)self.x=player.x+offset.x;self.y=player.y+offset.y;if self.lastShot>1.5 then self.frames={280,281}else self.angle=self.angle+self.speed*dt*T end;if self.lastShot>2 then self.lastShot=0;self.frames={280}game:add(bullet(self.x,self.y,math.angle(self.x,self.y,player.x,player.y)))end;if game.shutter==0 and game.lastShutter~=0 then poof(self.x,self.y)game:remove(self)end else local aB=math.dist(self.x+4,self.y+4,player.x+4,player.y+4)if aB<self.distance then self.activated=true elseif aB<self.distance*3 then self.shaking=1;if aB<self.distance*2 then self.shaking=2 end else self.shaking=false end;self.angle=math.angle(self.x,self.y,player.x,player.y)-math.rad(40)end end;aA.__draw=aA.draw;aA.draw=function(self)if self.shaking then local aC=math.random(-self.shaking,self.shaking)local aD=math.random(-self.shaking,self.shaking)self.x=self.x+aC;self.y=self.y+aD;self:__draw()self.x=self.x-aC;self.y=self.y-aD else self:__draw()end end;return aA end;function poof(c,d,aE)for j=1,5 do game:add(particle(c,d,nil,nil,aE and{500}or{502}))end end;function pirika(c,d)local aF=enemy(c,d)aF.health=5;aF.maxHealth=5;aF.blinkFrames={432,434,436,438,436,434}aF.countFrames={400,402,404,406}aF.slamFrames={400}aF.state=0;aF.blinks=0;aF.countedBlink=false;aF.w=2;aF.yOffset=0;aF.dir=true;aF.h=2;aF.frameRate=1/12;aF.angle=0;aF.radius=8;aF.transparent=Color.MAGENTA;aF.empowered=game.current.x==1;if aF.empowered then aF.health=8;aF.maxHealth=8;poof(aF.x,aF.y,true)end;aF.update=function(self,dt,T)if not self:checkDamage(dt,T)then if self.state==0 then self.frames=self.blinkFrames;if self.frameIndex==#self.frames then if not self.countedBlink then self.countedBlink=true;self.blinks=self.blinks+1 end else self.countedBlink=false end;if self.blinks>3 then local aG={1,1,1,1,2,2,2}if self.empowered then aG={1,1,2,2,2,3,3,3}end;self.blinks=0;self.state=aG[math.random(1,#aG)]end elseif self.state==1 then self.frames=self.countFrames;if self.frameIndex==#self.frames then if not self.countedBlink then self.countedBlink=true;self.blinks=self.blinks+1;local aH={x=1,y=1}while not isActive(mget(aH.x,aH.y))do aH={x=math.random(1,30),y=math.random(1,17)}end;local C=mtp(aH.x,aH.y)game:add(bomb(self.x,self.y))poof(self.x,self.y,true)self.x=C.x;self.y=C.y;if self.blinks>3 then self.state=0;self.blinks=0 end end else self.countedBlink=false end elseif self.state==2 then self.frames=self.countFrames;local player=game:get("player")self.angle=self.angle+math.rad(90*dt*T)local t=rotate(10,10,self.angle)self.x=player.x+t.x+4;self.y=player.y+t.y+4;if self.frameIndex~=#self.frames then self.countedBlink=false;if self.blinks>3 then self.state=0;self.blinks=0 end else if not self.countedBlink then game:add(bomb(self.x,self.y))self.blinks=self.blinks+1;self.countedBlink=true end end elseif self.state==3 then self.frames=self.slamFrames;self.rotate=3;if self.dir then self.yOffset=self.yOffset-5*dt*T;if self.yOffset<-10 then self.dir=false end else self.yOffset=self.yOffset+20*dt*T;if self.yOffset>0 then self.yOffset=0;self.blinks=-3;self.state=0;self.dir=true;self.rotate=0;for j=1,12 do game:add(star(self.x,self.y,math.rad(j*360/12)))end end end else self.state=0 end end end;aF.__draw=aF.draw;aF.draw=function(self)self.y=self.y+self.yOffset;self:__draw()self.y=self.y-self.yOffset end;aF.onTakeDamage=function(self,dt,T,Y)if Y then self:takeHealth(1)self.damaged=false end end;game:play(2)return aF end;function star(c,d,ar)local aA=bullet(c,d,ar)aA.frames={476,492,508}aA.onFinish=function(self)for j=1,12 do game:add(bullet(self.x,self.y,math.rad(j*360/12)))end end;return aA end;function carrion(c,d)local a2=enemy(c,d)a2.health=4;a2.maxHealth=4;a2.w=2;a2.h=2;a2.radius=8;a2.frames={374}a2.angle=0;a2.sc=0;a2.transparent=Color.MAGENTA;a2.targetting=0;a2.spawns=0;game:play(2)a2.empowered=game.current.x==1;if a2.empowered then poof(a2.x,a2.y,true)a2.health=6;a2.maxHealth=6 end;a2.update=function(self,dt,T)local player=game:get("player")if not self:checkDamage(dt,T)then self.angle=self.angle+dt*T;if self.angle>math.pi then self.angle=self.angle-math.pi*2 end;for c=1,4 do local aI=math.angle(self.x,self.y,player.x,player.y)if math.clamp(aI,self.angle-math.rad(3)+math.rad(90*c),self.angle+math.rad(3)+math.rad(90*c))==aI then if math.dist(self.x,self.y,player.x,player.y)<25 then self.targetting=0 end end end;if self.targetting<1 then self.targetting=self.targetting+dt*T;self.sc=self.sc+dt*T;self.angle=math.angle(self.x,self.y,player.x,player.y)if self.sc>0.1 then game:add(bullet(self.x+8,self.y+8,game:get("player")))self.sc=0 end;if self.targetting>1 then if self.empowered then for c=1,4 do local t=rotate(25,25,self.angle+math.rad(90*c)-math.rad(45))local e=rubra(self.x+t.x,self.y+t.y)e.health=1;e.maxHealth=1;game:add(e)poof(self.x+t.x,self.y+t.y)end end end else self.sc=0 end end end;a2.onTakeDamage=function(self,dt,T,Y)if Y then self:takeHealth(1)self.damaged=false end end;a2.__draw=a2.draw;a2.sdraw=entity().draw;a2.draw=function(self)for c=1,4 do local t=rotate(25,25,self.angle+math.rad(90*c)-math.rad(45))line(self.x+8,self.y+8,self.x+t.x+8,self.y+t.y+8,Color.RED)spr(460,self.x+4+t.x,self.y+4+t.y,Color.BLACK)end;self:__draw()end;game:play(2)return a2 end;function finalBoss(c,d)local E=enemy(c,d)E.health=3;E.maxHealth=3;E.name="finalboss"E.w=2;E.h=2;E.frames={364}E.missingOrb=false;E.transparent=Color.MAGENTA;E.time=0;E.orbs={392,393,394,395}E.angle=0;E.state=0;E.shots=0;E.os=0;E.center={x=E.x,y=E.y}E.selfDestructing=false;E.spawns={}E.update=function(self,dt,T)game.collapse=1+#self.orbs*3*#self.orbs;game.broken=#self.orbs>0;game:play(6)if not self.selfDestructing then if not self:checkDamage(dt,T)then local player=game:get("player")self.angle=self.angle+2*dt*T;if self.angle>math.pi then self.angle=self.angle-math.pi*2 end;if#game.orbs>0 and not self.missingOrb then self.start={x=self.x,y=self.y}self.chaseOrb=game.orbs[1]self.os=0;self.missingOrb=true end;if self.missingOrb then self.os=self.os+dt*T/4;self.center.x=self.x+4;self.center.y=self.y+4;self.x=math.lerp(self.start.x,self.chaseOrb.x,self.os)self.y=math.lerp(self.start.y,self.chaseOrb.y,self.os)elseif#self.orbs==4 then if#self.spawns>0 then for g,aJ in pairs(self.spawns)do aJ.health=0 end;self.spawns={}end;self.os=self.os+dt*T/2;self.center.x=math.cerp(self.x,player.x,self.os)self.center.y=math.cerp(self.y,player.y,self.os)if self.os>1 then self.os=0;for c=1,#self.orbs do local t=rotate(12,12,math.rad(360/#self.orbs*c)+self.angle)local E=bullet(self.center.x+t.x,self.center.y+t.y,game:get("player"))E.speed=5;game:add(E)end end elseif#self.orbs==3 then self.os=self.os+dt*T;if self.os>0.5 then self.os=0;if game.shutter<16 then local F=hat(self.x+4,self.y+4)F.health=1;F.maxHealth=1;game:add(F)table.insert(self.spawns,F)end end elseif#self.orbs==2 then self.os=self.os+dt*T;if self.os>0.5 then self.os=0;if#self.spawns>0 then local F=self.spawns[1]table.remove(self.spawns,1)F.health=0;game:add(star(F.x,F.y,game:get("player")))else game:add(star(self.x+4,self.y+4,game:get("player")))end end elseif#self.orbs==1 then self.os=self.os+dt*T;if self.os>0.3 then game:add(star(self.x+4,self.y+4,math.rad(math.random(1,360))))self.os=0 end end end else self.os=self.os+dt*T;if self.os>0.3 then for c=1,12 do game:add(bullet(self.x,self.y,math.rad(360/12*c)+self.angle))end;self.os=0 end;self.y=self.y-10*dt*T;local a3=ptm(self.x,self.y)local t=mget(a3.x,a3.y)if tileCollides(t)and t~=115 then mset(a3.x,a3.y,16)mset(a3.x+1,a3.y,18)mset(a3.x+2,a3.y,16)mset(a3.x+0,a3.y+1,2)mset(a3.x+1,a3.y+1,2)mset(a3.x+2,a3.y+1,2)poof(self.x,self.y,true)game:remove(self)end end end;E.__draw=E.draw;E.draw=function(self)for c=1,#self.orbs do local t=rotate(12,12,math.rad(360/#self.orbs*c)+self.angle)spr(self.orbs[c],self.center.x+t.x,self.center.y+t.y,Color.CYAN)end;spr(460,self.center.x,self.center.y,Color.BLACK)local aK=math.random(-2,2)local aL=math.random(-2,2)if#self.orbs==3 and not self.missingOrb then self.x=self.x+aK;self.y=self.y+aL end;self:__draw()if#self.orbs==3 and not self.missingOrb then self.x=self.x-aK;self.y=self.y-aL end end;E.onTakeDamage=function(self,dt,T,Y)self.os=0;if Y then if self.health>1 then self:takeHealth(1)else if#self.orbs>0 and not self.missingOrb then game:add(sphere(self.orbs[#self.orbs]))table.remove(self.orbs,#self.orbs)self.health=3 else if#self.orbs==0 and#game.orbs==0 and self.health==1 then self.selfDestructing=true end end end end;self.damaged=false end;game:play(5)return E end;function proptank(c,d)local aF=entity{x=c,y=d}aF.isTank=true;aF.frames={91}aF.setOff=function(self)b=0;local a3=ptm(self.x,self.y)mset(a3.x,a3.y,91)for c=-1,1 do for d=-1,1 do if d==-1 then mset(a3.x+c,a3.y+d,0)else mset(a3.x+c,a3.y+d,mget(a3.x+c,a3.y+d)-13)end end end;poof(self.x,self.y)self.frames={78}mset(a3.x,a3.y,78)game:remove(self)b=1 end;return aF end;function sphere(aM)local aN=game:get("finalboss")local player=game:get("player")local V=entity{x=math.random(2,27)*8,y=math.random(2,14)*8,frames={aM},transparent=Color.CYAN,update=function(self,dt,T)local aN=game:get("finalboss")local player=game:get("player")local aO=false;if overlap(self,player)then aO=true;table.insert(player.orbs,self.frames[1])end;if aN then if overlap(self,aN)then aO=true;table.insert(aN.orbs,self.frames[1])aN.health=3 end end;if aO then for g,aP in ipairs(game.orbs)do if self==aP then table.remove(game.orbs,g)end end;poof(self.x,self.y)if aN then aN.missingOrb=false end;game:remove(self)end end}table.insert(game.orbs,V)return V end;function plant(c,d)local aF=enemy(c,d)aF.shutter=0;aF.health=2;aF.class="plant"aF.maxHealth=2;aF.state=0;aF.frames={344}aF.frameRate=1;aF.range=30;aF.bubble=0;aF.update=function(self,dt,T)if not self:checkDamage(dt,T)then if self.state==0 then self.frames={344}self.bubble=self.bubble+dt*T;if self.bubble>3 then self.bubble=0;sfx(19,"G-3",15,3)for g,entity in pairs(game:getEntities(function(entity)return entity.class=="enemy"end))do if math.dist(self.x,self.y,entity.x,entity.y)<self.range then entity.health=entity.health+1;if entity.health>entity.maxHealth then entity.health=entity.maxHealth end;for c=1,3 do game:add(particle(entity.x,entity.y,math.random(-10,10),15,{502}))end end end end else self.frames={372,373,388,389,344}if self.frames[self.frameIndex]==344 then self.state=0;self.bubble=0;sfx(11,"C-4",-1,3)end end end end;aF.onTakeDamage=function(self,dt,T)if self.state==0 then self.state=1;self.damaged=false else game:remove(self)end end;aF.__draw=aF.draw;aF.draw=function(self,dt,T)self:__draw(dt,T)if self.state==0 then circb(self.x+4,self.y+4,math.lerp(0,self.range,self.bubble/3),9)end end;return aF end;function wizard(c,d)local a7=enemy(c,d)a7.w=2;a7.h=2;a7.radius=8;a7.frames={336,342,336,338,340}a7.frameRate=1/12;a7.blockAge=0;a7.health=5;a7.transparent=Color.MAGENTA;a7.maxHealth=5;a7.empowered=game.current.x==1;a7.state=0;a7.stars=0;a7.maxStars=10;a7.angle=0;a7.cooldown=0;a7.update=function(self,dt,T)if not self:checkDamage(dt,T)then self.sep=360/self.maxStars;self.angle=self.angle+math.rad(self.sep+self.sep*(self.maxHealth-self.health))*dt*T;if self.state==0 then if self.angle>math.rad(self.sep)then self.angle=0;self.stars=self.stars+1 end;if self.stars==self.maxStars then if self.empowered then self.state=math.random(1,3)else self.state=math.random(1,2)end end elseif self.state==1 then self.cooldown=self.cooldown+dt*T;if self.cooldown>1/self.maxStars then game:add(star(self.x,self.y,game:get("player")))self.stars=self.stars-1;self.cooldown=0 end;if self.stars==0 then self.state=0 end elseif self.state==2 then self.cooldown=self.cooldown+dt*T;if self.cooldown>1/self.maxStars then game:add(star(self.x,self.y,math.rad(360/self.maxStars*(self.maxStars-self.stars))))self.stars=self.stars-1;self.cooldown=0 end;if self.stars==0 then self.state=0 end elseif self.state==3 then for c=1,math.floor(self.stars/2)do local ar=rotate(8,8,c*math.rad(self.sep*2))local a8=fly(self.x+ar.x,self.y+ar.y)a8.health=1;a8.maxHealth=1;game:add(a8)end;self.state=0;self.stars=0 else self.state=0 end end end;a7.__draw=a7.draw;a7.draw=function(self)self:__draw()for j=1,self.stars do local e=rotate(8,8,j*math.rad(self.sep)+self.angle)if self.state==1 then e=rotate(8-self.cooldown*8,8-self.cooldown*8,j*math.rad(self.sep)+self.angle)end;spr(508,self.x+e.x+4,self.y+e.y+4,0)end end;a7.onTakeDamage=function(self,dt,T,Y)if Y then self:takeHealth(1)self.state=2;self.damaged=false end end;game:play(2)return a7 end;function hat(c,d)local V=enemy(c,d)V.frames={424,425,426,427}V.health=2;V.maxHealth=2;V.frameRate=1/12;V.shotWatch=3.5;V.shotCooldown=0;V.transparent=Color.MAGENTA;V.shouldFlit=0;V.update=function(self,dt,T)if not self:checkDamage(dt,T)then self.shotCooldown=self.shotCooldown+dt*T;self.shouldFlit=self.shouldFlit+dt*T;self.frameRate=1/(12+self.shotCooldown*10)if self.shotCooldown>self.shotWatch then self.shotCooldown=0;local E=bullet(self.x,self.y,game:get("player"))E.onFinish=function(self)for j=1,10 do game:add(bullet(self.x,self.y,j*math.rad(36)))end end;E.frames={476,492,508}game:add(E)end;if self.shouldFlit>1 then self.shouldFlit=0;local ar=rotate(15,15,math.rad(math.random(360)))local t=ptm(self.x+ar.x,self.y+ar.y)while not isActive(mget(t.x,t.y))or tileCollides(mget(t.x,t.y))do ar=rotate(15,15,math.rad(math.random(360)))t=ptm(self.x+ar.x,self.y+ar.y)end;poof(self.x,self.y,true)self.x=self.x+ar.x;self.y=self.y+ar.y end end end;V.onTakeDamage=function(self,dt,T,Y)if Y then self:takeHealth(1)self.damaged=false end end;return V end;function pedestal(c,d,aQ,aR)local V=entity{x=c,y=d,color=aQ,cleared=aR,visualOffset=0,w=2,h=2,frames={176},radius=8,yOffset=math.random(0,40)/10,dir=1,update=function(self,dt,T)self.yOffset=self.yOffset+12*dt*T*self.dir;if self.yOffset>4 or self.yOffset<0 then self.dir=-self.dir end;self.yOffset=math.clamp(self.yOffset,0,4)local player=game:get("player")if overlap(self,player)and not self.cleared then self.cleared=true;player.health=player.maxHealth;if self.color==Color.GREEN then game.flags.has_g=true elseif self.color==Color.BLUE then game.flags.has_b=true elseif self.color==Color.MAGENTA then game.flags.has_m=true elseif self.color==Color.RED then game.flags.has_r=true end;game:save()end end}V._draw=entity().draw;V.draw=function(self,dt,T)self.w=2;self.h=2;self.transparent=Color.BLACK;self.sprite=176;self:_draw()self.w=1;self.h=1;self.x=self.x+4;self.y=self.y+math.floor(self.yOffset)self.transparent=Color.CYAN;if self.color==Color.GREEN then self.sprite=392 elseif self.color==Color.BLUE then self.sprite=393 elseif self.color==Color.MAGENTA then self.sprite=394 elseif self.color==Color.RED then self.sprite=395 end;if self.cleared then self.sprite=self.sprite-16 end;self:_draw()self.x=self.x-4;self.y=self.y-math.floor(self.yOffset)end;game:play(4)return V end;function portal(c,d)local aF=entity{x=c,y=d,radius=4,w=2,h=2,frameRate=1/6,frames={324,325,326,327},t=3}aF.update=function(self,dt,T)local player=game:get("player")if overlap(self,player)then self.t=self.t-dt*T;if self.t<0 then game.current.x=1;game.current.y=0;game.current.dir=Direction.UP;loadRoom(1,0,Direction.UP)poof(player.x,player.y)end else self.t=1.5 end end;aF._draw=aF.draw;aF.draw=function(self)self.w=2;self.h=2;self.sprite=178;self.x=self.x-4;self.y=self.y-4;self:_draw()self.w=1;self.h=1;self.x=self.x+4;self.y=self.y+4;self:animate(dt,game.speed)self:_draw()if self.t~=1.5 then circb(self.x+4,self.y+4,math.lerp(0,15,self.t/1.5),Color.MAGENTA)end end;return aF end;function player(c,d)local aF=entity{x=c,y=d,sprite=48,frames={256,257,258,259,256},frameRate=1/12,transparent=Color.MAGENTA}aF.maxHealth=4;aF.health=4;aF.state=PlayerState.MOVE;aF.dashTime=0;aF.dashSpeed=150;aF.radius=3;aF.dashLength=1;aF.move=36;aF.bonus=0;aF.lastHit=0;aF.orbAngle=0;aF.isKeyEntity=true;aF.chargeCooldown=0;aF.orbs={}aF.takeHealth=function(self,X)self.iframes=1;if#self.orbs>0 then game:add(sphere(self.orbs[#self.orbs]))table.remove(self.orbs,#self.orbs)else self.health=self.health-X end end;aF.collide=function(self,dt,T)local aS={{x=0,y=0}}for g,aT in pairs(aS)do local a2=ptm(self.x+3+aT.x,self.y+3+aT.y)local aU=mtp(a2.x,a2.y)local aV=false;local aW=false;if tileCollides(mget(a2.x,a2.y))then if self.x<aU.x then aV=true end;if self.y<aU.y then aW=true end;local t=ptm(aU.x,aU.y)if aW then self.y=self.y-1 else self.y=self.y+1 end;if aV then self.x=self.x-1 else self.x=self.x+1 end end end end;aF.input=function(self,dt,T)self:collide(dt,T)local cursor=game:get("cursor")if self.state==PlayerState.MOVE then if self.chargeCooldown>0 then self.chargeCooldown=self.chargeCooldown-dt*T;if self.chargeCooldown<0 then self.chargeCooldown=0;cursor.x=self.x;cursor.y=self.y end end;if btn(Button.A)and self.chargeCooldown<=0 then cursor.visible=true;game.speed=0.5;if btnp(Button.A)then cursor.distance=30;cursor.x=self.x;cursor.y=self.y end;local offset={x=0,y=0}if btn(Button.UP)then offset.y=offset.y-150*dt end;if btn(Button.DOWN)then offset.y=offset.y+150*dt end;if btn(Button.LEFT)then offset.x=offset.x-150*dt end;if btn(Button.RIGHT)then offset.x=offset.x+150*dt end;if math.dist(cursor.x+offset.x,cursor.y+offset.y,self.x,self.y)>50 then offset={x=0,y=0}end;cursor.x=cursor.x+offset.x;cursor.y=cursor.y+offset.y else if cursor.visible then game.speed=1;self.target=math.angle(self.x,self.y,cursor.x,cursor.y)-math.rad(45)self.state=PlayerState.DASH;self.dashTime=0;self.dashLength=math.lerp(0,0.225,math.dist(self.x,self.y,cursor.x,cursor.y)/50)cursor.visible=false;sfx(10,"C-5",30,1)end;local offset={x=0,y=0}local aX=false;if btn(Button.UP)then offset.y=-(self.move*dt*T)self.frames={260,261,262,263,264,265,266,267,268,269,270}self.flip=0;aX=true;cursor.angle=math.rad(90)end;if btn(Button.DOWN)then offset.y=self.move*dt*T;self.frames={260,261,262,263,264,265,266,267,268,269,270}self.flip=0;aX=true;cursor.angle=math.rad(270)end;if btn(Button.LEFT)then offset.x=-(self.move*dt*T)self.frames={260,261,262,263,264,265,266,267,268,269,270}self.flip=0;aX=true;cursor.angle=math.rad(0)end;if btn(Button.RIGHT)then offset.x=self.move*dt*T;self.frames={260,261,262,263,264,265,266,267,268,269,270}self.flip=1;aX=true;cursor.angle=math.rad(180)end;local a3=ptm(self.x+offset.x+4,self.y+4)if tileCollides(mget(a3.x,a3.y))then offset.x=0 end;if isPit(mget(a3.x,a3.y))then sfx(12,"C-4")self.state=PlayerState.FALL;self.health=self.health-1 end;if not aX then self.frames={256,257,258,259,260}end;local a3=ptm(self.x+offset.x+4,self.y+offset.y+4)if tileCollides(mget(a3.x,a3.y))then offset.y=0 end;if isPit(mget(a3.x,a3.y))then sfx(12,"C-4")self.state=PlayerState.FALL;self.health=self.health-1 end;if not aX then self.frames={256,257,258,259,260}end;self.x=self.x+offset.x;self.y=self.y+offset.y;local a3=ptm(self.x+4,self.y+4)a3=mget(a3.x,a3.y)if a3==16 or a3==18 then game.current.y=game.current.y-1;loadRoom(game.current.x,game.current.y,Direction.UP)sfx(8,"C-4",15,3)end;if a3==17 or a3==19 then game.current.y=game.current.y+1;loadRoom(game.current.x,game.current.y,Direction.DOWN)sfx(8,"C-4",15,3)end;if a3==32 or a3==34 then game.current.x=game.current.x-1;loadRoom(game.current.x,game.current.y,Direction.LEFT)sfx(8,"C-4",15,3)end;if a3==33 or a3==35 then game.current.x=game.current.x+1;loadRoom(game.current.x,game.current.y,Direction.RIGHT)sfx(8,"C-4",15,3)end;if a3==120 then game.current.y=game.current.y-1;loadRoom(game.current.x,game.current.y,Direction.UP,true)sfx(8,"C-4",15,3)end;if a3==121 then game.current.y=game.current.y+1;loadRoom(game.current.x,game.current.y,Direction.DOWN,true)sfx(8,"C-4",15,3)end;if a3==136 then game.current.x=game.current.x-1;loadRoom(game.current.x,game.current.y,Direction.LEFT,true)sfx(8,"C-4",15,3)end;if a3==137 then game.current.x=game.current.x+1;loadRoom(game.current.x,game.current.y,Direction.RIGHT,true)sfx(8,"C-4",15,3)end end elseif self.state==PlayerState.FALL then self.fallTime=self.fallTime and self.fallTime+dt or 0.001;self.frames={271}self.rotate=self.rotate+1;if self.fallTime>0.5 then loadRoom(game.current.x,game.current.y,game.current.dir)self.state=PlayerState.MOVE;self.rotate=0;self.fallTime=0 end elseif self.state==PlayerState.DASH then local aY=ptm(self.x+4,self.y+4)if mget(aY.x,aY.y)~=14 then self.dashTime=self.dashTime+dt else game:add(particle(self.x,self.y,nil,nil,{501},0.2))end;local dts=self.dashSpeed*dt*T;local aZ=rotate(dts,dts,self.target)local a3=ptm(self.x+aZ.x+4,self.y+aZ.y+4,true)if tileCollides(mget(a3.x,a3.y))then for c=1,5 do game:add(particle(self.x,self.y,math.random(-30,30),30,{499},0.5))end;self.target=-self.target;self.dashTime=self.dashLength end;self.rotate=self.rotate+1;self.radius=4+math.clamp(math.floor(self.bonus/6),0,8)if self.rotate>3 then self.rotate=0 end;if self.dashTime>=self.dashLength then self.state=PlayerState.MOVE;self.chargeCooldown=1-math.min(1,self.bonus*0.1)self.hitEntities={}self.radius=3;self.start=nil;self.rotate=0;self.target=nil;for j=1,10 do game:add(particle(self.x,self.y,nil,nil,{501},0.5))end end;self.x=self.x+aZ.x;self.y=self.y+aZ.y end end;aF.hitEntities={}aF.hit=function(self,entity)local a_=false;for g,V in pairs(self.hitEntities)do if V==entity then a_=true;return false end end;if not a_ then self.lastHit=0;table.insert(self.hitEntities,entity)end;return not a_ end;aF.iframes=0;aF.update=function(self,dt,T)local a3=ptm(self.x+4,self.y+4)self.orbAngle=self.orbAngle+5*dt*T;if isActive(mget(a3.x,a3.y))then game.shutter=0;for g,entity in pairs(game:getEntities(function(V)return V.shutter end))do game.shutter=game.shutter+entity.shutter end;if game.shutter~=game.lastShutter then sfx(15,"C-4",15,3)end else game.shutter=0 end;self.lastHit=self.lastHit+dt*T;if self.bonus>0 then if self.lastHit>5 then self.bonus=self.bonus-1;self.lastHit=2 end end;if self.iframes>0 then self.visible=not self.visible;self.iframes=self.iframes-dt*T else self.visible=true;self.iframes=0 end;if self.bonus<0 then self.bonus=0 end end;aF.coinsCollected=0;aF._draw=aF.draw;aF.draw=function(self,dt)self:_draw(dt)if self.state==PlayerState.MOVE then if self.chargeCooldown>0 then rect(self.x,self.y-3,math.lerp(0,8,1-self.chargeCooldown),2,13)end;if game:get("cursor").visible and self.chargeCooldown<=0 then circb(self.x+4,self.y+4,50,13)end end;if self.bonus>0 then local b0=print(self.bonus,0,-20)printf(self.bonus,self.x+2-math.floor(b0/4),self.y-8,9,0)end;if self.radius>4 then circb(self.x+4,self.y+4,self.radius,11)end;for c=1,#self.orbs do local t=rotate(6,6,math.rad(360/#self.orbs*c)+self.orbAngle)spr(self.orbs[c],self.x+t.x,self.y+t.y,Color.CYAN)end end;return aF end;function arrow(c,d,x)local V=entity{x=c,y=d,dir=x,radius=4,frames={408,409,410,411}}if x==Direction.LEFT then V.rotate=1 elseif x==Direction.DOWN then V.rotate=2 elseif x==Direction.RIGHT then V.rotate=3 end;V.update=function(self,dt,T)self:checkDamage(dt,T)end;V.onTakeDamage=function(self,dt,T,Y)local player=game:get("player")if Y then self.hold=0;if self.dir==Direction.UP then player.target=math.angle(0,0,0,-1)elseif self.dir==Direction.DOWN then player.target=math.angle(0,0,0,1)elseif self.dir==Direction.LEFT then player.target=math.angle(0,0,1,0)elseif self.dir==Direction.RIGHT then player.target=math.angle(1,0,0,0)end;game:add(particle(player.x,player.y,nil,nil,{501}))player.target=player.target-math.rad(45)end;if self.hold<0.1 then player.x=self.x;player.y=self.y;self.hold=self.hold+dt*T else self.damaged=false end end;return V end;function evilOrb(c,d)local aP=enemy(c,d)aP.health=4;aP.maxHealth=4;aP.transparent=Color.MAGENTA;aP.bounceFrames={440,441,442,443,456}aP.walkFrames={456,457,458,459,472,473,474,475,488,489,490,491}aP.frames=aP.bounceFrames;aP.frameRate=1/12;aP.angle=0;aP.charge=0;aP.state=0;aP.dashTime=0;aP.chargesDone=0;aP.hold={}aP.vel=15;aP.empowered=game.current.x==1;if aP.empowered then aP.health=6;aP.maxHealth=6;poof(aP.x,aP.y,true)end;aP.update=function(self,dt,T)if self.health<=0 then game:remove(self)poof(self.x,self.y)end;if not self:checkDamage(self,dt,T)then local player=game:get("player")if self.state==0 then self.charge=self.charge+dt*T;if self.charge>1 then local aG={1,2,2,2,2,2,3,3,3,3,3,5,5,5}if not self.empowered then aG={2,2,2,2,3,3}end;self.state=aG[math.random(1,#aG)]self.charge=0;self.vel=15 end elseif self.state==1 then self.vel=self.vel-5*dt*T;if#self.hold<8 then while#self.hold<8 do local E=bomb(self.x,self.y)E.angle=#self.hold*40;table.insert(self.hold,E)game:add(E)end else for g,b1 in ipairs(self.hold)do local b2=rotate(self.vel,self.vel,b1.angle)b1.x=b1.x+b2.x*dt*T;b1.y=b1.y+b2.y*dt*T;if game:get(b1.name)==nil or b1.class=="coin"then table.remove(self.hold,g)end end end;if self.vel<0 then self.state=0;self.hold={}end elseif self.state==2 then self.charge=self.charge+dt*T;self.angle=math.angle(self.x+4,self.y+4,player.x+4,player.y+4)-math.rad(45)if self.chargesDone>2 then self.state=0;self.chargesDone=0 end;if self.charge>1 then self.state=4;poof(self.x,self.y,true)end elseif self.state==3 then self.angle=math.angle(self.x+4,self.y+4,player.x+4,player.y+4)-math.rad(45)self.dashTime=self.dashTime+dt*T;if self.dashTime>0.25 then self.chargesDone=self.chargesDone+1;game:add(star(self.x,self.y,game:get("player")))self.dashTime=0 end;if self.chargesDone>2 then self.chargesDone=0;self.dashTime=0;self.state=0 end elseif self.state==4 then local ar=rotate(150,150,self.angle)ar={x=ar.x*dt*T,y=ar.y*dt*T}self.dashTime=self.dashTime+dt*T;if self.dashTime>0 then self.rotate=self.rotate+1;if self.rotate>3 then self.rotate=0 end;local a3=ptm(self.x+ar.x+4,self.y+ar.y+4)local a1=mget(a3.x,a3.y)if tileCollides(a1)then self.state=0;self:takeHealth(1)else self.x=self.x+ar.x;self.y=self.y+ar.y;if overlap(self,player)then if player.iframes==0 and player.state==PlayerState.MOVE then player:takeHealth(1)end end end end;if self.dashTime>0.2 then self.angle=math.angle(self.x,self.y,player.x,player.y)-math.rad(45)self.state=2;self.chargesDone=self.chargesDone+1;if self.chargesDone>2 then self.state=0;self.dashTime=0;self.chargesDone=0;self.rotate=0 end end elseif self.state==5 then self.dashTime=self.dashTime+dt*T;if self.dashTime>0.1 then self.dashTime=0;self.chargesDone=self.chargesDone+1;game:add(bullet(self.x,self.y,20*self.chargesDone))end;if self.chargesDone>18 then self.state=0 end end end end;aP.onTakeDamage=function(self,dt,T,Y)if Y then poof(self.x,self.y)self:takeHealth(1)self.damaged=false end end;aP.__draw=aP.draw;aP.draw=function(self)self:__draw()if self.state==2 then local ar=rotate(math.lerp(0,30,self.charge),math.lerp(0,30,self.charge),self.angle)line(self.x+4,self.y+4,self.x+ar.x+4,self.y+ar.y+4,Color.RED)spr(460,self.x+ar.x,self.y+ar.y,Color.BLACK)end end;game:play(2)return aP end;function health(c,d)return entity{visAge=0,lastHealth=game:get("player").maxHealth,isKeyEntity=true,update=function(self,dt,T)local player=game:get("player")player.health=math.clamp(player.health,0,player.maxHealth)if self.lastHealth~=player.health then if self.lastHealth>player.health then self.visAge=0;player.iframes=1;self.lastHealth=player.health;sfx(13,"C-4",15,3)if player.bonus>0 then player.bonus=0;for c=1,5 do game:add(particle(player.x+4,player.y-8,nil,math.random(-30,0),{502},0.3))end;sfx(5,"C-4",15,3)end;for c=1,math.random(1,5)do game:add(particle(4+math.lerp(0,41,player.health/player.maxHealth),4,math.random(-15,15),-math.random(15,25),{500}))end else self.visAge=0 end;if self.lastHealth<=0 then self.lastHealth=player.health;game.current.x=game.start.x;game.current.y=game.start.y;loadRoom(game.start.x,game.start.y)player.health=player.maxHealth;player.x=game.playerSpawn.x;player.y=game.playerSpawn.y end end;if player.health==player.maxHealth then self.visible=self.visAge<2;self.visAge=self.visAge+dt else self.visible=true end end,draw=function(self,dt)local player=game:get("player")spr(466,1,1,Color.MAGENTA)spr(482,1,5,Color.MAGENTA)spr(467,9,1,Color.MAGENTA)spr(483,9,5,Color.MAGENTA)spr(467,16,1,Color.MAGENTA)spr(483,16,5,Color.MAGENTA)spr(467,24,1,Color.MAGENTA)spr(483,24,5,Color.MAGENTA)spr(467,32,1,Color.MAGENTA)spr(483,32,5,Color.MAGENTA)spr(468,40,1,Color.MAGENTA)spr(484,40,5,Color.MAGENTA)rect(4,4,math.lerp(0,41,player.health/player.maxHealth),7,11)printf(string.format("%i / %i",player.health,player.maxHealth),12,5,0,15)end}end;function scorer(c,d)return entity{frames={310},isKeyEntity=true,w=1,h=1,x=c,y=d,transparent=1,visAge=0,update=function(self,dt,T)self.visAge=self.visAge+dt;self.visible=self.visAge<1 end,_draw=entity().draw,draw=function(self,dt)self:_draw(dt)printf(game.score,self.x+10,self.y+1,15,0)end}end;function overlap(D,E)local b3=math.dist(D.x+4*D.w,D.y+4*D.h,E.x+4*E.w,E.y+4*E.h)return b3<D.radius+E.radius end;function snake(c,d)return entity{frameRate=1/12,frames={288,289,290,291,290,289},x=c,y=d}end;function coin(c,d,b4)local b5={310,310,310,310,310,304,305,306,307,308,309}if b4==nil then b4=true else b4=false end;if not b4 then b5={324,325,326,327}end;return entity{isValid=b4,frames=b5,x=c,class="coin",y=d,collected=false,collectAge=-0.1,update=function(self,dt,T)dt=dt*T;if not self.collected then local player=game:get("player")if overlap(self,player)then if self.isValid then self.frames={310,311,312,311}else self.frames={328,329,330,331}end;self.collected=true;sfx(1,"G-4",-1,3)for c=1,5 do game:add(particle(self.x,self.y,math.random(-15,15),30,self.isValid and{498}or{502}))end;if player.state==PlayerState.DASH then if self.isValid then if player.bonus<3 then score("TINY",self.x,self.y)elseif player.bonus<6 then score("SMALL",self.x,self.y)elseif player.bonus<10 then score("MEDIUM",self.x,self.y)end end else if self.isValid then score("TINY",self.x,self.y)end end end else self.collectAge=self.collectAge+dt;if self.isValid then self.y=self.y-75*dt*math.sign(self.collectAge)end;if self.collectAge>1 then game:remove(self)end end end}end;function heart(c,d)return entity{frames={313,314,315,316,317,318,319},x=c,y=d,update=function(self,dt,T)local player=game:get("player")if overlap(self,player)then if player.health+1<=player.maxHealth then player.health=player.health+1;game:remove(self)for c=1,5 do game:add(particle(self.x,self.y,nil,nil,{502}))end;sfx(14,"C-4",15,3)end end end}end;function squid(c,d)return entity{frameRate=1/12,frames={272,273,274,275,274,273},x=c,y=d}end;function dog(c,d)return entity{frameRate=1/12,frames={320,321,322,323},x=c,y=d}end;function bomb(c,d,b6)local bomb=entity{x=c,y=d,frames=b6 and{333,334,335}or{349,350,351},frameRate=1/6,radius=3,class="bullet",age=0,friendly=b6 and b6 or false,fuse=3,lastPart=0,update=function(self,dt,T)self.frameRate=1/math.lerp(1,60,self.age/self.fuse)if self.lastPart>0.25 then game:add(particle(self.x,self.y,math.random(-15,15),50,{499}))self.lastPart=0 else self.lastPart=self.lastPart+dt*T end;self.age=self.age+dt*T;if self.age>self.fuse then for c=1,9 do local b7=bullet(self.x,self.y,math.rad(c*40))b7.friendly=self.friendly;game:add(b7)end;sfx(19,"C-4",15,3)game:remove(self)end end}return bomb end;function ufo(c,d)local b8=enemy(c,d)b8.frames={328,329,330,331,332,333,334}b8.transparent=Color.MAGENTA;b8.health=2;b8.maxHealth=2;b8.frameRate=1/12;b8.shotWatch=3.5;b8.shotCooldownX=0;b8.shotsFired=0;b8.shotCooldown=0;b8.transparent=Color.MAGENTA;b8.shouldFlit=0;b8.update=function(self,dt,T)if not self:checkDamage(dt,T)then self.shotCooldown=self.shotCooldown+dt*T;self.shouldFlit=self.shouldFlit+dt*T;self.frameRate=1/(12+self.shotCooldown*10)if self.shotCooldown>self.shotWatch then self.shotCooldownX=self.shotCooldownX+dt*T;if self.shotCooldownX>0.2 then self.shotCooldownX=0;self.shotsFired=self.shotsFired+1;for j=-1,1 do local player=game:get("player")local D=math.angle(self.x,self.y,player.x,player.y)game:add(bullet(self.x,self.y,D+j*math.rad(15)))end;if self.shotsFired>2 then self.shotCooldown=0;self.shotCooldownX=0;self.shotsFired=0 end end end;if self.shouldFlit>1 then self.shouldFlit=0;local ar=rotate(15,15,math.rad(math.random(360)))local t=ptm(self.x+ar.x,self.y+ar.y)while not isActive(mget(t.x,t.y))or tileCollides(mget(t.x,t.y))do ar=rotate(15,15,math.rad(math.random(360)))t=ptm(self.x+ar.x,self.y+ar.y)end;poof(self.x,self.y,true)self.x=self.x+ar.x;self.y=self.y+ar.y end end end;b8.onTakeDamage=function(self,dt,T,Y)if Y then self:takeHealth(1)self.damaged=false end end;return b8 end;function tank(c,d)local tank=entity{frames={477},x=c,y=d,w=3,h=3,transparent=12,dir=1,offset=4,doingZone=false,state=0,steal=0,orbLocs={{10,7},{10,9},{18,7},{18,9}},orbs={},collectedOrbs=0}game.collapse=50;tank.angle=0;tank.update=function(self,dt,T)game.collapse=1;local b9=0;for g,k in pairs({'has_r','has_g','has_b','has_m'})do if game.flags[k]then b9=b9+1 end end;if not game.flags.opened_final_zone then if game.flags.has_r and game.flags.has_g and game.flags.has_m and game.flags.has_b and not self.doingZone then for g,a9 in pairs(self.orbLocs)do local aP=entity{a9[1]*8,a9[2]*8}aP.startX=a9[1]*8;aP.startY=a9[2]*8;aP.frames={mget(a9[1],a9[2])+16}mset(a9[1],a9[2],2)table.insert(self.orbs,aP)game:add(aP)end;self.doingZone=true;game:play(5)self.shutter=1 end else self.state=3;self.frames={429}game:play(3)end;if self.doingZone then game:play(5)if self.state==0 then self.steal=self.steal+dt*T;for g,aP in pairs(self.orbs)do aP.x=math.lerp(aP.startX,self.x+8,self.steal)aP.y=math.lerp(aP.startY,self.y+8,self.steal)if math.random(1,100)==1 then game:add(particle(aP.x,aP.y))end end;if self.steal>1 then self.state=1;for g,aP in pairs(self.orbs)do aP.visible=false end end elseif self.state==1 then self.frames={429}sfx(24,"C-4",-1,3)self.state=2;game.broken=true;for c=1,10 do local aF=particle(self.x+8,self.y+8)aF.transparent=Color.MAGENTA;if math.random(1,2)==1 then aF.frames={444}else aF.frames={428}end;game:add(aF)end elseif self.state==2 then self.offset=self.offset-10*dt*T;self.angle=self.angle+3*dt*T;for g,aP in ipairs(self.orbs)do local ar=rotate(10,10,self.angle+g*math.rad(90))aP.visible=true;aP.x=self.x+8+ar.x;aP.y=self.y+8+ar.y+self.offset end;local a3=ptm(self.x,self.y+math.floor(self.offset))local t=mget(a3.x,a3.y)if tileCollides(t)and t~=115 then mset(a3.x,a3.y,16)mset(a3.x+1,a3.y,18)mset(a3.x+2,a3.y,16)mset(a3.x+0,a3.y+1,40)mset(a3.x+1,a3.y+1,40)mset(a3.x+2,a3.y+1,40)poof(self.x,self.y+self.offset,true)self.state=3;for g,aP in pairs(self.orbs)do game:remove(aP)end;game.flags.opened_final_zone=true end end end end;tank.onRemove=function(self)game.collapse=0 end;tank._draw=tank.draw;tank.draw=function(self)if self.doingZone then if self.state~=3 then self.x=self.x+4;self.y=self.y+math.floor(self.offset)if self.state==0 then self.sprite=366 else self.sprite=364 end;self.w=2;self.h=2;self:_draw()self.x=self.x-4;self.y=self.y-math.floor(self.offset)end end;if not self.doingZone and not game.flags.opened_final_zone then self.x=self.x+4;self.y=self.y+math.floor(self.offset)if self.collectedOrbs<=2 then self.sprite=398 else self.sprite=366 end;self.w=2;self.h=2;self:_draw()self.x=self.x-4;self.y=self.y-math.floor(self.offset)end;self.sprite=self.frames[self.frameIndex]self.w=3;self.h=3;self:_draw()end;game:play(3)return tank end;function particle(c,d,ba,bb,b5,bc,bd)local be=entity{x=c,transparent=0,y=d,alwaysVisible=true,frames=b5 and b5 or{499},velX=ba and ba or math.random(-50,50),velY=bb and bb or math.random(-50,50),age=bc and bc or 1,animated=true}be._update=bd;be.update=function(self,dt,T)self.age=self.age-dt;if self._update then self:_update(dt,T)end;self.y=self.y-self.velY*dt;self.x=self.x+self.velX*dt;if self.age<=0 then game:remove(self)end end;return be end;function TIC()lt=t;t=time()dt=(t-lt)/1000;table.insert(dts,dt)if#dts>60 then while#dts>60 do table.remove(dts,1)end end;local bf=0;for g,bg in pairs(dts)do bf=bf+bg end;avg_dt=bf/#dts;if game.queuePlay and game.flags.music then game.playing=game.queuePlay;music(game.playing)game.queuePlay=false end;game.lastShutter=game.shutter;game.timer=game.timer+dt;if game.timer>1 then while game.timer>1 do game.timer=game.timer-1 end end;game.qs=game.qs+dt;if game.qs>0.25 then GlitchTiles={}game.qs=0 end;game:update(dt,game.speed)cls(Camera.bg)map(cam())game:draw()game:cleanup()end;function init()game.scenes.play=scene(function()loadRoom(game.start.x,game.start.y)end)game:load()game.activeScene="play"end;function exit()mset=_mset;mget=_mget;btn=_btn;btnp=_btnp end;function scanline(g)local bh="00000044283430346d4e4a4e854c30346524d04648617165597dce00ff000000ffff0000fa00ff00fafffffa00ffffff"if game.broken then bh="140c1c44243430346d4e4a4e854c30346524d04648757161597dced27d2c8595a16daa2cd2aa996dc2cadad45edeeed6"end;for j=1,#bh,2 do poke(0x3FC0+j//6*3+j//2%3,tonumber(bh:sub(j,j+1),16))end end;init()
-- <TILES>
-- 001:0ffffff0f0ffffffffffffffffffffffffffff0ffffff0ffffff0f0f0ffffff0
-- 002:000000000f0000f0000000000000000000000000000000000f0000f000000000
-- 003:0ff00ff0f000000ff000000f0000000000000000f000000ff000000f0ff00ff0
-- 004:0ffffff0ffffffffffffffffffffff0fffffffffffffff0ffff0f0ff0ffffff0
-- 005:0ffffff0f000000ff000000ff000000ff000000ff000000ff000000f0ffffff0
-- 006:0dddddd0dfdfddddddfddddddfdddddddddddd0dddddd0dddddd0d0d0dddddd0
-- 007:0dd00dd0d000000dd000000d0000000000000000d000000dd000000d0dd00dd0
-- 008:00ffff0f0f0000f0f0ffff0fffbbbbfbfbbbbbbbfbbbbbbb0fbbbbbbfbbbbbbb
-- 009:f0ffff000f0000f0f0ffff0fbfbbbbffbbbbbbbfbbbbbbbfbbbbbbf0bbbbbbbf
-- 010:f0ffff0f000000000f0000f0fbffffbfbbbbbbbbbbbbbbbbbfbbbbfbf0ffff0f
-- 011:00ffff0f0f0000f0f0000000f0ffff0fffbbbbfbfbbbbbbb0fbbbbbffbbbbbf0
-- 012:f0ffff000f0000f00000000ff0ffff0fbfbbbbffbbbbbbbffbbbbbf00fbbbbbf
-- 013:0eeeeee0efefeeeeeefeeeeeefeeeeeeeeeeee0eeeeee0eeeeee0e0e0eeeeee0
-- 014:000000000d000000000000d00000d0000000000000d0000000000d0000000000
-- 015:efefefeffefefefe0f0f0f0fe0e0e0e00e0e0e0e0000000000e000e0e000e000
-- 016:0ffbbff0ffbbbbfffbbbbbbffffbbffffffbbffffffbbffffffbbfff0ffffff0
-- 017:0ffffff0fffbbffffffbbffffffbbffffffbbffffbbbbbbfffbbbbff0ffbbff0
-- 018:0ff99ff0ff9999fff999999ffff99ffffff99ffffff99ffffff99fff0ffffff0
-- 019:0ffffff0fff99ffffff99ffffff99ffffff99ffff999999fff9999ff0ff99ff0
-- 020:0ffccff0ffccccfffccccccffffccffffffccffffffccffffffccfff0ffffff0
-- 021:0ffffff0fffccffffffccffffffccffffffccffffccccccfffccccff0ffccff0
-- 022:0ffaaff0ffaaaafffaaaaaaffffaaffffffaaffffffaaffffffaafff0ffffff0
-- 023:0ffffff0fffaaffffffaaffffffaaffffffaaffffaaaaaafffaaaaff0ffaaff0
-- 024:fbbbbbbb0fbbbbbbfbbbbbbbfbbbbbbbfbbbbbbbfbbbbbbb0fbbbbfb00ffff0f
-- 025:bbbbbbbfbbbbbbf0bbbbbbbfbbbbbbbfbbbbbbbfbbbbbbbfbfbbbbf0f0ffff00
-- 026:fbbbbbbf0fbbbbf0fbbbbbbffbbbbbbffbbbbbbffbbbbbbf0fbbbbf0fbbbbbbf
-- 027:fbbbbbf00fbbbbbffbbbbbf0fbbbbbbffbbbbbbbfbbbbbbb0fbbbbfb00ffff0f
-- 028:0fbbbbbffbbbbbf00fbbbbbffbbbbbbfbbbbbbbfbbbbbbbfbfbbbbf0f0ffff00
-- 029:0eeeeee0efefeeeeeefeeeeeefeeeeeeeeeeee0eeeeee0eeeeee0e0e0eeeeee0
-- 030:0eeeeee0efefeeeeeefeeeeeefeeeeeeeeeeee0eeeeee0eeeeee0e0e0eeeeee0
-- 031:0eeeeee0efefeeeeeefeeeeeefeeeeeeeeeeee0eeeeee0eeeeee0e0e0eeeeee0
-- 032:0ffffff0ffbffffffbbfffffbbbbbbbfbbbbbbbffbbfffffffbfffff0ffffff0
-- 033:0ffffff0fffffbfffffffbbffbbbbbbbfbbbbbbbfffffbbffffffbff0ffffff0
-- 034:0ffffff0ff9ffffff99fffff9999999f9999999ff99fffffff9fffff0ffffff0
-- 035:0ffffff0fffff9fffffff99ff9999999f9999999fffff99ffffff9ff0ffffff0
-- 036:0ffffff0ffcffffffccfffffcccccccfcccccccffccfffffffcfffff0ffffff0
-- 037:0ffffff0fffffcfffffffccffcccccccfcccccccfffffccffffffcff0ffffff0
-- 038:0ffffff0ffaffffffaafffffaaaaaaafaaaaaaaffaafffffffafffff0ffffff0
-- 039:0ffffff0fffffafffffffaaffaaaaaaafaaaaaaafffffaaffffffaff0ffffff0
-- 040:f0ffff0f0f0000f0f0ffff0fbfbbbbfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-- 041:bbbbbbbfbbbbbbf0bbbbbbbfbbbbbbbfbbbbbbbfbbbbbbbfbbbbbbf0bbbbbbbf
-- 042:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbfbbbbfbf0ffff0f
-- 043:fbbbbbbb0fbbbbbbfbbbbbbbfbbbbbbbfbbbbbbbfbbbbbbb0fbbbbbbfbbbbbbb
-- 044:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-- 045:0ee00ee0e000000ee000000e0000000000000000e000000ee000000e0ee00ee0
-- 046:000000f000000f0000000f0000000f0000000f0000000f0000000f00000000f0
-- 047:0f00000000f0000000f0000000f0000000f0000000f0000000f000000f000000
-- 048:000fffff00ffffff0fffffff0fffffff0f0fffff0f0000000f000fff0f00f0ff
-- 049:fffff000ffffff00fffffff0fffffff0fffff0f0000000f0ffff00f0fffff0f0
-- 050:0000000000bbbb000bbbbbb0f0bbbb0fff0000fff0ffff0ff000000f0ffffff0
-- 051:000000000000000000bbbb00fbbbbbbfffbbbbfff0ffff0ff000000f0ffffff0
-- 052:00000000000ff00000ffff000ffffff0000ff000000ff000000ff00000000000
-- 053:000000000000f0000000ff000ffffff00ffffff00000ff000000f00000000000
-- 054:00000000000ff000000ff000000ff0000ffffff000ffff00000ff00000000000
-- 055:00000000000f000000ff00000ffffff00ffffff000ff0000000f000000000000
-- 056:0000000000999990090099000009900000990090099009900999990000000000
-- 057:000000000bb00bb000b00b00000bb000000bb00000b00b000bb00bb000000000
-- 058:0000000000aaaa000aa00aa00aa000000aa000000aa00aa000aaaa0000000000
-- 059:0000000000e00e000ee00ee00ee00ee00ee00ee000eeee00000ee00000000000
-- 060:0000000000099000009999000090090000999900099009900990099000000000
-- 061:000000000bbbbb0000b00bb000bbbb0000b00bb000b00bb00bbbbb0000000000
-- 062:000000000aa00aa000a00a00000aa000000aa00000a00a000aa00aa000000000
-- 063:000000000e0000e00ee00ee000eeee00000ee000000ee000000ee00000000000
-- 064:0f0ff0ff0f00f0ff0f00f0ff0f0ff0ff0f00f0ff0f000fff00f00000000fffff
-- 065:fffff0f0ff0ff0f0fff0f0f0ff0ff0f0fffff0f0ffff00f000000f00fffff000
-- 066:0000000000eeee000eeeeee0f0eeee0fff0000fff0ffff0ff000000f0ffffff0
-- 067:0cccccc0cccc000ccccc000ccccc000cc000ccccc000ccccc000cccc0cccccc0
-- 068:099999909ff009999f0000999900009999900999999009999990090909999990
-- 069:0090090000000000900000090000000000000000900000090000000000900900
-- 070:0000000000900900090000900000000000000000090000900090090000000000
-- 071:0000000000a00a000a0000a000000000000000000a0000a000a00a0000000000
-- 072:0000000000c00c000c0000c000000000000000000c0000c000c00c0000000000
-- 073:0000000000b00b000b0000b000000000000000000b0000b000b00b0000000000
-- 074:0000ffff00ff00000f00000000ff00000000ffff000f0000000f0000000f0000
-- 075:ffffffff000000000ffffff000000000ffffffff000000000000000000000000
-- 076:ffff00000000ff00000000f00000ff00ffff00000000f0000000f0000000f000
-- 077:000000000000000000000000000000ff00000f000000f000000f0000000f0000
-- 078:0000000000000ff00000f0f00000f0f0f0ff000f0f00000000000f0f000000f0
-- 079:000000000000000000000000000f000000f0f000ff00f0000000f0000000f000
-- 080:000fffff00ffffff0fffffff0fffffff0f0fffff0f0000000f00ffff0f0f0000
-- 081:fffff000ffffff00fffffff0fffffff0fffff0f0000000f0ffff00f00000f0f0
-- 082:000000000000000000000000f000fff00f0f000f000000000000000000000000
-- 083:000000000000000000000000f000000f0f0000f0000000000000000000000000
-- 084:0aaaaaa0aff00aaaaf0000aaaa0000aaaaa00aaaaaa00aaaaaa00a0a0aaaaaa0
-- 085:00a00a0000000000a000000a0000000000000000a000000a0000000000a00a00
-- 086:0000000000999900099f999009f9999009999090099909900099990000000000
-- 087:0000000000aaaa000aafaaa00afaaaa00aaaa0a00aaa0aa000aaaa0000000000
-- 088:0000000000cccc000ccfccc00cfcccc00cccc0c00ccc0cc000cccc0000000000
-- 089:0000000000bbbb000bbfbbb00bfbbbb00bbbb0b00bbb0bb000bbbb0000000000
-- 090:000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f000f
-- 091:00000000000000000000000000ffff000ffffff0f0f0ffffff0ffffff0f0ffff
-- 092:0000f0000000f0000000f0000000f0000000f0000000f0000000f000f000f000
-- 093:000f0000000f0000000f0fff0000f00000ff0ff00ffff00f00fffff00000ffff
-- 094:000000f000000000000000000000000000000000ffffffff00000000ffffffff
-- 095:0000f0000000f000fff0f000000f00000ff0ff00f00ffff00fffff00ffff0000
-- 096:0f0f00000f0f00000f0f0fff0f0ff0000f0f00000f00ffff00f00000000fffff
-- 097:0000f0f00000f0f0fff0f0f0000ff0f00000f0f0ffff00f000000f00fffff000
-- 098:000f00000000f000000000000000f000000f000000000000000f00000000f000
-- 099:000f00000000f00000000000f000f0f00f0f000f00000000000f00000000f000
-- 100:0cccccc0cff00ccccf0000cccc0000ccccc00cccccc00cccccc00c0c0cccccc0
-- 101:00c00c0000000000c000000c0000000000000000c000000c0000000000c00c00
-- 102:00ffff000f0000f0f00cc00ff0cddc0ff0cddc0ff00cc00f0f0000f000ffff00
-- 103:0000000000000fff000fffff00ffffff00ffffff00ffffff00ff000000f000ff
-- 104:00000000fff00000fffff000ffffff00ffffff00ffffff000000ff00ff000f00
-- 105:00ffff000bbffbb0fbbbbbbfffbbbbfffbbffbbf00ffff000ffffff000ffff00
-- 106:000f000f000f000f000f0fff0000f00000ff0ff00ffff00f00fffff00000ffff
-- 107:ffffffffffffffffffffffffffffffff0ffffff0ffffffff00000000ffffffff
-- 108:f000f000f000f000fff0f000000f00000ff0ff00f00ffff00fffff00ffff0000
-- 109:0000000000ffffff0f0000000f0000000f0000000f0000000f0000000f000000
-- 110:00000000ffffffff000000000000000000000000000000000000000000000000
-- 111:00000000ffffff00000000f0000000f0000000f0000000f0000000f0000000f0
-- 112:000000000000ffff000f0000000f00000000ffff00000f0000000ff0000fff00
-- 113:00000000ffff00000000f0000000f000ffff000000f000000ff0000000fff000
-- 114:0ffffff0f000000f0ffffff0f000000ff000000ff000000ff000000f0ffffff0
-- 115:0ffffff0f000000ff000000ff000000ff000000ff000000ff000000f0ffffff0
-- 116:0bbbbbb0bff00bbbbf0000bbbb0000bbbbb00bbbbbb00bbbbbb00b0b0bbbbbb0
-- 117:00b00b0000000000b000000b0000000000000000b000000b0000000000b00b00
-- 118:0ffffff0fffffffff0000f0ff0000f0ffffffffff00f000ff00f000f0ffffff0
-- 119:00f00f0f00f0f0f000f0f00000f00f0000f000ff00ff0000000fffff00000000
-- 120:f0f00f000f0f0f00000f0f0000f00f00ff000f000000ff00fffff00000000000
-- 121:00eeee000eeeeee00eee0ee00eee0ee00eee0ee00eee0ee00eeeeee000eeee00
-- 122:000ff00000ffff000ffffff00ffffff00ffff0f00fff0ff00ffffff000ffff00
-- 123:0000000000aaaaaa00aaffff00aaffff00aaffff00aaaaaa00aaaaaa00aaaaaa
-- 124:00000000aaa00000f00a0000f00aa000f00aaa00aaaaaa00aaaaaa00aaaaaa00
-- 125:0f0000000f0000000f0000000f0000000f0000000f0000000f0000000f000000
-- 127:000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0
-- 128:00ff00f00ff000000f0bbbbb0fbbbbbb0fbbbbbb0ffbbbbb00ffbbbb000fffff
-- 129:0f00ff0000000ff0bbbbb0f0bbbbbbf0bbbbbbf0bbbbbff0bbbbff00fffff000
-- 130:0000000000000000000fffff00fff0000fff0fff0ff0ffff0ff0ffff0ff0ffff
-- 131:0000000000000000ffffffff00000000ffffffffffffffffffffffffffffffff
-- 132:0000000000000000fffff000000fff00fff0fff0ffff0ff0ffff0ff0ffff0ff0
-- 133:00ffffff0ffffffffffffffffffffffffffffffff0fffffff0000000f000ffff
-- 134:ffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff
-- 135:ffffff00fffffff0ffffffffffffffffffffffffffffff0f0000000fffff000f
-- 136:0ffffff0ffffffffffffffff0ffffff0ff0000ff0ffffff00f0000f00f0000f0
-- 137:00009900000990000090900009000b000b00bbb0bbb0bbb0bbb00b000b000000
-- 138:000000000cccccc00c000cc00000cc00000cc000000cc000000cc00000000000
-- 139:00aaffff00aaff0000aaffff00aaff0000aaffff00aaaaaa0000000000000000
-- 140:ffffaa00000faa00ffffaa00000faa00ffffaa00aaaaaa000000000000000000
-- 141:0f0000000f0000000f0000000f0000000f0000000f00000000ffffff00000000
-- 142:000000000000000000000000000000000000000000000000ffffffff00000000
-- 143:000000f0000000f0000000f0000000f0000000f0000000f0ffffff0000000000
-- 144:f0000000ff00ff00f0ff0fb0ff00ffb0ffffffb0ffffffb0ff00ff00f0000000
-- 145:ffffffff0ffff0f000ff0f0000ff0f000ffff0f00ffffff000bbbb0000000000
-- 146:0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff
-- 147:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-- 148:ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0
-- 149:f00f0000f00f0000f00ffffff00f0000f00f0000f000fffff00000000fffffff
-- 150:0000000000000000ffffffff0000000000000000ffffffff00000000ffffffff
-- 151:0000f00f0000f00ffffff00f0000f00f0000f00fffff000f0000000ffffffff0
-- 152:0f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f0
-- 153:ccccccccccffcccccf00ffcccf00f0fccf0f00fcccf00ffccccffccccccccccc
-- 154:000000000000000000000bbb0000b000000b000000b0000000b0000000b00000
-- 155:0000000000000000bbb00000000b0000000bb00000b00b000b000b00b0000b00
-- 156:000000000000000000000000000000ff0000ff0000fff00000fff00f0ffff0f0
-- 157:000000000000000000000000f00009000f00009000f0009000f09099f0f99099
-- 158:000000000000000000000000000000000000000000000000000000000000000f
-- 159:00000000fff00000ffff0000fffff000ff0ff000ff00f000ff00f000f000f000
-- 160:0000000f00ff00ff0bffffff0bffffff0bff00ff0bf0ff0f00ff00ff0000000f
-- 161:0000000000bbbb000ffffff00f0ffff000f0ff0000f0ff000f0ffff0ffffffff
-- 162:0fff0fff0ffff00000ffffff0ff0ffff0f0f00000f0f00000f0f000000f00000
-- 163:ffffffff00000000ffffffffffffffff00000000000000000000000000000000
-- 164:fff0fff0000ffff0ffffff00ffff0ff00000f0f00000f0f00000f0f000000f00
-- 165:0fff00000fff0000ffffffff0000fff00000fff0ffffffff00000000ffffffff
-- 166:0000f00f0000f00ffffff00f0ffff00f0ffff00fffff000f0000000ffffffff0
-- 167:f00f0ffff00f0ffff00ffffff00f0000f00f0000f000fffff00000000fffffff
-- 168:0f0000f00f0000f0ff0000ff0ffffff00f0000f0fff00fffffffffff0ffffff0
-- 169:000000000ffffff0f000000ff0ffff0ff000000fffffffff0ffffff000ffff00
-- 170:00b0000b00b000b000b00b00000bb0000000b00000000bbb0000000000000000
-- 171:00000b0000000b0000000b000000b000000b0000bbb000000000000000000000
-- 172:0ffff0f000fff00f00fff0000000ff00000000ff000000000000000000000000
-- 173:00f9909900f0909900f000900f000090f0000900000000000000000000000000
-- 174:0000000f000fffff00ffffff00fffff000ffff0f000fffff0000000000000000
-- 175:f000f000f000f000f00f0000f0f00000f0f00000000f00000000000000000000
-- 176:000000000000000000000000000000000000000000000000000fffff00ffffff
-- 177:000000000000000000000000000000000000000000000000fffff000ffffff00
-- 178:000000000000000000000000000000ff00000f000000f000000f000c000f00cc
-- 179:000000000000000000000000ff00000000f00000000f0000c000f000cc00f000
-- 180:0000000000000000000fffff00ffffff00ffffff00ffffff00ffffff000fffff
-- 181:0000000000000000fffff000ffff0f00ffff0f00ff000f000f000f00fffff000
-- 182:0000000000000000000fffff00fffff000fffff000ffff0000ffff00000fffff
-- 183:000000000000000000000000f0000000f0000000f0000000f000000000000000
-- 184:0000000000ffff000ffffff00ffffff00ffffff00f0000f00f0fb0f00f0000f0
-- 185:0ffffff0f000000fff0000ffffffffffffffffff0ffffff00ffffff000ffff00
-- 186:00ffff00000ffff0f000fffbff00fff0fffffff0ffffffff0fffffff00b00fff
-- 187:0000000000000000bbb00000000b00000b00b00000000b00f00b0b00ff000b00
-- 188:bb000000bbbaaaaa0bbbffff00bbbfff00abbbff00aabbba00aaabbb00aaaabb
-- 189:000000bbaaa00bbbf00abbb0f00bbb00f0bbba00abbbaa00bbbaaa00bbaaaa00
-- 190:00000000000000000000000f000000f0000000f0000000f00fffffff0f000000
-- 191:0000000000000000ffff00000000f0000000000000000000fffffff0000000f0
-- 192:0fffffff0fffffff00ffffff0f0ffffff0f00000ff0fffff0fffffff00ffffff
-- 193:fffffff0fffffff0ffffff00fffff0f000000f0ffffff0fffffffff0ffffff00
-- 194:000f00cc000f000c0000f00000000f00000000ff000000000000000000000000
-- 195:cc00f000c000f000000f000000f00000ff000000000000000000000000000000
-- 196:00000f00000fffff00ffffff00ffffff00ffffff000f0f00000f0000000f0000
-- 197:00f00000fffff000ff000f00ffffff00ffffff0000f0f0000000f0000000f000
-- 198:000fff00000fffff0000ff000000ffff0000ffff0000fff00000ff000000ff00
-- 199:00000000fffff0000000ff00ffffff00ffffff0000fff000000ff000000ff000
-- 200:0f0ff0f00f0000f00f0000f00f0000f00f0000f00f0000f000ffff0000000000
-- 201:0999999090000009990000999999999999999999099999900999999000999900
-- 202:00b000ff00b0b00f00b00000000b00b00000b00000000bbb0000000000000000
-- 203:fff00b00fffffff0ffffffff0fffffff0fff00ffbfff000f0ffff00000ffff00
-- 204:00aaffbb00aafbbb00aabbbf00abbb0000bbbfff0bbbaaaabbb00000bb000000
-- 205:bbffaa00bbbfaa00fbbbaa0000bbba00fffbbb00aaaabbb000000bbb000000bb
-- 206:0f0f0f0f0f00f0f00f00ffff0f00000000ffffff000000000000000000000000
-- 207:0f0ff0f0f00ff0f0ff0ff0f0000000f0ffffff00000000000000000000000000
-- 208:00eeee000ee0eee00e0eeee00e0eeee00e0eeee00e0eeee00ee0eee000eeee00
-- 209:000000000bb00bb0bffbbbbbbfffbbbbbbfbbb0b0bbbb0b000bb0b00000bb000
-- 210:b000000bbb0000bb0bb00bb000bbbb0000bbbb000bb00bb0bb0000bbb000000b
-- 211:0000cc00000cccc000cccc0000cccc000fccccf0c0ffff0ccc0000cc0cccccc0
-- 212:000000000c0cc0c00cccccc00ccc0ccc0cc0cccc0ccc00c000ccccc000000000
-- 213:0000000000cccc000c0000c00c0cc0c00c0cc0c00c0000c000cccc0000c00c00
-- 214:000cc00000cccc0000c00c000cccccc0cccffcccccffffcc000ff0000ff00ff0
-- 215:0000000000cccc000c0cc0c00cccccc00cc00cc00cccccc000cccc0000000000
-- 216:00000000000000000000000f000000f0000f0f0000fff0000fffff000ffffff0
-- 217:000000000000000000000000f00000000f0000000f00ff000f0ffff000fffff0
-- 218:00000fff0000ffff000fffff00f0f0ff00ff0fff00f0f0ff0fffffff0fffffff
-- 219:fff00000ffff0000fffff000ffffff00ffffff00ffffff00fffffff0fffffff0
-- 220:00000000000000f0000000f000000fff000000f0000000f00000000f00000000
-- 221:0000000000f0000000000000f0f0f0f000f0ff0f00f0f00ff0f0f00f00000000
-- 222:0000000000000000000000000f00f0000f00f0000f00f00000fff0000000f000
-- 224:0b0bb0b000b00b000fb00bf0f0bbbb0f0f0bb0f000ffff0000b00b000b0000b0
-- 225:fff00fff000ff00000bffb000bbbbbb00b0bb0b00bbbbbb000bbbb0000b00b00
-- 226:0ffbbbb00fbbbbb0f00fb00bf00fb00bfbb00bbbfffbbbbb0f0bb0b000fbbb00
-- 227:0000bb00000bbbb000bbbb0000bbbb000fbbbbf0b0ffff0bbb0000bb0bbbbbb0
-- 228:000bb00000bbbb0000b00b000bbbbbb0bbbffbbbbbffffbb0ffffff000ffff00
-- 229:00000000bb0bb0bb0bbbbbb00b0ff0b00b0ff0b0bbb00bbbb0bbbb0b00000000
-- 230:00000000099900000009999000b99b000b0990b000b00b0000bbbb00000bb000
-- 231:0000000000bbbb000b0ff0b00b0000b00bbbbbb0b00bb00bb0b00b0b00b00b00
-- 232:00bbbb000b0bb0b00bbbbbb00bb00bb00bbbbbb000bbbb00000bb00000000b00
-- 233:b000000b0b0bb0b000bbbb000b0bb0b0ffffffff0ffffff000bbbb0000000000
-- 235:000000000000000f0000000f00000fff0000f00f0000f00f0000f00f00000ff0
-- 236:0000000000000000000000000f00f0f00f00f0ff0f00f0f00f00f0f000ff00f0
-- 237:000000000000000000000000f000fff00f0f00f00f0f00f00f00fff00f0000f0
-- 238:00ff000000000000000000000ff000fff00f0f00fff00f00f0000f000fff00ff
-- 239:00000000000000000000000000f0f000f0ff0f00f0f00f00f0f00f0000f00f00
-- 240:0000000000ffff000f0000f00f0ff0f00f0ff0f00f0000f000ffff0000f00f00
-- 241:00099000009b9990090999000900000009009900009900909000009009999900
-- 242:0f0f0000fffff0f00fff00f0009900f000fffff000ffffff00ff0fff0ff0fff0
-- 243:00cccc000c0cc0c00cccccc000cccc00000cc000c0c00c0c0c0000c000000000
-- 244:0fff000000fff000ff0fff00ff00f0ff000ff0ff00ff000000f00000000ff000
-- 245:000ff000000ff00000f000000ffff00ffff0ff0fff000ff0f0ff000000ff0000
-- 246:0000ff000000ff0f0ff000fff0ff0ffff00ffff000000f00000ff000000ff000
-- 247:000ff00000000f000000ff00ff0ff000ff0f00ff00fff0ff000fff000000fff0
-- 248:0fffffff0fffffff0fffffff00ffffff0fffffffff00ffff0fff000000ffffff
-- 249:fffffff0fffffff0fffffff0ffffff00fffffff0ffff00ff0000fff0ffffff00
-- 251:00000000000f000000f0f0000f000f000f0f0f000f00f00f00f000f0000fff00
-- 252:0000000000000000000000000ff00000f00f000f0000fff00000000000000000
-- 253:0000ff000000000000000000ff00000000f00fff000ff0000000000000000000
-- 254:00000000000000000000000000000000fffff0ff000000000000000000000000
-- 255:00000000000000000000000000000000f0ffff0f000000000000000000000000
-- </TILES>
-- <TILES1>
-- 001:0333333033777733377777733777777333777733333333733333373303333330
-- 002:000000000f0000f0000000000000000000000000000000000f0000f000000000
-- 003:0ff00ff0f000000ff000000f0000000000000000f000000ff000000f0ff00ff0
-- 004:0111111011333311133333311333333111333311111111311111131101111110
-- 005:0111111010000001100000011000000110000001100000011000000101111110
-- 006:0888888088dd88888ddd88888dd8888888888288888822288888828808888880
-- 007:0dd00dd0d000000dd000000d0000000000000000d000000dd000000d0dd00dd0
-- 008:0044444404999949494444944466664646666666466666660466666646666666
-- 009:4444440094999940494444946466664466666664666666646666664066666664
-- 010:0400004049444494949999494644446466666666666666666466664640444404
-- 011:0044440404999949494444944466664646666666466666660466666446666640
-- 012:f0ffff000f0000f00000000ff0ffff0fbfbbbbffbbbbbbbffbbbbbf00fbbbbbf
-- 013:0eeeeee0efefeeeeeefeeeeeefeeeeeeeeeeee0eeeeee0eeeeee0e0e0eeeeee0
-- 014:000000000d000000000000d00000d0000000000000d0000000000d0000000000
-- 015:999999999e9e9e9eeeeeeeeeefefefeffefefefe0f0f0f0f00000000e000e000
-- 016:0ffbbff0ffbbbbfffbbbbbbffffbbffffffbbffffffbbffffffbbfff0ffffff0
-- 017:0ffffff0fffbbffffffbbffffffbbffffffbbffffbbbbbbfffbbbbff0ffbbff0
-- 018:0ff99ff0ff9999fff999999ffff99ffffff99ffffff99ffffff99fff0ffffff0
-- 019:0ffffff0fff99ffffff99ffffff99ffffff99ffff999999fff9999ff0ff99ff0
-- 020:0ffccff0ffccccfffccccccffffccffffffccffffffccffffffccfff0ffffff0
-- 021:0ffffff0fffccffffffccffffffccffffffccffffccccccfffccccff0ffccff0
-- 022:0ffaaff0ffaaaafffaaaaaaffffaaffffffaaffffffaaffffffaafff0ffffff0
-- 023:0ffffff0fffaaffffffaaffffffaaffffffaaffffaaaaaafffaaaaff0ffaaff0
-- 024:4666666604666666466666664666666646666666466666660466664600444404
-- 025:6666666466666640666666646666666466666664666666646466664040444400
-- 026:4666666404666640466666644666666446666664466666640466664046666664
-- 027:fbbbbbf00fbbbbbffbbbbbf0fbbbbbbffbbbbbbbfbbbbbbb0fbbbbfb00ffff0f
-- 028:0fbbbbbffbbbbbf00fbbbbbffbbbbbbfbbbbbbbfbbbbbbbfbfbbbbf0f0ffff00
-- 029:0eeeeee0efefeeeeeefeeeeeefeeeeeeeeeeee0eeeeee0eeeeee0e0e0eeeeee0
-- 030:0eeeeee0efefeeeeeefeeeeeefeeeeeeeeeeee0eeeeee0eeeeee0e0e0eeeeee0
-- 031:0eeeeee0efefeeeeeefeeeeeefeeeeeeeeeeee0eeeeee0eeeeee0e0e0eeeeee0
-- 032:0ffffff0ffbffffffbbfffffbbbbbbbfbbbbbbbffbbfffffffbfffff0ffffff0
-- 033:0ffffff0fffffbfffffffbbffbbbbbbbfbbbbbbbfffffbbffffffbff0ffffff0
-- 034:0ffffff0ff9ffffff99fffff9999999f9999999ff99fffffff9fffff0ffffff0
-- 035:0ffffff0fffff9fffffff99ff9999999f9999999fffff99ffffff9ff0ffffff0
-- 036:0ffffff0ffcffffffccfffffcccccccfcccccccffccfffffffcfffff0ffffff0
-- 037:0ffffff0fffffcfffffffccffcccccccfcccccccfffffccffffffcff0ffffff0
-- 038:0ffffff0ffaffffffaafffffaaaaaaafaaaaaaaffaafffffffafffff0ffffff0
-- 039:0ffffff0fffffafffffffaaffaaaaaaafaaaaaaafffffaaffffffaff0ffffff0
-- 040:f0ffff0f0f0000f0f0ffff0fbfbbbbfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-- 041:bbbbbbbfbbbbbbf0bbbbbbbfbbbbbbbfbbbbbbbfbbbbbbbfbbbbbbf0bbbbbbbf
-- 042:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbfbbbbfbf0ffff0f
-- 043:fbbbbbbb0fbbbbbbfbbbbbbbfbbbbbbbfbbbbbbbfbbbbbbb0fbbbbbbfbbbbbbb
-- 044:6666666666666666666666666666666666666666666666666666666666666666
-- 045:0ee00ee0e000000ee000000e0000000000000000e000000ee000000e0ee00ee0
-- 046:000000f000000f0000000f0000000f0000000f0000000f0000000f00000000f0
-- 047:0f00000000f0000000f0000000f0000000f0000000f0000000f000000f000000
-- 048:000fffff00ffffff0fffffff0fffffff0f0fffff0f0000000f000fff0f00f0ff
-- 049:fffff000ffffff00fffffff0fffffff0fffff0f0000000f0ffff00f0fffff0f0
-- 050:0000000000bbbb000bbbbbb0f0bbbb0fff0000fff0ffff0ff000000f0ffffff0
-- 051:000000000000000000bbbb00fbbbbbbfffbbbbfff0ffff0ff000000f0ffffff0
-- 052:00000000000ff00000ffff000ffffff0000ff000000ff000000ff00000000000
-- 053:000000000000f0000000ff000ffffff00ffffff00000ff000000f00000000000
-- 054:00000000000ff000000ff000000ff0000ffffff000ffff00000ff00000000000
-- 055:00000000000f000000ff00000ffffff00ffffff000ff0000000f000000000000
-- 056:0000000000999990090099000009900000990090099009900999990000000000
-- 057:000000000bb00bb000b00b00000bb000000bb00000b00b000bb00bb000000000
-- 058:0000000000aaaa000aa00aa00aa000000aa000000aa00aa000aaaa0000000000
-- 059:0000000000e00e000ee00ee00ee00ee00ee00ee000eeee00000ee00000000000
-- 060:0000000000099000009999000090090000999900099009900990099000000000
-- 061:000000000bbbbb0000b00bb000bbbb0000b00bb000b00bb00bbbbb0000000000
-- 062:000000000aa00aa000a00a00000aa000000aa00000a00a000aa00aa000000000
-- 063:000000000e0000e00ee00ee000eeee00000ee000000ee000000ee00000000000
-- 064:0f0ff0ff0f00f0ff0f00f0ff0f0ff0ff0f00f0ff0f000fff00f00000000fffff
-- 065:fffff0f0ff0ff0f0fff0f0f0ff0ff0f0fffff0f0ffff00f000000f00fffff000
-- 066:0000000000eeee000eeeeee0f0eeee0fff0000fff0ffff0ff000000f0ffffff0
-- 067:0cccccc0cccc000ccccc000ccccc000cc000ccccc000ccccc000cccc0cccccc0
-- 068:099999909ff009999f0000999900009999900999999009999990090909999990
-- 069:0090090000000000900000090000000000000000900000090000000000900900
-- 070:0000000000900900090000900000000000000000090000900090090000000000
-- 071:0000000000a00a000a0000a000000000000000000a0000a000a00a0000000000
-- 072:0000000000c00c000c0000c000000000000000000c0000c000c00c0000000000
-- 073:0000000000b00b000b0000b000000000000000000b0000b000b00b0000000000
-- 074:0000ffff00ff00000f00000000ff00000000ffff000f0000000f0000000f0000
-- 075:ffffffff000000000ffffff000000000ffffffff000000000000000000000000
-- 076:ffff00000000ff00000000f00000ff00ffff00000000f0000000f0000000f000
-- 077:000000000000000000000000000000dd00000d00000080000008000000080000
-- 078:0000000000000dd00000d0d00000d0d0d088000d080000000000080d00000080
-- 079:000000000000000000000000000d000000d0d000dd00d0000000d0000000d000
-- 080:000fffff00ffffff0fffffff0fffffff0f0fffff0f0000000f00ffff0f0f0000
-- 081:fffff000ffffff00fffffff0fffffff0fffff0f0000000f0ffff00f00000f0f0
-- 082:0000000000000000000000007000777003030003000000000000000000000000
-- 083:0000000000000000000000007000000703000030000000000000000000000000
-- 084:0aaaaaa0aff00aaaaf0000aaaa0000aaaaa00aaaaaa00aaaaaa00a0a0aaaaaa0
-- 085:00a00a0000000000a000000a0000000000000000a000000a0000000000a00a00
-- 086:0000000000999900099f999009f9999009999090099909900099990000000000
-- 087:0000000000aaaa000aafaaa00afaaaa00aaaa0a00aaa0aa000aaaa0000000000
-- 088:0000000000cccc000ccfccc00cfcccc00cccc0c00ccc0cc000cccc0000000000
-- 089:0000000000bbbb000bbfbbb00bfbbbb00bbbb0b00bbb0bb000bbbb0000000000
-- 090:000f0000000f0000000f0000000f0000000f0000000f0000000f00dd000fdddd
-- 091:00000000000000000000000000000000000000000dddddd0dddddddddddddddd
-- 092:0000f0000000f0000000f0000000f0000000f0000000f000dd00f000ddddf000
-- 093:0008000000080000000802220000800000771880037771180033777100003333
-- 094:0000008000000000000000000000000000000000888888881111111133333333
-- 095:0000800000008000222080000008100008817700811777301777330033330000
-- 096:0f0f00000f0f00000f0f0fff0f0ff0000f0f00000f00ffff00f00000000fffff
-- 097:0000f0f00000f0f0fff0f0f0000ff0f00000f0f0ffff00f000000f00fffff000
-- 098:0003000000003000000000000000300000030000000000000003000000003000
-- 099:0003000000003000000000007000707003030003000000000003000000003000
-- 100:0cccccc0cff00ccccf0000cccc0000ccccc00cccccc00cccccc00c0c0cccccc0
-- 101:00c00c0000000000c000000c0000000000000000c000000c0000000000c00c00
-- 102:00ffff000f0000f0f00cc00ff0cddc0ff0cddc0ff00cc00f0f0000f000ffff00
-- 103:0000000000000fff000fffff00ffffff00ffffff00ffffff00ff000000f000ff
-- 104:00000000fff00000fffff000ffffff00ffffff00ffffff000000ff00ff000f00
-- 105:00ffff000bbffbb0fbbbbbbfffbbbbfffbbffbbf00ffff000ffffff000ffff00
-- 106:000faadd000faaaa000faaaa0000faaa00ff0ffa0ffff00f00fffff00000ffff
-- 107:ddddddddaaddddaaaaaaaaaaaaaaaaaaaaaaaaaaffffffff00000000ffffffff
-- 108:ddaaf000aaaaf000aaaaf000aaaf0000aff0ff00f00ffff00fffff00ffff0000
-- 109:0000000000ffffff0f0000000f0000000f0000000f0000000f0000000f000000
-- 110:00000000ffffffff000000000000000000000000000000000000000000000000
-- 111:00000000ffffff00000000f0000000f0000000f0000000f0000000f0000000f0
-- 112:000000000000ffff000f0000000f00000000ffff00000f0000000ff0000fff00
-- 113:00000000ffff00000000f0000000f000ffff000000f000000ff0000000fff000
-- 114:0ffffff0f000000f0ffffff0f000000ff000000ff000000ff000000f0ffffff0
-- 115:0ffffff0f000000ff000000ff000000ff000000ff000000ff000000f0ffffff0
-- 116:0bbbbbb0bff00bbbbf0000bbbb0000bbbbb00bbbbbb00bbbbbb00b0b0bbbbbb0
-- 117:00b00b0000000000b000000b0000000000000000b000000b0000000000b00b00
-- 118:0ffffff0fffffffff0000f0ff0000f0ffffffffff00f000ff00f000f0ffffff0
-- 119:00f00f0f00f0f0f000f0f00000f00f0000f000ff00ff0000000fffff00000000
-- 120:f0f00f000f0f0f00000f0f0000f00f00ff000f000000ff00fffff00000000000
-- 121:00eeee000eeeeee00eee0ee00eee0ee00eee0ee00eee0ee00eeeeee000eeee00
-- 122:000ff00000ffff000ffffff00ffffff00ffff0f00fff0ff00ffffff000ffff00
-- 123:0000000000aaaaaa00aaffff00aaffff00aaffff00aaaaaa00aaaaaa00aaaaaa
-- 124:00000000aaa00000f00a0000f00aa000f00aaa00aaaaaa00aaaaaa00aaaaaa00
-- 125:0f0000000f0000000f0000000f0000000f0000000f0000000f0000000f000000
-- 127:000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0
-- 128:00ff00f00ff000000f0bbbbb0fbbbbbb0fbbbbbb0ffbbbbb00ffbbbb000fffff
-- 129:0f00ff0000000ff0bbbbb0f0bbbbbbf0bbbbbbf0bbbbbff0bbbbff00fffff000
-- 130:0000000000000000000fffff00fff0000fff0fff0ff0ffff0ff0ffff0ff0ffff
-- 131:0000000000000000ffffffff00000000ffffffffffffffffffffffffffffffff
-- 132:0000000000000000fffff000000fff00fff0fff0ffff0ff0ffff0ff0ffff0ff0
-- 133:00ffffff0ffffffffffffffffffffffffffffffff0fffffff0000000f000ffff
-- 134:ffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff
-- 135:ffffff00fffffff0ffffffffffffffffffffffffffffff0f0000000fffff000f
-- 136:0333333031111113331111337733337777777777077777700177771003111130
-- 137:00009900000990000090900009000b000b00bbb0bbb0bbb0bbb00b000b000000
-- 138:000000000cccccc00c000cc00000cc00000cc000000cc000000cc00000000000
-- 139:00aaffff00aaff0000aaffff00aaff0000aaffff00aaaaaa0000000000000000
-- 140:ffffaa00000faa00ffffaa00000faa00ffffaa00aaaaaa000000000000000000
-- 141:0f0000000f0000000f0000000f0000000f0000000f00000000ffffff00000000
-- 142:000000000000000000000000000000000000000000000000ffffffff00000000
-- 143:000000f0000000f0000000f0000000f0000000f0000000f0ffffff0000000000
-- 144:f0000000ff00ff00f0ff0fb0ff00ffb0ffffffb0ffffffb0ff00ff00f0000000
-- 145:ffffffff0ffff0f000ff0f0000ff0f000ffff0f00ffffff000bbbb0000000000
-- 146:0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff
-- 147:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-- 148:ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0
-- 149:f00f0000f00f0000f00ffffff00f0000f00f0000f000fffff00000000fffffff
-- 150:0000000000000000ffffffff0000000000000000ffffffff00000000ffffffff
-- 151:0000f00f0000f00ffffff00f0000f00f0000f00fffff000f0000000ffffffff0
-- 152:0373373003733730037337300373373003733730037337300373373003733730
-- 153:ccccccccccffcccccf00ffcccf00f0fccf0f00fcccf00ffccccffccccccccccc
-- 154:000000000000000000000bbb0000b000000b000000b0000000b0000000b00000
-- 155:0000000000000000bbb00000000b0000000bb00000b00b000b000b00b0000b00
-- 156:000000000000000000000000000000ff0000ff0000fff00000fff00f0ffff0f0
-- 157:000000000000000000000000f00009000f00009000f0009000f09099f0f99099
-- 158:000000000000000000000000000000000000000000000000000000000000000f
-- 159:00000000fff00000ffff0000fffff000ff0ff000ff00f000ff00f000f000f000
-- 160:0000000f00ff00ff0bffffff0bffffff0bff00ff0bf0ff0f00ff00ff0000000f
-- 161:0000000000bbbb000ffffff00f0ffff000f0ff0000f0ff000f0ffff0ffffffff
-- 162:0fff0fff0ffff00000ffffff0ff0ffff0f0f00000f0f00000f0f000000f00000
-- 163:ffffffff00000000ffffffffffffffff00000000000000000000000000000000
-- 164:fff0fff0000ffff0ffffff00ffff0ff00000f0f00000f0f00000f0f000000f00
-- 165:0fff00000fff0000ffffffff0000fff00000fff0ffffffff00000000ffffffff
-- 166:0000f00f0000f00ffffff00f0ffff00f0ffff00fffff000f0000000ffffffff0
-- 167:f00f0ffff00f0ffff00ffffff00f0000f00f0000f000fffff00000000fffffff
-- 168:037337300a7337a0a7aaaa7a7aaaaaa7017aa710771111777773377707777770
-- 169:00000000033333303311113371111117aa1111aaaaaaaaaa0aaaaaa000aaaa00
-- 170:00b0000b00b000b000b00b00000bb0000000b00000000bbb0000000000000000
-- 171:00000b0000000b0000000b000000b000000b0000bbb000000000000000000000
-- 172:0ffff0f000fff00f00fff0000000ff00000000ff000000000000000000000000
-- 173:00f9909900f0909900f000900f000090f0000900000000000000000000000000
-- 174:0000000f000fffff00ffffff00fffff000ffff0f000fffff0000000000000000
-- 175:f000f000f000f000f00f0000f0f00000f0f00000000f00000000000000000000
-- 176:000000000000000000000000000000000000000000000000000fffff00ffffff
-- 177:000000000000000000000000000000000000000000000000fffff000ffffff00
-- 178:000000000000000000000000000000ff00000f000000f000000f000c000f00cc
-- 179:000000000000000000000000ff00000000f00000000f0000c000f000cc00f000
-- 180:0000000000000000000fffff00ffffff00ffffff00ffffff00ffffff000fffff
-- 181:0000000000000000fffff000ffff0f00ffff0f00ff000f000f000f00fffff000
-- 182:0000000000000000000fffff00fffff000fffff000ffff0000ffff00000fffff
-- 183:000000000000000000000000f0000000f0000000f0000000f000000000000000
-- 184:00000000013333100333333003333330073333700aaaaaa00aff56a00aaaaaa0
-- 185:03333330a111111aaa1111aaaaaaaaaaaaaaaaaa0aaaaaa00aaaaaa000aaaa00
-- 186:00ffff00000ffff0f000fffbff00fff0fffffff0ffffffff0fffffff00b00fff
-- 187:0000000000000000bbb00000000b00000b00b00000000b00f00b0b00ff000b00
-- 188:bb000000bbbaaaaa0bbbffff00bbbfff00abbbff00aabbba00aaabbb00aaaabb
-- 189:000000bbaaa00bbbf00abbb0f00bbb00f0bbba00abbbaa00bbbaaa00bbaaaa00
-- 190:00000000000000000000000f000000f0000000f0000000f00fffffff0f000000
-- 191:0000000000000000ffff00000000f0000000000000000000fffffff0000000f0
-- 192:0fffffff0fffffff00ffffff0f0ffffff0f00000ff0fffff0fffffff00ffffff
-- 193:fffffff0fffffff0ffffff00fffff0f000000f0ffffff0fffffffff0ffffff00
-- 194:000f00cc000f000c0000f00000000f00000000ff000000000000000000000000
-- 195:cc00f000c000f000000f000000f00000ff000000000000000000000000000000
-- 196:00000f00000fffff00ffffff00ffffff00ffffff000f0f00000f0000000f0000
-- 197:00f00000fffff000ff000f00ffffff00ffffff0000f0f0000000f0000000f000
-- 198:000fff00000fffff0000ff000000ffff0000ffff0000fff00000ff000000ff00
-- 199:00000000fffff0000000ff00ffffff00ffffff0000fff000000ff000000ff000
-- 200:0affffa00aaaaaa00a3333a00a3333a00a3333a00aa33aa00faaaaf000000000
-- 201:0999999090000009990000999999999999999999099999900999999000999900
-- 202:00b000ff00b0b00f00b00000000b00b00000b00000000bbb0000000000000000
-- 203:fff00b00fffffff0ffffffff0fffffff0fff00ffbfff000f0ffff00000ffff00
-- 204:00aaffbb00aafbbb00aabbbf00abbb0000bbbfff0bbbaaaabbb00000bb000000
-- 205:bbffaa00bbbfaa00fbbbaa0000bbba00fffbbb00aaaabbb000000bbb000000bb
-- 206:0f0f0f0f0f00f0f00f00ffff0f00000000ffffff000000000000000000000000
-- 207:0f0ff0f0f00ff0f0ff0ff0f0000000f0ffffff00000000000000000000000000
-- 208:00eeee000ee0eee00e0eeee00e0eeee00e0eeee00e0eeee00ee0eee000eeee00
-- 209:000000000bb00bb0bffbbbbbbfffbbbbbbfbbb0b0bbbb0b000bb0b00000bb000
-- 210:b000000bbb0000bb0bb00bb000bbbb0000bbbb000bb00bb0bb0000bbb000000b
-- 211:0000cc00000cccc000cccc0000cccc000fccccf0c0ffff0ccc0000cc0cccccc0
-- 212:000000000c0cc0c00cccccc00ccc0ccc0cc0cccc0ccc00c000ccccc000000000
-- 213:0000000000cccc000c0000c00c0cc0c00c0cc0c00c0000c000cccc0000c00c00
-- 214:000cc00000cccc0000c00c000cccccc0cccffcccccffffcc000ff0000ff00ff0
-- 215:0000000000cccc000c0cc0c00cccccc00cc00cc00cccccc000cccc0000000000
-- 220:00000000000000f0000000f000000fff000000f0000000f00000000f00000000
-- 221:0000000000f0000000000000f0f0f0f000f0ff0f00f0f00ff0f0f00f00000000
-- 222:0000000000000000000000000f00f0000f00f0000f00f00000fff0000000f000
-- 224:0b0bb0b000b00b000fb00bf0f0bbbb0f0f0bb0f000ffff0000b00b000b0000b0
-- 225:fff00fff000ff00000bffb000bbbbbb00b0bb0b00bbbbbb000bbbb0000b00b00
-- 226:0ffbbbb00fbbbbb0f00fb00bf00fb00bfbb00bbbfffbbbbb0f0bb0b000fbbb00
-- 227:0000bb00000bbbb000bbbb0000bbbb000fbbbbf0b0ffff0bbb0000bb0bbbbbb0
-- 228:000bb00000bbbb0000b00b000bbbbbb0bbbffbbbbbffffbb0ffffff000ffff00
-- 229:00000000bb0bb0bb0bbbbbb00b0ff0b00b0ff0b0bbb00bbbb0bbbb0b00000000
-- 230:00000000099900000009999000b99b000b0990b000b00b0000bbbb00000bb000
-- 231:0000000000bbbb000b0ff0b00b0000b00bbbbbb0b00bb00bb0b00b0b00b00b00
-- 232:00bbbb000b0bb0b00bbbbbb00bb00bb00bbbbbb000bbbb00000bb00000000b00
-- 233:b000000b0b0bb0b000bbbb000b0bb0b0ffffffff0ffffff000bbbb0000000000
-- 235:000000000000000f0000000f00000fff0000f00f0000f00f0000f00f00000ff0
-- 236:0000000000000000000000000f00f0f00f00f0ff0f00f0f00f00f0f000ff00f0
-- 237:000000000000000000000000f000fff00f0f00f00f0f00f00f00fff00f0000f0
-- 238:00ff000000000000000000000ff000fff00f0f00fff00f00f0000f000fff00ff
-- 239:00000000000000000000000000f0f000f0ff0f00f0f00f00f0f00f0000f00f00
-- 240:0000000000ffff000f0000f00f0ff0f00f0ff0f00f0000f000ffff0000f00f00
-- 241:00099000009b9990090999000900000009009900009900909000009009999900
-- 242:0f0f0000fffff0f00fff00f0009900f000fffff000ffffff00ff0fff0ff0fff0
-- 243:00cccc000c0cc0c00cccccc000cccc00000cc000c0c00c0c0c0000c000000000
-- 251:00000000000f000000f0f0000f000f000f0f0f000f00f00f00f000f0000fff00
-- 252:0000000000000000000000000ff00000f00f000f0000fff00000000000000000
-- 253:0000ff000000000000000000ff00000000f00fff000ff0000000000000000000
-- 254:00000000000000000000000000000000fffff0ff000000000000000000000000
-- 255:00000000000000000000000000000000f0ffff0f000000000000000000000000
-- </TILES1>
-- <SPRITES>
-- 000:ccccccccccffffcccf0000fccf0ff0fccf0ff0fccf0000fcccffffccccfccfcc
-- 001:cccccccccccccccccffffffcf000000ff00ff00ff000000fcffffffcccfccfcc
-- 002:ccffffcccf0000fccf0000fccf0ff0fccf0ff0fccf0000fcccffffcccfccccfc
-- 003:ccffffcccf0000fccf0ff0fccf0ff0fccf0000fcccffffccccfccfccccfccfcc
-- 004:ccccccccccffffcccf0000fccf0ff0fccf0ff0fccf0000fcccffffccccfccfcc
-- 005:ccccccccccffffcccf0000fccf0ff0fccf0ff0fccf0000fcccffffccccccccfc
-- 006:ccffffcccf0ff0fccf0ff0fccf0000fccff000fcccffffccccccccfccccccccc
-- 007:ccffffcccf0000fccf0ff0fccf0ff0fccf0000fccfffffccccccccfccccccccc
-- 008:cccccccccccccccccffffffcf000000ff00ff00ff000000fcffffffccfccccfc
-- 009:ccccccccccffffcccf0000fccf0ff0fccf0ff0fccf0000fcccffffccccfccfcc
-- 010:ccccccccccffffcccf0000fccf0ff0fccf0ff0fccf0000fcccffffcccccfcccc
-- 011:ccffffcccf0ff0fccf0ff0fccf0000fccf00f0fcccffffcccccfcccccccccccc
-- 012:ccffffcccf0000fccf0ff0fccf0ff0fccf0000fcccffffcccccffccccccccccc
-- 013:cccccccccccccccccffffffcf000000ff00ff00ff000000fcffffffccccffccc
-- 014:ccccccccccffffcccf0000fccf0ff0fccf0ff0fccf0000fcccffffccccfccfcc
-- 015:ccccccccccffffcccf0000fccf0ff0fccf0ff0fccf0000fcccffffccccfccfcc
-- 016:0000000000cccc000cccccc00c0cc0c00cccccc0c00cc00c0cc00cc000000000
-- 017:0000000000cccc000c0cc0c00cccccc000cccc00000cc00000c00c00cc0000cc
-- 018:00cccc000c0cc0c00cccccc000cccc00000cc00000c00c000c0000c00c0000c0
-- 019:00cccc000c0cc0c00cccccc000cccc00000cc00000c00c0000c00c00000cc000
-- 020:fff00fff000ff00000bffb000bbbbbb00b0bb0b00bbbbbb000bbbb0000b00b00
-- 021:0ff00ff0000ff00000bffb000bbbbbb00b0bb0b00bbbbbb000bbbb0000b00b00
-- 022:00f0ff00000ff00000bffb000bbbbbb00b0bb0b00bbbbbb000bbbb0000b00b00
-- 023:000ff000000ff00000bffb000bbbbbb00b0bb0b00bbbbbb000bbbb0000b00b00
-- 024:9ffbbbb99fbbbbb9f00fb00bf00fb00bfbb00bbbfffbbbbb9f0bb0b999fbbb99
-- 025:9ffdddd99fddddd9f00fd00df00fd00dfdd00dddfffddddd9f0dd0d999fddd99
-- 026:0dd00dd0d000000dd000000d000dd000000dd000d000000dd000000d0dd00dd0
-- 027:0dd00dd0d000000dd000000d000dd000000dd000d000000dd000000d0dd00dd0
-- 028:0dd00dd0d000000dd000000d000dd000000dd000d000000dd000000d0dd00dd0
-- 029:0dd00dd0d000000dd000000d000dd000000dd000d000000dd000000d0dd00dd0
-- 030:0dd00dd0d000000dd000000d000dd000000dd000d000000dd000000d0dd00dd0
-- 031:0dd00dd0d000000dd000000d000dd000000dd000d000000dd000000d0dd00dd0
-- 032:00099000009b9990090999000900000009009900009900909000009009999900
-- 033:000099000009b999009099900900000009009900009900900000009099999900
-- 034:000099000009b9990090999b0900000009009900009900909000009009999900
-- 035:000099000009b9990090999b0900000b09009900009900900000009099999900
-- 036:0b0bb0b000b00b000fb00bf0f0bbbb0f0f0bb0f000ffff0000b00b000b0000b0
-- 037:00000000000000000b0bb0b000b00b00fbb00bbf0fbbbbf000ffff000bb00bb0
-- 038:0000000000000000b000000b0bbbbbb0fb0000bffbb00bbf0ffffff00bb00bb0
-- 039:0000000000000000f000000fffffffffff0000fffff00fff0ffffff00ff00ff0
-- 040:000000000b0bb0b00bb00bb000bffb000bbffbb00bbbbbb000bbbb000bb00bb0
-- 041:000bb0000bbffbb000bffb0000bbbb0000fbbf00000ff0000bb00bb000000000
-- 042:000bb00000bbbb0000b00b000bbbbbb0bbbffbbbbbffffbb0ffffff000ffff00
-- 043:00000000000bb00000bbbb0000b00b000bbbbbb0bbbffbbbbbffffbb0ffffff0
-- 044:000bb00000bbbb000bb00bb0bbbbbbbbbbbffbbb00ffff000ffffff000ffff00
-- 045:00bbbb000b0000b0b00ff00bb00ff00bbb0000bbbbbbbbbb0bbbbbb000bbbb00
-- 046:0000000000000bb00000bbbb000bbb0b000bb000000b00000000b00000000b00
-- 047:000000000000000000000bb00000bbbb000bbb0b000bb0000000bbb000000000
-- 048:00efee000ef0eee00f0eeee00e0eeee00e0eeee00e0eeee00ee0eee000eeee00
-- 049:00eeef000ee0ffe00e0ffee00f0feee00f0eeee00e0eeee00ee0eee000eeee00
-- 050:00eeef000ee0fff00e0fffe00e0ffee00f0feee00f0eeee00fe0eee000eeee00
-- 051:00eeee000ee0eef00e0eeff00e0efff00e0fffe00e0ffee00ff0eee000eeee00
-- 052:00eeee000ee0eee00e0eeee00e0eeee00e0eeef00e0eeff00ee0fff000efff00
-- 053:00eeee000ee0eee00e0eeee00e0eeee00e0eeee00e0eeee00ee0eef000eeef00
-- 054:00eeee000ee0eee00e0eeee00e0eeee00e0eeee00e0eeee00ee0eee000eeee00
-- 055:000fe00000f0ee0000feee0000feee0000feee0000feee0000f0ee00000fe000
-- 056:000fe000000fe000000fe000000fe000000fe000000fe000000fe000000fe000
-- 057:000000000bb00bb0bbfbbbbbbfffbbbbbbfbbb0b0bbbb0b000bb0b00000bb000
-- 058:000000000bb00bb0bfbfbbbbbbfbbbbbbfbfbb0b0bbbb0b000bb0b00000bb000
-- 059:000000000bb00bb0bbfbbbbbbfffbbbbbbfbbb0b0bbbb0b000bb0b00000bb000
-- 060:000000000bb00bb0bbfbbbbbbfbfbbbbbbfbbb0b0bbbb0b000bb0b00000bb000
-- 061:0000000000b0bb000bbbbbb00fbbbbb00bfbb0b00bbbb0b000bb0b00000bb000
-- 062:00000000000bb00000bbbb0000bbbb0000fbbb0000bbbb00000bb000000bb000
-- 063:0000000000bb0b000bbbbbb00bfbbbb00bbfbbb000bbbb0000bbbb00000bb000
-- 064:0f0f0000fffff0f00fff00f0009900f000fffff000ffffff00ff0fff0ff0fff0
-- 065:0f0f0000fffff00f0fff00f0009900f000fffff000ffffff00ff0fff0ff0fff0
-- 066:0f0f0000fffff00f0fff000f009900f000fffff000ffffff00ff0fff0ff0fff0
-- 067:0f0f0000fffff00f0fff000f0099000f00fffff000ffffff00ff0fff0ff0fff0
-- 068:0000000000900900090000900000000000000000090000900090090000000000
-- 069:0000000000990000000000900000009009000000090000000000990000000000
-- 070:0000000000099000000000000900009009000090000000000009900000000000
-- 071:0000000000009900090000000900000000000090000000900099000000000000
-- 072:bccccccbcbcbbcbcccbbbbcccb0bb0bcffffffffcffffffcccbbbbcccccccccc
-- 073:cbccccbccbcbbcbcccbbbbcccbb0bb0cffffffffcffffffcccbbbbcccccccccc
-- 074:ccbccbccccbbbbccccbbbbcccbbb0bbcffffffffcffffffcccbbbbcccccccccc
-- 075:cccbbcccccbbbbccccbbbbcccbbbbb0cffffffffcffffffcccbbbbcccccccccc
-- 076:ccbccbccccbbbbccccbbbbccc0bbbbbcffffffffcffffffcccbbbbcccccccccc
-- 077:cbccccbccbcbbcbcccbbbbcccb0bbbbcffffffffcffffffcccbbbbcccccccccc
-- 078:bccccccbcbcbbcbcccbbbbcccb0bb0bcffffffffcffffffcccbbbbcccccccccc
-- 079:dccccccdcdcddcdcccddddcccd0dd0dcffffffffcffffffcccddddcccccccccc
-- 080:cccccbbbccccb0bbccccbb0bcbbb0bbbccbbb000ccccbbbbcccb00f0ccb0b000
-- 081:bbbcccccbb0bccccb0bbccccbbb0bbbc000bbbccbbbbcccc0f00bccc000b0bcc
-- 082:cccccccccccccbbbccccb0bbccccbb0bcbbb0bbbccbbb000ccccbbbbcccb00f0
-- 083:ccccccccbbbcccccbb0bccccb0bbccccbbb0bbbc000bbbccbbbbcccc0f00bccc
-- 084:cccccccccccccccccccccbbbccccb0bbccccbb0bccbb0bbbcbbbb000ccbbbbbb
-- 085:ccccccccccccccccbbbcccccbb0bccccb0bbccccbbb0bbcc000bbbbcbbbbbbcc
-- 086:cccccbbbccccb0bbccccbb0bcbbb0bbbccbbbbbbccccb0f0cccb0000ccb0b000
-- 087:bbbcccccbb0bccccb0bbccccbbb0bbbcbbbbbbcc0f0bcccc0000bccc000b0bcc
-- 088:00000000099900000009999000b99b000b0990b000b00b0000bbbb00000bb000
-- 089:0000000000bbbb000b0000b00b0ff0b00f0000f0bbfbbfbbb0b00b0b00b00b00
-- 090:0000000000bbbb000b0ff0b00b0000b00bbbbbb0b00bb00bb0b00b0b00b00b00
-- 091:00bbbb000b0ff0b00b0ff0b00b0000b0b0bbbb0bb00bb00b00b00b0000b00b00
-- 092:000000000000000000ffff000f0bb0f00f0000f0fffffffff0f00f0f00f00f00
-- 093:00000ff00000f00f00aaaa000aafaaa00afaaaa00aaaa0a00aaa0aa000aaaa00
-- 094:00000ff00000f00f00cccc000ccfccc00cfcccc00cccc0c00ccc0cc000cccc00
-- 095:00000ff00000f00f00bbbb000bbfbbb00bfbbbb00bbbb0b00bbb0bb000bbbb00
-- 096:cccb0bb0ccbbb000ccbbbbb0ccbbbbb0ccbbbbb0ccbbbbb0cccbbbb0ccccbbb0
-- 097:0bb0bcccf00bbbccfbbbbbccfbbbbbccfbbbbbccfbbbbbccfbbbbcccfbbbcccc
-- 098:ccb0b000cccb0bb0ccbbb000cbbbbbb0cbbbbbb0ccbbbbb0cccbbbb0ccccbbb0
-- 099:000b0bcc0bb0bcccf00bbbccfbbbbbbcfbbbbbbcfbbbbbccfbbbbcccfbbbcccc
-- 100:cccbbbbbccb0b000cbbb0bb0bbbbb000bbbbbbb0bbbbbb00cbbbbb00ccbbbbb0
-- 101:bbbbbccc000b0bcc0bb0bbbcf00bbbbbfbbbbbbb0fbbbbbb0fbbbbbcfbbbbbcc
-- 102:cccb0bb0cccbb000cccbbbb0cccbbbb0cccbbbb0cccbbbb0cccbbbb0ccccbbb0
-- 103:0bb0bcccf00bbcccfbbbbcccfbbbbcccfbbbbcccfbbbbcccfbbbbcccfbbbcccc
-- 104:00000000ff00ff00f0ff0fb0ff00ffb0ffffffb0ffffffb0ff00ff0000000000
-- 105:00000000ff0ff000f0f00c00ff0ffc00fffffc00fffffc00ff0ff00000000000
-- 106:0ff00000f00f0000fff0e000ffffe000ffffe000ffffe000ffff00000ff00000
-- 107:000000000fffff00f00000fdff000ffffffffffdfffffffd0fffff0000000000
-- 108:ccccc0bbcccc0bbbcccc0b0bccc0fbb0c00f0bbb0b00f0bbc0b00fffcc0bb00b
-- 109:bb0cccccbbb0ccccb0b0cccc0bbf0cccbbb0f00cbb0f00b0fff00b0cb00bb0cc
-- 110:ccccccccccccc000cccc0bbbccc0bbbbccc0bbb0ccc0b0bbccc0bbbbc0cc00bb
-- 111:ccc0cccccc0b0ccc0cc0b0ccb0c0b0ccbb00b0ccbb0b0cccbbb0ccccbbb0cccc
-- 112:99bbbb999b0bb0b99bbbbbb99bb00bb99bbbbbb999bbbb99999bb99999999b99
-- 113:999999999bbbbbb9bb0bb0bbbbbbbbbbbbb00bbb9bbbbbb9999bb99999999b99
-- 114:99bbbb999b0bb0b99bbbbbb99bb00bb999bbbb9999bbbb99999bb99999999b99
-- 115:99bbbb999b0bb0b99bb00bb99bb00bb999bbbb9999bbbb99999bb99999999b99
-- 116:00000000000000000000000000bbbb000b0000b000b00b0000bbbb00000bb000
-- 117:00000000000000000000000000bbbb000b0990b000b00b0000bbbb00000bb000
-- 118:cccccccccccccccfcccccccbccccccbbccccccbbcccccbb0ccccbb00cccbbbbb
-- 119:ccccccccfcccccccbcccccccbbccccccbbcccccc0bbccccc00bbccccbbbbbccc
-- 120:dddddddddd9dd9ddd9dddd9dddddddddddddddddd9dddd9ddd9dd9dddddddddd
-- 121:ddddddddddaddadddaddddaddddddddddddddddddaddddadddaddadddddddddd
-- 122:ddddddddddcddcdddcddddcddddddddddddddddddcddddcdddcddcdddddddddd
-- 123:ddddddddddbddbdddbddddbddddddddddddddddddbddddbdddbddbdddddddddd
-- 124:c0b0000b0b0c0fbbc0c0f0bbcccc0fffcccc0b0cccc0b0ccccc0b0cccccc0b0c
-- 125:b0000b0cbbf0c0b0bb0f0c0cfff0ccccc0b0cccccc0b0ccccc0b0cccc0b0cccc
-- 126:0b000b0bc0bbb0c0cc000cc0ccccccc0cc0ccc0bc0b000b0cc0bbb0cccc000cc
-- 127:bbb0cccc0b00ccccbbbb00ccbbbb0b0c000b00b0cc0b00b0ccc0bb0ccccc00cc
-- 128:99ffff999f0ff0f99ffffff99ffffff99ffffff999ffff99999ff99999999f99
-- 129:9dddddd9dddddddddd0dd0dddddddddddddddddd9dddddd9999dd99999999d99
-- 130:9aaaaaa9aaaaaaaaa0aaaa0aaaaaaaaaaaaaaaaa9aaaaaa999aaaa99999999a9
-- 131:9cccccc9c0cccc0ccccccccccccccccccccccccc9cccccc999cccc99999999c9
-- 132:00000000000000000090000000b999000b0990b000b00b0000bbbb00000bb000
-- 133:00900000000900000009990000b99b000b0990b000b00b0000bbbb00000bb000
-- 134:ccbbbbbbcffbccffcccccf0fcccccfffccccffffccccffffcccccfffcccccccc
-- 135:bbbbbbccffccbffcf0fcccccfffcccccffffccccffffccccfffccccccccccccc
-- 136:dddddddddd9999ddd99f999dd9f9999dd999909dd999099ddd9999dddddddddd
-- 137:ddddddddddaaaadddaafaaaddafaaaaddaaaa0addaaa0aadddaaaadddddddddd
-- 138:ddddddddddccccdddccfcccddcfccccddcccc0cddccc0ccdddccccdddddddddd
-- 139:ddddddddddbbbbdddbbfbbbddbfbbbbddbbbb0bddbbb0bbdddbbbbdddddddddd
-- 140:cccccccccccccccccccccc00ccccc0bbcccc0b00ccc0b0c0cccc0cc0cccccc0b
-- 141:cccccccccccccccc0cccccccb0ccccccbb00ccccbbbb0cccbbbbb0ccbbbbb0cc
-- 142:ccccccccccccccc0cccccc0bcccccc0bcccccc0bcccccc0bcccc000bccc0bbb0
-- 143:0000ccccbbbb0cccbb0bb0ccbbbbbb0c0bbbbb0cbbbbbb0cbbbbbb0cbbbbbb0c
-- 144:cccccccccccccccccccccccccccbcccbccbbb0bbccbbb0bbccbbb0bbccbbb0bb
-- 145:cccccccccccccccccccccccccccbccccb0bbbcccb0bbbcccb0bbbcccb0bbbccc
-- 146:cccccccccccccccccccccccccccbcccbccbbb0bbccbbb0bbccbbb0bbccbbb0bb
-- 147:ccccccccccbbccccccbbbcccccbbbcccb0bbbcccb0bbbcccb0bbbcccb0bb0ccc
-- 148:cccccccbccccccbbccccccbbcccbccbbccbbb0bbccbbb0bbccbbb0bbccbbb0bb
-- 149:ccccccccbcbbccccbcbbbcccbcbbbcccbcbbbcccbcbbbcccbcbbbcccbcbbcccc
-- 150:cccccccbcccbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbbbb
-- 151:ccccccccbcbbccccbcbbbcccbcbbbcccbcbbbcccbcbbbcccbcbbbcccbcbbcccc
-- 152:00000000000ff00000ffff000ffffff0000ff000000dd000000dd00000000000
-- 153:00000000000ff00000ffff000dddddd0000dd000000dd000000dd00000000000
-- 154:00000000000dd00000dddd000dddddd0000dd000000dd000000dd00000000000
-- 155:00000000000dd00000dddd000dddddd0000ff000000ff000000ff00000000000
-- 156:ccccc0b0ccccc0b0cccccc0bcccccc0bccccccc0cccccccccccccccccccccccc
-- 157:0bbbb0ccc0000ccc0ccccccc0ccccccccccccccccccccccccccccccccccccccc
-- 158:cc0b00bbc0b0c0bbcc0cc0bbcccc0bbbccc0b00bccc0b0c0cccc0b0cccccc0cc
-- 159:00bbbb0cbb0bbb0cbbbbbb0cbbbbb0ccbbbb0ccc0000cccccccccccccccccccc
-- 160:cc000b00ccbbbbbbccbbbbbbccbbbbbbccbbbbbbcccbbbbbcccccccccccccccc
-- 161:0bbb0ccc0bbbbbccb00bbbccbbb0bbccbbbbbcccbbbbcccccccccccccccccccc
-- 162:cc000b00ccbbbbbbccbbbbbbccbbbbbbccbbbbbbcccbbbbbcccccccccccccccc
-- 163:0bbbbccc0bbbbbccb00bbbccbbb0bbccbbbbbcccbbbbcccccccccccccccccccc
-- 164:cc000bbbccbbb000ccbbbbbbccbbbbbbccbbbbbbcccbbbbbcccccccccccccccc
-- 165:0bbbbccc0bbbbbccb00bbbccbbb0bbccbbbbbcccbbbbcccccccccccccccccccc
-- 166:ccbbbbbbccbbb000ccbbbbbbccbbbbbbccbbbbbbcccbbbbbcccccccccccccccc
-- 167:0bbbbccc0bbbbbccb00bbbccbbb0bbccbbbbbcccbbbbcccccccccccccccccccc
-- 168:ccccbbcccccbbbbcccbbbbccccbbbbcccfbbbbfcb0ffff0bbb0000bbcbbbbbbc
-- 169:cccbbccccccbbcccccbbbbccccbbbbcccfbbbbfcb0ffff0bbb0000bbcbbbbbbc
-- 170:ccbbcccccbbbbcccccbbbbccccbbbbcccfbbbbfcb0ffff0bbb0000bbcbbbbbbc
-- 171:cccbbccccccbbcccccb00bccccbbbbcccfbbbbfcb0ffff0bbb0000bbcbbbbbbc
-- 172:cccfccccccf0ffcccf0000fcf00000fccf000fccccf00fcccccffccccccccccc
-- 173:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
-- 174:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
-- 175:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
-- 176:cccccccbcccbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbb00
-- 177:ccccccccbcbbccccbcbbbcccbcbbbcccbcbbbcccbcbbbcccbcbbbccc0bbb0bcc
-- 178:cccccccbcccbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbbbb
-- 179:ccccccccbcbbccccbcbbbcccbcbbbcccbcbbbcccbcbbbcccbcbbbcccbbbb0bcc
-- 180:cccccccbcccbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbbbb
-- 181:ccccccccbcbbccccbcbbbcccbcbbbcccbcbbbcccbcbbbcccbcbbbcccbbbb0bcc
-- 182:cccccccbcccbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbcbbccbbbbbb
-- 183:ccccccccbcbbccccbcbbbcccbcbbbcccbcbbbcccbcbbbcccbcbbbcccbbbb0bcc
-- 184:ccccccccccbbbbcccb0000bccb0bb0bccb0bb0bccb0000bcccbbbbccccbccbcc
-- 185:cccccccccccccccccbbbbbbcb000000bb00bb00bb000000bcbbbbbbcccbccbcc
-- 186:ccbbbbcccb0000bccb0000bccb0bb0bccb0bb0bccb0000bcccbbbbcccbccccbc
-- 187:ccbbbbcccb0000bccb0bb0bccb0bb0bccb0000bcccbbbbccccbccbccccbccbcc
-- 188:ccccccccccffcccccf00fcccccf00fcccf0000fcccf00fcccccfffcccccccccc
-- 189:ccccccccccccccccccccccccccccccffcccccfccccccfccccccfcccccccfcccc
-- 190:cccccccccccccffcccccfcfcccccfcfcfcffcccfcfcccccccccccfcfccccccfc
-- 191:cccccccccccccccccccccccccccfccccccfcfcccffccfcccccccfcccccccfccc
-- 192:ccbbb00fccbbb0ffccbbb00fccbbbb00ccbbbbbbcccbbbbbcccccccccccccccc
-- 193:00b0bbbcf0b0bbbc00bbbbbc0bbbbbbcbbbbbbccbbbbbccccccccccccccccccc
-- 194:ccbbbbbbccbbb0ffccbbb00fccbbbb00ccbbbbbbcccbbbbbcccccccccccccccc
-- 195:bbb0bbbcf0b0bbbc00bbbbbc0bbbbbbcbbbbbbccbbbbbccccccccccccccccccc
-- 196:ccbbbbbbccbbbbbbccbbb0ffccbbbb00ccbbbbbbcccbbbbbcccccccccccccccc
-- 197:bbb0bbbcbbb0bbbcf0bbbbbc0bbbbbbcbbbbbbccbbbbbccccccccccccccccccc
-- 198:ccbbbbbbccbbbbbbccbbb000ccbbbbbbccbbbbbbcccbbbbbcccccccccccccccc
-- 199:bbb0bbbcbbb0bbbc00bbbbbcbbbbbbbcbbbbbbccbbbbbccccccccccccccccccc
-- 200:ccccccccccbbbbcccb0000bccb0bb0bccb0bb0bccb0000bcccbbbbccccbccbcc
-- 201:ccccccccccbbbbcccb0000bccb0bb0bccb0bb0bccb0000bcccbbbbccccccccbc
-- 202:ccbbbbcccb0bb0bccb0bb0bccb0000bccbb000bcccbbbbccccccccbccccccccc
-- 203:ccbbbbcccb0000bccb0bb0bccb0bb0bccb0000bccbbbbbccccccccbccccccccc
-- 204:0bb00bb0b000000bb000000b000bb000000bb000b000000bb000000b0bb00bb0
-- 205:cccfcccccccfcccccccfcfffccc0fcccccff0ffccffff00fccfffff0ccccffff
-- 206:ccccccfcccccccccccccccccccccccccccccccccffffffff00000000ffffffff
-- 207:ccccfcccccccfcccfffcfccccccf0ccccff0ffccf00ffffc0fffffccffffcccc
-- 208:00000000fff00000f0000000ff00000000f00000ff0000000000000000000000
-- 209:000000000f000000f0f0000000f000000f000000fff000000000000000000000
-- 210:ccccccccccffffffcf000000cf000000cf000000cf000000cf000000cf000000
-- 211:ccccccccffffffff000000000000000000000000000000000000000000000000
-- 212:ccccccccffffffcc000000fc000000fc000000fc000000fc000000fc000000fc
-- 213:cccccccccccccccccccccccccccccccccccccccccccbbcccccb00bccccbbbbcc
-- 214:cccccccccccccccccccccccccccbbcccccbbbbcccbb00bbccbbbbbbcccffffcc
-- 215:cccccccccccbbcccccbbbbcccbb00bbccbbbbbbcccffffcccffffffcccffffcc
-- 216:cccccccccccccccccbbbbbbcb000000bb00bb00bb000000bcbbbbbbccbccccbc
-- 217:ccccccccccbbbbcccb0000bccb0bb0bccb0bb0bccb0000bcccbbbbccccbccbcc
-- 218:ccccccccccbbbbcccb0000bccb0bb0bccb0bb0bccb0000bcccbbbbcccccbcccc
-- 219:ccbbbbcccb0bb0bccb0bb0bccb0000bccb00b0bcccbbbbcccccbcccccccccccc
-- 220:000dd000000dd000dddddddd0dddddd0000dd00000dddd000dd00dd0dd0000dd
-- 221:ccccffffccff0000cf000000ccff0000ccc0ffffcccfcccccccfcccccccfcccc
-- 222:ffffffff000000000ffffff000000000ffffffffcccccccccccccccccccccccc
-- 223:ffffcccc0000ffcc000000fc0000ffccffff0cccccccfcccccccfcccccccfccc
-- 224:000000000f000000ff0000000f0000000f000000fff000000000000000000000
-- 225:000000000f000000f0f00000f0f00000f0f000000f0000000000000000000000
-- 226:cf000000cf000000cf000000cf000000cf000000cf000000ccffffffcccccccc
-- 227:000000000000000000000000000000000000000000000000ffffffffcccccccc
-- 228:000000fc000000fc000000fc000000fc000000fc000000fcffffffcccccccccc
-- 229:cccbbcccccbbbbccccb00bcccbbbbbbcbbbffbbbbbffffbbcffffffcccffffcc
-- 232:ccbbbbcccb0000bccb0bb0bccb0bb0bccb0000bcccbbbbcccccbbccccccccccc
-- 233:cccccccccccccccccbbbbbbcb000000bb00bb00bb000000bcbbbbbbccccbbccc
-- 234:ccccccccccbbbbcccb0000bccb0bb0bccb0bb0bccb0000bcccbbbbccccbccbcc
-- 235:ccccccccccbbbbcccb0000bccb0bb0bccb0bb0bccb0000bcccbbbbccccbccbcc
-- 236:000bb000000bb000bbbbbbbb0bbbbbb0000bb00000bbbb000bb00bb0bb0000bb
-- 237:cccfcccccccfcccccccfcccccccfcccccccfcccccccfcccccccfcccccccfcccc
-- 238:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
-- 239:ccccfcccccccfcccccccfcccccccfcccccccfcccccccfcccccccfcccccccfccc
-- 240:000000000bb00bb0bffbbbbbbfffbbbbbbfbbb0b0bbbb0b000bb0b00000bb000
-- 241:00000000000000000000000000c0c000000c000000c0c0000000000000000000
-- 242:00000000000000000000000000e0e000000e000000e0e0000000000000000000
-- 243:00000000000000000000000000f0f000000f000000f0f0000000000000000000
-- 244:0000000000000000000000000b0b000000b000000b0b00000000000000000000
-- 245:0000000000000000000000000d0d000000d000000d0d00000000000000000000
-- 246:0000000000000000000000000090900000090000009090000000000000000000
-- 247:00000000000000000000ff000b0b00f000b000f00b0b0f000000000000000000
-- 248:0000000000000000000ff00000ffff0000ffff00000ff0000000000000000000
-- 249:0000000000000000000bb00000bbbb0000bbbb00000bb0000000000000000000
-- 250:0000000000000000000ee00000eeee0000eeee00000ee0000000000000000000
-- 251:0000000000000000000dd00000dddd0000dddd00000dd0000000000000000000
-- 252:000ee000000ee000eeeeeeee0eeeeee0000ee00000eeee000ee00ee0ee0000ee
-- 253:cccfcccccccfcccccccfcfffccc0fcccccff0ffccffff00fccfffff0ccccffff
-- 254:ccccccccccccccccccccccccccccccccccccccccffffffff00000000ffffffff
-- 255:ccccfcccccccfcccfffcfccccccf0ccccff0ffccf00ffffc0fffffccffffcccc
-- </SPRITES>
-- <MAP>
-- 000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101010101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100121011000000000000000000000000000000000000000000000000000100121011000000000000000000000000000000010012101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 001:000000000000000000000000000000000000000000000000000000000000008800101010101010101010001010101010001010101010101010100088000000000000000000768610010121010110768600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101010101010100000001010101010101000000000000000001010101010101010101010100000001010101010101010101010101000000010000000101010101010101010101010101010101010101010101010000000d6e6e6f600000000000000000000000000000000d6e6e6f6000000
-- 002:000000000000000000cdddedfd000000000000000000000000000000000000890010768605158b587810001001210110001058788b031376861000890010101010101010107787102020202020107787101010101010101000000000008800000000101010100000000000000010101010000000008800000000d4e4f4008b0000000000000000000000000000008b00d4e4f40000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c210000000100000001020202020a120202020202020202020202020a120202010000000d7cbdbf700001010101010101010101010101000d7abbbf7000000
-- 003:0000000000000000becedeeefe0000000000000000000000000000000000008a0010778706168c7a6a101010202020101010596a8c0414778710008a0010202020202020202020202020202020202020202020202020201000000000008900101010100717101010101010101010071710101010008900000000d5e5f5258c0000000000000000000000000000008c25d5e5f50000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a120202020202020202020202020a120202010000000d7ccdcf725251025252320202020202020201000d7acbcf7000000
-- 004:0000000000000000bfcfdfefff00000000000000000000000000000000000000001028482020202020071710202020100717202020202028481000000010202020202020202020202020202020202020202020202020201000000000008a00102020200818202020202020202020081820202010008a00000000000000001000000000000000000000000000000010000000000000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a12020202020204e202020202020a120202010000000d8e8e8f800001028482020202020202020201000d8e8e8f8000000
-- 005:000000000000000000000000000000000000000000000000000000000000008800102949204b5b20200818102020201008182020206b7b29491000880010202020202020202020202020202020202020202020202020201000000000000000102020202020202020202020202020202020202010000000000000000088001000000000000000000000000000000010008800000000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a12020b0a0a0a0a0a0a0a0c02020a120202010000000000000000000102a4a202020202020202020100000000000000000
-- 006:000000abbb001010101010101010100000e283f200001010101010000000008900102949204c5c20202007172020200717202020206c7c294910008900102020208820202020202020202020202020202020208820202010000000001010401020202020202020202020204e202020202020201010101000000000008900100000000a101010701010100900000010008900000000001010a2a2a2a2a2a2a2a2a2a29100000081a2a2a2a2a2a2a2a2a2a2a210100010101010101020202020a12020a1e0e0e0e0e0e0e0a12020a120202010000000d6e6e6f60000102020202020202020202020101010000000000000
-- 007:000000acbc00100000000000000010000000000000001001210110000000008a0010294920202020202008182020200818202020202020294910008a0010202020892020202020203e204e203e202020202020892020201000000000100200d220202020202020202020202020202020202020d200121000000000008a0010000000008802e0e0e012880000000010008a0000000000020000000000000000000000002e002e0000000000000000000000000012000200000000d220202020a12020a1e0e0e0e0e0e0e0a12020a120202010000000d7c9d9f70000102020202020202020202020201210008800000000
-- 008:00000000000010000000000000001010101010101010100000001010100000000010294920202020202020202020202020202020202020294910000000102020208a20202020202020202020202020202020208a2020201000000000102200d22020202020205e20206e20205e202020202020d2003210000000000000001000008e008922e0e0e03289008e0000100000000000000022000000000000000000000000004e000000000000000000000000000032002200000000d220202020a1204ea1e0e0e05ee0e0e0a14e20a120202010000000d7cadaf72525102525232020202020202020203210008900000000
-- 009:001010101010100000000000000000007000a10070000000000000121000001010102a4a209c2020202020202020202020202020209b202a4a1010100010202020202020202020202020202020202020202020202020201000000000100200d220202020202020202020202020202020202020d20012100000000000880010000000008a02e0e0e0128a000000001000880000000000020000000000000000000000002e002e0000000000000000000000000012000200000000d220202020a12020a1e0e0e0e0e0e0e0a12020a120202010000000d8e8e8f80000102020202020202020202020201210008a00000000
-- 010:001022000000000000000f00000000007000a10070000000000000321000001002202020202020202020202020202020202020202020202020201210001003132020202020202020202020202020202020202020200313100000000010101010202020202020204e20202020202020202020201010101000000000008900100000000a101010701010100900000010008900000000001010828282828282828282829000000080828282828282828282828210100010101010101020202020a12020a1e0e0e0e0e0e0e0a12020a1202020100000000000000000001028482020203f2020202020101010000000000000
-- 011:001010101010100000000000000000007000a1007000000000000012100000102220202020202020202020202020202020202020202020202020321000100414202020201a20202020202020202020201a202020200414100000000000000010202020202020202020202020202020202020201000000000000000008a001000000000000000000000000000000010008a00000000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a12020b1a0a0a0a0a0a0a0c12020a120202010000000d6e6e6f60000102a4a202020202020202020100000000000000000
-- 012:000000000000100000000000000010101010101010101000000010101000001002202020202020202020202020202020202020202020202020201210101010101010101010d2d2d2d2d2d2d2d2d2d2d2101010101010101010000000008800102020200313202020202020202020031320202010008800000000000000001000000000000000000000000000000010000000000000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a12020202020204e202020202020a120202010000000d7e9f9f700001020202020202020202020201000d6e6e6f6000000
-- 013:0000000000001000000000000000100000000000000010113111100000000010101010101020202020202020202020202020202020201010101010101002000000000000000000000000000000000000000000000000001210000000008900101010100414101010d2d2d2101010041410101010008900000000d4e4f4008b0000000000000000000000000000008b00d4e4f40000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a120202020202020202020202020a120202010000000d7eafaf725251025252320202020202325251025d7b7c7f7000000
-- 014:0000000000001010101010101010100000000000000010101010100000000000000000001010101010101088202020881010101010101000000000001022000000000000000000000000000000000000000000000000003210000000008a00000000101010100010000000100010101010000000008a00000000d5e5f5258c0000000000000000000000000000008c25d5e5f50000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c210000000100000001020202020a120202020202020202020202020a120202010000000d8e8e8f800001010101010101010101010101000d7b8c8f7000000
-- 015:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000089113111890000000000000000000000001002000000000000000000000000000000000000000000000000001210000000000000000000000000000010113111100000000000000000000000000000000000001010101010101000000010101010101010000000000000000010101010101010101010101000000010101010101010101010101010000000100000001010101010101010101010101010101010101010101010100000000000000000000000000000000000000000000000d8e8e8f8000000
-- 016:000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a1010108a000000000000000000000000101010101010101010101010101010101010101010101010101010101000000000000000000000000000001010101010000000000000000000000000000000000000000000000000101131111000000000000000000000000000000000000000000000000000101131111000000000000000000000000000000010113111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 017:000000000000000000000000000000000000000000000000000000000000000000001010101058686868781001210110586868687810101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0a0a0a0a0a0c00000000000000000000000000000000000000000000000100121011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010012101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 018:00000010101010101010101010101010101010101010100000000000000000000010108b8b8b7a695a69798bd2d2d28b595a5a696a8b8b8b10100000001010101010101010101010101010101010101010101000000000000000000000000000000000000000a11010101010a10000000000000000000000000000000000000000000000100000001000000000000000000000000000000000000010012101101010101010101010101010100000000000000000000010000000103030303030303030303030303030303030303030303010003030303030303030303030303030303030303030303030303030303000
-- 019:00000010202020202020202020202020202020202020101010101000000000000010208c8c8c20202020208c2020208c20202020208c8c8c20100000001007170007170007170007170007170007170007171000000000000000000000000000000000000088a11001210110a188000000000000000000000000000000000000000000001000000010000000000000000000000000000000000000100000001000000000000000000000008b00d4e4f400000000000010000000100000000000000000000000000000000000000000000010003000000000000000000000000000000000000000000000000000003000
-- 020:0000001020a4b4c420a4b4c42020a4b4c420a4b4c4201001210110000000000000102020202020202020202020202020202020202020202020100000001008180008180008180008180008180008180008181000000000000000000000000000000000000089a11020202010a189000000000000000000000000000000000000000000001060606010000000000000000000000000000000000000100000001000000000000000000000008c25d5e5f500000000000010000000100030303030303030303030303030303030303030300010003000000000000000000000000000000000000000000000000000003000
-- 021:000000108ba5b5c58ba5b5c52020a5b5c58ba5b5c58b102020201000000000000010202020202838480717202020202007172838482020202088000000101010101010101010101010101010101010100000100000000000000000000000000000880000008aa11020202010a18a00000088000000000000000000000000000000000000100000001000000000000000000000000000000000000010000000100000000000000000000000100000000000000000000010000000100030000000000000000000000000000000000000000010003000000000000000000000000000000000000000000000000000003000
-- 022:000000108ca6b6c68ca6b6c62020a6b6c68ca6b6c68c102020201000000000000010202020202a3a4a0818202020202008182a3a4a202020208900000010202020202020202020202020202020202010071710000000000000000000000000000089b0a0a0a0c11020202010b1a0a0a0c089000000000000000000000000d4e4f40088001000000010008800d4e4f4000000000000000000000000100000001000000010101010100000008b00d4e4f400000000000010000000100030003030303030303030303030303030303030303010003000000000000000002f00000000000000000000000000000000003000
-- 023:0000001037373737373737373737373737373737373788202020880000000000001020204b5b2020202020202020202020202020204b5b20208a1010101020202020202020202020202020202020201008181000000000000000000000000000008aa110101010107070701010101010a18a000000000000000000000000d5e5f5008900108e008e10008900d5e5f5000000000000000000000000100000001011311110000000100000008c25d5e5f50000000000001000000010003000300d003000000030000000300000003000000010003000000000000000000000000000000000000000000000000000003000
-- 024:0000001020202020202020202020202020202020202089202020890000000000001020204c5c2020202020202020202020202020204c5c2020d2121002d220202020202020202020202020200e202010000010000000000000000000000000000000a1100d0000000000000000000a10a100000000000000000000000000002600008a001000000010008a0000260000000000000000000000000010000000101010101000000010000000100000000000000000000010000000100030003000003000300030003000300030003000300010003000000000001f00000000003f00000000000000000000000000003000
-- 025:000000102020202020202020202020202020202020208a2020208a0000000000001020202020d4e4f4208b20202020208b20d4e4f420202020d2321022d2202020202020202020202020202e20202010071710000000000000000000000000000000a110000000001010100000000010a10000000000000000000000000000260000000010004e0010000000002600000000000000000000000000100000001000000000000000100000008b00d4e4f400000000000010000000100030003000000000300000003000000030000000300010003000000000000000000000000000000000000000000000000000003000
-- 026:00000010202020202020202020202020202020202020d2202020100000000000001020208e20d5e5f5258c20202020208c25d5e5f5208e2020d2121002d2202020202020202020202020202020202010081810000000000000000000000000000000a110090000000000000000001d10a1000000000000000000000000051526000000008b0000008b000000002605150000000000000000000000100000001000000000000000100000008c25d5e5f500000000000010000000100030003030303030303030303030303030303030300010003000000000000000006600000000000000000000000000000000003000
-- 027:000000888b2020208b88202020202020202020202020d2202020100000000000001020202020202020202020202020202020202020202020208810101010202020202020202020202020202020202010000010000000000000000000000000000088a110101010107070701010101010a1880000000000000000000000061636252525258c0000008c25252525360616000000000000000000000010000000100000000000000010000000100000000000000000000010000000100030000000000000000000000000000000000000000010003000000000000000000000000000000000000000000000000000003000
-- 028:000000898c2523258c89202020202020202020202020d22020201000000000000010202020202020208e202020202020208e202020202020208900000010202020202020202020203e20202020202010071710000000000000000000000000000089b1a0a0a0c01020202010b0a0a0a0c1890000000000000000000000000026000000001000000010000000002600000000000000000000000000100000001010101010101010100000008b00d4e4f400000000000010000000100030303030303030303030303030303030303030303010003000000000000000000000000000000000000000000000000000003000
-- 029:0000008a20202020208a10101010101010101010101010101010100000000000001020202020202020202020202020202020202020202020208a0000001010101010101010101010202020202020201008181000000000000000000000000000008a00000088a11020202010a1880000008a0000000000000000000000000026000088001000000010008800002600000000000000000000000000100000000000000000000000000000008c25d5e5f500000000000010000000100000000000000000000000000000000000000000000010003000000000000000000000000000000000000000000000000000003000
-- 030:00000010202020202010000000000000000000000000000000000000000000000010209b202020202020202020202020202020202020209b20100000000000000000000000071710202020202020201000001000000000000000000000000000000000000089a11020202010a18900000000000000000000000000000000d4e4f40089001060606010008900d4e4f400000000000000000000000010000000000000008e008e008e008e00100000000000000000000010000000103030303030303030303030303030303030303030000010003000000000000000000000000000000000000000000000000000003000
-- 031:00000010111131111110000000000000000000000000000000000000000000000010202020202020202020202020202020202020202020202010000000000000000000000008181020202020202020100717100000000000000000000000000000000000008aa11011311110a18a00000000000000000000000000000000d5e5f5008a001000000010008a00d5e5f5000000000000000000000000100000000000000000000000000000008b00d4e4f400000000000010000000400000000000000000000000000000000000000000000a10003030303030303030303030303030303030303030671131116730303000
-- 032:0000001010101010101000000000000000000000000000000000000000000000001010101010101010101010d2d2d2101010101010101010101000000000000000000000000000101010d2d2d210101008181000000000000000000000000000000000000000a11010101010a100000000000000000000000000000000000000000000001000000010000000000000000000000000000000000000101010101010101010101010101010108c25d5e5f500000000000010000000103030303030303030303030303030303030303030303010000000000000000000000000000000000000000000676767676700000000
-- 033:000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011311110000000000000000000000000000000000000000000000000001011311110101010101000000000000000000000000000000000000000b1a0a0a0a0a0c10000000000000000000000000000000000000000000000101131111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010113111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 034:343434343434343434343434343434343434343434343434343434343434000000000000000000000000001001210110000000000000000000000000000000000000000000000000001001210110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005868780000000000100121011000000000005868780000000000000010012101100000000000000000586868686868687800008800000000000010012101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100121011000
-- 035:3410101010101010101010101010101010101010101010101010101010340010101010101010101010101010d2d2d2101010101010101010101010000000000000000000000000000010d2d2d21000000000000000000000000000000000000058687800586878101010101058687800586878000000000000101010596979101010101010d2d2d21010101010105969791010101000001010000000101010101010101010595a5a696969696a10108910101000000010000000101010101010101010101010101010101010101010101000001010101010101010101010101010101010101010101010102020201000
-- 036:341020202020202020202020202020202020202020202020202020201034001020202020202020202020202020202020202020202020202020201000000000000000880000000000001000000010000000008800880000000000000717881010595a79105969791001210110595a7910595a791088071700001000000000007686586878100000001058687876860000000000001000001000000000000000d22020202020202020202020202020198a1920100000001000000010b0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0c01000001080828282829020202020202020202080829020202020202020201000
-- 037:34102020202020202020202020202020202020202020202020202020103400102020202020202020202020202020202020202020202020202020100000000000000089000000071700100000001000071700890089000000000000081889202020202020202020202020202020202020202020208908180000100000000000778759696a10000000107a5a7977870000000000001000001000000000000000d2202020202020202020202020202020202020100000001000000010a120202020202020202020202020202020202020a110000010b2c2c2c2c292202020202020202020b2c29220202020202020201000
-- 038:3410202020202020202020202020202020202020202020202020202010340010202020202020202020202020202020202020202020202020202010000000000000008a0000000818001000000010000818008a008a00000000000010108a202020202020202020202020202020202020202020208a10100000100000009c00000000000010000000100000000000009b000000001000001000000000000000d220205e202020202020202020202020202020100000001000000010a120202020202020202020202020202020202020a110000010b2c2c2c2c292202020202020202020b2c29220202020202020201000
-- 039:341020202020202020202020202020202020202020202020202020201034001020202020031320202020b0a0a0a0a0a0c02020202003132020201000000000000000000000000000001000000010000000000000000000000000001020202020202020202020202020202020202020202020202020201000001000000000000000000000100000001000000000000000000000001000001007170000000000d2202020202020202020202020202020202020100000001000000010a120202020202020202020202020202020202020a110000010b2c2c2c2c292202020808290202020b2c29220202080828282901000
-- 040:34102020202020202020202020207d202020202020202020202020201034001020202020041420202020a1e0e0e0e0e0a1202020200414202020101010101010101010101010101010100000001010101010101010101010101010102020202020202020202020202020209a206b7b2020202020202010100010000000000000008e0717100000001007178e00000000000000001000001008180000000000d2202020202020202020202020202020202020100000101010701010a12020202020201e20202020201e202020202020a11010101081a2a2a2c292202020b2c292202020b2c292202020b2c2c2c2921000
-- 041:341020202020202020202020202020202020202020202020202020201034001020202020202020202020a1e0e0e0e0e0a1202020202020202020d21202d2000000000000000000000070e0e0e07000000000000000000000d212100220202020202020204b5b202838383848206c7c2020202020202012100010000000000000000008181000000010081800000000000000000010000010101010101010101020204e2020209b283838486b7b20202020201000000200e0e0e0d2a120202020202020202020202020202020202020a1d212022020202020b292202020b2c292202020b2c292202020b2c2c2c2921000
-- 042:3410202020202020202020202020202020202020202020202020202010340010202020202020204e2020a1e0e05ee0e0a120204e202020202020d23222d2000000000000000000000070e0e0e07000000000000000000000d232102220202020202020204c5c2029393939492020202020202020202032100010000000000000000000071700000007170000000000000000000010000000000000000000001020202020204b5b293939496c7c20202020201000002200e0e0e0d2a12020202020202020204e202020202020202020a1d232222020202020b292202020b2c292202020b2c292202020b2c2c2c2921000
-- 043:341020202020202020202020202020202020202020202020202020201034001020202020202020202020a1e0e0e0e0e0a1202020202020202020d21202d2000000000000000000000070e0e0e07000000000000000000000d21210022020202020202020208e202a3a3a3a4a20208e2020202020202012101010000000000000000000081800000008180000000000000000000010101010101010101010001020202020204c5c2a3a3a4a9c2020204e20201000000200e0e0e0d2a120202020202020202020202020202020202020a1d212022020202020b292202020b2c292202020b2c292202020b2c2c2c2921000
-- 044:341020202020202020202020202020202020202020202020202020201034001020202020201e20202020a1e0e0e0e0e0a1202020201e202020201010101010101010101010101010101010701010101010101010101010101010101020202020202020202020209b2020202020202020202020202020101002d20000000000000000000000000000000000000000000000000000d21202000000000000100010202020202020202020202020202020202020101000101010701010a12020202020201e20202020201e202020202020a11010101090202020b292202020b2c292202020b2c292202020b2c2c2c2921000
-- 045:341020202020202020202020202020202020202020202020202020201034001020202020202020202020b1a0a0a0a0a0c1202020202020202020100000000000000000000000000000100000001000000000000000000000000000102020202020202020202020202020202020202020202020202020100022d200008e00000000000000000000000000000000000000008e0000d23222000000000000100010202020202020202020202020202020202020d21200001000000010a120202020202020202020202020202020202020a110000010922020208191202020b2c29220202081a291202020b2c2c2c2921000
-- 046:3410202020202020202020202020202020202020202020202020202010340010202020202020202020202020202020202020202020202020202010000000000000008800880007170010000d001000071700880000000000000000101088202020202020202020202020202020202020202020208810100002d200d4e4f4000000000000000000000000000000000000d4e4f400d212020000000000001000102020202020202020202020202020205e2020d23200001000000010a120202020202020202020202020202020202020a110000010922020202020202020b2c292202020202020202020b2c2c2c2921000
-- 047:341020202020202020202020202020202020202020202020202020201034001020202020202020202020202020202020202020202020202020201000000000000000890089000818001000000010000818008900880000000000000717892020202020202020202020202020202020202020202089071700101000d5e5f5258b586878768600000076865868788b2525d5e5f500101010101010000000100010202020202020202020202020202020202020d21200001000000010a120202020202020202020202020202020202020a110000010922020202020202020b2c292202020202020202020b2c2c2c2921000
-- 048:34102020202020202020202088d2d2d288202020202020202020202010340010202020202020202020202020202020202020202020202020202010000000000000008a008a000000001010101010000000008a008900000000000008188a101058687810586878101131111058687810586878108a081800001000000000008c7a697977870000007787595a798c000000000000100000000010000000100010201a881a2020202020202020202020202020101000001000000010b1a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0c11000001092202020202020202081a29120202020202020202081a2a2a2911000
-- 049:3410101010101010101010108900000089101010101010101010101010340010101010101010101010101010d2d2d2101010101010101010101010000000000000000000000000000000000000000000000000008a0000000000000000000000595a7900595a791010101010595a7900595a6a000000000000101010101010101010101010d2d2d21010101010101010101010101000000000100000001000101010891010101010101010101010101010101000000010000000101010101010101010101010101010101010101010101000001010101010101010101010101010101010101010101010101010101000
-- 050:3434343434343434343434348a1131118a343434343434343434343434340000000000000000000000000010113111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011311110000000000000000000000000000000001011311110000000008a0000000000000000000000000000000000000010113111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 051:0000000000000000000000008801210188000000000000001000000000000000000000000000000000000010012101105868686868686868780000000000000000000000008b8b8b586868686868788b8b8b0000000000000000101010101010101010101010101010101010101010101010101010101010000003130000000003130000100121011000000000000000000000000000000000100121011000000000000000000000000000000000000000000000000010012101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 052:1010101010101010101010108900000089101010101010101010101010100010101010101010101010101010d2d2d2107a6969695a5a69696a1010000000008800000000108c8c8c595a6969695a798c8c8c10000000008800001001210110c2c2c2c2c29219202020202020202020202020202020202010001004141010101004141010100000001010101010101010101010101000001010100000001010100000000000000000000000000000000000000000001010d2d2d2101010101010101010101010101010101010101010101000000000000000000000000000006767676767676767676767676767670000
-- 053:1020202020202020202020208ad2d2d28a202020202020202020202020100010071700000007171020202020202020202020202020202020202010000000008900071700102020202020202020202020202010000717008900001000000088c2c2c2c2c29220202007172020202020202020202020202010071700000000000000001019100000000000000000000000000000001000001000000000000000100000000000001010101010101000000000000000001020202020202020202020202020202020202020202020202020201000000000000088008800880088006700000000000000000000000000670000
-- 054:10202020202020202020202020202020202020202020202020202020201000100818000d0008181020202020202020202020202020202020202010000000008a0008180010201d1d202020202020200d0d2010000818008a00001000000089c2c2c2c2c29220202008182020202020202020202020202010081800000000000000001082100000000000000000000000000000001000001000000000000000100000000000001000000000001000000000000000001020202020202020202020202020202020202020202020202020201000000000000089008900890089006700071700000000000000071700670000
-- 055:10202020202020202020202020205d2020202020202020202020202020100010880000000000881020201e20202020201e2020202020202020201000000000000000000088201d1d202020202020200d0d20880000000000000010d2d2d28ac2c2c2c2c292202020202020202020202020202020202020100010000000000000000010c2100000000000000000000000000000001000001000000000000000100000000088001000001f000010008800000000000010202020202020201e2020208e2020208e2020201e202020202020100000000088008a008a008a008a006700081825252525252525081800670000
-- 056:1020202020202020202020202020202020202020202020202020202020100010890d001d000d8910202020202020202020202020202020202020101000000000000003138920202020202020202020202020890313000000000010202020b2c2c2c2c2c292202020284820202080828282828290202020100010000000000000000010c21000000000008b0000008b000000000010000010009e0000009e0010000000008900100000000000100089000000000000102020202020202020202020208e208e20202020202020202020201000000000890000000000000000006700002600000000000000260000670000
-- 057:10202020202020202020202020202020202020202020202020202020201000108a00000000008a10201e2020204e2020201e2020202020202020d21200000010101004148a10101010d2d2d2d2d2101010108a0414101010000010202020b2c2c2c2c2c2922020202949202020b2c2c2c2c2c292202020100010000000000000000010c210000000008e8c0000008c8e00000000100000100000000000000010000000008a0010001d1d1d0010008a0000000000001020202020d4e4f4208b5878202020202058788b20d4e4f420202010000000008a0067676767676767676700002600000000000000260000670000
-- 058:10202020202020202020202020202020202020202020202020202020201000108282828282828210202020202020202020202020202020202020d21200000088202020202020202020202020202020202020202020202010000010202020b2c2c2c2c2c292201e202949201e20b2c2c2c2c2c292202020100010001d00000000000010a210000000000000000000000000000000100000100000000e000000100000000000001000000000001000000000000000001020202020d5e5f5258c5979202020202059798c25d5e5f52020201000000000000067000000000000000000002600000000000000260000670000
-- 059:1020202020202020202020202020202020202020202020202020202020100010c2c2c2c2c2c2c210202020202020202020202020202020202020d232000000892020202020202020204e2020204e20202020202020202010000010202020b2c2c2c2c2c2922020202949202020b2c2c2c2c2c292202020100010001d000d0000000070e070000000000000009e0000000000000010000010000000000000001000000000000010104040401010000000000000000010202020202020201e20202020205e20202020201e2020202020201000000000880067000000000000000000002600000095000000266600670000
-- 060:1020202020202020202020202020202020202020202020202020202020100010c2c2c2c2c2c2c21020201e20202020201e202020202020202020d2121010108a202020202020202020202020202020202020202020202010000010202020b2c2c2c2c2c2922020202949202020b2c2c2c2c2c292202020100010001d0000000000001082100000000000000000000000000000001000001000000000000000100000000000000030000000300000000000000000001020202020202020202020204e2020204e202020202020202020201000000000890067000000000000000000002600000000000000260000670000
-- 061:1020202020202020202020202020202020202020202020202020202020100010c2c2c2c2c2c2c210202020202020202020202020202020202020d212220000d22020208b2020200e2020205e2020200e2020208b20202010000010202020b2c2c2c2c2c2922020202949202020b2c2c2c2c2c292202020100010000000000000000010c21000000000008e8b008b8e0000000000101010100000000000000010000000000000003000000030000000000000000000102020202058788b20d4e4f42020202020d4e4f4208b587820202010000000008a0067000000676767676700002600000000000000260000670000
-- 062:1020202020202020202020202020202020202020202020202020202020100010a2a2a2a2a2a2a2102020202020202020202020202020202020201010020000d22020208c2020202020202020202020202020208c2020201000001020202081a2a2a2a2a2912020202a4a202020b2c2c2c2c2c292202020100010000000000000000010c2100000000000008c008c000000000000001202000000000000000010303030303030303000000030000000000000000000102020202059798c25d5e5f52020202020d5e5f5258c59792020201000000000000067000000670000006700002600000000000000260000670000
-- 063:102020202020202020202020202020202020202020202020202020202010001000000000000000d22020202020202020202020202020202838481000101010882020202020202020209b2020209b20202020202020202010000010202020202020202020202020202020202020b2c2c2c2c2c288d2d2d2100010000000000000000010c2100000000000000000000000000000000032220000000000000000400000000000000000000000300000000000000000001020202020202020202020202020202020202020202020202020201000000000880067000000670088006700071725252525252525071700670000
-- 064:102020202020202020202020202020202020202020202020202020202010001000000000000000d2202020202020202020202020202020293949100000000089202020202020202020202020202020202020202020202010000010202020202020202020202020200717202020b2c2c2c2c2c289000000100717000000000000000010a2100000000000000000000000000000000012020000000000000000400000000000000000000000300000000000000000001020202020202020202020202020202020202020202020202020201000000000890067000000670089006700081800000000000000081800670000
-- 065:10202020202020202020202088d2d2d28820202020202020202020202010001000000000000000d22020202020202020202020202020202a3a4a10000000008a202020202020202020202020202020202020202020202010000010202020202020202020202020200818202020b2c2c2c2c2c28a0000001008180000000000000000101a1000000000000000000000000000000010101010000000000000004000000000000000000000003000000000000000000010202020205868781a58687820202020205868781a58687820202010000000008a006700000067008a006700000000000000000000000000670000
-- 066:10101010101010101010101089000000891010101010101010101010101000101010101010101010101010101010101010101010101010101010100000000010101010101010031310d2d2d2d2d21003131010101010101000001020202020202020202020202020202020201ab2c2c2c2c2c210113111100010031310101010031310101000000010101010101010101010101010000010101010101010101030303030303030303030303000000000000000000010101010105969791059697910d2d2d210596979105969791010101000000000000067000000670000006767676767676767676767676767670000
-- 067:000000000000004f000000008a1131118a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414101111311111100414000000000000000000101010101010101010101010101010101010101010101010101010101010000004140000000004140000101131111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011311110000000000000000000000000000000000067113111670000000000000000000000000000000000000000
-- 068:000000000000000000000000880121018800000000000000000000000000000000000000000000000000101010101010100000000000000000000000000000000000000000000000100101210101100000000000000000000000101010101010101010101010101010101010101010101010101010101010000000000000000000000000100121011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001210110000000000000000000000000000000000000000000000000100121011000000000000000000000000000
-- 069:1010101010101010101010108900000089101010101010101010101010100000000058687800000000001000000d004f10000000000058687800000000000000000000000000000010e0e0e0e0e010000000000000000000000010c2c2c2100000000000000010000000000000000010000000000000001000101010101010101010101010d2d2d210101010101010101010101010100010101010101010101010101010101010101010101010101010101010000010101010101010101010101010d2d2d21010101010101010101010100000101010101010101010101010d2d2d21010101010101010101010101000
-- 070:1020202020202020202020208ad2d2d28a202020202020202020202020100000108b595a6a101010101010d2d2d2d2d21010101010107a696a8b100000000000000000000003130010e0e0e0e0e010000000000000000000000010c2c2c2100000000000000010000000000000000010000000000000001000102020202020202020202020202020202020202020202020202020d21200102020201063708082828290e0e0e0e0e0808282829070631020201000001007172020202020202020702020202020702020202020202007171000001020202020202020202020202020202020202020202020202020201000
-- 071:1020202020202020202020202020202020202020202020202020202020100000108c20202028384807172020202020202007172838482020208c100000000000000000000004140010e0e0e0e0e010008800000000000000000010c2c2c210e0e0e070e0e0e070e0e0e070e0e0e0e070e0e0e070e0e0e01000102020202020202020202020202020202020202020202020202020d2320010202020106370b2c2c2c292e0e05ee0e0b2c2c2c292706310202010000010081820202020207e202070202020202070207e202020202008181000001020202020202020202020202020202020202020202020202020201000
-- 072:10202020202020202020202020202020202020202020202020202020201000001020202020293949081825252525252525081829394920202020100000000000000000000000000717e0e0e0e0e010008900586878000000000010c2c2c210e0e0e070e0e0e070e0e0e070e0e0e0e070e0e0e070e0e0e01000102020202020202020202020202020202020202020202020202020d2120010202020106370b2c2c2c292e0e0e0e0e0b2c2c2c29270631020201000001020202020202020202020702020202020702020202020202020201000008b202020d4e4f42020202020202020202020202020d4e4f42020208b00
-- 073:102020202020202020202020202020202020202020202020202020202010000010202020202a3a4a20202020202020202020202a3a4a20202020100010101010101010101010100818707070707010108a10596979101010101010a2a2a21000000010000000100000001000000000100000001000000010001020202010828282828282828282828282828282828282828282821010001020202010e088b2c2c2c2921010701010b2c2c2c29288e0102020100000102020207e2020204e20207020205e202070204e2020207e2020201000008c252525d5e5f52020202020202020202020202020d5e5f52525258c00
-- 074:10202020202020202020202020202020202020202020202020202020201000001020202020206e202020202020202020202020206e2020202020101002e0e0e0e0e0e0e0e0e0e0e070202020202070e0e0e0e0e0e0e0e0e0e012020000000000000010000000000000001000000000000000001000000010001020202010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000001020202010e089b2c2c2c2c28290e08082c2c2c2c29289e01020201000001020202020202020202020702020202020702020202020202020201000001020202020202020202020202020202020202020202020202020201000
-- 075:10202020202020202020202020206d202020202020202020202020202010000010202020202020203e2020202020202020203e20202020202020201202e0e0e0e0e0e0e0e0e0e0e070202020202070e0e0e0e0e0e0e0e0e0e012020000108082900010000000000000001000000000000000001011311110001020202010c2c2c2c2c2c2c2c2c2c21010101010c2c2c2c2c2c2c21000001020202010e08ab2c2c2c2c2c29243b2c2c2c2c2c2928ae010202010000010071720202020207e202070202020202070207e202020202007171000001020202020202020202020202020202020202020202020202020201000
-- 076:10202020202020202020202020202020202020202020202020202020201000001020202020202020205e202020202020205e2020202020202020203222e0e0e0e0e0e0e0e0e0e0e07020205e202070e0e0e0e0e0e0e0e0e0e03222000010b2c2921010101010101010101010101010101010101010101010001020202010a2a2a2a2a2a2a2a2a2a21000000010c2c2c2c2c2c2c21000001020202010e010b2c2c2c2c2c292e0b2c2c2c2c2c29210e0102020100000100818202020202020202070202020202070202020202020200818100000102020202020202020202020204d202020202020202020202020201000
-- 077:10202020202020202020202020202020202020202020202020202020201000001020202020202020202020202020202020202020202020202020201202e0e0e0e0e0e0e0e0e0e0e070202020202070e0e0e0e0e0e0e0e0e0e0120200001081a2910010000000000000001000000000000000001001210110001020202010e0e0e0e0e0e0e0e0e0e07000240010c2c2c2c2c2c2c21000001020202010e01081a2a2a2a2a291e081a2a2a2a2a29110e010202010000010101010101010101010101010d2d2d210101010101010101010101000001020202020202020202020202020202020202020202020202020201000
-- 078:10202020202020202020202020202020202020202020202020202020201000001020202020208e202020202020202020202020208e2020202020101002e0e0e0e0e0e0e0e0e0e0e070202020202070e0e0e0e0e0e0e0e0e0e012020000000000000010000000000000001000000000000000001000000010001020202010e0e0e0e0e0e0e0e0e0e01000000010c2c2c2c2c2c2c2100000102020201070101010101010101070101010101010101070102020100000000000000000004f0000000010001d0010000000000000000000000000001020202020202020202020202020202020202020202020202020201000
-- 079:1020202020202020202020202020202020202020202020202020202020100000102020202020202020202020202020202020202020202020202010001010101010105868781088101070707070700717101010101010101010101082828210e0e0e070e0e0e070e0e0e070e0e0e0e070e0e0e070e0e0e010001020202070e0e0e0e0e0e0e0e0e0e01010101010c2c2c2c2c2c2c21000101020202020202020202020202020202020202020202020202020201010101010101010101010101010101010101010303030303030303030303000008b202020d4e4f42020202020202020202020202020d4e4f42020208b00
-- 080:10202020202020202020202020202020202020202020202020202020201000001003138b202020202020202020202020202020202020208b0313100000000000000059697900890010e0e0e0e0e008180000000000000000000010c2c2c210e0e0e070e0e0e070e0e0e070e0e0e0e070e0e0e070e0e0e010001020202080828282828282828282828282828282c2c2c2c2c2c2c2100002d22020202020202020202020202020202020202020202020202020d212020000004f00000000000000000000000040000000000000000000003000008c252525d5e5f52020202020202020202020202020d5e5f52525258c00
-- 081:10202020202020202020202020202020202020202020202020202020201000001004148c202020202020202020202020202020202020208c04141000000000000000000000008a0010e0e0e0e0e010000313000000000000000010c2c2c210000000100000001000000010000000001000000010000000100010202020b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2100022d22020202020202020202020202020202020202020202020202020d23222000000000000000000000000000000004000000000000000000d003000001020202020202020202020202020202020202020202020202020201000
-- 082:10202020202020202020202088d2d2d2882020202020202020202020201000001010101010101010101010d2d2d2d2d210101010101010101010100000000000000000000000000010e0e0e0e0e010000414000000000000000010c2c2c210000000000000001000000000000000001000000000000000100010202020b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2100002d22020202020202020202020202020202020202020202020202020d212020000000000000000000000000000000040000000000000000000003000001020202020202020202020202020202020202020202020202020201000
-- 083:1010101010101010101010108900000089101010101010101010101010100000000000000000000000001000001d000010000000000000000000000000000000000000000000000010e0e0e0e0e010000000000000000000000010c2c2c210000000000000001000000000000000001000000000000000100010101010101010101010101010101010101010101010101010101010001010101010101010101058687810d2d2d21058687810101010101010101010101010101010101010101010100000001030303030303030303030300000101010101010101010101010d2d2d21010101010101010101010101000
-- 084:0000000000000000004f00008a1131118a0000004f00000000000000000000000000000000000000000010101010101010000000000000000000000000000000000000000000000010111131111110000000000000000000000010101010101010101010101010101010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000596979101131111059697900000000000000000000000000004f0000000000000010000000100000000000000000000000000000000000000000004f00001011311110000000004f004f000000000000
-- 085:000000000000000000000000880121018800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088010121010188000000000000000000000000101010101010101010101010101010101010101010101010101010101010000000000000000000000000000000000000000000000000000000000000000000000000000000001010101010000000000000000000000000000000000000000000000000000000001001210110000000000000000000000000000000000000000000000000100121011000000000000000000000000000
-- 086:101010101010101010101010890000008910101010101010101010101010006767676767676767676767676767670000000000000000000000000000000000101010101010101089d2d2d2d2d2891010101010101010000000001001210110c2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2100000000000000000000000000000676767676767676767676767676767000000000000000003130010012101100003130000000000000000000000000000000000000000000000000010202020105f0000000000000000000000000000000000000000000000102020201000071700000000000000000000
-- 087:1020202020202020202020208ad2d2d28a202020202020202020202020100067000000004f000000000000000067008800880088000088000000880000880010202020202020208a20202020208a202020202020201000000000100000001092202020202020202020202020202020202020202020202010008800000088000088008800880067000000000000000000000000006700000000000000000414001000000010000414000000000000000000000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000102020201000081800000000000000000000
-- 088:102020202020202020202020202020202020202020202020202020202010006700071700000000000000071700670089008900890000890000008900008900102020202020202020202020202020202020202020208b00d4e4f410000000109220202020202020202020202020202020202020d4e4f4208b0089000000890000890089008900670007170000000000000007170067000000000000880000000010000000100000000088000000000000000000000000000000000000000000000010202020105f000000000000000000000000000000000000000000006f102020201000000000000000000000000000
-- 089:10202020202020202020202020202020202020202020202020202020201000670008182525252525252508180067008a008a008a00008a0000008a00008a00102020202020202020202020202020202020202020208c25d5e5f510000000889220202020202020202020202020202020202020d5e5f5258c008a0000008a00008a008a008a00670008182525252525252508180067000000000000890010101010d2d2d210101010008900768600031300000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000102020201000071700000000000000000000
-- 090:10202020202020202020202020202020202020202020202020202020201000670000260000000000000026000067000000000000000000000000000000000010202020202020202020202020202020202020202020100000000010000000899220202020202020202020202020202020202020202020201000000000000000000000000000006700002600000000000000260000670000000000008a001020202020202020202010008a007787000414000000000000000000007f00000000006f1020202010000000000000007f0000000000000000000000007f000000102020201000081800000000000000000000
-- 091:102020202020202020202020202020202020202020202020202020202010006700002600000000000000260000676767676767676767676767676767101010102020202020202020202020202020202020202020201000000000100000008a102020202020202020202020202020202020201010101010106767676767676767676767676767670000260000000000000026000067000000000000000010202020201e2020202010000000000000000000000000101010101010101010101010101010701010101010101010101010101010101010101010101010101010102020201000000000000000000000000000
-- 092:10202020202020202020202020204d20202020202020202020202020201000670000260000000000000026000000004f00000000004f000000000012020000d220202020202020202020202020202020202020202010000000001000000000d220202020202020203d202020202020202020d20000000012020000000000000000000000000000000026000000000000002600006700000000000000001020202020202020202010101010101010101010100000022020202020202020202020201010e01010202020202020202020202012202020202020202020202020202020201000071700000000000000000000
-- 093:102020202020202020202020202020202020202020202020202020202010006700662600000085000000260000000000000000000000000000000032220000d2202020202020202020205d2020202020202020202010000000001000000000d2202020202020202020202020202020202020d200000000322200000000000000000000000000000000260000006500000026660067000000008800000010202020b0a0c0202020d20000000000000000121000002220202020202020202020202070e0e0e070202020202020202020202032202020202020202020202020202020201000081800000000000000000000
-- 094:102020202020202020202020202020202020202020202020202020202010006700002600000000000000260000000000000000000000000000000012020000d220202020202020202020202020202020202020202010000000001000000000d2202020202020202020202020202020202020d200000000120200000000000000000000000000000000260000000000000026000067000000008900000010207e20a16ea1207e20d2000000000000000032100000022020202020202020202020201010e01010202020202020202020202012202020202020202020202020202020201000000000000000000000000000
-- 095:1020202020202020202020202020202020202020202020202020202020100067000026000000000000002600006767676767676767676767676767671010101020202020202020202020202020202020202020202010000000001000000088102020202020202020202020202020202020201010101010106767676767676767676767676767670000260000000000000026000067000000008a00000010202020b1a0c1202020d2000000000000000012100000101010101010101010101010101010701010101010101010101010101010101010101010101010101010101010101000000000000000000000000000
-- 096:102020202020202020202020202020202020202020202020202020202010006700002600000000000000260000670000000000000000000000000000000000102020202020202020202020202020202020202020201000000000100000008992202020202020202020202020202020202020202020202010000000000000000000000000000067000026000000000000002600006700000000000000001020202020202020202010101010101010101010100000000000000000000000000000001020202010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 097:102020202020202020202020202020202020202020202020202020202010006700071725252525252525071700670088008800880000880000008800008800102020202020202020202020202020202020202020201000000000100000008a9220202020202020202020202020202020202020d4e4f4208b0088000000880000880088008800670007172525252525252507170067000000000000000010202020201e2020202010000000000000000000000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 098:102020202020202020202020202020202020202020202020202020202010006700081800000000000000081800670089008900890000890000008900008900102020202020202020202020202020202020202020208b00d4e4f410000000109220202020202020202020202020202020202020d5e5f5258c0089000000890000890089008900670008180000000000000008180067000000000000880010202020202020202020100088007686000313000000000000000000000000000000006f1020202010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 099:10202020202020202020202088d2d2d2882020202020202020202020201000670000000000000000000000000067008a008a008a00008a0000008a00008a00102020202020202020202020202020202020202020208c25d5e5f5100000001092202020202020202020202020202020202020202020202010008a0000008a00008a008a008a0067000000000000000000000000006700000000000089001010101010101010101010008900778700041400000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 100:1010101010101010101010108900000089101010101010101010101010100067676767676767676767676767676700000000000000000000000000000000001010101010101010101010101010101010101010101010000000001011311110c282828282828282828282828282828282828282828282821000000000000000000000000000006767676767676767676767676767670000000000008a000000000000000000000000008a00000000000000000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 101:00000000000000004f0000008a1131118a0000004f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101010101010101010101010101010101010101010101010101010101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011311110000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 102:1010101010101010101010101001210110101010101010101010101010100000880313000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000000000000000000010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b000000000000008b000000000000008b00000000000000000000000000000000000000001001210110000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 103:1020202020202020202020208800000088202020202020202020202020100000890414101010101010101010101010101010100414101010101010000010101010101010101010101010101010101010101010101010101000000010012101101010101010101010101010101010101010103030303000000067676767676767676767676767676700000000000000000000000000000010101010108c101010101010108c101010101010108c10101010101000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 104:10202020202020202020202089000000892020202020202020202020201000008a2020202020202020202020202020202020202020d2000000001000001002000000000000000000000000000000000000000000000000100000001000000010202020a1e0e0e0e0a1e0e0e0a1e0e0e0e040000000300000006700000000000000000000000000670088008800880000880000008800001020202020262020202020202026202020202020202620202020201000000000000000000000000000001000000010000000000000008800000000000000000000000000000000000000000000000000000000000000000000
-- 105:1020202020202020202020208ad2d2d28a202020202020202020202020100000102020202020202020202020202020202020202020d2001d00008800001022000000000000000000000000000000000000000000000000100000001000000010200d20a1e0e0e0e0a1e0e0e0a1e0e0e0e0400000003000000067000717000000000000000717006700890089008900008900000089000010202020d4e4f42020202020d4e4f42020202020d4e4f42020202010000000000000000000101010101010d2d2d210101010101010008900000000000000000000000000000000000000000000000000000000000000000000
-- 106:1020202020202020202020202020202020202020202020202020202020100000882020202020202020202020202020202020202020d2000076868900001002000000000000000000000000000000000000000000000000100000001000000010202020a1e0e0e0e0a1e0e0e0a1e0e0e0e04000000030000000670008182525252525252508180067008a008a008a00008a0000008a000010202020d5e5f52020202020d5e5f52020202020d5e5f5202020201000000000000000000010202020202020202020202020202010008a00000000000000000000000000000000000000000000000000000000000000000000
-- 107:10202020202020202020202020202020202020202020202020202020201000008920202020204b5b20202020202020202020200a1010101077878a00001010101010101010101010101010101010101010101010707070100000001000000010828282c282828282c2828282c2828282821000000030000000670000260000000000000026000067000000000000000000000000000000102020202020202020202020202020202020202020202020202020100000000000000000001020d4e4f4208b20208b20d4e4f42010000000000000000000000000000000000000000000000000000000000000000000000000
-- 108:10202020202020202020202020202020202020202020202020202020201000008a20202020204c5c20202020202020201e20202020d2000000001010001009202020202020202020202020202020202020202020202020100000001000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000030000000670000260000000000000026000067676767676767676767676767676710102020202020202020202020202020202020202020202020202020100000101010101010101020d5e5f5258c20208c25d5e5f52010101010101010101010101010101010101010101010101010101010101010101010101000
-- 109:102020202020202020202020202020202020202020202020202020202010000010202020204e28384820202020202838484e202020d2000000000012001020202020202020882088252525252588208820202020202020100000001000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000030000000670000260000000000000026000000000000000000000000000000001202d2202020202020202020202020202020202020202020202020202010000010000000000000d22020202020202020202020202020d200000000001210a2a2a270a2a2a2a270a2a2a2a270a2a2a2a270a2a2a2a2700000001000
-- 110:10202020202020202020202020203d2020202020202020202020202020100000102020202020293949202020202029394920202020d200000000003200102020202020202089258920202e2020892589202020202020201000000010d2d2d210c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000030000000670066260000007500000026000000000000000000000000000000003222d22020202020202020202020206d2020202020202020202020202010000010000000000000d22020201e204e20204e201e202020d200000000003222e0e0e070e0e0e0e070e0e0e0e070e0e0e0e070e0e0e0e0700000001000
-- 111:10202020202020202020202020202020202020202020202020202020201000001020202020202a3a4a20202020202a3a4a20202020d20000000000120010202020202020208a208a25252525258a208a20202020202020100000001020202010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000030000000670000260000000000000026000000000000000000000000000000001202d2202020202020202020202020202020202020202020202020202010000010000000000000d22020202020202020202020202020d2000000000012108282827082828282708282828270828282827082828282700000001000
-- 112:102020202020202020202020202020202020202020202020202020202010000088202020202020201e20202020204b5b2020202020d200000000101000102020202020202020202020202020202020202020202020200a100000001020202088c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000030000000670000260000000000000026000067676767676767676767676767676710102020202020202020202020202020202020202020202020202020100000100000001010101020205868788e20208e586878202010101010101010101010101010101010101010101010101010101010101010101131111000
-- 113:102020202020202020202020202020202020202020202020202020202010000089202020202020202020202020204c5c2020200a1010101076868800001070707010101010101010101010101010101010101010101010100000001020202089c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c210000000300000006700002600000000000000260000670000000000000000000000000000001020202020202020202020202020202020202020202020202020201000001000000010000010202059697920202020596979202010000000000000000000000000000000000000000000000000000000000000101010101000
-- 114:10202020202020202020202020202020202020202020202020202020201000008a2020202020202020202020202020202020202020d200007787890000100000000000000000000000000000000000000000000000001210000010102020208aa2a2a2c2a2a2a2a2c2a2a2a2c2a2a2a2c2100000003000000067000717252525252525250717006700880088008800008800000088000010202020d4e4f42020202020d4e4f42020202020d4e4f4202020201000001000000010000010202020202020202020202020202010008800000000000000000000000000000000000000000000000000000000000000000000
-- 115:1020202020202020202020202020202020202020202020202020202020100000102020202020202020202020202020202020202020d2000000008a000010000000000000000000000000000000000000000000000000321000001002202020e0e0e0e0a1e0e0e0e0a1e0e0e0a1202020b2700000003000000067000818000000000000000818006700890089008900008900000089000010202020d5e5f52020202020d5e5f52020202020d5e5f5202020201000001000000010000010101010101010101010101010101010008900000000000000000000000000000000000000000000000000000000880000008800
-- 116:10202020202020202020202088d2d2d288202020202020202020202020100000882020202020202020202020202020202020202020d20000000010000010000000000000000000000000000000000000000000000000121000001022202020e0e0e0e0a1e0e0e0e0a1e0e0e0a1202420b27000000030000000670000000000000000000000000067008a008a008a00008a0000008a00001020202020262020202020202026202020202020202620202020201000001000000010000000000000000000000000000000000000008a00000000000000000000000000000000000000000000000000000000890000008900
-- 117:1010101010101010101010108900000089101010101010101010101010100000890313101010101010101010101010101010100313100000001010000010101010101010101010113111101010101010101010101010101000001002202020e0e0e0e0a1e0e0e0e0a1e0e0e0a1202020b2700000003000000067676767676767676767676767676700000000000000000000000000000010101010108b101010101010108b101010101010108b10101010d210000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a0000008a00
-- 118:000000000000004f004f00008a1131118a0000004f00000000000000000000008a0414000000000000000000000000000000000414101131111000000000000000000000000010101010100000000000000000000000000000001010101010101010101010101010101010101010101010103030303000000000000000000000000000000000000000000000000000000000000000000000000000008c000000000000008c000000000000008c00000010311000001011311110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 119:000000000000000000000000880000008800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000362525252525251010101010252525252525360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101010101010101010000000000000000000000000000000000000000000000000000010211000001021100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100121011000
-- 120:000000000000000000000000891010108900000000000000000000000000000000000000000000000000071710101010100717000000000000000000000000000000260000005868781001210110586878008800260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000012001010101010101010101010101010101010101010101010101010001010101000101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102020201000
-- 121:0000000010101010101010108a1010108a10101010101010100000000000000000000000101010101000081810012101100818000000000000000000000000000000260088007a697910d2d2d21059696a00890026000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000003200102020202020202020202020202020202020202020202020201000003222000010a119071719071719071719071719071719071719a1000000001202202020202020d220202070e0e0e0e0e070202020d22020202020201000
-- 122:0000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2100000000000000000000000102020201010101010202020101010101010100000000000000000000000260089001020202020202020202010008a0026000000000000000000000000000000001010101010101010101010000000000000000000000000000000000000000000000000000000001000000000000000001200102020202020202020202020202020202020202020202020201010101010101010a100081800081800081800081800081800081800a1000000003222202020202020d220202070e0e0e0e0e070202020d22020202020201000
-- 123:0000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c210000000000000000000000010202020701e1e1e7020242020202020206310000000000000000000000026008a0010202020202020202020100000002600000000000000000000000000000000100000004f0000000000100000000000000000000000000000000000000000000000000000000010828282101010101010001020202020202020208b2020202020204b5b2020202020202020201000000010c2c28282828282828282828282828282828282828292000000001202202020202020d220202070e0e0e0e0e070202020d22020202020201000
-- 124:0000880010a2c2c2c2a2a2a2a2a2a2a2a2a2a2a2c2c2c2a21000880000000000000000001020202010101010102020201010101010e0100000000000000000000000260000001020202020202020202010101000260000000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000000088008800880010c2c2c2100000000000001020202020202020208c2020434343204c5c2020202020202020201000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2920000001010101010101010101020202010101010101010202020101010101010101000
-- 125:00008900108bb2c2922020202020202020202020b2c2928b1000890000000000000000001010701010000000101010101000000010e01000000000000000000000002600000010202020205e20202020d212100026000000000000000000000000000000101000000000000d0d0d00100000000000000000000000000000000000000000000089008900890010c2c2c2100007170000101020202020202020202020b0a0a0a0c020202020202020202020201000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c292000000100000000000000313102020208b00000000008b202020100717000000000000
-- 126:00008a00108cb2c2922064252520202025258420b2c2928c10008a00000000000000000000100d1000283848002838480028384810e01000000000000000000000d4e4f400001020208e2020208e2020d23210d4e4f40000000000000000000000000000100200000000000d0d0d0010000000000000000000000000000000000000000000008a008a008a0010c2c2c2100008180000022020202020202020202073a1e0e0e0a153202020202020202020201000000010a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a291000000100000000000000414092020208c58686868788c2020200a0818000000000000
-- 127:00000000108bb2c2922020202037273720202020b2c2928b10000000000000000000000000100d1000293949002939490029394910d21000000000000000000000d5e5f5000010202020202020202020d21210d5e5f5000000000000000000000000000010220000002f000d0d0d00100000000000000000000000000000000000000000000000000000000010c2c2c2100000000000222020202020202020202073a1e00ee0a15320202020202020202020100000001000000000000000000000000000000000000000000000000a100000000000000000001020202010595a69696a10202020100000000000000000
-- 128:00000000108cb2c2922074252537373725259420b2c2928c10000000000000000000000000100d10002a3a4a002a3a4a002a3a4a10e010000000000000000000000000000000102020202020202020201010100000000000000000000000000000000000100200000000000d0d0d00100000000000000000000000000000000000000000101010101010101010a2a2a2100000000000022020202020202020202073a1e0e0e0a1532020202020202020202010000000100000000000000000000000000000000000000000000000000a1000000000000000001020202020202020202020202020100000000000000000
-- 129:000088001020b2c2922020202020202020202020b2c292201000880000000000000000001010701010000000101010101000000010e010000000000000000000000000008800102020202020202020201000000000000000000000000000000000000000101000000000000d0d0d00100000000000000000000000000000000000000000100000000000000000000000100000000000101020202020202020202020b1a0a0a0c120202020202020202020201000000010000000000000000000000000000000000000000000000000000a10000000000000001020202020202020202020202020100000000000000000
-- 130:000089001020b2c2922020202020202020202020b2c292201000890000000000000000001020202010101010102020201010101010e0100000000000000000000000000089001020202020202020202010008800000000000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000100000000000000000000000100000000000001020202020202020204b5b20636363206b7b2020202020202020201000000010000000808282828282828282828282828282828282828282821000000000000088001020202020202020202020202020100088000000000000
-- 131:00008a001020b2c2c28290202020202020208082c2c2922010008a0000000000000000001020202070b2c2927020202020202020207310000000000000000000000000008a001020202020202020202010008900000000000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000100000000000000000000000100000000000001020202020202020204c5c20202020206c7c2020202020202020201000000010000000b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c210000000000000890010200e202020200e202020200e20100089000000000000
-- 132:000000001020b2c2c2c2c28210d2d2d21082c2c2c2c292201000000000000000000000001020202010101010102020201010101010101000000000000000000000000000000010101010d2d2d210101010008a00000000000000000000000000000000000010101010101010101010100000000000000000000000000000000000000000100000001010101010101010100000000000001020202020202020202020202020202020202020202020202020201000000010000000b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2100000000000008a00102020202020202020202020202010008a000000000000
-- 133:00000000101010101010101010113111101010101010101010000000000000000000000010101010100007171011311110071700000000000000000000000000000000000000000000101131111000000000000000000000000000000000000000000000000000004f00000000004f000000000000000000000000000000000000000000100000001000000000000000000000000000001020202020202020202020202020202020202020202020202020201000000010000000b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000000000000001020202020202020202020202020100000000000000000
-- 134:0000000000000000004f0000101010101000004f00000000000000000000000000000000000000000000081810101010100818000000000000000000000000000000000000000000001010101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000000000000001010101010101010101010102020201010101010101010101010101000000010000000105868686868686868686868686868686878101010101000000000000000001010101010101010101010101010100000000000000000
-- 135:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101131111000000000000000000000000000000000000000000000000000101131111000000000000000000000000000000010113111107a69695a5a5a696969695a5a69695a6979000000000000000000000000000000000000000000000000000000000000000000000000
-- </MAP>
-- <MAP1>
-- 000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101010101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100121011000000000000000000000000000000000000000000000000000100121011000000000000000000000000000000010012101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 001:000000000000000000000000000000000000000000000000000000000000008800101010101010101010001010101010001010101010101010100088000000000000000000768610010121010110768600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101010101010100000001010101010101000000000000000001010101010101010101010100000001010101010101010101010101000000010000000101010101010101010101010101010101010101010101010000000d6e6e6f600000000000000000000000000000000d6e6e6f6000000
-- 002:0000000000000000bdcdddedfd000000000000000000000000000000000000890010768605158b587810001001210110001058788b031376861000890010101010101010107787102020202020107787101010101010101000000000008800000000101010100000000000000010101010000000008800000000d4e4f4008b0000000000000000000000000000008b00d4e4f40000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c210000000100000001020202020a120202020202020202020202020a120202010000000d7cbdbf700001010101010101010101010101000d7abbbf7000000
-- 003:0000000000000000becedeeefe0000000000000000000000000000000000008a0010778706168c7a6a101010202020101010596a8c0414778710008a0010202020202020202020202020202020202020202020202020201000000000008900101010100717101010101010101010071710101010008900000000d5e5f5258c0000000000000000000000000000008c25d5e5f50000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a120202020202020202020202020a120202010000000d7ccdcf725251025252320202020202020201000d7acbcf7000000
-- 004:0000000000000000bfcfdfefff00000000000000000000000000000000000000001028482020202020071710202020100717202020202028481000000010202020202020202020202020202020202020202020202020201000000000008a00102020200818202020202020202020081820202010008a00000000000000001000000000000000000000000000000010000000000000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a12020202020204e202020202020a120202010000000d8e8e8f800001028482020202020202020201000d8e8e8f8000000
-- 005:000000000000000000000000000000000000000000000000000000000000008800102949204b5b20200818102020201008182020206b7b29491000880010202020202020202020202020202020202020202020202020201000000000000000102020202020202020202020202020202020202010000000000000000088001000000000000000000000000000000010008800000000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a12020b0a0a0a0a0a0a0a0c02020a120202010000000000000000000102a4a202020202020202020100000000000000000
-- 006:000000abbb001010101010101010100000e283f200001010101010000000008900102949204c5c20202007172020200717202020206c7c294910008900102020208820202020202020202020202020202020208820202010000000001010401020202020202020202020204e202020202020201010101000000000008900100000000a101010701010100900000010008900000000001010a2a2a2a2a2a2a2a2a2a29100000081a2a2a2a2a2a2a2a2a2a2a210100010101010101020202020a12020a1e0e0e0e0e0e0e0a12020a120202010000000d6e6e6f60000102020202020202020202020101010000000000000
-- 007:000000acbc00100000000000000010000000000000001001210110000000008a0010294920202020202008182020200818202020202020294910008a0010202020892020202020203e204e203e202020202020892020201000000000100200d220202020202020202020202020202020202020d200121000000000008a0010000000008802e0e0e012880000000010008a0000000000020000000000000000000000002e002e0000000000000000000000000012000200000000d220202020a12020a1e0e0e0e0e0e0e0a12020a120202010000000d7c9d9f70000102020202020202020202020201210008800000000
-- 008:00000000000010000000000000001010101010101010100000001010100000000010294920202020202020202020202020202020202020294910000000102020208a20202020202020202020202020202020208a2020201000000000102200d22020202020205e20206e20205e202020202020d2003210000000000000001000008e008922e0e0e03289008e0000100000000000000022000000000000000000000000004e000000000000000000000000000032002200000000d220202020a1204ea1e0e0e05ee0e0e0a14e20a120202010000000d7cadaf72525102525232020202020202020203210008900000000
-- 009:001010101010100000000000000000007000a10070000000000000121000001010102a4a209c2020202020202020202020202020209b202a4a1010100010202020202020202020202020202020202020202020202020201000000000100200d220202020202020202020202020202020202020d20012100000000000880010000000008a02e0e0e0128a000000001000880000000000020000000000000000000000002e002e0000000000000000000000000012000200000000d220202020a12020a1e0e0e0e0e0e0e0a12020a120202010000000d8e8e8f80000102020202020202020202020201210008a00000000
-- 010:001022000000000000000f00000000007000a10070000000000000321000001002202020202020202020202020202020202020202020202020201210001003132020202020202020202020202020202020202020200313100000000010101010202020202020204e20202020202020202020201010101000000000008900100000000a101010701010100900000010008900000000001010828282828282828282829000000080828282828282828282828210100010101010101020202020a12020a1e0e0e0e0e0e0e0a12020a1202020100000000000000000001028482020203f2020202020101010000000000000
-- 011:001010101010100000000000000000007000a1007000000000000012100000102220202020202020202020202020202020202020202020202020321000100414202020201a20202020202020202020201a202020200414100000000000000010202020202020202020202020202020202020201000000000000000008a001000000000000000000000000000000010008a00000000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a12020b1a0a0a0a0a0a0a0c12020a120202010000000d6e6e6f60000102a4a202020202020202020100000000000000000
-- 012:000000000000100000000000000010101010101010101000000010101000001002202020202020202020202020202020202020202020202020201210101010101010101010d2d2d2d2d2d2d2d2d2d2d2101010101010101010000000008800102020200313202020202020202020031320202010008800000000000000001000000000000000000000000000000010000000000000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a12020202020204e202020202020a120202010000000d7e9f9f700001020202020202020202020201000d6e6e6f6000000
-- 013:0000000000001000000000000000100000000000000010113111100000000010101010101020202020202020202020202020202020201010101010101002000000000000000000000000000000000000000000000000001210000000008900101010100414101010d2d2d2101010041410101010008900000000d4e4f4008b0000000000000000000000000000008b00d4e4f40000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c21000000010000000d220202020a120202020202020202020202020a120202010000000d7eafaf725251025252320202020202325251025d7b7c7f7000000
-- 014:0000000000001010101010101010100000000000000010101010100000000000000000001010101010101088202020881010101010101000000000001022000000000000000000000000000000000000000000000000003210000000008a00000000101010100010000000100010101010000000008a00000000d5e5f5258c0000000000000000000000000000008c25d5e5f50000000010c2c2c2c2c2c2c2c2c2c292000000b2c2c2c2c2c2c2c2c2c2c2c210000000100000001020202020a120202020202020202020202020a120202010000000d8e8e8f800001010101010101010101010101000d7b8c8f7000000
-- 015:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000089113111890000000000000000000000001002000000000000000000000000000000000000000000000000001210000000000000000000000000000010113111100000000000000000000000000000000000001010101010101000000010101010101010000000000000000010101010101010101010101000000010101010101010101010101010000000100000001010101010101010101010101010101010101010101010100000000000000000000000000000000000000000000000d8e8e8f8000000
-- 016:000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a1010108a000000000000000000000000101010101010101010101010101010101010101010101010101010101000000000000000000000000000001010101010000000000000000000000000000000000000000000000000101131111000000000000000000000000000000000000000000000000000101131111000000000000000000000000000000010113111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 017:000000000000000000000000000000000000000000000000000000000000000000001010101058686868781001210110586868687810101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0a0a0a0a0a0c00000000000000000000000000000000000000000000000100121011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010012101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 018:00000010101010101010101010101010101010101010100000000000000000000010108b8b8b7a695a69798bd2d2d28b595a5a696a8b8b8b10100000001010101010101010101010101010101010101010101000000000000000000000000000000000000000a11010101010a10000000000000000000000000000000000000000000000100000001000000000000000000000000000000000000010012101101010101010101010101010100000000000000000000010000000103030303030303030303030303030303030303030303010003030303030303030303030303030303030303030303030303030303000
-- 019:00000010202020202020202020202020202020202020101010101000000000000010208c8c8c20202020208c2020208c20202020208c8c8c20100000001007170007170007170007170007170007170007171000000000000000000000000000000000000088a11001210110a188000000000000000000000000000000000000000000001000000010000000000000000000000000000000000000100000001000000000000000000000008b00d4e4f400000000000010000000100000000000000000000000000000000000000000000010003000000000000000000000000000000000000000000000000000003000
-- 020:0000001020a4b4c420a4b4c42020a4b4c420a4b4c4201001210110000000000000102020202020202020202020202020202020202020202020100000001008180008180008180008180008180008180008181000000000000000000000000000000000000089a11020202010a189000000000000000000000000000000000000000000001060606010000000000000000000000000000000000000100000001000000000000000000000008c25d5e5f500000000000010000000100030303030303030303030303030303030303030300010003000000000000000000000000000000000000000000000000000003000
-- 021:000000108ba5b5c58ba5b5c52020a5b5c58ba5b5c58b102020201000000000000010202020202838480717202020202007172838482020202088000000101010101010101010101010101010101010100000100000000000000000000000000000880000008aa11020202010a18a00000088000000000000000000000000000000000000100000001000000000000000000000000000000000000010000000100000000000000000000000100000000000000000000010000000100030000000000000000000000000000000000000000010003000000000000000000000000000000000000000000000000000003000
-- 022:000000108ca6b6c68ca6b6c62020a6b6c68ca6b6c68c102020201000000000000010202020202a3a4a0818202020202008182a3a4a202020208900000010202020202020202020202020202020202010071710000000000000000000000000000089b0a0a0a0c11020202010b1a0a0a0c089000000000000000000000000d4e4f40088001000000010008800d4e4f4000000000000000000000000100000001000000010101010100000008b00d4e4f400000000000010000000100030003030303030303030303030303030303030303010003000000000000000002f00000000000000000000000000000000003000
-- 023:0000001037373737373737373737373737373737373788202020880000000000001020204b5b2020202020202020202020202020204b5b20208a1010101020202020202020202020202020202020201008181000000000000000000000000000008aa110101010107070701010101010a18a000000000000000000000000d5e5f5008900108e008e10008900d5e5f5000000000000000000000000100000001011311110000000100000008c25d5e5f50000000000001000000010003000300d003000000030000000300000003000000010003000000000000000000000000000000000000000000000000000003000
-- 024:0000001020202020202020202020202020202020202089202020890000000000001020204c5c2020202020202020202020202020204c5c2020d2121002d220202020202020202020202020200e202010000010000000000000000000000000000000a1100d0000000000000000000a10a100000000000000000000000000002600008a001000000010008a0000260000000000000000000000000010000000101010101000000010000000100000000000000000000010000000100030003000003000300030003000300030003000300010003000000000001f00000000003f00000000000000000000000000003000
-- 025:000000102020202020202020202020202020202020208a2020208a0000000000001020202020d4e4f4208b20202020208b20d4e4f420202020d2321022d2202020202020202020202020202e20202010071710000000000000000000000000000000a110000000001010100000000010a10000000000000000000000000000260000000010004e0010000000002600000000000000000000000000100000001000000000000000100000008b00d4e4f400000000000010000000100030003000000000300000003000000030000000300010003000000000000000000000000000000000000000000000000000003000
-- 026:00000010202020202020202020202020202020202020d2202020100000000000001020208e20d5e5f5258c20202020208c25d5e5f5208e2020d2121002d2202020202020202020202020202020202010081810000000000000000000000000000000a110090000000000000000001d10a1000000000000000000000000051526000000008b0000008b000000002605150000000000000000000000100000001000000000000000100000008c25d5e5f500000000000010000000100030003030303030303030303030303030303030300010003000000000000000006600000000000000000000000000000000003000
-- 027:000000888b2020208b88202020202020202020202020d2202020100000000000001020202020202020202020202020202020202020202020208810101010202020202020202020202020202020202010000010000000000000000000000000000088a110101010107070701010101010a1880000000000000000000000061636252525258c0000008c25252525360616000000000000000000000010000000100000000000000010000000100000000000000000000010000000100030000000000000000000000000000000000000000010003000000000000000000000000000000000000000000000000000003000
-- 028:000000898c2523258c89202020202020202020202020d22020201000000000000010202020202020208e202020202020208e202020202020208900000010202020202020202020203e20202020202010071710000000000000000000000000000089b1a0a0a0c01020202010b0a0a0a0c1890000000000000000000000000026000000001000000010000000002600000000000000000000000000100000001010101010101010100000008b00d4e4f400000000000010000000100030303030303030303030303030303030303030303010003000000000000000000000000000000000000000000000000000003000
-- 029:0000008a20202020208a10101010101010101010101010101010100000000000001020202020202020202020202020202020202020202020208a0000001010101010101010101010202020202020201008181000000000000000000000000000008a00000088a11020202010a1880000008a0000000000000000000000000026000088001000000010008800002600000000000000000000000000100000000000000000000000000000008c25d5e5f500000000000010000000100000000000000000000000000000000000000000000010003000000000000000000000000000000000000000000000000000003000
-- 030:00000010202020202010000000000000000000000000000000000000000000000010209b202020202020202020202020202020202020209b20100000000000000000000000071710202020202020201000001000000000000000000000000000000000000089a11020202010a18900000000000000000000000000000000d4e4f40089001060606010008900d4e4f400000000000000000000000010000000000000008e008e008e008e00100000000000000000000010000000103030303030303030303030303030303030303030000010003000000000000000000000000000000000000000000000000000003000
-- 031:00000010111131111110000000000000000000000000000000000000000000000010202020202020202020202020202020202020202020202010000000000000000000000008181020202020202020100717100000000000000000000000000000000000008aa11011311110a18a00000000000000000000000000000000d5e5f5008a001000000010008a00d5e5f5000000000000000000000000100000000000000000000000000000008b00d4e4f400000000000010000000400000000000000000000000000000000000000000000a10003030303030303030303030303030303030303030671131116730303000
-- 032:0000001010101010101000000000000000000000000000000000000000000000001010101010101010101010d2d2d2101010101010101010101000000000000000000000000000101010d2d2d210101008181000000000000000000000000000000000000000a11010101010a100000000000000000000000000000000000000000000001000000010000000000000000000000000000000000000101010101010101010101010101010108c25d5e5f500000000000010000000103030303030303030303030303030303030303030303010000000000000000000000000000000000000000000676767676700000000
-- 033:000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011311110000000000000000000000000000000000000000000000000001011311110101010101000000000000000000000000000000000000000b1a0a0a0a0a0c10000000000000000000000000000000000000000000000101131111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010113111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 034:343434343434343434343434343434343434343434343434343434343434000000000000000000000000001001210110000000000000000000000000000000000000000000000000001001210110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005868780000000000100121011000000000005868780000000000000010012101100000000000000000586868686868687800008800000000000010012101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100121011000
-- 035:3410101010101010101010101010101010101010101010101010101010340010101010101010101010101010d2d2d2101010101010101010101010000000000000000000000000000010d2d2d21000000000000000000000000000000000000058687800586878101010101058687800586878000000000000101010596979101010101010d2d2d21010101010105969791010101000001010000000101010101010101010595a5a696969696a10108910101000000010000000101010101010101010101010101010101010101010101000001010101010101010101010101010101010101010101010102020201000
-- 036:341020202020202020202020202020202020202020202020202020201034001020202020202020202020202020202020202020202020202020201000000000000000880000000000001000000010000000008800880000000000000717881010595a79105969791001210110595a7910595a791088071700001000000000007686586878100000001058687876860000000000001000001000000000000000d22020202020202020202020202020198a1920100000001000000010b0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0c01000001080828282829020202020202020202080829020202020202020201000
-- 037:34102020202020202020202020202020202020202020202020202020103400102020202020202020202020202020202020202020202020202020100000000000000089000000071700100000001000071700890089000000000000081889202020202020202020202020202020202020202020208908180000100000000000778759696a10000000107a5a7977870000000000001000001000000000000000d2202020202020202020202020202020202020100000001000000010a120202020202020202020202020202020202020a110000010b2c2c2c2c292202020202020202020b2c29220202020202020201000
-- 038:3410202020202020202020202020202020202020202020202020202010340010202020202020202020202020202020202020202020202020202010000000000000008a0000000818001000000010000818008a008a00000000000010108a202020202020202020202020202020202020202020208a10100000100000009c00000000000010000000100000000000009b000000001000001000000000000000d220205e202020202020202020202020202020100000001000000010a120202020202020202020202020202020202020a110000010b2c2c2c2c292202020202020202020b2c29220202020202020201000
-- 039:341020202020202020202020202020202020202020202020202020201034001020202020031320202020b0a0a0a0a0a0c02020202003132020201000000000000000000000000000001000000010000000000000000000000000001020202020202020202020202020202020202020202020202020201000001000000000000000000000100000001000000000000000000000001000001007170000000000d2202020202020202020202020202020202020100000001000000010a120202020202020202020202020202020202020a110000010b2c2c2c2c292202020808290202020b2c29220202080828282901000
-- 040:34102020202020202020202020207d202020202020202020202020201034001020202020041420202020a1e0e0e0e0e0a1202020200414202020101010101010101010101010101010100000001010101010101010101010101010102020202020202020202020202020209a206b7b2020202020202010100010000000000000008e0717100000001007178e00000000000000001000001008180000000000d2202020202020202020202020202020202020100000101010701010a12020202020201e20202020201e202020202020a11010101081a2a2a2c292202020b2c292202020b2c292202020b2c2c2c2921000
-- 041:341020202020202020202020202020202020202020202020202020201034001020202020202020202020a1e0e0e0e0e0a1202020202020202020d21202d2000000000000000000000070e0e0e07000000000000000000000d212100220202020202020204b5b202838383848206c7c2020202020202012100010000000000000000008181000000010081800000000000000000010000010101010101010101020204e2020209b283838486b7b20202020201000000200e0e0e0d2a120202020202020202020202020202020202020a1d212022020202020b292202020b2c292202020b2c292202020b2c2c2c2921000
-- 042:3410202020202020202020202020202020202020202020202020202010340010202020202020204e2020a1e0e05ee0e0a120204e202020202020d23222d2000000000000000000000070e0e0e07000000000000000000000d232102220202020202020204c5c2029393939492020202020202020202032100010000000000000000000071700000007170000000000000000000010000000000000000000001020202020204b5b293939496c7c20202020201000002200e0e0e0d2a12020202020202020204e202020202020202020a1d232222020202020b292202020b2c292202020b2c292202020b2c2c2c2921000
-- 043:341020202020202020202020202020202020202020202020202020201034001020202020202020202020a1e0e0e0e0e0a1202020202020202020d21202d2000000000000000000000070e0e0e07000000000000000000000d21210022020202020202020208e202a3a3a3a4a20208e2020202020202012101010000000000000000000081800000008180000000000000000000010101010101010101010001020202020204c5c2a3a3a4a9c2020204e20201000000200e0e0e0d2a120202020202020202020202020202020202020a1d212022020202020b292202020b2c292202020b2c292202020b2c2c2c2921000
-- 044:341020202020202020202020202020202020202020202020202020201034001020202020201e20202020a1e0e0e0e0e0a1202020201e202020201010101010101010101010101010101010701010101010101010101010101010101020202020202020202020209b2020202020202020202020202020101002d20000000000000000000000000000000000000000000000000000d21202000000000000100010202020202020202020202020202020202020101000101010701010a12020202020201e20202020201e202020202020a11010101090202020b292202020b2c292202020b2c292202020b2c2c2c2921000
-- 045:341020202020202020202020202020202020202020202020202020201034001020202020202020202020b1a0a0a0a0a0c1202020202020202020100000000000000000000000000000100000001000000000000000000000000000102020202020202020202020202020202020202020202020202020100022d200008e00000000000000000000000000000000000000008e0000d23222000000000000100010202020202020202020202020202020202020d21200001000000010a120202020202020202020202020202020202020a110000010922020208191202020b2c29220202081a291202020b2c2c2c2921000
-- 046:3410202020202020202020202020202020202020202020202020202010340010202020202020202020202020202020202020202020202020202010000000000000008800880007170010000d001000071700880000000000000000101088202020202020202020202020202020202020202020208810100002d200d4e4f4000000000000000000000000000000000000d4e4f400d212020000000000001000102020202020202020202020202020205e2020d23200001000000010a120202020202020202020202020202020202020a110000010922020202020202020b2c292202020202020202020b2c2c2c2921000
-- 047:341020202020202020202020202020202020202020202020202020201034001020202020202020202020202020202020202020202020202020201000000000000000890089000818001000000010000818008900880000000000000717892020202020202020202020202020202020202020202089071700101000d5e5f5258b586878768600000076865868788b2525d5e5f500101010101010000000100010202020202020202020202020202020202020d21200001000000010a120202020202020202020202020202020202020a110000010922020202020202020b2c292202020202020202020b2c2c2c2921000
-- 048:34102020202020202020202088d2d2d288202020202020202020202010340010202020202020202020202020202020202020202020202020202010000000000000008a008a000000001010101010000000008a008900000000000008188a101058687810586878101131111058687810586878108a081800001000000000008c7a697977870000007787595a798c000000000000100000000010000000100010201a881a2020202020202020202020202020101000001000000010b1a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0c11000001092202020202020202081a29120202020202020202081a2a2a2911000
-- 049:3410101010101010101010108900000089101010101010101010101010340010101010101010101010101010d2d2d2101010101010101010101010000000000000000000000000000000000000000000000000008a0000000000000000000000595a7900595a791010101010595a7900595a6a000000000000101010101010101010101010d2d2d21010101010101010101010101000000000100000001000101010891010101010101010101010101010101000000010000000101010101010101010101010101010101010101010101000001010101010101010101010101010101010101010101010101010101000
-- 050:3434343434343434343434348a1131118a343434343434343434343434340000000000000000000000000010113111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011311110000000000000000000000000000000001011311110000000008a0000000000000000000000000000000000000010113111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 051:0000000000000000000000008801210188000000000000001000000000000000000000000000000000000010012101105868686868686868780000000000000000000000008b8b8b586868686868788b8b8b0000000000000000101010101010101010101010101010101010101010101010101010101010000003130000000003130000100121011000000000000000000000000000000000100121011000000000000000000000000000000000000000000000000010012101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 052:1010101010101010101010108900000089101010101010101010101010100010101010101010101010101010d2d2d2107a6969695a5a69696a1010000000008800000000108c8c8c595a6969695a798c8c8c10000000008800001001210110c2c2c2c2c29219202020202020202020202020202020202010001004141010101004141010100000001010101010101010101010101000001010100000001010100000000000000000000000000000000000000000001010d2d2d2101010101010101010101010101010101010101010101000000000000000000000000000006767676767676767676767676767670000
-- 053:1020202020202020202020208ad2d2d28a202020202020202020202020100010071700000007171020202020202020202020202020202020202010000000008900071700102020202020202020202020202010000717008900001000000088c2c2c2c2c29220202007172020202020202020202020202010071700000000000000001019100000000000000000000000000000001000001000000000000000100000000000001010101010101000000000000000001020202020202020202020202020202020202020202020202020201000000000000088008800880088006700000000000000000000000000670000
-- 054:10202020202020202020202020202020202020202020202020202020201000100818000d0008181020202020202020202020202020202020202010000000008a0008180010201d1d202020202020200d0d2010000818008a00001000000089c2c2c2c2c29220202008182020202020202020202020202010081800000000000000001082100000000000000000000000000000001000001000000000000000100000000000001000000000001000000000000000001020202020202020202020202020202020202020202020202020201000000000000089008900890089006700071700000000000000071700670000
-- 055:10202020202020202020202020205d2020202020202020202020202020100010880000000000881020201e20202020201e2020202020202020201000000000000000000088201d1d202020202020200d0d20880000000000000010d2d2d28ac2c2c2c2c292202020202020202020202020202020202020100010000000000000000010c2100000000000000000000000000000001000001000000000000000100000000088001000001f000010008800000000000010202020202020201e2020208e2020208e2020201e202020202020100000000088008a008a008a008a006700081825252525252525081800670000
-- 056:1020202020202020202020202020202020202020202020202020202020100010890d001d000d8910202020202020202020202020202020202020101000000000000003138920202020202020202020202020890313000000000010202020b2c2c2c2c2c292202020284820202080828282828290202020100010000000000000000010c21000000000008b0000008b000000000010000010009e0000009e0010000000008900100000000000100089000000000000102020202020202020202020208e208e20202020202020202020201000000000890000000000000000006700002600000000000000260000670000
-- 057:10202020202020202020202020202020202020202020202020202020201000108a00000000008a10201e2020204e2020201e2020202020202020d21200000010101004148a10101010d2d2d2d2d2101010108a0414101010000010202020b2c2c2c2c2c2922020202949202020b2c2c2c2c2c292202020100010000000000000000010c210000000008e8c0000008c8e00000000100000100000000000000010000000008a0010001d1d1d0010008a0000000000001020202020d4e4f4208b5878202020202058788b20d4e4f420202010000000008a0067676767676767676700002600000000000000260000670000
-- 058:10202020202020202020202020202020202020202020202020202020201000108282828282828210202020202020202020202020202020202020d21200000088202020202020202020202020202020202020202020202010000010202020b2c2c2c2c2c292201e202949201e20b2c2c2c2c2c292202020100010001d00000000000010a210000000000000000000000000000000100000100000000e000000100000000000001000000000001000000000000000001020202020d5e5f5258c5979202020202059798c25d5e5f52020201000000000000067000000000000000000002600000000000000260000670000
-- 059:1020202020202020202020202020202020202020202020202020202020100010c2c2c2c2c2c2c210202020202020202020202020202020202020d232000000892020202020202020204e2020204e20202020202020202010000010202020b2c2c2c2c2c2922020202949202020b2c2c2c2c2c292202020100010001d000d0000000070e070000000000000009e0000000000000010000010000000000000001000000000000010104040401010000000000000000010202020202020201e20202020205e20202020201e2020202020201000000000880067000000000000000000002600000095000000266600670000
-- 060:1020202020202020202020202020202020202020202020202020202020100010c2c2c2c2c2c2c21020201e20202020201e202020202020202020d2121010108a202020202020202020202020202020202020202020202010000010202020b2c2c2c2c2c2922020202949202020b2c2c2c2c2c292202020100010001d0000000000001082100000000000000000000000000000001000001000000000000000100000000000000030000000300000000000000000001020202020202020202020204e2020204e202020202020202020201000000000890067000000000000000000002600000000000000260000670000
-- 061:1020202020202020202020202020202020202020202020202020202020100010c2c2c2c2c2c2c210202020202020202020202020202020202020d212220000d22020208b2020200e2020205e2020200e2020208b20202010000010202020b2c2c2c2c2c2922020202949202020b2c2c2c2c2c292202020100010000000000000000010c21000000000008e8b008b8e0000000000101010100000000000000010000000000000003000000030000000000000000000102020202058788b20d4e4f42020202020d4e4f4208b587820202010000000008a0067000000676767676700002600000000000000260000670000
-- 062:1020202020202020202020202020202020202020202020202020202020100010a2a2a2a2a2a2a2102020202020202020202020202020202020201010020000d22020208c2020202020202020202020202020208c2020201000001020202081a2a2a2a2a2912020202a4a202020b2c2c2c2c2c292202020100010000000000000000010c2100000000000008c008c000000000000001202000000000000000010303030303030303000000030000000000000000000102020202059798c25d5e5f52020202020d5e5f5258c59792020201000000000000067000000670000006700002600000000000000260000670000
-- 063:102020202020202020202020202020202020202020202020202020202010001000000000000000d22020202020202020202020202020202838481000101010882020202020202020209b2020209b20202020202020202010000010202020202020202020202020202020202020b2c2c2c2c2c288d2d2d2100010000000000000000010c2100000000000000000000000000000000032220000000000000000400000000000000000000000300000000000000000001020202020202020202020202020202020202020202020202020201000000000880067000000670088006700071725252525252525071700670000
-- 064:102020202020202020202020202020202020202020202020202020202010001000000000000000d2202020202020202020202020202020293949100000000089202020202020202020202020202020202020202020202010000010202020202020202020202020200717202020b2c2c2c2c2c289000000100717000000000000000010a2100000000000000000000000000000000012020000000000000000400000000000000000000000300000000000000000001020202020202020202020202020202020202020202020202020201000000000890067000000670089006700081800000000000000081800670000
-- 065:10202020202020202020202088d2d2d28820202020202020202020202010001000000000000000d22020202020202020202020202020202a3a4a10000000008a202020202020202020202020202020202020202020202010000010202020202020202020202020200818202020b2c2c2c2c2c28a0000001008180000000000000000101a1000000000000000000000000000000010101010000000000000004000000000000000000000003000000000000000000010202020205868781a58687820202020205868781a58687820202010000000008a006700000067008a006700000000000000000000000000670000
-- 066:10101010101010101010101089000000891010101010101010101010101000101010101010101010101010101010101010101010101010101010100000000010101010101010031310d2d2d2d2d21003131010101010101000001020202020202020202020202020202020201ab2c2c2c2c2c210113111100010031310101010031310101000000010101010101010101010101010000010101010101010101030303030303030303030303000000000000000000010101010105969791059697910d2d2d210596979105969791010101000000000000067000000670000006767676767676767676767676767670000
-- 067:0000000000000000000000008a1131118a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414101111311111100414000000000000000000101010101010101010101010101010101010101010101010101010101010000004140000000004140000101131111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011311110000000000000000000000000000000000067113111670000000000000000000000000000000000000000
-- 068:000000000000000000000000880121018800000000000000000000000000000000000000000000000000101010101010100000000000000000000000000000000000000000000000100101210101100000000000000000000000101010101010101010101010101010101010101010101010101010101010000000000000000000000000100121011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001210110000000000000000000000000000000000000000000000000100121011000000000000000000000000000
-- 069:1010101010101010101010108900000089101010101010101010101010100000000058687800000000001000000d000010000000000058687800000000000000000000000000000010e0e0e0e0e010000000000000000000000010c2c2c2100000000000000010000000000000000010000000000000001000101010101010101010101010d2d2d210101010101010101010101010100010101010101010101010101010101010101010101010101010101010000010101010101010101010101010d2d2d21010101010101010101010100000101010101010101010101010d2d2d21010101010101010101010101000
-- 070:1020202020202020202020208ad2d2d28a202020202020202020202020100000108b595a6a101010101010d2d2d2d2d21010101010107a696a8b100000000000000000000003130010e0e0e0e0e010000000000000000000000010c2c2c2100000000000000010000000000000000010000000000000001000102020202020202020202020202020202020202020202020202020d21200102020201063708082828290e0e0e0e0e0808282829070631020201000001007172020202020202020702020202020702020202020202007171000001020202020202020202020202020202020202020202020202020201000
-- 071:1020202020202020202020202020202020202020202020202020202020100000108c20202028384807172020202020202007172838482020208c100000000000000000000004140010e0e0e0e0e010008800000000000000000010c2c2c210e0e0e070e0e0e070e0e0e070e0e0e0e070e0e0e070e0e0e01000102020202020202020202020202020202020202020202020202020d2320010202020106370b2c2c2c292e0e05ee0e0b2c2c2c292706310202010000010081820202020207e202070202020202070207e202020202008181000001020202020202020202020202020202020202020202020202020201000
-- 072:10202020202020202020202020202020202020202020202020202020201000001020202020293949081825252525252525081829394920202020100000000000000000000000000717e0e0e0e0e010008900586878000000000010c2c2c210e0e0e070e0e0e070e0e0e070e0e0e0e070e0e0e070e0e0e01000102020202020202020202020202020202020202020202020202020d2120010202020106370b2c2c2c292e0e0e0e0e0b2c2c2c29270631020201000001020202020202020202020702020202020702020202020202020201000008b202020d4e4f42020202020202020202020202020d4e4f42020208b00
-- 073:102020202020202020202020202020202020202020202020202020202010000010202020202a3a4a20202020202020202020202a3a4a20202020100010101010101010101010100818707070707010108a10596979101010101010a2a2a21000000010000000100000001000000000100000001000000010001020202010828282828282828282828282828282828282828282821010001020202010e088b2c2c2c2921010701010b2c2c2c29288e0102020100000102020207e2020204e20207020205e202070204e2020207e2020201000008c252525d5e5f52020202020202020202020202020d5e5f52525258c00
-- 074:10202020202020202020202020202020202020202020202020202020201000001020202020206e202020202020202020202020206e2020202020101002e0e0e0e0e0e0e0e0e0e0e070202020202070e0e0e0e0e0e0e0e0e0e012020000000000000010000000000000001000000000000000001000000010001020202010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000001020202010e089b2c2c2c2c28290e08082c2c2c2c29289e01020201000001020202020202020202020702020202020702020202020202020201000001020202020202020202020202020202020202020202020202020201000
-- 075:10202020202020202020202020206d202020202020202020202020202010000010202020202020203e2020202020202020203e20202020202020201202e0e0e0e0e0e0e0e0e0e0e070202020202070e0e0e0e0e0e0e0e0e0e012020000108082900010000000000000001000000000000000001011311110001020202010c2c2c2c2c2c2c2c2c2c21010101010c2c2c2c2c2c2c21000001020202010e08ab2c2c2c2c2c29243b2c2c2c2c2c2928ae010202010000010071720202020207e202070202020202070207e202020202007171000001020202020202020202020202020202020202020202020202020201000
-- 076:10202020202020202020202020202020202020202020202020202020201000001020202020202020205e202020202020205e2020202020202020203222e0e0e0e0e0e0e0e0e0e0e07020205e202070e0e0e0e0e0e0e0e0e0e03222000010b2c2921010101010101010101010101010101010101010101010001020202010a2a2a2a2a2a2a2a2a2a21000000010c2c2c2c2c2c2c21000001020202010e010b2c2c2c2c2c292e0b2c2c2c2c2c29210e0102020100000100818202020202020202070202020202070202020202020200818100000102020202020202020202020204d202020202020202020202020201000
-- 077:10202020202020202020202020202020202020202020202020202020201000001020202020202020202020202020202020202020202020202020201202e0e0e0e0e0e0e0e0e0e0e070202020202070e0e0e0e0e0e0e0e0e0e0120200001081a2910010000000000000001000000000000000001001210110001020202010e0e0e0e0e0e0e0e0e0e07000240010c2c2c2c2c2c2c21000001020202010e01081a2a2a2a2a291e081a2a2a2a2a29110e010202010000010101010101010101010101010d2d2d210101010101010101010101000001020202020202020202020202020202020202020202020202020201000
-- 078:10202020202020202020202020202020202020202020202020202020201000001020202020208e202020202020202020202020208e2020202020101002e0e0e0e0e0e0e0e0e0e0e070202020202070e0e0e0e0e0e0e0e0e0e012020000000000000010000000000000001000000000000000001000000010001020202010e0e0e0e0e0e0e0e0e0e01000000010c2c2c2c2c2c2c210000010202020107010101010101010107010101010101010107010202010000000000000000000000000000010001d0010000000000000000000000000001020202020202020202020202020202020202020202020202020201000
-- 079:1020202020202020202020202020202020202020202020202020202020100000102020202020202020202020202020202020202020202020202010001010101010105868781088101070707070700717101010101010101010101082828210e0e0e070e0e0e070e0e0e070e0e0e0e070e0e0e070e0e0e010001020202070e0e0e0e0e0e0e0e0e0e01010101010c2c2c2c2c2c2c21000101020202020202020202020202020202020202020202020202020201010101010101010101010101010101010101010303030303030303030303000008b202020d4e4f42020202020202020202020202020d4e4f42020208b00
-- 080:10202020202020202020202020202020202020202020202020202020201000001003138b202020202020202020202020202020202020208b0313100000000000000059697900890010e0e0e0e0e008180000000000000000000010c2c2c210e0e0e070e0e0e070e0e0e070e0e0e0e070e0e0e070e0e0e010001020202080828282828282828282828282828282c2c2c2c2c2c2c2100002d22020202020202020202020202020202020202020202020202020d212020000000000000000000000000000000040000000000000000000003000008c252525d5e5f52020202020202020202020202020d5e5f52525258c00
-- 081:10202020202020202020202020202020202020202020202020202020201000001004148c202020202020202020202020202020202020208c04141000000000000000000000008a0010e0e0e0e0e010000313000000000000000010c2c2c210000000100000001000000010000000001000000010000000100010202020b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2100022d22020202020202020202020202020202020202020202020202020d23222000000000000000000000000000000004000000000000000000d003000001020202020202020202020202020202020202020202020202020201000
-- 082:10202020202020202020202088d2d2d2882020202020202020202020201000001010101010101010101010d2d2d2d2d210101010101010101010100000000000000000000000000010e0e0e0e0e010000414000000000000000010c2c2c210000000000000001000000000000000001000000000000000100010202020b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2100002d22020202020202020202020202020202020202020202020202020d212020000000000000000000000000000000040000000000000000000003000001020202020202020202020202020202020202020202020202020201000
-- 083:1010101010101010101010108900000089101010101010101010101010100000000000000000000000001000001d000010000000000000000000000000000000000000000000000010e0e0e0e0e010000000000000000000000010c2c2c210000000000000001000000000000000001000000000000000100010101010101010101010101010101010101010101010101010101010001010101010101010101058687810d2d2d21058687810101010101010101010101010101010101010101010100000001030303030303030303030300000101010101010101010101010d2d2d21010101010101010101010101000
-- 084:0000000000000000000000008a1131118a00000000000000000000000000000000000000000000000000101010101010100000000000000000000000000000000000000000000000101111311111100000000000000000000000101010101010101010101010101010101010101010101010101010101010000000000000000000000000000000000000000000000000000000000000000000000000000000005969791011311110596979000000000000000000000000000000000000000000001000000010000000000000000000000000000000000000000000000000101131111000000000000000000000000000
-- 085:000000000000000000000000880121018800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088010121010188000000000000000000000000101010101010101010101010101010101010101010101010101010101010000000000000000000000000000000000000000000000000000000000000000000000000000000001010101010000000000000000000000000000000000000000000000000000000001001210110000000000000000000000000000000000000000000000000100121011000000000000000000000000000
-- 086:101010101010101010101010890000008910101010101010101010101010006767676767676767676767676767670000000000000000000000000000000000101010101010101089d2d2d2d2d2891010101010101010000000001001210110c2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a210000000000000000000000000000067676767676767676767676767676700000000000000000313001001210110000313000000000000000000000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000102020201000071700000000000000000000
-- 087:1020202020202020202020208ad2d2d28a2020202020202020202020201000670000000000000000000000000067008800880088000088000000880000880010202020202020208a20202020208a202020202020201000000000100000001092202020202020202020202020202020202020202020202010008800000088000088008800880067000000000000000000000000006700000000000000000414001000000010000414000000000000000000000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000102020201000081800000000000000000000
-- 088:102020202020202020202020202020202020202020202020202020202010006700071700000000000000071700670089008900890000890000008900008900102020202020202020202020202020202020202020208b00d4e4f410000000109220202020202020202020202020202020202020d4e4f4208b008900000089000089008900890067000717000000000000000717006700000000000088000000001000000010000000008800000000000000000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000102020201000000000000000000000000000
-- 089:10202020202020202020202020202020202020202020202020202020201000670008182525252525252508180067008a008a008a00008a0000008a00008a00102020202020202020202020202020202020202020208c25d5e5f510000000889220202020202020202020202020202020202020d5e5f5258c008a0000008a00008a008a008a00670008182525252525252508180067000000000000890010101010d2d2d210101010008900768600031300000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000102020201000071700000000000000000000
-- 090:10202020202020202020202020202020202020202020202020202020201000670000260000000000000026000067000000000000000000000000000000000010202020202020202020202020202020202020202020100000000010000000899220202020202020202020202020202020202020202020201000000000000000000000000000006700002600000000000000260000670000000000008a001020202020202020202010008a00778700041400000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000102020201000081800000000000000000000
-- 091:102020202020202020202020202020202020202020202020202020202010006700002600000000000000260000676767676767676767676767676767101010102020202020202020202020202020202020202020201000000000100000008a102020202020202020202020202020202020201010101010106767676767676767676767676767670000260000000000000026000067000000000000000010202020201e2020202010000000000000000000000000101010101010101010101010101010701010101010101010101010101010101010101010101010101010102020201000000000000000000000000000
-- 092:10202020202020202020202020204d202020202020202020202020202010006700002600000000000000260000000000000000000000000000000012020000d220202020202020202020202020202020202020202010000000001000000000d220202020202020203d202020202020202020d20000000012020000000000000000000000000000000026000000000000002600006700000000000000001020202020202020202010101010101010101010100000022020202020202020202020201010e01010202020202020202020202012202020202020202020202020202020201000071700000000000000000000
-- 093:102020202020202020202020202020202020202020202020202020202010006700662600000085000000260000000000000000000000000000000032220000d2202020202020202020205d2020202020202020202010000000001000000000d2202020202020202020202020202020202020d200000000322200000000000000000000000000000000260000006500000026660067000000008800000010202020b0a0c0202020d20000000000000000121000002220202020202020202020202070e0e0e070202020202020202020202032202020202020202020202020202020201000081800000000000000000000
-- 094:102020202020202020202020202020202020202020202020202020202010006700002600000000000000260000000000000000000000000000000012020000d220202020202020202020202020202020202020202010000000001000000000d2202020202020202020202020202020202020d200000000120200000000000000000000000000000000260000000000000026000067000000008900000010207e20a16ea1207e20d2000000000000000032100000022020202020202020202020201010e01010202020202020202020202012202020202020202020202020202020201000000000000000000000000000
-- 095:1020202020202020202020202020202020202020202020202020202020100067000026000000000000002600006767676767676767676767676767671010101020202020202020202020202020202020202020202010000000001000000088102020202020202020202020202020202020201010101010106767676767676767676767676767670000260000000000000026000067000000008a00000010202020b1a0c1202020d2000000000000000012100000101010101010101010101010101010701010101010101010101010101010101010101010101010101010101010101000000000000000000000000000
-- 096:102020202020202020202020202020202020202020202020202020202010006700002600000000000000260000670000000000000000000000000000000000102020202020202020202020202020202020202020201000000000100000008992202020202020202020202020202020202020202020202010000000000000000000000000000067000026000000000000002600006700000000000000001020202020202020202010101010101010101010100000000000000000000000000000001020202010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 097:102020202020202020202020202020202020202020202020202020202010006700071725252525252525071700670088008800880000880000008800008800102020202020202020202020202020202020202020201000000000100000008a9220202020202020202020202020202020202020d4e4f4208b0088000000880000880088008800670007172525252525252507170067000000000000000010202020201e2020202010000000000000000000000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 098:102020202020202020202020202020202020202020202020202020202010006700081800000000000000081800670089008900890000890000008900008900102020202020202020202020202020202020202020208b00d4e4f410000000109220202020202020202020202020202020202020d5e5f5258c008900000089000089008900890067000818000000000000000818006700000000000088001020202020202020202010008800768600031300000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 099:10202020202020202020202088d2d2d2882020202020202020202020201000670000000000000000000000000067008a008a008a00008a0000008a00008a00102020202020202020202020202020202020202020208c25d5e5f5100000001092202020202020202020202020202020202020202020202010008a0000008a00008a008a008a0067000000000000000000000000006700000000000089001010101010101010101010008900778700041400000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 100:1010101010101010101010108900000089101010101010101010101010100067676767676767676767676767676700000000000000000000000000000000001010101010101010101010101010101010101010101010000000001011311110c282828282828282828282828282828282828282828282821000000000000000000000000000006767676767676767676767676767670000000000008a000000000000000000000000008a00000000000000000000000000000000000000000000001020202010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 101:0000000000000000000000008a1131118a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101010101010101010101010101010101010101010101010101010101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011311110000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 102:1010101010101010101010101001210110101010101010101010101010100000880313000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000000000000000000010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b000000000000008b000000000000008b00000000000000000000000000000000000000001001210110000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 103:1020202020202020202020208800000088202020202020202020202020100000890414101010101010101010101010101010100414101010101010000010101010101010101010101010101010101010101010101010101000000010012101101010101010101010101010101010101010103030303000000067676767676767676767676767676700000000000000000000000000000010101010108c101010101010108c101010101010108c10101010101000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 104:10202020202020202020202089000000892020202020202020202020201000008a2020202020202020202020202020202020202020d2000000001000001002000000000000000000000000000000000000000000000000100000001000000010202020a1e0e0e0e0a1e0e0e0a1e0e0e0e040000000300000006700000000000000000000000000670088008800880000880000008800001020202020262020202020202026202020202020202620202020201000000000000000000000000000001000000010000000000000008800000000000000000000000000000000000000000000000000000000000000000000
-- 105:1020202020202020202020208ad2d2d28a202020202020202020202020100000102020202020202020202020202020202020202020d2001d00008800001022000000000000000000000000000000000000000000000000100000001000000010200d20a1e0e0e0e0a1e0e0e0a1e0e0e0e0400000003000000067000717000000000000000717006700890089008900008900000089000010202020d4e4f42020202020d4e4f42020202020d4e4f42020202010000000000000000000101010101010d2d2d210101010101010008900000000000000000000000000000000000000000000000000000000000000000000
-- 106:1020202020202020202020202020202020202020202020202020202020100000882020202020202020202020202020202020202020d2000076868900001002000000000000000000000000000000000000000000000000100000001000000010202020a1e0e0e0e0a1e0e0e0a1e0e0e0e04000000030000000670008182525252525252508180067008a008a008a00008a0000008a000010202020d5e5f52020202020d5e5f52020202020d5e5f5202020201000000000000000000010202020202020202020202020202010008a00000000000000000000000000000000000000000000000000000000000000000000
-- 107:10202020202020202020202020202020202020202020202020202020201000008920202020204b5b20202020202020202020200a1010101077878a00001010101010101010101010101010101010101010101010707070100000001000000010828282c282828282c2828282c2828282821000000030000000670000260000000000000026000067000000000000000000000000000000102020202020202020202020202020202020202020202020202020100000000000000000001020d4e4f4208b20208b20d4e4f42010000000000000000000000000000000000000000000000000000000000000000000000000
-- 108:10202020202020202020202020202020202020202020202020202020201000008a20202020204c5c20202020202020201e20202020d2000000001010001009202020202020202020202020202020202020202020202020100000001000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000030000000670000260000000000000026000067676767676767676767676767676710102020202020202020202020202020202020202020202020202020100000101010101010101020d5e5f5258c20208c25d5e5f52010101010101010101010101010101010101010101010101010101010101010101010101000
-- 109:102020202020202020202020202020202020202020202020202020202010000010202020204e28384820202020202838484e202020d2000000000012001020202020202020882088252525252588208820202020202020100000001000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000030000000670000260000000000000026000000000000000000000000000000001202d2202020202020202020202020202020202020202020202020202010000010000000000000d22020202020202020202020202020d200000000001210a2a2a270a2a2a2a270a2a2a2a270a2a2a2a270a2a2a2a2700000001000
-- 110:10202020202020202020202020203d2020202020202020202020202020100000102020202020293949202020202029394920202020d200000000003200102020202020202089258920202e2020892589202020202020201000000010d2d2d210c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000030000000670066260000007500000026000000000000000000000000000000003222d22020202020202020202020206d2020202020202020202020202010000010000000000000d22020201e204e20204e201e202020d200000000003222e0e0e070e0e0e0e070e0e0e0e070e0e0e0e070e0e0e0e0700000001000
-- 111:10202020202020202020202020202020202020202020202020202020201000001020202020202a3a4a20202020202a3a4a20202020d20000000000120010202020202020208a208a25252525258a208a20202020202020100000001020202010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000030000000670000260000000000000026000000000000000000000000000000001202d2202020202020202020202020202020202020202020202020202010000010000000000000d22020202020202020202020202020d2000000000012108282827082828282708282828270828282827082828282700000001000
-- 112:102020202020202020202020202020202020202020202020202020202010000088202020202020201e20202020204b5b2020202020d200000000101000102020202020202020202020202020202020202020202020200a100000001020202088c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000030000000670000260000000000000026000067676767676767676767676767676710102020202020202020202020202020202020202020202020202020100000100000001010101020205868788e20208e586878202010101010101010101010101010101010101010101010101010101010101010101131111000
-- 113:102020202020202020202020202020202020202020202020202020202010000089202020202020202020202020204c5c2020200a1010101076868800001070707010101010101010101010101010101010101010101010100000001020202089c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c210000000300000006700002600000000000000260000670000000000000000000000000000001020202020202020202020202020202020202020202020202020201000001000000010000010202059697920202020596979202010000000000000000000000000000000000000000000000000000000000000101010101000
-- 114:10202020202020202020202020202020202020202020202020202020201000008a2020202020202020202020202020202020202020d200007787890000100000000000000000000000000000000000000000000000001210000010102020208aa2a2a2c2a2a2a2a2c2a2a2a2c2a2a2a2c2100000003000000067000717252525252525250717006700880088008800008800000088000010202020d4e4f42020202020d4e4f42020202020d4e4f4202020201000001000000010000010202020202020202020202020202010008800000000000000000000000000000000000000000000000000000000000000000000
-- 115:1020202020202020202020202020202020202020202020202020202020100000102020202020202020202020202020202020202020d2000000008a000010000000000000000000000000000000000000000000000000321000001002202020e0e0e0e0a1e0e0e0e0a1e0e0e0a1202020b2700000003000000067000818000000000000000818006700890089008900008900000089000010202020d5e5f52020202020d5e5f52020202020d5e5f5202020201000001000000010000010101010101010101010101010101010008900000000000000000000000000000000000000000000000000000000880000008800
-- 116:10202020202020202020202088d2d2d288202020202020202020202020100000882020202020202020202020202020202020202020d20000000010000010000000000000000000000000000000000000000000000000121000001022202020e0e0e0e0a1e0e0e0e0a1e0e0e0a1202420b27000000030000000670000000000000000000000000067008a008a008a00008a0000008a00001020202020262020202020202026202020202020202620202020201000001000000010000000000000000000000000000000000000008a00000000000000000000000000000000000000000000000000000000890000008900
-- 117:1020202020202020202020208900000089202020202020202020202020100000890313101010101010101010101010101010100313100000001010000010101010101010101010113111101010101010101010101010101000001002202020e0e0e0e0a1e0e0e0e0a1e0e0e0a1202020b2700000003000000067676767676767676767676767676700000000000000000000000000000010101010108b101010101010108b101010101010108b10101010d210000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a0000008a00
-- 118:1010101010101010101010108a1131118a1010101010101010101010101000008a0414000000000000000000000000000000000414101131111000000000000000000000000010101010100000000000000000000000000000001010101010101010101010101010101010101010101010103030303000000000000000000000000000000000000000000000000000000000000000000000000000008c000000000000008c000000000000008c00000010311000001011311110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 119:000000000000000000000000880000008800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000362525252525251010101010252525252525360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101010101010101010000000000000000000000000000000000000000000000000000010211000001021100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100121011000
-- 120:000000000000000000000000891010108900000000000000000000000000000000000000000000000000071710101010100717000000000000000000000000000000260000005868781001210110586878008800260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000012001010101010101010101010101010101010101010101010101010001010101000101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102020201000
-- 121:0000000010101010101010108a1010108a10101010101010100000000000000000000000101010101000081810012101100818000000000000000000000000000000260088007a697910d2d2d21059696a00890026000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000003200102020202020202020202020202020202020202020202020201000003222000010a119071719071719071719071719071719071719a1000000001202202020202020d220202070e0e0e0e0e070202020d22020202020201000
-- 122:0000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2100000000000000000000000102020201010101010202020101010101010100000000000000000000000260089001020202020202020202010008a0026000000000000000000000000000000001010101010101010101010000000000000000000000000000000000000000000000000000000001000000000000000001200102020202020202020202020202020202020202020202020201010101010101010a100081800081800081800081800081800081800a1000000003222202020202020d220202070e0e0e0e0e070202020d22020202020201000
-- 123:0000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c210000000000000000000000010202020701e1e1e7020242020202020206310000000000000000000000026008a001020202020202020202010000000260000000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000000000000000000010828282101010101010001020202020202020208b2020202020204b5b2020202020202020201000000010c2c28282828282828282828282828282828282828292000000001202202020202020d220202070e0e0e0e0e070202020d22020202020201000
-- 124:0000880010a2c2c2c2a2a2a2a2a2a2a2a2a2a2a2c2c2c2a21000880000000000000000001020202010101010102020201010101010e0100000000000000000000000260000001020202020202020202010101000260000000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000000088008800880010c2c2c2100000000000001020202020202020208c2020434343204c5c2020202020202020201000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2920000001010101010101010101020202010101010101010202020101010101010101000
-- 125:00008900108bb2c2922020202020202020202020b2c2928b1000890000000000000000001010701010000000101010101000000010e01000000000000000000000002600000010202020205e20202020d212100026000000000000000000000000000000101000000000000d0d0d00100000000000000000000000000000000000000000000089008900890010c2c2c2100007170000101020202020202020202020b0a0a0a0c020202020202020202020201000000010c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c292000000100000000000000313102020208b00000000008b202020100717000000000000
-- 126:00008a00108cb2c2922064252520202025258420b2c2928c10008a00000000000000000000100d1000283848002838480028384810e01000000000000000000000d4e4f400001020208e2020208e2020d23210d4e4f40000000000000000000000000000100200000000000d0d0d0010000000000000000000000000000000000000000000008a008a008a0010c2c2c2100008180000022020202020202020202073a1e0e0e0a153202020202020202020201000000010a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a291000000100000000000000414092020208c58686868788c2020200a0818000000000000
-- 127:00000000108bb2c2922020202037273720202020b2c2928b10000000000000000000000000100d1000293949002939490029394910d21000000000000000000000d5e5f5000010202020202020202020d21210d5e5f5000000000000000000000000000010220000002f000d0d0d00100000000000000000000000000000000000000000000000000000000010c2c2c2100000000000222020202020202020202073a1e00ee0a15320202020202020202020100000001000000000000000000000000000000000000000000000000a100000000000000000001020202010595a69696a10202020100000000000000000
-- 128:00000000108cb2c2922074252537373725259420b2c2928c10000000000000000000000000100d10002a3a4a002a3a4a002a3a4a10e010000000000000000000000000000000102020202020202020201010100000000000000000000000000000000000100200000000000d0d0d00100000000000000000000000000000000000000000101010101010101010a2a2a2100000000000022020202020202020202073a1e0e0e0a1532020202020202020202010000000100000000000000000000000000000000000000000000000000a1000000000000000001020202020202020202020202020100000000000000000
-- 129:000088001020b2c2922020202020202020202020b2c292201000880000000000000000001010701010000000101010101000000010e010000000000000000000000000008800102020202020202020201000000000000000000000000000000000000000101000000000000d0d0d00100000000000000000000000000000000000000000100000000000000000000000100000000000101020202020202020202020b1a0a0a0c120202020202020202020201000000010000000000000000000000000000000000000000000000000000a10000000000000001020202020202020202020202020100000000000000000
-- 130:000089001020b2c2922020202020202020202020b2c292201000890000000000000000001020202010101010102020201010101010e0100000000000000000000000000089001020202020202020202010008800000000000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000100000000000000000000000100000000000001020202020202020204b5b20636363206b7b2020202020202020201000000010000000808282828282828282828282828282828282828282821000000000000088001020202020202020202020202020100088000000000000
-- 131:00008a001020b2c2c28290202020202020208082c2c2922010008a0000000000000000001020202070b2c2927020202020202020207310000000000000000000000000008a001020202020202020202010008900000000000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000100000000000000000000000100000000000001020202020202020204c5c20202020206c7c2020202020202020201000000010000000b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c210000000000000890010200e202020200e202020200e20100089000000000000
-- 132:000000001020b2c2c2c2c28210d2d2d21082c2c2c2c292201000000000000000000000001020202010101010102020201010101010101000000000000000000000000000000010101010d2d2d210101010008a00000000000000000000000000000000000010101010101010101010100000000000000000000000000000000000000000100000001010101010101010100000000000001020202020202020202020202020202020202020202020202020201000000010000000b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2100000000000008a00102020202020202020202020202010008a000000000000
-- 133:000000001010101010101010101131111010101010101010100000000000000000000000101010101000071710113111100717000000000000000000000000000000000000000000001011311110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000000000000001020202020202020202020202020202020202020202020202020201000000010000000b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c21000000000000000001020202020202020202020202020100000000000000000
-- 134:000000000000000000000000101010101000000000000000000000000000000000000000000000000000081810101010100818000000000000000000000000000000000000000000001010101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000000000000001010101010101010101010102020201010101010101010101010101000000010000000105868686868686868686868686868686878101010101000000000000000001010101010101010101010101010100000000000000000
-- 135:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101131111000000000000000000000000000000000000000000000000000101131111000000000000000000000000000000010113111107a69695a5a5a696969695a5a69695a6979000000000000000000000000000000000000000000000000000000000000000000000000
-- </MAP1>
-- <WAVES>
-- 000:00000000ffffffff00000000ffffffff
-- 001:0123456789abcdeffedcba9876543210
-- 002:0123456789abcdef0123456789abcdef
-- 004:00000bbba8654333458bca721136bac5
-- 005:4678abbcccbb00000000033335bbbcbb
-- 006:fffcccdddeeeaaabbbccc888999aaa70
-- 007:11115111474025651213032111011600
-- </WAVES>
-- <SFX>
-- 000:60006000600060006000600060007000700070007000700080008000800090009000900090009000a000a000b000b000c000c000d000e000f000f000004000000000
-- 001:92089208820882087208720862086208520852085208520862086208620872f782f792f792f7a2f7a2f7b2f7c2f7c2f7d2f7d2f7e2f7e2f7f2f7f2f7327000000000
-- 002:00301050107010802090209030903092309240d15091509060bf6090738f728e827e827d927da2acb25cb24cc24dc23dd232d253e230e220f220f270307000000000
-- 003:ff00f000f000f000e000e000e000e000e000e000e010e010e020e020e020e030d030d040c040c050b060a06090707080609050a040b030c000d0f0e0307000000000
-- 004:7000600050004000400030003000300020002000200030003000400040f040f050f050f060f060f070f070f080f0a0f0b0f0d0f0e0f0e000f000f000320000000000
-- 005:82f772f762f752f742f732f722f722f722f722f722f732f732f742f742085208520862087208820892089208a208b208c208d208d208e208f208f208217000000000
-- 006:03f703f603e603e603d613d623d623c633c633c643b643b553a553a55395639463947384738383739372a361b361c35fd34ee34de33bf32af318f308b07000000000
-- 007:ec07e0d0e0d0e0d0e0c0d0c0d0b0d0b0d0b0d0a0d0a0d090d090d080d080d070d060d050d050d040d030d030d020e020e010e010e000f000f000f000300000000000
-- 008:0300130013002300230023003300430043004300530053006300730073f713f733f743f763f783f793f7b3f7c3f7d3f7d3f7e3f7e3f7e3f7f3f7f3f7320000000000
-- 009:07ea17ea27da37da47da57ca67ca77b987b987a997a99799a799a79907f927f837f747f757f777f787f7a7f7b7f7c7f7c7f7d7f7e7f7e7f7f7f7f7f7b30000000000
-- 010:04e704e604e604d604d604d614c514c514c514c414b414b324a324a2349234914480448f547e646e746d845c944ca44bb43bc42ad42ae41ae41af40a480000000000
-- 011:050015001500150015001500250025002500250035f635e635e645d645d645d655d655c665b665b675a675a685969586a576b566c556d536e516f506b00000000000
-- 012:00a110b120b120c230c230d330e340f440645065507c607d607d608e708e709e809f909f90afa020a029b039b03ac03ac03bd04bd04be04ce05af069370000000000
-- 013:0000000000110011002100c1103210b210431043206320732084309430a440a550b560c580c6a0d6c0d6e026f0d6f0d6f0e6f0d6f0d7f0d7f0d7f007300000000000
-- 014:00081008100810082008200820083008300840084008500860087008700880f790f7a0f7a0f7b0f7c0f7d0f7e0f7f0f7f0f7f0f7f0f7f0f7f0f7f0f7320000000000
-- 015:020002000200020002001200120012002200220022003200320042004200520752076207720772077207820792079207a207b207c207d207f207f207b25000000000
-- 016:037f237f437f437f637f637f734d834d834d834d934d934d934da34da34da34da34da34db34db34db347b357b357b367c367c377c387d3b7d3d7f3e7b37000000000
-- 017:06f703f706e703e706e713e716e713d716d723d726c623c636b633b546a54394569463836673736286619351a640a33fb62ec31cc60bd30ae608f308b15000f00000
-- 018:0000000010001000001110110011101120110011201130114021302130214021402150316031603170427042804280529062a083b0a3c0c4d0e5f0f6812000000000
-- 019:0401040104010412141214121423142324232412241234123423442344234434443454345423542354236434743484349445a445b445f400f400f400a04000000000
-- 020:00e713e710e713e720e723e720e723e730e633d630d543d540c543c440b453b450a36392609263917080837f806e935ea04da33cb02bd329e019f009315000000000
-- 021:b500850d650c550c450b350b350a350a350a350a350a450a450a550a650a650a750a750a750a850a850a950a95099509a509b509b508c508d508f508300000000000
-- 022:50d540e630f730c420d520e620b320c420d520a220b320c4209130a240b34080409150a2507f60807091706e807f9080a05dc06ed07fe04cf05df06eb00000000000
-- 023:02a200a202a2800082008000820070007200800082008000820080008200800092009000a200a000a200b000b200c000c200d000d200e000e200f000b00000000000
-- 024:00f713d630b45393608283619050a34fb04eb33dc03dc32cc02cd32bd0fbd3f7d0f7e3f7e0f7e3f7f0f7f3f7f0f7f3f7f0f7f3f7f0f7f3f7f0f7f3f7a00000000000
-- 025:040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400240000000000
-- 026:130023004300630083009300b300b300c300c300d300d300d300e300e300f300f300f300f300f300f300f300f300f300f300f300f300f300f300f300300000000000
-- 027:03005300630083009300a300a300b300b300b300c300c300d300d300d300e300e300f300f300f300f300f300f300f300f300f300f300f300f300f300300000000000
-- 028:010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100300000000000
-- 029:040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400300000000000
-- 030:000020003000500070009000a000a000b000c000c000c000d000d000d000d000e000e000e000e000e000e000e000e000e000f000f000f000f000f000307000000000
-- 031:020002000100010002000200010001000200020001000100020002000100010002000200010001000200020001000100020002000100010002000200203008000000
-- 032:06000600060002000200020006000600060004000400040004000400040004000600060006000600060006000600060006000600060006000600060030100c000000
-- 062:927500000000000000000000000000000000000000001000100010002000200030004000400050007000700080009000a000a000b000c000c0000000b00000f70000
-- 063:64005400440034003400240024002400240024002400340034003400340044004400540054006400740074008400840094009400a400b400d400f400300000000000
-- </SFX>
-- <PATTERNS>
-- 000:400095000000000000000000000000000000000000000000000000000000000000000000500095000000000000000000000000000000000000000000000000000000000000b00095b10095b20095a30095a400959500959600958700958800957900957a00956a00956b00955c00955d00954e00954f0095000000000000000000000000000000000000000000000000b000bd000000b000bd000000b000bd000000b000bd000000000000000000000000000000000000000000000000000000
-- 001:6b0004000000890004000000b70004000000d500040000006b0004000000890004000000b70004000000d500040000006b0004000000890004000000b70004000000d500040000006b0004000000890004000000b70004000000d500040000004b0004000000690004000000970004000000b500040000004b0004000000690004000000970004000000b500040000004b0004000000690004000000970004000000b500040000004b0004000000690004000000970004000000b50004000000
-- 003:4400b10000000000000000004400b70000000000000000004400b10000000000000000004400b70000004400b70000004400b10000000000000000000000000000004400b70000001000000000004400b10000004400b70000004400b70000000000000000004d00b70000004400b30000000000000000004400b30000004400b30000004400b30000004400b30000004400b30000000000000000004700b71000004000b71000004700b71000004000b71000004700b71000004000b7000000
-- 004:6b0004000000000000000000db0006000000bb0006000000db0006000000000000000000db0004000000bb0004000000db0004000000000000000000db0006000000bb0006000000db0006000000000000000000db0004000000bb00040000008b0004000000000000000000db0006000000bb0006000000db0006000000000000000000db0004000000bb00040000008b00040000000000000000008b00040000000000000000008b00040000000000000000009b00040000006b0004000000
-- 005:000000000000600002100000000000000000000000000000000000000000600002100000000000000000000000000000000000000000600002100000000000000000000000000000000000000000600002100000000000000000000000000000000000000000600002100000000000000000000000000000000000000000600002100000000000000000000000000000000000000000600002100000000000000000600002100000000000000000600002100000000000000000000000000000
-- 006:4400d30000006900d30000008000d3000000b900d3000000e400d3000000b900d30000009000d30000006900d30000004400d30000006900d30000009000d3000000b900d3000000e400d3000000b900d30000009000d30000006900d30000004400d30000006900d30000009000d3000000b900d3000000e400d3000000b600d30000009000d30000006900d30000004400d30000006900d30000009000d3000000b900d3000000e400d3000000b900d30000009000d30000006900d3000000
-- 007:4000b30000000000004600b14000bb0000001000000000004000b30000000000004600b14000bb0000001000000000004000b30000000000004600b14000bb0000001000000000004000b30000000000004600b14000bb0000000000004000bb4000b30000000000004600b14000bb0000001000000000004000b30000000000004600b14000bb0000001000000000004000b30000000000004600b14000bb0000001000000000004000b30000000000004600b14000bb0000001000004000bb
-- 008:0000000000000000000000008d08e30000005d08e30000008d08e30000000000001000008d08e30000005d08e3000000fd08e30000000000001000008d08e30000005d08e30000008d08e30000000000001000008d08e30000005d08e30000009d08e30000000000001000008d08e30000005d08e30000008d08e30000000000001000008d08e30000005d08e3000000bd08e3000000000000000000dd08e3000000000000000000bd08e30000000000000000009d08e3000000000000000000
-- 009:4000c50000000000000000004100c50000000000000000004200c50000000000000000004300c50000000000000000004400c50000000000000000004500c50000000000000000004600c50000000000000000004700c50000000000000000004700c50000000000000000004900c50000000000000000004a00c50000000000000000004b00c50000000000000000004c00c54b00c54a00c54900c54800c54700c54600c54500c54400c54300c54200c54100c54000c54000c54000c54000c5
-- 010:47000a00000000000000000000000000000000000000000067000a00000000000000000000000000000000000000000087000a00000000000000000000000000000000000000000097000a00000000000000000000000000000000000000000067000a00000000000000000000000000000000000000000087000a00000000000000000000000000000000000000000097000a000000000000000000000000000000000000000000b7000a000000000000000000000000000000000000000000
-- 011:4c00c3000000000000000000000000000000000000000000bc00c3000000000000000000000000000000000000000000bc00c30000000000000000000000000000000000000000009c00c3000000000000000000bc00c30000000000000000009c00c30000000000000000000000000000000000000000007c00c30000000000000000006c00c30000000000000000007c00c30000000000000000000000000000000000000000006c00c3000000000000000000000000000000000000000000
-- 012:4708e9000000b708e70000008708e70000004708e70000004908e9000000b908e70000008908e70000004908e70000004b08e9000000bb08e70000008b08e70000004b08e70000004908e9000000b908e70000008908e70000004908e70000006708e9000000d708e70000009708e70000006708e70000006908e9000000d908e70000009908e70000006908e70000006b08e9000000db08e70000009b08e70000006b08e70000006908e9000000d908e70000009908e70000006908e7000000
-- 013:4000040000004100040000004200040000004300040000004400040000004500040000004600040000004700040000004800040000004900040000004a00040000004b00040000004c00040000004d00040000004e00040000004f00040000006000040000006100040000006200040000006300040000006400040000006500040000006600040000006700040000006800040000006900040000006a00040000006b00040000006c00040000006d00040000006e00040000006f0004000000
-- 014:b70002000000b70002000000b70002000000b70002000000b70002000000b70002000000b70002000000b70002000000b70002000000b70002000000b70002000000b70002000000b70002000000b70002000000b70002000000b70002000000d70002000000d70002000000d70002000000d70002000000d70002000000d70002000000d70002000000d70002000000d70002000000d70002000000d70002000000d70002000000d70002000000d70002000000d70002000000d70002000000
-- 015:400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000400002000000000000000000
-- 016:400006000000700006000000b00006000000d00006000000e00006000000d00006000000b00006000000700006000000400006000000700006000000b00006000000d00006000000e00006000000d00006000000700006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600006000000000000000000600006000000000000000000000000000000000000000000
-- 017:500095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f00093000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00093000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00093000000000000000000d00093000000000000000000e00093000000000000000000f00093000000000000000000
-- 018:0000000000000000000000008000f90000005000f90000008000f90000001000008000f90000000000005000f9000000f000f70000000000000000008000f90000005000f90000008000f90000001000008000f90000000000005000f9000000a000f90000000000000000008000f90000005000f90000008000f90000001000008000f90000000000005000f9000000c000f9000000000000000000a000f90000000000000000008000f90000000000000000007000f9000000000000000000
-- 019:5000f90000000000000000008000f90000005000f90000008000f90000001000008000f90000000000005000f9000000f000f70000000000000000008000f90000005000f90000008000f90000001000008000f90000000000005000f9000000d000f70000000000000000008000f90000005000f90000008000f90000001000008000f90000000000005000f9000000c000f7000000000000000000a000f70000000000000000008000f70000000000000000007000f7000000000000000000
-- 020:5000e70000005000e7000000800064000000f000e50000005000e7000000c000e5000000800060000000c000e5000000f000e50000008000644000e70000008000645000e7000000000000000000f000e5000000c000e50000008000e5000000d000e5000000d000e5000000800064000000c000e5000000d000e5000000a000e50000008000600000008000e5000000c000e50000008000e5000000a000e50000008000e5000000c000e50000008000e5000000a000e50000008000e5000000
-- 021:5000f9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f000f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 022:500095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00095000000000000000000000000000000000000000000800095000000000000000000000000000000000000000000c00095000000000000000000000000000000000000000000a00095000000000000000000800095000000000000000000
-- 023:5000e70000005000e7000000800064000000f000e50000005000e7000000c000e5000000800060000000c000e5000000f000e50000008000644000e70000008000645000e7000000000000000000f000e5000000c000e50000008000e50000005000e70000005000e7000000f000e50000004000e70000005000e7000000f000e5000000c000e50000005000e70000008000e70000000000000000007000e70000000000000000005000e70000000000000000004000e7000000000000000000
-- 024:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800064000000000000000000000000000000000000000000000000000000800064000000000000000000800060000000000000000000800064000000000000000000800060000000800064000000000000000000000000000000000000000000800065000000000000000000000000000000000000000000
-- 025:00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080006400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080006400000000000000000000000000000000000000000080006a000000000000000000000000000000000000000000
-- 026:500095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00095000000000000000000c00095000000000000000000d00095000000000000000000a00095000000000000000000500097000000000000000000000000000000000000000000400097000000000000000000000000000000000000000000
-- 027:5000f90000000000000000000000000000000000000000007000f90000000000000000000000000000000000000000008000f9000000000000000000000000000000000000000000c000f9000000000000000000000000000000000000000000f000f9000000000000000000000000000000000000000000d000f90000000000000000000000000000000000000000005000fb0000000000000000000000000000000000000000004000fb000000000000000000000000000000000000000000
-- 028:50080cf0080ac0080af0080a50080cf0080ac0080af0080a50080cf0080ac0080af0080a50080c00000040080c000000f0080ac0080aa0080ad0080af0080ac0080aa0080ad0080af0080ac0080aa0080ad0080af0080a000000e0080a000000d0080ac0080aa0080ac0080ad0080ac0080aa0080ac0080ad0080ac0080aa0080ac0080ad0080a000000d0080a000000c0080a000000000000000000d0080a000000000000000000e0080a000000000000000000f0080a000000000000000000
-- 029:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00031000000c000e5000000d00031000000d000e5000000e00031000000e000e5000000f00031000000f000e5000000
-- 030:50080cf0080ac0080af0080a50080cf0080ac0080af0080a50080cf0080ac0080af0080a50080c00000040080c000000f0080ac0080aa0080ad0080af0080ac0080aa0080ad0080af0080ac0080aa0080ad0080af0080a000000e0080a000000d0080ac0080aa0080ac0080ad0080ac0080aa0080ac0080ad0080ac0080aa0080ac0080ad0080a000000d0080a000000c0080a000000000000000000a0080a00000000000000000080080a00000000000000000070080a000000000000000000
-- 031:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00031000000c000e5000000a00031000000a000e50000008000310000008000e50000007000310000007000e5000000
-- 032:50080cf0080ac0080af0080a50080cf0080ac0080af0080a50080cf0080ac0080af0080a50080c00000040080c000000f0080ac0080aa0080ad0080af0080ac0080aa0080ad0080af0080ac0080aa0080ad0080af0080a000000e0080a000000d0080ac0080aa0080ac0080ad0080ac0080aa0080ac0080ad0080ac0080aa0080ac0080ad0080a000000d0080a000000c0080a00000000000000000000000000000000000000000040080c000000000000000000000000000000000000000000
-- 033:500095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00095000000000000000000000000000000000000000000a00095000000000000000000800095000000000000000000
-- 034:500095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f00093000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00093000000000000000000000000000000000000000000f00093000000000000000000000000000000000000000000c00093000000000000000000000000000000000000000000000000000000000000000000400095000000000000000000
-- 035:500095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f00093000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00093000000000000000000000000000000000000000000f00093000000000000000000000000000000000000000000c00093000000000000000000000000000000000000000000000000000000500095000000800095000000700095000000
-- 036:5000cd000000100000f000cb000000100000c000cb0000005000cd000000100000f000cb000000100000c000cb0000008000cd0000001000007000cd0000001000005000cd0000008000cd0000001000000000005000cd000000100000000000a000cd8000cd5000cd8000cda000cd8000cd5000cd8000cdb000cd8000cd5000cd8000cdb000cd8000cd5000cd8000cdc000cda000cd8000cd7000cd5000cdf000cb5000cdf000cba000cd0000000000000000008000cd000000000000000000
-- 037:5000cd000000100000f000cb000000100000c000cb0000005000cd000000100000f000cb000000100000c000cb0000008000cd0000001000007000cd0000001000005000cd0000008000cd0000001000000000005000cd000000100000000000a000cd8000cd5000cd8000cda000cd8000cd5000cd8000cdb000cd8000cd5000cd8000cdb000cd8000cd5000cd8000cdc000cd000000000000000000000000000000000000000000000000000000a000cd0000008000cd0000004000cd000000
-- 038:000000000000850064000000100000000000850064000000000000000000850068850062850068850062850068450060000000000000850064000000100000000000850064000000000000000000000000000000000000000000000000000000000000000000850064000000100000000000850064000000000000000000a50066000000850064000000750062000000850068000000850064000000850060000000850064000000850068000000850064000000850060000000000000000000
-- 039:000000000000850064000000100000000000850064000000000000000000850068850062850068850062850068450060000000000000850064000000100000000000850064000000000000000000000000000000000000000000000000000000000000000000850064000000100000000000850064000000000000000000a50066000000850064000000750062000000850068000000000000000000000000000000000000000000850068000000000000000000000000000000000000000000
-- 040:50080c000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- </PATTERNS>
-- <TRACKS>
-- 000:1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d0020
-- 001:2004002004002c0400200400000000000000000000000000000000000000000000000000000000000000000000000000000010
-- 002:700800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-- 003:982a82982a82000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031
-- 004:d83bc3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c30010
-- 005:f04010f04010f44f00000000000000000000000000000000000000000000000000000000000000000000000000000000000010
-- 006:2d4000215000795596795856795856b578562d4d97215f18215d972d412062a36a62a320520220520420000000000000000000
-- </TRACKS>
-- <PALETTE>
-- 000:00000044283430346d4e4a4e854c30346524d04648717171597dce00ff000000ffff0000fa00ff00fafffffa00ffffff
-- </PALETTE>
-- <COVER>
-- 000:7eb000007494648393160f00880077000012ffb0e45445353414055423e2033010000000129f40402000ff00c2000000000f00880078000000ffffffff0000ffaf0000ff00af00ff0000ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ff001080c1840b0a1c388031a2c58c0b1a1c000132a34681152e4cb88133a6cd8c1b3a7cf850b265cf822d228c398235aac59c2506948842f56bc9943b6ad46952f46ecb9c3b7afcf9123001489e198ab41a0439a2d5aa35463d19c43aa4d9ab019ab4d9349aa6dda35da200fad1db285ea46bc6d41b741aeec5b95dcabd7bb21da059947d92a58b873f2749bf2bf6fdfad65fa0e1c553bafd3c673031e5cc810f0c9b67372d57c75b1b5e1cc7526dd8c49b3f5efce633fcdfa3212b660c7714bae2b777da352da651fa6cbea5debead61173156bf83d6eebd7bbdae64a3cd7fe60e6b1ae763d5a52b3f8c0db9747892716b4fbe4dd0b57dcfc1b35feecd7af8ffd5c88bcb9f3f8e5c6a74c347dbbf7fce793cf9f4f7b3378f6fde3dfdf6e1438ffe2edd700a7720e862ad081e596d9908af538b9118e0a46ef148f06286122881ed76cd5850e67b166811608122583e116a062682e98a2e96922b85e1a6b2667df96843a78536b823e98aa5179f5f8c3ef88cdf69c90944e1734a195421714229649c7329000564925e494565965e5985669a5a4930800d5e690668926a59d3e276fd89866a9a6e59f5ea9e6eb9c0a3922db9476d985679d6ad9a7669f79c951de90860a28e0a056f97994677a7948e2ac863a20848e7296956e9e865a69ab9c99c98a52a49e5ae9e7ac72b8b3a350a69a6aaa956af924d9aca6ba956aa6990ff8eaeca4b61a0b236d75daab2ba686caf2dea0c28adb6368860b6c65a09e1adcd1bcc23a99a2b2363b2da0aa3e48f4e4b8dad97be65b31249356b0eeb9bde36fa5f43c6f65258bae6a917e342399bfeabb9eeab4f2897ee7852ec4ddacb376dbef2697fe68f3539d46b75adfb807599c605ded0c5e2fb0952c21749fc24c9faeb2b91c60e3a2560067a7c4171ad1b8c1237c5238c423ac62bac023bc427ac32b9cf23c93275b705a66e66ca17e84d1d9cc1966d10ddc50d30a0dcd11df371da472de331d3e656057ecdb524bf68489ec6d09ac866eb55784a3f95f53c834e36a6e5c85f055639bbbd3d833f4d6fec71e7575f9da096d3623810f2804dbda6b8ff727fa966f9d67b89877cbf058d81f4d733e8d330e477dd75ff7e9926187c51637627dcdf8fdc19b1634b7b887b4c7bf68ad6ae8d0eb565e287ad6a72d39b2efa38d0bb5c15fc5a9f6e65b3edad3c78fce73d8e203c8b9a3e761a7631ae6fa0fa4a277378e83d5e9f5b6ca724408045db6450755aab1450804dd34ece6de26b94db74dfbba7ede468eede50d5f6d7643e57d1bb24fdb7f4577e8ea1ed039be033f14d2c6b32e934ca27a94b0ff622b63302103b7551cfd552f62f39d99f0e65ab5f900708491301ce2d3e53206507e7c93dd97e4140a3fd51f6979eb3a56ee28de3288bf0325229293f0125f3004d037796b3010d61782487540ba5ac14e1f9ff6127db712c0f0215200049c48e09fedd0f123db1bd86878cbb3e551928ed26f95ec0255a90aa4488a52ead51bf6c04da440ff63d31d121598234012840c834c4129f265e32390c1da4bdbdb0219a4e5cf2641373f431ccf501587ada940902d547329422710ac3a956096718257a25778c422f151954164218c19ca16c9dea0977390a00402b4463692939034d46cd059c51cc9164b8f5425e04468944c4685c183e38c85b4386bb3d959049a0b3e171319cacb8cd1389da37a5139b51c1b0ef23e898b95622d69b71c5e2f6e8eba8d44be99394a8552949d6ce32a4e898745e50fcc4004794a1f02600184b3732e59156dd8322f497edf2c7a7b67563313effc4c72b3902fe48f1c64982f2a6614ce940dc2a803f776414aafe180b4aa9ad2385035d5a6a0830536a535f3bc4aa848658be4a8460f38a4ad16afc4a35c2d970118b1d5811b686025f7a1420a000a9e00394363c802411a83c0f9e0bc88911550d4d923df76d41e9efbff1057125fc60af35a860d0dc811d8545c981fec211d04a45a1a76427223177d3534ac179ad05baef09d61250b2155cadcbf1aefe4836c089759a4d15315445eaf658b2055ea95d7cdc57a452280e455478e3a2667248965cddf5b3636d4923ce08e34c6291d4a16d05aa51d6c2c9cee570ba6462a23fe9c6dbc29daaad7bf069f2aaf644c575bfa47b5ca73b1b3f4fc643148badccff285d5b6b28da4456bd9517ae3b2b9c31d26634bd1c9a20f66b26cf12b6dca5758fdd53fa2eb18d5e0ab8bd7494797b1797e6757681b4fcab474b985c8d16dc5ad5c8e96b9b744fee7e0a86b5a98e21dbc2d6f65ccb68ddd2af658a885bcaf4e8b2ab0fadcecbb735da1779b1719c265bdb184efe3f46b5b5dd9a0d0c0f41726fe1cd83403759bb9210edf678b962db978f19a14db56573cb1478defc2656caea5716a6e5e612d88607a6c6a8b0b19ddca2796672be81c7fb8011e85bc2665ed4a29177c8145f2909dbd8222f831950b5ea168f926043c25693cb8252be489c25e917f0dd64d5cf22990565e52b3b8a6e568bd2599b46d10b3a2ccb8c533995ff8c34e7b43839cacc7dc00600209b37e91fc000d37f99fce7ef8a66c259c5803660dae8ac7ad78fc401f373a91d309100ed2b285e6b2763f2c7562f6230009ed3b14c1d196fb0c8fe623b035061ab14db132ba668a640efac56ce22d2747793e50ee5aebb0fb846d9c36f7d35f197f9abccfa0ba93d9ef3f7ab8d29e56d9ac7dfd9d5a96d6d8c26112b7adf9e31d2bfdc12655186b45d32f3b7b10d0e6f47e78758de33b34f847d4625ab7dd1cb2e03afdd19e877e91b8042477bb794ce6ffc88834bf6015580343fe087f95ed30f97778efd70fff42cdf6aa2ef83c7d313978b4c12ed0f98b5cff287ec8f0c53ec1fd87f9f2e02f8f04b8fd80fe7f2c924d11bf49b7cb3ea0739bbcb4ef0506fbcb5e037a93f255a83730988a6eb37b9fc7175e2a0a3fc68ea371a71d98e03294b2d93dc4f5ab3db9e13a3ab4d37945fb154df9df25b77d15be5fe42d7cf9e0678af2d7bee572bbabfeda571ea741fd86f2bbadfde429997fc1ec07fab76d24eda6bbbedd0b87737fedffe1d3f935800f48f27bcd94458f4cb25bae63a6c3a841f09f6bf9ddcec6e8cb5ef2f89fccb6e73fc9fecb7ef3f0af0db8e74f4af2db9e932101000b3
-- </COVER>
-- title: TinyDungeon
-- author: vriska
-- desc: a dungeon-crawling, dashing game
-- saveid: TinyDungeon
-- script: lua
local changedTiles = {}
_mget = mget
_mset = mset
_btn = btn
_btnp = btnp
_sfx = sfx
--[[
hello hacker fucker
this is vriska serket
here's the deal.
if you hack this game
i will find you
where ever you are
and 8r8k your legs
and thats a promise
]]
--
--
--
local editMode = 0
function sfx(...)
if game.flags.sound then
return _sfx(...)
else
return false
end
end
function mget(x, y)
return _mget(Camera.x + x, Camera.y + y)
end
function btn(...)
local r = _btn(...)
if r then
game.moved = true
end
return r
end
function btnp(...)
local r = _btnp(...)
if r then
game.moved = true
end
return r
end
function mset(x, y, id)
if editMode == 0 then
changedTiles[x .. "," .. y] = {
x = x,
y = y,
id = mget(x, y)
}
end
return _mset(Camera.x + x, Camera.y + y, id)
end
t = 0
lt = 0
dt = 0
dts = {}
avg_dt = 0
game = {
qs = 0,
timer = 0,
width = 240,
height = 138,
roomWidth = 30,
roomHeight = 17,
collapse = 0,
shutter = 0,
buttons = 0,
broken = false,
drawMap = false,
orbs = {},
flagOrder = {
{"has_g", "has_b", "has_m", "has_r"},
{"sound", "music", "loaded", "opened_final_zone"}
},
flags = {
has_r = false,
has_b = false,
has_g = false,
has_m = false,
sound = true,
music = true,
loaded = false,
opened_final_zone = false
},
save = function(self)
for index, set in ipairs(self.flagOrder) do
local ss = ""
for i, flag in pairs(set) do
if self.flags[flag] then
ss = ss .. "1"
else
ss = ss .. "0"
end
end
pmem(index, ss)
end
end,
load = function(self)
for index, set in ipairs(self.flagOrder) do
local sd = tostring(pmem(index))
for i, flag in ipairs(set) do
if sd:sub(i, i) == "1" then
trace(string.format("Flag %i:%i (%s): true", index, i, flag))
self.flags[flag] = true
else
trace(string.format("Flag %i:%i (%s): false", index, i, flag))
self.flags[flag] = false
end
end
end
if not self.flags.loaded then
self.flags = {
has_r = false,
has_b = false,
has_g = false,
has_m = false,
sound = true,
music = true,
loaded = true,
opened_final_zone = false
}
self:save()
self:load()
end
end,
start = {
x = 1,
y = 1
},
playerSpawn = {
x = 0,
y = 0,
},
current = {
x = 1,
y = 1,
},
checkPoint = {
},
score = 1000,
speed = 1,
prompts = {},
scenes = {},
activeScene = "menu",
queuedScene = false,
setScene = function(self, _scene)
self.queuedScene = _scene
if self.scenes[_scene].resetOnLoad then
self.scenes[_scene] = scene(self.scenes[_scene].init, true)
end
end,
playing = 1,
queuePlay = 1,
play = function(self, id)
if id ~= self.playing then
trace(string.format("Playing track %i", id))
self:stop()
self.queuePlay = id
end
end,
stop = function(self)
music()
self.playing = false
end,
getEntities = function(self, callback)
if callback == nil then
callback = function(entity) return true end
end
local list = {}
for index, entity in pairs(self.scenes[self.activeScene].entities) do
if callback(entity) then
table.insert(list, entity)
end
end
return list
end,
add = function(self, ...)
return self.scenes[self.activeScene]:add(...)
end,
get = function(self, ...)
return self.scenes[self.activeScene]:get(...)
end,
remove = function(self, ...)
return self.scenes[self.activeScene]:remove(...)
end,
update = function(self, ...)
return self.scenes[self.activeScene]:update(...)
end,
draw = function(self, ...)
return self.scenes[self.activeScene]:draw(...)
end,
cleanup = function(self)
return self.scenes[self.activeScene]:cleanup()
end
}
seenTiles = {}
Button = {
UP = 0,
DOWN = 1,
LEFT = 2,
RIGHT = 3,
A = 4,
B = 5,
X = 6,
Y = 7
}
Camera = {
x = 0,
y = 0,
w = 30,
h = 17,
sx = 0,
sy = 0,
transparent = 0,
scale = 1,
visible = false,
bg = 0,
offset = {
x = 0,
y = 0
}
}
GlitchTiles = {}
function cam()
return Camera.x, Camera.y,
Camera.w, Camera.h,
Camera.sx, Camera.sy,
Camera.transparent,
Camera.scale, function(t, x, y)
local player = game:get("player")
if t == 190 then
if game.flags.controller then
return 188
else
return 190
end
end
if t == 191 then
if game.flags.controller then
return 189
else
return 191
end
end
if t == 206 then
if game.flags.controller then
return 204
else
return 206
end
end
if t == 207 then
if game.flags.controller then
return 205
else
return 207
end
end
if t == 115 then
return 0
end
if t == 67 then
if game.broken then
if GlitchTiles[x .. ',' .. y] then
return GlitchTiles[x .. ',' .. y]
else
GlitchTiles[x .. ',' .. y] = math.random(1, 256)
return GlitchTiles[x .. ',' .. y]
end
else
return 1
end
end
if t == 68 then
return game.flags.has_g and 69 or 68
end
if t == 84 then
return game.flags.has_b and 85 or 84
end
if t == 100 then
return game.flags.has_m and 101 or 100
end
if t == 116 then
return game.flags.has_r and 117 or 116
end
if t == 70 then
return not game.flags.has_g and 70 or 86
end
if t == 71 then
return not game.flags.has_b and 71 or 87
end
if t == 72 then
return not game.flags.has_m and 72 or 88
end
if t == 73 then
return not game.flags.has_r and 73 or 89
end
if game.collapse > 0 then
if math.random(1, math.max(1, math.floor(100 - game.collapse) * 100)) == 1 then
return math.random(1, 512)
end
end
if t == 45 then
if game.shutter > 0 then
if 0 == game.lastShutter then
local particleArea = mtp(x - Camera.x, y - Camera.y)
game:add(particle(particleArea.x, particleArea.y))
end
return 13
else
if game.shutter ~= game.lastShutter then
local particleArea = mtp(x - Camera.x, y - Camera.y)
game:add(particle(particleArea.x, particleArea.y))
end
return 45
end
end
if t == 2 then
return 0
end
if t == 3 then
local playerTile = ptm(player.x, player.y)
if math.dist(playerTile.x, playerTile.y, x - Camera.x, y - Camera.y) <= 2.75 then
return 1
else
return 0
end
end
if t == 16 or t == 18 or t == 20 or t == 22 then
return 15
end
if t == 17 or t == 19 or t == 21 or t == 23 then
return 15, 2, 0
end
if t == 33 or t == 35 or t == 37 or t == 39 then
return 15, 0, 1
end
if t == 32 or t == 34 or t == 36 or t == 38 then
return 15, 0, 3
end
if t == 7 then
if game:get("player").state == PlayerState.DASH
or (btn(Button.A) and game:get("player").state == PlayerState.MOVE)
then
return 7
else
return 6
end
end
if isPit(t) then
local tileloc = mtp(x - Camera.x, y - Camera.y)
if math.random(1, 500) == 1 then
game:add(particle(tileloc.x, tileloc.y, 0, math.random(5, 20), math.random(1, 2) == 1 and {498} or {499}, math.random(1, 10) / 10))
end
return t
end
return t
end
end
function printf(text, x, y, bg, fg, ...)
bg = bg and bg or 1
fg = fg and fg or 15
local dirs = {
{x = 0, y = 1},
{x = 1, y = 0},
{x = -1, y = 0},
{x = 0, y = -1},
}
for index, dir in pairs(dirs) do
print(text, x + dir.x, y + dir.y, bg, ...)
end
return print(text, x, y, fg, ...)
end
function math.dist(x1,y1, x2,y2) return ((x2-x1)^2+(y2-y1)^2)^0.5 end
function math.sign(n) return n>0 and 1 or n<0 and -1 or 0 end
function math.lerp(a,b,t) return (1-t)*a + t*b end
function math.cerp(a,b,t) local f=(1-math.cos(t*math.pi))*.5 return a*(1-f)+b*f end
function math.clamp(val, lower, upper, loop)
if(loop == nil) then
loop = false
end
assert(val and lower and upper, "math.clamp called with not enough arguments.")
if lower > upper then lower, upper = upper, lower end -- swap if boundaries supplied the wrong way
if(loop) then
if(val < lower) then
return upper
elseif(val > upper) then
return lower
else
return val
end
end
return math.max(lower, math.min(upper, val))
end
function math.multiple(n, size) size = size or 10 return math.round(n/size)*size end
function rotate(x, y, angle)
local cs = math.cos(angle)
local sn = math.sin(angle)
return {
x = x * cs - y * sn,
y = x * sn + y * cs
}
end
function math.angle(x1,y1, x2,y2)
return math.atan2(y2-y1, x2-x1)
end
function mtp(x, y, arg)
if arg then
return x * 8, y * 8
else
return {x = x * 8, y = y * 8}
end
end
function ptm(x, y)
return {
x = math.floor(x - (x % 8)) / 8,
y = math.floor(y - (y % 8)) / 8
}
end
function scene(init, resetOnLoad)
return {
queuedToRemove = {},
entityOrder = {},
doneInit = false,
init = init,
resetOnLoad = resetOnLoad,
entities = {},
add = function(self, entity, name)
if entity == nil then
return false
end
if entity.name == nil then
if name == nil then
entity.name = entity.class .. "_" .. math.random(1000) .. time()
else
entity.name = name
end
end
self.entities[entity.name] = entity
table.insert(self.entityOrder, entity.name)
end,
get = function(self, entity)
return self.entities[entity]
end,
remove = function(self, name)
if type(name) == "string" then
table.insert(self.queuedToRemove, name)
else
table.insert(self.queuedToRemove, name.name)
end
end,
_remove = function(self, name)
local entity = nil
if type(name) == "string" then
entity = self.entities[name]
else
for _name, _e in pairs(self.entities) do
if _e == name then
name = _name
entity = _e
end
end
end
if entity.onRemove then
entity:onRemove()
end
self.entities[name] = nil
return entity
end,
update = function(self, dt, speed)
if not self.doneInit then
self:init()
self.doneInit = true
end
for name, entity in pairs(self.entityOrder) do
local entity = self:get(entity)
if entity ~= nil then
entity:input(dt, speed)
entity:update(dt, speed)
entity:animate(dt, speed)
end
end
end,
draw = function(self)
for name, entity in pairs(self.entityOrder) do
local entity = self:get(entity)
if entity ~= nil then
if entity.visible then
entity:draw()
end
end
end
end,
cleanup = function(self)
for index, name in pairs(self.queuedToRemove) do
for index, entity in ipairs(self.entityOrder) do
if entity == name then
self:_remove(name)
table.remove(self.entityOrder, index)
end
end
end
self.queuedToRemove = {}
end
}
end
function entity(options)
local e = {
id = 0,
class = "entity",
x = 0,
y = 0,
shutter = 0,
-- sprite stuff
sprite = 0,
dir = 1,
flip = 0,
rotate = 0,
w = 1,
h = 1,
scale = 1,
transparent = 0,
visible = true,
alwaysVisible = false,
locked = false,
isKeyEntity = false,
-- animation code
animated = true,
frames = {},
frameRate = 0.2,
frameLife = 0,
frameIndex = 1,
age = 0,
-- stats
health = 5,
maxHealth = 5,
direction = 0,
canHitTwice = false,
radius = 4,
-- update code
input = function(self, dt, speed)
end,
update = function(self, dt, speed)
self.age = self.age + dt
end,
animate = function(self, dt, speed)
dt = dt * speed
if self.frameIndex > #self.frames then
self.frameIndex = 1
end
if(self.animated) then
self.frameLife = self.frameLife + dt
end
if(self.frameLife > self.frameRate) then
self.frameIndex = self.frameIndex + 1
self.frameLife = 0
if(self.frameIndex > #self.frames) then
self.frameIndex = 1
end
end
self.sprite = self.frames[self.frameIndex]
end,
draw = function(self, dt)
local visible = false
local player = game:get("player")
visible = true
if self.locked then
offset = Camera.offset
else
offset = {
x = 0, y = 0
}
end
if self.alwaysVisible or visible then
spr(self.sprite, self.x + offset.x, self.y + offset.y, self.transparent, self.scale, self.flip, self.rotate, self.w, self.h)
end
end,
takeHealth = function(self, amount)
self.health = self.health - amount
end,
checkDamage = function(self, dt, speed)
local fresh = false
local player = game:get("player")
if (overlap(self, player) and player.state == PlayerState.DASH) then
if player:hit(self) and not self.canHitTwice then
if not self.damaged then
fresh = true
player.bonus = player.bonus + self.shutter
end
self.damaged = true
end
end
if self.damaged then
if self.onTakeDamage then
self:onTakeDamage(dt, speed, fresh)
end
end
if self.health <= 0 then
game:remove(self)
--score(self.shutter, self.x, self.y)
poof(self.x, self.y)
end
return self.damaged
end,
onRemove = function(self)
end
}
if options ~= nil then
for key, value in pairs(options) do
e[key] = value
end
end
return e
end
--
--
-- GAME DATA
--
--
Color = {
BLACK = 0,
WHITE = 15,
YELLOW = 14,
CYAN = 13,
MAGENTA = 12,
RED = 11,
BLUE = 10,
GREEN = 9
}
CollidingTiles = {
1, 3, 7, 13,
29, 31, 47,
48, 49, 64, 65,
74, 75, 76, 77, 78, 79,
80, 81,
90, 91, 92, 93, 94, 95, 96, 97,
103, 104, 106, 107, 108, 118, 119, 120,
112, 113, 115, 128, 129,
130, 131, 132, 133, 134, 135, 136,
146, 147, 148, 149, 150, 151, 152,
162, 163, 164, 165, 166, 167, 168,
180, 181, 182, 183, 184, 185,
196, 197, 198, 199, 200,
}
ActiveTiles = {
2, 7, 14, 45, 82, 83, 98, 99
}
PitTiles = {
8, 9, 10, 11, 12,
24, 25, 26, 27, 28,
40, 41, 42, 43, 44
}
Direction = {
UP = 114,
DOWN = 115,
LEFT = 130,
RIGHT = 131
}
OrbLocations = {
GREEN = {
spr = 86,
x = 5,
y = 6,
},
BLUE = {
spr = 87,
x = 5,
y = 7,
},
MAGENTA = {
spr = 88,
x = 2,
y = 6,
},
RED = {
spr = 89,
x = 8,
y = 4,
},
}
DirectionAngles = {
UP = math.rad(0),
DOWN = math.rad(180),
LEFT = math.rad(270),
RIGHT = math.rad(90)
}
function isPit(id)
local pit = false
for index, tileID in pairs(PitTiles) do
if tileID == id then
pit = true
end
end
return pit
end
function isActive(id)
local pit = false
for index, tileID in pairs(ActiveTiles) do
if tileID == id then
pit = true
end
end
if id == 45 then
pit = (game.shutter > 0)
end
return pit
end
function tileCollides(id)
local c = false
for index, tile in pairs(CollidingTiles) do
if tile == id then
c = true
end
end
local player = game:get("player")
if id == 7 then
c = (player.state ~= PlayerState.DASH)
end
if id == 45 then
c = (game.shutter > 0)
end
if id == 68 then
c = not game.flags.has_g
end
if id == 84 then
c = not game.flags.has_b
end
if id == 100 then
c = not game.flags.has_m
end
if id == 116 then
c = not game.flags.has_r
end
if id == 70 then
c = game.flags.has_g
end
if id == 71 then
c = game.flags.has_b
end
if id == 72 then
c = game.flags.has_m
end
if id == 73 then
c = game.flags.has_r
end
return c
end
Score = {
TINY = 50,
SMALL = 250,
MEDIUM = 500,
LARGE = 1000,
HUGE = 5000,
MAXIMUM = 10000
}
PlayerState = {
MOVE = 0,
DASH = 1,
FALL = 2,
DIE = 3,
}
LoadCode = {
-- tank room
x1y2 = function()
local b = game:get('button_0')
b.shutter = 1
b.age = 0
b.qs = 0
b.text = "The end."
b._update = b.update
b.update = function(self, dt, speed)
self:_update(dt, speed)
if self.active then
local player = game:get("player")
player.doUpdate = false
self.age = self.age + (dt * speed)
self.qs = self.qs + (dt * speed)
if self.qs > 0.25 then
self.qs = 0
if #player.orbs > 0 then
table.remove(player.orbs, 1)
end
local tanks = game:getEntities(function(entity)
return entity.isTank
end)
trace(#tanks)
if #tanks > 0 then
tanks[#tanks]:setOff()
end
end
if self.age > 1 then
self.shutter = 0
local t = entity()
t.qs = 0
t.text = "The end."
t.age = 0
t.update = function(self, dt, speed)
self.qs = self.qs + (dt * speed)
if self.qs > 0.05 then
self.qs = 0
if self.age < #self.text then
sfx(9)
end
self.age = self.age + 1
end
end
t.draw = function(self)
print(self.text:sub(1, math.floor(self.age)), 15 * 8, 14 * 8, Color.WHITE)
end
game:add(t)
end
end
end
b.onPress = function(self, dt, speed)
self.active = true
end
end,
-- tutorial room
x2y8 = function()
for index, entity in pairs(game:getEntities()) do
if entity.class == "enemy" then
entity.maxHealth = 1
entity.health = 1
entity.shutter = 0
end
end
end,
-- settings room
x8y1 = function()
game:get('button_0').onPress = function(self, dt, speed)
game.flags = {
loaded = true,
has_r = false,
has_m = false,
has_g = false,
has_b = false,
sound = true,
music = true,
opened_final_zone = false
}
game:save()
end
game:get('button_1').onPress = function(self, dt, speed)
game.flags.sound = not game.flags.sound
end
game:get('button_2').onPress = function(self, dt, speed)
game.flags.music = not game.flags.music
if not game.flags.music then
game:stop()
else
game:play(1)
end
end
game:get('button_3').onPress = function(self, dt, speed)
game:save()
end
end
}
--
--
-- GAME CONTENT
--
--
function loadRoom(x, y, entryDir, isSecret)
local w = 30
local h = 17
if x <= 0 then
x = 8 + x
end
if y <= 0 then
y = 8 + y
end
trace("Loading room: " .. x .. ", " .. y)
for loc, tile in pairs(changedTiles) do
mset(tile.x, tile.y, tile.id)
end
Camera.x = (x - 1) * w
Camera.y = (y - 1) * h
game.buttons = 0
game.collapse = 0
editMode = 0
game:play(1)
local entrances = {
UP = false,
DOWN = false,
LEFT = false,
RIGHT = false
}
if entryDir ~= nil then
game.current.dir = entryDir
end
for index, _entity in pairs(game.scenes.play.entities) do
if not _entity.isKeyEntity then
game:remove(_entity)
end
end
changedTiles = {}
for _x = 0, (w - 1) do
for _y = 0, (h - 1) do
local t = mget(_x, _y)
local a = game.add
if t == 50 then
mset(_x, _y, 2)
a(game, button(_x * 8, _y * 8))
elseif t == 52 then
mset(_x, _y, 14)
a(game, arrow(_x * 8, _y * 8, Direction.UP))
elseif t == 53 then
mset(_x, _y, 14)
a(game, arrow(_x * 8, _y * 8, Direction.LEFT))
elseif t == 54 then
mset(_x, _y, 14)
a(game, arrow(_x * 8, _y * 8, Direction.DOWN))
elseif t == 55 then
mset(_x, _y, 14)
a(game, arrow(_x * 8, _y * 8, Direction.RIGHT))
elseif t == 66 then
mset(_x, _y, 2)
local b = button(_x * 8, _y * 8)
b.name = "shutterbutton_" .. #game:getEntities()
b.onPress = function(self, dt, speed)
self.shutter = 0
end
b.shutter = 1
a(game, b)
elseif t == 91 then
mset(_x, _y, 2)
a(game, proptank(_x * 8, _y * 8))
elseif t == 68 then
if game.flags.has_g then
mset(_x, _y, 69)
end
elseif t == 84 then
if game.flags.has_b then
mset(_x, _y, 85)
end
elseif t == 102 then
mset(_x, _y, 2)
a(game, portal(_x * 8, _y * 8))
elseif t == 100 then
if game.flags.has_r then
mset(_x, _y, 101)
end
elseif t == 116 then
if game.flags.has_m then
mset(_x, _y, 117)
end
elseif t == 86 then
mset(_x, _y, 2)
a(game, pedestal((_x * 8) - 4, (_y * 8) - 4, Color.GREEN, game.flags.has_g))
elseif t == 87 then
mset(_x, _y, 2)
a(game, pedestal((_x * 8) - 4, (_y * 8) - 4, Color.BLUE, game.flags.has_b))
elseif t == 88 then
mset(_x, _y, 2)
a(game, pedestal((_x * 8) - 4, (_y * 8) - 4, Color.MAGENTA, game.flags.has_m))
elseif t == 89 then
mset(_x, _y, 2)
a(game, pedestal((_x * 8) - 4, (_y * 8) - 4, Color.RED, game.flags.has_r))
elseif t == 156 then
a(game, entity{
x = _x * 8,
y = _y * 8,
w = 2,
h = 2,
frames = {154},
update = function(self, dt, speed)
self.visible = not game.flags.sound
end
})
elseif t == 201 then
mset(_x, _y, 2)
a(game, trash(_x * 8, _y * 8))
elseif t == 158 then
a(game, entity{
x = _x * 8,
y = _y * 8,
w = 2,
h = 2,
frames = {154},
update = function(self, dt, speed)
self.visible = not game.flags.music
end
})
elseif t == 211 then
mset(_x, _y, 2)
if game.current.x == 1 or not game.flags.has_g then
a(game, wizard(_x * 8, _y * 8))
end
elseif t == 212 then
mset(_x, _y, 2)
if game.current.x == 1 or not game.flags.has_r then
a(game, pirika(_x * 8, _y * 8))
end
elseif t == 213 then
mset(_x, _y, 2)
if game.current.x == 1 or not game.flags.has_b then
a(game, evilOrb(_x * 8, _y * 8))
end
elseif t == 214 then
mset(_x, _y, 2)
if game.current.x == 1 or not game.flags.has_m then
a(game, carrion(_x * 8, _y * 8))
end
elseif t == 233 then
mset(_x, _y, 2)
a(game, ufo(_x * 8, _y * 8))
elseif t == 215 then
mset(_x, _y, 2)
a(game, finalBoss(_x * 8, _y * 8))
elseif t == 240 then
mset(_x, _y, 2)
if not game:get("player") then
a(game, cursor(_x * 8, _y * 8), "cursor")
a(game, player(_x * 8, _y * 8), "player")
a(game, health(1, 1), "health")
a(game, scorer(1, 16), "scorer")
game.playerSpawn.x = game:get("player").x
game.playerSpawn.y = game:get("player").y
end
elseif t == 243 then
mset(_x, _y, 2)
a(game, squid(_x * 8, _y * 8))
elseif t == 241 then
mset(_x, _y, 2)
a(game, snake(_x * 8, _y * 8))
elseif t == 242 then
mset(_x, _y, 2)
a(game, dog(_x * 8, _y * 8))
elseif t == 208 then
mset(_x, _y, 0)
a(game, coin(_x * 8, _y * 8))
elseif t == 209 then
mset(_x, _y, 2)
a(game, heart(_x * 8, _y * 8))
elseif t == 224 then
mset(_x, _y, 2)
a(game, spawner(_x * 8, _y * 8))
elseif t == 225 then
mset(_x, _y, 2)
a(game, fly(_x * 8, _y * 8))
elseif t == 226 then
mset(_x, _y, 2)
a(game, skull(_x * 8, _y * 8))
elseif t == 227 then
mset(_x, _y, 2)
a(game, hat(_x * 8 - 8, _y * 8 - 8))
elseif t == 228 then
mset(_x, _y, 2)
a(game, rubra(_x * 8, _y * 8))
elseif t == 229 then
mset(_x, _y, 2)
a(game, beamboy(_x * 8, _y * 8))
elseif t == 230 then
mset(_x, _y, 2)
a(game, plant(_x * 8, _y * 8))
elseif t == 231 then
mset(_x, _y, 2)
a(game, leaper(_x * 8, _y * 8))
elseif t == 232 then
mset(_x, _y, 2)
a(game, ghost(_x * 8, _y * 8))
elseif t == 114 then
mset(_x, _y, 2)
a(game, tank((_x - 1) * 8, (_y - 1) * 8))
elseif t == 144 then
mset(_x, _y, 2)
a(game, bulletBoy(_x * 8, _y * 8, DirectionAngles.RIGHT))
elseif t == 145 then
mset(_x, _y, 2)
a(game, bulletBoy(_x * 8, _y * 8, DirectionAngles.DOWN))
elseif t == 160 then
mset(_x, _y, 2)
a(game, bulletBoy(_x * 8, _y * 8, DirectionAngles.LEFT))
elseif t == 161 then
mset(_x, _y, 2)
a(game, bulletBoy(_x * 8, _y * 8, DirectionAngles.UP))
elseif t == 18 then
entrances.UP = {x = _x, y = _y}
elseif t == 19 then
entrances.DOWN = {x = _x, y = _y}
elseif t == 34 then
entrances.LEFT = {x = _x, y = _y}
elseif t == 35 then
entrances.RIGHT = {x = _x, y = _y}
elseif t == 22 and isSecret then
entrances.UP = {x = _x, y = _y}
elseif t == 23 and isSecret then
entrances.DOWN = {x = _x, y = _y}
elseif t == 38 and isSecret then
entrances.LEFT = {x = _x, y = _y}
elseif t == 39 and isSecret then
entrances.RIGHT = {x = _x, y = _y}
end
end
end
if entryDir ~= nil then
local entranceDir = 'UP'
if entryDir == Direction.UP then
entranceDir = 'DOWN'
elseif entryDir == Direction.DOWN then
entranceDir = 'UP'
elseif entryDir == Direction.LEFT then
entranceDir = 'RIGHT'
elseif entryDir == Direction.RIGHT then
entranceDir = 'LEFT'
end
if entrances[entranceDir] ~= false then
local playerEntrance = mtp(
entrances[entranceDir]
.x,
entrances[entranceDir]
.y
)
if entranceDir == 'UP' then
game:get("player").x = playerEntrance.x
game:get("player").y = playerEntrance.y + 8
elseif entranceDir == 'DOWN' then
game:get("player").x = playerEntrance.x
game:get("player").y = playerEntrance.y - 8
elseif entranceDir == 'LEFT' then
game:get("player").x = playerEntrance.x + 8
game:get("player").y = playerEntrance.y
elseif entranceDir == 'RIGHT' then
game:get("player").x = playerEntrance.x - 8
game:get("player").y = playerEntrance.y
end
else
trace("Attempted to enter room with no matching door.")
end
end
if LoadCode['x' .. x .. 'y' .. y] then
trace('Checking x: ' .. x .. ', y: ' .. y)
LoadCode['x' .. x .. 'y' .. y]()
end
editMode = 1
end
function ghost(x, y)
local g = enemy(x, y)
g.frames = {368, 369, 370, 371}
g.frameRate = 1 / 12
g.state = 0
g.moveSpeed = 20
g.transparent = Color.GREEN
g.inhaleTimer = 0
-- 0 - neutral
-- 1 - breath in
-- 2 -
g.update = function(self, dt, speed)
local player = game:get("player")
if self.state == 0 then
if math.dist(self.x + 4, self.y + 4, player.x + 4, player.y + 4) > 15 then
local dtspeed = self.moveSpeed * (dt * speed)
local offset = rotate(dtspeed, dtspeed, math.angle(self.x, self.y, player.x, player.y))
self.x = self.x + offset.x
self.y = self.y + offset.y
else
self.state = 1
self.frames = {384, 385, 386, 387}
self.frameIndex = 1
self.frameRate = 1
sfx(3, "C-4", 30, 3)
end
elseif self.state == 1 then
local dtspeed = (self.moveSpeed * 0.75) * (dt * speed)
local offset = rotate(dtspeed, dtspeed, math.angle(self.x, self.y, player.x, player.y) - math.rad(40))
self.x = self.x + offset.x
self.y = self.y + offset.y
if self.frameIndex == #self.frames then
self.inhaleTimer = 3
self.state = 2
self.frames = {386, 387}
self.frameRate = 1 / 15
end
elseif self.state == 2 then
local dtspeed = (self.moveSpeed * 1.25) * (dt * speed)
local offset = rotate(dtspeed, dtspeed, math.angle(self.x, self.y, player.x, player.y) - math.rad(40))
self.x = self.x + offset.x
self.y = self.y + offset.y
self.inhaleTimer = self.inhaleTimer - (dt * speed)
if self.inhaleTimer <= 0 then
for x = 1, 9 do
game:add(bullet(self.x, self.y, 60 * x))
end
game:remove(self)
end
end
end
return g
end
function trash(x, y)
local t = enemy(x, y)
t.frames = {185}
t.update = function(self, dt, speed)
self:checkDamage(dt, speed)
end
t.onTakeDamage = function(self, dt, speed, fresh)
if fresh then
game:add(heart(self.x, self.y))
poof(self.x, self.y)
self.frames = {169}
end
end
return t
end
function leaper(x, y)
local l = enemy(x, y)
l.frames = {345, 346, 347, 346, 345}
l.frameRate = 1 / 12
l.health = 3
l.maxHealth = 3
l.skitter = {
dir = 0,
speed = 0,
age = math.random(1, 50) / 10,
skitters = math.random(1, 5),
}
l.onTakeDamage = fly().onTakeDamage
l.update = function(self, dt, speed)
if not self:checkDamage(dt, speed) then
self.skitter.age = self.skitter.age + (dt * speed)
if self.speed ~= 0 then
local offset = {
x = (self.speed * (dt * speed)),
y = (self.speed * (dt * speed))
}
offset = rotate(offset.x, offset.y, math.rad(self.dir))
local targetTile = ptm(self.x + offset.x + 4, self.y + offset.y + 4)
if tileCollides(mget(targetTile.x, targetTile.y)) or
isPit(mget(targetTile.x, targetTile.y)) then
offset = { x = 0, y = 0 }
end
self.x = self.x + offset.x
self.y = self.y + offset.y
end
if self.skitter.age > 0.5 then
self.skitter.age = 0
self.skitter.skitters = self.skitter.skitters + 1
if math.random(1, 3) == 2 then
self.speed = 0
else
self.speed = 15
self.dir = math.random(0, 360)
end
if self.skitter.skitters > 5 then
self.skitter.skitters = 0
game:add(bullet(self.x, self.y, game:get("player")))
sfx(19, "C-4", 15, 3)
end
end
end
if self.health <= 0 then
game:remove(self)
end
end
return l
end
function score(amount, x, y)
game.score = game.score + Score[amount]
local txt = tostring(Score[amount])
local player = game:get("player")
local x = x and x or player.x
local y = y and y or player.y
local sp = particle(x, y, 10, 50)
sp.numbers = {}
sp.draw = function(self, dt)
for index, number in ipairs(self.numbers) do
spr(number, self.x + (index * 4), self.y, 0)
end
end
for i = 1, #txt do
local letter = txt:sub(i, i)
if letter == "5" then
table.insert(sp.numbers, 464)
elseif letter == "2" then
table.insert(sp.numbers, 465)
elseif letter == "1" then
table.insert(sp.numbers, 480)
else
table.insert(sp.numbers, 481)
end
end
game:get("scorer").visAge = 0
game:add(sp)
end
function cursor(x, y)
return entity{
x = x, y = y,
angle = 0, distance = 0,
frames = {282},
frameRate = 1 / 12,
alwaysVisible = true,
isKeyEntity = true,
visible = false,
update = function(self, dt)
end,
_draw = entity().draw,
draw = function(self, dt)
self:_draw(dt)
local player = game:get("player")
line(self.x + 4, self.y + 4, player.x + 4, player.y + 4, 15)
end
}
end
function spawner(x, y)
return entity{
class = "enemy",
x = x,
frameRate = 1 / 12,
health = 3,
maxHealth = 3,
y = y,
frames = {292, 293, 294, 293},
direction = 0,
spawned = false,
age = 0, speed = 0, state = 0,
spawns = {},
timeSinceSpawn = 0,
-- 0 - wandering
-- 1 - spawning
-- 2 - waiting
update = function(self, dt, speed)
self:checkDamage(dt, speed)
local dtm = dt * speed
if not self.damaged then
if self.state == 0 then
self.spawned = false
self.frames = {292, 293, 294, 293}
self.timeSinceSpawn = self.timeSinceSpawn + (dt * speed)
if math.random(1, 250) == 1 then
self.state = 1
end
elseif self.state == 1 then
self.frames = {292, 293, 294, 295, 296, 297}
if self.frameIndex == #self.frames and not self.spawned then
local flySpawn = fly(self.x, self.y)
flySpawn.health = 1
flySpawn.maxHealth = 1
table.insert(self.spawns, flySpawn)
game:add(flySpawn)
self.state = 0
self.spawned = true
self.timeSinceSpawn = 0
sfx(4, "C-4", 15, 3)
--local shot = game:add(bullet(self.x, self.y, game:get("player")))
end
end
end
end,
_draw = entity().draw,
draw = enemy().draw,
onTakeDamage = function(self, dt, speed, fresh)
if fresh then
self:takeHealth(1)
self.damaged = false
if self.health == 0 then
for x = 1, 5 do
game:add(particle(self.x, self.y, nil, nil, {500}))
end
for index, entity in pairs(self.spawns) do
if game:get(entity.name) then
entity.health = 0
end
end
game:remove(self)
end
end
end
}
end
function enemy(x, y)
return entity{
shutter = 1,
class = "enemy",
x = x, y = y, frames = {276, 277, 278, 279, 278, 277},
direction = math.rad(math.random(0, 360)), age = 0, speed = 7, damaged = false,
update = function(self, dt, speed)
self:checkDamage(dt, speed)
end,
_draw = entity().draw,
draw = function(self, dt)
self:_draw(dt)
if self.health ~= self.maxHealth then
rect(self.x, self.y - 3, math.lerp(0, 8, (self.health / self.maxHealth)), 2, 11)
end
end
}
end
function button(x, y, onPress)
local e = entity{
x = x, y = y,
name = 'button_' .. game.buttons,
pressed = false,
onPress = onPress,
frames = {50},
update = function(self, dt, speed)
local player = game:get("player")
if overlap(self, player) then
if not self.pressed then
self.pressed = true
game:add(particle(self.x, self.y, nil, 15))
sfx(9, "C-4", 15, 3)
self.frames = {51}
if self.onPress then
self:onPress(dt, speed)
end
end
else
if self.pressed then
self.frames = {50}
sfx(9, "C-4", 15, 3)
self.pressed = false
end
end
end
}
game.buttons = game.buttons + 1
return e
end
function bullet(x, y, target, onFinish)
local e = entity{
x = x, y = y,
onFinish = onFinish,
class = "bullet",
target = target,
frames = {504, 505, 506, 507},
frameRate = 1 / 20,
angle = false,
radius = 2,
collides = false,
friendly = false,
pierces = false,
speed = 30,
update = function(self, dt, speed)
if not self:checkDamage(dt, speed) then
if self.angle == false then
if type(self.target) == "number" then
self.angle = self.target - math.rad(40)
else
self.angle = math.angle(self.x, self.y, self.target.x, self.target.y) - math.rad(45)
end
end
local fs = self.speed * (dt * speed)
local offset = self.offset and {
x = self.offset.x * (dt * speed),
y = self.offset.y * (dt * speed)
} or rotate(fs, fs, self.angle)
local n = {
x = self.x + offset.x,
y = self.y + offset.y
}
local t = ptm(n.x, n.y)
if tileCollides(mget(t.x, t.y)) and mget(t.x, t.y) ~= 7 then
if self.onFinish then
self:onFinish()
end
game:remove(self)
end
if type(self.target) ~= "number" then
self.target = math.angle(self.x, self.y, self.target.x, self.target.y)
end
if self.friendly then
local hitTarget = false
for index, entity in pairs(game:getEntities(function(entity) return entity.class == "enemy" end)) do
if overlap(self, entity) then
entity.health = entity.health - 1
hitTarget = true
end
end
if hitTarget then
if self.onFinish then
self:onFinish()
end
game:remove(self)
end
else
local player = game:get("player")
if overlap(self, player) then
if player.iframes == 0 and player.state == PlayerState.MOVE then
if self.onFinish then
self:onFinish()
end
player:takeHealth(1)
game:remove(self)
end
end
end
self.x = n.x
self.y = n.y
if self.onUpdate then
self:onUpdate(dt, speed)
end
end
end
}
e.onTakeDamage = function(self, dt, speed, fresh)
if fresh then
game:remove(self)
end
end
return e
end
function fly(x, y)
local f = enemy(x, y)
f.frameRate = 1/16
f.health = 2
f.maxHealth = 2
f.radius = 4
f.direction = math.rad(math.random(0, 360))
f.age = 0
f.speed = 15
f.update = function(self, dt, speed)
if not self:checkDamage(dt, speed) then
self.age = self.age + (dt * speed)
if self.age > 3 then
self.age = 0
self.direction = math.rad(math.random(0, 360))
end
local offset = {
x = self.speed * (dt * speed),
y = self.speed * (dt * speed),
}
local rotated = rotate(offset.x, offset.y, self.direction)
local target = {
x = self.x + rotated.x + 4,
y = self.y + rotated.y + 4
}
local tile = ptm(target.x, target.y)
if tileCollides(mget(tile.x, tile.y)) then
offset = {x = 0, y = 0}
self.age = 0
self.direction = self.direction + math.rad(180)
end
self.x = self.x + rotated.x
self.y = self.y + rotated.y
local player = game:get("player")
if overlap(self, player) and player.state == PlayerState.MOVE and player.iframes == 0 then
player:takeHealth(1)
end
end
if self.health <= 0 then
for x = 1, 5 do
game:add(particle(self.x, self.y, nil, nil, {500}))
end
game:remove(self)
end
end
f.onTakeDamage = function(self, dt, speed, fresh)
if fresh then
self:takeHealth(1)
self.age = 0
self.damaged = false
end
end
return f
end
function bulletBoy(x, y, dir)
local b = entity{x = x, y = y}
b.dir = dir
if dir == DirectionAngles.UP then
b.rotate = 3
elseif dir == DirectionAngles.LEFT then
b.rotate = 2
elseif dir == DirectionAngles.DOWN then
b.rotate = 1
elseif dir == DirectionAngles.RIGHT then
b.rotate = 0
end
b.frames = {360, 361, 362, 363}
b.shotThisFrame = false
b.update = function(self, dt, speed)
if self.frameIndex == #self.frames then
if not self.shotThisFrame then
self.shotThisFrame = true
local b = bullet(self.x, self.y, game:get("player"))
if self.dir == DirectionAngles.UP then
b.offset = {
x = 0,
y = -40
}
elseif self.dir == DirectionAngles.DOWN then
b.offset = {
x = 0,
y = 40
}
elseif self.dir == DirectionAngles.LEFT then
b.offset = {
x = -40,
y = 0
}
elseif self.dir == DirectionAngles.RIGHT then
b.offset = {
x = 40,
y = 0
}
end
game:add(b)
end
else
self.shotThisFrame = false
end
end
return b
end
function beamboy(x, y)
local b = enemy(x, y)
b.health = 3
b.radius = 8
b.maxHealth = 3
b.angle = 0
b.maxRange = 20
b.range = 0
b.cooldown = 0
b.lastRange = 0
b.shotCooldown = 0
b.update = function(self, dt, speed)
self.lastRange = self.range
self.shotCooldown = self.shotCooldown - (dt * speed)
if not self:checkDamage(dt, speed) then
if self.range < self.maxRange then
self.range = self.range + (10 * (dt * speed))
end
local player = game:get("player")
self.angle = self.angle + ((math.rad(100) * (dt * speed)) * (1 + self.maxHealth - self.health))
if self.angle > math.rad(180) then
self.angle = self.angle - math.rad(360)
end
local pa = math.angle(self.x + 4, self.y + 4, player.x + 4, player.y + 4)
-- angle close
local onedeg = math.rad(15)
if math.clamp(self.angle, pa - onedeg, pa + onedeg) == self.angle then
if math.dist(self.x, self.y, player.x, player.y) < (self.range * 1.5) then
if self.shotCooldown <= 0 then
self.shotCooldown = 0.2
game:add(bullet(self.x, self.y, self.angle))
end
end
end
end
self.target = rotate(self.range, self.range, self.angle - math.rad(44))
end
b.__draw = b.draw
b.draw = function(self, dt)
line(self.x + 4, self.y + 4, self.x + 4 + self.target.x, self.y + 4 + self.target.y, 11)
local start = {
x = self.x, y = self.y
}
self.y = start.y - 1
self:__draw(dt)
local legFrames = {302, 303}
self.x = start.x - 6
self.y = start.y + 4
self.sprite = legFrames[self.frameIndex]
self:_draw(dt)
self.y = self.y - 8
self:_draw(dt)
self.x = start.x + 6
self.flip = 1
self.sprite = legFrames[self.frameIndex]
self:_draw(dt)
self.y = self.y + 8
self:_draw(dt)
self.y = self.y - 4
self.flip = 0
self.frames = {301, 301}
self.x = self.x - 7
self.x = start.x
self.y = start.y
--printf(math.deg(self.angle), self.x - 10, self.y - 10)
--printf(math.deg(math.angle(self.x + 4, self.y + 4, player.x + 4, player.y + 4)), self.x - 10, self.y - 20)
end
b.onTakeDamage = function(self, dt, speed, fresh)
if fresh then
self.range = 0
self.angle = 0
self:takeHealth(1)
self.cooldown = 0
end
self.cooldown = self.cooldown + (dt * speed)
if self.cooldown > 0.2 then
self.visible = true
self.cooldown = 0
self.damaged = false
else
self.visible = not self.visible
end
end
return b
end
function rubra(x, y)
local r = enemy(x, y)
r.health = 3
r.maxHealth = 3
r.frames = {298, 299, 300}
r.lastShot = 0
r.update = function(self, dt, speed)
if not self:checkDamage(dt, speed) then
self.lastShot = self.lastShot + (dt * speed)
self.frameRate = 1 / math.lerp(0, 30, self.lastShot / 3)
if self.lastShot > 3 then
self.lastShot = 0
for x = 1, math.random(3, 7) do
local player = game:get("player")
local angle = math.angle(self.x, self.y, player.x, player.y) + math.rad(math.random(-15, 15))
local b = bullet(self.x, self.y, angle)
b.speed = math.random(20, 50)
game:add(b)
end
end
end
end
r.onTakeDamage = function(self, dt, speed, fresh)
if fresh then
self:takeHealth(1)
self.lastShot = 0
self.damaged = false
end
end
return r
end
function skull(x, y)
local s = enemy(x, y)
s.maxHealth = 1
s.health = 1
s.angle = 0
s.distance = 15
s.transparent = 9
s.frames = {280}
s.frameRate = 1 / 20
s.lastShot = 0
s.speed = 2
s.shutter = 0
s.shaking = false
s.activated = false
s.update = function(self, dt, speed)
local player = game:get("player")
if self.activated then
if self.shaking then
self.shaking = false
poof(self.x, self.y, true)
sfx(22, "C-4", 15, 3)
end
self.lastShot = self.lastShot + (dt * speed)
local offset = rotate(self.distance, self.distance, self.angle)
self.x = player.x + offset.x
self.y = player.y + offset.y
if self.lastShot > 1.5 then
self.frames = {280, 281}
else
self.angle = self.angle + (self.speed * (dt * speed))
end
if self.lastShot > 2 then
self.lastShot = 0
self.frames = {280}
game:add(bullet(self.x, self.y, math.angle(self.x, self.y, player.x, player.y)))
end
if game.shutter == 0 and game.lastShutter ~= 0 then
poof(self.x, self.y)
game:remove(self)
end
else
local distance = math.dist(self.x + 4, self.y + 4, player.x + 4, player.y + 4)
if distance < self.distance then
self.activated = true
elseif distance < self.distance * 3 then
self.shaking = 1
if distance < self.distance * 2 then
self.shaking = 2
end
else
self.shaking = false
end
self.angle = math.angle(self.x, self.y, player.x, player.y) - math.rad(40)
end
end
s.__draw = s.draw
s.draw = function(self)
if self.shaking then
local offsetX = math.random(-self.shaking, self.shaking)
local offsetY = math.random(-self.shaking, self.shaking)
self.x = self.x + offsetX
self.y = self.y + offsetY
self:__draw()
self.x = self.x - offsetX
self.y = self.y - offsetY
else
self:__draw()
end
end
return s
end
function poof(x, y, invalid)
for i = 1, 5 do
game:add(particle(x, y, nil, nil, invalid and {500} or {502}))
end
end
function pirika(x, y)
local p = enemy(x, y)
p.health = 5
p.maxHealth = 5
p.blinkFrames = {432, 434, 436, 438, 436, 434}
p.countFrames = {400, 402, 404, 406}
p.slamFrames = {400}
p.state = 0
p.blinks = 0
p.countedBlink = false
p.w = 2
p.yOffset = 0
p.dir = true
p.h = 2
p.frameRate = 1 / 12
p.angle = 0
p.radius = 8
p.transparent = Color.MAGENTA
p.empowered = (game.current.x == 1)
if p.empowered then
p.health = 8
p.maxHealth = 8
poof(p.x, p.y, true)
end
p.update = function(self, dt, speed)
if not self:checkDamage(dt, speed) then
if self.state == 0 then
self.frames = self.blinkFrames
if self.frameIndex == #self.frames then
if not self.countedBlink then
self.countedBlink = true
self.blinks = self.blinks + 1
end
else
self.countedBlink = false
end
if self.blinks > 3 then
--[[
0 - idle
1 - spam 3/5 bombs
2 - plant bombs
3 - fist slam
4 - star storm
]]
local weight = {1, 1, 1, 1, 2, 2, 2}
if self.empowered then
weight = {1, 1, 2, 2, 2, 3, 3, 3}
end
self.blinks = 0
self.state = weight[math.random(1, #weight)]
end
elseif self.state == 1 then
self.frames = self.countFrames
if self.frameIndex == #self.frames then
if not self.countedBlink then
self.countedBlink = true
self.blinks = self.blinks + 1
local nextTarget = {x = 1, y = 1}
while not isActive(mget(nextTarget.x, nextTarget.y)) do
nextTarget = {
x = math.random(1, 30),
y = math.random(1, 17)
}
end
local n = mtp(nextTarget.x, nextTarget.y)
game:add(bomb(self.x, self.y))
poof(self.x, self.y, true)
self.x = n.x
self.y = n.y
if self.blinks > 3 then
self.state = 0
self.blinks = 0
end
end
else
self.countedBlink = false
end
elseif self.state == 2 then
self.frames = self.countFrames
local player = game:get("player")
self.angle = self.angle + math.rad(90 * (dt * speed))
local t = rotate(10, 10, self.angle)
self.x = player.x + t.x + 4
self.y = player.y + t.y + 4
if self.frameIndex ~= #self.frames then
self.countedBlink = false
if self.blinks > 3 then
self.state = 0
self.blinks = 0
end
else
if not self.countedBlink then
game:add(bomb(self.x, self.y))
self.blinks = self.blinks + 1
self.countedBlink = true
end
end
elseif self.state == 3 then
self.frames = self.slamFrames
self.rotate = 3
if self.dir then
self.yOffset = self.yOffset - (5 * (dt * speed))
if self.yOffset < -10 then
self.dir = false
end
else
self.yOffset = self.yOffset + (20 * (dt * speed))
if self.yOffset > 0 then
self.yOffset = 0
self.blinks = -3
self.state = 0
self.dir = true
self.rotate = 0
for i = 1, 12 do
game:add(star(self.x, self.y, math.rad(i * (360 / 12))))
end
end
end
else
self.state = 0
end
end
end
p.__draw = p.draw
p.draw = function(self)
self.y = self.y + self.yOffset
self:__draw()
self.y = self.y - self.yOffset
end
p.onTakeDamage = function(self, dt, speed, fresh)
if fresh then
self:takeHealth(1)
self.damaged = false
end
end
game:play(2)
return p
end
function star(x, y, target)
local s = bullet(x, y, target)
s.frames = {476, 492, 508}
s.onFinish = function(self)
for i = 1, 12 do
game:add(bullet(self.x, self.y, math.rad(i * (360 / 12))))
end
end
return s
end
function carrion(x, y)
local c = enemy(x, y)
c.health = 4
c.maxHealth = 4
c.w = 2
c.h = 2
c.radius = 8
c.frames = {374}
c.angle = 0
c.sc = 0
c.transparent = Color.MAGENTA
c.targetting = 0
c.spawns = 0
game:play(2)
c.empowered = (game.current.x == 1)
if c.empowered then
poof(c.x, c.y, true)
c.health = 6
c.maxHealth = 6
end
c.update = function(self, dt, speed)
local player = game:get("player")
if not self:checkDamage(dt, speed) then
self.angle = self.angle + (dt * speed)
if self.angle > math.pi then
self.angle = self.angle - (math.pi * 2)
end
for x = 1, 4 do
local angleTo = math.angle(self.x, self.y, player.x, player.y)
if math.clamp(angleTo, self.angle - math.rad(3) + math.rad(90 * x), self.angle + math.rad(3) + math.rad(90 * x)) == angleTo then
if math.dist(self.x, self.y, player.x, player.y) < 25 then
self.targetting = 0
end
end
end
if self.targetting < 1 then
self.targetting = self.targetting + (dt * speed)
self.sc = self.sc + (dt * speed)
self.angle = math.angle(self.x, self.y, player.x, player.y)
if self.sc > 0.1 then
game:add(bullet(self.x + 8, self.y + 8, game:get("player")))
self.sc = 0
end
if self.targetting > 1 then
if self.empowered then
for x = 1, 4 do
local t = rotate(25, 25, self.angle + math.rad(90 * x) - math.rad(45))
local r = rubra(self.x + t.x, self.y + t.y)
r.health = 1
r.maxHealth = 1
game:add(r)
poof(self.x + t.x, self.y + t.y)
end
end
end
else
self.sc = 0
end
end
end
c.onTakeDamage = function(self, dt, speed, fresh)
if fresh then
self:takeHealth(1)
self.damaged = false
end
end
c.__draw = c.draw
c.sdraw = entity().draw
c.draw = function(self)
for x = 1, 4 do
local t = rotate(25, 25, self.angle + math.rad(90 * x) - math.rad(45))
line(self.x + 8, self.y + 8, self.x + t.x + 8, self.y + t.y + 8, Color.RED)
spr(460, self.x + 4 + t.x, self.y + 4 + t.y, Color.BLACK)
end
self:__draw()
end
game:play(2)
return c
end
function finalBoss(x, y)
local b = enemy(x, y)
b.health = 3
b.maxHealth = 3
b.name = "finalboss"
b.w = 2
b.h = 2
b.frames = {364}
b.missingOrb = false
b.transparent = Color.MAGENTA
b.time = 0
b.orbs = {392, 393, 394, 395}
b.angle = 0
b.state = 0
b.shots = 0
b.os = 0
b.center = {x = b.x, y = b.y}
b.selfDestructing = false
b.spawns = {}
b.update = function(self, dt, speed)
game.collapse = 1 + ((#self.orbs * 3) * #self.orbs)
game.broken = (#self.orbs > 0)
game:play(6)
if not self.selfDestructing then
if not self:checkDamage(dt, speed) then
local player = game:get("player")
self.angle = self.angle + (2 * (dt * speed))
if self.angle > math.pi then
self.angle = self.angle - (math.pi * 2)
end
if #game.orbs > 0 and not self.missingOrb then
self.start = {
x = self.x,
y = self.y
}
self.chaseOrb = game.orbs[1]
self.os = 0
self.missingOrb = true
end
if self.missingOrb then
self.os = self.os + ((dt * speed) / 4)
self.center.x = self.x + 4
self.center.y = self.y + 4
self.x = math.lerp(self.start.x, self.chaseOrb.x, self.os)
self.y = math.lerp(self.start.y, self.chaseOrb.y, self.os)
elseif #self.orbs == 4 then
if #self.spawns > 0 then
for index, spawn in pairs(self.spawns) do
spawn.health = 0
end
self.spawns = {}
end
self.os = self.os + ((dt * speed) / 2)
self.center.x = math.cerp(self.x, player.x, self.os)
self.center.y = math.cerp(self.y, player.y, self.os)
if self.os > 1 then
self.os = 0
for x = 1, #self.orbs do
local t = rotate(12, 12, math.rad((360 / #self.orbs) * x) + self.angle)
local b = bullet(self.center.x + t.x, self.center.y + t.y, game:get("player"))
b.speed = 5
game:add(b)
end
end
elseif #self.orbs == 3 then
self.os = self.os + (dt * speed)
if self.os > 0.5 then
self.os = 0
if game.shutter < 16 then
local f = hat(self.x + 4, self.y + 4)
f.health = 1
f.maxHealth = 1
game:add(f)
table.insert(self.spawns, f)
end
end
elseif #self.orbs == 2 then
self.os = self.os + (dt * speed)
if self.os > 0.5 then
self.os = 0
if #self.spawns > 0 then
local f = self.spawns[1]
table.remove(self.spawns, 1)
f.health = 0
game:add(star(f.x, f.y, game:get("player")))
else
game:add(star(self.x + 4, self.y + 4, game:get("player")))
end
end
elseif #self.orbs == 1 then
self.os = self.os + (dt * speed)
if self.os > 0.3 then
game:add(star(self.x + 4, self.y + 4, math.rad(math.random(1, 360))))
self.os = 0
end
end
end
else
self.os = self.os + (dt * speed)
if self.os > 0.3 then
for x = 1, 12 do
game:add(bullet(self.x, self.y, math.rad((360 / 12) * x) + self.angle))
end
self.os = 0
end
--self.x = self.x + (10 * (dt * speed))
self.y = self.y - (10 * (dt * speed))
local tile = ptm(self.x, self.y)
local t = mget(tile.x, tile.y)
if tileCollides(t) and t ~= 115 then
mset(tile.x, tile.y, 16)
mset(tile.x + 1, tile.y, 18)
mset(tile.x + 2, tile.y, 16)
mset(tile.x + 0, tile.y + 1, 2)
mset(tile.x + 1, tile.y + 1, 2)
mset(tile.x + 2, tile.y + 1, 2)
poof(self.x, self.y, true)
game:remove(self)
end
end
end
b.__draw = b.draw
b.draw = function(self)
for x = 1, #self.orbs do
local t = rotate(12, 12, math.rad((360 / #self.orbs) * x) + self.angle)
spr(self.orbs[x], self.center.x + t.x, self.center.y + t.y, Color.CYAN)
end
spr(460, self.center.x, self.center.y, Color.BLACK)
local offsetx = math.random(-2, 2)
local offsety = math.random(-2, 2)
if #self.orbs == 3 and not self.missingOrb then
self.x = self.x + offsetx
self.y = self.y + offsety
end
self:__draw()
if #self.orbs == 3 and not self.missingOrb then
self.x = self.x - offsetx
self.y = self.y - offsety
end
end
b.onTakeDamage = function(self, dt, speed, fresh)
self.os = 0
if fresh then
if self.health > 1 then
self:takeHealth(1)
else
if #self.orbs > 0 and not self.missingOrb then
game:add(sphere(self.orbs[#self.orbs]))
table.remove(self.orbs, #self.orbs)
self.health = 3
else
if #self.orbs == 0 and #game.orbs == 0 and self.health == 1 then
self.selfDestructing = true
end
end
end
end
self.damaged = false
end
game:play(5)
return b
end
function proptank(x, y)
local p = entity{x = x, y = y}
p.isTank = true
p.frames = {91}
p.setOff = function(self)
editMode = 0
local tile = ptm(self.x, self.y)
mset(tile.x, tile.y, 91)
for x = -1, 1 do
for y = -1, 1 do
if y == -1 then
mset(tile.x + x, tile.y + y, 0)
else
mset(tile.x + x, tile.y + y, mget(tile.x + x, tile.y + y) - 13)
end
end
end
poof(self.x, self.y)
self.frames = {78}
mset(tile.x, tile.y, 78)
game:remove(self)
editMode = 1
end
return p
end
function sphere(frame)
local boss = game:get("finalboss")
local player = game:get("player")
local e = entity{
x = math.random(2, 27) * 8,
y = math.random(2, 14) * 8,
frames = {frame},
transparent = Color.CYAN,
update = function(self, dt, speed)
local boss = game:get("finalboss")
local player = game:get("player")
local taken = false
if overlap(self, player) then
taken = true
table.insert(player.orbs, self.frames[1])
end
if boss then
if overlap(self, boss) then
taken = true
table.insert(boss.orbs, self.frames[1])
boss.health = 3
end
end
if taken then
for index, orb in ipairs(game.orbs) do
if self == orb then
table.remove(game.orbs, index)
end
end
poof(self.x, self.y)
if boss then
boss.missingOrb = false
end
game:remove(self)
end
end
}
table.insert(game.orbs, e)
return e
end
function plant(x, y)
local p = enemy(x, y)
p.shutter = 0
p.health = 2
p.class = "plant"
p.maxHealth = 2
p.state = 0
p.frames = {344}
p.frameRate = 1
p.range = 30
p.bubble = 0
p.update = function(self, dt, speed)
if not self:checkDamage(dt, speed) then
if self.state == 0 then
self.frames = {344}
self.bubble = self.bubble + (dt * speed)
if self.bubble > 3 then
self.bubble = 0
sfx(19, "G-3", 15, 3)
for index, entity in pairs(game:getEntities(function(entity) return entity.class == "enemy" end)) do
if math.dist(self.x, self.y, entity.x, entity.y) < self.range then
entity.health = entity.health + 1
if entity.health > entity.maxHealth then
entity.health = entity.maxHealth
end
for x = 1, 3 do
game:add(particle(entity.x, entity.y, math.random(-10, 10), 15, {502}))
end
end
end
end
else
self.frames = {372, 373, 388, 389, 344}
if self.frames[self.frameIndex] == 344 then
self.state = 0
self.bubble = 0
sfx(11, "C-4", -1, 3)
end
end
end
end
p.onTakeDamage = function(self, dt, speed)
if self.state == 0 then
self.state = 1
self.damaged = false
else
game:remove(self)
end
end
p.__draw = p.draw
p.draw = function(self, dt, speed)
self:__draw(dt, speed)
if self.state == 0 then
circb(self.x + 4, self.y + 4, math.lerp(0, self.range, self.bubble / 3), 9)
end
end
return p
end
function wizard(x, y)
local w = enemy(x, y)
w.w = 2
w.h = 2
w.radius = 8
w.frames = {336, 342, 336, 338, 340,}
w.frameRate = 1/12
w.blockAge = 0
w.health = 5
w.transparent = Color.MAGENTA
w.maxHealth = 5
w.empowered = (game.current.x == 1)
w.state = 0
w.stars = 0
w.maxStars = 10
w.angle = 0
w.cooldown = 0
w.update = function(self, dt, speed)
if not self:checkDamage(dt, speed) then
self.sep = 360 / self.maxStars
-- 0 - idle
-- 1 - shooting stars
-- 2 - shooting off all stars
-- 3 - spawning hats
self.angle = self.angle + (math.rad(self.sep + (self.sep * (self.maxHealth - self.health))) * (dt * speed))
if self.state == 0 then
if self.angle > math.rad(self.sep) then
self.angle = 0
self.stars = self.stars + 1
end
if self.stars == self.maxStars then
if self.empowered then
self.state = math.random(1, 3)
else
self.state = math.random(1, 2)
end
end
elseif self.state == 1 then
self.cooldown = self.cooldown + (dt * speed)
if self.cooldown > (1 / self.maxStars) then
game:add(star(self.x, self.y, game:get("player")))
self.stars = self.stars - 1
self.cooldown = 0
end
if self.stars == 0 then
self.state = 0
end
elseif self.state == 2 then
self.cooldown = self.cooldown + (dt * speed)
if self.cooldown > (1 / self.maxStars) then
game:add(star(self.x, self.y, math.rad((360 / self.maxStars) * (self.maxStars - self.stars))))
self.stars = self.stars - 1
self.cooldown = 0
end
if self.stars == 0 then
self.state = 0
end
elseif self.state == 3 then
for x = 1, math.floor(self.stars / 2) do
local target = rotate(8, 8, x * (math.rad(self.sep * 2)))
local h = fly(self.x + target.x, self.y + target.y)
h.health = 1
h.maxHealth = 1
game:add(h)
end
self.state = 0
self.stars = 0
else
self.state = 0
end
end
end
w.__draw = w.draw
w.draw = function(self)
self:__draw()
for i = 1, self.stars do
local r = rotate(8, 8, i * math.rad(self.sep) + self.angle)
if self.state == 1 then
r = rotate(8 - (self.cooldown * 8), 8 - (self.cooldown * 8), i * math.rad(self.sep) + self.angle)
end
spr(508, self.x + r.x + 4, self.y + r.y + 4, 0)
end
end
w.onTakeDamage = function(self, dt, speed, fresh)
if fresh then
self:takeHealth(1)
self.state = 2
self.damaged = false
end
end
game:play(2)
return w
end
function hat(x, y)
local e = enemy(x, y)
e.frames = {424, 425, 426, 427}
e.health = 2
e.maxHealth = 2
e.frameRate = 1 / 12
e.shotWatch = 3.5
e.shotCooldown = 0
e.transparent = Color.MAGENTA
e.shouldFlit = 0
e.update = function(self, dt, speed)
if not self:checkDamage(dt, speed) then
self.shotCooldown = self.shotCooldown + (dt * speed)
self.shouldFlit = self.shouldFlit + (dt * speed)
self.frameRate = 1 / (12 + (self.shotCooldown * 10))
if self.shotCooldown > self.shotWatch then
self.shotCooldown = 0
local b = bullet(self.x, self.y, game:get("player"))
b.onFinish = function(self)
for i = 1, 10 do
game:add(bullet(self.x, self.y, i * math.rad(36)))
end
end
b.frames = {476, 492, 508}
game:add(b)
end
if self.shouldFlit > 1 then
self.shouldFlit = 0
local target = rotate(15, 15, math.rad(math.random(360)))
local t = ptm(self.x + target.x, self.y + target.y)
while not isActive(mget(t.x, t.y)) or tileCollides(mget(t.x, t.y)) do
target = rotate(15, 15, math.rad(math.random(360)))
t = ptm(self.x + target.x, self.y + target.y)
end
poof(self.x, self.y, true)
self.x = self.x + target.x
self.y = self.y + target.y
end
end
end
e.onTakeDamage = function(self, dt, speed, fresh)
if fresh then
self:takeHealth(1)
self.damaged = false
end
end
return e
end
function pedestal(x, y, color, cleared)
local e = entity{
x = x, y = y,
color = color,
cleared = cleared,
visualOffset = 0,
w = 2, h = 2,
frames = {176},
radius = 8,
yOffset = math.random(0, 40) / 10,
dir = 1,
update = function(self, dt, speed)
self.yOffset = self.yOffset + (12 * ((dt * speed) * self.dir))
if self.yOffset > 4 or self.yOffset < 0 then
self.dir = -self.dir
end
self.yOffset = math.clamp(self.yOffset, 0, 4)
local player = game:get("player")
if overlap(self, player) and not self.cleared then
self.cleared = true
player.health = player.maxHealth
if self.color == Color.GREEN then
game.flags.has_g = true
elseif self.color == Color.BLUE then
game.flags.has_b = true
elseif self.color == Color.MAGENTA then
game.flags.has_m = true
elseif self.color == Color.RED then
game.flags.has_r = true
end
game:save()
end
end
}
e._draw = entity().draw
e.draw = function(self, dt, speed)
self.w = 2
self.h = 2
self.transparent = Color.BLACK
self.sprite = 176
self:_draw()
self.w = 1
self.h = 1
self.x = self.x + 4
self.y = self.y + math.floor(self.yOffset)
self.transparent = Color.CYAN
if self.color == Color.GREEN then
self.sprite = 392
elseif self.color == Color.BLUE then
self.sprite = 393
elseif self.color == Color.MAGENTA then
self.sprite = 394
elseif self.color == Color.RED then
self.sprite = 395
end
if self.cleared then
self.sprite = self.sprite - 16
end
self:_draw()
self.x = self.x - 4
self.y = self.y - math.floor(self.yOffset)
end
game:play(4)
return e
end
function portal(x, y)
local p = entity{
x = x,
y = y,
radius = 4,
w = 2,
h = 2,
frameRate = 1 / 6,
frames = {324, 325, 326, 327},
t = 3,
}
p.update = function(self, dt, speed)
local player = game:get("player")
if overlap(self, player) then
self.t = self.t - (dt * speed)
if self.t < 0 then
game.current.x = 1
game.current.y = 0
game.current.dir = Direction.UP
loadRoom(1, 0, Direction.UP)
poof(player.x, player.y)
end
else
self.t = 1.5
end
end
p._draw = p.draw
p.draw = function(self)
self.w = 2
self.h = 2
self.sprite = 178
self.x = self.x - 4
self.y = self.y - 4
self:_draw()
self.w = 1
self.h = 1
self.x = self.x + 4
self.y = self.y + 4
self:animate(dt, game.speed)
self:_draw()
if self.t ~= 1.5 then
circb(self.x + 4, self.y + 4, math.lerp(0, 15, self.t / 1.5), Color.MAGENTA)
end
end
return p
end
function player(x, y)
local p = entity{
x = x, y = y, sprite = 48, frames = {256, 257, 258, 259, 256}, frameRate = 1 / 12, transparent = Color.MAGENTA
}
p.maxHealth = 4
p.health = 4
p.state = PlayerState.MOVE
p.dashTime = 0
p.dashSpeed = 150
p.radius = 3
p.dashLength = 1
p.move = 36
p.bonus = 0
p.lastHit = 0
p.orbAngle = 0
p.isKeyEntity = true
p.chargeCooldown = 0
p.orbs = {}
p.takeHealth = function(self, amount)
self.iframes = 1
if #self.orbs > 0 then
game:add(sphere(self.orbs[#self.orbs]))
table.remove(self.orbs, #self.orbs)
else
self.health = self.health - amount
end
end
p.collide = function(self, dt, speed)
local square = {
{x = 0, y = 0}
}
for index, pos in pairs(square) do
local c = ptm(self.x + 3 + pos.x, self.y + 3 + pos.y)
local tpx = mtp(c.x, c.y)
local ml = false
local mu = false
if tileCollides(mget(c.x, c.y)) then
if self.x < tpx.x then
ml = true
end
if self.y < tpx.y then
mu = true
end
local t = ptm(tpx.x, tpx.y)
if mu then
self.y = self.y - 1
else
self.y = self.y + 1
end
if ml then
self.x = self.x - 1
else
self.x = self.x + 1
end
end
end
end
p.input = function(self, dt, speed)
self:collide(dt, speed)
local cursor = game:get("cursor")
if self.state == PlayerState.MOVE then
if self.chargeCooldown > 0 then
self.chargeCooldown = self.chargeCooldown - (dt * speed)
if self.chargeCooldown < 0 then
self.chargeCooldown = 0
cursor.x = self.x
cursor.y = self.y
end
end
if btn(Button.A) and self.chargeCooldown <= 0 then
cursor.visible = true
game.speed = 0.5
if btnp(Button.A) then
cursor.distance = 30
cursor.x = self.x
cursor.y = self.y
end
local offset = {
x = 0,
y = 0
}
if btn(Button.UP) then
offset.y = offset.y - (150 * dt)
end
if btn(Button.DOWN) then
offset.y = offset.y + (150 * dt)
end
if btn(Button.LEFT) then
offset.x = offset.x - (150 * dt)
end
if btn(Button.RIGHT) then
offset.x = offset.x + (150 * dt)
end
if math.dist(cursor.x + offset.x, cursor.y + offset.y, self.x, self.y) > 50 then
offset = {x = 0, y = 0}
end
cursor.x = cursor.x + offset.x
cursor.y = cursor.y + offset.y
else
if cursor.visible then
game.speed = 1
self.target = math.angle(self.x, self.y, cursor.x, cursor.y) - math.rad(45)
self.state = PlayerState.DASH
self.dashTime = 0
self.dashLength = math.lerp(0, 0.225, math.dist(self.x, self.y, cursor.x, cursor.y) / 50)
cursor.visible = false
sfx(10, "C-5", 30, 1)
end
local offset = {
x = 0,
y = 0
}
local direction = false
if btn(Button.UP) then
offset.y = -(self.move * (dt * speed))
self.frames = {260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270}
self.flip = 0
direction = true
cursor.angle = math.rad(90)
end
if btn(Button.DOWN) then
offset.y = (self.move * (dt * speed))
self.frames = {260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270}
self.flip = 0
direction = true
cursor.angle = math.rad(270)
end
if btn(Button.LEFT) then
offset.x = -(self.move * (dt * speed))
self.frames = {260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270}
self.flip = 0
direction = true
cursor.angle = math.rad(0)
end
if btn(Button.RIGHT) then
offset.x = (self.move * (dt * speed))
self.frames = {260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270}
self.flip = 1
direction = true
cursor.angle = math.rad(180)
end
local tile = ptm(self.x + offset.x + 4, self.y + 4)
if tileCollides(mget(tile.x, tile.y)) then
offset.x = 0
end
if isPit(mget(tile.x, tile.y)) then
sfx(12, "C-4")
self.state = PlayerState.FALL
self.health = self.health - 1
end
if not direction then
self.frames = {256, 257, 258, 259, 260}
end
local tile = ptm(self.x + offset.x + 4, self.y + offset.y + 4)
if tileCollides(mget(tile.x, tile.y)) then
offset.y = 0
end
if isPit(mget(tile.x, tile.y)) then
sfx(12, "C-4")
self.state = PlayerState.FALL
self.health = self.health - 1
end
if not direction then
self.frames = {256, 257, 258, 259, 260}
end
self.x = self.x + offset.x
self.y = self.y + offset.y
local tile = ptm(self.x + 4, self.y + 4)
tile = mget(tile.x, tile.y)
if tile == 16 or tile == 18 then
game.current.y = game.current.y - 1
loadRoom(game.current.x, game.current.y, Direction.UP)
sfx(8, "C-4", 15, 3)
end
if tile == 17 or tile == 19 then
game.current.y = game.current.y + 1
loadRoom(game.current.x, game.current.y, Direction.DOWN)
sfx(8, "C-4", 15, 3)
end
if tile == 32 or tile == 34 then
game.current.x = game.current.x - 1
loadRoom(game.current.x, game.current.y, Direction.LEFT)
sfx(8, "C-4", 15, 3)
end
if tile == 33 or tile == 35 then
game.current.x = game.current.x + 1
loadRoom(game.current.x, game.current.y, Direction.RIGHT)
sfx(8, "C-4", 15, 3)
end
if tile == 120 then
game.current.y = game.current.y - 1
loadRoom(game.current.x, game.current.y, Direction.UP, true)
sfx(8, "C-4", 15, 3)
end
if tile == 121 then
game.current.y = game.current.y + 1
loadRoom(game.current.x, game.current.y, Direction.DOWN, true)
sfx(8, "C-4", 15, 3)
end
if tile == 136 then
game.current.x = game.current.x - 1
loadRoom(game.current.x, game.current.y, Direction.LEFT, true)
sfx(8, "C-4", 15, 3)
end
if tile == 137 then
game.current.x = game.current.x + 1
loadRoom(game.current.x, game.current.y, Direction.RIGHT, true)
sfx(8, "C-4", 15, 3)
end
end
elseif self.state == PlayerState.FALL then
self.fallTime = self.fallTime and self.fallTime + dt or 0.001
self.frames = {271}
self.rotate = self.rotate + 1
if self.fallTime > 0.5 then
loadRoom(game.current.x, game.current.y, game.current.dir)
self.state = PlayerState.MOVE
self.rotate = 0
self.fallTime = 0
end
elseif self.state == PlayerState.DASH then
local tile_ = ptm(self.x + 4, self.y + 4)
if mget(tile_.x, tile_.y) ~= 14 then
self.dashTime = self.dashTime + dt
else
game:add(particle(self.x, self.y, nil, nil, {501}, 0.2))
end
local dts = self.dashSpeed * (dt * speed)
local next = rotate(dts, dts, self.target)
local tile = ptm(self.x + next.x + 4, self.y + next.y + 4, true)
if tileCollides(mget(tile.x, tile.y)) then
for x = 1, 5 do
game:add(particle(self.x, self.y, math.random(-30, 30), 30, {499}, 0.5))
end
self.target = -self.target
self.dashTime = self.dashLength
end
self.rotate = self.rotate + 1
self.radius = 4 + math.clamp(math.floor(self.bonus / 6), 0, 8)
if self.rotate > 3 then
self.rotate = 0
end
if self.dashTime >= self.dashLength then
self.state = PlayerState.MOVE
self.chargeCooldown = 1 - math.min(1, self.bonus * 0.1)
self.hitEntities = {}
self.radius = 3
self.start = nil
self.rotate = 0
self.target = nil
for i = 1, 10 do
game:add(particle(self.x, self.y, nil, nil, {501}, 0.5))
end
end
self.x = self.x + next.x
self.y = self.y + next.y
end
end
p.hitEntities = {}
p.hit = function(self, entity)
local confirmed = false
for index, e in pairs(self.hitEntities) do
if e == entity then
confirmed = true
return false
end
end
if not confirmed then
self.lastHit = 0
table.insert(self.hitEntities, entity)
end
return not confirmed
end
p.iframes = 0
p.update = function(self, dt, speed)
local tile = ptm(self.x + 4, self.y + 4)
self.orbAngle = self.orbAngle + (5 * (dt * speed))
if isActive(mget(tile.x, tile.y)) then
game.shutter = 0
for index, entity in pairs(game:getEntities(function (e) return e.shutter end)) do
game.shutter = game.shutter + entity.shutter
end
if game.shutter ~= game.lastShutter then
sfx(15, "C-4", 15, 3)
end
else
game.shutter = 0
end
self.lastHit = self.lastHit + (dt * speed)
if self.bonus > 0 then
if self.lastHit > 5 then
self.bonus = self.bonus - 1
self.lastHit = 2
end
end
if self.iframes > 0 then
self.visible = not self.visible
self.iframes = self.iframes - (dt * speed)
else
self.visible = true
self.iframes = 0
end
if self.bonus < 0 then
self.bonus = 0
end
end
p.coinsCollected = 0
p._draw = p.draw
p.draw = function(self, dt)
self:_draw(dt)
if self.state == PlayerState.MOVE then
if self.chargeCooldown > 0 then
rect(self.x, self.y - 3, math.lerp(0, 8, 1 - self.chargeCooldown), 2, 13)
end
if game:get("cursor").visible and self.chargeCooldown <= 0 then
circb(self.x + 4, self.y + 4, 50, 13)
end
end
if self.bonus > 0 then
local tw = print(self.bonus, 0, -20)
printf(self.bonus, self.x + 2 - math.floor(tw / 4), self.y - 8, 9, 0)
end
if self.radius > 4 then
circb(self.x + 4, self.y + 4, self.radius, 11)
end
for x = 1, #self.orbs do
local t = rotate(6, 6, math.rad((360 / #self.orbs) * x) + self.orbAngle)
spr(self.orbs[x], self.x + t.x, self.y + t.y, Color.CYAN)
end
end
return p
end
function arrow(x, y, dir)
local e = entity{
x = x, y = y, dir = dir, radius = 4,
frames = {408, 409, 410, 411}
}
if dir == Direction.LEFT then
e.rotate = 1
elseif dir == Direction.DOWN then
e.rotate = 2
elseif dir == Direction.RIGHT then
e.rotate = 3
end
e.update = function(self, dt, speed)
self:checkDamage(dt, speed)
end
e.onTakeDamage = function(self, dt, speed, fresh)
local player = game:get("player")
if fresh then
self.hold = 0
if self.dir == Direction.UP then
player.target = math.angle(0, 0, 0, -1)
elseif self.dir == Direction.DOWN then
player.target = math.angle(0, 0, 0, 1)
elseif self.dir == Direction.LEFT then
player.target = math.angle(0, 0, 1, 0)
elseif self.dir == Direction.RIGHT then
player.target = math.angle(1, 0, 0, 0)
end
game:add(particle(player.x, player.y, nil, nil, {501}))
player.target = player.target - math.rad(45)
end
if self.hold < 0.1 then
player.x = self.x
player.y = self.y
self.hold = self.hold + (dt * speed)
else
self.damaged = false
end
end
return e
end
function evilOrb(x, y)
local orb = enemy(x, y)
orb.health = 4
orb.maxHealth = 4
orb.transparent = Color.MAGENTA
orb.bounceFrames = {440, 441, 442, 443, 456}
orb.walkFrames = {456, 457, 458, 459, 472, 473, 474, 475, 488, 489, 490, 491}
orb.frames = orb.bounceFrames
orb.frameRate = 1 / 12
orb.angle = 0
orb.charge = 0
orb.state = 0
orb.dashTime = 0
orb.chargesDone = 0
orb.hold = {}
orb.vel = 15
orb.empowered = (game.current.x == 1)
if orb.empowered then
orb.health = 6
orb.maxHealth = 6
poof(orb.x, orb.y, true)
end
orb.update = function(self, dt, speed)
if self.health <= 0 then
game:remove(self)
poof(self.x, self.y)
end
if not self:checkDamage(self, dt, speed) then
local player = game:get("player")
if self.state == 0 then
self.charge = self.charge + (dt * speed)
if self.charge > 1 then
local weight = {1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 5, 5, 5}
if not self.empowered then
weight = {2, 2, 2, 2, 3, 3}
end
self.state = weight[math.random(1, #weight)]
self.charge = 0
self.vel = 15
end
elseif self.state == 1 then
self.vel = self.vel - (5 * (dt * speed))
if #self.hold < 8 then
while #self.hold < 8 do
local b = bomb(self.x, self.y)
b.angle = #self.hold * 40
table.insert(self.hold, b)
game:add(b)
end
else
for index, held in ipairs(self.hold) do
local vel = rotate(self.vel, self.vel, held.angle)
held.x = held.x + (vel.x * (dt * speed))
held.y = held.y + (vel.y * (dt * speed))
if game:get(held.name) == nil or held.class == "coin" then
table.remove(self.hold, index)
end
end
end
if self.vel < 0 then
self.state = 0
self.hold = {}
end
elseif self.state == 2 then
self.charge = self.charge + (dt * speed)
self.angle = math.angle(self.x + 4, self.y + 4, player.x + 4, player.y + 4) - math.rad(45)
if self.chargesDone > 2 then
self.state = 0
self.chargesDone = 0
end
if self.charge > 1 then
self.state = 4
poof(self.x, self.y, true)
end
elseif self.state == 3 then
self.angle = math.angle(self.x + 4, self.y + 4, player.x + 4, player.y + 4) - math.rad(45)
self.dashTime = self.dashTime + (dt * speed)
if self.dashTime > 0.25 then
self.chargesDone = self.chargesDone + 1
game:add(star(self.x, self.y, game:get("player")))
self.dashTime = 0
end
if self.chargesDone > 2 then
self.chargesDone = 0
self.dashTime = 0
self.state = 0
end
elseif self.state == 4 then
local target = rotate(150, 150, self.angle)
target = {
x = target.x * (dt * speed),
y = target.y * (dt * speed)
}
self.dashTime = self.dashTime + (dt * speed)
if self.dashTime > 0 then
self.rotate = self.rotate + 1
if self.rotate > 3 then
self.rotate = 0
end
local tile = ptm(self.x + target.x + 4, self.y + target.y + 4)
local tileID = mget(tile.x, tile.y)
if tileCollides(tileID) then
self.state = 0
self:takeHealth(1)
else
self.x = self.x + target.x
self.y = self.y + target.y
if overlap(self, player) then
if player.iframes == 0 and player.state == PlayerState.MOVE then
player:takeHealth(1)
end
end
end
end
if self.dashTime > 0.2 then
self.angle = math.angle(self.x, self.y, player.x, player.y) - math.rad(45)
self.state = 2
self.chargesDone = self.chargesDone + 1
if self.chargesDone > 2 then
self.state = 0
self.dashTime = 0
self.chargesDone = 0
self.rotate = 0
end
end
elseif self.state == 5 then
self.dashTime = self.dashTime + (dt * speed)
if self.dashTime > 0.1 then
self.dashTime = 0
self.chargesDone = self.chargesDone + 1
game:add(bullet(self.x, self.y, 20 * self.chargesDone))
end
if self.chargesDone > 18 then
self.state = 0
end
end
end
end
orb.onTakeDamage = function(self, dt, speed, fresh)
if fresh then
poof(self.x, self.y)
self:takeHealth(1)
self.damaged = false
end
end
orb.__draw = orb.draw
orb.draw = function(self)
self:__draw()
if self.state == 2 then
local target = rotate(math.lerp(0, 30, self.charge), math.lerp(0, 30, self.charge), self.angle)
line(self.x + 4, self.y + 4, self.x + target.x + 4, self.y + target.y + 4, Color.RED)
spr(460, self.x + target.x, self.y + target.y, Color.BLACK)
end
end
game:play(2)
return orb
end
function health(x, y)
return entity{
visAge = 0,
lastHealth = game:get("player").maxHealth,
isKeyEntity = true,
update = function(self, dt, speed)
local player = game:get("player")
player.health = math.clamp(player.health, 0, player.maxHealth)
if self.lastHealth ~= player.health then
if self.lastHealth > player.health then
self.visAge = 0
player.iframes = 1
self.lastHealth = player.health
sfx(13, "C-4", 15, 3)
if player.bonus > 0 then
player.bonus = 0
for x = 1, 5 do
game:add(particle(player.x + 4, player.y - 8, nil, math.random(-30, 0), {502}, 0.3))
end
sfx(5, "C-4", 15, 3)
end
for x = 1, math.random(1, 5) do
game:add(
particle(4 + math.lerp(0, 41, player.health / player.maxHealth), 4,
math.random(-15, 15),
-(math.random(15, 25)),
{500})
)
end
else
self.visAge = 0
end
if self.lastHealth <= 0 then
self.lastHealth = player.health
game.current.x = game.start.x
game.current.y = game.start.y
loadRoom(game.start.x, game.start.y)
player.health = player.maxHealth
player.x = game.playerSpawn.x
player.y = game.playerSpawn.y
end
end
if player.health == player.maxHealth then
self.visible = (self.visAge < 2)
self.visAge = self.visAge + dt
else
self.visible = true
end
end,
draw = function(self, dt)
local player = game:get("player")
spr(466, 1, 1, Color.MAGENTA)
spr(482, 1, 5, Color.MAGENTA)
spr(467, 9, 1, Color.MAGENTA)
spr(483, 9, 5, Color.MAGENTA)
spr(467, 16, 1, Color.MAGENTA)
spr(483, 16, 5, Color.MAGENTA)
spr(467, 24, 1, Color.MAGENTA)
spr(483, 24, 5, Color.MAGENTA)
spr(467, 32, 1, Color.MAGENTA)
spr(483, 32, 5, Color.MAGENTA)
spr(468, 40, 1, Color.MAGENTA)
spr(484, 40, 5, Color.MAGENTA)
rect(4, 4, math.lerp(0, 41, player.health / player.maxHealth), 7, 11)
printf(string.format("%i / %i", player.health, player.maxHealth), 12, 5, 0, 15)
end
}
end
function scorer(x, y)
return entity{
frames = {310},
isKeyEntity = true,
w = 1, h = 1,
x = x, y = y,
transparent = 1,
visAge = 0,
update = function(self, dt, speed)
self.visAge = self.visAge + dt
self.visible = (self.visAge < 1)
end,
_draw = entity().draw,
draw = function(self, dt)
self:_draw(dt)
printf(game.score, self.x + 10, self.y + 1, 15, 0)
end
}
end
function overlap(a, b)
local dist = math.dist(a.x + (4 * a.w), a.y + (4 * a.h), b.x + (4 * b.w), b.y + (4 * b.h))
return (dist < (a.radius + b.radius))
end
function snake(x, y)
return entity{
frameRate = 1 / 12,
frames = {288, 289, 290, 291, 290, 289},
x = x,
y = y
}
end
function coin(x, y, isValid)
local frames = {310, 310, 310, 310, 310, 304, 305, 306, 307, 308, 309}
if isValid == nil then
isValid = true
else
isValid = false
end
if not isValid then
frames = {324, 325, 326, 327}
end
return entity{
isValid = isValid,
frames = frames,
x = x,
class = "coin",
y = y,
collected = false,
collectAge = -0.1,
update = function(self, dt, speed)
dt = dt * speed
if not self.collected then
local player = game:get("player")
if overlap(self, player) then
if self.isValid then
self.frames = {310, 311, 312, 311}
else
self.frames = {328, 329, 330, 331}
end
self.collected = true
sfx(1, "G-4", -1, 3)
for x = 1, 5 do
game:add(particle(self.x, self.y, math.random(-15, 15), 30, self.isValid and {498} or {502} ))
end
if player.state == PlayerState.DASH then
if self.isValid then
if player.bonus < 3 then
score("TINY", self.x, self.y)
elseif player.bonus < 6 then
score("SMALL", self.x, self.y)
elseif player.bonus < 10 then
score("MEDIUM", self.x, self.y)
end
end
else
if self.isValid then
score("TINY", self.x, self.y)
end
end
end
else
self.collectAge = self.collectAge + dt
if self.isValid then
self.y = self.y - ((75 * dt) * math.sign(self.collectAge))
end
if self.collectAge > 1 then
game:remove(self)
end
end
end
}
end
function heart(x, y)
return entity{
frames = {313, 314, 315, 316, 317, 318, 319},
x = x,
y = y,
update = function(self, dt, speed)
local player = game:get("player")
if overlap(self, player) then
if player.health + 1 <= player.maxHealth then
player.health = player.health + 1
game:remove(self)
for x = 1, 5 do
game:add(particle(self.x, self.y, nil, nil, {502}))
end
sfx(14, "C-4", 15, 3)
end
end
end
}
end
function squid(x, y)
return entity{
frameRate = 1 / 12,
frames = {272, 273, 274, 275, 274, 273},
x = x,
y = y
}
end
function dog(x, y)
return entity{
frameRate = 1 / 12,
frames = {320, 321, 322, 323},
x = x,
y = y
}
end
function bomb(x, y, friendly)
local bomb = entity{
x = x, y = y,
frames = friendly and {333, 334, 335} or {349, 350, 351},
frameRate = 1 / 6,
radius = 3,
class = "bullet",
age = 0,
friendly = friendly and friendly or false,
fuse = 3,
lastPart = 0,
update = function(self, dt, speed)
self.frameRate = 1 / math.lerp(1, 60, self.age / self.fuse)
if self.lastPart > 0.25 then
game:add(particle(self.x, self.y, math.random(-15, 15), 50, {499}))
self.lastPart = 0
else
self.lastPart = self.lastPart + (dt * speed)
end
self.age = self.age + (dt * speed)
if self.age > self.fuse then
for x = 1, 9 do
local shot = bullet(self.x, self.y, math.rad(x * 40))
shot.friendly = self.friendly
game:add(shot)
end
sfx(19, "C-4", 15, 3)
game:remove(self)
end
end
}
return bomb
end
function ufo(x, y)
local u = enemy(x, y)
u.frames = {328, 329, 330, 331, 332, 333, 334}
u.transparent = Color.MAGENTA
u.health = 2
u.maxHealth = 2
u.frameRate = 1 / 12
u.shotWatch = 3.5
u.shotCooldownX = 0
u.shotsFired = 0
u.shotCooldown = 0
u.transparent = Color.MAGENTA
u.shouldFlit = 0
u.update = function(self, dt, speed)
if not self:checkDamage(dt, speed) then
self.shotCooldown = self.shotCooldown + (dt * speed)
self.shouldFlit = self.shouldFlit + (dt * speed)
self.frameRate = 1 / (12 + (self.shotCooldown * 10))
if self.shotCooldown > self.shotWatch then
self.shotCooldownX = self.shotCooldownX + (dt * speed)
if self.shotCooldownX > 0.2 then
self.shotCooldownX = 0
self.shotsFired = self.shotsFired + 1
for i = -1, 1 do
local player = game:get("player")
local a = math.angle(self.x, self.y, player.x, player.y)
game:add(bullet(self.x, self.y, a + (i * math.rad(15))))
end
if self.shotsFired > 2 then
self.shotCooldown = 0
self.shotCooldownX = 0
self.shotsFired = 0
end
end
end
if self.shouldFlit > 1 then
self.shouldFlit = 0
local target = rotate(15, 15, math.rad(math.random(360)))
local t = ptm(self.x + target.x, self.y + target.y)
while not isActive(mget(t.x, t.y)) or tileCollides(mget(t.x, t.y)) do
target = rotate(15, 15, math.rad(math.random(360)))
t = ptm(self.x + target.x, self.y + target.y)
end
poof(self.x, self.y, true)
self.x = self.x + target.x
self.y = self.y + target.y
end
end
end
u.onTakeDamage = function(self, dt, speed, fresh)
if fresh then
self:takeHealth(1)
self.damaged = false
end
end
return u
end
function tank(x, y)
local tank = entity{
frames = {477},
x = x, y = y,
w = 3, h = 3,
transparent = 12,
dir = 1,
offset = 4,
doingZone = false,
state = 0,
steal = 0,
orbLocs = {
{10, 7},
{10, 9},
{18, 7},
{18, 9}
},
orbs = {},
collectedOrbs = 0,
}
game.collapse = 50
tank.angle = 0
tank.update = function(self, dt, speed)
game.collapse = 1
local collectedOrbs = 0
for index, flag in pairs({'has_r', 'has_g', 'has_b', 'has_m'}) do
if game.flags[flag] then
collectedOrbs = collectedOrbs + 1
end
end
if not game.flags.opened_final_zone then
if game.flags.has_r and
game.flags.has_g and
game.flags.has_m and
game.flags.has_b and
not self.doingZone then
for index, loc in pairs(self.orbLocs) do
local orb = entity{loc[1] * 8, loc[2] * 8}
orb.startX = loc[1] * 8
orb.startY = loc[2] * 8
orb.frames = {(mget(loc[1], loc[2]) + 16)}
mset(loc[1], loc[2], 2)
table.insert(self.orbs, orb)
game:add(orb)
end
self.doingZone = true
game:play(5)
self.shutter = 1
end
else
self.state = 3
self.frames = {429}
game:play(3)
end
if self.doingZone then
game:play(5)
if self.state == 0 then
self.steal = self.steal + (dt * speed)
for index, orb in pairs(self.orbs) do
orb.x = math.lerp(orb.startX, self.x + 8, self.steal)
orb.y = math.lerp(orb.startY, self.y + 8, self.steal)
if math.random(1, 100) == 1 then
game:add(particle(orb.x, orb.y))
end
end
if self.steal > 1 then
self.state = 1
for index, orb in pairs(self.orbs) do
orb.visible = false
end
end
elseif self.state == 1 then
self.frames = {429}
sfx(24, "C-4", -1, 3)
self.state = 2
game.broken = true
for x = 1, 10 do
local p = particle(self.x + 8, self.y + 8)
p.transparent = Color.MAGENTA
if math.random(1, 2) == 1 then
p.frames = {444}
else
p.frames = {428}
end
game:add(p)
end
elseif self.state == 2 then
self.offset = self.offset - (10 * (dt * speed))
self.angle = self.angle + (3 * (dt * speed))
for index, orb in ipairs(self.orbs) do
local target = rotate(10, 10, self.angle + (index * math.rad(90)))
orb.visible = true
orb.x = self.x + 8 + target.x
orb.y = self.y + 8 + target.y + self.offset
end
local tile = ptm(self.x, self.y + math.floor(self.offset))
local t = mget(tile.x, tile.y)
if tileCollides(t) and t ~= 115 then
mset(tile.x, tile.y, 16)
mset(tile.x + 1, tile.y, 18)
mset(tile.x + 2, tile.y, 16)
mset(tile.x + 0, tile.y + 1, 40)
mset(tile.x + 1, tile.y + 1, 40)
mset(tile.x + 2, tile.y + 1, 40)
poof(self.x, self.y + self.offset, true)
self.state = 3
for index, orb in pairs(self.orbs) do
game:remove(orb)
end
game.flags.opened_final_zone = true
--game:stop()
end
end
end
end
tank.onRemove = function(self)
game.collapse = 0
end
tank._draw = tank.draw
tank.draw = function(self)
if self.doingZone then
if self.state ~= 3 then
self.x = self.x + 4
self.y = self.y + math.floor(self.offset)
if self.state == 0 then
self.sprite = 366
else
self.sprite = 364
end
self.w = 2
self.h = 2
self:_draw()
self.x = self.x - 4
self.y = self.y - math.floor(self.offset)
end
end
if not self.doingZone and not game.flags.opened_final_zone then
self.x = self.x + 4
self.y = self.y + math.floor(self.offset)
if self.collectedOrbs <= 2 then
self.sprite = 398
else
self.sprite = 366
end
self.w = 2
self.h = 2
self:_draw()
self.x = self.x - 4
self.y = self.y - math.floor(self.offset)
end
self.sprite = self.frames[self.frameIndex]
self.w = 3
self.h = 3
self:_draw()
end
game:play(3)
return tank
end
function particle(x, y, velX, velY, frames, age, update)
local cloud = entity{
x = x,
transparent = 0,
y = y,
alwaysVisible = true,
frames = frames and frames or {499},
velX = velX and velX or math.random(-50, 50),
velY = velY and velY or math.random(-50, 50),
age = age and age or 1,
animated = true,
}
cloud._update = update
cloud.update = function(self, dt, speed)
self.age = self.age - dt
if self._update then
self:_update(dt, speed)
end
self.y = self.y - (self.velY * dt)
self.x = self.x + (self.velX * dt)
if self.age <= 0 then
game:remove(self)
end
end
return cloud
end
--
--
-- GAME LOOP
--
--
function TIC()
lt = t
t = time()
dt = (t - lt) / 1000
table.insert(dts, dt)
if #dts > 60 then
while #dts > 60 do
table.remove(dts, 1)
end
end
local totalDT = 0
for index, timer in pairs(dts) do
totalDT = totalDT + timer
end
avg_dt = totalDT / #dts
if game.queuePlay and game.flags.music then
game.playing = game.queuePlay
music(game.playing)
game.queuePlay = false
end
game.lastShutter = game.shutter
game.timer = game.timer + dt
if game.timer > 1 then
while game.timer > 1 do
game.timer = game.timer - 1
end
end
game.qs = game.qs + dt
if game.qs > 0.25 then
GlitchTiles = {}
game.qs = 0
end
game:update(dt, game.speed)
cls(Camera.bg)
map(cam())
game:draw()
game:cleanup()
end
function init()
game.scenes.play = scene(function ()
loadRoom(game.start.x, game.start.y)
end)
game:load()
game.activeScene = "play"
end
function exit()
mset = _mset
mget = _mget
btn = _btn
btnp = _btnp
end
function scanline(index)
local pal = "00000044283430346d4e4a4e854c30346524d04648617165597dce00ff000000ffff0000fa00ff00fafffffa00ffffff"
if game.broken then
pal = "140c1c44243430346d4e4a4e854c30346524d04648757161597dced27d2c8595a16daa2cd2aa996dc2cadad45edeeed6"
end
for i=1,#pal,2 do
poke(0x3FC0 +i//6*3+i//2%3,tonumber(pal:sub(i,i+1),16))
end
end
init()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment