Files
microw8/v0.1.2/index.html
2023-01-30 23:15:02 +00:00

1 line
12 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;cursor:none;height:240px;image-rendering:pixelated;margin-bottom:8px;width:320px}#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.1.2 </div> <div id="centered"> <canvas id="screen" width="320" height="240"> </canvas> <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}let A=function(A,t={}){t.setMessage||(t.setMessage=(e,A)=>{A&&console.log("error: "+A)});let a,n,r,B,o=A.getContext("2d"),i=o.createImageData(320,240),s=t.devkitMode,l=e=>new Uint8Array(e),c=e=>new Uint32Array(e),F=0,g=null==t.keyboardElement?A:t.keyboardElement;if(g){let e=e=>{let a,o="keydown"==e.type;switch(e.code){case"ArrowUp":a=1;break;case"ArrowDown":a=2;break;case"ArrowLeft":a=4;break;case"ArrowRight":a=8;break;case"KeyZ":a=16;break;case"KeyX":a=32;break;case"KeyA":a=64;break;case"KeyS":a=128;break;case"KeyR":o&&f(n,!0);break;case"F9":o&&A.toBlob((e=>{Q(e,".png")})),e.preventDefault();break;case"F10":o&&function(){if(r)return r.stop(),void(r=null);r=new MediaRecorder(A.captureStream(),{mimeType:"video/webm",videoBitsPerSecond:25e6});let e=[];r.ondataavailable=A=>{e.push(A.data)};let a=t.timerElement;a&&(a.hidden=!1,a.innerText="00:00");function n(){if(B){if(a){let e=Math.floor((Date.now()-B)/1e3);a.innerText=Math.floor(e/60).toString().padStart(2,"0")+":"+(e%60).toString().padStart(2,"0")}setTimeout(n,1e3)}}r.onstop=()=>{a&&(a.hidden=!0),Q(new Blob(e,{type:"video/webm"}),".webm")},r.start(),B=Date.now(),setTimeout(n,1e3)}(),e.preventDefault()}o?F|=a:F&=~a};g.onkeydown=e,g.onkeyup=e}async function f(r,B){a&&(a(),a=null);let g=r.byteLength;if(t.setMessage(g),0==g)return;n=r;let Q=window.location.pathname;if(g<=1024&&!B){let e="";for(let A of l(r))e+=String.fromCharCode(A);Q+="#"+btoa(e),Q!=window.location.pathname+window.location.hash&&history.pushState(null,null,Q)}A.width=A.width;try{let A={initial:4};s||(A.maximum=4);let B,Q=new WebAssembly.Memory({initial:4,maximum:s?16:4}),d=l(Q.buffer),E={env:{memory:Q}},u=e=>{if(B&&(!s||0!=l(e)[0])){d.set(l(e));let A=B.exports.load_uw8(e.byteLength);e=new ArrayBuffer(A),l(e).set(d.slice(0,A))}return e},I=async e=>(await WebAssembly.instantiate(e,E)).instance,h=async e=>I(u(await(await fetch(e)).arrayBuffer()));B=await h(e("data:application/wasm;base64,AGFzbQEAAAABFQRgAX8Bf2ACf38Bf2ADf39%2FAGAAAAIPAQNlbnYGbWVtb3J5AgAEAwkIAAABAgEAAAMGEAN%2FAUEAC38BQQALfwFBAAsHGQIIbG9hZF91dzgAAAp1bmNvbXByZXNzAAQIAQcKngUIxwEBB39BAC0AAEEBayIBQQBIBEAgAA8LQYDAByAAaiECIAFBAXEEQEEBQYHABxAEIQIFQYDAB0EAIAAQAwtBAEGAhA9BCBADQYiEDyEDQQghBEGBwAchBQNAIAUgAkggAyMATiAFLQAAIAMtAABMcnEEQCAEIAQgBRACIgZqIQQgAyMASCAFLQAAIAMtAABGcQRAIAMgAxABaiEDCyAFIAZqIQUMAQsgAyMASARAIAQgBCADEAIiB2ohBCADIAdqIQMMAQsLIAQLPAEEfyAAIQEDQCACIAFBAWoiAS0AACIEQf8AcSADdHIhAiADQQdqIQMgBEEHdQ0ACyABQQFqIABrIAJqCxIBAX8gACABIAEQASICEAMgAgskAANAIAJBAEoEQCAAIAJBAWsiAmogASACai0AADoAAAwBCwsLqQEBBn8gACQBQQAkAgNAIANBgAE6AICADyADQQFqIgNBgQNIDQALAkADQEEAEAYiBQRAIAQEf0EBBUGAAhAGCwRAQYECEAVBAWsiAkUNAwtBwQIQBSEGA0AgASABIAJrLQAAOgAAIAFBAWohASAGQQFrIgYNAAsFQQEhBwNAIAdBAXQgBxAGciIHQYACSA0ACyABIAc6AAAgAUEBaiEBCyAFIQQMAAsLIAELNAECfwNAIAAgAmoQBgRAIAEgACACakEgahAGIAJ0ciEBIAJBAWohAgwBCwsgAUEBIAJ0cgtxAQR%2FA0AjAkGAIEgEQCMCQQh0IwEtAAByJAIjAUEBaiQBDAELCyMCQf8BcSICIAAtAICADyIBIwJBCHUiA2xBgAIgAWsgA2wgAWsgAiABSCIEG2okAiAAIAFBByAEQYECbGogAWtBBHVqOgCAgA8gBAsMAEEAQYCEDxAEJAALC9gDAQBBAAvRAwF%2F%2F9fTKCTONmi84%2BnrbVSOH%2Fc6vSf%2BD4d9SJNBc3FX7QfUHxwdZoJ2gbrkOxXMlCFQohTpOfrqH2lON%2BKLJNVfU5Nu4GOO2WMojT29uFcnCJS3%2B1hbxaL%2Fh9lmLYb3zvWsMJ%2BjBoF3XH%2BX3PiQRGj3lSO6d6ROB1tLHAjBvc8KRcJC8ezAHO2KxgN0C60LhqDnEMNRGkiZIGd7vFakdzsTK52rXTWTEF%2BRtXf5UnppLVtDQaKioHW9qgBgNM8z076axgmmzZdgskOHHn3MVWuglavoCFh4dRFW5XmuZwoBT3HKAX%2F6xPFRb56MQoyggxfIPc7Po49uFG7BLqNaZm%2FVzLkVsqcnLbkOu67BrqPS6In7L9Zomf6E5PQp%2FK7DKV5%2FS%2Be15wnC3zqP1Bj6xLe3xzckXir7SHPZsep5NtRy%2FGpcseCHgPNHMos7xPQKdDO%2BAXqvMZuNdOwFZm6TmQ3vmMOdSSpn62axAi0QlRgoxhrA%2F42mIF6TkGbDAElqkMfF0EyKfip%2B2EPJtH7AksMALac%2BkjT9fyIQRGiD5HMZwCTKLxBLX3A07qdkKrXlR5i8pYOXZxAX4vyy9BKV8RfUfvEuqyNXXnBg4e%2BB%2FPnR%2Bg%3D%3D"));for(let e of["acos","asin","atan","atan2","cos","exp","log","sin","tan","pow"])E.env[e]=Math[e];for(let e=9;e<64;++e)E.env["reserved"+e]=()=>{};for(let e=0;e<16;++e)E.env["g_reserved"+e]=0;r=u(r);let w=await h(e("data:;base64,AnevpqDvapimRNPOGhqee07n%2Bv1yTm1n5XES6y7%2BqPUQFqw5livsDo%2Fkram7E1zzZg6qmLzXsUswfnD9AZjEuJOrUjm2TzbQ%2BWO1hv6bvL0OA5NIRBHdnLCD2DJC5a7Jh%2Bn20qczMOvGlUk700JPiog%2BRZrdnPfnjdZrltFOZBk1oyEomoNCnRBIG%2Bd2U%2BJ%2FfcPD%2FV5KVii8nTeMgUfwVbKV79ZcQGuE4VPTr0nA80eJso3NQUtKG8IWxj9LEus4f2c0dEpDNmDI9qq9a12KBBCrzzqR046%2FELqxIdT%2BgJmVrYoVqls74yF0jwRrKHUmhpJYHbTbTJ3Jx4y%2FoQ3Hxkw1%2FCJL8x2LgFO%2F0Peli7PXrr2yULWfYTG%2FbGpqVTTupquBYjc9FfEqmPiYT5rq75zdxL5hLk0HrnffK8pqCTGBiNczZqa162S0jqL8iRVrou%2F3tM%2Bt54cLW3WsFHNeVu%2Fe6OH0RQre%2F%2BzgAS2v%2FzaFxWRzPEnBM9PYTJfqniWKtBvhd8PnHqMQMoF3xORCC3JogJ91rQ3fQQhxSENQubsHJVX3XTLztv1NNuEN6fDgUopylenHAh86%2Bt3uRELmjuLt15LAGY8dlPKTzagXljjkcI0O4l0AZuMM2SnL%2FjQWAKjP8eXlr0BTU0VFNpQLeSr57d5Ga6egQfm7lNcpGSIolc3%2F7c1EO4zeTb1M6VsifwwE1WxKA%2F2Mn%2FpfGgB5qpqM%2BFOfwIHqlr8QWFcHJzBoeCbXE6Lu4ALq8B4E0Z5hQL1B2aWWwJAMLYOxju9y%2BmZ5WO7CBGE7MsjAr20KQoBcp3AhXh4u3kt%2BMDqwprihesa2fhqOZnfAlPD2aNdhdttIXIpGQcgvJK424gMhX8TfORT1wlCWRT3aAXzBT4r96%2BmoLs2STHAQ8n2Sp4AzZZkcPOHwfPNblFYTTNoStfbbPapx14LaI6%2FqK60Mi8IChvlIiHgvm8GqD6d7x7RNMJHcfxMsoEM4QefNkrwI55Pdl2ZgZafiJHWlpIgOMNaB04e7qtPBpyGDFkn1tiA9w7e4ennqIaGDX5ZDq9HTkmL16kkpO5nL8inYZy8SzpOXFf3JhPuLjjdiWZeKaFg2IhE%2FPFBp0NjCV1SJnVoBI6z%2Bi4GLvraafaxKc5I69%2FY%2F%2BX493CNEyz2pxUlwX9a0PqlwC8iHmVj4Cru5oLyjKa%2B3ftBicScpA3kp10OS1%2BMv5U0RNk8C7%2FpmWx0uLlykVt%2FVXktZ3TbZuYBTaFckJgDgRAEEaPoybVCd9OHCAsucejMJyY3coiv4FrgH8MfpmuknVa18etJNGRbaTHrEs%2FsK8WkxUOyOXNKLYH9WwPnkNNBHTTM451aQjJ2ht5NLW%2Bjk1B%2F0YS2azdwmAvszQfhUw5RBalFz3vdwFDi2HRB%2FZm6H8hCrn5gGKa0lEUY%2BxDhpQnvpi5nag7oLioOrlhFj42aJAZWLWGfZ0ctF8ESyvz5FIgOM4OvjdOeVUH8rC0KQ2c1YIOjpc3Qg%2FU7jQ9ftirZrdFCf8yF4n%2BkP8hc%2BC0E0xgWAwY5KfkfO12W4LZTFDacpVj076gn99Zz2g847T29x7w1c8PQQIv0JFGg64Rwhd2a%2F7NMcrW8VqFUpiORHTdJf03T2TLljB18VMLPfGOh5xop1j2nzF3vHO1oIso8t%2BIUjnMcxMC9UvNeDEaYNNArr9H%2FjwETXxUornCFeI7VqYJTYzRmfbMgE3X96TQkPG9ZAIQ1gJXWlFer9FRN4XXUehOLDWklG%2BLVDFp6f8GUCxjLc8yRYVVE2EBzYyJMf%2BTUxMZssGdfu5L6RkPEMN5ZeAUrVzWmRW9vmhuVqK0dCa5U9WNtszNFD0yukSinx1XqEV%2BqUlgtskCw6Tt9mgBDHvDCiGPPFrljOnrfWHB0gG3lRKD%2B1SHK5mkE9DzcY2U2rB%2BQPMiWGt2QmqzMMxqMqY5HQaNGbLzgAqqvd3Rl64Mi7TZWk1AqcXasy5cCEDyhU9rE%2F%2B18gsdrBRyrjXEKNskEyE4gCXSM0eiJRf%2FQsse7wuXclmO8MJTTUpapcOBhCrpZD96hZsh6iOIPEZdhsXG7tXevsVio2SFW7rvaojeq9Q%2BoxqDGTnH6Q5FL7csARrE7ZA4NVEGQ41gP70cTK%2FDrSDGwObHM5Tf3MjMuvbwcw%2BEM%2FlTUOFr%2B4qMyC8FpQgbBrCecCQhOlktXJFhoryAAix54b7lPxITWlkr7bVKX0GCqLIQlshMQmH473cONQ60jnsM2VxFMNMBMvp60%2BGSMt5pP4Ns%2BFiefHqsBTJPH0ALDfD%2FnNQq4kJd415PW9J7DPH2TM29shlWI3cygpeAwqlxKFPnF2CB05sELlaHrU%2FnOzFdv0kjMcmxWWcMhk0%2BU37CjWiLvGc8NRegIoAixcLzpuwBXG9ZTE6gpIcQkVGnKAHS8PxHqzb%2BkhPXlYVXO%2Fv%2BrVeXZx%2Bd%2Ft6RW0ky3exxDYufqqV1TLKXT2%2Bd1sSv9YfDqrirQ4RIcusAXm1cSn3Ye55znMV0jjgL0MZwWiVaOVV2qul2KKKrsLYqw79S6AumDrSiG6CY2PmM9K930skqIRoAxK4r1jIF1vLUs1IIghnwkyHvd0boba6rO7BQSgo9Fd1HxfGrxmh4kI5ANeV%2Bj%2FUGzTNbkzwPYZexxTmLlccBbri4vj5NUtEu%2Bl5Ru%2F8zj7T0Bqrivlb%2BSbCZbyvzNq3R0J6%2BJnpeXNqPNH%2BUn%2Ftf3AdtLNQMGNiRL4a6kfVAR%2BYCsYc5cpNA7OsY01vWWJYcONW%2B3rEmcxdnhG3xzINmkTXNElTDuAZXPD%2BsS%2Bwv%2B447QCETBbKdkd4%2Bo7VPq8dSqFDLYN6MkPnqnPGjgNLUUMNcz5SZLQvCy%2BdaSG0ZqM2WphUKgDElNzlDhbI9luPaCnhKF2Cxqcw43nOlFRh7Z%2FwghyPra5FUGAMjGN4vtMKsbjB%2BCxHxPcAFE0gv1SRBCmV7GPJdfmsG0eNvCtnaoiQ1f81dBU3JZ2KKFxqoyXGHy34YTHWiUjcz4TorpZsNXCJvMoW10vUzvDtjvHIoiCyoIKhIk0ufmPq2jEEfDc3LB%2FY1wFW4TifaN1VYpWaUtUPj8TiYsUW3zEj4RyJfM%2B3znhkiHmjGkFS5zZw6kArWlCGBMCCneSWsktgbrI8Njx%2FuD5uy6MgmZuOuJImQCAgozT%2BX1%2FbuxJv1in%2FG5n0d7c7x7XofIQ%2BMi2CWXsl8p%2BqkWufmLg2P8jZal7YjktWnWxRxh046MhuATVAtKwkYV4obQSVO0RmYV98GWfoJz8n3iFkgFm4vgjXxQbYej%2FZaLip3%2FAacrBxJXzRffpd8AiRQp3hrbKIR%2FHabzA21gkiurjpNwPAngjstXt%2B%2Bvvr%2FUJ1kLIeMFJ3ZEPZr6vn%2B8rogBuloLJYDGLt%2Fq4PjjFrzzXfLgUC1yi66qMimCGtbfZZUR5hs4vq1VZHjSmdZMa9TzeW3iJvohYAhCVr7RiGKx%2BDRVNFwFDfJxj61PiSSQDA%2FFhDQqytWaQa2doB%2BwmibSSt7EIhisNRhgnUxSDqv6uLOabXSFlqznO8D9m2Y4rOvtEznDzbLcNqCWSbnNjkpSoEQzeXbtsu%2BZn4V39vI8aDuZnyrjsD6hXGQ%3D%3D"));for(let e in w.exports)E.env[e]=w.exports[e];let M=await I(r),m=c(i.data.buffer),C=Date.now(),L=!0;a=()=>L=!1;const y=1e3/60;let p=C;!function e(){if(L)try{let A=Date.now(),t=!1;if(A>=p){let e=navigator.getGamepads(),a=0;for(let A=0;A<4;++A){let n=e[A];if(n){for(let e=0;e<8;++e){let t=(e+12)%16;n.buttons.length>t&&n.buttons[t].pressed&&(a|=1<<8*A+e)}if(n.axes.length>1)for(let e=0;e<4;++e){let t=n.axes[1-(e>>1)];(1&e?t:-t)>.5&&(a|=1<<8*A+e)}n.buttons.length>9&&n.buttons[9].pressed&&(t=!0)}}let n=c(Q.buffer);n[16]=A-C,n[17]=F|a,M.exports.upd(),w.exports.endFrame();let r=c(Q.buffer.slice(77824,78848));for(let e=0;e<76800;++e)m[e]=4278190080|r[d[e+120]];o.putImageData(i,0,0),p=Math.max(p+y,A)}t?f(n):window.requestAnimationFrame(e)}catch(e){t.setMessage(g,e.toString())}}()}catch(e){t.setMessage(g,e.toString())}}function Q(e,A){let t=document.createElement("a");t.href=URL.createObjectURL(e),t.download="microw8_"+(new Date).toISOString()+A,t.click(),URL.revokeObjectURL(t.href)}return{runModule:f,runModuleFromURL:async function(e,A){let t=await fetch(e),a=t.headers.get("Content-Type");if(a&&a.includes("html"))throw!1;f(await t.arrayBuffer(),A||s)},setDevkitMode:e=>s=e}}(document.getElementById("screen"),{setMessage:function(e,A){let t=e?`${e} bytes`:"Insert cart";A&&(t+=` - <span class="error">${A.replaceAll("<","&lt;")}</span>`),document.getElementById("message").innerHTML=t},keyboardElement:window,timerElement:document.getElementById("timer")});function t(){let e=window.location.hash.slice(1);"devkit"!=e?(A.setDevkitMode(!1),e.length>0?e.startsWith("url=")?A.runModuleFromURL(e.slice(4),!0):A.runModuleFromURL("data:;base64,"+e):A.runModule(new ArrayBuffer(0))):A.setDevkitMode(!0)}window.onhashchange=t;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&&A.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(),A.runModuleFromURL(URL.createObjectURL(e.dataTransfer.files[0])))},t()},n=window.location;0!=n.hash.length?a():(async()=>{let e=n.href;e.endsWith(".html")?e=e.slice(0,e.length-4)+"uw8":(e.endsWith("/")||(e+="/"),e+="cart.uw8");try{await A.runModuleFromURL(e,!0)}catch(e){a()}})();</script></html>