From 68b5c32bbc87ba034a1d8c810613b98c2cc79590 Mon Sep 17 00:00:00 2001 From: Markus Scully Date: Sat, 15 Jun 2013 13:06:51 +0100 Subject: [PATCH] Version 0.1 --- .gitattributes | 22 +++ .gitignore | 215 +++++++++++++++++++++++++ favicon.png | Bin 0 -> 305 bytes index.php | 21 +++ newsprites.png | Bin 0 -> 2213 bytes sint.js | 415 +++++++++++++++++++++++++++++++++++++++++++++++++ sprites.png | Bin 0 -> 1247 bytes sprites2.png | Bin 0 -> 845 bytes 8 files changed, 673 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 favicon.png create mode 100644 index.php create mode 100644 newsprites.png create mode 100644 sint.js create mode 100644 sprites.png create mode 100644 sprites2.png diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9d6bd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/favicon.png b/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0b6472de0217e2fef34c754d2a204cf2f9e76d GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#eE?xbr!^)s7#JAXOFVsD+3&JS3bUw3G{+Y)Ffi=%ba4!^IDK@IE!QCj zf!6y18-*{eV$oTSRf!3G;8bqoloBVS&BufknqO81^#yv>P0(xR}rI=RWV6KIS#wls+}p zoSm}%km)M!2-C-=NoMv*8y9}ylnUUzSE;ahlM=(5ycw?=W&S)6opPh8$7W&>qweg! zeIFliUEa9;AG_R^bNusk4`q3MOpyB6ASZXH?V+rSV$RQ_g-7xj7#J8lUHx3vIVCg! E0D9YUlmGw# literal 0 HcmV?d00001 diff --git a/index.php b/index.php new file mode 100644 index 0000000..3770f05 --- /dev/null +++ b/index.php @@ -0,0 +1,21 @@ + + + + + + Sint + + + + + + + + + + \ No newline at end of file diff --git a/newsprites.png b/newsprites.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a4ec3cdd0282a609a1e73e1426bc88bfcd009f GIT binary patch literal 2213 zcmeAS@N?(olHy`uVBq!ia0y~yU?^u`V2I*i0*PeCnKCdiu$2V)1v7v_-ZJ)y3=9mM z1s;*b3=CW!K$y{KjmZoK1`bzG7srr_TW{yYXG|@XI9_jDsO!VZsXR%LWw+oFZT&qT zPQ|`cN|J1uc-1p|vTF9^K<}k5p9r+;&YHvR_`&JZp$U>6aS~094{`-q0zF#4@UNV} z6*>R@?_dAw_J7{@e9rT7v+q*xDl07JeE(4!vhVl1-_`S;*P18$gtupIS@K!va_QSy zoj(81pE-9dE$q|#7r#!Fs0Q!-@3Kr=(oD@L_T#*O;QOf%9e&&w5U%3UIH z{?kKUNmp0SIAC)+I5=#163ERr{!3Vi3eV7wNz%-^GzI?`gOATEC+#&m!%Lj(}{BJo(nV>cYwy2Vzbx?A^a0 z*syWuB+uk!%0)&AKaU(Zuw1b45clTQn~I-DfDDP>kx;6oW^n$~lO-VgH%+=9Uo8T5 z>7LCG#lQ}DxY|l|qC3;H)w|1Tg+NZey}jR!#o+v>pPxZa{jB5f6EU}oQ%C#f*Qt3R zmxdP=-0go6;*+rNr?-Siu~x#*!?M=rTtHf`tz`!V_0Kz&pa80zcKkTV?bD|I`SVE% zr1k!^wR<~3zVQk&7bvz$*tsqD_DWFDzI!d*3G(dbbdZK;k#e$Itwe<*!irumy$Z6b z?#PRud?0t%|5jI@J>zP_)0zABO%^nKtoeG?mv3?%Aic)vYd}Uv%1Len>-}`OyB`uh z+js2;#nb0QKD$f|vl&mz=iajs26=V18LunI-7hagyvolX4e{#3)=-eO>r(E&$_EFw zr&VExrSyhBACL831vxlw|G%>!+OG5zC|2e@{rel_@@Z4=)Z9B2>65VT$=A^M#o*W} zsS+#JOZb`Me|{rK$GdlF&KuX~GB7-gTzB0!rE1#EW|y?EPk)O+iG205)h9|+|HvyB zYpPB=xZ{h?YpKmGXP3K4Ea`0OFdJ!>$pa8|3d4X zMrB32;`NgEuleqEYDf5@?|)D2c)$GnhSNLR*Pc(F^3kTvE;{7cX4hYHVkFO>d}%yC z)#mfcY@fT2UW>(hTUCk8pWG|f6xX|K#>-~I{>oWLS*4Z23g6g7>Y3+!G>q{xi{hv< zot3nV|Cr6QOfm7Cj)^uNEG*K zSMp59;}%Z7?FSt(o#In|fmi3UQ%B76$YrepJM&Uzia9;8I&P%fa-y{F>CTo@QBJQ* z%>4b;mh`K~H%w$Yy+zb4)Q(_UW9=$dIK@p;Db z$e0a^NutNkUDlgk{M~EHQ`ZeX>#xmw`lYOM(;6M^)2B9}QF{)l<=hq1{k_fO`ixyi zuj}rcR`Ny1Zd>=yq=OQMWj&h7XC+L`dLxr>N|YbI8_FYo`)JL^gdPd&V^cP!@kq@+ zwq|2akM)k-T@RCX&(Ig^5llWl!{}O%WAf!0rqg;0+snfZV{*hlA8j&BdLt2hY?fh0 zj@0I3n+)H5c$a1S?u&F@jhOuHqcv}px7F6(FkIGSntb7gNm_4e@*Upt@X6{2)?#r- zMY-rS*SgDUOBz!r-rvH>86o!5clLw{5RPWI<=-Nm%T5MloC`%4 zDlXJrXn7K8*5=k!*0ikYS`%BdS#w(RwB}=n?RpmK=+8~P_3)d{ZFi$7si~2XVbi9f zQcp$A6JKx3xVhbR*Rdeekrf3vfZv({@Fnb?L8ay63;5`_ED;REO~lw z+jQN?cN>lgzKT11I!xzz+~L#9bY?%uOHIJbYw-oa?K3#g%q_jurG_QzBagWmJ#4Q&# zby`mB>YG@{8+1J5M|j7-x^%uko$ZPnR8M=a%X})4yJ&54#kB5yF(o~}rFCT=C#FU| zskMyAtNfKY<;uxcF{!TgO9iagpNuTfxDnVq=VEiPY3<$L}%+f8TUX#8tPduv&5ZEbAiQlFMv- zmAlN|G5R#04i~P!b~JnE)xzstkJy(z)rgNP>V0wAw{;IkeBb*6Us~Qd?D_gM^P -1){ + this.actor.action(actions[i][1]); + } + } + this.actor.refreshActions(); + } +} + +function Ai(object, ai){ + this.actor = object; + this.aivars = [0, 0, 0]; + this.run = function(){ + switch(ai){ + case 'alphaBot': + var playerIndex = -1; + var topDistance = 400; + for(i in actors){ + if(actors[i].image == 0 && Math.abs(actors[i].x - this.actor) < topDistance){ + playerIndex = i; + topDistance = Math.abs(actors[i].x - this.actor) - 50; + } + } + if(playerIndex >= 0){ + + } + break; + case 'pace': + if(this.aivars[0] == 0 || this.actor.x < -300 || this.actor.x > 300){ + this.aivars[0] = (this.actor.x > 0 ? -1 : 1); + } + if(this.xvel == 0){ + this.action('jump'); + } + this.actor.xvel += ((0.02 * this.aivars[0]) * speed); + } + } +} + +function Actor(type, health, power, xpos, ypos){ + this.image = type; + this.health = health; + this.power = power; + this.xvel = this.yvel = this.jump = 0; + this.imageLoad = 2; + this.right = false; + this.left = false; + this.down = false; + this.up = false; + this.x = xpos; + this.y = ypos; + this.oneactions = []; + this.actionsturn = []; + + this.refreshActions = function(){ + this.oneactions = []; + for(i in this.actionsturn){ + this.oneactions.push(this.actionsturn[i]); + } + } + + this.action = function(type){ + switch(type){ + case 'moveLeft': + this.xvel -= (0.05 * speed); + break; + case 'moveRight': + this.xvel += (0.05 * speed); + break; + case 'jump': + this.yvel = (this.down ? -4 - this.power : this.yvel); + break; + case 'melee': + this.yvel = -6; + break; + case 'camera': + camera = [this]; + break; + case 'stream': + particles.push(new Particle(0, 0, 60000, this.x, this.y - 1, this.xvel * 3 + ((Math.random() - 0.5) * 10), -3 + this.yvel * 3)); + break; + case 'bounce': + particles.push(new Particle(1, 0, 5000, this.x, this.y - 1, this.xvel * 2 + ((Math.random() - 0.5) * 5), -5 + this.yvel * 3)); + break; + case 'flo': + particles.push(new Particle(2, 0, 100000, this.x, this.y - 16, this.xvel * 4 + ((Math.random() - 0.5) * 10), -10)); + break; + } + this.actionsturn.push(type); + } + + this.xCheck = function(){ + this.left = this.right = false; + for(j in actors){ + if(actors[j].image != this.image){ + if(actors[j].x + 17 > this.x && this.x > actors[j].x && this.sameY(actors[j])){ + this.left = true; + this.x = actors[j].x + 16; + this.xvel = (this.xvel < 0 ? 0 : this.xvel); + } + if(this.x + 17 > actors[j].x && this.x < actors[j].x && this.sameY(actors[j])){ + this.right = true; + this.x = actors[j].x - 16; + this.xvel = (this.xvel > 0 ? 0 : this.xvel); + } + } + } + } + + this.yCheck = function(){ + this.up = this.down = false; + if(this.y >= 216){ + this.down = true; + this.y = 216; + this.yvel = 0; + } + for(j in actors){ + if(actors[j].image != this.image){ + if(this.y + 15 > actors[j].y && this.y < actors[j].y + 15 && this.sameX(actors[j])){ + this.down = true; + this.y = actors[j].y - 18; + this.yvel = 0; + } + } + } + } + + this.sameY = function(obj){ + return (this.y < obj.y + 15 && this.y + 15 > obj.y); + } + + this.sameX = function(obj){ + return (this.x + 16 > obj.x && this.x < obj.x + 16); + } + + this.simulate = function(){ + this.y += this.yvel; + this.yCheck(); + if(this.down){ + if(this.yvel > 10){ + this.yvel *= -0.2; + this.y -= 1; + }else{ + this.yvel = 0; + } + }else{ + this.yvel += 0.03 * speed; + } + this.x += this.xvel; + this.xCheck(); + this.xvel /= 1 + (0.005 * speed); + } + + this.draw = function(){ + context.drawImage(spritesheet, this.image * 17, 0, 16, 16, r(this.x - lookx), r(this.y - 16 - looky), 16, 16); + context.globalAlpha = 1; + context.drawImage(spritesheet, this.image * 17, 17, 16, 16, r(this.x - lookx), r((216 - (this.y - 216)) - looky), 16, 16); + // StartX, StartY, EndX, EndY + var gradient = context.createLinearGradient(r(this.x - lookx), r((214 - (this.y - 216)) - looky - 5), r(this.x - lookx), r((214 - (this.y - 216)) - looky) + 16); + gradient.addColorStop(0.1, 'rgba(255, 255, 255, 0)'); + gradient.addColorStop(0.9, 'rgba(255, 255, 255, 1)'); + context.fillStyle = gradient; + context.fillRect(r(this.x - lookx), r((216 - (this.y - 216)) - looky), 16, 16); + context.globalAlpha = 1; + context.fillStyle = "#444"; + context.font = "10pt Arial"; + context.fillText(actors[0].sameY(actors[1]), 10, 100); + //context.fillText(particles[0].deleteme, 10, 120); + } + //this.xvel += (canMove(xpos, ypos, '-1', this.xvel)); +} + +function Particle(type, affiliation, lifespan, xpos, ypos, xvel, yvel){ + this.x = xpos; + this.y = ypos; + this.xvel = xvel; + this.yvel = yvel; + this.type = type; + this.life = lifespan; + this.size = [3, 5, 7][type]; + this.created = this.timeup = new Date(); + this.timeup = new Date(this.timeup.getTime() + lifespan); + this.deleteme = false; + var angle = Math.random() * 360 + this.addx = Math.sin(angle) * ((particles.length + 200) / 5); + this.addy = Math.cos(angle) * ((particles.length + 200) / 10); + + this.draw = function(){ + //context.beginPath(); + //context.rect(this.x, this.y, 3, 3); + switch(this.type){ + case 0: + context.globalAlpha = 1; + context.lineWidth = 1; + context.strokeStyle = '#66b'; + context.strokeRect(r(this.x - lookx) + 0.5, r(this.y - looky) + 0.5, 2, 2); + context.strokeStyle = '#aaf'; + context.strokeRect(r(this.x - lookx) + 0.5, r(213 - (this.y - 216) - looky) + 0.5, 2, 2); + break; + case 1: + context.globalAlpha = 1; + context.lineWidth = 2; + context.strokeStyle = '#b79'; + context.strokeRect(r(this.x - lookx) + 0.5, r(this.y - looky) + 0.5, 4, 4); + context.strokeStyle = '#fac'; + context.strokeRect(r(this.x - lookx) + 0.5, r(213 - (this.y - 216) - looky) + 0.5, 4, 4); + break; + case 2: + context.globalAlpha = 0.2; + context.lineWidth = 1; + context.strokeStyle = '#363'; + context.strokeRect(r(this.x - lookx) + 0.5, r(this.y - looky) + 0.5, 5, 5); + context.strokeStyle = '#7b7'; + context.strokeRect(r(this.x - lookx) + 0.5, r(213 - (this.y - 216) - looky) + 0.5, 5, 5); + context.globalAlpha = 1; + break; + } + } + + this.onGround = function(){ + return (this.y + this.size >= 216); + } + + this.simulate = function(){ + switch(this.type){ + case 0: + this.yvel += (this.onGround() ? 0 : 0.01 * speed); + this.xvel /= 1 + (0.005 * speed); + this.x += this.xvel; + this.y += this.yvel; + if(this.onGround()){ + this.y = 216 - this.size; + this.yvel = 0; + } + break; + case 1: + this.yvel += (this.onGround() ? 0 : 0.007 * speed); + this.xvel /= 1 + (0.001 * speed); + this.x += this.xvel; + this.y += this.yvel; + if(this.onGround()){ + this.y = 216 - this.size; + this.yvel = (this.yvel > 2 ? this.yvel * -0.7 : 0); + } + break; + case 2: + this.yvel /= 1 + (0.005 * speed); + this.xvel /= 1 + (0.005 * speed); + this.x += this.xvel; + this.y += this.yvel; + if(this.onGround()){ + this.y = 216 - this.size; + this.yvel = 0; + } + for(j in camera){ + var distance = Math.sqrt(Math.pow(camera[j].x - this.x, 2) + Math.pow(camera[j].y - this.y, 2)); + var xmov = camera[j].x - ((this.addx / (distance / 10)) + 8) - this.x; + var ymov = camera[j].y - ((this.addy / (distance / 10)) + 0) - this.y; + this.xvel += (xmov > 0 ? 1 : -1) / (((distance + 10) / 5) / Math.abs(xmov / 10)) + (Math.random() - 0.5) * 0.4; + this.yvel += (ymov > 0 ? 1 : -1) / (((distance + 10) / 5) / Math.abs(ymov / 10)) + (Math.random() - 0.5) * 0.4; + if(distance < 35 && this.y < camera[j].y && camera[j].yvel > -1){ + camera[j].yvel -= (this.y < 50 ? this.y / 3000 : 0.05) + } + } + break; + } + if(thisLoop > this.timeup){ + this.deleteme = true; + } + } +} + +// Run game. + +var speed; +var lastLoop = new Date(); +var thisLoop = lastLoop; +function loopGame(){ + canvas.style.margin = (window.innerHeight > 360 ? window.innerHeight / 2 - 180 + 'px auto' : '10px auto'); + lastLoop = thisLoop; + thisLoop = new Date(); + speed = (thisLoop - lastLoop); + speed = (speed > 50 ? 50 : speed); + context.clearRect(0, 0, 500, 350); + lookx = looky = 0; + looky = -0; + for(i in camera){ + lookx += (camera[i] instanceof Array ? camera[i][0] : camera[i].x) - 250; + // looky += (camera[i] == instanceof Array ? camera[i][1] : camera[i].y) - 175; + } + lookx /= camera.length; + looky /= camera.length; + /* + if( instanceof Array){ + lookx = camera[0]; + looky = camera[1]; + }else{ + lookx = camera.x - 250 + camera.xvel * 5; + looky = 0; + } + */ + for(i in controllers){ + controllers[i].checkKeys(); + } + for(i in actors){ + actors[i].simulate(); + actors[i].draw(); + } + for(i in ais){ + ais[i].run(); + } + for(i in particles){ + particles[i].simulate() + particles[i]. draw() + if(particles[i].deleteme || particles.length > 3000){ + particles.splice(i, 1); + i--; + } + } +} \ No newline at end of file diff --git a/sprites.png b/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..212c69d8cc9d7452db9e9612e0e6f11970cc9267 GIT binary patch literal 1247 zcmeAS@N?(olHy`uVBq!ia0y~yU@%}{U~u4IVqjpn?366Xz`(#+;1OBOz`*qZgc+UI zn9N{cV43LY;uw-~@9m6>+0m&I$Ko@&{>qCi_bCj&)YP0LxaGp#8>I@;3sbeOh^aSk zb)30l3G2-l9?#D{TcG=Df?>4&DucJ4w^CvgHC>|HZ{_x^%?Xfvz3tZBH(76v-JkyX zsm|+F_iyJkDnI$KJHvn8oX=mX@4c_J*HS7~I-k?x^?K>LZcW=%QbNPeIU7hbvKci&%a$idPhdvEXp4dvwN1NBpexRJK zap~voNEPuDf5h)(imEm)Y&|=%A;>)YojC8_|Eoa~YZm4%QZX?3p0q^d{@KUo-EC#h zf4si?=G;&Hh|1t8ENw;lE_0?xyqfWBefed>T;9EUUQEt6eFfE3+ZJVR_V8Pj`Jc6Z zznT}5v+()r7Mg}zK5vOsQMdMwc3$5#>A-~_#io98QmZO|OKoMmo#S&>PSqg-z>EH{?$b+8@FtGm+|`hExYqOUVay7{vNqnD1Ls`dSA|@ zPB-gY{FQH+CC%Gyju_mO4^8?izfIdwXYSm)v7YN+clXR*(k`)y-Fj+7?HcX7*$>)F zIqh6^Y;8B*Tm15#{^q>CWrBxqD%*OkvAbw3y8XjvsZFZ#iqk6g=o?P*tSP;A)`QJ( zj-W^_}BabRyhU6)lR$uhZV>FDJ`)x`@t=ZNIh0Q!0pX~e>apr&JS>8>DzFyCd zT2p7Y-{Lu&jSYf-rO!(HXk-jY?70-H`t z91_oVt-B&pdhXt0`3s9*%>GjJjN7>1^32VK!@f(uvN~&*ujJ2~R(s^$vild9U!Fe0 z^-SD&s^$5c&7TF>HNLFTtqk7$M){lB-!?gq__Q#C{WDgcsXQk)r(N#i`R6y?-{k({ zwVkjp=b77@?wP0Nm>=(d>-(%BjW>4xNxP){%lR)Fzoe$Ieg?@se{-<%g(puSx^bb- z|1&jWCbq6_I~00l;qBDKJKqxDI4?Aw(i?95Rak=SdcoZT9~UgVRQ1pP$^rjB=VI-g z8~IG{Kb&1NfB6TUc_)f1tCoH}CJ;G+W9I}u$%!JB6QyoWRIr?+HgnRN|4f?{1d9}9 zjg&M$DVc6kb}UlyHB!=y&;R#*^Xk?ZkM~>JXXafwGiQ;~7d#tJ zuWI|}KCyN6iq*XzUrKOYF1Wkv;A5B6um2hLB-Cm5&f2h*fq{X+)78&qol`;+0LKnz AtN;K2 literal 0 HcmV?d00001 diff --git a/sprites2.png b/sprites2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e1be95fc9d845dcfdb13ee184ed6ea77f27d3cc GIT binary patch literal 845 zcmeAS@N?(olHy`uVBq!ia0y~yUx1HVvZta~cqDVIyd&{p z@(;n7Uy^s87+!iJd+ArBkbl`*%ead3r_`rmjhFDBp1OU6I3w$1`_6 zQQg4!uHZ;T@uQ!IG~F35{QY$P)Xl%^^BHS?Z~8W??q4qRgHO(pmj55|v*#_J&tg$G z^FEL6`%}Nq$1ncY6<0ce&DDXCK_$~{OMmY2)ko}9)Y zzjE7^q-DAD85sl&SA6TT%UUlX5XzCkB))6K-J5O&v5hmH&5^jnXf|sni$CXao;6k) zzgFBn78atZFj1{IcsBRM^DLj29@rLhBT7x?z}a_ZJY9~4E4~Tt&EgMbToS0N!t5yg z_o>i6UWOYtRxReu(H6S*S5mQck=f=~VTKF>XKffx@I2h~E2f~{CW5IT`s3u!3%AMM z?b))~@Lv1ssM9U#h9Ut|S1rEE8qlU+~qsoAhIvq>Fu*Hcked^_(z$*hTNw>bJrIggjC ztXaJJ%i_}Pc?ENY%+gJ=W@vk~ZD%%FE*{lrDIR*uZ|(;v!{-U}b03$jnVWR$fE|0Z zp{oZ&4?^uy(KB`g>r;> z_?OMgSARKsb+fQtmZ$gu_YJlcA7_|tczaOxw$g$|X3^>oU-aI}u9X(vx9`%|tAgPr ze~N!R-YGlv!{P_kqS^f4&T%v@IvHbV+vO2;d+(QXYqqT2c(C6z&;Op>zl6UAethTZ zEPg+H)4o|A8{@~-?}w+fTsPrapQB=NkkhZANqEi!7Ii#K>Hm!SOT0gwSFh@4U|?YI MboFyt=akR{07Q+16aWAK literal 0 HcmV?d00001