Files
microw8/v0.4.1/index.html
2025-04-24 08:07:16 +00:00

2 lines
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;background-color:#202024;height:100%;font-family:Josefin Sans,Verdana,Arial Black,sans-serif}body{grid-template-rows:1fr 0fr;height:100%;display:grid}#uw8{position:absolute}#uw8 a{font-size:130%}#centered{place-self:center}a{color:#303630}a:hover{color:#405040}.screen{image-rendering:pixelated;background-color:#202428;border:4px solid #303040;width:320px;height:240px;margin-bottom:8px;box-shadow:5px 5px 20px #000}#screen{cursor:none}#start{font-size:150%}#timer:before{content:"";background-color:red;border-radius:6px;width:12px;height:12px;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 (width>=680px) and (height>=620px){.screen{width:640px;height:480px}}@media (width>=1000px) and (height>=800px){.screen{width:960px;height:720px}}@media (width:640px) and (height:480px){.screen{border:0;width:640px;height:480px;margin:0}body{overflow:hidden}}</style></head><body> <div id="uw8"> <a href="https://exoticorn.github.io/microw8">MicroW8</a> 0.4.1 </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}var t={};t="data:application/wasm;base64,AGFzbQEAAAABFQRgAX8Bf2ACf38Bf2ADf39%2FAGAAAAIPAQNlbnYGbWVtb3J5AgAEAwkIAAABAgEAAAMGEAN%2FAUEAC38BQQALfwFBAAsHGQIIbG9hZF91dzgAAAp1bmNvbXByZXNzAAQIAQcKngUIxwEBB39BAC0AAEEBayIBQQBIBEAgAA8LQYDAByAAaiECIAFBAXEEQEEBQYHABxAEIQIFQYDAB0EAIAAQAwtBAEGAhA9BCBADQYiEDyEDQQghBEGBwAchBQNAIAUgAkggAyMATiAFLQAAIAMtAABMcnEEQCAEIAQgBRACIgZqIQQgAyMASCAFLQAAIAMtAABGcQRAIAMgAxABaiEDCyAFIAZqIQUMAQsgAyMASARAIAQgBCADEAIiB2ohBCADIAdqIQMMAQsLIAQLPAEEfyAAIQEDQCACIAFBAWoiAS0AACIEQf8AcSADdHIhAiADQQdqIQMgBEEHdQ0ACyABQQFqIABrIAJqCxIBAX8gACABIAEQASICEAMgAgskAANAIAJBAEoEQCAAIAJBAWsiAmogASACai0AADoAAAwBCwsLqQEBBn8gACQBQQAkAgNAIANBgAE6AICADyADQQFqIgNBgQNIDQALAkADQEEAEAYiBQRAIAQEf0EBBUGAAhAGCwRAQYECEAVBAWsiAkUNAwtBwQIQBSEGA0AgASABIAJrLQAAOgAAIAFBAWohASAGQQFrIgYNAAsFQQEhBwNAIAdBAXQgBxAGciIHQYACSA0ACyABIAc6AAAgAUEBaiEBCyAFIQQMAAsLIAELNAECfwNAIAAgAmoQBgRAIAEgACACakEgahAGIAJ0ciEBIAJBAWohAgwBCwsgAUEBIAJ0cgtxAQR%2FA0AjAkGAIEgEQCMCQQh0IwEtAAByJAIjAUEBaiQBDAELCyMCQf8BcSICIAAtAICADyIBIwJBCHUiA2xBgAIgAWsgA2wgAWsgAiABSCIEG2okAiAAIAFBByAEQYECbGogAWtBBHVqOgCAgA8gBAsMAEEAQYCEDxAEJAALC60EAQBBAAumBBf%2FyMx3cvbPLfDyK1Bb4IburZYc9i%2BGTsS3j6O4M0o%2Bl2NUQ%2B88SSzybjKLNViVnmhuM%2FZ6LyqKG10doX6mhidmH1yW84EJfcqSXy6pUuF8h7prEGKBJPbIG0yhSUUWuzMrdRxzE4okeNRo4cs%2FsVhtCh4Vai9OQbuu9AZbIpuNDXWOFbj927WcryfPy4dsdT0B%2BA3x1gqXPq2rgI2fI0dNid3EJDTBr3SZWQObkiDldI5YJ17KFwjme3ofejUZT6xP3cNY2XdcosNxULga5hpnvQxV%2F1YKYfeYBVnZ6mAPyIx6Ayl4uxPFNpFdkNv28D%2Bv4X4QS%2BMYgr%2BrLsNAjif5Pz0lVPDBHkx%2BuqJN9SHrb6uRHqvwoVNuRbgn4alMggAWdV0rqmwCXlsmJyzwX%2BrWtH7BoosSlavxs%2BMUTI%2BFXunhVtt5mz3HYy3%2BxBJXF%2FhLWKUPw8vHxoEt%2BBpGDuMK8%2B1ew3pagPiQ7PV7YPWeoHyEKBM92UbyjbJx7HBp7Gh31ZwL9x%2B1sj0ogjs4HLke4hPdXR2o%2F%2BO67SYnX8CPp6YygTuddCxYwU6eHzYFFpwQuzKCVNPXyJKX4HVPJnysHBj5ygPItuS0NZqGlhpzEbgDf%2FJbIQgHzmNotsi6ErQdaigmn0dopO1ybwjbUWZ1kcZmOiBxcoNYSZVtW9mWKfn52kTNDn0QlwZz1slXrqIcx%2BMVVGeIZ9Y5hThIK3lyj%2BL9o%2Fo%3D";var a={};a="data:;base64,AiHfzO34vaTkrd2eAWsXmnk6O0saNxyBOKpKJ4gIZgTFyYLQaErZlwVOzFHSIEwVOdwimalCVY189KvAjT1MA27zTIMgHP7UatKxjcsK5BFbXOHvjhm%2FLesv0gorLh3%2Bp4VSOVvsomIiXDlLL175jQw%2FbY3NPCAhv3e8gH24nzYFr4u3WeQHbVbcFOTxKFGLYMNOsU2QjF2XaPOdZFP32e58qAST0gBwmSKO6tuZq7JVC68uBldt4wWCJEbQqqENSUe5rtcAfyaSRf3gzZ3t3PgnwZHp6%2Fr0cjPo8rqIhvmzkLWI2m4jPwHc8k4s87Gjgpc4YQeipZW9q4PGqym6pnlfUAA8lRaqIo9U%2BnyqAMiI37LAL%2FqtHCi8JG1ByCyw6d9Pf7TLrazkjNNHPa5IJV%2BD8KUJQcCDLquYfrU2baSeirg4QH64Pxevmuo5j9pF97P%2FrfT18mBqcFoba%2Bc1jAeWPRoOSmD9M%2FPIsO1a%2F4bjFd0Uuru95ilanB4yFg4tk9FRqP2zJPk0T4LAzWMXzSX8%2F0VBgOogv%2BniB0XHFmaXv%2BG0PqGrx2sDO2N%2Fi98A3DdQyry%2Fs1%2Bb8mid6w7g5mptwhx561baq1syBSrGSJLqcDAutTh8uXZYvVXbFVzmxfLpAxsR898NHK51FkzqvkxeaNnYbCkC19jhJaslZ1E0vdpidtMzv1uwHCp986mNDT3qK4nWbwOpG52kVtkmac18T9g428D%2BeyJW82GG1hJmGV%2F39FlEB5hxbyFZINNLLAfNwG08itW25ATJ7QxZ%2FAX8zoz%2FT7oLugeHUeMBtvBF%2Bt40Wh2n%2FvjehShTKyMYUvlDZTTzBq34hcaBhCNCHTEHV8bRzoBK3%2Fx0qmeTW2l8vG7KCizhl8VoxALJiY84Isnu1OAS8vKw35FHVUWXDfXLUJw0WooJ%2BdxHnwkxlGBfeNGdWY0zJyRe3CgvsBiGlxC5nABF4pFYBMEOIGR6ev%2F3rrkXL34LdvKr2PkRuMr1gjvb8gGszxhBS40uxdOoWZLRyLA5OZ07W5nHTFbL5l6wKfJrIbrl8ZRamKdD5IXHETRJZq%2BlF3KOS0Jug3R8cjVTtBWYH4QDRXEym7uWNetxnlA5tTOl9kl811ZJeAM2A8TwUY%2FZdnIoPSqf5gUCE%2BcUvdRo55HwOX%2FONuPrPGxNEYIklsAJJlz0ElYqE3NVSphMj3u7re%2F5b%2Fpdf2kWhkJNIdLvvXng6YXb5RM4%2BtqFvQDNV%2FYrEnk4RuFORPr2gwu6%2FllhKTq8RPiV%2FblJi2QsxJnwlFraEsbG3l4E%2FXsovrzL38DcEhBo7wfBSc8JHfs4tMYKHDxzrkUp0Ge01YMKzvvWjrpXrS0Dszq5B5WUA3JOuIBrq6GPuOdFhrJ6Fj7kX3iuWhGxpXrxiyMP%2BE4ax9UTCBGnvV7Nz1wE1gHFVe%2FN%2FoVjMZqV4vhzuVyf%2FEifKcdy1P4dVr6JG6Dw%2FcYvPlvqTtfCo1Khl5In1IrxmO5Hhq8ytKIKG9vTeeCqFXjVMCR9vfkCGyMi%2FbOdvNj6b%2Bq0ijT%2FyxZEp0kb7RSaN%2BihR75CGv7qkh8fy5qZmNYTNxFB5K%2F95iN70AZ8xZwKmOMJ7qbBzNj4j7fyl2zFz2SBLEWrSxhsGXkGjJ7OJmKJhLv8YQNTZij5u4F%2BUGB8GQhVZxmd381jEs4J2fsfbymks0lLC9BhIuCjK%2FTD28z1r7Kw%2Fnk97YXukMfBrNql3Bgh84neyaijJtxmMtuY6rb3CxPYBBQ0xMF%2FI7y6GqQL3xC9SuH5T0q%2FUjPliNfNsZEPgQ7o33%2BM80WMQELh8YeQsBIagyeql1ifqUUZ7hbSygRpIw76Fi7cVCJtaSZzH%2F8CzuoIjbHHWASBtQfLFB2vboh6UuhkyQB4igq0JskQIpQUMQB3wfXs%2BX4La3LtcQfiLkrMDRuqEn0LBhq8pktJvJZvpDtTShpTWpe0F6N43zx0Tk7lxF1awWFSz%2Bw%2B8PR%2BDd70VPEdaOWGxaSXZfnvo5R5wGccKJl0xsCkCZPuh%2BoK5OSHSOQr4eKb561cvGfpj0oO2dpCuIgaDs0r%2B%2BiDwdP2FQkQjyLZKE%2F4OF%2BuzbR9U47GeWrcF0n%2FBUd1VmNDibVX9Fue6C6ssuz8DeiRfXr1gy1w6MeBFXipcCqPm4tDpLbjyncb1A6tXEpAG4kJff0WFLsAtoHJjQLEDzcLBBTWUedmJhr4cOuvOMLpkkKMRE1UDoSkh125vqlARIYGSYpMTjVXIH8Ax2tshe%2BWKuRZxQUxiK6PRldTaJbZhYZfC1i%2BEemNES%2B1LyttebvfxZPIbzaOvfkG0fS6mc5dDdDMyEfsycEp5OkTA6%2F6ewhD6Z51qXmOaNxhcJ1zvAqaQ0jusuCm%2B%2Fwi%2BIbfJH1CQ4rDMebg1v%2FZy9RyVxBcHF7MxkMnN21TZ5iYomXJsJhNrsD8i5OXPwt2CpXVpFpXdxJU%2BIYc%2BucHA15M%2BA%2Bo3SaWgHw3GIjEVsEESfIBiY%2Baek%2BOKLz3xWKv80%2FVNxgy33z3KhsPZ81FMAsH%2BzP77yKwgykTqdarL0SpkTRxJ%2FVNAajJzqRFb1yJpLS7%2Bc%2Bf%2FSY7Z5lejiWfKyZyxL7wNoRK3DlSaY14DdoGhS3c15xbh2CiUEsVEujnpZmy4w9zSgFZJRBK00M04nV446jxbZ8W8maCHB3SIvLTugGKqHuT%2FwxXTI7IXHLRmrpY%2FMi26u8K2HdYYgeTXUeC7n4UE2VK1Cxi6JbFUvhi7SEz4jht8yyEMpITeo%2BEbHIZz8YOwsaBLZ0w%2BlCEDKP0QAugaDHgpzAZ%2BPrEHb6kerMv8SVcl%2FWfhbhLnElIH%2F6l%2F3iKJe2yOwz4fHIXHSxNbU9xU9gemVvmIICYOWNWJ7I4wfd0dFRT2HxmNOcEIq%2BJADv71LlaE1rauOy48kb874Ib2WPDd%2FrGCf%2FwsF8OFtgL2jk3GSS5j9ZRFTycsc%2B5Lym7LfBesZ3UqQr45nR2FCtMQxz5IIuDro5dW1ZbBM5UGuSVn%2B6z5hsXqeCK9cqIo%2F4o92AxIfq87%2B8VdbdChDjHifH6tbMAToCRfunjdOkA5WXNXfDxHWDtvLeqMnX40ld9hx9Odrg6hZWCELq39JGIFihQvkzrrSFIy1TUv9eH44jFeB%2FqeBtxJ%2FGW7VSySHLFlfnSZD0NeRNTsJ%2FyELSj6NRQgoMxc2q84189jVOtlxOI%2By4Un97SKOqdlxA9Db%2BMyIJ3VWSmcnnxygjXKFX12R4fMeCtAxhSLDl35EtM91qUw%2FYVJICNnVtdEnTpn9PSa1260tmTGIDOBfj0f6DIE9NyBOLtqyyyjTgL%2BT8xHMEfMBf81yBySqbYA7LmQjXqtTiRP3BMMxGR2Gjem%2BwgvNEU6vW15o8tKVnVEM%2Foo4m%2BZoYdPemA15873RU41BFLAqk%2FUIrq%2BsAekuFe6%2FD2zquzCeu3hSuF97XPhpwMsG8PdKp5gr8xw1lDiSI1GfkJiOxS0FSOzGUWDFbHr2bBa789Lqx77zJlzYvdEtBiEDMWSvTiQErBTyT0%2BB%2FzR2yXmGuJFBNvgH58jX3W%2BVzjqzn9Y5OiyQlyudP3G5n6be5Tv3xaqyXquR7Rfv%2F4nc6occM3L0vPZNK788o9%2FehIKM8NvZg90Z9s%2BoI%2BoWEXwPm%2FnQ15Qy3ErvDRQhos%2F4dugyDZMrgFAORjdw%2FBbdCtOPxvoTTU%2FOC8EEiAiGDkDDctcg4Hej%2BG71FMsF4Z5ShOA3io3EMqb%2B0Vzj9uVV4J1EKGK8tDr99xuPRKc2j31mxHCBnTn9oeXftoF6%2FT3xYDpU7GwUgj79uVngWaGCSImcW4vK2SvvvfRhIiV0k1D0376ZLj%2B0ZfqP94rWo1RjQVv01WGceNq4pPgD9ntbwhNOUZv7ctMapgGfA9DN0PF1XyIjL99ESv9KpD6L3vxaNKHFoIAxNu6yXNTqyh%2FnXfVlTOZvIfMsohKG9ryYm5fpdQ60fbztfMWpUmDgoGWqG%2Fa9t96bTOz2ZhXe6tLj0QAKl2mdE9pyfHO%2BfwgJSvjOic5dLWv5OUpEqdWhnuP48iH6XKMSqmcHVixoKC6trqP2ArbXdD6CRHX7OLBGRlCzegEDXGuJv7KcPyBMQEagTUrOJZxZ2BOiovsNPqWG5hHxdDRoZa9AOkObfE6knNmv6PR9fUqYsx2%2B2%2Blj6%2FQ4azl0B0MQf76Y4BOAxzOzBW5Gt0QHhlykSt5zoUc1FPJmDGz9b2TAbYGhANIDG1rGT97NPLythqsFkrBOmNFSOWQPO095ov8rcfV18UHccRfOt8V2f9cl0XE0IBcjD2Gr8coa1LJ9gxmLOa9%2B0%2FoTzwFJmGBvEVsP4Kh77v%2B4ffyZrLlG9sGIgxB8kAXrhyEWv2I59Y76So0Yywz41xHl07knfyD7InPOPjl4oTzd3WCliucR%2Ba%2F%2BLNyf0O%2FtugHMGN5c3yp2sH4zyTdLcvrt2cWCbnQOpUyRQpQoVnr4kPQD%2FR0cvKEzguszhlA4KSVBLYdVljjzJCezxbDyedTSnoIEgtMa4ENJmhsrQ0BbL5a%2BQICui7NNuqx5j6NX0Wfhf9hsiAsDISt%2F13tMyaK%2Fh3rahcBXNpe4iYrLpu9dH2Xncl8HBVZ3RLwgqi2IQcE9bdCxyqJpDzPOAgpYNjZyPfoE41wowkSWrZorrOiE4BwJpdR3jZsbNEwW%2Fk%2B6WiBNyraNTuMWUCVVTfQUtyttvZGoNPxGGlOKh6DGP4aSlH7b2OLtVnUUB1we6XHRooryCeM5pdCBurqGWSOIajmKIiRswYazeg0eDhgvPF8NTBpi%2FwoMW9iWMWvdn26tMPK2H0yjD%2FmSVF0PvvOhEPbCbFSlwP8L%2Frj9dzfGqb4hTq4%2BOZD%2BRsQSriR1rc9QllvdGiXUdehyvVUheIHm6ELgHHZ4GwOJJcSj9L6GdvlYv1Bn09PuYzjXWF26b3bhOF7K175crDm9VB0zRFEGWYH0qZ2VtMI8CKpLeG2FSi%2BA1kjPZm5oV2GWseL2w229cfiAFTu1qupjWl0Fm1x27Jsw5i8HLV0z5BEp4m5FkZF0JhRhTiB5nNoZNYmIiKwlWt0vzsvAD849DzodAFKwjA3NzTC0YVmK7RmVcedZXCgv3HIjLVExTbMHYd5YNaTgP5YkNY0aWrvQOeKoH6pmITYrg7PA72FHrgd3%2FnzBqRvtvV1WtpgLHC5M9o1dvJo1G8%2BFkbxSaDEu3KBSBO47Xl5h0jp2lRSqc5xZntzgaHL%2FY5UDgiCWlLXosg%2BkB2LMRTuXoO4%2BakQM%2Funr2ezKkHfCIv5QjxGWb2UMVqKA9kFxxy8eiIHJDk1SBKSybEj8KHcwgBecXEhcvk3QShJboUK7bhcHAyfteUUppD8vqMqEuRyiDy9IrpbE8U%2FRJqYGXpS0hCkDE7nAsGAmY7Ut9TPQRDNSIMW1eyqHvofwZYVs%2BPr016xhGUbbOuLmtGpULN7tYq8K6pmM6QAbDbw8g8ruusNwnjhR1oOOAapS0%3D";var r={};r="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";class s extends AudioWorkletNode{constructor(e){super(e,"apu",{outputChannelCount:[2]})}}let n=(...e)=>new Uint8Array(...e),B=(...e)=>new Uint32Array(...e),o=function(o,A={}){let i,l,d,F,c,u,g,h;A.setMessage||(A.setMessage=(e,t)=>{t&&console.log("error: "+t)});let D=o.getContext("2d"),y=D.createImageData(320,240),f=A.devkitMode,m=0,E=void 0==A.keyboardElement?o:A.keyboardElement;if(E){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&&w(l,!0);break;case"F9":a&&o.toBlob(e=>{I(e,".png")}),e.preventDefault();break;case"F10":a&&function(){if(c){c.stop(),c=null,g.disconnect(h),g=null,h=null;return}let e=o.captureStream();h=d.createMediaStreamDestination(),g=F,F.connect(h),e.addTrack(h.stream.getAudioTracks()[0]);let t=[];(c=new MediaRecorder(e,{mimeType:"video/webm",videoBitsPerSecond:25e6})).ondataavailable=e=>{t.push(e.data)};let a=A.timerElement;a&&(a.hidden=!1,a.innerText="00:00"),c.onstop=()=>{a&&(a.hidden=!0),I(new Blob(t,{type:"video/webm"}),".webm")},c.start(),u=Date.now(),setTimeout(function e(){if(u){if(a){let e=Math.floor((Date.now()-u)/1e3);a.innerText=Math.floor(e/60).toString().padStart(2,"0")+":"+(e%60).toString().padStart(2,"0")}setTimeout(e,1e3)}},1e3)}(),e.preventDefault()}a?m|=t:m&=~t};E.onkeydown=e,E.onkeyup=e}async function w(c,u){let g;i&&(i(),i=null),d=new AudioContext({sampleRate:44100});let h=!0,E=new AbortController;i=()=>{d.close(),h=!1,E.abort()};let I=c.byteLength;if(A.setMessage(I),0==I)return;await d.audioWorklet.addModule(e(r)),F=new s(d);let C=0,p=new Promise(e=>g=e),b=e=>{3==(C|=e)&&g&&(g(!0),g=null)},v=()=>{"suspended"==d.state?(A.startButton&&(A.startButton.style="",o.style="display:none"),(A.startButton||o).onclick=()=>{d.resume()}):(A.startButton&&(A.startButton.style="display:none",o.style=""),b(1))};d.onstatechange=v,v(),l=c;let Q=window.location.pathname;if(I<=1024&&!u){let e="";for(let t of n(c))e+=String.fromCharCode(t);(Q+="#"+btoa(e))!=window.location.pathname+window.location.hash&&history.pushState(null,null,Q)}o.width=o.width;try{let r,s={initial:4};f||(s.maximum=4);let o=new WebAssembly.Memory(s),i=n(o.buffer),u={env:{memory:o}},g=e=>{if(r&&(!f||0!=n(e)[0])){i.set(n(e));let t=r.exports.load_uw8(e.byteLength);e=new ArrayBuffer(t),n(e).set(i.slice(0,t))}return e},C=async e=>(await WebAssembly.instantiate(e,u)).instance,v=async e=>g(await (await fetch(e)).arrayBuffer());for(let a of(r=await C(await v(e(t))),["acos","asin","atan","atan2","cos","exp","log","sin","tan","pow"]))u.env[a]=Math[a];for(let e=9;e<64;++e)u.env["reserved"+e]=()=>{};let Q="";u.env.logChar=e=>{10==e?(console.log(Q),Q=""):Q+=String.fromCharCode(e)};for(let e=0;e<16;++e)u.env["g_reserved"+e]=0;c=g(c);let x=await v(e(a));F.port.onmessage=e=>b(e.data),F.port.postMessage([x,c]);let M=await C(x);for(let e in M.exports)u.env[e]=M.exports[e];let L=await C(c),S=B(y.data.buffer);await p;let G=Date.now(),k=0,N=1e3/60;F.connect(d.destination);let q=!1,T=G,U=e=>{let t=Date.now();e?(q=!1,d.resume(),G+=t-T):(q=!0,d.suspend(),T=t)};window.addEventListener("focus",()=>U(!0),{signal:E.signal}),window.addEventListener("blur",()=>U(!1),{signal:E.signal}),U(document.hasFocus()),L.exports.start&&L.exports.start(),function e(){if(h)try{let t,a=!1;if(q)t=Date.now();else{let e=navigator.getGamepads(),r=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&&(r|=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&&(r|=1<<8*t+e)}s.buttons.length>9&&s.buttons[9].pressed&&(a=!0)}}let s=B(o.buffer),A=Date.now()-G;s[16]=A,s[17]=m|r,s[18]=k++,L.exports.upd&&L.exports.upd(),M.exports.endFrame();let l=new ArrayBuffer(32);n(l).set(n(o.buffer,80,32)),F.port.postMessage({t:A,r:l},[l]);let d=B(o.buffer,77824,1024);for(let e=0;e<76800;++e)S[e]=4278190080|d[i[e+120]];D.putImageData(y,0,0);let c=(6*A%100-50)/6;t=G+A-c/8}let r=Date.now(),s=Math.max(t+N,r);a?w(l):window.setTimeout(e,s-r)}catch(e){A.setMessage(I,e.toString())}}()}catch(e){A.setMessage(I,e.toString())}}function I(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)}async function C(e,t){let a=await fetch(e),r=a.headers.get("Content-Type");return!(r&&r.includes("html"))&&200==a.status&&(w(await a.arrayBuffer(),t||f),!0)}return{runModule:w,runModuleFromURL:C,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 A(){let e=window.location.hash.slice(1);if("devkit"==e){o.setDevkitMode(!0);return}o.setDevkitMode(!1),e.length>0?e.startsWith("url=")?o.runModuleFromURL(e.slice(4),!0):o.runModuleFromURL("data:;base64,"+e):o.runModule(new ArrayBuffer(0))}window.onhashchange=A;let i=()=>{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&&o.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(),o.runModuleFromURL(URL.createObjectURL(e.dataTransfer.files[0])))},A()},l=window.location;0!=l.hash.length?i():(async()=>{let e=l.href;e.endsWith(".html")?e=e.slice(0,e.length-4)+"uw8":(e.endsWith("/")||(e+="/"),e+="cart.uw8");try{await o.runModuleFromURL(e,!0)||i()}catch(e){i()}})();</script></html>