mirror of
https://github.com/exoticorn/microw8.git
synced 2026-01-20 11:16:42 +01:00
1 line
17 KiB
HTML
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>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 </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 s=(...e)=>new Uint8Array(...e),a=(...e)=>new Uint32Array(...e);let n=function(n,A={}){A.setMessage||(A.setMessage=(e,t)=>{t&&console.log("error: "+t)});let r,B,o,i,l,d,c,u,g=n.getContext("2d"),D=g.createImageData(320,240),f=A.devkitMode,F=0,m=null==A.keyboardElement?n:A.keyboardElement;if(m){let e=e=>{let t,s="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":s&&C(B,!0);break;case"F9":s&&n.toBlob((e=>{h(e,".png")})),e.preventDefault();break;case"F10":s&&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 s=A.timerElement;s&&(s.hidden=!1,s.innerText="00:00");function a(){if(d){if(s){let e=Math.floor((Date.now()-d)/1e3);s.innerText=Math.floor(e/60).toString().padStart(2,"0")+":"+(e%60).toString().padStart(2,"0")}setTimeout(a,1e3)}}l.onstop=()=>{s&&(s.hidden=!0),h(new Blob(t,{type:"video/webm"}),".webm")},l.start(),d=Date.now(),setTimeout(a,1e3)}(),e.preventDefault()}s?F|=t:F&=~t};m.onkeydown=e,m.onkeyup=e}async function C(l,d){r&&(r(),r=null),o=new AudioContext({sampleRate:44100});let c=!0,u=new AbortController;r=()=>{o.close(),c=!1,u.abort()};let m=l.byteLength;if(A.setMessage(m),0==m)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.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 h,E=0,w=new Promise((e=>h=e)),I=e=>{E|=e,3==E&&h&&(h(!0),h=null)},b=()=>{"suspended"==o.state?(A.startButton&&(A.startButton.style="",n.style="display:none"),(A.startButton||n).onclick=()=>{o.resume()}):(A.startButton&&(A.startButton.style="display:none",n.style=""),I(1))};o.onstatechange=b,b(),B=l;let Q=window.location.pathname;if(m<=1024&&!d){let e="";for(let t of s(l))e+=String.fromCharCode(t);Q+="#"+btoa(e),Q!=window.location.pathname+window.location.hash&&history.pushState(null,null,Q)}n.width=n.width;try{let t={initial:4};f||(t.maximum=4);let n,r=new WebAssembly.Memory(t),d=s(r.buffer),h={env:{memory:r}},E=e=>{if(n&&(!f||0!=s(e)[0])){d.set(s(e));let t=n.exports.load_uw8(e.byteLength);e=new ArrayBuffer(t),s(e).set(d.slice(0,t))}return e},b=async e=>(await WebAssembly.instantiate(e,h)).instance,Q=async e=>E(await(await fetch(e)).arrayBuffer());n=await b(await Q(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"])h.env[e]=Math[e];for(let e=9;e<64;++e)h.env["reserved"+e]=()=>{};let y="";h.env.logChar=e=>{10==e?(console.log(y),y=""):y+=String.fromCharCode(e)};for(let e=0;e<16;++e)h.env["g_reserved"+e]=0;l=E(l);let p=await Q(e("data:;base64,As%2F3oIicK7DtKkylWtHDN2wr744FB0V3KPhwww2brG4sOErTToyrX%2F58ng2%2B1bRuagMRS8SGzpv8V9%2F9jhluoWSQ%2BeyTFrr786Wl3Ngm9ymtLWHS%2FIrWSJt1TBD9zZu2lVTsnUU6PvnIeaQ1bgbre7hCU2UihZNS3i4gv7PSnTksPCIc9LBKUy8UNgHKAwsRsYgrfSOVjBMOpbnJraErOI07DZBM5h7Nw%2BKTWIumNiJJP6k36z1dr2S6IjGhgjIp%2FFJhsUmiP5DRSuylDj2Oe%2FHs3LhQz%2BhoiMfu4TdwWBi2RUfE%2B9xfDvY1CwkmBoORL%2Fi7pyB9wYKW9JtoD%2BsOyFPadt%2BKSTuT%2BL2DgdCAknuFqHmuwqjVvjzI9PII2PloHScs756SukqnlmusjDeW0MvftWRznzh4d0pcE0cN3HwCya1TpBfFVt0y4sLHNhxbou5olEX604gpBwVkIbTBebX90Rb%2BZjkPtJEBx46a6HnKoVZyDm3h1CpZe9Ij52pScOx0PKMqnfqRUVg3%2BCZ2qLGDsfAnq8q%2B2UbV%2BRv71K0FzW7XDyiRH2G70r68A5MJZpnPY272rEwfmun7moivIGbP5oAFogtODp4dwEUstITEQaxKQJmncGlSXeb957DgqptjBl1U64ybsYkOgq3fcvOed41tl9POvJV61w%2BIH4WZijmf9N7Wo2f9ORW8eBUcr3XDmQdiKT%2FYAUsZ4KeUDcHQebi8DX7zwvtGDR1Rj8UftZTcDaBQPBb3A0Sk%2FFCf5AT8lARqYFzVZ9yxelZYHFLFLkcth4xZUdBWcPupa6fzCdPQJsbNB3gI%2BlystTR1LuH5baLZX7szzS8Jn0gEvfLRn1VeJz0C4zwUQK555SAlz4%2B0FniGv9PGTKTb6itX9NPZjeFbhaEmYq4Fq0lURosWTiK8YgjaN5DCJsfNYI8OxQNL6cDnUkL546YW8FlAiFTtsUCB0adA%2BNJc2lEvOnDITo8PGvKjwMV9yypbWr1uRJWveuDAjYFj6Gj8eIjRRLjS5H1Bj7DyTzv302DAR7%2FJxSGc%2FQpadPjAAqSD%2FxFtbGp40brH5EZPAOJUnqrRxeEHYmKp7mZsjAGdZRp5QXyZ4RN96eJVCbAPK3vRt3Co6iaK4ZKgLHrPJxvHsvvwnbmr0%2FslUT%2B9gxV%2FNFyzD48rb7VQlarN7loqwQrXPSbhJON14G856bft26fdU4iHtYUvIA7MRpkw9VDab2wHvijnPyeSMI9jqtLhtoohpN7DmYGvIIOu07shvKUvPPdMZSe1ueaTxAhA81fqJoljlcgprD7HP1bBjmqA6RmZmPIfb0uweTtEhAV3A599jRfh1ZtnqasNUKYfrn%2FfsalQpBzo1TIauGIgMF9IkMbPJxPa3be6kiimldnd3zZkBhq%2BM20PygXMdXZT5qao1WLkxD4nBL%2FBXDAXG7LSjoS55MLA1s9o0cBvbsVjKjhrBlVF6UU99tXM2AvLE1eD0xR0n9q03%2F4NltOhUKABFQYC%2BYEM0IBG62ASbN7bAY4diNNZbr147QQcp4qqzhCeYNnQLHrurEutKtJd2vvT2lteT0ltQKrv5L9pVRdnn8t44Tpa91%2BN1Tsbp3Q7kuqPYoc07vdrzSLw4yAZ4DM3lUkoakBEviDMTSKNXPV4kkQ04HMo7%2B9B8s5gnqfqb61b0MVqnlV66HHImoj8dEKtxTSIdl8uPqnC5Gpf1C%2B1y1LLrsD8YuIK3qN%2FszlZrMgcf5f0tQRtWHP1ObUYt8EEK6aT88vfSRqNjOfVE3WVEMrysNG3OFIrO1LgAYp5LKRc925Q3rh5qT1sS8NEYiU1LP8r7Hym9UPBBHq2qOTC7dXlXLvfa1RbxsgJ85TSUDT3nNRLcv%2FBCGnUh%2B4pNDSdbgUVSb56vujAzloZZGoJWfPpNjyuGyyVMcv6513BtehQBdjC10F%2Fr10MpiiLPkeUt7NlEq%2BdQ2bFK0UT0b8DTxCjEpF6Cvw5jLAGGBI%2BKryVZTS1rF2TBULQY7dzi4RcOvSDE%2FhZ%2B71fGsm7zTmYMZe%2FDuDXLythCcrkaCsYZt6VBIsNvWmLWf%2FnMbfHI7FCdeNKQFEQ68gKWvXQrJYsIG38SUFeqU1YBFJlcWmlxkdrQ%2B02c8jvHmEz%2Bd%2BjhtQdOXgmSMgI9UO%2FZFJg42puub61Id34etop2I87M5yaHSBxXdIKKemEGlEagEqStsKFgZu%2FAktpPTM2H2KcmY2cv5P3hQcIE8ISGQ3h6VbNNVGqiqTPBoGjIDdVqhZg2TOKBrFZBBSWmUsY5hQsE%2B3z6dM4N%2BQFiP1XJkrXBqbLxvNLA1GrLh40%2BVKcxO2Ip6HpOBmFeL88C5ceHw9ilDRQOkFUapjdy22VMRvyIDSfYwk%2BzzHPT7M8xeHdYDIvPKx%2BUbmHTMksSGvuMq7i4UK9Izxr84OwBTJNmvb7eo2Ut5CfvpbYUZN5SvKe4BlS7WuO0ccQBET%2BmkOiRHLDUH%2BLsFIXrZGoop%2B8VBtM0GxPCluu%2Bt2BdyLM5bEJf%2BvoedW3Ubx1UuTnwya9XHKd0B5yRcM4Ek8NB9VwtkXZLxVh6UY3eQOZOnxBYEBPAaMvCH%2FzN%2FpEFONkx%2FjCjYnqo3UNstVyT8d%2FMJAy7eLofV1m5iazMiW6SA8mZSC0GZOyrfC3HxB4ZdP7aoJtcrcC5ejrW5DK%2Bht%2FlsDpKmHycE3NHqGikHzZFc2fG1D3KlVzdH1u7eO0m2U1MiAlW5370SrdHRc1kuGbutAcqboY7qGx8TAbm2WiUI4jQdH3PxEXnovvzaHL3Typco%2FtwullvBnGJyZK1Td3paO9I7KVRxoiKVCt8uesLJO29bqBrtjJj79Cg6oK2dO1ttdKNJWyMiEZnFTfRYP77%2F0tUfdKYORhf8VhdNieiw%2BpoyILm7QxMyhkXLxrMblED964X4%2Bq1AVMkv2aeFWRZHNZ5RPA0ApgEnuo7SQJZgu6MJRZbLu18%2BgMaCncP7dJXHLR6mxTVAtVHWVNDX%2FtyUsVaJJib%2BvFiBB9l6OCqZ9ZW%2BObT4lcYss3ubCUeSjyFPQyeqnmh0m7f3fK23fTLeNTqpvPCRXg1Hj6eRA%2FkYJRSAqWmnNo30IP%2Btr%2Fzk3%2BVLT4LCBx7lnPglgMv7nusZ6hwkSv%2FN2lW44hc4xfgy5r8sFVL5Rit8Leby%2B2JvdgpjbvBFBTcNTPPDlkS1V3cewRXUZ%2FXRoLH6mSUeLKRVDW%2FmNNGc%2BRMERnm%2FkSPKqf4O9BSj%2BHMj59w6R8ACTQSHVjsCbKy22up5gzQrZBVacKxQKdGLfF25wJiR%2FSSQw%2FaK06m9FmaMvIW0J9Gaq6uSQ6gmjpqPCzZzqKz%2BrCSsAAxavMN9N4gdAnQPQlEHV64FFxUXyVgZIgIuS0LRmcmG8LZlBsaFAIunYnqFRJaGc9zuZVAxy%2BUPIn8oj%2B4r46%2BgJvKp55zZ3zjfoXNHKBAn0Tq3%2Bo86gqHS5XBQPQWrC8EHCTjnHAdeCvmygJYT14o4IzRiVv2M3zRV7YIZ2fftvU5d8aTvLJayfkJAwNxaQ1nciditIgUpcdCaNH2kuGhO2Cn4PtcFqZfLmIQpUbIlAv5vbHhU0inapOtbHFoKu30Na5gpRh0mg3WqI9AEREZmCNJJYbBPX2jdTZL8An26Gurdjq76UjGQwdoXRvJupeLmIscE%2FQ2ohx4cU2LDlx7TtQVfj6%2FbAcVroyDZ6g4U2wyxs20SEFg67OXfx878BO09zMj2lgpaHCdmz6dgkqv9oYbHBj0KPbU3JvQKXDexQ0dqltsECmexaAdYU1PAoeBlk3BUas8cDDOWnwCGvTVe8GZAweLvP6KwfEpCgrFsn%2FxIIspW1DfPs5ivOQx8sK9D2%2FVcK9ZggLc72VAZZi2wPlzlo%2B8Mhi07EfRbppchuMPtPGOGFruLvfVyPoeUjEw%2BG9XzXboP3bQQft40%2BnTvg%2BZY5MykBq7vbn4G1b9bfwTvRAfqz3XI2iYeHYarZnWBtDLf9tjN%2BscPbR7WzJmdViw6eS3g%2FZZZMhXWvdAJKwSsIJ%2BlVKbHk9OmuveCH7kUrZTAKuYfH3uvh0P6Mo1Ob0b3%2B8ndoUHn2TvwLE8xxrswzXhssP4MnMJ9R%2B5Zau8Vo00YdIDEMEsKA0EHlnbN09ELrYMXPl8w1ULjsPcXwfRWa1xpC4ZLfCnlR1VtjMbuJJDCUzaTmP6fpVLEVMhL3sIE%2FDhk6GkNQGj4mXT56OMY8SSNhSz1JhgVfhn8%2BvY4GG8%2By40tbHhesE0P6koAP3irk3VOxs4iAh98LWZz5EzAlkWdLgNS7GSE3aYSVv9PO4Jq5ckOztAGjKR7jeEI1awgOJlPqb8B8231bYcsH1fEq2byXIUxafXMuTedXt2wuKSAR%2FMMl9Sbxo2RFEubBpO5IVGe6GcGu1wGb3NkeD78EGpmrC6o9Ms%2BvFQB0CX4ZNAGoEVSyButZ8WbDQJiLo6mgMzY8BWWB5LYzavFqXAX%2Fr3cKJoDgvm03A0Bdu0TJw8VJb5YA4XGR2BpGKNKuekQ7er5D23cxtWsxvuLNu2qglxf4OEeWod%2FLqFq4g6azVfu2sCyEG%2BaibGLWmZRvXT73GfuOdSJTh2Rrzp1j9pQy0xsU4JBP9jTYNGaBaTz2IHgts5cOD4oEiBj%2FQtBK1FlPY2BhHk74OiINjIEoG9x8PRUDjXSuzOoCVELt4tASC8I5swKT7jJ4zJtnP2ddaWR6Z0M74ryzX862uwO5MgeSYmCjKzM22m3eXtWbxEAGadyfkaQ%2FzFrYzc%2FZ1XoF88%2FMBgAZify7RruNJFqIMGClJntArWjBkon6eQj%2BJz9DmeODHVVdMnLMtm3TP7ri2BFwzfm0%2FoO%2Fha%2FN2DM0sQmoy6wrCueuCWz5GiSf9d4tcIaMzZC7jVdiMDmSWVr12Ies5uJcdWsX7UcXVvOv5keAcQ74I7SfDgA%2BwYZy1GXxTcDOfa8u7nWrxCKhf2OS6cCavEZyQ523FYTZ5zvpTtqRgYPPixQbBcD%2FwfYwz9tWLFn%2BZGsxG"));i.port.onmessage=e=>I(e.data),i.port.postMessage([p,l]);let M=await b(p);for(let e in M.exports)h.env[e]=M.exports[e];let v=await b(l),L=a(D.data.buffer);await w;let S=Date.now();const U=1e3/60;i.connect(o.destination);let R=!1,T=S,k=e=>{let t=Date.now();e?(R=!1,o.resume(),S+=t-T):(R=!0,o.suspend(),T=t)};window.addEventListener("focus",(()=>k(!0)),{signal:u.signal}),window.addEventListener("blur",(()=>k(!1)),{signal:u.signal}),k(document.hasFocus()),function e(){if(c)try{let t,n=!1;if(R)t=Date.now();else{let e=navigator.getGamepads(),A=0;for(let t=0;t<4;++t){let s=e[t];if(s){for(let e=0;e<8;++e){let a=(e+12)%16;s.buttons.length>a&&s.buttons[a].pressed&&(A|=1<<8*t+e)}if(s.axes.length>1)for(let e=0;e<4;++e){let a=s.axes[1-(e>>1)];(1&e?a:-a)>.5&&(A|=1<<8*t+e)}s.buttons.length>9&&s.buttons[9].pressed&&(n=!0)}}let B=a(r.buffer),o=Date.now()-S;B[16]=o,B[17]=F|A,v.exports.upd&&v.exports.upd(),M.exports.endFrame();let l=new ArrayBuffer(32);s(l).set(s(r.buffer,80,32)),i.port.postMessage({t:o,r:l},[l]);let c=a(r.buffer,77824,1024);for(let e=0;e<76800;++e)L[e]=4278190080|c[d[e+120]];g.putImageData(D,0,0),t=S+o-(6*o%100-50)/6/8}let A=Date.now(),o=Math.max(t+U,A);n?C(B):window.setTimeout(e,o-A)}catch(e){A.setMessage(m,e.toString())}}()}catch(e){A.setMessage(m,e.toString())}}function h(e,t){let s=document.createElement("a");s.href=URL.createObjectURL(e),s.download="microw8_"+(new Date).toISOString()+t,s.click(),URL.revokeObjectURL(s.href)}return{runModule:C,runModuleFromURL:async function(e,t){let s=await fetch(e),a=s.headers.get("Content-Type");return!(a&&a.includes("html")||200!=s.status)&&(C(await s.arrayBuffer(),t||f),!0)},setDevkitMode:e=>f=e}}(document.getElementById("screen"),{setMessage:function(e,t){let s=e?`${e} bytes`:"Insert cart";t&&(s+=` - <span class="error">${t.replaceAll("<","<")}</span>`),document.getElementById("message").innerHTML=s},keyboardElement:window,timerElement:document.getElementById("timer"),startButton:document.getElementById("start")});function A(){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=A;let r=()=>{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])))},A()},B=window.location;0!=B.hash.length?r():(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)||r()}catch(e){r()}})();</script></html> |