From 3ad8f55829f0ba4f65caef477fbff23c404c03aa Mon Sep 17 00:00:00 2001 From: Nicky Case Date: Sun, 17 Feb 2019 16:54:29 -0500 Subject: [PATCH] health bar and refactor --- index.html | 26 ++-- scenes/demo.md | 47 +++++++ woods.md => scenes/woods.md | 14 +- scripts/game/BGAnxiety.js | 0 scripts/game/Beebee.js | 54 ++++++++ game.js => scripts/game/Game.js | 93 ++++++++----- scripts/game/HP.js | 124 ++++++++++++++++++ scripts/game/SceneSetup.js | 16 +++ scripts/game/Sprite.js | 100 ++++++++++++++ scripts/lib/minpubsub.min.js | 2 + .../lib/pinkyswear.min.js | 0 scripts/main.js | 8 ++ sprites/beebee.png | Bin 0 -> 31608 bytes sprites/hp.png | Bin 0 -> 8241 bytes game.css => styles/game.css | 46 +++---- 15 files changed, 455 insertions(+), 75 deletions(-) create mode 100644 scenes/demo.md rename woods.md => scenes/woods.md (77%) create mode 100644 scripts/game/BGAnxiety.js create mode 100644 scripts/game/Beebee.js rename game.js => scripts/game/Game.js (80%) create mode 100644 scripts/game/HP.js create mode 100644 scripts/game/SceneSetup.js create mode 100644 scripts/game/Sprite.js create mode 100644 scripts/lib/minpubsub.min.js rename pinkyswear.min.js => scripts/lib/pinkyswear.min.js (100%) create mode 100644 scripts/main.js create mode 100644 sprites/beebee.png create mode 100644 sprites/hp.png rename game.css => styles/game.css (77%) diff --git a/index.html b/index.html index e5ee51e..1fa4973 100644 --- a/index.html +++ b/index.html @@ -2,25 +2,29 @@ Adventures with Anxiety! - +
-
-
-
-
-
-
-
-
+
+
+
- - \ No newline at end of file + + + + + + + + + + + \ No newline at end of file diff --git a/scenes/demo.md b/scenes/demo.md new file mode 100644 index 0000000..a38c68f --- /dev/null +++ b/scenes/demo.md @@ -0,0 +1,47 @@ +# demo + +`SceneSetup.demo()` + +> Prepare for trouble! + +Oh no! + +(#demo-attacks) + +# demo-attacks + +[Attack 10 points](#demo-attack-low) + +[Attack 20 points](#demo-attack-med) + +[Attack 50%](#demo-attack-hi) + +# demo-attack-low + +`HP.attackHong("10p")` + +{{if HP.hong==0}} (#dead) {{/if}} + +(#demo-attacks) + +# demo-attack-med + +`HP.attackHong("20p")` + +{{if HP.hong==0}} (#dead) {{/if}} + +(#demo-attacks) + +# demo-attack-hi + +`HP.attackHong("50%")` + +{{if HP.hong==0}} (#dead) {{/if}} + +(#demo-attacks) + +# dead + +i am ded + +> u r ded diff --git a/woods.md b/scenes/woods.md similarity index 77% rename from woods.md rename to scenes/woods.md index 2e863b0..0819783 100644 --- a/woods.md +++ b/scenes/woods.md @@ -1,6 +1,9 @@ # woods -`document.body.style.background = "#ddd"` +``` +document.body.style.background = "#ddd" +publish("beebee", ["normal"]) +``` Two roads diverged in the woods and I... {{if _.eaten}} (this time try not to get eaten by wolves) {{/if}} @@ -13,11 +16,14 @@ Two roads diverged in the woods and I... # woods-less -`document.body.style.background = "#ff4040"` - And that's how I got lost in the woods and was eaten by wolves {{if _.eaten}} (...again.) {{/if}} +``` +document.body.style.background = "#ff4040" +publish("beebee", ["panic"]) +``` + `_.eaten = true` `_.played_less = true` @@ -38,6 +44,8 @@ And that's how I found my way back to civilization and was not eaten by wolves Good choice. +`publish("beebee", ["yay"])` + (#END) do NOT show this line diff --git a/scripts/game/BGAnxiety.js b/scripts/game/BGAnxiety.js new file mode 100644 index 0000000..e69de29 diff --git a/scripts/game/Beebee.js b/scripts/game/Beebee.js new file mode 100644 index 0000000..4eac0f8 --- /dev/null +++ b/scripts/game/Beebee.js @@ -0,0 +1,54 @@ +function Beebee(){ + + var self = this; + + // Sprite! + var beebeeImage = new Image(); + beebeeImage.src = "sprites/beebee.png"; + self.sprite = new Sprite({ + image: beebeeImage, + grid:{ + width: 1, + height: 2 + }, + frame:{ + width: 720, + height: 500 + }, + anchor:{ + x: 300, + y: 230 + }, + frameNames:[ + "normal", + "panic", + "yay" + ], + x: 300, + y: 430, + rotation: 0, + scale: 1, + squash: 1 + }); + + // Draw + var ticker = 1; + self.draw = function(ctx){ + + // Bouncing based on frame! + ticker += 1/20; + if(self.sprite.currentFrameName == "panic"){ + ticker += 1; + } + self.sprite.squash = 1 + Math.sin(ticker)*0.05; + + // Draw me! + self.sprite.draw(ctx); + + }; + + subscribe("beebee", function(frameName){ + self.sprite.gotoFrameByName(frameName); + }); + +} \ No newline at end of file diff --git a/game.js b/scripts/game/Game.js similarity index 80% rename from game.js rename to scripts/game/Game.js index 0a5a909..d398733 100644 --- a/game.js +++ b/scripts/game/Game.js @@ -1,16 +1,3 @@ -var xhr = new XMLHttpRequest(); -xhr.open('GET', 'woods.md?v='+Math.random()); -xhr.onload = function() { - if(xhr.status===200){ - Game.onload(xhr.responseText); - } -}; -xhr.send(); - -/*****************************/ -/*****************************/ -/*****************************/ - window._ = {}; window.Game = {}; @@ -69,21 +56,19 @@ Game.onload = function(data){ } +//////////////////////////////////////////////////////////////////////////////////////////////// +// SCENE MANAGEMENT //////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////// + Game.start = function(){ window._ = {}; // global var, reset Game.goto(Game.startSectionID); }; Game.update = function(){ - - var wordsHeight = 80 + Game.wordsDOM.getBoundingClientRect().height; - var currentY = parseFloat(Game.wordsDOM.style.top) || 80; - var gotoY = (wordsHeight<260) ? 0 : wordsHeight-260; - gotoY = 80 - gotoY; - - var nextY = currentY*0.9 + gotoY*0.1; - Game.wordsDOM.style.top = nextY+"px"; - + Game.updateText(); + Game.updateCanvas(); + publish("update"); }; Game.goto = function(sectionID){ @@ -101,9 +86,8 @@ Game.goto = function(sectionID){ Game.executeNextLine(); }; -Game.executeNextLine = function(){ - var doNextLineImmediately = false; +Game.executeNextLine = function(){ // Parse handlebars var originalLine = Game.queue.shift(); @@ -112,7 +96,11 @@ Game.executeNextLine = function(){ // Execute line var promiseNext; - if(line!=""){ // none, don't execute... + if(line==""){ + // If no line, get immediate promise... + promiseNext = new pinkySwear(); + promiseNext(true, []); + }else{ // Execute based on what type it is! var lineType = Game.getLineType(line); @@ -122,11 +110,9 @@ Game.executeNextLine = function(){ break; case "choice": promiseNext = Game.executeChoice(line); - doNextLineImmediately = true; break; case "code": promiseNext = Game.executeCode(line); - doNextLineImmediately = true; break; } @@ -154,6 +140,21 @@ Game.addToQueue = function(line){ Game.queue.push(line); } + +//////////////////////////////////////////////////////////////////////////////////////////////// +// TEXT AND STUFF ////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////// + +// Move the text DOM to latest +Game.updateText = function(){ + var wordsHeight = 80 + Game.wordsDOM.getBoundingClientRect().height; + var currentY = parseFloat(Game.wordsDOM.style.top) || 80; + var gotoY = (wordsHeight<260) ? 0 : wordsHeight-260; + gotoY = 80 - gotoY; + var nextY = currentY*0.9 + gotoY*0.1; + Game.wordsDOM.style.top = nextY+"px"; +}; + // Execute text! Just add it to text DOM. Game.executeText = function(line){ @@ -325,15 +326,45 @@ Game.parseLine = function(line){ }; - -/*****************************/ -/*****************************/ -/*****************************/ +//////////////////////////////////////////////////////////////////////////////////////////////// +// WHERE STUFF WILL BE DRAWN /////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////// Game.canvas = document.querySelector("#game_canvas"); Game.canvas.width = 360 * 2; Game.canvas.height = 450 * 2; Game.canvas.style.width = Game.canvas.width/2 + "px"; Game.canvas.style.height = Game.canvas.height/2 + "px"; +Game.context = Game.canvas.getContext("2d"); + +// A blank scene +Game.resetScene = function(){ + Game.scene = {}; + Game.scene.children = []; +}; +Game.resetScene(); + +// Update & draw all the kids! +Game.updateCanvas = function(){ + + // For retina + var ctx = Game.context; + ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height); + ctx.save(); + ctx.scale(2,2); + + // Update/Draw all kids + Game.scene.children.forEach(function(child){ + child.draw(ctx); + }); + + // Restore + ctx.restore(); + + // Draw HP + HP.draw(); + +}; + diff --git a/scripts/game/HP.js b/scripts/game/HP.js new file mode 100644 index 0000000..b5c600c --- /dev/null +++ b/scripts/game/HP.js @@ -0,0 +1,124 @@ +// Singleton - it's always there! +window.HP = new HitPoints(); + +// The Class! +function HitPoints(){ + + var self = this; + + // My DOM & canvas + self.dom = document.querySelector("#game_hp"); + self.canvas = document.createElement("canvas"); + self.canvas.width = 360 * 2; + self.canvas.height = 70 * 2; + self.canvas.style.width = self.canvas.width/2 + "px"; + self.canvas.style.height = self.canvas.height/2 + "px"; + self.context = self.canvas.getContext("2d"); + self.dom.appendChild(self.canvas); + + // My sprite + self.image = new Image(); + self.image.src = "sprites/hp.png"; + + // My stats + self.reset = function(){ + self.hong = 100; + self.beebee = 100; + }; + self.reset(); + + // Attack! + self.doDamage = function(str, target){ + + // Absolute or Relative Damage? + var num = parseFloat(str); + var isAbsolute = (str.slice(-1)=="p"); // p = absolute, % = relative + if(isAbsolute){ + self[target] -= num; + }else{ + var relativeDamage = Math.floor( self[target] * (num/100) ); + self[target] -= relativeDamage; + } + + // Floor bound + if(self[target]<0){ + self[target] = 0; + } + + }; + // TODO: SHAKING BASED ON AMOUNT OF ABSOLUTE DAMAGE. + self.attackHong = function(str){ + self.doDamage(str, "hong"); + self.leftShake = 30; + }; + self.attackBeebee = function(str){ + self.doDamage(str, "beebee"); + self.rightShake = 30; + }; + + // Draw + self.leftShake = 0; + self.leftWidth = 360; + self.rightShake = 0; + self.rightWidth = 360; + self.drawHalf = function(ctx, isRight){ + + ctx.save(); + + // Which side? + var side = isRight ? "right" : "left"; + var hp = isRight ? self.beebee : self.hong; + + // Shaking + if(self[side+"Shake"]>0){ + var amp = self[side+"Shake"]/7; + var shakeY = Math.sin(self[side+"Shake"]*1.3)*amp; + ctx.translate(0,shakeY); + self[side+"Shake"]--; + }else{ + self[side+"Shake"]=0; + } + + // BLACK + var sx=isRight ? 360 : 0, sy=0, sw=360, sh=150; + ctx.drawImage(self.image, sx,sy,sw,sh, sx/2,sy/2,sw/2,sh/2); // black + + // RED + var hpRatio = (hp+32)/(100+32); // 100,0 => 1,0.3 + sw = 360 * hpRatio; + sy = 150; + self[side+"Width"] = self[side+"Width"]*0.8 + sw*0.2; + sw = self[side+"Width"]; + if(sw>88){ + if(isRight){ + ctx.drawImage(self.image, sx+(360-sw),sy,sw,sh, 360/2,0,sw/2,sh/2); + }else{ + ctx.drawImage(self.image, sx,sy,sw,sh, (360-sw)/2,0,sw/2,sh/2); + } + } + if(self[side+"WhiteWidth"]>sw && self[side+"Shake"]<=0){ + self[side+"WhiteWidth"] -= 0.6; + } + + ctx.restore(); + + }; + self.draw = function(){ + + var ctx = self.context; + ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height); + ctx.save(); + ctx.scale(2,2); + + // Draw Left & Right Sides + self.drawHalf(ctx, false); + self.drawHalf(ctx, true); + + // Draw "Timer" + var sx=0, sy=450, sw=720, sh=150; + ctx.drawImage(self.image, sx,sy,sw,sh, 0,0,sw/2,sh/2); + + ctx.restore(); + }; + +} \ No newline at end of file diff --git a/scripts/game/SceneSetup.js b/scripts/game/SceneSetup.js new file mode 100644 index 0000000..5c7f921 --- /dev/null +++ b/scripts/game/SceneSetup.js @@ -0,0 +1,16 @@ +/********************************** + +A big ol' singleton class that just makes it easy to create scenes. + +**********************************/ + +window.SceneSetup = {}; + +SceneSetup.demo = function(){ + + Game.resetScene(); + + var beebee = new Beebee(); + Game.scene.children.push(beebee); + +}; \ No newline at end of file diff --git a/scripts/game/Sprite.js b/scripts/game/Sprite.js new file mode 100644 index 0000000..0054f6f --- /dev/null +++ b/scripts/game/Sprite.js @@ -0,0 +1,100 @@ +/*************************************************** + +A sprite built off this config: +{ + image: image, + grid:{ // in frames + width: 2, + height: 2 + }, + frame:{ // in pixels + width: 100, + height: 100 + }, + anchor:{ // in pixels. optional. + x: 10, + y: 30 + }, + frameNames:[ // optional + "one", + "two", + "three" + ], + x: 0, // optional + y: 0, // optional + rotation: 0, // optional + scale: 1, // optinal + squash: 1, // optional +} + + +***************************************************/ + +function Sprite(config){ + + var self = this; + + // Sprite image & dimensions + self.image = config.image; + self.grid = config.grid; + self.frame = config.frame; + + // Sprite anchor + self.anchor = {}; + self.anchor.x = config.anchor.x || 0; + self.anchor.y = config.anchor.y || 0; + + // Current frame + self.currentFrame = 0; + self.currentFrameName = ""; + self.frameNames = config.frameNames || []; + self.gotoFrame = function(index){ + self.currentFrame = index; + self.currentFrameName = self.frameNames[self.currentFrame] || ""; + }; + self.gotoFrameByName = function(name){ + var index = self.frameNames.indexOf(name); + self.gotoFrame(index); + }; + self.gotoFrame(0); + + // Other transformations + self.x = config.x || 0; + self.y = config.y || 0; + self.rotation = config.rotation || 0; + self.scale = config.scale || 1; + self.squash = config.squash || 1; + + // Draw frame! + self.draw = function(ctx){ + + ctx.save(); + + // Which part of image to draw? + var sx = self.currentFrame % self.grid.width; + var sy = Math.floor((self.currentFrame - sx)/self.grid.width); + var fw = self.frame.width; + var fh = self.frame.height; + + // Translate... + var dx = self.x; + var dy = self.y; + ctx.translate(dx, dy); + + // Scale + var scaleX = self.scale * self.squash; + var scaleY = self.scale / self.squash; + ctx.scale(scaleX, scaleY); + + // Draw it! + ctx.drawImage( + self.image, + sx*fw, sy*fh, fw, fh, + -self.anchor.x, -self.anchor.y, fw/2, fh/2 + ); + + ctx.restore(); + + }; + +} \ No newline at end of file diff --git a/scripts/lib/minpubsub.min.js b/scripts/lib/minpubsub.min.js new file mode 100644 index 0000000..16454f2 --- /dev/null +++ b/scripts/lib/minpubsub.min.js @@ -0,0 +1,2 @@ +(function(b){var a={},e=b.c_||{};a.publish=function(f,c){for(var a=e[f],d=a?a.length:0;d--;)a[d].apply(b,c||[])};a.subscribe=function(a,c){e[a]||(e[a]=[]);e[a].push(c);return[a,c]};a.unsubscribe=function(a,c){var b=e[c?a:a[0]];c=c||a[1];for(var d=b?b.length:0;d--;)b[d]===c&&b.splice(d,1)};"object"===typeof module&&module.exports?module.exports=exports=a:"function"===typeof define&&define.amd?define(function(){return a}):"object"===typeof b&&(b.publish=a.publish,b.subscribe=a.subscribe,b.unsubscribe= +a.unsubscribe)})(this.window); \ No newline at end of file diff --git a/pinkyswear.min.js b/scripts/lib/pinkyswear.min.js similarity index 100% rename from pinkyswear.min.js rename to scripts/lib/pinkyswear.min.js diff --git a/scripts/main.js b/scripts/main.js new file mode 100644 index 0000000..e56f0ab --- /dev/null +++ b/scripts/main.js @@ -0,0 +1,8 @@ +var xhr = new XMLHttpRequest(); +xhr.open('GET', 'scenes/demo.md?v='+Math.random()); +xhr.onload = function() { + if(xhr.status===200){ + Game.onload(xhr.responseText); + } +}; +xhr.send(); \ No newline at end of file diff --git a/sprites/beebee.png b/sprites/beebee.png new file mode 100644 index 0000000000000000000000000000000000000000..97626c76eac3cfa3013c8d10fa13a8529de43b8b GIT binary patch literal 31608 zcmeFZc|29?A3wS_MV&+<$yl5WA&LwccAZQivXwDIL>VF}GkbTOQ)bCnrZOaiOd)M_ z3T4bZ51D12$GzA6ES>M~zV3hb?|YBe>zwT6SgMUiM7uONwIC5F};x+g9nSOJJ8=XFa3xluJbEsWBzg<6Eb}!m0 zdCK_dowFB?PS!sAkSwfb}*8<0y zS9|9lSScVwL8|xZ5rj@pmsQPo34Ifp{NZTcd%dy;*(O#rNK!i78=C50*tdGIRo!$y zf{~taV{L zM0cX!XUm5UD>ADOM&?{!yCVxE8o2cCFD9(!S=dSDZNYHqfncJq9t_T8-pb^g`&=6>pVAF-u4!LUytfeW`i$t&oA zb3N}U4(gj6}?1e@fGG&=($^+V682L>dw8%=BTA(O$d zi92=Lvn@sCcd6^L!UDk?snL9AwW;fAQoZvHE5^&M zF8wcd<~74J`?;8q9!#h`EuH-+Q>6Y@>Cub2tRj>TN0F6hFuiOW<>Z3T00q5F&?;Qh zZr^s!!q%^DEv$qLxnpX7707P%E#Zd?A+u;aeZtcxu46zw`{)Q;cqWpFGK)mNuOItTz&sTz0w3RHWeK>@)bSmdYyu*={xKbAd zUFHULucF0O`Qi_9GmSfG&p{B1KC`d<$Gaxg+A&2o&EXKHJXocBvYFVU`4_A#y1`N( zN`)<)A7-{Jeii)e%)bS5Z&G? zjKLwwLI^?<6oNn0x~vSIAiU`BS1j}HyNQV_yv0F=uc+>fAF>hz&)fKO_~*5>T%CW) zUiue$&s;}Tbf>jnFdFVfE+k>Ih=bzi=OY%ZG|xEqT}Ql_jeN(+$+Bxd_ad^G(l+8T zAwG)RA-;zDKOV#_@AL_$RXIA|+J}UtfW(y2SL9LNQFcz6_jWP4>8$NMsdja90~u*I z*6D_BVLlb6u35^$rKwSXd8D=y;YO*fk#ar*FX`25_$$wb!_gh%Ij)-MmKm_u5La=h z*#zS{@{gO$884Qp2m>AyN99%S%Q4B>6vWl8)hY5;lV6opk|l!BWAigJ=Yb#I6-uPy zQ;TFi+#gz>NT1+Sk&C9f{a~d8(5ApZ1$$CMT z6gR{C{lnWS2iIID(vND$!$SNvPvONGBv;$b)a?mHNL?<8q?kelX&w)=3=c4sajqUOwYS%^2y6mOjE<)OQSF zKdlYs{po6ef059q)O$-ShC2;o-(o$swC02^InA`Gu}oF>&-Te7?2NEpp$ZLUDZXT> zxYg^bYQxntZ2_lnjsx2g)c2dZP4jxk6px6Ty9;FAuI5*1tL|_boY}mBlVt{Pyy|$s znOI7k8ffKRJN&YHONu&ryTZSMYAsnuF)v@x3Qn_}!lOU^iu3m%7L#DAFXILHEzfC` zUqVNx@;1r_w~e)e6Kc8B>|bQ-jN}gZ;HgXf>sDTF;%@Q&{%QVKX^?vk*aBlp{S5;S zf1Do7iAg-qEn}1ZIC+ozHrZ=Y5WlTrBtT^{`RydAC>11kpS>gi{Y+Q7r^I9a^TvLRHA=qmV)P&Tk;*f$kmI?J41W%Wc4nG~cA9Ny%(36~m@w#N5}=&)?jb%+ z!yc>*5B@sg*+=||XFZj|znDdI5q1j}JoTfDqE^JJ0cVAUlp84f)j;qzOX;gTa@kRt zc^`I{iKJTYu>;hZ2~>)K1@&3=zoYs^{<#YxVeuB0N9FwR4K0rmS70GZDn6I5rgf@t z6Q?>XC)H9NQC%s1OKHCM_vvvK_ku?m!Ai6`1<;6yh{bA7r!Qo$^<<&I#GUz`B71J@ zEo^J}t#5eOksA5v;=!_`=G#vA5GTq?|IPRvHDxX3FUE6+5C%385Igb1+06>qSz}Q# zF_mn6dDoY&@LQFM)5EpeO_{_5|9SHryRgHG1LHOFiw5)MyiVxSz&p`Zry33AkBRbo z5WkCHvXthiZ)luT`7uq+8lKlyYQi|`j$2|7p8E4|o|9W2O?bVz3}oik9t>BQe_Z*a zpgY);%rpPdCAD+Qp4qveEC69w1(8mYAHf#nHTEx%k0yl~B+3t_D6g-2E)i#YiVTg6 z0_=)gjN|h~kN=DtnWkbcV`$bp&f-uL`?R7ulq*C3sS@M zU{}Jp=zp3?2-iOXB;>n^q#DH{jSw*1nOg&b(>Mb@`lfT5+lgT#JE@$rSZSkV+6b)9 z>+EJyTwG8Rx-+4h+gWgh%Fh=a6C+>hou+mMVdujhmmQ#uznXDvxItzx*rwo^h=|CU zGtG;K6dy(&9%4evx6|7x?Pc?B50~&VGDoMUrcFLkFrw<~Z zFMteBo|Tkj2~kav(%DH$HOs9T9lh1t>EzQA2ny_MXCQ9QZJTmVZ>?gJY`NzDAuk{x zaNcz9yRIxzgaJERBfn5biLS2FZjtXF$jXHj6T8VYLml+Iywg+YKmYvkadSLwafBC@ z4NUfrii*myo_-DgXa`0cGo>IBdoZ7+*^WT-#n$m(hb_zL8yos{>Ck`tl7OAGaZXF3d2_uI}r*fvr5h^|KUxnJ>lj zZFaV`m{_Qtt!+lcbz~NOjNBW>JpQk>Cci>t)=AUIp;qv zYtOMG46-1^OIaoNo%7+GAt<*I?B*$x$^D=7?52AL6}QEExECK)RaJ>=QP=xFdMtmc zCFL6$8{3s3UFLhg=N^8kRiVATX5gl!rS+wyrRBoxHd1M^3}$l4Hr;iz9Xm}@4ei{P z%;_3zBpnAndJLVjHfbD~YW9$c<6RR_|Casst#XlZ$Wb%*6J|up>PDkmIm<*-l6e2T zAo5ughg5#IZO~~_(Z~vCG*32{=H%pjVpdR8)ZX#Xx@h&Xh}&P~CMG69o#sTv_wV1A zFOad{IyySerqT?h>LQ55gTQ1%07!2#+kd|5)Y8_DcGN3jbj`qrGxmx)v#$vwFL%HS z7@`1DoFrt9H9B8ww>!ti#>V*Zb+Bf&{I|$u*~%M?UfEXm_9EbZ#D9=`mcoGNPn7|v z?o3(a2QSj`PF9kWGpY@lJujC<{k@z9+=G$)I-#8xxyJ>v5PBXE5O7C|WASHJu2QV5 z{;4SU)pi5ThkJ%nYD><(5@qZaa&~mg8EIg}z0||TKT;E1gJtL&7^Hxnx3)Z`;u;K1 zO~qFAhPCx^@lsEs_@DR?pUU{`d8x2#!}N;Xys3hpgMxxe`6G7?pu(4OAeZLasi+cP z%GRTbng*MKHW56+&XrP1iy-SV0rpZHwCB2s@c{w%6F!!dmOhvNhZcM}FF*gVy}f;2 zULJEnLBZW40x)MDncV;6FN8rJY-Qzp-)4GGxvRBxRm8w)k&)bq;bF^Ok(01iCdG>Y zWyg-d1_I(_oT__zjOW-dS$_}f6tQ}Qs~iHF=0bp|xcEe_}HBSIv-Z z78JA60nh2|P$iRN+yV0y8{RjPc7AF&wcsQ~33C8Ou4HdcmGUKr%h#k(7uNK57AWSt zQw0YO95@3m2O7<6w^Q!J8K{q{Nt*yJ?`D+qV~=l5j8jE z%q3)e0gZr|YakAER^P3mrdF8c7O#Fmb^A{tp-c83%FB6*jAy&nm2y;5n6t9778~W~ zx$NWT$s67um-;s8(Re;PtLfqd&V7|uyQW^%o>AL4R~izT{6fAig}TH$7>1{GdztdC zLu6L$mAwZdla`Tz5H#`$#n+~yH!*-jweids*`!ViqU=OU-I{q+?DOXVswv^ttIBW~ z78PN~o2^&Tmy0|JJ8GZ^*;pEc^r`?$%L2nyQ@>WIQkiQ!jtpHs6{X?e=*VMF=)EIl z>Ea>@k4kC21CuDMDWjLovV7&tyncw79-D@^UsFNl#ZPazfXMSoO4wnapX`s2^DF9! zckgDmno^P`dz(=GovKdX?E~fp2yze0OfK2prnYE(Q7<*y2=%v_ZY}xXEJK}mlJwwV zpSA&RrlPo_w6r@ay*XiHdC=oDbtCKO2kC(r>U2WaK)?Lb#8EajOIurEwxdVOqHRGG z5GLBDS97jxt@{8P-Jn+GDy?~eTVvUn#hux<(-j=TQFF+~zX*ZHzGdqTxHa6fF)mZl zUF79vi6PYfc^@%>>QLh0%5n_O3~o)8nI5yZu^GR3?E6$L2@@bhKGl@w0>aqKZ^XYq zdVZL??9dx=RF7lpw390Pzt5c_0fJahr*11%Soy3!DA>~_14k~%r7{Y)&B-Ut5t4(S zBDUR(K=*+p==C6Ew$*<4?RfI`$qVvX2plQ(O-*iNz6n3a%h0gapu;akd!7TH3RV^k z%^6f0Xr@6Jvcn;Jd>K=%O4Msg_;J}LQHcdG>2O-Qwwv|G+1Xh`Q^k^Lh<~P~2I=LC zGs-%GC^K`ef}2wL`tY(MS&ea48*s*2pk--|Gs12GqIzun!P!kd5Obu6nHVJZdIeWR zdQGUJ8QBc)`{wiu1w}Tv*0;82t>kgWo(*uF#iY|{U8C>pzlm_nZ={RTSbnf#*5mJQ zJjbeY_KfQ(%uW`24wwhH`4(}b%b#^Dmm?AY3m+*~+9^pf*aJrh7+ArCS}*r4P{Bv< zAJ2D_iRG2&<%1}kqH4+vqtgf$L(DwZys^K(Nj!#cVOP<8tE`;3u7C)g!|X{s%}|7o z&eC?}pO{m53u(1S%YByzo;Xi`)*03zt_{4h8Wln?488RC?cuQlO$yS)3Nmb5r-O6(1T67vk?F?)io4KZ9dmD|AubuG5lB?{kD1Px} zyjGz5lI|fS-Vn5<{TJ{7Yd{iI0Z9<970Os3iBFLKqf^v7<1lgEtAYjavl$i(YdQq8 zMdi#qe?Abs;VuAi_wQJC`Sw&?UaY)Y zh5O#2RN>507UU|AFx(^Lm(Vk|s-6)oUvqIc1)Z&KVj?@pL-HetFF)flUNaU!X%LH;9 zBQLydu)X+`33##W;590~A6(+Y#QMt$W3QAns>{I(M3`Xc#7Ky|lS*E3BzSTC6@~U? zFHrky7&adrn57rhcLMne2oDJ>F{k-rH^&vWY`j{hXu5ZyMK67%x5<36d*jwKOUw0E zmx59&HBB-$L)B>gRZ{ev0JwcT_+GKB7lArLWgG|2NbEO5YCU3unFF0 zy=x?PC+X1tgGD*c1gYcDA*&SLsQdJ*kg4&a3)|=^?EDeX346G+`K{Gz5q7XxK}1y| z(1_zz7~?{q8qvMPW2vt6OxtNxmXII7;g{_{?mn`%*>?u{`WY<#j;3y{9_}T-umHw( zVS9Z7d+oW0-l??YcVm>5PRIRnv^%X`lTLOT2wlI~Uj{~qwh*YIP`JOOEPIc|_cZ?i zpgO)@0*P{~%gi~3g?N8pSCMkLjYB5ka6ryS`mRJ|`zzLD;1F6B7^MdBV9|Jv;ok4U z?YsIogG^$|<+`{VeBVqo;?(lWygGhkBe6i}LDV9j(U3k}Q#J<5XlN9`btQ8MaL~u9 z1_*Op-}6{m^kJC_upimSi`5CmkqARFAF!B1e_=z<2;nK>Q(J!*;q7jXg)@=5uL9YhGa5 zVz4>^qX9&`Lf59dJ;>96o;Ysv3KtQ#-w;pCg4q!uLhS|6l^bV<{V$VF01HZb)|+AK z+dhY`sDNuRBa_@9=*Sz)x>xz4$7hVm!9S>msk}YT~W+ZUL}e zW^5T+%$IQ&Tp`tqYXB;84ogqIrKTdsE0Vji#vx9+fz)0qWA--M2w_(x_$~bV>#A1Z zyO|dRb>U2`c5ok-& zWb?n#*e!S*$S-9qfCnzDBrRQLX2GnETOXElj8#R9C4%(Ogv|ou0>tU$KW|wb|?_4$gwnaU{_z73afJM-zQOt&GQZ0k$R&c zJ+g%bqGPO3wc3>mga#}Xo-Dw)`y#LRKPK_W%Otqv`|UFDdH%F+*g7c!i%UNG%Cg#E z2)pT~E*Qe_6drl%2TRxjS8_b*MkkxOtK-|q&?Gj4Am)eRmU3{^4&B0ZlvKE;YHYPf^FqhKUq%``y*DnczGKOp?od(Ary-3YVsH&dmek@SB!U8 zKNBubk6gg~*E1PoThwh&!g5JI*hIK_DlK9Sl?M`!5T6}3qXGaJ_}PsMo-h5cHE`h| z7^%9@Lm(@F%77T*8dx~u9t#Hj-TIf=Aq&`X@IW`qb<=Zcg%=SzvHOu3a0Ts(2D4WK zoDRDydZ4FKP|ANHH#m2&GzyGD4OC7#eJZdERE-QdV-i&n4r~X_3StPH2C2c8cACR! zhvF8LYzTJoLHzExHbhZu-*we$!~#~8yqSl{pL~Relc9f#CMyk;P#WM6l;weyUikLExSkVgG;^K5W$Bfm0c%w? zcH&{|yyE~bi3&*+Y5XTYnqnJY8ieH9qOLtV6!Ihc;(aGI=~0h@pr(14KB5Te~#VSJjR~ zN!hIIoZY6Ep#w7$~Y~8U8j?53j^~ zoOC7O{6x5rnrHchPtws?0pWDx)ABqzd2Gz911|~FYz7>4QG?Rw?k#7S+$ev}-|opo z5Nq)ttmmRA{mgy9H(aDUz(MN1wr1{(SY)mQiWJ}12+5z`2o$uTzecFIYh5|>)6uk? z!y|)-dG*PatuC>2>f=F41S?Uu&i#n%<9gz<-?Q{^e|Ce~GA)l;VGN(!3?)%%b1Q9i zz#_xn@DyJ%8?$|c@7`9<_$-w#(-A(WkXBVteZi?JW93skRFiOi73DxPVp^-1bb|EN zd}_zI2-E$UmHQ5n<>P0^^uHZJB=$nXpoCMR;hBXEJ6!s~;K3h<(LzaoAwqWuQCYb$ zdpUc3z3wzEX=y(s!psUc#Gdl;skQN#3m>w5=RysoTNDj_y`h%sseDRGp1dG(WD)JA?uejJ~1ohFm(xu;J)n8f71j<=Ib?(lk= z3F&=H+s7F+@JT~O6gQ&acnYnjA?0h0ogrD*d5H5B@f~~-)OOYPt|wYZ{y}7Gz#~l- zV1EnV!q@qeIr0k0`%L!oFfQ7!-Op_7%Q}qx{RBMwu}qE0UdF)<0}f{0q|$2qAInUY zc{Yn-G6*}T3DS6cg6#iM(!S<^lHE@0kGy~a`>X9cv1k$O6?FbR*Th2I~E2Q{n_ zMs2L8F1m1~@8gn2j~a(3pa1C?c&{Ny3;gQbJFq;APAd*Mqap{-OBwmina4t zu9rz%r|QG`!E>lB^#$sGZ!CPVIc(YegiJ;j8qq(NlUxd8u2ATQA~6B2XlC@x=FU6}s*_1#+XH{)We&Ie zF0sl>YCQ~3l>Bi|x{|PbN4l~(0N0;gXK?ftlzk0z`Ub_y=nxx&v>6bf_V3^|Z7#~> zvLcU_qS6?bfz>r$Qo%b+wsf&OOqE7P*aBwnOU0N7ptSd-F@0;5vX+{<9z^PufD^HZ zyziLi-;qKLDP(3Yda~W|<61s!i1`q#&W9qfNWo6z?FUhU6VNm&#R2 zzEL{ALPHV;lO^eC$jL;T%v0RErkjcfyeM^+F7jzz?B>_&<5)MlicxISdfG)?y3>m4 z?dr@PhpV_nRB|g?rr6@j>Y|#8_u`N-kW}U6(aF@W@=2to(LN>c{Zohb6OV1Jk?lF24?EcnieEt_qY`p8^_bGjog1 zi}A-zLt(lQ|Id#rP>VDUxuanfV@blo@0V9K<)@AcGBqOX2SKn3ml~V3nX}dX60ne? z=G-)vb}=iaZa)(0s}#m7JQ4Y)ZOqU9;ab=Ei9-Fl=Iy`Yo^>bg-5aoih1B?U zzOgMC)wUJYHkW_v$%3tI!cRF{a;r5)sYs4h_dyd|6u6 zoE|Yt?(6OO2zEQ-t*WeWKJi}H-2?Ebtnhe3W$b9*`9V*oEbue7=b#~t1?#-cAF?{M z>T)utq6X*UAN=$zF1deuZs5FLIak71nr}OmNV?w*ayZG}Ym3O852veI5-t`O6<2(- zem_ldIMeVJ6H&*GimScNa0ZDyt}++A^IC3Rg@bisKHk^$;#QUT{FwJn>9R!RlLpkt zSBFO8JlI-gu;&AfiwwqfQQKvLrgNyM@RFl)X2`Hv`m+=k<}%^?y~2AXwU(JA9)c_+ z?5o{1E-HVyKSp(&|5PjMNb!azj3x+vW=LnPKi+_^yoRa!?bp&H;c=g}SMk{^9rX0( zYzD4+FDg%wo;YpuA9QWR^M7||r|X+zGw9%pCrGSHp@^O)$e?xZ%`1*pPBh&pu&a*Q zYCpo`Xxe3}(VSTbai^;(!HK*MG9kEVd|Cm+5k6@5f=HVB9nAFbXrvoIVPxaL#OPhS zMla@!Bevfa>N@_8B=D;hsu~{Sf9f(|s$o0fJ>6es-APkf0H@B&JrnaED+a}K3KO@b z<$t+{?!ooA60QXQK0`ClcX4yUzB@Wz^=29!EC} z{j^rHz7^JPXmDC#1V+7xX%|Kg+{ysYx6l1RO_fhBhAjcWvT9qLOT9d6GJxni76!9%wq|aL% z-b^=7-K38_07g1=Ya?~Nql{NEwy$md3KzCF%D$^m4TXnR^)IF=@1z;9!! zCaGGd2Q{oci?+H?6o?NeG?hcAm40^-BEf-$Y{}bf`p5%Mrs0XCovminrps0NqnRr+ z5}yDZ0>Xb*?Fu@=!JNm*{GJA>mxakIk5N{5l@f|yqt5os%?u_u#3m6&4zZpm(=SG> z;j4A<)CUgRTL#djpr2J$U0tm{-|HYfGC*b_e;4N)HdgNAwmpGpMIM8>>V>`NDrLi# z$~;%?u4T2qX}8nOYFG6|{r$DmS>)yA^9l-B=;<#dO?Lg3g&;OB;6br+)^tdU1GTfW zGX+|Ms;gD88}+mJ-`sPbb(Mc#Ts#6TNL*|DoHyCv0br?!Wcph;jT+EwlVVFRFL~$# zQN7yTJu^3_N;c!QId?&l&sUZjh_FA|J=b?Bgw-%5Ou9*pcdLU}-GIBlBp68i?op(OEJ&|0PMDW7L3E1(=PcN4_c7SXKJS zUNi9(s>(a=JMD;s9oU$~xYl`Oa)sv$F9lz5zPS)JF!MP1b9JkWZZqUkR(oJ}w$;SW zL%!i&79n~Pa{)lKA$GhiIuh^#H7Rzinwy)`I)^ep5kYcH%Ut`c?U@&A_tZl0hCqij zIj^@i4d*ItO}xr6H8l;98F07iqO9oIe(e$Tx`9LZPrxAeP;?_J?D2;=*kE39@zGUJ zpO1S(jC5I@m&Y6O>ktcuQ`SczYGx1Yr2CbutIT&z&-InEsOSb)yxjkM{Nmq8d?IEY zO$*C9zCJVOa?7`V-T)7*7YF;0@VbAxn&PiL|0xewxwW;WHNQ@8kq1x)NyOGQ+Vu^E zmNn3Uz%{V45V$_HAG6fDFeTwK283N0voRLmt;KZcz@R4?@nZ}A=OX&)YUeR3eWfTf ze2)JU5JLS6jc%YfrE330&-{G%8O~$D(cJZl7E>#Vi&eqS36`ahpe!==Z~f3aWB&T1 zY5GL_<*58=OV3y;Q>7@@;hOk;y23ChGBd3FspZ|L%isV;X4l7RJH@lt=_h_RZ7phy z70XX$GcgJnFeCQ}aEJRpn;qN56{6Cd!d2BN;;*l*yqC@u8}wLrwEa8kCFDQH!he$E z1J#?#b2=-o0=#GY0}R*fJuF8r)xTe`Li%fSJuEv~x9Rt>>6nhPs&VrNK@B?mV(0kN zhP#;3uFbBB7qb26q(^L`Fv;<$%z4k+3rh<$kB-B501MM2-qo!S0O0{Bk|*D=RSTR| zch0{uhdl^0GTDF>0XMCKp5@NYMKZF*y#NkEMyNWiA~}8Mn|rAf%rr=4+gaeqv`?kk zIbH3ZK4Rdy3z@DJE1vf`PRM*6Un6a)WL{A?z$to!SyLrcXlbN?QT2!02@)Lq5-MPA z_c(+*?x(84*%t3aE`He2t2nR|_VPn+|2AYQmQPdszp99*|7^ZcF;TxN&k2^N#ccxW z7QSCw7CvI{f|QT{m_lxQcCf!dKVS5XaRQ9&v<{(@j=Ai~_Lds2ghIqDV%6zboYE>s zEfz+U!HR}58V5ayc*}Q+^+mVkxGmZm(9ip+PF##jCU)9|KZqPBD!)EF4=or2p>{b}D&3)$L z&=d19PB(7Mvc)-#`gc4R+z4y^oTSrjUH{=%Jkz1%VYBwkuH8C7WAU1uW*?IB405E| zhe0A4U@9*y#;IW(d4LP6=cG471=&2J#ubxv2cATfU%*nhLrdpl-3RQGmrSSEvCiL!g z)~Z{-;VcBO)3`~uba^f=eA%q~VSPADgY-}qv_sl=Ci+f(DYEYjJ-81sbigc0RpZ-> zpSqXxI;L}_YEN55&(6$zY0om}K9~nBL(o7L|0fcA3>#Rzl;Aec=)!?q(#T85H8&P7 z3pTo*t#9SzBtGD~JzMf{TEDNfC zoVPJ5GUo1mhU#aXi{7TWdK!`mQh+A2y>(}0ft>as3neW3-Y0z04>8&YA%CvF%)s>+ z68s1x@OVfHVS^|wRJI4HR)!0gjLkf+ve0Nf;nL-tpa5vVH}>jeyOwbmI}P%TxAZ#$ zuA0Q=Q=d9o@zD*C%Q_!j``6~+c$124^9Qv#PSK}k`F~s-4I5L3;L};I)eT+fvtL_Vvyn#b zNXH2pZB?)^Ut-#iSe%!G)6(Dnvp|`NLpgI^q0E&A;BAQaa+IcC1)x*rWbYYUq+s&S z&kl6^5dqgIag#w3vkD&51#!!y_D1p`Q-r-u(g#KY~%!zX8V*HcR{0j_ap4B-C zn06<~DpyWc78;$Q8&fsC_4$SCI-L&E7~X>3MDKa8!5~;{1IlAOl^toB@>ea-=5hsP8^8zE?o^?a)n?QQI_P(hWgHb zX7L&S%!CgHW6o=9wJQREmoS!16y)PzUflW`NMn)t9KeXnYdFxmxvv>pcb;*|@!3w> z7>O~HZNB}YVf^d#o#I~bRpKh}|yjLRo)kZ?O{-W#{%C*#-n%E!_B)kDdm5ju&Be3m_WBVHsXq;8sRiRGzyba$*p)<457>{PJJ?UG^V*J1 ze1-B(>D!g;U$?b%4=+h1m}(qAo-`T z=1nrX79?=ezlnRDq~Z;#-u$c&-i&y#UHa(Kb{eRDKwWX zB6{Kwola1dhHyKmO4pP!9@NTC^MKD%p0E7q+7|5s0|tN?c0J*KnyD+d@(eoeyEB!m z6zHb3ojgN;JcDImi}oG^NWK24W8S7}>YEr-`icTHZhH}fnwd@1L3C$&9Nmr+?@9N5 zAkSya>^vWtL~rp4pn-+zO0l&0G3A+PQ~Hzw@44k7$l?e3XeF5SiaZV??jPnl#SUc$lFzg`}f%|gPcD^Qg0+_A9wH<(@J8|+xAy+g&3oH5QT zvU!IV899#K)B=aO$}$rYjAeSSzaCf1p5Z`9o0wk;hl3}F9706@j9+s6KlAPNmDv#Q zsLlC%5g3GD7?&Fna~0n=%`-ZbZuQ``2Qrt|_ARB4Ij>H%65 zb5YIkIO|TNa`@j1^oW28j6Zp1mAD94_`>sD&>!@*4c!~*GVNWrLPTnB4v!fu1nm+72qup`+~t%o&+dl^5~K#}U>TjoBUjmAOIqqq_RBAdQRIRV zCd(6;%Itx2je$`DFDr^RH8k=t=5}`{m3tWOx7Ft0eqj~%0!&?h!9XEwbhQwuwrAS> zj!Iw=WXG^V?BW~P54Z63x*S^M0)ph5ivx7}^}PUyRV05P_AGyFfnB@4m6kkn9zpo9 zl}M96mD+$#5H3hUD%mmgO{UNzuLH1IkE`?umF_`Exo|7|l?I!EeN-Jl3vh8*;v8&P z4)}o&P8Zz&E;wDaRsIb_HyM2JKV~fDP+MB#MPik}i`id6T?11qDII&ln~H3tZ5;5L);Pi-CeLnWze> zfxI3GM_Fd$Wevn3<@$B`cZiQXzoar`i|v+=d@)TI$Xul985WerFT(Q4F(R|zKDA>X zi*Ib+4TlEEmoo&!5F`65_jUC)TqR_#Z5=fZ-LvN<1Gdu38W}yisF9Xbg(Y&ag{-}l z>;{8csG(HBo)Mu>$JJWl?p;s3`k2+8Lj8LdOF^B%Y7mWQdUlu+Kvkrwha3*3W zZoVeY;yt!m8!f0QV8sFhY7g@xgh3OoNu&@oiX72D3cvhjEQatauR=E-cPtdmFzTScE}IOl~V! zK3)I(V&lOA$ZDR!2aAE!-SqP>V4=0)vqTv7+ePfRTtcSnwul$TX8rl=%Qaj?)4Kd4 zT|FsLuEky6mkuHCO0dTV9j`J@eY3tL5(3+M$%QRk<(Xv}9Hd4dH7$%VvS?0CvjM7D z5bVy(RT$CI-mNIJt(mf&n1Pa0YO#{6P?;!FT?1?jNhO+aj^H4F_K*b? z+ll|KPP@dwimS08Qu!(}(9wCU9kU<>Y#|B)=N$GTu{y8<_D2v=M<*jq>En%H|9(++ zn1VcaIZv|(7+j5i5&mpE;JGWcv5XqJPvXf=l00~=+w@Xf#HKvY0ZNX z0pH~2eN$EkPy)oE;N9&gdtyZ(-`4n`@WHdmYi&`dfMTv)U3ME7-{H!CKmSSKKMDMQNdgvYsaS=WT^~S<@#u}wud`#dlzyz9WZk(3DS&8= zXpzmF$Mi#?f23W_yuLZWzkjTDq8B2ntl4f1Og#B7Y#FQJMEQj~_>%uEDFz&+MmI~K8C&Dut|(Q z)UAET5ea4t!th9^#P32PfC9~RQELI(SJih}FJ5zNL`xn+bph<7Zxq+BoNIbm(nho` ziwW}>LAd}!8Y_QPY5^hbLDGzZ%PRhQt%C^GmE#_p+nGkj3!*g%neG|q0BtbOKy}_$Y*-t zB)lL+L8`~^ZF)-8Y_1UpxMo+IYObu~U&SxySRuIGJ+sFFzK~4o5-JNd`i?P3E{@8n zmRz3?>)mofacuE01A7o=ukTk-!`*J1p&OEFtY==Q9fmA}6S_LW#>SC)EN7Fr-#@(6 z5Kl;%Isdx*=7_m%{Fq_I&4%fx%7`}Bi4)xRSq6ospIH4T5flRsGFR`2<4)M`K-KTV z?&f3S>`jPIHggqg%>>q|s8c6IJx||N>{p_5&jx$A8QSNV%HAFRaCuaMtMog^Sh(*m zN`6QS6NRT=*Q);Z)a&F;os8=}1-Mua5b@Bp>W5|&h38PiscF0qwbV34-e1xP~@&~MC$+CEiS#jguw};yOu7> z&6uz;+Ge8wtDWovi?O)K&A4uIiZ43Q|BcF*p8B~}os6%{*#mx2lWcJb{vTubjOFfo zdDwo}sMr`IJ1aDEawvxxkuH=te1{Xox^#L=^?G=o?=Q^8s=`l!JKCUb)djMx`)1hG!xllZWdS#OR%S7D)^rnfrWvGFV}qQxx~k-DV+|1*tD-m*u+peli5@d<%8!o*vCbznF?6gXSjB zpV=&J`ff2LDcLQp^GdG~TQ@(BX4WpJgut7)+l_T;Is0UZ6Q;xp+M$dc9Ii5z%>4p= zwX>)x{-vlWY6G}bt@gvql)=8RB;Os|os|)tk(YR(viOV@Ug|wD>T(4&CIT%V+wJ(U z&u7|ep${Z)Zu#F%~&^~B22M4x#x;U?<0Cn$Txy7@pDR+t=y8>LXe z1?&kSWTxa+FNwU{0uUwK89}EJ1o1MG(V9#`(}*~_Ey&_!1{HPcERoW?ae13~XRGOD zFladuqc$Xm1!sxDYm`OagifFeIlXx6`wOZ05Nu-EKzp&w^puM`Gb1`R)cA_6NtOoG zpS;|Cba8^XzK*3ve@gB-M9R1a-?$+ZXz8%-RNU*ly*8Wi<|H4mqSa)tv6*RNqW1j7 zoiVkMLA!TQ41q%GyW?)Ra9TMN{2gxjMP3I_pRa-1u6jin zyw?7r!R8}nt=D<=XZtH9EBn2OHCAp7b!MgGI+r(Mc<^dgd$L(>lDm<|bNHSB-gd75EN? z>RzV`?gZ_LFHS4zpQdvwcxGL_M%S}Dr}I7-&n;0Q`^$j$TG}CSY5lFAb=`IUrBbi; zIYW+B?R1yqSMJt!MaJ;`29Va@&M%XHp;QXgH`y!+`g;bSTZa&l2^8!{|KkG=gz6fl< z3cfbPcjGf}^=xmk=G~pJRCXz#u1Hfh5DN9+<@I{yefRF&Te$NlYE;-e3$tF*35U)+ z;*Xu@iE^jZPE^X;@I_{HJ1G6;7V0ZLH#>Vp#Sc~Zbqqg2L-thu0fdFbxlnyv{XdCI z`dJTOBQN_Mlin=imncP1dU%&M8@W9|S)1>Vb9HlrFOdi(H}e{h3Rp|!qB&_L3_vt2 z9dInM$sN`4RaA2nhfbi^#Y(Yr1|e4O$z*Qe=HaUfplziS_B{gj3IuwR&xHAx>Yx!* z+yWMsh?~uV&fj?%9#W`OU+Bz$LWpnSQK~2pk(T#NdG{eGyD42qT-b;^Ee93_(bi(Y zEiJ_T21Evu%2TX#x(a=!rT&qL{oUh}%3tR0k1fy2G0>QW_`gb@fUg>nbai!AU9%}| zzVjuFxHA&om&E|pxEdm*n8<2hH&IP}i^Vf=bp~!4F1hn;3sST+VcM**YiVogMNoYz z&OAEuQ^uUDm4)s)ErOE`g@dM^F%CVDJt0js-@ZBnrR?n<_PSGbz07A;azD3c8K}Mg z=p9WhIhcVX7|n%fDV0N(l|lTf>2_3JV{J;v zN|1SDwc*B(Y}GGj$_|k?YU+hjHt~FWWaA*(`|fnRnel9AhR9LS-;nAHaHGI&TPl;& z(_*Y;(dUcx6~8Rz=0N}M7aRtEo{dBK{~-O~CeK#9Un6)E?^@3+bMS?}Mk}`a^YHsf zr55{+SF*>K0_K-`a_~OJ)XB?sVhukXQc+FoHR9w$XlKQyb_SHgzO*})vpZcE{|%RT zlk)f2Mg)Gxb!TYIDQbzV5#GxJujoo@!fGs2?ocPLU^B_Qk@A%LDQtTxX>9V~Qqs%tRv(*29nQx2}R{IKId*aJbhe@UU{s|zcB z31*>N5pj*7FKY3WcC|$a?vZ*!tU}udm)^0>Za-Y{3Gm;b_GrAl-k7kn9g)Hk&KZ7x z8sOzR6YAxj$Cg(p`SUo`cTWHuWo|$XD07`7-Fj%Q?{d|K6FL`WiOQ^xh~u|@_g!(H%(e-Jk^GP*iaZl@*ho{t>mXf4e<~2E3!+0Ck7w$Cm z0^ww=%(11eg|HvFgy2*yL>q{W*<-a%_Dpe)pSSD+L) zJSdcMr`X7OHBP)5QzBN->>Ai8_!Zpsb{@!pOekd-uz=3A?#1Y-%W zGoF^T$pRejT9F-m`=^@bz{RIObJI9}2N_Bsb~((K8z)+nbwsBps|m zHZ4+5OuVai9;+K^2OagSygX*5jgxI9i=p&Gk2=3?MSmmSWnkIpZ=Cb(vy71t?gyZ`|^v=9<* zQT=wZa;2_0+}R1;Hi^rPUmLd#hU!}^5sr+< z&j>vtWpuHw!uKai?CIp}BHrvp5`V{L#BljBxdXT%xzISOQ>*}D4HD5R#p*1d!^hI- zi{ewDXeJT$IF?ErzxhJA=>KZ(%KxF-|Nj{Y_hyMoNR+N3g~nFdS}dOs4Mld@w@6_^ z%yivbWJ=uzAxpU^3`%54qf2%sWocv(A%jtkCC1ErU#I(B{)lgW;W6iUpZELqe!ZTr z=WBVN>0XFJq@gE{_#oeX?c1=P(|nxX#885Ki+aShKkwvi3OFVIoX@vv)V?&k#-C&0 zY@G+H)JG5a9A&luEQ8w%I*9&ir zoYz-2Vxi3|y**a?NQuhG|YZ|qlJ+-cU0sMzm zaQ^aSN5bcRS7B|_L<2X&SWdJ(jYdjJS+X&&h&DnxjzXF?i=;Ixnrd3N7=%xyg_;gW z12G&baK&RFbzI`Dkn(OmPG+j|WX3e6;Tsx`RiyQB-)~=%_1Ukql-E>o=#2LEbiV;} z&yc>dDx+lEB3W=mFGWe!J9K-3Z+vDR?nML4Yj9QS*w6jmL2wO}k4V5;;4G zP`Uin<61aYmi;nzyU%Hz)uJ}}?N*nSM|hoq7~%ms207y8(`=gfncGMInw}-gZ*W{} z&c;zEg1Pe=YC*U$kNyc06Yt5kJ@tD07c?zOR)8G>C!MSW++WU|3jHs zPk9-Jm=BA|jl$9%etNa1KDlg%4ZHJln?c}nf)VdMjC&uK^Cg%Ynp0I57GA%F>ycVX zsUl>zvomD`yqjO|sb|xgH8#)h_z#a3;YzTI0&fWSydY%v27A{L#rf+|O?G z^M#D%K7O414qCxtr+&xh(yD8H?=?o835R8jSf;A_S|#AncEkK7Ehc*`IE9rbs_aMn zVd~waq{NX0@pz^Z(=g9XDS1A+iuc^FQ$?helvHO9x5L!PzR zJxf^{4)^65;lEf`F1qKF>umI>ew*TQqR~anccm@I(&GHsuU~XOvMHXFXscf=Z2UOh zNV<4%df-y5F3-3nYA$zhmD5ES(Zzo}zS=igsN6pIcaGlUeNk`!m?ZR%#2~5hphiRV zK+aUWzMj5a2#-)U)%N;e*UU5fw^O>0)Y-xPVxtkecs?wOqQv!N33HsdMPg-`(Q}2r-q|-0z@>E@`RRsCKQPUQ2Dyxhwf%){bG^vm5aI|c`}k(0lZMA zY1~kC-A+f6*b0@Z2i1ReslZu%JcZZna}YpT3B_5 zLF1FU8Xlq*q8N)rZi*~7j^Uf3HpdN|VXNe?zSG!uStNHw*aHVetLo=ZGDq~qPj3@f zRnuA{gT5nBdzrb?fw*)XjtJ(^G+4P)}B`u^K)m_=H|00{Kj2M8q8sA zPTe+|a9(m}=h-(Kk3gz_#n@VUl4w`EmJN zHbqbH6WE@65ruyvGibe~ywxC?7g_HHmH_KHDRvjsy>EEM&x>m0WUi>etgRVlTs8{W zZ-*T|FF6pgq@Stb>q4ss9X)GOiV>{dHGp(?U+(Jj_q%`O+#7n_q4v+I*g?gqMQ$L+ zoe&Ye14{$I8;OdErVg%Y=S66<%A2HcH}$>eSA)4<-@o<_w@hTYUi;2?z4(d$7v$Ytaum$9<=U7AgQlDzg22%rbvI!CMa*=x365lksd4$ne zVfxGO`Gbc8QZBl*^e-Is<7|oxe~2L4wxQn<;A19#lAS&;gjseBps56L&z&Cc)`!~Z zaTt`cn$@*6{v(5SIvKmPYitx{SXRZC>^WRFrTdl38Qy06IheZE(Z(O&n}6dilV^LLPmQZwnJ$@s zqDWH68d@1LM#`UoXYFL5_~P;Xlaht}Fz1|dwyVTso!z^vm>C;$Sw_r&Q zqZ*mh&V(G(jhc_Dc*CFTrnJ<{O8pHqiVLTdu`v;8f`|+13?9!oIOn8M?-k_W`mqn& z19HTur)j?s5}|#>(^LzoCt6^T7co+<8&*?lob^3$OUYAQ>L5D z(%Q8Hua~`SPPzNGw{dY^hd8$oQjVz3K0jVED&?+svAdv}*&U7Te6fJ3PnUauGki;t`%4v;{*%h}?Qd04`yLrPFLA`2)<7MC1AxWUu+Hd>lyy7jMH~Ebb^_6Q$3E#)KQR0jC zOXUIIF&>A0L5OBGZjwefig({uzF4m|3O9JZr^o5EzfVqxJ=YNKJ$WM0py$iFhHvQe zZ-ZhAH|}YP@BO~1$Ht7NWidmJNT|9w)2RMZgo?7oF{hyaos>CnX= zcOz?Vyk+c&@)DCZeNYn#^JH;s`vX^u7to|=S2dM+y{bSigBU5lkrpI zrBmy#$V$2|0gmr#KT5XkbFpW8yO_zIDXxEBHpT6a?_TNI2&*?df;5!&`oUZYe@yfAF{`%Hgp-kyI^?m0!xjtMlY}625v6BC`jBL z)aQzn-xq?FWe_eOEDb%6AaYiqbFQoqgJdb;hyje1Ig4T}*2qV4zryYhiJ4J~SaQT^ zS#iZWXeg8>Lh7+j%7-#3MN~z3gzQ8)>o7w606A}>{x(rX#j~IhuXg~OWtD)}L8SkL zKM^FA_`kpI)sbF2g3ci1tS%hbVp#;Z_PVaq+%Aib3GG3!Q8mto4EefP^_kLj)j5DU za*`aF7(#;ld2b$R?@nZ2)vGUUchnFJ+G#^{DgjozUy%4Z1)OVM(>VroWsL)`s9Z4= zY^|sb!tBXl3lm8xUZN$Jj(p)Y}AeGdxo)`oFc=N&* z!TW^B?ScoT5iwmrIFfB7v()P``LZrRaS_^e1ie`Pn=3H6D`t^1y`JPq406F3v>>cg zh&U-1S>>K06%;Y>aHV+#w;P!LV{h9T_cK0GFv` ziQoLh&VtbgFWjkl&I{MvjP$B%;g!aUYiAG-R3>I^jGI$H=~a}(kBv)Q3hR5%Z;4BM zy7Zw%NyFYL&kZHIAx66LMn)tlTA+#~au14?Z$uo#TJMe@4O}~?P#Q^ZvNoeDt~o8` znS4@o!+GAOd1e3TK<@UR2c))-vobE{vQCovoc3^KKh%74N-2Hja8 zRltzqr`u$AYr$5$sQtBc*5s3u30?NnqBrmDHwWeewXeYkuUwIlbnkcl^+!KmZ-I$p zhqL?oj%i;DJ|~`oReCt|Y-Nz^L&k|;!sl^VTW%tnkdHso2=3aRqfj!$xXcTx!ecK@ zt;TGhx1LTm<_WvZ3CI{87U8=i9>)M#3)J%E!mHd%?`IR7@v1|#oJ=nM`Fzkf43RDc z{nW%xgBuCfj0nwaP}sw3i*454_IU|eQeUkqB#>V4Fy$f^j{%8mw5VO|xC%vFq!6{) z$;5>0$u>gX$iM^EACNH|Oim#5yS6-yAsieT9mr&_X2eeJ*|pRN<$Yz5IScxMZGyxTV0zL`p_|6i(}4x}c-zb30+s@5I}awHg-I{a=Y0vbo?SOa z7Ep;7du^HUjUepVCHmRx&a8QpU&K~S!x*@QeH))+h8TbpOq+puM~2^>lporT5|1XTkm z|A2i4I?4Oe=BPU0P;eld1l4AnAe8Wz)RCj=2CGJjEXb7!3AiTf#LLo>w1+Z(wMw-g zbeqc};PA5lKDM}6b%x?bzHE=*pY)rSjnQ=d3N>QjK#<K z-U#;;OjaAp_K&hQj)qv6EZ!Cp7%pMCyVp24_FO;U6YdZ*bqynMK@GKz9~6J0nsr$E zgs)2pM1o4CYurfd5vI|Qd-Fu#{2IU4RS4Br!d}XMD!Qo-qe{Tu1kJ*mv z50T?Wt6iPIVUz8nLtmCa+dxK_IFf50|8X4ZIN@a5B`r@X>u_mn8V1QIID>~g0@EQg z$4MF5DOX^tboO44Z~#2*_(u}Sl}4QdseDlp=v@+GT>z*c3cTtdnZcfz@Vd{p@t-#Ql}1=fC)DozfDh4 z@uNu9nE=s=RGqH-ky@t?p1|-cq2grP@3oqS_a1iNJ$9>KtOEU>1crU zJl2}u!M=9ObbiDQ!f?u^sU@t`!wFz>f1Dsc14^g!G5Ag zG(BpwWES9FE_9?KZ%oqvg{YDR*2^M&SdN^jymf`PToHLMIM}q%-5U~+vkI^f|KCX+ z2?rBp7Fkc*`8%n;@>_-ZY0VxB{>Dl?NBnj~`z}10`B#*^lJ(P1ZGrQ1GXcgBTE)qA zb2U<=zLv1$5P#@PMLLf+`%{#@gMJwtCU`Kj#kbV1IqG`I)V)E z0);BQ!sRA&yC>tkiwhmkWrGTvWbYg6=Y0?@qEP)3<6)N&0Cc3+^S^1Ylz?WCM9nm{ zr%czl%adu0dSMnY!j(KyEMZO7+*iT$4_EX%+>m>e z9~^$yKXk5YjT~<)@R?V?tNd^%gHYNBZJ3Vs^P!R<9-k3KR!Rh6;b1K`7(`{?Z;4BSQH!0I|GVz3c4K1%l{{>*ZQ_{|0<1F z{+FU8&O$@!pBucf1B*EUZJk+YZ}~nr$12XbVo-IOf_t!MZ&3# z@E3eMSRn4#KEVf7rpB$F`Qn+O`GuhmY{I>S{cuUEk#x6U4dM&tx z{tJa@wk#q|pkWR8fiMLkbKFzy(3x;m!-24{%(%+MkqknCdS2b2zMkktk6*yna<7&a z@^X4zg(Xh?A6~Nuit0cbG_!!uidq+Aw;cgB()K zEd;CAG)Aw+-&>`*ke_NnB5(qHRxR{4$IZglT+>|4sj1k6csza&n<4gK#gAn{mxTax z0GtDRC)^<<1C%d-_c-zDUBvPjfP|O_)3`EB4QY4_@;cI0DhyodQI`t496;tr4AjrMFGu0Uuv%7%zPDM6Njq=eNrE^U6^+b9(0C!;SN@19V!8S-g%&4y; z(x1R*lfjToNtfMI#eHX@{Ll#qa~1ILdq(<@C^OMjuR9cj)oI6- zRgNMG_0#CneUGqd4(`ULLeY= z-GDT-fFX_Ex|TKP5RVI|tU}m#1pawbJ47MekK-&A&yj%J6 z&@Vq&_E_$Z4<@9+B9F9rPADR0{{zN!?}(Wj#2`om^xq>M0%~)7LvUp%w%sGc6Lz0^ z$>X)ynsH!fJ$il&UtAdKPI#-&r?vK6-2uF8bBKlzF$Q(gX5>Z{AZbn^cYnAEM#PYV z*{sGt^UMEq^t=M6Lq&IR8nmK;j7~`|*7AsIeabs_=#09T6PlU1LupKKsarW~=BTFJ zZ}j~HNrN3+xjY#f0ZknX@NlAVF=`kO7iTA@(rfIL;`lXLf`t9!*!D+GkQl6m7kb`9 z&(@Up%26+Qbz{GI=Ibz1LSJ$ou$*8qKYxBo;HLzBO5mpieoEk{1b#~3|BD2Oe=hMc YA6<6y{ElHip^H9YYHd<_%;Wd}0#;(GVgLXD literal 0 HcmV?d00001 diff --git a/sprites/hp.png b/sprites/hp.png new file mode 100644 index 0000000000000000000000000000000000000000..351b5a97e65b6fdb8f1f4104be81f1a3f4f5587b GIT binary patch literal 8241 zcmeHsXH-*LyY)g8R78ypr7E0*92HPP?<&Pc05wPll_ph6=n42Df}$XzVhBw*h=PDf z36KOtz|f0`p@$-b&>=v8Q0~HW@BO|X_t*V%@A$@-0b?Y4uf6tq_I{o@=QG!1Ba}Y> zZo%CE0RGFDbgl!itrh;8?&N_-t`@fa1%TM{Wu5ak{S&A9Y_8uiE9M=*oEjH#1Pa?q zBtpl>{3a2#A`b%eZGY};RNM9u;Y9JXtV3Li2433-f^_pZ$9*l{g*2b{5nJGh``&yk z>9|XM%`(5a9|7n8pZ?5TN0)`h*EZsGo{HbukD#d0RXf#rfVK)N(v-duSQ_AJg6<%S zAD;TszhkUX{Yhk1$*yKz`)n>?dvzl6jc&Cr8eJifn-NRd)rt=gMxUk#F>Z+=zHh3(4Ph^%?5FH)uRTNkfk)V`L$!W_vHr7af z62wtzVX)p@lXOUc5tZU9#2g(R&mCR6pGYOcm`@qEUo=0Mie#xz_nlQvX}K#eShHBP z;t4`yQrnr;u8KiYIyN`ai!lcj`q(#^+r)>a2cPiqd(XgfM6xkvk~v8^R17FG4qWAphz=)Nra418*&ioQNoaUL`pD|^#Kr!bv+ zU1eJ2#XPh90jPx+`2pBsCLpu5>++Vy&M?L$db(ZJplUneYBUIbkfn9%l^PE#kXo3oFB&H6af1X`y6VFAIOQPweF-|BzfFK z&q;sa0#5mjiz>%Yb&AXc^(i-IibxBw7Iv*10dh}1Yl=w9s^+c zyoKD|4?u&&sj)Ts#d8IKrCM&hr%CElU!T+Xt*Mp4)RA+kIdm}h$VIQ|ye&^+27~|x$K#C^z)J=#lZftFn z#KTe&;`KaZ1tc4o<6~@2_!TaYnzOpTaZzc1@?ohz#dq_JWo4D?R?ko0ErZb1%huMj zbpLFJ$nYCn_F_lX*&V1F{B#q($il|^%1`U;yfz1A_pOZ){wn6v*U@qC9eT&NK4X<1 z-(bHs-ymD#ybYvk9Eqw~pPKlIXv@wTFT182uGUJhS!4B4VKCP++vRp}fmXqG=E7S_ zidOud76d#`l=DU)D5Mwz$++cpHof7{cA#ynudnav>+8EYXpctM=pVk)qD@yNZ+_|O zG7}aNdG&q=2>qAnt`@{TyKe`~5vfXk#;9p6oUgA#A~(!UJSsCLoN>7>Ny+>)GIJ%A z>67puMNAo1NYXsI1BuLR6VG|`pxlME&0t!q+&XV~cJ^#JZhdu0mkZ1~KdQQIX=zzq zSy_3Jt_dTlpqIVNEWGn@IJb#UzI1cBvhsYRLxHk}#xr*!XDOTue7e!+u7ol)ysJpi zIFfwQjjshEJ*iEvZ%p?eiu@K86{W1E7S-i?ghtc#lY_6}9V+u+dYhDF++|@=%>cuJ zzq7JT-0OaJ0}(_le!XN@o0c#R=K|p?STm-}b;-mY-Xgrs=}=hZK)yRGC!lccQKbp* zm<7Z}CEi^16=!bniTKmg`%?YpYnfjvL5Ng|p{3557Eh#@^d)XU-ZxQ#SC+zkwY3U5 zm^#zls2?-rfONYp2y81pN(_mMJGdoz#z=DBN0q3d?0S=J;0yA#r?)T>`$SqV)yKsH{mL<)0``DVuTeyPIcrf)eAF0SFg`zTfq!A` zKC{hdV|7AV?j+*e6GG}9@MXhHzgqWZhZ!bdrO4-;!K6WGbK97dxF*#`tqFk13j3QK znegJ6@8Lh%Rsn^n9I~qtqA!J@k2dJm>~HG^Ng%gc%;yBVNJiV^E9*?}ad@V!X_%3s@5a}r^-5+S zca1|=BQzJx!nGZTvtDJ2PrIN)qqQ~@!yz|-jk_<>+X{UUenpbn9@a;Io`8hfzWcpQacdje%s?DZXJsfKwT%8hfr0IEvzOrO^-ah!m@Gr^! z`GC^(q zAI0EZu(!QxE1n`w+W`jFrC$DZb;sEG*okdm7I&!rWrjoQR5=&;a`kZC%MA8|EhrcN zKTv-B_gDLEKIo<=mI5G@oo@8*OveLjfifAWD)eKonY}7;($R_5GaH9@o2+nFJpID{ zYO{9BZfhYBx~_N{Gx&ll(0X?3Br)o`fQ&$D_V~xnA}-MBp|!p+x6KD8g0#-0^mEN1RIM?2)NU@VNR#jGw$peKCTBw8;!Qd!E17l5GKW=#$iFVCd<@T!UrLDmPL z^B@|nu6ATbTVLmwlg}|k`gaTft$5;+jnsR|3*37M!@y5$jH~* z$C{#rYkKA&(%(djm~5^wFibgd^8=|8;#pmj>`$lRt+Wzc1#@#+pBx(_dC4c}RsZcH z0*8OKYj<*c_H)NrWTf!3=(O1l9HjlC=q$ma53Jy91qoq4bV1jQF*;)K+Xbjp-WLt3 zq-Aiail>#4*CcSO_x49~c);?d=Aq0K9yfjnnj(WGvLWjjVZ7sDHN1lDd;e!5i*+0xhU7{U<-X2HBL-klAwF72_JPa~^ZU-5uWrHM%8sH}vk zi`12J%AQugk-Ul}3Ge-7-yu5^pJpWx1Ii(N{{PQ^`2?1~WPRU3)^S*pxN`^*7CF|p z^0RXE902ur{p!_bT0_&_0;n7ge{kYmlF@b?RTh`@Jeaue$q{bwrT8bp6M=Aqx>4Hd z+Cj)RNY?)iXga}JS>yi&o>l)nH7v3PLFe#Yb&c&M_omppS@C~8W(pjYolfGmF8i%0uLrT4)UCbN8Lpc>BZq=CeQBMIh=G?ZTSiTBCMoT zAQx@k@u0ae`)o0+Y@4LtQZuTgBVn(P1L~qb4;avoYkK_+=JwtNhwQSbe+ni{(be-7 z1g+8J_}kME=Q5?UvsN>F5N<~YmxZ@xZkezj^<;`a@l8b*2r2bB0`UH>2!is$qUY7L zcF3vUCEIZRQ1kN)wbtyj5LC30x{hz7FsVuwv0KtszN2Sy$V8_O5p7)Q0_mH+_o|g? zC=aj|dv?XDq;^kXpAxL*2i9mboxYluq1sBh@EfwmAjUuyDdl4YK!1!l{`1YyVpv2# z7X8PK*P54hK%{sAr7Gax2|=(m^!L}7yITwXx%$oTt0^-7d3EjOhX@27pOFjI?M8N1 z)}`0dD%={Ue`9IS#~AEvwRH>T@U_BF z0}h3=+1w!YJx1qg_m6<`j{4uCYZ!_y_cPnUvZ=XHvV^%jH`WG?4$-MTF3jc!v$2Ua zP3}TDP_ar+Ytu7?;Gt=0iJ|s)kGq|r*z&L+z1-Vt+j-hz7XWIXpGLy+z@4_bWEFHc z)x%BodjuilG(Y%c^V1V)b+#uWnuQHI24z^{9p#-?_dsZ|gIWO0Gja_*P z$;n%>hS=dH%ij`JlUDoYTd|9>aCxDGv<^22z8QdIkDB# z+n~pAwS3@FWp;M=2|?ErAJ8TL zSFTAmB?04J_NZ#GSVAP86zl=Z72iAb{AGvpqKuwmvc)t_&HfG!JjG`>YUGbw+^^BwMA`v6$kG~LOm@d9QlIz5QeSt|<*h5k}~L`+~{_aEA_#X$n_l7n5T99N&aq@o(B2pM^xZDAkQ z#ejJ;blb;<*4Abm2e740LA$`0(+vb{%EX^#4GlvleCV_h`>6`F+!P-_Spp4ZqVJzb zLy4gqNhu=F^yU^PXi1jDo+-UNTF`6|sZ8&NVMifsiF=41vgO}k>)+*S!lqWh>eG@f zhb9UsPQg$F#w0sV_Ek+1hOQV6XFc&|0;XMNW@a8vXW3u9ndxKhq8R}5dSt|2R7Av{ z*weR~!0+((770s)am2dbXAKk=w7}#vM4_C+N2!S^DHT$mGz(EER6_p`b{NyA3~j~l z__pubPSAP;uaXltV3OToqUN!{Sr>@-LGsPVTEh%8ep3OfM?tfh+|HE$aC`NM7^Ibi z+Jqo24{tlRzk2^YBMQdL>odl`f5>#IJE2^U-`R{j9sxjTpj?5CQl&!DMR(=2)=tF- z8_UbfXcuSmTNO5(k(S2EidEiikofH#a&$_~a|CyENJr=NUy1v)+WlZ7SMshTzv=?j zV>TAj(_i=i>yxDlyRu+7dAYg8ds7TLjxqcjW)lNgy!w4Yd_qq>6D!)Na5}18(+We9 zn|Ix6@)FswO+QismpeGi)Ud7JM%@x$R1vQgq%;IXEY?JNT z$gr?5y%r??+7O!_5;E_&MX+en zMUbN7%ZkiLba!3$4-+g=p<~L4hMf|0Whn*s8A6p2Q=g!;|EGxV`=H?gnAC;o`ox|b zk+am{IU7BtaaAoXk3uR29@1b~Ij&_)i-|JzVDWj$vHnKg$tE%8R|0Z42%>6HUOV$g z;07sz@`FFaV4rp=Y1}fsS?u`9lP8Oun;PS2E6_xn{n+^N)!7LjBe*ik0{dUwM&jdB zrk-A2*E!$F5L%pCM{v_Ik9d?0SeMsFK%8XQHvtXdy(#=JFngu$$z5Il5tw_BVxHsN zB<10~zu{swioIN#+HXsDkp`)3}y!@yo2f9CLl%$C@<5s(lW6}Xk7k@?o08($y+Xi`c z;JN!dN_5&MG=HtF1v84CQimP$IK9mhn5kI_FguDnWd*c_eyCX5DH5jE%IM|TsFoBh zrBx+p#Y)E2HM@LZaTGKj?ikQGkjf=~M_y2agXBkbyZj>3aW03NwXmxT1NXvZG4Qod z&X_VV+x%y?JB21}nOM#(R>X9&rA&&33FlAiiJ0x7Y@JXZrw23i3flMu8%s+v?i^6R z3=ci7v^6T*4xIO=KG^rRo%vE`@G@kMBKKA`b@kvd=i>Gy+ELqE+nsFbP2+1u1QIC; zmAQlxrdZ2D3)?#9wRIl*7n?S*m`-<@6>J&bIIb-OdC=H{k2rXL`4nwqe&lNU)L=Pu zaGm@58QT_uHA7xaY@0mDCD`c~L)4k+)a6|*yJl7s7SgdsU|k^p2fjJH@a;`VJyw%E;o4j z0#C(6N0*by!AnvTkSiQhGTWJxzd9#TnKvc^4b5PRi{|v%Ngs(4pgf9?kH=iq>R)6) zJV=o9HdS){hUA)GSXk&{sHmuPT{eXQ7dgYSFx+Uo1C7@ATB@pn#mSJ%PNoc(n$P$r z-Sz??IUb)>_93TdO7j?i1yInEZ=REkO=kS8tGk>NxCL$M-VT~wQ!s=g zTqZxKj|;qfi7zrw8J=72I&PL36^OwUVQ55DrV>jlX#_4f``s1}YQR;PD6N$~w`Rn| zJnP8D?uXsRNo32!A4Js?1@3Apj%x4i)Z!*#~7NeBXK`rKD(ezMb+V1$cRV|20|$1;IYw*e&Q_ zKm%4qG{#$5c*9;qOiXDP3BMA|E~V$K&pSFS(Pz_P8+P~esPF=lc`s+~(Yq7gx01)5 zl-?lw@msIUCYz@Z!-5@>TP(iad{^!_U*CLYmLhX``a;ruy4@i=fpMQnAu_66iK7jn zp|DXsi!hWdbh*R|siC1EaavWY5MpnXzAAjWLL$cfpE$vbPduPdm5t?hm;C6hU3+m$Ai$KFy0PY- zS2QsY9MZ?bluVjuu~^?iF6qekkIsx8?spEo1G{rDY3?8+o_34js1>pyT(Q2?^OH8t z=A1jaCyf@g>;*vt@SAH!8tGw87?itJS1&Adbaar8GU4`0&vfAlb*PVZ zWOube;Rz*oRK$QAZEkL^SV9OI24D1FD^al?eUJKx?hAaR=F)(ivb;s;mwn=$AN}@K zAfvvap<&XORKq=gH@jzQ6bh%SxSF2X$w%j*({(V-BW&Tm@)^-L9yF-$TirviM15W9U!ur)_I>M9l0kjEBBix5%!ofep+zTAq!N1{JD6>pTI7 z`+C2(OqG>8@8J;$*vmmxNX<<-YDA5%-{lavv^V^sE9Niim}3U+w$GTT$1{iZq# z*gjFdF+U$qd1ceF~z4XhT|8B27S+L1l`R%zO TUzMZT)*P30Q98L7Z2$Fdvn@nD literal 0 HcmV?d00001 diff --git a/game.css b/styles/game.css similarity index 77% rename from game.css rename to styles/game.css index 7b7cac2..a30ecc0 100644 --- a/game.css +++ b/styles/game.css @@ -7,6 +7,13 @@ body{ background: #ddd; } +.no_select{ + -webkit-user-select: none; /* Safari 3.1+ */ + -moz-user-select: none; /* Firefox 2+ */ + -ms-user-select: none; /* IE 10+ */ + user-select: none; /* Standard syntax */ +} + #game_container{ position: absolute; @@ -107,38 +114,17 @@ body{ /***********************************/ /***********************************/ -#game_hp{ - position: absolute; - width: 360px; - height: 80px; - top: 0px; - left: 0px; - - background: rgb(204,204,204); - background: linear-gradient(180deg, rgba(204,204,204,1) 80%, rgba(204,204,204,0) 100%); +canvas{ + border: none; } -#game_hp > div{ - position: absolute; - top:25px; - width: 150px; - height: 20px; - background: #ff4040; -} -#game_hp > #hp_human{ - left: 20px; - transform: skew(15deg); -} -#game_hp > #hp_wolf{ - right: 20px; - transform: skew(-15deg); -} - -/***********************************/ -/***********************************/ -/***********************************/ - #game_canvas{ position: absolute; top:0; left:0; - border: none; +} + +#game_hp{ + position: absolute; + width: 360px; + height: 100px; + top:0; left:0; }