Files
microw8/v0.2.2/index.html
2024-04-09 22:04:39 +00:00

1 line
17 KiB
HTML

<!doctype html><html><head><meta charset="utf8"><title>MicroW8</title><link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@500&display=swap" rel="stylesheet"><style>html,body,canvas{margin:0;padding:0}html{color:#808070;height:100%;background-color:#202024;font-family:Josefin Sans,Verdana,Arial Black,sans-serif}body{height:100%;grid-template-rows:1fr 0fr;display:grid}#uw8{position:absolute}#uw8 a{font-size:130%}#centered{place-self:center}a{color:#303630}a:hover{color:#405040}.screen{width:320px;height:240px;image-rendering:pixelated;background-color:#202428;border:4px solid #303040;margin-bottom:8px;box-shadow:5px 5px 20px #000}#screen{cursor:none}#start{font-size:150%}#timer:before{content:"";width:12px;height:12px;background-color:red;border-radius:6px;margin-right:3px;display:inline-block}#message{margin-bottom:8px}.error{color:#e04030}button{color:#808070;background-color:#303440;border:1px solid #404040;border-radius:4px;padding:4px;font-family:inherit}button:hover{background-color:#202010}button:active{background-color:#504450}@media (min-width:680px) and (min-height:620px){.screen{width:640px;height:480px}}@media (min-width:1000px) and (min-height:800px){.screen{width:960px;height:720px}}@media (width:640px) and (height:480px){.screen{width:640px;height:480px;border:0;margin:0}body{overflow:hidden}}</style></head><body> <div id="uw8"> <a href="https://exoticorn.github.io/microw8">MicroW8</a> 0.2.2 </div> <div id="centered"> <canvas class="screen" id="screen" width="320" height="240"> </canvas> <button class="screen" id="start" style="display:none">Click to start</button> <div id="timer" hidden></div> <div id="message"></div> <button id="cartButton" style="visibility:hidden">Load cart...</button> </div> <div id="footer"> <a href="http://unlicense.org/" ref="license">Unlicense</a> </div> </body><script type="module">function e(e){return e&&e.__esModule?e.default:e}class t extends AudioWorkletNode{constructor(e){super(e,"apu",{outputChannelCount:[2]})}}let a=(...e)=>new Uint8Array(...e),n=(...e)=>new Uint32Array(...e);let s=function(s,r={}){r.setMessage||(r.setMessage=(e,t)=>{t&&console.log("error: "+t)});let A,B,o,i,l,d,F,u,c=s.getContext("2d"),D=c.createImageData(320,240),C=r.devkitMode,h=0,f=null==r.keyboardElement?s:r.keyboardElement;if(f){let e=e=>{let t,a="keydown"==e.type;switch(e.code){case"ArrowUp":t=1;break;case"ArrowDown":t=2;break;case"ArrowLeft":t=4;break;case"ArrowRight":t=8;break;case"KeyZ":t=16;break;case"KeyX":t=32;break;case"KeyA":t=64;break;case"KeyS":t=128;break;case"KeyR":a&&m(B,!0);break;case"F9":a&&s.toBlob((e=>{g(e,".png")})),e.preventDefault();break;case"F10":a&&function(){if(l)return l.stop(),l=null,F.disconnect(u),F=null,void(u=null);let e=s.captureStream();u=o.createMediaStreamDestination(),F=i,i.connect(u),e.addTrack(u.stream.getAudioTracks()[0]),l=new MediaRecorder(e,{mimeType:"video/webm",videoBitsPerSecond:25e6});let t=[];l.ondataavailable=e=>{t.push(e.data)};let a=r.timerElement;a&&(a.hidden=!1,a.innerText="00:00");function n(){if(d){if(a){let e=Math.floor((Date.now()-d)/1e3);a.innerText=Math.floor(e/60).toString().padStart(2,"0")+":"+(e%60).toString().padStart(2,"0")}setTimeout(n,1e3)}}l.onstop=()=>{a&&(a.hidden=!0),g(new Blob(t,{type:"video/webm"}),".webm")},l.start(),d=Date.now(),setTimeout(n,1e3)}(),e.preventDefault()}a?h|=t:h&=~t};f.onkeydown=e,f.onkeyup=e}async function m(l,d){A&&(A(),A=null),o=new AudioContext({sampleRate:44100});let F=!0,u=new AbortController;A=()=>{o.close(),F=!1,u.abort()};let f=l.byteLength;if(r.setMessage(f),0==f)return;await o.audioWorklet.addModule(e("data:application/javascript,let%20e%3D%28...e%29%3D%3Enew%20Uint8Array%28...e%29%3Bclass%20s%20extends%20AudioWorkletProcessor%7Bconstructor%28%29%7Bsuper%28%29%2Cthis.sampleIndex%3D0%2Cthis.currentTime%3D0%2Cthis.isFirstMessage%3D%210%2Cthis.pendingUpdates%3D%5B%5D%2Cthis.port.onmessage%3De%3D%3E%7Bthis.memory%3F%28this.isFirstMessage%26%26%28this.currentTime%2B%3D%28e.data.t-this.currentTime%29%2F8%2Cthis.isFirstMessage%3D%211%29%2Cthis.pendingUpdates.push%28e.data%29%29%3Athis.load%28e.data%5B0%5D%2Ce.data%5B1%5D%29%7D%7Dasync%20load%28e%2Cs%29%7Blet%20t%3Dnew%20WebAssembly.Memory%28%7Binitial%3A4%2Cmaximum%3A4%7D%29%2Ci%3D%7Benv%3A%7Bmemory%3At%7D%7D%3Bfor%28let%20e%20of%5B%22acos%22%2C%22asin%22%2C%22atan%22%2C%22atan2%22%2C%22cos%22%2C%22exp%22%2C%22log%22%2C%22sin%22%2C%22tan%22%2C%22pow%22%5D%29i.env%5Be%5D%3DMath%5Be%5D%3Bfor%28let%20e%3D9%3Be%3C64%3B%2B%2Be%29i.env%5B%22reserved%22%2Be%5D%3D%28%29%3D%3E%7B%7D%3Blet%20r%3D%22%22%3Bi.env.logChar%3De%3D%3E%7B10%3D%3De%3F%28console.log%28r%29%2Cr%3D%22%22%29%3Ar%2B%3DString.fromCharCode%28e%29%7D%3Bfor%28let%20e%3D0%3Be%3C16%3B%2B%2Be%29i.env%5B%22g_reserved%22%2Be%5D%3D0%3Blet%20n%3Dasync%20e%3D%3E%28await%20WebAssembly.instantiate%28e%2Ci%29%29.instance%2Ca%3Dawait%20n%28e%29%3Bfor%28let%20e%20in%20a.exports%29i.env%5Be%5D%3Da.exports%5Be%5D%3Blet%20o%3Dawait%20n%28s%29%3Bthis.memory%3Dt%2Cthis.snd%3Do.exports.snd%7C%7Ca.exports.sndGes%2Cthis.port.postMessage%282%29%7Dprocess%28s%2Ct%2Ci%29%7Bif%28this.isFirstMessage%3D%210%2Cthis.snd%29%7Bfor%28%3Bthis.pendingUpdates.length%3E0%26%26this.pendingUpdates%5B0%5D.t%3C%3Dthis.currentTime%3B%29e%28this.memory.buffer%2C80%2C32%29.set%28e%28this.pendingUpdates.shift%28%29.r%29%29%3Bnew%20Uint32Array%28this.memory.buffer%29%5B16%5D%3Dthis.currentTime%3Blet%20s%3Dt%5B0%5D%2Ci%3Dthis.sampleIndex%2Cr%3Ds%5B0%5D.length%3Bfor%28let%20e%3D0%3Be%3Cr%3B%2B%2Be%29s%5B0%5D%5Be%5D%3Dthis.snd%28i%2B%2B%29%2Cs%5B1%5D%5Be%5D%3Dthis.snd%28i%2B%2B%29%3Bthis.sampleIndex%3D4294967295%26i%2Cthis.currentTime%2B%3Dr%2F44.1%7Dreturn%210%7D%7DregisterProcessor%28%22apu%22%2Cs%29%3B")),i=new t(o);let g,w=0,Q=new Promise((e=>g=e)),p=e=>{w|=e,3==w&&g&&(g(!0),g=null)},y=()=>{"suspended"==o.state?(r.startButton&&(r.startButton.style="",s.style="display:none"),(r.startButton||s).onclick=()=>{o.resume()}):(r.startButton&&(r.startButton.style="display:none",s.style=""),p(1))};o.onstatechange=y,y(),B=l;let E=window.location.pathname;if(f<=1024&&!d){let e="";for(let t of a(l))e+=String.fromCharCode(t);E+="#"+btoa(e),E!=window.location.pathname+window.location.hash&&history.pushState(null,null,E)}s.width=s.width;try{let t={initial:4};C||(t.maximum=4);let s,A=new WebAssembly.Memory(t),d=a(A.buffer),g={env:{memory:A}},w=e=>{if(s&&(!C||0!=a(e)[0])){d.set(a(e));let t=s.exports.load_uw8(e.byteLength);e=new ArrayBuffer(t),a(e).set(d.slice(0,t))}return e},y=async e=>(await WebAssembly.instantiate(e,g)).instance,E=async e=>w(await(await fetch(e)).arrayBuffer());s=await y(await E(e("data:application/wasm;base64,AGFzbQEAAAABFQRgAX8Bf2ACf38Bf2ADf39%2FAGAAAAIPAQNlbnYGbWVtb3J5AgAEAwkIAAABAgEAAAMGEAN%2FAUEAC38BQQALfwFBAAsHGQIIbG9hZF91dzgAAAp1bmNvbXByZXNzAAQIAQcKngUIxwEBB39BAC0AAEEBayIBQQBIBEAgAA8LQYDAByAAaiECIAFBAXEEQEEBQYHABxAEIQIFQYDAB0EAIAAQAwtBAEGAhA9BCBADQYiEDyEDQQghBEGBwAchBQNAIAUgAkggAyMATiAFLQAAIAMtAABMcnEEQCAEIAQgBRACIgZqIQQgAyMASCAFLQAAIAMtAABGcQRAIAMgAxABaiEDCyAFIAZqIQUMAQsgAyMASARAIAQgBCADEAIiB2ohBCADIAdqIQMMAQsLIAQLPAEEfyAAIQEDQCACIAFBAWoiAS0AACIEQf8AcSADdHIhAiADQQdqIQMgBEEHdQ0ACyABQQFqIABrIAJqCxIBAX8gACABIAEQASICEAMgAgskAANAIAJBAEoEQCAAIAJBAWsiAmogASACai0AADoAAAwBCwsLqQEBBn8gACQBQQAkAgNAIANBgAE6AICADyADQQFqIgNBgQNIDQALAkADQEEAEAYiBQRAIAQEf0EBBUGAAhAGCwRAQYECEAVBAWsiAkUNAwtBwQIQBSEGA0AgASABIAJrLQAAOgAAIAFBAWohASAGQQFrIgYNAAsFQQEhBwNAIAdBAXQgBxAGciIHQYACSA0ACyABIAc6AAAgAUEBaiEBCyAFIQQMAAsLIAELNAECfwNAIAAgAmoQBgRAIAEgACACakEgahAGIAJ0ciEBIAJBAWohAgwBCwsgAUEBIAJ0cgtxAQR%2FA0AjAkGAIEgEQCMCQQh0IwEtAAByJAIjAUEBaiQBDAELCyMCQf8BcSICIAAtAICADyIBIwJBCHUiA2xBgAIgAWsgA2wgAWsgAiABSCIEG2okAiAAIAFBByAEQYECbGogAWtBBHVqOgCAgA8gBAsMAEEAQYCEDxAEJAALC%2BYDAQBBAAvfA5efz3FZ0f5yFbUvithc%2FqHFfzojM7KVsEv7fSGG57W3091tBMQ3YrNZU2%2FjguFMMLW1a4URR2fHh86SJQlSzejWWM32zngAVQFyjmIA0KvcWHlGnF5vO%2FwsABeCDHnLZ7%2B1ixqHjaqFV14Xn%2B%2B00bK8h%2FZ66bwxYl1h%2BNAL%2BQh0zt3iSqNerI7l0QMOySt%2FPOFO3hXwdaMgxln646dVGVLPhHQbMoREgNzLIYMv4gBUU6Cr%2BR0QYi3tDAXJ4SoSxKCyLsv7cfb5Cl%2BYC5Jus5xElZgiDlIIHBqFDldTRQ5nBJl5es0ZDmEl3WiHmM1UA8QeePxqNrYic7ifdP3EBFW5S6xR2jJ3ck%2BXX1DdwcNjNkIkxbPKNFOeqWZ%2FJ72Bz14fhYzfrX%2FfCvJQ2mBNrPbSIjF%2B6V1RUKuyzvSVyFXaomCpe3Y3V7yP5iFDf7QCB30gL0GFxjKWBXWlhYCZ9Onp%2FTL3Keov6ZK4i82JfbYTpae0WsqGQAR6wYofqij4UeYizaVoAe%2Bu9yyPAdnM0VunjuR3d3RnLt58zObzS9uQOc7yxqbXgjE72aO%2FdARvdDO9JCAyCLD53ulWsdoUTkhRSVTggPCbCE%2BzQNKNA5C1JLS5pYuCUSvw653hsqj6")));for(let e of["acos","asin","atan","atan2","cos","exp","log","sin","tan","pow"])g.env[e]=Math[e];for(let e=9;e<64;++e)g.env["reserved"+e]=()=>{};let I="";g.env.logChar=e=>{10==e?(console.log(I),I=""):I+=String.fromCharCode(e)};for(let e=0;e<16;++e)g.env["g_reserved"+e]=0;l=w(l);let b=await E(e("data:;base64,Ahq%2Fv%2FexLPysu2CluSbvuoQ6GlzPUUqVY9%2BYb39SlNvlNbbahkii5BqAN2xIHJU7sVlUladqu%2B64Bxt9LUqMV2PAEmTOMH7gvCpz9RFRsm2tsgz0mXCtp2tryFaLT9aI8TD%2FSfzYveyV8OXBpmZTMw6pCxKwgpMMmkpyvX5%2BZxTikjFZs%2FaFA4XTX%2BnH5wf2jx3RKJoHfalZJDQEjwHbm98bwbBVOtBcxxKHAr6kcHsU3pBUUh8MvPQbIuPYtxVrVXJXy8XSRoItAhtZ1kiC1PkyNLbTbtYUD1Qfe2Jl%2BdGPW%2BY3Gg8BVnWxitwVUvpFUthM%2BubUjzGbLcemiBXwWHSh4QP0AyxWswM%2BQqmrUn4v4RY4c5wve9OEP6vl9UweI7ylqeT2Pb5EfbGp9vdrA7hvZCx%2BLoSgcOm1mN2LOLjDyV3Bt7lQyNNhg35p%2BH7IXV5LaJzF43fTZ1AWS4SI%2FOH1teBF75PZpQhji4npequcLFN5j3rS0wkW6CJSEk85WrRsh5Ksb%2BlO5AuOQnxKwvLhpHkjsY1AVkct0VhxXy5zFHvP3JFa3x11ZOeyG1dhM9qPOUaxjsL1NdWfc2aawNh%2FoSvGWCjwmwJ%2BhFpVBc6X1m2KRexYxZepAJ%2B32vLtmE5GWRVQ9mC%2FZfhkkqLNa9agBYEIamzPI8G0YByHnXVxyrGoJRGbcgYXQaG7vCqBMOZj2qiX5xZ4hEh03BT37C5cMQ7ySNBn1lBfV8P8F0XOrFK2zAN0ZvSusamm72ww4mmsu%2BOqOo2uM42afMZ9l62%2F1L5AbVrOTuEznIWDTsiAsFmPaAdTItsWHX4iCDOWCw%2FT4TJX8abQh3MDoJwwEPV3Z580VZq7%2Fo8XtqEX%2Bx3eAVkmuGWKBpf4pcGmodq1%2BYvIQ09TZZMVR23sJd68HYXX0EhlILDCbwlwsl5yOAQDVhHO%2FYM%2BaOr9L7jd%2FF1diOOYDZx7qjDJLLP4AYKBt%2FwWlRPPMbXeIyllA%2BYhGG8Ntwu3bAeQep5tjhxOMTTtWvQLB9IT%2BGXjLOR1cXRstGm%2FduUPh2jiQ9eGQCI23UhloQ5IGhPrXZxR8fsPDTOCq%2F%2BvNJ79Dc%2Bzl6LhCE9Q%2BC5ul40jvPA%2FMluA%2FfBFCyFAQeVY9zhXQLkB4sg2WQKHIcaF0pGesjj7wN76exAuYEvZlC1MAaf3QgygH6cvEb9ajEXmC7Rb80QqSOox2wYP1khE2uIgYk62oeF9c75reNlmkkqyFmWsPe8jlNDP%2BmIVlIn%2F6KBAGU5aOI8f7SPMnip6yOYFjjZbyhuLwM%2F%2FYOMEWMIbblriQoHVGiT%2BeJkrjJoPFH9U5jF7xmmXMJtLexq%2B4NCXYcjodCE8yP5mWa5CbDidvG9HwtkllBJXKtwR%2BJm5%2BkMzsJTmcy5bNHLIKcg2UhTwXhdGmfXenb5okXshvidPPBrsYpzYrXJ8oCr7LYyST67D1x04XiiUORaPYPqtdaA27oGpx%2BYFGuQDiDjFORpDLkGcqXjwjbBuAEIaMDfHrK9hzgS0Kwj1vC3pOKEUAZOszi2%2BqsoVYzKjl6b7%2F6tBxONGf5P63xSS8AS7iWhjghwYk89kTBsNob%2BM0rrwtHQkqNdkYm%2FwcyB%2BwqrlCqpSFZM3%2Fvy7XeBrVQIN3oUpVXfKdQrVN%2BZgvnF1fiadhneB0E3qvPlkIrp9Cq335e%2BP1A4ZUNX%2FkMH9CSEwaxCA%2F27At5VuQvcTNDebTje5ifZ9Ag6VN%2Bl9bRLPryBtPiFZIH8jASoxPzbJUFFJjjRAOiFo3spZnFO2%2BFU5vDUHmwTQDd4kCPt4UMBqDLCnxfXhb2mG2hr82LnwsFfdpfpiCP1ywYmWtUORD%2BMKuOklXvFe1hRmxCu2C%2BwpH9vnyAfcXVqI0HB%2Fk04fQ5xIIZuN3qQ3U0V6axQAtqfyCcRelyaYntsctuO37FPEJldWflJVIUzj24QcRo%2Bu22TuartgWdA6onBbj2jzuERZLr5ajP74xfLHrrft2ZDRyu2ehoklz%2BKTh9cYTeQ0BJIQPVUdXujZ8aeIuuUnjibkWMvpcOebD5x%2BclprX6%2FCDzVaXxPA1MeXa5%2FRjJNiUek5gsk804jMOFZxUdBycDeFJid3HlpfSV7MIBW1Ko%2BWoPFJyKx00UPnu0FQVqDBFqQMjfqwm1S1frLP7oc7bnzyqU2wfQU%2B51o2udbONNWG2DmpgCM9YwXA0KFyrGIaF8zLkNfK%2BQT2%2BryC7LXsmmORtqqQH0L974TLMWVTn52JlqBaJF6ZjN%2B3%2BivlJ28uP%2BydZSLaMdSZzr4DOVv%2FP5MBdVjk6c%2BnHmyx5prkapIJRCOFTgiOSg16l7zSgkb9l6UDhQC6XK3yRM0JhnDFZ8B3VG4MZ0a6VZ3YXW4oRsMmbOOvJeU60UJWDeWNjxsm4umJplAlE%2BLWgY14dlOMHck76yhfyYdzHO%2FNuVzu21r49wBM%2F049FzSAcsbq8ssRsTJkN%2Bf6qOMDvgA7QrZuYcCJPzIZ47JfdYfXTIsgcLsMM7zJAiT2m10Km78telTc9Y9H2Zo31L8pr90EWtMnnagE02ifWmS9CL1wPvNVXFnC7s3c4w6RD5lqQnNZQb8QbyQEDPPgoVQtuHh%2FXfKWIGSprZDeMCFujRdlTEJmlWH3pc3J%2FXNLq3dmLHW5TgOiP7jNg7DmY0WeoVXNSVegy4ZfnyjhQaejtaaXP6FWrsrDfbLAk9r9PjHjCbJ%2Bynm1DrTi9q%2B4HnceZR4fO2lRF03czYn%2F29Es3POzd7tk%2FgfjmVf9hjYQ10y8LVLu5A3%2B3WNNshSvU59YJMXJ9lDA39afpwMRji4lkkklD6rd8vnxmjNB89aQLu60AEs%2FQU5uJ%2BDG69Jo%2FHPm35DpW%2BnK%2FNv9VMEKNHrPKayyZsoEr0PA6hRKHYuoSLSHGWuTRp6oE1fitesLCVwxFPvEXscdhunu7eUujN%2Fz9AZomH6FBO2Erqdj%2FzuN3RZwF4ngEFTrnY7FN4XMDpY2lCwSeYeWy%2BJpi8XACeUfIPvPpq3jzuNjPYEFiVeZf8hr65wVia%2B%2FXstsNSfCfcC9LCyCDBkqh3GEd9VvxjpnmpfJU2%2BBg%2BGdzL0ddSDWJBdcWPvq1q2LVHsovkeq9a%2FWD9QVnfPtvEzdj8zYgZucnyoPPSH%2BsP5ida3lTcMuMTd3h%2FQXr3ioEZE%2FM7Z0%2FbqMVgnze5Fo0CinJ2O1q0NGMkD436q6NFyrAEaN578kPbpPK8EEVZPpoZWQU%2BD2VlYlKNxPl4NFQqj28OxQmCQm7HnzVr4EsOlmMOwTnmCFeUblgy5dya8bbBUyUqCl27o7EgHaZ1C6nCLzCNDi8zE37VeS8qDa8CLrrpoinjOyVqJO7SCIO9PYlPubLkyTo1oSXrmyqMi1Ugni3cYoIeqnUFsWIuhMvfCkrA4OwYkSnNo8ieZiPn%2FzA4iL%2Fvgno74M8iTZ%2FTINHiSoGvazIduhM%2FnoCC1p%2FINCmkVD7Csxjd6SP%2FiO4iDWB%2BnGg7Hj3wxpmQWjjF%2BZV45v17zQoHe%2BH0b7kKGUhG%2FiOm50GwozoRZxJ8s90reJuxyA0c0ZLuS4xu4GpCUXjLx1FyRhUA%2FZxzvM2wkl%2FOyZD%2BS7SQT59JBEjjfdqVjYjj7e8bLRC0en64TjV7tzA0wJ0vJxt4m8tAlL7oA2kWTs5f6aT2Gyp%2Bsimbb66Q%2Bf7wiw9VZTD2pHxBi6UTQvc6lex6pqJwCPL9X5XFG%2BEGnwjfH%2FIM1N7BN7v7pkHCKd32V9m6Nv7MI888IVD7Kk4BxiUnpvtvoZ9xMWEiH0YlapDlOOPxZCLu%2FPmbQzEbYQK5qxtT2FmVwdCRdVNm2hPW6Gj7BQL%2BKB8gWfsftBt4LLTPOrPPdH%2FSHh4SK8lU4ykdlcf6rwyMLOktDf28ToRuiqRU93b4%2BiRBrro7qlxHzeI%2B6NTRMkkIl8jCn5ckFIieeNXHlTmqMO4ha71z%2BNTZe2ZTRw%2FsSVe70c7LlBleaxuiehBJGGWgxcuHea6KQdWhQjDGvUJYCuc4%2Fd5cj9SNiG6XcpJanwH9AludoU5kSz%2FjL0WtPyyv%2BL%2BEkQWrubxLb%2B0NHb4HGupJEH5IQEqmAWDKO4i%2BAr%2FsBOr0vJrEA8CsnY0GhjGG8452n5kBhxunCs7T6RMpmAvasFANCbPEG1xKaR9raaP12ixKqOFTuWqrrq5wDeGXa05DPTrE8CJIfXeoQNIiqBi5IfYl0n370GUFKnMfCcQqlmZrhCNGD%2Bx%2BJ%2FKpz35hQJeK8wxsiQrrHXdUUrsMQBKswCuHHIDZYZNoa7YA5GuwfOilI5vGrfrYcQpQ5aNPG0UuWyp9ff5MWhLV2XDSuyetRgb9vGSO3rP6zs41Urw%2FPk%2BcjMYppQqfZJ55P4GTB9XF%2Frv8B2RGtuqHpOWMhy2JlpOUG%2B52HZnynEIVBKGZVqabmaRo9qjVR6bY3auah3Gg%2FF1OI1QD0dw2F7%2FiYBv1U6WT5itsCRBuGrd4EbAbyX0PAtqaEeTzcQvq56HBzh7y9867pedXhUvEns5YxqxF2J96Vp3X2j2bbxV%2F9oUMuDImbr1vkXmdqzTdwFHitCe59wpW1QaIDexmmH72DwtuDqiAEFi5knB45BFIAAPFXyGVLfQor3rTIgfLgDkHtLNl%2FLvhUhFUFhPZ%2Bk766Qm5dRC4NPmIHYCNfgPKRJzfznAVDn%2BUdhZY%2BDUvEBie8ucnXiTqJ1%2FMOzlhLG0h6PcxLX%2Bir3zv67wcN8ypfx1eZ3gu0fGPBD2kf6k0j5ulIHiImZ04D0YvbrpM2v3%2Fm6szvyBQzHoYMF317DaFkYEtpIBAgcZaG8bKe5E1y0IorYXZuc4HuoGVIJ%2FDkkQ990YHa2AVPgTTTU8HeeXiSNpUz921%2F41LQoYTDnP6JKhU8xcoqg0lCiCBwDbtRWb5jlxR2Nd0grOKQK8p%2F5EmveVFG1EouH9mgEI1WC2k8Wwq7W%2BZvw902eVvWHy4FtQQKdny%2F9saIrB90z0pkchpb1rHuXJnz5z1B2zPx47KjOAjv25lGgElk6dd%2FN8AsdQBU925bz21BXIdkUMiJr5FAxV3tFbXa0AwBf%2BD%2F0OWwcglfreyJIc6RKCt9bWXazFzla2X3cimv%2BCgxSsMbqzq6U0YPSnNjerITlpX22hcEntMqWWvf857DbwZXApXXqwHcXbzaEP5HBruhF%2BOv%2FCg%3D%3D"));i.port.onmessage=e=>p(e.data),i.port.postMessage([b,l]);let M=await y(b);for(let e in M.exports)g.env[e]=M.exports[e];let v=await y(l),x=n(D.data.buffer);await Q;let k=Date.now();const L=1e3/60;i.connect(o.destination);let U=!1,P=k,j=e=>{let t=Date.now();e?(U=!1,o.resume(),k+=t-P):(U=!0,o.suspend(),P=t)};window.addEventListener("focus",(()=>j(!0)),{signal:u.signal}),window.addEventListener("blur",(()=>j(!1)),{signal:u.signal}),j(document.hasFocus()),v.exports.start&&v.exports.start(),function e(){if(F)try{let t,s=!1;if(U)t=Date.now();else{let e=navigator.getGamepads(),r=0;for(let t=0;t<4;++t){let a=e[t];if(a){for(let e=0;e<8;++e){let n=(e+12)%16;a.buttons.length>n&&a.buttons[n].pressed&&(r|=1<<8*t+e)}if(a.axes.length>1)for(let e=0;e<4;++e){let n=a.axes[1-(e>>1)];(1&e?n:-n)>.5&&(r|=1<<8*t+e)}a.buttons.length>9&&a.buttons[9].pressed&&(s=!0)}}let B=n(A.buffer),o=Date.now()-k;B[16]=o,B[17]=h|r,v.exports.upd&&v.exports.upd(),M.exports.endFrame();let l=new ArrayBuffer(32);a(l).set(a(A.buffer,80,32)),i.port.postMessage({t:o,r:l},[l]);let F=n(A.buffer,77824,1024);for(let e=0;e<76800;++e)x[e]=4278190080|F[d[e+120]];c.putImageData(D,0,0),t=k+o-(6*o%100-50)/6/8}let r=Date.now(),o=Math.max(t+L,r);s?m(B):window.setTimeout(e,o-r)}catch(e){r.setMessage(f,e.toString())}}()}catch(e){r.setMessage(f,e.toString())}}function g(e,t){let a=document.createElement("a");a.href=URL.createObjectURL(e),a.download="microw8_"+(new Date).toISOString()+t,a.click(),URL.revokeObjectURL(a.href)}return{runModule:m,runModuleFromURL:async function(e,t){let a=await fetch(e),n=a.headers.get("Content-Type");return!(n&&n.includes("html")||200!=a.status)&&(m(await a.arrayBuffer(),t||C),!0)},setDevkitMode:e=>C=e}}(document.getElementById("screen"),{setMessage:function(e,t){let a=e?`${e} bytes`:"Insert cart";t&&(a+=` - <span class="error">${t.replaceAll("<","&lt;")}</span>`),document.getElementById("message").innerHTML=a},keyboardElement:window,timerElement:document.getElementById("timer"),startButton:document.getElementById("start")});function r(){let e=window.location.hash.slice(1);"devkit"!=e?(s.setDevkitMode(!1),e.length>0?e.startsWith("url=")?s.runModuleFromURL(e.slice(4),!0):s.runModuleFromURL("data:;base64,"+e):s.runModule(new ArrayBuffer(0))):s.setDevkitMode(!0)}window.onhashchange=r;let A=()=>{let e=document.getElementById("cartButton");e.style="",e.onclick=()=>{let e=document.createElement("input");e.type="file",e.accept=".wasm,.uw8,application/wasm",e.onchange=()=>{e.files.length>0&&s.runModuleFromURL(URL.createObjectURL(e.files[0]))},e.click()},screen.ondragover=e=>{e.preventDefault()},screen.ondrop=e=>{let t=e.dataTransfer&&e.dataTransfer.files;t&&1==t.length&&(e.preventDefault(),s.runModuleFromURL(URL.createObjectURL(e.dataTransfer.files[0])))},r()},B=window.location;0!=B.hash.length?A():(async()=>{let e=B.href;e.endsWith(".html")?e=e.slice(0,e.length-4)+"uw8":(e.endsWith("/")||(e+="/"),e+="cart.uw8");try{await s.runModuleFromURL(e,!0)||A()}catch(e){A()}})();</script></html>