Select Git revision
code.js 27.37 KiB
var lzs=function(){function e(e,o){if(!i[e]){i[e]={};for(var t=0;t<e.length;t++)i[e][e.charAt(t)]=t}return i[e][o]}var o=String.fromCharCode,t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",i={},l={compressToBase64:function(e){if(null==e)return"";var o=l._compress(e,6,(function(e){return t.charAt(e)}));switch(o.length%4){default:case 0:return o;case 1:return o+"===";case 2:return o+"==";case 3:return o+"="}},decompressFromBase64:function(o){return null==o?"":""==o?null:l._decompress(o.length,32,(function(r){return e(t,o.charAt(r))}))},compressToUTF16:function(e){return null==e?"":l._compress(e,15,(function(e){return o(e+32)}))+" "},decompressFromUTF16:function(e){return null==e?"":""==e?null:l._decompress(e.length,16384,(function(o){return e.charCodeAt(o)-32}))},compressToUint8Array:function(e){for(var o=l.compress(e),t=new Uint8Array(2*o.length),r=0,i=o.length;i>r;r++){var a=o.charCodeAt(r);t[2*r]=a>>>8,t[2*r+1]=a%256}return t},decompressFromUint8Array:function(e){if(null==e)return l.decompress(e);for(var t=new Array(e.length/2),r=0,i=t.length;i>r;r++)t[r]=256*e[2*r]+e[2*r+1];var a=[];return t.forEach((function(e){a.push(o(e))})),l.decompress(a.join(""))},compressToEncodedURIComponent:function(e){return null==e?"":l._compress(e,6,(function(e){return r.charAt(e)}))},decompressFromEncodedURIComponent:function(o){return null==o?"":""==o?null:(o=o.replace(/ /g,"+"),l._decompress(o.length,32,(function(t){return e(r,o.charAt(t))})))},compress:function(e){return l._compress(e,16,(function(e){return o(e)}))},_compress:function(e,o,t){if(null==e)return"";var r,i,l,a={},s={},c="",m="",n="",d=2,p=3,h=2,g=[],y=0,f=0;for(l=0;l<e.length;l+=1)if(c=e.charAt(l),Object.prototype.hasOwnProperty.call(a,c)||(a[c]=p++,s[c]=!0),m=n+c,Object.prototype.hasOwnProperty.call(a,m))n=m;else{if(Object.prototype.hasOwnProperty.call(s,n)){if(n.charCodeAt(0)<256){for(r=0;h>r;r++)y<<=1,f==o-1?(f=0,g.push(t(y)),y=0):f++;for(i=n.charCodeAt(0),r=0;8>r;r++)y=y<<1|1&i,f==o-1?(f=0,g.push(t(y)),y=0):f++,i>>=1}else{for(i=1,r=0;h>r;r++)y=y<<1|i,f==o-1?(f=0,g.push(t(y)),y=0):f++,i=0;for(i=n.charCodeAt(0),r=0;16>r;r++)y=y<<1|1&i,f==o-1?(f=0,g.push(t(y)),y=0):f++,i>>=1}0==--d&&(d=Math.pow(2,h),h++),delete s[n]}else for(i=a[n],r=0;h>r;r++)y=y<<1|1&i,f==o-1?(f=0,g.push(t(y)),y=0):f++,i>>=1;0==--d&&(d=Math.pow(2,h),h++),a[m]=p++,n=String(c)}if(""!==n){if(Object.prototype.hasOwnProperty.call(s,n)){if(n.charCodeAt(0)<256){for(r=0;h>r;r++)y<<=1,f==o-1?(f=0,g.push(t(y)),y=0):f++;for(i=n.charCodeAt(0),r=0;8>r;r++)y=y<<1|1&i,f==o-1?(f=0,g.push(t(y)),y=0):f++,i>>=1}else{for(i=1,r=0;h>r;r++)y=y<<1|i,f==o-1?(f=0,g.push(t(y)),y=0):f++,i=0;for(i=n.charCodeAt(0),r=0;16>r;r++)y=y<<1|1&i,f==o-1?(f=0,g.push(t(y)),y=0):f++,i>>=1}0==--d&&(d=Math.pow(2,h),h++),delete s[n]}else for(i=a[n],r=0;h>r;r++)y=y<<1|1&i,f==o-1?(f=0,g.push(t(y)),y=0):f++,i>>=1;0==--d&&(d=Math.pow(2,h),h++)}for(i=2,r=0;h>r;r++)y=y<<1|1&i,f==o-1?(f=0,g.push(t(y)),y=0):f++,i>>=1;for(;;){if(y<<=1,f==o-1){g.push(t(y));break}f++}return g.join("")},decompress:function(e){return null==e?"":""==e?null:l._decompress(e.length,32768,(function(o){return e.charCodeAt(o)}))},_decompress:function(e,t,r){var i,l,a,s,c,m,n,d=[],p=4,h=4,g=3,y="",f=[],w={val:r(0),position:t,index:1};for(i=0;3>i;i+=1)d[i]=i;for(a=0,c=Math.pow(2,2),m=1;m!=c;)s=w.val&w.position,w.position>>=1,0==w.position&&(w.position=t,w.val=r(w.index++)),a|=(s>0?1:0)*m,m<<=1;switch(a){case 0:for(a=0,c=Math.pow(2,8),m=1;m!=c;)s=w.val&w.position,w.position>>=1,0==w.position&&(w.position=t,w.val=r(w.index++)),a|=(s>0?1:0)*m,m<<=1;n=o(a);break;case 1:for(a=0,c=Math.pow(2,16),m=1;m!=c;)s=w.val&w.position,w.position>>=1,0==w.position&&(w.position=t,w.val=r(w.index++)),a|=(s>0?1:0)*m,m<<=1;n=o(a);break;case 2:return""}for(d[3]=n,l=n,f.push(n);;){if(w.index>e)return"";for(a=0,c=Math.pow(2,g),m=1;m!=c;)s=w.val&w.position,w.position>>=1,0==w.position&&(w.position=t,w.val=r(w.index++)),a|=(s>0?1:0)*m,m<<=1;switch(n=a){case 0:for(a=0,c=Math.pow(2,8),m=1;m!=c;)s=w.val&w.position,w.position>>=1,0==w.position&&(w.position=t,w.val=r(w.index++)),a|=(s>0?1:0)*m,m<<=1;d[h++]=o(a),n=h-1,p--;break;case 1:for(a=0,c=Math.pow(2,16),m=1;m!=c;)s=w.val&w.position,w.position>>=1,0==w.position&&(w.position=t,w.val=r(w.index++)),a|=(s>0?1:0)*m,m<<=1;d[h++]=o(a),n=h-1,p--;break;case 2:return f.join("")}if(0==p&&(p=Math.pow(2,g),g++),d[n])y=d[n];else{if(n!==h)return null;y=l+l.charAt(0)}f.push(y),d[h++]=l+y.charAt(0),l=y,0==--p&&(p=Math.pow(2,g),g++)}}};return l}();"function"==typeof define&&define.amd?define((function(){return lzs})):"undefined"!=typeof module&&null!=module&&(module.exports=lzs);const A=[[,,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1]],B=[[,1,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,1,1,1]],C=[[,,1,1,1,1],[,1,1,,,1,1],[,1,1],[,1,1],[,1,1],[,1,1,,,1,1],[,,1,1,1,1]],D=[[,1,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,1,1,1]],E=[[,,1,1,1,1,1],[,1,1,1,1,1,1],[,1,1],[,1,1,1,1,1],[,1,1],[,1,1,1,1,1,1],[,,1,1,1,1,1]],F=[[,,1,1,1,1,1],[,1,1,1,1,1,1],[,1,1],[,1,1,1,1,1],[,1,1],[,1,1],[,1,1]],G=[[,,1,1,1,1,1],[,1,1,1,1,1,1],,[,1,1],[,1,1,,1,1,1],[,1,1,,,1,1],[,1,1,1,1,1,1],[,,1,1,1,1]],H=[[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1]],I=[[,1,1,1,1,1,1],[,1,1,1,1,1,1],[,,,1,1],[,,,1,1],[,,,1,1],[,1,1,1,1,1,1],[,1,1,1,1,1,1]],J=[[,,1,1,1,1,1],[,,,,,1,1],[,,,,,1,1],[,,,,,1,1],[,,,,,1,1],[,1,1,,,1,1],[,,1,1,1,1]],K=[[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,1,1],[,1,1,1,1],[,1,1,,1,1],[,1,1,,,1,1],[,1,1,,,1,1]],L=[[,1,1],[,1,1],[,1,1],[,1,1],[,1,1],[,1,1,1,1,1,1],[,1,1,1,1,1,1]],M=[[,1,1,,,,1],[,1,1,1,,1,1],[,1,1,,1,,1],[,1,1,,,,1],[,1,1,,,,1],[,1,1,,,,1],[,1,1,,,,1]],N=[[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,1,,1,1],[,1,1,1,1,1,1],[,1,1,,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1]],O=[[,,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,,1,1,1,1]],P=[[,1,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,1,1,1],[,1,1],[,1,1],[,1,1]],Q=[[,,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,1,1,1],[,1,1,,,1,1],[,,1,1,1,1,,1]],R=[[,1,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1]],S=[[,,1,1,1,1],[,1,1,,,1,1],[,1,1],[,,1,1,1,1],[,,,,,1,1],[,1,1,,,1,1],[,,1,1,1,1]],T=[[,1,1,1,1,1,1],[,1,1,1,1,1,1],[,,,1,1],[,,,1,1],[,,,1,1],[,,,1,1],[,,,1,1]],U=[[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,1,1,1,1],[,,1,1,1,1]],V=[[,1,1,,,,1],[,1,1,,,,1],[,1,1,,,,1],[,1,1,,,,1],[,1,1,,,,1],[,,1,1,,1],[,,,1,1]],W=[[,1,1,,,,1],[,1,1,,,,1],[,1,1,,,,1],[,1,1,,1,,1],[,1,1,,1,,1],[,1,1,,1,,1],[,,,1,,1]],X=[[,1,,,,,1],[,1,1,,,1,1],[,,1,1,1,1],[,,,1,1],[,,1,1,1,1],[,1,1,,,1,1],[,1,,,,,1]],Y=[[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,,1,1,1,1,1],[,,,,,1,1],[,1,1,,,1,1],[,,1,1,1,1]],Z=[[,1,1,1,1,1,1],[,,,,,1,1],[,,,,1,1],[,,,1,1],[,,1,1],[,1,1],[,1,1,1,1,1,1],,],one=[[,,,1,1],[,,1,1,1],[,,,1,1],[,,,1,1],[,,,1,1],[,,,1,1],[,1,1,1,1,1,1]],two=[[,,1,1,1,1],[,1,1,,,1,1],[,,,,,1,1],[,,,,1,1],[,,,1,1],[,,1,1],[,1,1,1,1,1,1]],thr=[[,,1,1,1,1],[,1,1,,,1,1],[,,,,,1,1],[,,,,1,1],[,,,,,1,1],[,1,1,,,1,1],[,,1,1,1,1]],fou=[[,,,,1,1,1],[,,,1,1,1,1],[,,1,1,,1,1],[,1,1,,,1,1],[,1,1,1,1,1,1],[,,,,,1,1],[,,,,,1,1]],fiv=[[,1,1,1,1,1,1],[,1,1],[,1,1],[,1,1,1,1,1],[,,,,,1,1],[,,,,,1,1],[,1,1,1,1,1]],six=[[,,1,1,1,1],[,1,1,,,1,1],[,1,1],[,1,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,,1,1,1,1]],sev=[[,1,1,1,1,1,1],[,1,1,1,1,1,1],[,,,,1,1],[,,,,1,1],[,,,1,1],[,,,1,1],[,,,1,1]],eig=[[,,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,,1,1,1,1]],nin=[[,,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,,1,1,1,1,1],[,,,,,1,1],[,,,,,1,1],[,,,,,1,1]],zer=[[,,1,1,1,1],[,1,1,,,1,1],[,1,1,,,1,1],[,1,1,,1,1,1],[,1,1,1,,1,1],[,1,1,,,1,1],[,,1,1,1,1]],Slash=[[],[,,,,,,1],[,,,,,1],[,,,,1],[,,,1],[,,1],[,1]],Colon=[[,1,1],[,1,1],[],[],[],[,1,1],[,1,1]],Dot=[[],[],[],[],[],[,1,1],[,1,1]],Neg=[[],[],[],[,1,1,1,1,1,1],[],[],[]],Exclaim=[[,,1,1],[,,1,1],[,,1,1],[,1,1,1],[,1,1],[],[,1,1]],fI={A:A,B:B,C:C,D:D,E:E,F:F,G:G,H:H,I:I,J:J,K:K,L:L,M:M,N:N,O:O,P:P,Q:Q,R:R,S:S,T:T,U:U,V:V,W:W,X:X,Y:Y,Z:Z,1:one,2:two,3:thr,4:fou,5:fiv,6:six,7:sev,8:eig,9:nin,0:zer,"/":Slash,":":Colon,".":Dot,"-":Neg,"!":Exclaim};let id=0;const pi=Math.PI;let pause=0,lP="bye_dbh_";const gPar=e=>{let o=window.location.search;return new URLSearchParams(o).get(e)};let lS=localStorage,gS=e=>lS.getItem(e),sS=(e,o,t={})=>{t.c&&(o=lzs.compress(o)),lS.setItem(`${lP}${e}`,`${o}`)},o={};for(let e of Object.keys(lS))if(console.log(e),e.startsWith(`${lP}o_`)){switch(gS(e)){case"true":o[e.slice(10)]=1;break;case"false":o[e.slice(10)]=0}break}const cLV=gPar("lv");class Canvas{constructor(e){this.c=document.getElementById(e),this.ctx=this.c.getContext("2d"),this.w=this.c.width,this.h=this.c.height,this.tW=this.c.offsetWidth,this.tH=this.c.offsetHeight,this.cam={x:0,y:0},this.mPos={x:0,y:0}}fill(e){this.ctx.fillStyle=e,this.ctx.fillRect(0,0,this.w,this.h)}gMP(e){const o=this.c.getBoundingClientRect(),t=this.c.width/o.width,r=this.c.height/o.height;return this.mPos.x=(e.clientX-o.left)*t+this.cam.x,this.mPos.y=(e.clientY-o.top)*r+this.cam.y,{x:(e.clientX-o.left)*t,y:(e.clientY-o.top)*r}}translate(e,o){this.ctx.translate(e,o)}rotate(e){this.ctx.rotate(e)}dImg(e,o,t,r,i,l=0,a=o+r/2,s=t+i/2){this.ctx.save(),this.ctx.translate(a-this.cam.x,s-this.cam.y),this.ctx.rotate(l*pi/180),this.ctx.drawImage(e,-r/2,-i/2,r,i),this.ctx.restore()}sImg(e,o,t,r,i,l,a,s,c,m=0){this.ctx.save(),this.ctx.translate(o+r/2-this.cam.x,t+i/2-this.cam.y),this.ctx.rotate(m*pi/180),this.ctx.drawImage(e,l,a,s,c,-r/2,-i/2,r,i),this.ctx.drawImage(e,l,a,s,c,-r/2,-i/2,r,i),this.ctx.restore()}dI(e,o,t,r,i,l=0){this.dImg(e,o,t,r,i,l)}dR(e,o,t,r,i="white"){this.ctx.fillStyle=i,this.ctx.fillRect(e-this.cam.x,o-this.cam.y,t,r)}sR(e,o,t,r,i){this.ctx.strokeStyle=i,this.ctx.strokeRect(e-this.cam.x,o-this.cam.y,t,r)}dT(e,o,t,r,i,l,a="",s="top"){let c=(e=e.toUpperCase()).split(""),m=0;c.length%2==1&&(m=1);let n=(7*c.length-m)*i,d=7*r;switch(d%2==1&&(d+=1),"middle"===a?o-=n/2:"end"===a&&(o-=n),s){case"middle":case"center":t-=d/2;break;case"bottom":t-=d}let p=0,h=7*i;for(let e of c){this.ctx.fillStyle=l;let a=0,s=0,c=h;if(e=fI[e],null==e);else for(let l in e){s=0;for(let m of e[l])1==m&&this.ctx.fillRect(o+s*i+p*c-this.cam.x,t+a*r-this.cam.y,i,r),s++;a++}p++,h=7*i}return{w:n,h:d}}sC(e,o){this.cam.x=e,this.cam.y=o}}class Entity{constructor(e,o,t,r){this.name=e,this.x=o,this.y=t,this.sprite=r}step(){console.log(`${this.name} is stepping`),console.log(`${this.name} is at ${this.x}, ${this.y}`)}draw(){}intersects(e){return this.x<e.x+e.w&&this.x+this.w>e.x&&this.y<e.y+e.h&&this.y+this.h>e.y}}class Room{constructor(e){this.id=id,id+=1,this.name=e,this.objects=[],this.background="#111",this.w=c.w,this.h=c.h}spawn(e){this.objects.push(e)}step(){for(let e of this.objects)e.step()}draw(){for(let e of this.objects)e.draw()}dGUI(){}kD(e){}kH(e){}click(e,o){}start(){c.cam={x:0,y:0}}}let c=new Canvas("gameCanvas");gameCtx=c.ctx,c.fill("#151f1f"),gameCtx.imageSmoothingEnabled=!1;let dPM=e=>{c.ctx.globalAlpha=.7,c.fill("#000"),c.ctx.globalAlpha=.85,c.dR(c.w/2-150+c.cam.x,120+c.cam.y,300,120,"#000"),c.ctx.globalAlpha=1,c.dT("paused",c.w/2+c.cam.x,c.h/2-30+c.cam.y,3,3,"#fff","middle","middle");for(let e in gameRoom.pseo){let o=c.dT(gameRoom.pseo[e].t,c.w/2+c.cam.x,c.h/2+9*e+c.cam.y,1,1,"#fff","middle");if(e==gameRoom.pses){let t=img.i.a;c.dImg(t,c.w/2+c.cam.x-o.w/2-8,c.h/2+9*e+c.cam.y,6,7)}}};c.dT("Death By Hamster",c.w/2,c.h/2-40,2,2,"white","middle");let lErrT,img={i:{ingame:"./aimerthing.png",cursor:"./cursor.png",tileset:"./t.png",human:"./human.png",car:"./hamster.png",gun:"./gun.png",a:"./arw.png"}},loader=new Room("loader"),lText="Loading...",lErr=0;loader.dGUI=()=>{c.dT(lText,c.w/2,c.h/2,2,2,"white","middle"),lErr&&c.dT(lErrT,c.w/2,c.h/2+20,1,1,"red","middle")};let rooms=[],limg=0,timg=0;for(let e in img)for(let o in img[e])timg++;lText="Loading...",lText=`Loading images (${limg} / ${timg})`;for(let e in img)for(let o in img[e]){let t=new Image;t.addEventListener("load",(()=>{limg++,lText=`Loading images (${limg} / ${timg})`,limg==timg&&(loader.step=()=>{cRoom=rooms[1]},lText="Loaded! Please wait...")})),t.addEventListener("error",(e=>{lErr=1,lErrT=`Error loading image ${e.target.src}`})),t.src=img[e][o],img[e][o]=t,lText=`Loading images (${limg} / ${timg})`}let levels=["NrCMBoIJgXXNLgMx2AVkQFlRXqrgAMy+R4s8BxoqmZhqGED8GVjyRHdL64AbF1bgMvDAHYhwQQA4p0EvAhJFCOiiUDVESRoSSK+yDi01NbE4MMQMem8c10za8qgCc5V5pXXOzhc6SxNjCBCEIcnbgcuE64LHgHglyaCYeqZqSGQgeUXK+ggmgwSbFIqXE-GkCJnJV8IKC2YKS9dIi8ahZ5fCtNb3RDu0egYle7WWGkmV6tp3CdOEEkuIcoMprBHqCoCp6BLvzwAcq2Sf9x5Aqq5RX0aSHbqSSMs+JXeDTvHKHxZuQYkguEBZT+whGgJ+vAgclemjkT3hn2qNwQZVRuB0pQgbUxRzx2VwYVKBFxkAIhPJyM0oAIcLRBERaIgTLx9NBxHZYy5HlZAPeMCAA","NrCsBoGZwBgXXMALLWCzgIxsRATDsAJzgF7qYEry7gQ0YBshEA7C+ABwckMSYwOmbAwKDMFKFknRyibAQnys05QvRVVwTXO2pdzSoQFZBuxYo1YyVo5EnCoD9WuxLgb8ZJLvsJXX5OaoL2ytyhHuDsEdgQMeDM8fiS7AFcpBQozGn8koYpWtjcvlLxBPHYEWJBeigR7ChI6BAQTbTMbRgNzemdECR9puCDjp2ORp2G0J2K0KC20IxWgjOo84jVSxtY0Kw9Rpz7RfuCh7QkZxjcl2xcPRA3Ko8EjyiP0I-Ml8Uf6OynyyiMmGkioDhBajooKhyjmkhQ60ii3hCRRe1hQOUBHRkQIW0i2HxbkxkRaeRhkXYiKKFMC1KG9McjIIzNRamxzhJni5QyJ4BIfJIOJpwvSfPY4p5zGFgmYfIg8q5KEcSzgQA","NrCMBoCZwFgXXGcBmcBWBTX0dCPg91MiA2E8CAdkwlRsTRXAA5Mno3ErLXapiiCNHJCBDMDGaiwwlBWiQFlTFOgAGds02NY4HcCZMDTUvq0tzunifABOK4crrHTUBFugNW0Kk9SDM1BjTB4pAiNYLTMI8DD+HgxEenAZdzi+XSkuJyYc00zCDIl8OP4pNJdTcsEkI34zJKQzNNSysSYS5lB+VCVdVGRMGPkxNRqejpUhKqh+JiGxM0XmuaXppB5JzbWdlYhLfdZdg42IB23zk-tRpFAXI-vrp8vKCFf0x6r+L3a7itoLlAUiaeSiugcsSeUPwPmgBCC2AovlqKJRMjcqHyb0Kbk4Phc2Ic2MsOVOTVOXUsrQcFJuNL+7xcJSBLla6XZ1B+Im5qJxdJRXWBfzc2UwlmChTwnWR1VwlHq8slBGlu1VK1V2wuwl5H0UvMegx+fWNZ0oUg+Uke4zEwoI70s-SKoB4TrwWx+Ep+F2RPEeh29tyCkORtNClAcGKgbK0kAgUcgPLEib5KftUGgRxTTo4eH4kCB4bjZuLFItDidwhclejtyr4KQBdR1dhybo+Z1iEdqBkZkgqG2ihN8v7tyHDfHoMolgIW3iiAtNmGUA8PksngctibBgt8jgQA"];hamsterRef={file:img.i.car,nl:{x:0,y:0,w:32,h:16}};let lRef={file:img.i.tileset,default:{x:0,y:0,w:32,h:32,type:"blank"},tiles:[{},{x:32,type:"floor"},{x:64,type:"wall"},{x:96,type:"wall"},{x:128,type:"wall"},{x:160,type:"wall"},{x:192,type:"wall"},{x:224,type:"wall"},{x:256,type:"wall"},{x:32,type:"floor"},{x:32,type:"floor"},{x:352,type:"wall"},{x:384,type:"wall"},{x:416,type:"wall"},{x:448,type:"vent"}]};for(let e of lRef.tiles)for(let o in lRef.default)e[o]||(e[o]=lRef.default[o]);console.debug(img);let targFPS=60,frame=0,menu=new Room("menu");menu.s=0,menu.o=[{t:"Play",a:e=>{setRoom(4)}},{t:"Editor",a:e=>{setRoom(3)}},{t:"Settings",a:e=>{setRoom(5)}}],menu.dGUI=()=>{c.dT("Death by Hamster",c.w/2,c.h/2-25,4,4,"white","middle","middle"),c.dT("W/Up or S/Down to select",c.w/2,c.h/2,1,1,"gray","middle","middle"),c.dT("Space or ENTER to activate",c.w/2,c.h/2+8,1,1,"gray","middle","middle");for(let e in menu.o){let o=c.dT(`${menu.o[e].t}`,c.w/2,c.h/2+50+20*e,2,2,"#fff","middle","top");if(menu.s==e){let t=img.i.a,r=c.w/2-o.w/2-t.width-4,i=c.w/2+o.w/2+t.width-4;c.dImg(t,r,c.h/2+50+20*e,2*t.width,2*t.height),c.dImg(t,i,c.h/2+50+20*e,2*t.width,2*t.height,180)}}};const nextRoom=()=>{roomI++,roomI>=rooms.length&&(roomI=0),cRoom=rooms[roomI],cRoom.start()},prevRoom=()=>{roomI--,roomI<0&&(roomI=rooms.length-1),cRoom=rooms[roomI],cRoom.start()},setRoom=e=>{cRoom=rooms[e],cRoom.start()};menu.kD=e=>{"ArrowUp"!=e&&"KeyW"!=e||(menu.s-=1,menu.s<0&&(menu.s=menu.o.length-1)),"ArrowDown"!=e&&"KeyS"!=e||(menu.s+=1,menu.s>menu.o.length-1&&(menu.s=0)),"Space"!=e&&"Enter"!=e||menu.o[menu.s].a()};let gameRoom=new Room("Game"),lvlS=new Room("Level Select");lvlS.s=0,lvlS.o=levels,gameRoom.humans=0,gameRoom.li=0;let player=new Entity("Player",0,0);player.speed=0,player.maxSpeed=20,player.direction=0,player.sprite=img.i.car,player.crop=hamsterRef.nl,player.x=0,player.y=0,player.w=2*player.crop.w,player.h=2*player.crop.h,gameRoom.o=[{t:"Next Level",a:e=>{lvlS.s+=1,lvlS.kD("Space"),gameRoom.tutorial=0}},{t:"Level Select",a:e=>{setRoom(4)}},{t:"Menu",a:e=>{setRoom(1)}}],gameRoom.s=0,gameRoom.pseo=[{t:"Back to Menu",a:e=>{setRoom(1)}},{t:"Level Select",a:e=>{setRoom(4)}}],gameRoom.pses=0,player.oldDir=0,player.step=e=>{player.x+=player.speed*Math.cos(player.direction*pi/180),player.y+=player.speed*Math.sin(player.direction*pi/180),player.checkpoints=[];for(let e=0;e<9;e++){let o=player.x+player.w/2,t=player.y+player.h/2,r=0,i=0;switch(e){case 0:r=-32;break;case 1:r=32;break;case 2:r=-30,i=-15;break;case 3:r=-30,i=15;break;case 4:r=30,i=-15;break;case 5:r=30,i=15;break;case 6:r=20;break;case 7:r=-20}let l=o-r*Math.cos(player.direction*pi/180)-i*Math.sin(player.direction*pi/180),a=t-r*Math.sin(player.direction*pi/180)+i*Math.cos(player.direction*pi/180);player.checkpoints.push({x:l,y:a}),player.speed*=.9}for(let e of player.checkpoints){let o=e.x/64,t=e.y/64;gameRoom.checkwall(o,t)&&(player.direction=player.oldDir,player.x=player.xy[0],player.y=player.xy[1],player.speed-=.1)}c.sC(player.x-c.w/2,player.y-c.h/2),player.oldDir=player.direction,player.xy=[player.x,player.y]},console.log(player),player.draw=e=>{c.sImg(player.sprite,player.x,player.y,player.w,player.h,player.crop.x,player.crop.y,player.crop.w,player.crop.h,player.direction);let o=img.i.gun,t=player.x+player.w/2,r=player.y+player.h/2,i=t-13*Math.cos(player.direction*pi/180)-0*Math.sin(player.direction*pi/180),l=r-13*Math.sin(player.direction*pi/180)+0*Math.cos(player.direction*pi/180);player.gx=i,player.gy=l,pause||gameRoom.finish||(player.aim=180*Math.atan2(c.mPos.y-l,c.mPos.x-i)/pi),c.dImg(o,i,l,2*o.width,2*o.height,player.aim,i,l);for(let e of player.checkpoints)c.dR(e.x,e.y,1,1,"black")},player.shoot=()=>{let e=new Entity("Bullet",player.gx,player.gy);e.speed=20,e.direction=player.aim,e.w=2,e.h=2,e.step=()=>{for(let o=0;o<cRoom.objects.length;o++){let t=cRoom.objects[o];if(t!=e&&t.intersects(e)&&(console.log(t),t!=player))return cRoom.objects.splice(o,1),cRoom.objects.splice(cRoom.objects.indexOf(e),1),void(gameRoom.humans-=1)}gameRoom.checkwall(e.x/64,e.y/64)&&cRoom.objects.splice(cRoom.objects.indexOf(e),1),e.x+=e.speed*Math.cos(e.direction*pi/180),e.y+=e.speed*Math.sin(e.direction*pi/180)},e.draw=()=>{c.dR(e.x,e.y,e.w,e.h,"#2f2f2f")},cRoom.spawn(e)},gameRoom.kD=e=>{if(!pause&&!gameRoom.finish&&("ArrowUp"!=e&&"KeyW"!=e||(player.speed+=player.accel,player.speed>player.maxSpeed&&(player.speed=player.maxSpeed)),"ArrowDown"!=e&&"KeyS"!=e||(player.speed-=.8*player.accel,player.speed<-player.maxSpeed&&(player.speed=-player.maxSpeed)),"ArrowLeft"!=e&&"KeyA"!=e||(player.direction-=2.5,player.direction<0&&(player.direction=360)),"ArrowRight"!=e&&"KeyD"!=e||(player.direction+=2.5,player.direction>360&&(player.direction=0)),"Space"==e&&player.shoot(),"ShiftLeft"==e)){console.log("Triggered!");for(let e=6;e<9;e++){let o=Math.floor(player.checkpoints[e].x/64),t=Math.floor(player.checkpoints[e].y/64);for(let e of gameRoom.level)if("vent"==lRef.tiles[e[0]].type&&e[1]==o&&e[2]==t)for(let e of gameRoom.level)"vent"==lRef.tiles[e[0]].type&&e[1]!=o&&e[2]!=t&&(console.log(o,t),console.log(e[1],e[2]),player.x=64*e[1],player.y=64*e[2]+16,player.speed=0)}}gameRoom.finish||("KeyP"!=e&&"Escape"!=e||(pause=!pause),pause&&("ArrowUp"!=e&&"KeyW"!=e||(gameRoom.pses-=1,gameRoom.pses<0&&(gameRoom.pses=gameRoom.pseo.length-1)),"ArrowDown"!=e&&"KeyS"!=e||(gameRoom.pses+=1,gameRoom.pses>gameRoom.pseo.length-1&&(gameRoom.pses=0)),"Space"!=e&&"Enter"!=e||(pause=0,gameRoom.tutorial=0,gameRoom.pseo[gameRoom.pses].a()))),gameRoom.finish&&("ArrowUp"!=e&&"KeyW"!=e||(gameRoom.s-=1,gameRoom.s<0&&(gameRoom.s=gameRoom.o.length-1)),"ArrowDown"!=e&&"KeyS"!=e||(gameRoom.s+=1,gameRoom.s>gameRoom.o.length-1&&(gameRoom.s=0)),"Space"!=e&&"Enter"!=e||(gameRoom.finish=0,gameRoom.tutorial=0,gameRoom.o[gameRoom.s].a()))},gameRoom.kH=e=>{pause||gameRoom.finish||("ArrowUp"!=e&&"KeyW"!=e||(player.speed+=player.accel,player.speed>player.maxSpeed&&(player.speed=player.maxSpeed)),"ArrowDown"!=e&&"KeyS"!=e||(player.speed-=1.1*player.accel,player.speed<-player.maxSpeed&&(player.speed=-player.maxSpeed)),"ArrowLeft"!=e&&"KeyA"!=e||(player.direction-=2.5,player.direction<0&&(player.direction=360)),"ArrowRight"!=e&&"KeyD"!=e||(player.direction+=2.5,player.direction>360&&(player.direction=0)))},gameRoom.click=e=>{pause||gameRoom.finish||player.shoot()},gameRoom.checkwall=(e,o)=>{e=Math.floor(e),o=Math.floor(o);for(let t of gameRoom.level)if("wall"==lRef.tiles[t[0]].type&&t[1]==e&&t[2]==o)return!0;return!1},gameRoom.start=()=>{cLV&&(gameRoom.level=cLV),gameRoom.li&&(gameRoom.level=JSON.parse(lzs.decompressFromEncodedURIComponent(levels[gameRoom.li-1]))),gameRoom.finish=0,gameRoom.objects=[],gameRoom.humans=0,gameRoom.spawn(player),gameRoom.tutorial?player.accel=.8:player.accel=1.5;for(let e of gameRoom.level)if(9===e[0]&&(player.x=64*e[1]+32,player.y=64*e[2]+32),10===e[0]){let o=new Entity("Human",64*e[1],64*e[2],img.i.human);o.w=52,o.h=32,o.bh=Math.floor(3*Math.random()),o.bb=Math.floor(3*Math.random()),o.getT=e=>{o.tX=Math.floor((o.x+o.w)/64),o.tY=Math.floor((o.y+o.h)/64)},o.step=e=>{let t=[o.x,o.y];if(o.timer<=0){let e=Math.floor(4*Math.random());if(o.direction=90*e,0===e&&(o.y-=o.h),1===e&&(o.x+=o.w),2===e&&(o.y+=o.w),3===e&&(o.x-=o.h),o.getT(),gameRoom.checkwall(o.tX,o.tY))return o.x=t[0],o.y=t[1],void o.step();o.timer=Math.floor(60*Math.random())+60}o.timer--},o.draw=e=>{c.sImg(o.sprite,o.x,o.y,o.w,o.h,o.bb*o.w/2,0,o.w/2,o.h/2,o.direction),c.sImg(o.sprite,o.x,o.y,o.w,o.h,o.bh*o.w/2,o.h/2,o.w/2,o.h/2,o.direction)},o.timer=90,gameRoom.spawn(o),gameRoom.humans+=1}},gameRoom.step=e=>{if(lvlS.s+1>=lvlS.o.length&&(gameRoom.o[0]={t:"you killed them all!",a:e=>{alert("well done!!!")}}),!pause&&!gameRoom.finish){gameRoom.humans<=0&&(gameRoom.tutorial=0,gameRoom.finish=!0);for(let e of gameRoom.objects)e.step()}},gameRoom.draw=e=>{for(let e of gameRoom.level)c.sImg(lRef.file,32*e[1]*2,32*e[2]*2,64,64,lRef.tiles[e[0]].x,0,32,32);gameRoom.tutorial&&(c.dT("Welcome to",192,79,1,1,"black"),c.dT("Death by Hamster",224,89,2,2,"black","middle"),c.dT("Use WASD/arrows to move",128,128,1,1,"black"),c.dT("Aim with the mouse and click to shoot!",128,138,1,1,"black"),c.dT("As a member of the hamster uprising,",384,217,1,1,"black"),c.dT("you might want to kill any humans",384,227,1,1,"black"),c.dT("you find!",624,237,1,1,"black","end"));for(let e=0;e<cRoom.objects.length;e++)cRoom.objects[e].draw()},gameRoom.dGUI=e=>{if(c.dT(`Humans:${gameRoom.humans}`,c.w-10+c.cam.x,10+c.cam.y,2,2,"#fff","end"),pause&&dPM(gameRoom),gameRoom.finish){c.ctx.globalAlpha=.7,c.fill("#000"),c.ctx.globalAlpha=.85,c.dR(c.w/2-150+c.cam.x,120+c.cam.y,300,150,"#000"),c.ctx.globalAlpha=1,c.dT("You Won!",c.w/2+c.cam.x,c.h/2-30+c.cam.y,3,3,"#fff","middle","middle");for(let e in gameRoom.o){let o=c.dT(gameRoom.o[e].t,c.w/2+c.cam.x,c.h/2+9*e+c.cam.y,1,1,"#fff","middle");if(e==gameRoom.s){let t=img.i.a;c.dImg(t,c.w/2+c.cam.x-o.w/2-8,c.h/2+9*e+c.cam.y,6,7)}}}};let editor=new Room("Editor");editor.i=0,editor.t=lRef,editor.l=[],editor.saving=!1,editor.sa=0,editor.start=e=>{editor.dPos=[15,65]},editor.draw=e=>{for(let e of editor.l)c.sImg(lRef.file,32*e[1]+editor.dPos[0],32*e[2]+editor.dPos[1],32,32,32*e[0],0,32,32),c.dR(editor.dPos[0],editor.dPos[1],1,1,"red")},editor.step=e=>{editor.i<0&&(editor.i=lRef.tiles.length-1),editor.i>lRef.tiles.length-1&&(editor.i=0)},editor.generate=e=>{editor.saving=1;for(let e of editor.l)0==e[0]&&editor.l.splice(editor.l.indexOf(e));let o=lzs.compressToEncodedURIComponent(JSON.stringify(editor.l));console.log(o),o!=editor.data&&(document.getElementById("leveltext").innerText=o,document.getElementById("levelLink").innerHTML=`<a href="/?lv=${o}&goto=2">Play</a>`),editor.data=o,editor.saving=0,editor.sa=1},editor.click=(e,o)=>{if(o<50)e>516&&o<50&&(editor.saving||editor.generate(),editor.saveclick=!0);else{e=Math.floor((e-editor.dPos[0])/32),o=Math.floor((o-editor.dPos[1])/32);for(let t in editor.l)if(editor.l[t][1]==e&&editor.l[t][2]==o)return void(editor.l[t]=[editor.i,e,o]);editor.l.push([editor.i,e,o]),editor.sa=0}},editor.kH=e=>{switch(e){case"KeyW":case"ArrowUp":editor.dPos[1]+=4;break;case"KeyS":case"ArrowDown":editor.dPos[1]-=4;break;case"KeyA":case"ArrowLeft":editor.dPos[0]+=4;break;case"KeyD":case"ArrowRight":editor.dPos[0]-=4}},editor.dGUI=e=>{c.dR(0,0,c.w,50,"gray"),c.dT(`DBH Editor::${editor.n}`,15,25,2,2,"#fff","start","middle");let o=c.dT("Save",c.w-15,25,2,2,"#fff","end","middle");c.mPos.x>c.w-30-o.w&&c.mPos.y<50&&c.dT("Save",c.w-15,25,2,2,"#e5e5e5","end","middle"),editor.sa&&c.dT("Save",c.w-15,25,2,2,"#1fdc2f","end","middle"),editor.saving&&c.dT("Save",c.w-15,25,2,2,"#1fccdc","end","middle"),c.sImg(editor.t.file,c.mPos.x+16,c.mPos.y+16,32,32,32*editor.i,0,32,32)},lvlS.dGUI=()=>{c.dT("Death by Hamster",c.w/2,25,2,2,"white","middle","top"),c.dT("Level Select",c.w/2,44,1,1,"gray","middle","middle");for(let e in lvlS.o){let o=parseInt(e)+1;c.dT(`${o}`,20+32*o,70,2,2,"#fff","middle","middle"),e==lvlS.s&&c.sR(6+32*o,54,32,32,"#fff")}},lvlS.kD=e=>{"ArrowUp"!=e&&"ArrowRight"!=e&&"KeyW"!=e&&"KeyD"!=e||(lvlS.s-=1,lvlS.s<0&&(lvlS.s=lvlS.o.length-1)),"ArrowDown"!=e&&"ArrowLeft"!=e&&"KeyS"!=e&&"KeyA"!=e||(lvlS.s+=1,lvlS.s>lvlS.o.length-1&&(lvlS.s=0)),"Space"!=e&&"Enter"!=e||(gameRoom.li=lvlS.s+1,0===lvlS.s&&(gameRoom.tutorial=1),setRoom(2)),"KeyE"==e&&(editor.l=JSON.parse(lzs.decompressFromEncodedURIComponent(lvlS.o[lvlS.s].data)),setRoom(3))};let options=new Room("Settings");options.s=0,options.ops=o,options.o=[{t:"Show FPS",a:e=>{o.showFPS=!o.showFPS,sS("o_showFPS",o.showFPS)},v:"showFPS"},{t:"Menu",a:e=>{setRoom(0)}}],options.dGUI=()=>{c.dT("Settings",c.w/2,25,2,2,"#fff","middle","top");for(let e in options.o){let o=options.o[e];c.dT(`${options.o[e].t}`,150,50+20*e,2,2,"#fff","left","top");if(options.s==e){let o=img.i.a;c.dImg(o,136,50+20*e,2*o.width,2*o.height)}let t=options.ops[o.v];null!=t&&c.dT(`${t}`,450,50+20*e,2,2,"#fff","end")}},options.kD=e=>{"ArrowUp"!=e&&"ArrowRight"!=e&&"KeyW"!=e||(options.s-=1,options.s<0&&(options.s=options.o.length-1)),"ArrowDown"!=e&&"ArrowLeft"!=e&&"KeyS"!=e||(options.s+=1,options.s>options.o.length-1&&(options.s=0)),"Space"!=e&&"Enter"!=e||options.o[options.s].a&&options.o[options.s].a()},rooms.push(loader),rooms.push(menu),rooms.push(gameRoom),rooms.push(editor),rooms.push(lvlS),rooms.push(options);let roomI=gPar("goto")?gPar("goto"):0,cRoom=rooms[roomI],keysPressed={},keysLastPressed={};document.addEventListener("keydown",(e=>{keysPressed[e.code]=!0})),document.addEventListener("keyup",(e=>{keysPressed[e.code]=!1,keysLastPressed[e.code]=!1}));let lastTime=0,mse={x:0,y:0},lastClick={x:0,y:0},leftclicked=!1,rightclicked=!1;c.c.addEventListener("mousemove",(e=>{mse=c.gMP(e)})),c.c.addEventListener("mousedown",(e=>{switch(e.preventDefault(),lastClick=c.gMP(e),mse=c.gMP(e),e.button){case 0:leftclicked=1;break;case 1:rightclicked=1}})),c.c.addEventListener("mouseup",(e=>{lastClick=c.gMP(e),mse=c.gMP(e)})),c.c.oncontextmenu=e=>0,window.onwheel=e=>{e.deltaY>0&&(editor.i+=1),e.deltaY<0&&(editor.i-=1)};try{cRoom.start(),setInterval((()=>{c.tW=c.c.offsetWidth,c.tH=c.c.offsetHeight,c.scale=c.tW/c.w,frame++,c.fill(cRoom.background);for(let e in keysPressed)keysPressed[e]&&(keysLastPressed[e]?keysLastPressed[e]&&cRoom.kH(e):(cRoom.kD(e),keysLastPressed[e]=!0));switch(leftclicked&&(cRoom.click(lastClick.x,lastClick.y),leftclicked=0),cRoom.step(),cRoom.draw(),cRoom.dGUI(),o.showFPS&&c.dT(`FPS:${Math.round(1e3/(Date.now()-lastTime))}`,0+c.cam.x,0+c.cam.y,1,1,"#fafafa","left","top"),cRoom.name){case"menu":case"Editor":c.ctx.drawImage(img.i.cursor,Math.round(mse.x),Math.round(mse.y),2*img.i.cursor.width,2*img.i.cursor.height);break;case"Game":c.ctx.drawImage(img.i.ingame,Math.round(mse.x)-16,Math.round(mse.y)-16,32,32)}lastTime=Date.now()}),1e3/targFPS)}catch(e){c.fill("#1c1c1c"),c.dT("Death By Hamster",c.w/2,c.h/2-40,2,2,"white","middle"),c.dT(`${e}`,c.w/2,c.h/2,1,1,"red","middle"),c.dT("pls let Bye know by emailing him via",c.w/2,c.h/2+40,1,1,"white","middle"),c.dT("bye at byecorps.com",c.w/2,c.h/2+60,2,2,"white","middle")}