Files
microw8/v0.2.0-rc2/index.html
2025-03-01 11:04:04 +00:00

1 line
16 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>body,canvas,html{margin:0;padding:0}html{background-color:#202024;color:#808070;font-family:Josefin Sans,Verdana,Arial Black,sans-serif}body,html{height:100%}body{display:grid;grid-template-rows:1fr 0fr}#uw8{position:absolute}#uw8 a{font-size:130%}#centered{align-self:center;justify-self:center}a{color:#303630}a:hover{color:#405040}.screen{background-color:#202428;border:4px solid #303040;box-shadow:5px 5px 20px #000;height:240px;image-rendering:pixelated;margin-bottom:8px;width:320px}#screen{cursor:none}#start{font-size:150%}#timer:before{background-color:red;border-radius:6px;content:"";display:inline-block;height:12px;margin-right:3px;width:12px}#message{margin-bottom:8px}.error{color:#e04030}button{background-color:#303440;border:1px solid #404040;border-radius:4px;color:#808070;font-family:inherit;padding:4px}button:hover{background-color:#202010}button:active{background-color:#504450}@media (min-width:680px) and (min-height:620px){.screen{height:480px;width:640px}}@media (min-width:1000px) and (min-height:800px){.screen{height:720px;width:960px}}@media (width:640px) and (height:480px){.screen{border:0;height:480px;margin:0;width:640px}body{overflow:hidden}}</style></head><body> <div id="uw8"> <a href="https://exoticorn.github.io/microw8">MicroW8</a> 0.2.0-rc2 </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),s=(...e)=>new Uint32Array(...e);let n=function(n,r={}){r.setMessage||(r.setMessage=(e,t)=>{t&&console.log("error: "+t)});let A,B,o,i,l,d,c,u,D=n.getContext("2d"),F=D.createImageData(320,240),f=r.devkitMode,w=0,g=null==r.keyboardElement?n:r.keyboardElement;if(g){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&&n.toBlob((e=>{C(e,".png")})),e.preventDefault();break;case"F10":a&&function(){if(l)return l.stop(),l=null,c.disconnect(u),c=null,void(u=null);let e=n.captureStream();u=o.createMediaStreamDestination(),c=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 s(){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(s,1e3)}}l.onstop=()=>{a&&(a.hidden=!0),C(new Blob(t,{type:"video/webm"}),".webm")},l.start(),d=Date.now(),setTimeout(s,1e3)}(),e.preventDefault()}a?w|=t:w&=~t};g.onkeydown=e,g.onkeyup=e}async function m(l,d){A&&(A(),A=null),o=new AudioContext({sampleRate:44100});let c=!0,u=new AbortController;A=()=>{o.close(),c=!1,u.abort()};let g=l.byteLength;if(r.setMessage(g),0==g)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%3Bfor%28let%20e%3D0%3Be%3C16%3B%2B%2Be%29i.env%5B%22g_reserved%22%2Be%5D%3D0%3Blet%20r%3Dasync%20e%3D%3E%28await%20WebAssembly.instantiate%28e%2Ci%29%29.instance%2Cn%3Dawait%20r%28e%29%3Bfor%28let%20e%20in%20n.exports%29i.env%5Be%5D%3Dn.exports%5Be%5D%3Blet%20a%3Dawait%20r%28s%29%3Bthis.memory%3Dt%2Cthis.snd%3Da.exports.snd%7C%7Cn.exports.gesSnd%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 C,h=0,y=new Promise((e=>C=e)),p=e=>{h|=e,3==h&&C&&(C(!0),C=null)},Q=()=>{"suspended"==o.state?(r.startButton&&(r.startButton.style="",n.style="display:none"),(r.startButton||n).onclick=()=>{o.resume()}):(r.startButton&&(r.startButton.style="display:none",n.style=""),p(1))};o.onstatechange=Q,Q(),B=l;let E=window.location.pathname;if(g<=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)}n.width=n.width;try{let t={initial:4};f||(t.maximum=4);let n,A=new WebAssembly.Memory(t),d=a(A.buffer),C={env:{memory:A}},h=e=>{if(n&&(!f||0!=a(e)[0])){d.set(a(e));let t=n.exports.load_uw8(e.byteLength);e=new ArrayBuffer(t),a(e).set(d.slice(0,t))}return e},Q=async e=>(await WebAssembly.instantiate(e,C)).instance,E=async e=>h(await(await fetch(e)).arrayBuffer());n=await Q(await E(e("data:application/wasm;base64,AGFzbQEAAAABFQRgAX8Bf2ACf38Bf2ADf39%2FAGAAAAIPAQNlbnYGbWVtb3J5AgAEAwkIAAABAgEAAAMGEAN%2FAUEAC38BQQALfwFBAAsHGQIIbG9hZF91dzgAAAp1bmNvbXByZXNzAAQIAQcKngUIxwEBB39BAC0AAEEBayIBQQBIBEAgAA8LQYDAByAAaiECIAFBAXEEQEEBQYHABxAEIQIFQYDAB0EAIAAQAwtBAEGAhA9BCBADQYiEDyEDQQghBEGBwAchBQNAIAUgAkggAyMATiAFLQAAIAMtAABMcnEEQCAEIAQgBRACIgZqIQQgAyMASCAFLQAAIAMtAABGcQRAIAMgAxABaiEDCyAFIAZqIQUMAQsgAyMASARAIAQgBCADEAIiB2ohBCADIAdqIQMMAQsLIAQLPAEEfyAAIQEDQCACIAFBAWoiAS0AACIEQf8AcSADdHIhAiADQQdqIQMgBEEHdQ0ACyABQQFqIABrIAJqCxIBAX8gACABIAEQASICEAMgAgskAANAIAJBAEoEQCAAIAJBAWsiAmogASACai0AADoAAAwBCwsLqQEBBn8gACQBQQAkAgNAIANBgAE6AICADyADQQFqIgNBgQNIDQALAkADQEEAEAYiBQRAIAQEf0EBBUGAAhAGCwRAQYECEAVBAWsiAkUNAwtBwQIQBSEGA0AgASABIAJrLQAAOgAAIAFBAWohASAGQQFrIgYNAAsFQQEhBwNAIAdBAXQgBxAGciIHQYACSA0ACyABIAc6AAAgAUEBaiEBCyAFIQQMAAsLIAELNAECfwNAIAAgAmoQBgRAIAEgACACakEgahAGIAJ0ciEBIAJBAWohAgwBCwsgAUEBIAJ0cgtxAQR%2FA0AjAkGAIEgEQCMCQQh0IwEtAAByJAIjAUEBaiQBDAELCyMCQf8BcSICIAAtAICADyIBIwJBCHUiA2xBgAIgAWsgA2wgAWsgAiABSCIEG2okAiAAIAFBByAEQYECbGogAWtBBHVqOgCAgA8gBAsMAEEAQYCEDxAEJAALC98DAQBBAAvYA5efz3FZ0f5yFbUvithc%2FqHFfzojM7KVsEv7fSGG57W3091tBMQ3YrNZU2%2FjguFMMLW1a4URR2fHh86SJQlSzejWWM32zngHHWdNsU4kGrhmGgxUZIRAb6JLtW%2BQyuXIBssNN5IEWkb%2BrOGf8rSLasDdCc83RsuuCyL03791uwlwi0T8mJR%2BslH82ckKlC5TK6wnPyoB908kSeLY%2BEhunDhtWHA7EWwwdQvigYMhTQ6Cyi%2BXelkSq6CnCQnZrAqXrvEsSe7%2BYNt3Hg0MFycXedDIoFANBDyfPayKr1EeSiF%2FV%2F15gTYFDzZW11RK%2B8G36tFDe%2F0eS8UvRLzmz1%2BECmaHQy5Frnorhi3MJqKOrte8TbMZuNPBYJ2xxYJYAfb%2Fgv0WEsQcjrHzbYTdl%2FssybvXkXL5kX9wqIbmjfuuuWKQ5%2FKpFH8CVERpjQgbzuManrAJEwr9sqV4%2FshQkQfL84qfsILfEsCx%2FdaZxj1wCtbS9ooFIuU%2FeAVS6vj4%2F84MOrrGpzpn4n%2BPJbyQjmN1MWq8%2Bfa4JXif0gmICDJhvYf7gn4ki%2B5iAeDiO6yRuZ7QVL%2BXDeNX5w3VGjuJICdg%2FM0c6GQo39rUrMsdajtL0uVRQmeH33z5%2B%2Fo%3D")));for(let e of["acos","asin","atan","atan2","cos","exp","log","sin","tan","pow"])C.env[e]=Math[e];for(let e=9;e<64;++e)C.env["reserved"+e]=()=>{};for(let e=0;e<16;++e)C.env["g_reserved"+e]=0;l=h(l);let b=await E(e("data:;base64,AivfncPcObrH0dq3AlPISmKAaP%2BzxT0W83uq3jpWiIkM4nwVP4o6lFc6P8Jd0Z00%2BYgURTJF%2Fstws1xD5SOiNzt0pxcZ7mOIqQJSPbU%2Bp46gW2d6vxm1XJbAQxZjBr0%2FTKu8bBkuOYMq74t6powHDa0i97cXtBFM72f6TGxOKi%2BRQjyVJ2mCSDamBUsqGES3kfKzK%2F2saAqBFBLZm2VYOtNAYmho21e74yuQGOdfm8iISAWpTPz2Kdl5r2ZOB848S0h8OIIwcku22xz%2FRFwE0A81wa0fuYFdzOHJ0kIP5reroGsyrWAcfuDn4nXS5Uz0Ib9CGpk5uFwpRvgrCNCu9Fw8HqzqRhlkZ4CrgeNX9r9op%2FBr9PjhJgDTw%2Bez4F1P2AoRQpwaD410FNfQ2ps%2BeF7HVVuFDUr1LdLIv21NorGP8fnqO8xVhimkZwx5BGdhlVmbAvNpj2y68%2FT%2F8rXFKnOT9SbYhy%2F%2Fc%2B%2Bg89UgSBDKjgoRF%2BwtJ4j0yHDpqPzOcOr0SokDvONI69RA2%2BCdKuSgynxy9ofhYkTObFRbOD8yJLc5TOjz8ympqIXQaIIdZ9FBL29Zlw0k5obV8gm0eaoDXm54P4nuHH6pKM2DjchSc85SLj3CdtPFF9C6K5B%2B88O8HluDyBTVW%2Bdw3c%2BRblTB%2Fp%2BcYJThDans3VCF0vW05RjA2z9BUpvQ57gAviZ9rh%2BzCTEdPAlLwPqGRL%2BfZRTtc%2B0cUX95LBxNq4WDF7GuJ0y5EzDJjQ1Oxj1jGYILnBeD0vAp4ofHf9HxfA2JXOrGCXAK1CgecphwuxDg6BF0dK3XGoxbJUJ7qQ4Esq7PeOkH9ZRcRTQwBUG9GDB6uubxfHBGaOli9N0sRyEE7LUx4HHW5sznfOUG1t8a7u81c2ekZieRC4rU59Kl%2FtEPJ%2BJbjsdVAtjK4Q31WZpzTqOpnXtN0Kd1eaVmOOudaKmvMAVzdupU3e8xFNNJfXND%2B6mixN0O8BreKbeZkKrTNcDTqL9di02LS9qQsPO6KuvVdD19CGjdGJRKhhqhSaH%2B6JKrp82ZkgEDLBPNzelb5nqoZZ2vaLxwuIjyzGj1HXc%2BAG5O8odjrauoivUGUn%2BULh4i9LqYVv5RsaZBf3FwlnmiCYKKYkF9D6QBOKD4arvnJYnKHy%2FI8z6Z%2Bq8SiLQeG5RLAJ7d9b1eO%2BlX5mSVPLS0zJM2BQmmzW4nfDQVWfiKwe2gMa37X2ilYat0FAPP0Zp6fbk0Gyv4pDRv05p2JtBpTaIMt22LGd3zRPaGxyarwi%2FMeLf%2FHn%2FVZz4sQRErllmg5MYXulC65ozQV8yKaKIgeXiDKK0OQQAu7jjq2vvP4bqB7LEVgX4HmXIke7ZpIChyO7Bk%2FhsI5dGfVjZxg5akTKVv2%2BSOxQxJiY1iqRqrxCmmPKL2r8GvHQhS604Su4xmTYydB%2B%2BTVsClHz58fXLZMAIjV5uLLxrcFd7yA6ZEfR6vGMJvyHI8Y9YdaS2BWFe1biRjrrKBsNSwPc5ok2FilQY76HvzHW9C7docl4F8KODxJz2CtClWxj3mvXrZPxSZnFlwqZH7mGONd6mJxoIoAHnd31RlTgOGR6btY4lo7IaIpZo2mRyUP9Xu0%2B3jLLEWJEYlUSOqKA585V0uFNsiueAnkMwkjUhFFCMuLMtc3L3sVv9XVVNBm8ze7uXCzx8v0dllurjXNwdYHwYQhIZqGc0Jke2dDhd9bp35dAhm9FvO6iScsBeODE5J8fAf0WR2V3PFDofCUPUIlalbe%2F4YYnh2yFGthelq9y9%2BixEPriN22dYKMHINOzj0J76v4xEHr19R3%2BNQCrgJU8HAh46VXMF7N%2F2xmwHR0Dh%2FkK31xzvvUu5MKsH11vPWWs%2B8KfuAEKd3wOc3JKUnhNLMJTge%2FW18monqQwps6yNYvoatbFPUbEYsRZL956M3kNRRUzirxkqh6U7aAj6FY%2BMkLf2vHVabfnA2PBMsVi3AOirFRUPnwSbIYI9y3CN%2Fh5ZxQ5tmksmdmcEJ5jnrljh24G%2BjQM5Z9J9%2FmzXq6d8bzKd4OD%2FX330BkJLNNmdcvJgE8uwHvx84ZUdeZ%2Bp6yiSyPQ0anwKRYfYIqx4zvyg3a1ot4FwmCW2Az2%2By9HCv2BW5mxYv%2BLsix%2FdZcRhEZkH4to21JLbxSSGdTqi8yVGg7IzIssACYCBlPu94YawBROfM7t5DPv9fzYByjuTZDfHaOomI4nPmzhYsDmawqLghwOsfvzrlKSS2E8B3Prsb7DOcH0HCZ4PLmBm%2BZd8ZdcjAfBYfD3UtcqdyB8j6IpKQjranbEqz7oFmjRNu1DL8lJmHOCjkVOtDT0WFzDQYaLjbyaW7oKBb%2BKIwId39GGfDSe2gsulWZUTc8bHXPVJhBFdD8bVJBYjutHplxwmWFd9wfsriGUj%2BEaJCOJoGtyv8phqD7Fl731VoZiG7wjDSXtPsPwvXoaZRNkKPdLTKqGxc8QQh783JRIVt%2Ffj%2BwBqFrFFpOmEWlNrn5UFQZDt6njvwtuhooMqe%2BrRICa8kH1pILXJkHHaLnNlVxRthLPvtZ%2BVbbGDO7ncKIZoojG%2FwbKbNQFIOHbdxKjf34%2B%2F9g9l64b2BcXqEhVbHrpyhQEP6s6vre3wGRYIlkcURDd%2BnDJVsYod%2F%2FtrbR%2BXOsJ5CfxZigLVV77Cq2FdmR1KJk8MYydScwrLgppcXONRvdcw7Jo1G8HgMfF6zmbgEkHzfDfiYAzfAasJVo0nzALzbnxctHcvVW7SmtSh7axVZbNEJSDljFmrgZMoZHKJqyJeSrrjOvmoX4Xv%2FpCzwDejQmtELObol%2BqRnN64DFZBGMa4CGP%2Bx%2BxZyZEbguV%2BrjRlLa0d6jDG9opRCG4zu6qWz2hmy9AsxAyFvDvEJsSy0c3rVAhCqKZvSAYyvUO7XtyoVanznr6fHXskZuVAzQqTtpwp2wh0GCfiKkHk87W9DC8f1ymeEiQhOjlXR1CWtGkH%2BpaqXOj54CWywuBziwfQY6wLuqbCLgAFyVN%2B3skm5%2BmjfYVmfcHAcddxNEG8%2B3i2eSCp%2FVb9xyZVQRSbN5QMmTfH677KVXEsnQCmR3XSKwbkDi%2BFnWF7EgnKNhDSRf4NB5A34mDeHZXly7GpgcKS1o6i5%2B87IhJkFPz9jN8abA95prlGUZE4wft7kTQo8TX8Oj3o%2FLdZZW4NCuJD0EDnA9VlmD06neYKwd47IYospbPKwGEXyAvubm1St4NcsYhB0xA5Eg41fh6gw58UJRbfN%2FipaJAajWhpvj0dLrVfNarrgD5rbhVzIIoURLf9uf6xM8UGKiqeFavIJPlXYsRrLR38PEax84deykHAwLglOfodh7N0CtlAREza9X4917GEaUu8aiAWqkJ9bt0w%2FmgcVqZwJ%2Fb5AEfK%2Be6OU4wMaP3ptCncJjHraBWRrDHiZ%2BODWaKBkp2qz4jz66r2F8biN4Mvf8mB36xzBJ%2Fr2KsPbmfgKyqCGEkgoa6am71VXMMtJQVq2DJcMT2EyeK5w6JuN8%2BDRMUJFt%2BkkOfnVIJ02SGuq6WsGzZXS5AvX2JXKxzr34zlegHEUB%2BsS476f8U%2BfU0a2y4ijet5Hj59FxbuEICtJSvzMU6PFDi95PEB7pWH2sHyQD6F6MeP3gdNQjzI9O4ocN0sKlZOvgiMpHqRf0Mce%2BcH83yE4ev9DaXiL0TBZAyNR%2BpbFy2e8Nh0mpI8%2BilPNJO4Qfm%2Fo%2Ffm8kur%2FMzIB6JTfQwKkBoR9j1tR%2BvGXwwBbgAWFzN1z1wJE9pzpc24VFuQBGY%2FHGyLxSoCdiXJazyT3Nb6KTwK1I49ap%2B0TW1Oo4zW6PUH5R%2BheyX3oFIOHD4s5YkqtPPjEH7bo58swfKqa4w%2BeOjDU2Kb7yXXGTwwqMYrAUwivstm1B%2BAP74Y3TciddM2caEFXinx2NCIJeGKEUrk%2FKr%2FdorFCqAjFYbqunWfn20xub%2FUHJK8%2FqM3R%2FdVftY57Dr7SehgkrCVJ%2Bsno7IXu4Gf1KXfklc9RgwBe2nW7Yc9J4%2Bricm%2BS4zFXdrrrWAqF9edSLiBDm9rbmcpm46v64eZbSZaC7BDqAmLTveIgD7T0MgPV%2BG9LqRHDNwjQws4tkLAf7D%2BBRhYuF4o3sojXWOWidkOBSWYyYLOxHhCzxj5qYfPtLixgihY63hAvdwYzFiMtCiFedL7StNt2gDCNdPrp%2BfqJn72m22QGQ5dYhRaBmJcPNdnkdGEIP2DFTnq%2FendRw9LvZ4uRZbNogSo3cZLEEfAR5YGplHGAgJJhH7lXKACljCC2ixfi1VBrS7rcn8WDbSfv6xmsl4OZIu1Wd66B5gABJ69EZQ8L5YjsrXbxb%2FBk5v%2F3OfKbVbruhDD96YlnGW2wXL1w%2BWQRtcwZvK3nTAo7yMu%2BA9jf4eW8HyhGMl8LzN2G0MunNkCK1NQGCljg63xYdcDPw10dGeMQ7f3i0Vy8xTQde3%2F%2FuLPbpzG1w%2FWRGDgivI7OQJFFgT4%2B69xdw3cdMVFfftCQqDupkxh0xORQtiVi6ABS6sFN27Wwdb%2Bj504U7h3hM1T6Nt24u%2BbbGQ4QVoN5vi%2Fyp8zspppU42DxSfPYzaOqwKP7o1%2FU3lP%2FM0oQai4mJ6RSTqdJ2XLzPkbEKy8sM9kmfB8CaQ0CZo5NAmNhC2BI8iXQo%2FDurjTPVcocWa49q6cq0eF5Fd2if7n1eOStb9znsuHEwXaAgynmSbJEeMkTftcqt7pWKWkAo4Es7vU2MxuSNrnijHr%2BjygR8ZPqkN%2FHHRMPZ68Ky2Sv7%2BM8iprskNUryHlHvzK5cL2%2BvkM0iO6E8XkaTgUUCZzo5kWUevrC8psSU4ShiDAlxJYCFsDYgIRSLKjVC5QtxJO6cPIWBqQs9L6o52zPfLmZOScRuJ8FGsudjtUDMITpLb5MMPciqB%2BUgHTu9oPxF23sU%2FKg6kXZO%2B1GT1f3DRZlWdp5zB4Eety%2Fe7CB2ZSQ7muVv8rNqZYoj3DcKoy6v3dp084dqDeraoMrBqKIroZBlcvWRg%3D%3D"));i.port.onmessage=e=>p(e.data),i.port.postMessage([b,l]);let I=await Q(b);for(let e in I.exports)C.env[e]=I.exports[e];let M=await Q(l),v=s(F.data.buffer);await y;let k=Date.now();const L=1e3/60;i.connect(o.destination);let R=!1,x=k,J=e=>{let t=Date.now();e?(R=!1,o.resume(),k+=t-x):(R=!0,o.suspend(),x=t)};window.addEventListener("focus",(()=>J(!0)),{signal:u.signal}),window.addEventListener("blur",(()=>J(!1)),{signal:u.signal}),J(document.hasFocus()),function e(){if(c)try{let t,n=!1;if(R)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 s=(e+12)%16;a.buttons.length>s&&a.buttons[s].pressed&&(r|=1<<8*t+e)}if(a.axes.length>1)for(let e=0;e<4;++e){let s=a.axes[1-(e>>1)];(1&e?s:-s)>.5&&(r|=1<<8*t+e)}a.buttons.length>9&&a.buttons[9].pressed&&(n=!0)}}let B=s(A.buffer),o=Date.now()-k;B[16]=o,B[17]=w|r,M.exports.upd&&M.exports.upd(),I.exports.endFrame();let l=new ArrayBuffer(32);a(l).set(a(A.buffer,80,32)),i.port.postMessage({t:o,r:l},[l]);let c=s(A.buffer,77824,1024);for(let e=0;e<76800;++e)v[e]=4278190080|c[d[e+120]];D.putImageData(F,0,0),t=k+o-(6*o%100-50)/6/8}let r=Date.now(),o=Math.max(t+L,r);n?m(B):window.setTimeout(e,Math.round(o-r))}catch(e){r.setMessage(g,e.toString())}}()}catch(e){r.setMessage(g,e.toString())}}function C(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),s=a.headers.get("Content-Type");return!(s&&s.includes("html")||200!=a.status)&&(m(await a.arrayBuffer(),t||f),!0)},setDevkitMode:e=>f=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?(n.setDevkitMode(!1),e.length>0?e.startsWith("url=")?n.runModuleFromURL(e.slice(4),!0):n.runModuleFromURL("data:;base64,"+e):n.runModule(new ArrayBuffer(0))):n.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&&n.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(),n.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 n.runModuleFromURL(e,!0)||A()}catch(e){A()}})();</script></html>