@darkshadow2900/lethal-company-web 0.1.0-data.9 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.html ADDED
@@ -0,0 +1,310 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <meta charset="utf-8">
4
+ <meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover,user-scalable=no">
5
+ <meta name="theme-color" content="#090d09">
6
+ <title>Lethal Company</title>
7
+ <style>
8
+ *{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#000;color:#c6efbb;font:16px monospace}button,input{font:inherit}button{color:inherit;background:#142011;border:1px solid #6b885f;border-radius:5px;padding:10px;touch-action:none}input{color:inherit;background:#050805;border:1px solid #6b885f;padding:10px;width:100%}#unity-canvas{display:block;width:100%;height:100%;outline:none;touch-action:none}#loading{position:fixed;inset:0;background:#090d09;display:grid;place-content:center;gap:16px;padding:24px;z-index:20;text-align:center}#loading h1{font-size:clamp(24px,6vw,42px);margin:0}#loading progress{width:min(70vw,480px);accent-color:#9adb7f}#load-error{max-width:640px;white-space:pre-wrap;color:#ffba90}#toolbar{position:fixed;top:env(safe-area-inset-top,8px);right:env(safe-area-inset-right,8px);display:flex;gap:5px;z-index:8;opacity:.8}#toolbar button{padding:7px;font-size:12px}#session{position:fixed;inset:0;z-index:12;background:#000b;display:none;align-items:center;justify-content:center;padding:20px}#session.open{display:flex}#session form{display:grid;gap:12px;width:min(440px,100%);background:#090d09;border:1px solid #6b885f;padding:24px}#session label{display:grid;gap:6px}#session .row{display:flex;gap:8px}#session .row>*{flex:1}#connection-state{min-height:20px;font-size:13px;overflow-wrap:anywhere}.touch-ui{position:fixed;z-index:6;display:none;pointer-events:none;inset:0;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);touch-action:none}.touch-ui.active{display:block}.touch-ui button,.touch-ui .pad{pointer-events:auto;user-select:none;-webkit-user-select:none}.pad{position:absolute;left:max(22px,env(safe-area-inset-left));bottom:max(28px,env(safe-area-inset-bottom));width:130px;height:130px;border:1px solid #ffffff55;border-radius:50%;background:#0c180c44;touch-action:none}.stick{width:54px;height:54px;border-radius:50%;background:#a7c59d55;position:absolute;left:37px;top:37px;pointer-events:none}#look-pad{position:absolute;left:38%;right:0;top:12%;bottom:0;pointer-events:auto;touch-action:none}.touch-buttons{position:absolute;right:max(14px,env(safe-area-inset-right));bottom:max(22px,env(safe-area-inset-bottom));display:grid;grid-template-columns:repeat(3,65px);gap:7px;pointer-events:none}.touch-buttons button{font-size:12px;min-height:47px;background:#14201199}.touch-buttons button.pressed{background:#74936acc}.touch-extra{position:absolute;left:max(20px,env(safe-area-inset-left));bottom:174px;display:flex;gap:7px;pointer-events:none}.touch-extra button{font-size:12px;background:#14201199}#rotate-hint{display:none;position:fixed;left:0;right:0;top:44px;text-align:center;z-index:9;font-size:12px;background:#0008;padding:5px;pointer-events:none}@media(orientation:portrait){body.touch #rotate-hint{display:block}.touch-buttons{grid-template-columns:repeat(3,55px);gap:4px}.pad{width:110px;height:110px}.stick{left:27px;top:27px}.touch-extra{bottom:150px}}#voice-panel{display:none;position:fixed;inset:0;z-index:14;background:#000b;align-items:center;justify-content:center;padding:16px}#voice-panel.open{display:flex}#voice-panel section{max-height:90vh;overflow:auto;overscroll-behavior:contain;display:grid;gap:14px;background:#090d09;border:1px solid #6b885f;padding:22px;width:min(440px,100%)}#voice-panel label{display:grid;gap:7px}#voice-state{font-size:13px;overflow-wrap:anywhere}#voice-hold{position:fixed;bottom:max(185px,env(safe-area-inset-bottom));right:20px;z-index:10;background:#142011cc;touch-action:none}[hidden]{display:none!important}
9
+ </style>
10
+ <canvas id="unity-canvas" tabindex="0"></canvas>
11
+ <div id="loading"><h1>LETHAL COMPANY</h1><div id="load-status">Ready to load</div><progress id="load-progress" max="1" value="0"></progress><button id="start">Start game</button><div id="load-error"></div></div>
12
+ <div id="runtime-error" hidden role="alert" style="position:fixed;inset:12% 8% auto;z-index:30;background:#180b0b;color:#fff;padding:20px;border:1px solid #b66"><strong>Game error</strong><pre id="runtime-error-text" style="white-space:pre-wrap;max-height:35vh;overflow:auto"></pre><button onclick="location.reload()">Reload game</button> <button onclick="this.parentElement.hidden=true">Close</button></div>
13
+ <div id="toolbar"><button id="session-button">Session</button><button id="voice-button">Voice</button><button id="touch-toggle">Touch controls</button><button id="fullscreen">Fullscreen</button></div>
14
+ <div id="pointer-hint" hidden style="position:fixed;top:45px;right:12px;z-index:9;background:#111d;padding:8px;pointer-events:none">Click the game to enable mouse look.</div>
15
+ <div id="rotate-hint">Turn your phone sideways for more room.</div>
16
+ <div id="session"><form id="session-form"><strong>Play together</strong><label>Relay server<input id="relay" placeholder="ws://192.168.1.10:8000/relay" autocomplete="off"></label><label>Room code<input id="room" value="crew" maxlength="24" autocomplete="off"></label><label>Name<input id="player-name" value="Employee" maxlength="18" autocomplete="off"></label><div class="row"><button type="button" id="host">Host</button><button type="button" id="join">Join</button><button type="button" id="session-close">Close</button></div><button type="button" id="server-download">Get laptop server</button><button type="button" id="invite-copy">Copy invite link</button><input id="invite-link" readonly hidden aria-label="Invite link"><div id="connection-state">For multiplayer, run the server on your laptop.</div></form></div>
17
+ <div class="touch-ui" id="touch-ui"><div id="look-pad"></div><div class="pad" id="move-pad"><div class="stick" id="move-stick"></div></div><div class="touch-extra"><button data-button="128">Sprint</button><button data-button="256">Scan</button><button data-button="512">◀ Item</button><button data-button="1024">Item ▶</button></div><div class="touch-buttons"><button data-button="1">Jump</button><button data-button="2">Interact</button><button data-button="4">Use</button><button data-button="8">Crouch</button><button data-button="16">Drop</button><button data-button="32">Inspect</button><button data-button="64">Build</button><button data-button="2048">Menu</button><button data-button="4096">Alt use</button></div></div>
18
+ <div id="voice-panel"><section aria-label="Voice chat"><strong>Crew voice chat</strong><div id="voice-state">Join a room, then enable voice.</div><button id="voice-enable">Enable voice</button><label>Microphone mode<select id="voice-mode"><option value="open">Open microphone</option><option value="push">Push to talk (hold V or Talk)</option></select></label><label>Crew volume<input id="voice-volume" type="range" min="0" max="1" step="0.05" value="0.85"></label><div>Nearby crew use proximity voice. Powered walkie-talkies carry speech over longer distances. Living crew cannot hear dead players.</div><button id="voice-stop">Turn voice off</button><button id="voice-close">Close</button></section></div><button id="voice-hold" hidden>Hold to talk</button>
19
+ <script>window.packedMode="cdn";window.packedManifest={"loader":{"gzipBytes":11136,"gzipSha256":"090ca7f713dbd058d066734955820b8c63735b88261bc0cd82e4975fff0f172a","sourceSha256":"ddbcb35ab097987b4024decd0b3faf32bd1b6b304bb8a6a5e7e06e9d700997cb","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.1/090ca7f713dbd058d066-000.bin","bytes":11136,"sha256":"090ca7f713dbd058d066734955820b8c63735b88261bc0cd82e4975fff0f172a"}]},"framework":{"gzipBytes":202044,"gzipSha256":"d50557a7478f45d3c0bed6f794d157f61463bdb0af7f31bcb8e442b9b65938ab","sourceSha256":"620675e1e50a228d4ddb41f2cdea6cf6ca29b4649907eb8970a8326dcdcbbceb","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.1/d50557a7478f45d3c0be-000.bin","bytes":202044,"sha256":"d50557a7478f45d3c0bed6f794d157f61463bdb0af7f31bcb8e442b9b65938ab"}]},"wasm":{"gzipBytes":46467159,"gzipSha256":"7e8722673c33480308a1a72cd9affc8f9cf173f7ec98a292e8f9f5cbdbba0582","sourceSha256":"7f6428420fec7c3701c56fd6185d9f0d9d45dfe3cddf7ebeb241af443aa86ed4","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.1/7e8722673c33480308a1-000.bin","bytes":4194304,"sha256":"19d33cd2f1e90f858cf87dca34f6d64ac9a92e7e4218ec42f5115e8634ce322f"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.1/7e8722673c33480308a1-001.bin","bytes":4194304,"sha256":"efb155d414ba33627fbffeeb77311f786dde37078e508a4ac740a78cda6b1147"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.1/7e8722673c33480308a1-002.bin","bytes":4194304,"sha256":"1b00a5f761ae74189c3f1c67e2ea05c6228715de7c158f2aa2fea1a463fff554"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.1/7e8722673c33480308a1-003.bin","bytes":4194304,"sha256":"244d7eb6bab8400cd231222747c50dfe09091b5737b39620117057abc5865fc7"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.1/7e8722673c33480308a1-004.bin","bytes":4194304,"sha256":"2aeca538ee01eeca5ab4f9dbf29e713ba14e8483bd1f0ce1c5ddf3dbfa936699"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.1/7e8722673c33480308a1-005.bin","bytes":4194304,"sha256":"0048b5041f8cb32f4abf94db85e007594edb0ec9a5a6b8f2acb6fc62a373bb3e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.1/7e8722673c33480308a1-006.bin","bytes":4194304,"sha256":"fb3e4ec821dac9eda340deddfab34be35474a9475b250c2234cdd497acd6d24c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.2/7e8722673c33480308a1-007.bin","bytes":4194304,"sha256":"818ec66dd66dbc0f9e192c0c948a754c10262bb68a5b5a0f0f41e8cc08a120a8"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.2/7e8722673c33480308a1-008.bin","bytes":4194304,"sha256":"59104cbe92eaf3c3ed9f97ab397efd1f853353484ce9ad79f4f9fde8ceaa067f"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.2/7e8722673c33480308a1-009.bin","bytes":4194304,"sha256":"d0a914c4c10f10cddfbb51565541753f0cd03474dd5efea8ad4d03dab29332ee"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.2/7e8722673c33480308a1-010.bin","bytes":4194304,"sha256":"926d2821b21c26e32281f0cab36f60da046254bd4190f254de4ba0b062c5916b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.2/7e8722673c33480308a1-011.bin","bytes":329815,"sha256":"4763920ba7029d6ab5e04c947e43bca23b5269783954f11c20dabfcbbd637271"}]},"data":{"gzipBytes":480325246,"gzipSha256":"058e359db7e36aa85493818477ef5e05f63361872e850c20aefb5294b5b166c4","sourceSha256":"712454c88d10cbd000634109dd87a287a0233c4f58de13c69be7425fe658ee83","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.2/058e359db7e36aa85493-000.bin","bytes":4194304,"sha256":"ad45c82e34fa27b06b6d636229c207e998a19157faeb38a5619f8bf64248249d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.2/058e359db7e36aa85493-001.bin","bytes":4194304,"sha256":"2e8b4903d940df5cdca9e145661c3a65d7484aead6d866822c5e82e6dcab12a8"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.2/058e359db7e36aa85493-002.bin","bytes":4194304,"sha256":"05de49c8033f7470e6ba1ace9601ea2f463f7404ec6cc4874afc17aea78b7bac"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.3/058e359db7e36aa85493-003.bin","bytes":4194304,"sha256":"943433178bcd972000931fe0ab96b1345652ab979085a637f0532cc863ef2647"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.3/058e359db7e36aa85493-004.bin","bytes":4194304,"sha256":"fbf6b3a25bf6adbde17f2047973c989bd557f27b2896cdfa2569ce9a6fbc9f18"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.3/058e359db7e36aa85493-005.bin","bytes":4194304,"sha256":"c0506487978587f06757b7aa8b027115f47cc521cc31f514c0ed50aeceb9b3eb"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.3/058e359db7e36aa85493-006.bin","bytes":4194304,"sha256":"6b1683a759d974abb5c212c6a2c2daf8cc8c4feffc1c77e2549ce2725ccc3411"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.3/058e359db7e36aa85493-007.bin","bytes":4194304,"sha256":"c64cf985e660ba2264d10bffd9cef8db3c43c1446701a7e6f53d28067b645cf1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.3/058e359db7e36aa85493-008.bin","bytes":4194304,"sha256":"b5fee9696dd1ddbfe4a7d13d546f3d3e733755b4f314e96a043833b6c3b4815c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.3/058e359db7e36aa85493-009.bin","bytes":4194304,"sha256":"b73f6c1e09e7e0ad72acbae964f883fed8027c5b8b884711bf2b3dc9ddf5ec4b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.3/058e359db7e36aa85493-010.bin","bytes":4194304,"sha256":"38320f3cc581035199f780b04c68aa28f187995e35fb47691ff72e8b3bb355f6"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.4/058e359db7e36aa85493-011.bin","bytes":4194304,"sha256":"cd65fb3f4a5723010fabba3bff3b57fe379a3a690ead8b167b10c71c4bae7f5e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.4/058e359db7e36aa85493-012.bin","bytes":4194304,"sha256":"94cb00debdf21c24d4b5a12ec86a32e187c4c2df36fd77494b191bcbd9cb4f83"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.4/058e359db7e36aa85493-013.bin","bytes":4194304,"sha256":"1d9aa2fb3668be04a3183fc6b140833506466ef4174248a95f56546a5c73ecc8"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.4/058e359db7e36aa85493-014.bin","bytes":4194304,"sha256":"856bca2d77fb00519f9ceb6dac73b76fe40e12012bef048b295b72a898654a9e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.4/058e359db7e36aa85493-015.bin","bytes":4194304,"sha256":"4fed7bdc3a431822e75bf8dac9341c93b0eab371dcb500b75bb5fdc0c44ae380"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.4/058e359db7e36aa85493-016.bin","bytes":4194304,"sha256":"8cc90b207cb2ce120cad083f6d03196051d83fb5b4e96492746d2f58605aa313"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.4/058e359db7e36aa85493-017.bin","bytes":4194304,"sha256":"2bfeb2db9c35ad7a483b9e6fda65384b40118bf8fc3983f4646e52c4a68a57fa"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.4/058e359db7e36aa85493-018.bin","bytes":4194304,"sha256":"5a197f5aa09086f7e79aaf335a4407ba558a20323e016b857006bc5bdca02758"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.5/058e359db7e36aa85493-019.bin","bytes":4194304,"sha256":"1178d9c0610e462147859100cd0220946920346932adfb575029512d620bc932"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.5/058e359db7e36aa85493-020.bin","bytes":4194304,"sha256":"6c2a29d1e088fc056d7291b5e1e79918f8ac06996f70844dfaf5c5d3ba677d2e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.5/058e359db7e36aa85493-021.bin","bytes":4194304,"sha256":"dbe561327e79877d65c444965a879a861b353aa7d7a1a7a337d7ba8e91e5dac4"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.5/058e359db7e36aa85493-022.bin","bytes":4194304,"sha256":"53aed9955638e1c37419b3021695700fa8295aa3d6dcdc86325fcfb5c0523322"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.5/058e359db7e36aa85493-023.bin","bytes":4194304,"sha256":"e63e316e0e3c778bc3fea49fb8cf4cdbd79ccc0af35594ee5d4e87e03911a2e6"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.5/058e359db7e36aa85493-024.bin","bytes":4194304,"sha256":"d9aa82bf80c85b73a07f14fdeb4295cdf48cb937cce6c6cb3afd6ba48e2e6cb7"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.5/058e359db7e36aa85493-025.bin","bytes":4194304,"sha256":"a64219c5eaaf35a67a6ed8ca5d6694aedefe57b201507ac6f674ae115f59da1d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.5/058e359db7e36aa85493-026.bin","bytes":4194304,"sha256":"013062405151d185e41bdba11ca102789a238ee3a80a7f4fba24ba041c6d64e3"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.6/058e359db7e36aa85493-027.bin","bytes":4194304,"sha256":"800485b46ea05d629fe587bef26aab373bc8a2123b4fd50b576e3d9121cb7f64"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.6/058e359db7e36aa85493-028.bin","bytes":4194304,"sha256":"e89114d9ee1b8be1c86919725536f0ccf06f0c73ecac5b40c4297ba52e35831a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.6/058e359db7e36aa85493-029.bin","bytes":4194304,"sha256":"859f78d15ffa81c2be43f153c0e0413880a6d5e0acec5bb0e61244258ed7e008"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.6/058e359db7e36aa85493-030.bin","bytes":4194304,"sha256":"800ed09ce178c61deb6c236534a3a5189e411320e238b12f9397ff6eacea74d2"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.6/058e359db7e36aa85493-031.bin","bytes":4194304,"sha256":"ded660dac6662f8ea8d13379cc675328b76cb1698b32b8eca6bd5bc01a9fbd69"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.6/058e359db7e36aa85493-032.bin","bytes":4194304,"sha256":"34e9b56305abc55647aff51af4f3163070f8b50fca53ddc5940ff01b49c0024e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.6/058e359db7e36aa85493-033.bin","bytes":4194304,"sha256":"0454dee21519d51196444a9d9fc5e4494b88ff5c967490c7350913b0fb6aad70"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.6/058e359db7e36aa85493-034.bin","bytes":4194304,"sha256":"bac8041fa577312b9fa3d467659caf2d7654ff5626cba7bcbbd6aa82db20e1c1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.7/058e359db7e36aa85493-035.bin","bytes":4194304,"sha256":"8b68406c46b12867c3dfb5802df4a2994147c085fb4c0b167feb7c0cf7842553"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.7/058e359db7e36aa85493-036.bin","bytes":4194304,"sha256":"29a138b042fe872d5667e0b2a793cef0449cc8f2e2fd6de5b0041e1a885843fd"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.7/058e359db7e36aa85493-037.bin","bytes":4194304,"sha256":"e1bd0da3d14e336f9b001f6a43817efdd8ace9004abc28cf91aeac748ae374d9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.7/058e359db7e36aa85493-038.bin","bytes":4194304,"sha256":"6e7919edfd7357b204d5131ef6cc02b0ea083ade8034648fcff7db634fe14c5f"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.7/058e359db7e36aa85493-039.bin","bytes":4194304,"sha256":"21661aab289601d439e6d04e7608608b8e95a734739ed4b9e0126517b8636cf1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.7/058e359db7e36aa85493-040.bin","bytes":4194304,"sha256":"e56dc383509e1d1b16845091a3bd9d5c3527c4f7d810a1fdc6d83064c31cb02e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.7/058e359db7e36aa85493-041.bin","bytes":4194304,"sha256":"d6645ed92a02003ccd7d3d3375b107b63676b1726af20e89fc817457865e47d2"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.7/058e359db7e36aa85493-042.bin","bytes":4194304,"sha256":"e14a2add3bf7b5f5b7ee143a0d8c27b4782f1e9a343797575fa8474dd7e7b727"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.8/058e359db7e36aa85493-043.bin","bytes":4194304,"sha256":"801424289fc52742abc596eb8ce4bcd799ff2cc7699d785acab2253fe72f0bb6"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.8/058e359db7e36aa85493-044.bin","bytes":4194304,"sha256":"07ffa0962b86bb430e352ac027c5da1c8fda79241cd8e181ae89a82c31140f5e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.8/058e359db7e36aa85493-045.bin","bytes":4194304,"sha256":"8a51f6c7ad3ca25829d5563d6ed84ee687038e4f2a75aef99a74ea01d4139c84"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.8/058e359db7e36aa85493-046.bin","bytes":4194304,"sha256":"297f514691364eed2d54ce6b29ed7f8a9ceb64d9f235c34ced0fa6f1f79f2762"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.8/058e359db7e36aa85493-047.bin","bytes":4194304,"sha256":"039f2a8b3603e340c5e40c8193db574418b5cb4e2ff0eb8d868aa213daa1a74a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.8/058e359db7e36aa85493-048.bin","bytes":4194304,"sha256":"ea36962c9bb3ad51c4264f4dedfd79b5e07cf7551378343f0f6b495eee575285"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.8/058e359db7e36aa85493-049.bin","bytes":4194304,"sha256":"c170c4a4e0ee6478d7f3bfb0c7285928a1b659a8264203aa59afe182b547f3d9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.8/058e359db7e36aa85493-050.bin","bytes":4194304,"sha256":"2b213ffca47b0a9e07605719c7e5e5f42d68d7566da01d1d6d03171dc89d7d57"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.9/058e359db7e36aa85493-051.bin","bytes":4194304,"sha256":"bcdf87f9fd718f727c5835fbdeb62c1c3bdd0b523bfeca2fc1e795fd148cf5fa"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.9/058e359db7e36aa85493-052.bin","bytes":4194304,"sha256":"adad38e8d5a09474cf9c03d3ecfafe8acb17f28c51e7cfb5c331d9eec40e3010"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.9/058e359db7e36aa85493-053.bin","bytes":4194304,"sha256":"2556797049df52122dcd163ce8b0a357e7061bc7ac227106425b714f2ca4ff7b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.9/058e359db7e36aa85493-054.bin","bytes":4194304,"sha256":"6973d0147370c9a1681a9e20bf9b23cb362d8452c3f76a50bf4e67814525d941"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.9/058e359db7e36aa85493-055.bin","bytes":4194304,"sha256":"0f06c6a1616943e13ccf8b9e75ef2b121bf4532d15ac0d0f4ff31ef02b3f3140"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.9/058e359db7e36aa85493-056.bin","bytes":4194304,"sha256":"7e7158328b7fc33ab5606a2f39a495f68a58152587e20da5ed9c0020d743e3dc"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.9/058e359db7e36aa85493-057.bin","bytes":4194304,"sha256":"9729a47736c60efd7d9c864bf2610600a78a1524d36833e4c082ece9ef454708"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.9/058e359db7e36aa85493-058.bin","bytes":4194304,"sha256":"1e7ba54f3c69d7e0f30056893b463a95b66f7f78f62e92225b2fc7ee4b91d765"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.10/058e359db7e36aa85493-059.bin","bytes":4194304,"sha256":"3f9fc0546cfafeda584311bec5113630ae790edbc7b41e013d7682bd33c9cd12"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.10/058e359db7e36aa85493-060.bin","bytes":4194304,"sha256":"667c4d1972e195abc054ecda926b35204b7ae7d17fd7c46779f9da928369e23f"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.10/058e359db7e36aa85493-061.bin","bytes":4194304,"sha256":"2df86323ac9887bdd64f59832b63b274e9335c54f45bb81e28481dabad21c4cc"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.10/058e359db7e36aa85493-062.bin","bytes":4194304,"sha256":"8faddef240186c2832ed7d1d3ee63c623fef004a78d110fa5f8002f5215eff3b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.10/058e359db7e36aa85493-063.bin","bytes":4194304,"sha256":"f633aad4e1c219b455f598ea78bc1222bdf2cbeb02316b78ea48de73a1836ef7"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.10/058e359db7e36aa85493-064.bin","bytes":4194304,"sha256":"c299fac9d5122d9716e955187164801159d06cae72bd10b58a97532e4558b5eb"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.10/058e359db7e36aa85493-065.bin","bytes":4194304,"sha256":"a77ce8a1e785ecdca9b77de32f31531c8020b5936f8584bd711e934a34cb88ca"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.10/058e359db7e36aa85493-066.bin","bytes":4194304,"sha256":"3d391a204cd5142864c9e1f7ff2f0be5359771bf8a6c787241ee57bb6541fd05"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.11/058e359db7e36aa85493-067.bin","bytes":4194304,"sha256":"3e0ced36d993c70ad184f62cb8a127e26caf1ebe61b66923a7065b554b926c58"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.11/058e359db7e36aa85493-068.bin","bytes":4194304,"sha256":"df1e93652157ac3151af44a2f85ee50e0eed2d3408a6b2ee904d603b1d750b4d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.11/058e359db7e36aa85493-069.bin","bytes":4194304,"sha256":"1462feed15f5ebe1e2e14953d51726c354d4277018db365c0f7709ff9062c3d3"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.11/058e359db7e36aa85493-070.bin","bytes":4194304,"sha256":"576ed9b1d2c9c58c34292b43d8506c0629a5c1d8fd1656106ecd4204a1651fe7"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.11/058e359db7e36aa85493-071.bin","bytes":4194304,"sha256":"c638dcd8cfb9d13bf4ad357f673d42698c9f1d58644671a794b9db6a72104416"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.11/058e359db7e36aa85493-072.bin","bytes":4194304,"sha256":"374b23bba325e35f8d2ac593d31cbcabdb310a020072ccd54c62638573d6f094"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.11/058e359db7e36aa85493-073.bin","bytes":4194304,"sha256":"7bae5a6ce118e36d56bad7e6a80d58072638c40a7eb79a06dbddc61897053035"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.11/058e359db7e36aa85493-074.bin","bytes":4194304,"sha256":"4051183e9efd24b6fc38def14b191f35762b3c05ce06608013fd5d6f970e2de1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.12/058e359db7e36aa85493-075.bin","bytes":4194304,"sha256":"bec9c077785ac50540a15747f477512ed1cd0a612339bcfdbb0994ad692d6d99"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.12/058e359db7e36aa85493-076.bin","bytes":4194304,"sha256":"6fe51db37382956bc8e86f7a64fb9be135b77ad1fbc4f00fe491dca687609417"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.12/058e359db7e36aa85493-077.bin","bytes":4194304,"sha256":"dd3026dbc55613ff5c76605aef7e0849675594bba8dc17ff666fddaf24f93286"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.12/058e359db7e36aa85493-078.bin","bytes":4194304,"sha256":"649a18792f863bf262e53a96e7e3feb9f9f6f7ff877551f14543a0d6e1677a0d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.12/058e359db7e36aa85493-079.bin","bytes":4194304,"sha256":"93945ebba10ee1f534c55d19966b978b9fd2086f709c99969ef79f4300a960c9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.12/058e359db7e36aa85493-080.bin","bytes":4194304,"sha256":"fa09faa476484ec6b943e3dbea8a79b5b90e23b35d24624981d1c800bad9b50b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.12/058e359db7e36aa85493-081.bin","bytes":4194304,"sha256":"99d16c6f46948c82e26c4e5d27220cfed5b15cb7a226dc637614e42eff3f01b4"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.12/058e359db7e36aa85493-082.bin","bytes":4194304,"sha256":"caeebb6976d0febacfd9ecbf3576c140217537bf87f9489e6844abf4d2dc03c2"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.13/058e359db7e36aa85493-083.bin","bytes":4194304,"sha256":"d627b7fe6fbb2f248e002082a6d67034ca8dbe399d36d6c08fe62dcb98aaf3f1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.13/058e359db7e36aa85493-084.bin","bytes":4194304,"sha256":"9d8bf9461f93d48a324614e17d1a6a321e4057fb9eb95db6e2b944ba3ec239ae"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.13/058e359db7e36aa85493-085.bin","bytes":4194304,"sha256":"d9702036866f1e17e966be4949cd1a95416148ac30277a9efdb4c6ba51be5865"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.13/058e359db7e36aa85493-086.bin","bytes":4194304,"sha256":"cb9394f3f619513b6155a156585125a31e93bd047ec473372acba05e2ccde9c8"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.13/058e359db7e36aa85493-087.bin","bytes":4194304,"sha256":"41efbf6fd7946ab8b134eaf98d399c3898f33a22b4ca3e48380ce57ce6688498"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.13/058e359db7e36aa85493-088.bin","bytes":4194304,"sha256":"edea84d56dd9a1e9d1b8759ffec66486619e409b7648d340a741ceb0d21c68b8"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.13/058e359db7e36aa85493-089.bin","bytes":4194304,"sha256":"658c8834d5ade49bbd6ff50d2c92ad85f673f17f7ca7d1ff72e02375f4a6683a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.13/058e359db7e36aa85493-090.bin","bytes":4194304,"sha256":"637ec29076a4ddf7beec57518302fe4e70072308f216607e97e378898521be06"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.14/058e359db7e36aa85493-091.bin","bytes":4194304,"sha256":"0c7493464c2ce887f4370dac0ea89695142164320aaea8f0c6752c395920f1ce"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.14/058e359db7e36aa85493-092.bin","bytes":4194304,"sha256":"abce174ec342f3641382dccdc202b9e6149d48da94c45a8f2baa67ea08af6170"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.14/058e359db7e36aa85493-093.bin","bytes":4194304,"sha256":"218fa70bcc0271f8939e691fd7614031da58b60835c91463b6afe12a3e8c18d9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.14/058e359db7e36aa85493-094.bin","bytes":4194304,"sha256":"e71b8d00e9ae633d8cc8807cab941fb48dc4a2e71c2474b7b7f113101fea6c13"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.14/058e359db7e36aa85493-095.bin","bytes":4194304,"sha256":"96505875cd436f40e96ee226c5ddec4eaaae694fd0d8f4d561eee25d722883d9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.14/058e359db7e36aa85493-096.bin","bytes":4194304,"sha256":"92f4318bb26a0c3c2a499a283483fa811d4a110194e7cf600abb88ce0f0a7504"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.14/058e359db7e36aa85493-097.bin","bytes":4194304,"sha256":"85f3bf12c061d5876822b2fe2f28dd706dc434f1d037fe61587ef7e325e8a612"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.14/058e359db7e36aa85493-098.bin","bytes":4194304,"sha256":"7ea1c89bf9dafd9dd8dc042a2defe8c87b1d64ce715fede7a531454a86d04d68"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.15/058e359db7e36aa85493-099.bin","bytes":4194304,"sha256":"cd3374bf3fceeb35ca7d552bc388ef79c8793f5b8f9201a411ec11ee34d38fb0"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.15/058e359db7e36aa85493-100.bin","bytes":4194304,"sha256":"da280e4054e5bbcc4f7a70dd07e2346d3d587dfa3a9119a4bebd7c02849a2826"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.15/058e359db7e36aa85493-101.bin","bytes":4194304,"sha256":"9b496084b67583b30ca68bfc72848b609d06f48c26f78c037b2fde2be9e48943"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.15/058e359db7e36aa85493-102.bin","bytes":4194304,"sha256":"034bc2db271f098c71ccb4acb5358ac6caa5e87cfb42518240ad2d54cc64a81e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.15/058e359db7e36aa85493-103.bin","bytes":4194304,"sha256":"7d2f02dfc5061983dbd2c4ba13dc4ce82f9f315e995e786ed6d232ac455781c8"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.15/058e359db7e36aa85493-104.bin","bytes":4194304,"sha256":"481497d699b7c36b5ea3679fd53e006eb8874ed3c9751ffb81efa6859cf87f54"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.15/058e359db7e36aa85493-105.bin","bytes":4194304,"sha256":"8dd524f868aeeaeac2c1131f5b59b74fd98fe40dacd1fe3d98cc35a852d07329"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.15/058e359db7e36aa85493-106.bin","bytes":4194304,"sha256":"734b255fafcc01217a96795e7be6bf5e0516155f22a2ce541376ec81b12e7446"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.16/058e359db7e36aa85493-107.bin","bytes":4194304,"sha256":"6b4ce01a28ae6bc5f2930f385c4b9e4ac1c9c039dba38d098d8543996ef79c94"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.16/058e359db7e36aa85493-108.bin","bytes":4194304,"sha256":"83ce4bd82f1a270efa7c5d78307021b7824cfc6998d9024aba419cd9e2767a1e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.16/058e359db7e36aa85493-109.bin","bytes":4194304,"sha256":"30cd092e4b3298656e37c75494f306d6420d73e54e1a9216cea8bf0739f2db37"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.16/058e359db7e36aa85493-110.bin","bytes":4194304,"sha256":"5686a09238c8fc72a6f8df31a3f3f2c01e248089ac9c695fc1dfe4a2bdf25bec"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.16/058e359db7e36aa85493-111.bin","bytes":4194304,"sha256":"bec0ff5df770482d62cda2b81e87691cc288e00033a456bbe81e5fcd305676ba"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.16/058e359db7e36aa85493-112.bin","bytes":4194304,"sha256":"a2c67e77726ef28a704dd8392334198299607a2006be0ba48dac1e8bbc0f8df1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.16/058e359db7e36aa85493-113.bin","bytes":4194304,"sha256":"40af1518b9c9c908f9600b692f7a6439a82f3358959607dcb5e4830f7a6cb930"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.16/058e359db7e36aa85493-114.bin","bytes":2174590,"sha256":"dad0c782bb13cfc14d728547c44d32fa55393ddad99b22defc6b46244d505169"}]},"streaming:LethalVideo/BaboonHawkVideo0001-0109.m4v":{"gzipBytes":975410,"gzipSha256":"3dd15053a5f81f7fc48c161815252d2f4984dd80ad3b477691bdf4db930bc3d6","sourceSha256":"21c52b6e3eba57335de1f955c3a134281031615cad1de7102e5f84b8a5569e45","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.16/3dd15053a5f81f7fc48c-000.bin","bytes":975410,"sha256":"3dd15053a5f81f7fc48c161815252d2f4984dd80ad3b477691bdf4db930bc3d6"}]},"streaming:LethalVideo/BrackenVideo0001-0100.m4v":{"gzipBytes":1115978,"gzipSha256":"6dfa91f3a97f6f0a4ba921fd559f1f84142d4d29cfb16c48feb2ebd108bc2a1a","sourceSha256":"505d856720015ed4e03f59e529275c5995ee64bf1520aec8b40e065ce2f5d9f0","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/6dfa91f3a97f6f0a4ba9-000.bin","bytes":1115978,"sha256":"6dfa91f3a97f6f0a4ba921fd559f1f84142d4d29cfb16c48feb2ebd108bc2a1a"}]},"streaming:LethalVideo/BunkerSpiderVideo0001-0109 1.m4v":{"gzipBytes":1378172,"gzipSha256":"4a183ab8f691e9f366fbfd1d6e18803892cef57b11cdd0433adc192080613ff7","sourceSha256":"e7531bb3ea9384636edcaa67478553c89b2217c227f9f29d891aed2f0cf0f60e","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/4a183ab8f691e9f366fb-000.bin","bytes":1378172,"sha256":"4a183ab8f691e9f366fbfd1d6e18803892cef57b11cdd0433adc192080613ff7"}]},"streaming:LethalVideo/BushWolfVideo0001-0109.m4v":{"gzipBytes":1301188,"gzipSha256":"c17c4d0ff43fb71d9d441254a6d9b18f54ba58a96e72188527acfca3ddae9d07","sourceSha256":"60015d61284ea5889472e2d87aa04a37c595d7d4f6e539091c89d24cf16a7319","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/c17c4d0ff43fb71d9d44-000.bin","bytes":1301188,"sha256":"c17c4d0ff43fb71d9d441254a6d9b18f54ba58a96e72188527acfca3ddae9d07"}]},"streaming:LethalVideo/ButlerVideo0001-0109.m4v":{"gzipBytes":1347685,"gzipSha256":"f2a7f48ca23e620ed2b169ac8084c05e42d82b5e27f480ade1b593680c908a68","sourceSha256":"5541ce5548807539e5a8d9b3ab457ef0948359e6f9a353da914fe657d0b1513a","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/f2a7f48ca23e620ed2b1-000.bin","bytes":1347685,"sha256":"f2a7f48ca23e620ed2b169ac8084c05e42d82b5e27f480ade1b593680c908a68"}]},"streaming:LethalVideo/CadaverBloomVideo0001-0109.m4v":{"gzipBytes":1265657,"gzipSha256":"14bcc95cc3017a2fd4fe760c6052a8d4dd72486c7de1250c6331d8a1fd0ec1a9","sourceSha256":"e427a3a63d129ddd59af7ad4831d416718dd8270b59a2721202c7eda6ec77e0e","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/14bcc95cc3017a2fd4fe-000.bin","bytes":1265657,"sha256":"14bcc95cc3017a2fd4fe760c6052a8d4dd72486c7de1250c6331d8a1fd0ec1a9"}]},"streaming:LethalVideo/CaveDwellerVideo0001-0109.m4v":{"gzipBytes":1316552,"gzipSha256":"195af0527cb7a3e78ee1ca744ce4f7ac9a3e09d0f39a22b9ab19f5ccb2278aa2","sourceSha256":"377e496e4290b40328fdc544760c723395a4ad6bd52a6d82b77972a1bd2d8daa","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/195af0527cb7a3e78ee1-000.bin","bytes":1316552,"sha256":"195af0527cb7a3e78ee1ca744ce4f7ac9a3e09d0f39a22b9ab19f5ccb2278aa2"}]},"streaming:LethalVideo/CoilheadVideo.m4v":{"gzipBytes":978442,"gzipSha256":"95b6a6ac47ea4f539ebeb9b115a59cbb81efbe21ce3b7c7a2ea8401e520d1b81","sourceSha256":"ed24743661c68408044b6e4f325a997aaa41e93bcc561f66a2cf0c05f0c1ea20","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/95b6a6ac47ea4f539ebe-000.bin","bytes":978442,"sha256":"95b6a6ac47ea4f539ebeb9b115a59cbb81efbe21ce3b7c7a2ea8401e520d1b81"}]},"streaming:LethalVideo/FeioparVideo0001-0109.m4v":{"gzipBytes":1325109,"gzipSha256":"219ab555e94ac2651eb70b6165ea9b5931f54011674db0a94a31e62fa3e9582f","sourceSha256":"31c670f775b13bd49dcb3c867a5a18a1bc1ce92a1038cff0035e3fd21714faf7","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/219ab555e94ac2651eb7-000.bin","bytes":1325109,"sha256":"219ab555e94ac2651eb70b6165ea9b5931f54011674db0a94a31e62fa3e9582f"}]},"streaming:LethalVideo/FlowerSnakeVideo0001-0109.m4v":{"gzipBytes":1230407,"gzipSha256":"2eda14b0aeac80fb46e12a413a2bb10dc86aca82369b644d9d897dd42dfb5e4f","sourceSha256":"15ebc8ba32518d22b5c0d4e78afc457bad1326a41b9eb1801357427fc0f3906a","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/2eda14b0aeac80fb46e1-000.bin","bytes":1230407,"sha256":"2eda14b0aeac80fb46e12a413a2bb10dc86aca82369b644d9d897dd42dfb5e4f"}]},"streaming:LethalVideo/ForestKeeperVideo0001-0109.m4v":{"gzipBytes":1354932,"gzipSha256":"57267ab03bb11fb99b751ecf51304388ec05bdcd6ab6e07efadfbaf7e83722f5","sourceSha256":"7245cb45844b87943a93f9244e8d7bb6ca50b371be2a8c4f2bbea981a14db676","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/57267ab03bb11fb99b75-000.bin","bytes":1354932,"sha256":"57267ab03bb11fb99b751ecf51304388ec05bdcd6ab6e07efadfbaf7e83722f5"}]},"streaming:LethalVideo/GiantKiwiVideo0001-0109.m4v":{"gzipBytes":1150885,"gzipSha256":"bad8d3c4e35e36059b924675fba0331c4a00e220734619af5c594f9de85105fb","sourceSha256":"193810b80e35170f637bceadf711b28729bae88e6098c57508755d9ea40d1aaa","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/bad8d3c4e35e36059b92-000.bin","bytes":1150885,"sha256":"bad8d3c4e35e36059b924675fba0331c4a00e220734619af5c594f9de85105fb"}]},"streaming:LethalVideo/HoardingBugVideo0001-0100.m4v":{"gzipBytes":1201512,"gzipSha256":"d8859fa4232b2f29c56a725fcdfc004cc870b57c92c23922d7c242b82c719166","sourceSha256":"dd436ed87077d5b7c0d2016db487a82fa32a61e063be682321382aa9c4323730","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/d8859fa4232b2f29c56a-000.bin","bytes":1201512,"sha256":"d8859fa4232b2f29c56a725fcdfc004cc870b57c92c23922d7c242b82c719166"}]},"streaming:LethalVideo/HygrodereVideo0001-0100.m4v":{"gzipBytes":1279369,"gzipSha256":"c64e2e683f489d6ef30e88420989edc7990278d3bca4eb1ce7a3b5eea60208e3","sourceSha256":"dbf0e0dd66965f732c5858aa4479cd0fd105f5b67223d1f09890be6898e05413","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/c64e2e683f489d6ef30e-000.bin","bytes":1279369,"sha256":"c64e2e683f489d6ef30e88420989edc7990278d3bca4eb1ce7a3b5eea60208e3"}]},"streaming:LethalVideo/JesterVideo0001-0109.m4v":{"gzipBytes":819111,"gzipSha256":"f072fc35a4317177d0ee2bb104ad0c18072d3779f0013261c481717aad16b63d","sourceSha256":"56ab914535e291444254616bb61e0be4fbafdec163dd0445eebbeb3740cd562e","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/f072fc35a4317177d0ee-000.bin","bytes":819111,"sha256":"f072fc35a4317177d0ee2bb104ad0c18072d3779f0013261c481717aad16b63d"}]},"streaming:LethalVideo/KittenChannel.m4v":{"gzipBytes":620559,"gzipSha256":"ba2fd76e397096f97eccf4a1347bf348366428d53bfeffeae8f91f10cb245a0b","sourceSha256":"7e4f8d8723c1d578cbf17c945de3fbb90d79067f2b5ed0a8c14f6d2087d67904","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/ba2fd76e397096f97ecc-000.bin","bytes":620559,"sha256":"ba2fd76e397096f97eccf4a1347bf348366428d53bfeffeae8f91f10cb245a0b"}]},"streaming:LethalVideo/LightningCartoon.m4v":{"gzipBytes":2639682,"gzipSha256":"483b827533133b7caec1b2602871a8940b1b10aacaaefa49f2850640b1c351db","sourceSha256":"0d9a03cc7cf315a87472eb6ff47ec19c36dd13507ba9a4ded3c4567d9890a734","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/483b827533133b7caec1-000.bin","bytes":2639682,"sha256":"483b827533133b7caec1b2602871a8940b1b10aacaaefa49f2850640b1c351db"}]},"streaming:LethalVideo/MapView220Ass.m4v":{"gzipBytes":156159,"gzipSha256":"094454ed151ffaaef37ec8bc97319ea81361a35d06b5652af044bfaea3939a6a","sourceSha256":"c9a9314c96213e919e9033c8187d90ea7fe8947d4486cc13041360ab7152895c","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/094454ed151ffaaef37e-000.bin","bytes":156159,"sha256":"094454ed151ffaaef37ec8bc97319ea81361a35d06b5652af044bfaea3939a6a"}]},"streaming:LethalVideo/MapView41Exp.m4v":{"gzipBytes":164592,"gzipSha256":"5d9da2d947e8beae55d30732b3581c5df71effc672549710e8e1bbec6518fefa","sourceSha256":"b6288de31030dbd1a4d307805f325060d7fc0da342d5217e4ddb60069b163673","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/5d9da2d947e8beae55d3-000.bin","bytes":164592,"sha256":"5d9da2d947e8beae55d30732b3581c5df71effc672549710e8e1bbec6518fefa"}]},"streaming:LethalVideo/MechVideo0001-0109.m4v":{"gzipBytes":1311751,"gzipSha256":"a79de25cfb24df5bbf59a588b7294a16e2f4f79d8fa690090596288f34189038","sourceSha256":"a4a3d34c7f0e6a29d8a6dc5ff5dc4fcf828a9bac2f39abc9899c55caf99dc410","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/a79de25cfb24df5bbf59-000.bin","bytes":1311751,"sha256":"a79de25cfb24df5bbf59a588b7294a16e2f4f79d8fa690090596288f34189038"}]},"streaming:LethalVideo/MouthDogVideo0001-0100.m4v":{"gzipBytes":1258627,"gzipSha256":"5cc0d31963092f3b5d2659bfbbf3978666fc273381104a4b04e2d0a245d07510","sourceSha256":"af120319d8bc5aa073392c2ee520b276e872349243aab94ac8c1d3de7911ecec","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/5cc0d31963092f3b5d26-000.bin","bytes":1258627,"sha256":"5cc0d31963092f3b5d2659bfbbf3978666fc273381104a4b04e2d0a245d07510"}]},"streaming:LethalVideo/NutcrackerVideo0001-0109.m4v":{"gzipBytes":1060483,"gzipSha256":"1b2a4690f8a23f0ff87b33eff9043b2e65d7850ba4f29c12f12f5f54beb4ce0b","sourceSha256":"3cc3a7b1edeb021b7dbf17c3c916116776da6857947aeef3708f316eb25ad9c1","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/1b2a4690f8a23f0ff87b-000.bin","bytes":1060483,"sha256":"1b2a4690f8a23f0ff87b33eff9043b2e65d7850ba4f29c12f12f5f54beb4ce0b"}]},"streaming:LethalVideo/SnareBugVideo0001-0100.m4v":{"gzipBytes":1301591,"gzipSha256":"7cd78ff8894391cb0deac1b1016fac55b613879dcd611b17747217b194d1d957","sourceSha256":"20fe7680910cda9d8f258aca451ebd197d688e3671f8e1f3ee588c36eb8c3a98","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/7cd78ff8894391cb0dea-000.bin","bytes":1301591,"sha256":"7cd78ff8894391cb0deac1b1016fac55b613879dcd611b17747217b194d1d957"}]},"streaming:LethalVideo/SnareFleaTipChannel2.m4v":{"gzipBytes":2763929,"gzipSha256":"51559da0e4cc56c7897cd21d2fe3312da3668cb47f2698156092b87306d8aba2","sourceSha256":"6f11d7a26c1add39846bd60bed1577eb481fd50e1c374bef0ead38bb48bd63cf","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/51559da0e4cc56c7897c-000.bin","bytes":2763929,"sha256":"51559da0e4cc56c7897cd21d2fe3312da3668cb47f2698156092b87306d8aba2"}]},"streaming:LethalVideo/StingrayVideo0001-0109.m4v":{"gzipBytes":917216,"gzipSha256":"782de02f5be2f9798ba172690010b80e8c2945779ae2af046e8a03681c0e2079","sourceSha256":"508dc09332d724a61e4a9e1072f6168ad5b85d1738c8d3dce6cc1ec89938b694","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/782de02f5be2f9798ba1-000.bin","bytes":917216,"sha256":"782de02f5be2f9798ba172690010b80e8c2945779ae2af046e8a03681c0e2079"}]},"streaming:LethalVideo/ThumperVideo.m4v":{"gzipBytes":1211521,"gzipSha256":"9473cd4bc6adda15de361106bc89941eb93a2d0339fc1a3c9aee34e3cc311895","sourceSha256":"ec482c5e1ea3a9127f972b1b76c449a60a80e5d58971b4fad484d57d903ab9c8","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/9473cd4bc6adda15de36-000.bin","bytes":1211521,"sha256":"9473cd4bc6adda15de361106bc89941eb93a2d0339fc1a3c9aee34e3cc311895"}]},"streaming:UnityServicesProjectConfiguration.json":{"gzipBytes":405,"gzipSha256":"25b11857181694127280fb8ef14183e6aaa25159595333bc8f3603bcc8408df6","sourceSha256":"9197fef04d58e1acdbef5c0b5d0e59461c661bbc9781e86773bae52e41e188f1","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/25b11857181694127280-000.bin","bytes":405,"sha256":"25b11857181694127280fb8ef14183e6aaa25159595333bc8f3603bcc8408df6"}]},"relayScript":{"gzipBytes":4271,"gzipSha256":"1faadf5aa05ec6c7db15ffcfebd2ad18f73f0755727b41042edf30f1646f9213","sourceSha256":"0e5ecb965dfac22ada5f2b4f0b5d6ed2b390c2586649358355c93f1431af7f23","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.17/1faadf5aa05ec6c7db15-000.bin","bytes":4271,"sha256":"1faadf5aa05ec6c7db15ffcfebd2ad18f73f0755727b41042edf30f1646f9213"}]},"serverBundle":{"gzipBytes":31114729,"gzipSha256":"92542b771810ccab820d650b71783516803500ea502bd700a23c7ebb9cbade57","sourceSha256":"82c8fa65c2cd6355cb9221e918e4d73209e6cff7f06eddca488477d21474ffed","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.18/92542b771810ccab820d-000.bin","bytes":4194304,"sha256":"49ff37b8d3b6670b21e204a35e0a9c0c667ec59674e1811d16141f23a9eecbee"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.18/92542b771810ccab820d-001.bin","bytes":4194304,"sha256":"74a62119283fa092a910a4febe251004693e78440e03538f01eb437c20f8e3b5"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.18/92542b771810ccab820d-002.bin","bytes":4194304,"sha256":"05088e232033952a0d5214a85f39d4f937d1675216341d2813b045f08ba9bbfd"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.18/92542b771810ccab820d-003.bin","bytes":4194304,"sha256":"a0b870a7ad10d32beec9b0e08f3068b4b7ca41475a36acaf631a5f3fe4e7c3f7"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.18/92542b771810ccab820d-004.bin","bytes":4194304,"sha256":"cd0a2709da940b0f9be582d6c0c93cbd83f5e6b5924ba257cf94e9eff716d034"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.18/92542b771810ccab820d-005.bin","bytes":4194304,"sha256":"b7e57baa58a8a98bf871dcdc20196a0995c477bd68d0f080646171ae86b5e27f"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.18/92542b771810ccab820d-006.bin","bytes":4194304,"sha256":"313d708e298c6537915b6762beb35f6ce14ffcebb358b583bf343a164796c3f6"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.0-data.18/92542b771810ccab820d-007.bin","bytes":1754601,"sha256":"e74f548c32503c6bd51334f51c6253ff65afecad721009eee866960bb0776453"}]}};</script>
20
+ <script>/* Mono PCM voice over the existing authenticated game relay; no external services. */
21
+ window.LethalVoice = class LethalVoice {
22
+ constructor(bridge) {
23
+ this.bridge=bridge; this.peers=new Map(); this.enabled=false; this.muted=false;
24
+ this.ptt=false; this.held=false; this.available=false; this.generation=0;
25
+ this.stats={sent:0,received:0,played:0,dropped:0};
26
+ this.button=document.querySelector('#voice-enable');
27
+ this.label=document.querySelector('#voice-state');
28
+ this.button.onclick=()=>this.enabled?this.setMuted(!this.muted):this.enable();
29
+ document.querySelector('#voice-mode').onchange=e=>{this.ptt=e.target.value==='push';this.held=false;if(this.enabled)this.setMuted(this.muted);else this.updateGate()};
30
+ document.querySelector('#voice-volume').oninput=e=>{if(this.master)this.master.gain.value=Number(e.target.value)};
31
+ document.querySelector('#voice-stop').onclick=()=>this.stop();
32
+ document.querySelector('#voice-button').onclick=()=>{
33
+ document.exitPointerLock?.(); document.querySelector('#voice-panel').classList.toggle('open');
34
+ this.context?.resume().catch(()=>{});
35
+ };
36
+ document.querySelector('#voice-close').onclick=()=>document.querySelector('#voice-panel').classList.remove('open');
37
+ const hold=document.querySelector('#voice-hold');
38
+ hold.onpointerdown=e=>{e.preventDefault();hold.setPointerCapture(e.pointerId);this.held=true;this.updateGate()};
39
+ hold.onpointerup=hold.onpointercancel=()=>{this.held=false;this.updateGate()};
40
+ window.addEventListener('keydown',e=>{if(e.code==='KeyV'&&!/INPUT|SELECT|TEXTAREA/.test(e.target.tagName)){this.held=true;this.updateGate()}});
41
+ window.addEventListener('keyup',e=>{if(e.code==='KeyV'){this.held=false;this.updateGate()}});
42
+ window.addEventListener('blur',()=>{this.held=false;this.updateGate()});
43
+ document.addEventListener('visibilitychange',()=>{this.held=false;this.updateGate();if(!document.hidden)this.context?.resume().catch(()=>{})});
44
+ window.addEventListener('pagehide',()=>this.stop());
45
+ }
46
+ status(text){this.label.textContent=text}
47
+ connected(message){
48
+ this.available=message.voice===true;
49
+ this.localId=message.id;
50
+ this.status(this.available?'Voice ready. Enable your microphone to talk and hear your crew.':'This relay needs the updated voice server.');
51
+ }
52
+ async enable(){
53
+ if(this.busy)return;
54
+ if(!this.available){this.status('Join a room using the updated laptop server first.');return}
55
+ if(!window.isSecureContext||!navigator.mediaDevices?.getUserMedia){this.status('Microphone access needs HTTPS or localhost. Open the secure game link.');return}
56
+ this.busy=true; const generation=++this.generation;
57
+ this.status('Allow microphone access when your browser asks.');
58
+ try{
59
+ const Context=window.AudioContext||window.webkitAudioContext;
60
+ const context=this.context=new Context({latencyHint:'interactive'});
61
+ const master=this.master=context.createGain();master.gain.value=Number(document.querySelector('#voice-volume').value);master.connect(context.destination);
62
+ await context.resume();
63
+ const stream=await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:true,noiseSuppression:true,autoGainControl:true},video:false});
64
+ if(generation!==this.generation){stream.getTracks().forEach(t=>t.stop());return}
65
+ this.stream=stream;
66
+ const worklet=`class CrewCapture extends AudioWorkletProcessor {
67
+ constructor(){super();this.on=false;this.phase=0;this.sum=0;this.count=0;this.index=0;this.power=0;this.bytes=new ArrayBuffer(1280);this.view=new DataView(this.bytes);this.port.onmessage=e=>{this.on=e.data.active;this.index=0;this.power=0;this.phase=0;this.sum=0;this.count=0}}
68
+ process(inputs){const a=inputs[0]?.[0];if(!a||!this.on)return true;
69
+ for(let i=0;i<a.length;i++){this.sum+=a[i];this.count++;this.phase+=16000;if(this.phase>=sampleRate){this.phase-=sampleRate;const v=Math.max(-1,Math.min(1,this.sum/this.count));this.sum=0;this.count=0;this.view.setInt16(this.index*2,Math.round(v*(v<0?32768:32767)),true);this.power+=v*v;
70
+ if(++this.index===640){this.port.postMessage({pcm:this.bytes,rms:Math.sqrt(this.power/640),at:currentTime},[this.bytes]);this.bytes=new ArrayBuffer(1280);this.view=new DataView(this.bytes);this.index=0;this.power=0}}}return true}}
71
+ registerProcessor('crew-capture',CrewCapture);`;
72
+ const url=URL.createObjectURL(new Blob([worklet],{type:'text/javascript'}));
73
+ try{await context.audioWorklet.addModule(url)}finally{URL.revokeObjectURL(url)}
74
+ if(generation!==this.generation)return;
75
+ this.capture=new AudioWorkletNode(context,'crew-capture');
76
+ this.capture.port.onmessage=e=>this.transmit(e.data);
77
+ this.source=context.createMediaStreamSource(stream);this.source.connect(this.capture);
78
+ this.silent=context.createGain();this.silent.gain.value=0;this.capture.connect(this.silent).connect(context.destination);
79
+ stream.getAudioTracks()[0].onended=()=>{this.stop();this.status('Microphone disconnected. Enable voice again to reconnect.')};
80
+ await context.resume();
81
+ this.enabled=true;this.muted=false;
82
+ context.onstatechange=()=>{if(this.enabled&&context.state!=='running')this.status('Voice audio paused. Tap Voice to resume audio.')}
83
+ this.poll=setInterval(()=>{this.bridge.probe();this.spatial();this.updateGate()},150);
84
+ this.setMuted(false);
85
+ }catch(error){
86
+ if(generation===this.generation){this.stop();this.status(error.name==='NotAllowedError'?'Microphone permission was denied. Allow it in the browser’s site settings, then enable voice again.':'Voice could not start: '+error.message)}
87
+ }finally{this.busy=false}
88
+ }
89
+ setMuted(value){this.muted=value;this.updateGate();this.button.textContent=value?'Unmute microphone':'Mute microphone';this.status(value?'Microphone muted. You can still hear the crew.':this.ptt?'Voice on. Hold V or the Talk button to speak.':'Voice on. Your crew can hear you nearby.');document.querySelector('#voice-button').textContent=value?'Voice: muted':'Voice: on'}
90
+ updateGate(){
91
+ const active=this.enabled&&!this.muted&&!document.hidden&&(!this.ptt||this.held);
92
+ if(this.stream)this.stream.getAudioTracks().forEach(track=>track.enabled=active);
93
+ if(this.gate!==active){this.gate=active;this.capture?.port.postMessage({active})}
94
+ document.querySelector('#voice-hold').hidden=!this.enabled||!this.ptt;
95
+ }
96
+ transmit({pcm,rms,at}){
97
+ const socket=this.bridge.socket(),probe=this.bridge.state();
98
+ if(typeof at==='number'&&this.context&&this.context.currentTime-at>.25){this.stats.dropped++;return}
99
+ if(!this.gate||!this.available||socket?.readyState!==1||!(probe?.controlled||probe?.dead)||rms<.004)return;
100
+ if(socket.bufferedAmount>32768){this.stats.dropped++;return}
101
+ const bytes=new Uint8Array(pcm);let raw='';for(const byte of bytes)raw+=String.fromCharCode(byte);
102
+ socket.send(JSON.stringify({type:'voice',playerId:probe.localClientId??this.localId,payload:btoa(raw)}));this.stats.sent++;
103
+ if(!probe.dead&&performance.now()-(this.noiseAt||0)>350){this.noiseAt=performance.now();this.bridge.level(rms)}
104
+ }
105
+ receive(message){
106
+ if(!this.enabled||!this.context||message.id===this.localId)return;
107
+ let raw;try{raw=atob(message.payload)}catch{return}
108
+ if(raw.length!==1280)return;
109
+ this.stats.received++;
110
+ let peer=this.peers.get(message.id);
111
+ if(!peer){
112
+ const gain=this.context.createGain(),pan=this.context.createStereoPanner(),filter=this.context.createBiquadFilter();
113
+ gain.gain.value=0;filter.type='lowpass';filter.frequency.value=8000;
114
+ filter.connect(gain).connect(pan).connect(this.master);
115
+ peer={gain,pan,filter,next:0,sources:new Set()};this.peers.set(message.id,peer);
116
+ }
117
+ peer.playerId=message.playerId??message.id;
118
+ this.spatial();
119
+ const now=this.context.currentTime;
120
+ if(this.context.state!=='running'||peer.next>now+.28){this.stats.dropped++;return}
121
+ const buffer=this.context.createBuffer(1,640,16000),samples=buffer.getChannelData(0);
122
+ for(let i=0;i<640;i++){let value=raw.charCodeAt(i*2)|(raw.charCodeAt(i*2+1)<<8);if(value&32768)value-=65536;samples[i]=value/32768}
123
+ const source=this.context.createBufferSource();source.buffer=buffer;source.connect(peer.filter);
124
+ peer.sources.add(source);source.onended=()=>{peer.sources.delete(source);source.disconnect()};
125
+ const start=Math.max(now+.075,peer.next);source.start(start);peer.next=start+.04;this.stats.played++;
126
+ }
127
+ spatial(){
128
+ const p=this.bridge.state();if(!p||!this.context)return;
129
+ const ids=p.playerClientIds||[],local=ids.findIndex(id=>id===(p.localClientId??this.localId)),now=this.context.currentTime;
130
+ for(const [id,peer] of this.peers){
131
+ const i=ids.findIndex(value=>value===(peer.playerId??id));let gain=0,pan=0,radio=false,muffled=false;
132
+ if(i>=0&&local>=0&&(p.playerControlled?.[i]||p.playerDead?.[i])){
133
+ const dead=p.playerDead?.[i],localDead=p.playerDead?.[local];
134
+ if(localDead)gain=1;
135
+ else if(!dead){
136
+ const a=p.position,b=p.playerPositions?.[i];
137
+ if(a&&b){const dx=b.x-a.x,dz=b.z-a.z,dy=b.y-a.y,distance=Math.hypot(dx,dy,dz),yaw=(p.look?.y||0)*Math.PI/180;
138
+ const proximity=Math.pow(Math.max(0,1-Math.max(0,distance-2)/25),1.5);
139
+ radio=!!p.playerRadio?.[local]&&!!p.playerRadioSpeaking?.[i]&&proximity<.6;
140
+ muffled=!radio&&(!!p.playerOccluded?.[i]||p.playerInside?.[i]!==p.playerInside?.[local]);
141
+ gain=radio ? .65 : proximity*(muffled ? .4 : 1);pan=radio?0:Math.max(-1,Math.min(1,(dx*Math.cos(yaw)-dz*Math.sin(yaw))/Math.max(1,distance)));
142
+ }
143
+ }
144
+ }
145
+ peer.gain.gain.setTargetAtTime(gain,now,.03);peer.pan.pan.setTargetAtTime(pan,now,.03);peer.filter.frequency.setTargetAtTime(radio?2800:muffled?1200:8000,now,.03);
146
+ }
147
+ }
148
+ remove(id){const peer=this.peers.get(id);if(!peer)return;for(const source of peer.sources){try{source.stop()}catch{}source.disconnect()}peer.filter.disconnect();peer.gain.disconnect();peer.pan.disconnect();this.peers.delete(id)}
149
+ stop(){
150
+ ++this.generation;this.enabled=false;this.gate=false;clearInterval(this.poll);
151
+ if(this.stream)for(const track of this.stream.getTracks()){track.onended=null;track.stop()}
152
+ this.stream=null;this.capture?.disconnect();this.source?.disconnect();this.silent?.disconnect();
153
+ if(this.capture){this.capture.port.onmessage=null;this.capture.port.close()}
154
+ for(const id of this.peers.keys())this.remove(id);
155
+ this.context?.close().catch(()=>{});this.context=null;this.capture=null;this.source=null;this.silent=null;
156
+ this.button.textContent='Enable voice';document.querySelector('#voice-button').textContent='Voice';document.querySelector('#voice-hold').hidden=true;this.status('Voice off. Microphone released.');
157
+ }
158
+ disconnected(){this.available=false;this.stop()}
159
+ };
160
+ </script>
161
+ <script>
162
+ "use strict";
163
+ if(window.packedMode==='range')window.stop();
164
+ const canvas=document.querySelector('#unity-canvas'), status=document.querySelector('#load-status'), progress=document.querySelector('#load-progress');
165
+ const state={moveX:0,moveY:0,lookX:0,lookY:0,buttons:0};
166
+ const assets={};let instance=null,touch=matchMedia('(pointer:coarse)').matches,playing=false,localSource=null;
167
+ const debug=window.lethalDebug={errors:[],logs:[],firstErrors:[],counts:Object.create(null)};
168
+ for(const kind of ['log','warn','error']){const original=console[kind].bind(console);console[kind]=(...args)=>{const message=args.map(String).join(' ').slice(0,2400),key=kind+':'+message;debug.counts[key]=(debug.counts[key]||0)+1;if(debug.counts[key]===1){const list=kind==='error'?debug.errors:debug.logs;list.push(message);if(list.length>120)list.shift();if(kind==='error'&&debug.firstErrors.length<40)debug.firstErrors.push(message)}original(...args)}}
169
+ window.addEventListener('error',e=>console.error(e.error?.stack||e.message));
170
+ window.addEventListener('unhandledrejection',e=>console.error(e.reason?.stack||e.reason));
171
+ function runtimeError(message){console.error(message);document.querySelector('#runtime-error-text').textContent=String(message);document.querySelector('#runtime-error').hidden=false;return true}
172
+ function resetTouch(){Object.assign(state,{moveX:0,moveY:0,lookX:0,lookY:0,buttons:0});document.querySelector('#move-stick').style.transform='';document.querySelectorAll('.pressed').forEach(button=>button.classList.remove('pressed'));if(touch)send('TouchState',state)}
173
+ function touchMode(value){if(!value||!playing)resetTouch();touch=value;if(value||!playing)document.querySelector('#pointer-hint').hidden=true;document.body.classList.toggle('touch',value);document.querySelector('#touch-ui').classList.toggle('active',value&&playing)}
174
+ touchMode(touch);
175
+ function configurePointerLock(){
176
+ const nativeRequest=canvas.requestPointerLock?.bind(canvas);
177
+ if(!nativeRequest)return;
178
+ const hint=document.querySelector('#pointer-hint');
179
+ function denied(){hint.hidden=touch||!playing}
180
+ canvas.requestPointerLock=(...args)=>{
181
+ if(touch||document.querySelector('#session').classList.contains('open')||document.querySelector('#voice-panel').classList.contains('open'))return Promise.resolve();
182
+ try{return Promise.resolve(nativeRequest(...args)).catch(denied)}catch(error){denied();return Promise.resolve()}
183
+ };
184
+ canvas.addEventListener('pointerdown',()=>{if(playing&&!touch&&document.pointerLockElement!==canvas)canvas.requestPointerLock()});
185
+ document.addEventListener('pointerlockchange',()=>{hint.hidden=document.pointerLockElement===canvas||touch||!playing});
186
+ }
187
+ configurePointerLock();
188
+ document.querySelector('#touch-toggle').onclick=()=>touchMode(!touch);
189
+ document.querySelector('#fullscreen').onclick=()=>{canvas.requestFullscreen?.().catch(()=>{});screen.orientation?.lock?.('landscape').catch(()=>{})};
190
+ document.querySelector('#session-button').onclick=()=>{resetTouch();document.exitPointerLock?.();document.querySelector('#session').classList.add('open')};
191
+ document.querySelector('#session-close').onclick=()=>document.querySelector('#session').classList.remove('open');
192
+ document.querySelector('#session-form').onsubmit=e=>e.preventDefault();
193
+ document.querySelector('#server-download').onclick=()=>{const link=document.createElement('a');link.href=assets.serverBundle||assets.relayScript;link.download=assets.serverBundle?'LaptopServer.zip':'server.py';link.click()};
194
+ document.querySelector('#relay').value=window.packedMode==='cdn'?'':location.protocol==='https:'?'wss://'+location.host+'/relay':location.protocol==='http:'?'ws://'+location.host+'/relay':'ws://localhost:8000/relay';
195
+ if(window.packedMode==='cdn')document.querySelector('#connection-state').textContent='Multiplayer needs a hosted relay address. Use the game’s Host menu for solo play.';
196
+ const inviteParams=new URLSearchParams(location.search);
197
+ if(inviteParams.get('relay'))document.querySelector('#relay').value=inviteParams.get('relay');
198
+ const roomFromLink=inviteParams.get('room');
199
+ document.querySelector('#room').value=roomFromLink&&/^[A-Za-z0-9_-]{1,24}$/.test(roomFromLink)?roomFromLink:Array.from(crypto.getRandomValues(new Uint8Array(6)),b=>b.toString(16).padStart(2,'0')).join('');
200
+ function relayAddress(value){const address=new URL(value);if(address.protocol==='https:')address.protocol='wss:';else if(address.protocol==='http:')address.protocol='ws:';if(!['ws:','wss:'].includes(address.protocol))throw new Error('Enter the relay’s HTTPS or WSS address.');if(address.pathname==='/')address.pathname='/relay';return address.href}
201
+ document.querySelector('#invite-copy').onclick=async()=>{
202
+ try{const url=new URL(window.packedMode==='range'&&location.protocol==='https:'?location.href:'https://unpkg.com/@darkshadow2900/lethal-company-web@latest/index.html');url.search='';url.hash='';url.searchParams.set('relay',relayAddress(document.querySelector('#relay').value.trim()));url.searchParams.set('room',document.querySelector('#room').value.trim());const input=document.querySelector('#invite-link');input.hidden=false;input.value=url.href;input.select();try{await navigator.clipboard.writeText(url.href);document.querySelector('#connection-state').textContent='Invite copied. Keep the laptop relay running.'}catch{document.querySelector('#connection-state').textContent='Copy the invite link below.'}}catch(error){document.querySelector('#connection-state').textContent=error.message}
203
+ };
204
+ function send(method,value){if(instance)instance.SendMessage('BrowserBridge',method,typeof value==='string'?value:JSON.stringify(value))}
205
+ for(const [id,method] of [['host','Host'],['join','Join']])document.querySelector('#'+id).onclick=()=>{
206
+ try{
207
+ const url=relayAddress(document.querySelector('#relay').value.trim()),room=document.querySelector('#room').value.trim();
208
+ const address=new URL(url);
209
+ if(!['ws:','wss:'].includes(address.protocol))throw new Error('Enter a ws:// or wss:// relay address.');
210
+ if(!/^[A-Za-z0-9_-]{1,24}$/.test(room))throw new Error('Use 1–24 letters, numbers, underscores or hyphens for the room code.');
211
+ document.querySelector('#connection-state').textContent=method==='Host'?'Starting host…':'Connecting…';
212
+ send(method,{url,room,name:document.querySelector('#player-name').value});
213
+ }catch(error){document.querySelector('#connection-state').textContent=String(error.message||error)}
214
+ };
215
+ window.lethalWeb={
216
+ socket:null, receiver:'BrowserBridge',
217
+ connect(url,room,host,receiver){
218
+ this.receiver=receiver;this.isHost=host;this.room=room;this.hostAnnounced=false;voice.disconnected();clearInterval(this.heartbeat);if(this.socket)this.socket.close();const address=new URL(url);
219
+ address.searchParams.set('room',room);address.searchParams.set('role',host?'host':'client');
220
+ if(host)address.searchParams.set('wait_ready','1');
221
+ const socket=this.socket=new WebSocket(address);
222
+ this.heartbeat=setInterval(()=>{if(this.socket===socket&&socket.readyState===WebSocket.OPEN)socket.send(JSON.stringify({type:'ping'}))},20000);
223
+ socket.onopen=()=>{if(this.socket===socket)this.announceHostReady()};
224
+ socket.onmessage=e=>{if(this.socket!==socket)return;let message;try{message=JSON.parse(e.data)}catch{return}if(message.type==='voice'){voice.receive(message);return}if(message.type==='voice_leave'){voice.remove(message.id);return}if(message.type==='ready')voice.connected(message);if(message.type==='error')document.querySelector('#session').classList.add('open');send('RelayEvent',e.data)};
225
+ socket.onerror=()=>{if(this.socket!==socket)return;document.querySelector('#session').classList.add('open');document.querySelector('#connection-state').textContent='Cannot connect to the relay server.';send('RelayEvent',JSON.stringify({type:'error',message:'Cannot connect to relay'}))};
226
+ socket.onclose=()=>{if(this.socket===socket){voice.disconnected();clearInterval(this.heartbeat);document.querySelector('#session').classList.add('open');send('RelayEvent',JSON.stringify({type:'closed'}))}};
227
+ },
228
+ transmit(message){if(this.socket?.readyState===WebSocket.OPEN)this.socket.send(message)},
229
+ announceHostReady(){if(this.isHost&&!this.hostAnnounced&&playing&&this.socket?.readyState===WebSocket.OPEN){this.hostAnnounced=true;this.socket.send(JSON.stringify({type:'host_ready'}));this.status('Hosting room '+this.room)}},
230
+ close(){voice.disconnected();clearInterval(this.heartbeat);this.socket?.close();this.socket=null},
231
+ status(message){if(message.startsWith('Hosting room ')&&!this.hostAnnounced){document.querySelector('#connection-state').textContent='Starting room… wait until you are aboard the ship.';return}document.querySelector('#connection-state').textContent=message;if(message.startsWith('Hosting room ')||message.startsWith('Connected to room ')){document.querySelector('#session').classList.remove('open');canvas.focus()}},
232
+ gameplay(active){playing=active;if(active){this.announceHostReady();document.querySelector('#session').classList.remove('open')}touchMode(touch)},
233
+ asset(path){const normalized=path.replace(/^.*?StreamingAssets\//,'');return assets['streaming:'+normalized]||path}
234
+ };
235
+ const voice=window.lethalVoice=new window.LethalVoice({socket:()=>window.lethalWeb.socket,state:()=>window.gameProbe,probe:()=>send('Probe',''),level:value=>send('VoiceLevel',String(value))});
236
+ const move=document.querySelector('#move-pad'),stick=document.querySelector('#move-stick');let movePointer=null,lookPointer=null,lookLast=null;
237
+ function movement(e){const r=move.getBoundingClientRect(),radius=r.width*.36,dx=e.clientX-r.left-r.width/2,dy=e.clientY-r.top-r.height/2;
238
+ const length=Math.max(radius,Math.hypot(dx,dy));state.moveX=dx/length;state.moveY=-dy/length;stick.style.transform=`translate(${state.moveX*radius}px,${-state.moveY*radius}px)`}
239
+ move.onpointerdown=e=>{e.preventDefault();movePointer=e.pointerId;move.setPointerCapture(e.pointerId);movement(e)};
240
+ move.onpointermove=e=>{if(e.pointerId===movePointer)movement(e)};
241
+ move.onpointerup=move.onpointercancel=e=>{if(e.pointerId===movePointer){movePointer=null;state.moveX=state.moveY=0;stick.style.transform=''}};
242
+ const look=document.querySelector('#look-pad');look.onpointerdown=e=>{e.preventDefault();lookPointer=e.pointerId;lookLast=[e.clientX,e.clientY];look.setPointerCapture(e.pointerId)};
243
+ look.onpointermove=e=>{if(e.pointerId===lookPointer&&lookLast){state.lookX+=(e.clientX-lookLast[0])*3;state.lookY-=(e.clientY-lookLast[1])*3;lookLast=[e.clientX,e.clientY]}};
244
+ look.onpointerup=look.onpointercancel=e=>{if(e.pointerId===lookPointer){lookPointer=null;lookLast=null}};
245
+ document.querySelectorAll('[data-button]').forEach(button=>{
246
+ const flag=+button.dataset.button;
247
+ button.onpointerdown=e=>{e.preventDefault();button.setPointerCapture(e.pointerId);state.buttons|=flag;button.classList.add('pressed')};
248
+ button.onpointerup=button.onpointercancel=e=>{state.buttons&=~flag;button.classList.remove('pressed')};
249
+ });
250
+ window.addEventListener('blur',resetTouch);
251
+ document.addEventListener('visibilitychange',()=>{if(document.hidden)resetTouch()});
252
+ function tick(){if(touch&&instance){send('TouchState',state);state.lookX=state.lookY=0}requestAnimationFrame(tick)}requestAnimationFrame(tick);
253
+ async function unpack(key,metadata){
254
+ let position=0,partIndex=0,sourceError=null;
255
+ const compressed=new ReadableStream({async pull(controller){
256
+ if(metadata.parts){
257
+ if(partIndex===metadata.parts.length){controller.close();return}
258
+ try{
259
+ const part=metadata.parts[partIndex++],response=await fetch(part.url);
260
+ if(!response.ok)throw new Error('Cannot download '+key+' (HTTP '+response.status+').');
261
+ const bytes=new Uint8Array(await response.arrayBuffer());
262
+ if(bytes.length!==part.bytes)throw new Error('Incomplete download for '+key+'. Reload to retry.');
263
+ const digest=Array.from(new Uint8Array(await crypto.subtle.digest('SHA-256',bytes)),b=>b.toString(16).padStart(2,'0')).join('');
264
+ if(digest!==part.sha256)throw new Error('Download checksum failed for '+key+'. Reload to retry.');
265
+ position+=bytes.length;status.textContent='Loading '+key+'… '+Math.round(position/metadata.gzipBytes*100)+'%';
266
+ controller.enqueue(bytes);
267
+ }catch(error){sourceError=error;controller.error(error)}
268
+ return;
269
+ }
270
+ if(position===metadata.base64Bytes){controller.close();return}
271
+ try{
272
+ const length=Math.min(4*1024*1024,metadata.base64Bytes-position),start=metadata.offset+position;
273
+ let encoded;
274
+ if(localSource)encoded=await localSource.slice(start,start+length).text();
275
+ else{const response=await fetch(location.href,{headers:{Range:`bytes=${start}-${start+length-1}`}});if(response.status!==206)throw new Error('This server cannot read sections of the game file. Use the supplied laptop server.');encoded=await response.text()}
276
+ const raw=atob(encoded),bytes=new Uint8Array(raw.length);for(let n=0;n<raw.length;n++)bytes[n]=raw.charCodeAt(n);
277
+ position+=length;status.textContent='Unpacking '+key+'… '+Math.round(position/metadata.base64Bytes*100)+'%';controller.enqueue(bytes);
278
+ }catch(error){sourceError=error;controller.error(error)}
279
+ }});
280
+ const mime=key==='wasm'?'application/wasm':key==='loader'||key==='framework'?'text/javascript':/\.(mp4|m4v)$/i.test(key)?'video/mp4':'application/octet-stream';
281
+ let decoded;
282
+ try{decoded=await new Response(compressed.pipeThrough(new DecompressionStream('gzip'))).blob()}
283
+ catch(error){throw sourceError||error}
284
+ return URL.createObjectURL(new Blob([decoded],{type:mime}));
285
+ }
286
+ document.querySelector('#start').onclick=async()=>{
287
+ document.querySelector('#start').hidden=true;
288
+ try{
289
+ if(!window.DecompressionStream)throw new Error('This browser needs a newer version to unpack this game.');
290
+ if(window.packedMode==='range'&&location.protocol==='file:'&&!localSource){
291
+ status.textContent='Select this same HTML file so the browser can read its game data.';
292
+ localSource=await new Promise((resolve,reject)=>{const picker=document.createElement('input');picker.type='file';picker.accept='.html';picker.onchange=()=>picker.files.length?resolve(picker.files[0]):reject(new Error('Choose the game HTML file.'));picker.oncancel=()=>reject(new Error('No game file selected.'));picker.click()});
293
+ if(localSource.size!==window.packedFileBytes)throw new Error('Choose this game’s HTML file. The selected file has a different size.');
294
+ }
295
+ const entries=Object.entries(window.packedManifest);let count=0;
296
+ for(const [key,metadata]of entries){status.textContent='Unpacking game… '+Math.round(count/entries.length*100)+'%';assets[key]=await unpack(key,metadata);progress.value=++count/entries.length*.4}
297
+ window.packedManifest=null;
298
+ const originalFetch=window.fetch.bind(window);
299
+ window.fetch=(input,options)=>{const url=typeof input==='string'?input:input instanceof URL?input.href:input.url;const mapped=window.lethalWeb.asset(url);return originalFetch(mapped===url?input:mapped,options)};
300
+ await new Promise((resolve,reject)=>{const script=document.createElement('script');script.src=assets.loader;script.onload=resolve;script.onerror=reject;document.body.append(script)});
301
+ status.textContent='Starting game…';
302
+ instance=window.unityInstance=await createUnityInstance(canvas,{dataUrl:assets.data,frameworkUrl:assets.framework,codeUrl:assets.wasm,streamingAssetsUrl:'StreamingAssets',companyName:'LocalExperiments',productName:'Lethal Company Web Port',productVersion:'0.1',matchWebGLToCanvasSize:true,autoSyncPersistentDataPath:true,errorHandler:runtimeError,devicePixelRatio:Math.min(devicePixelRatio,2)},value=>progress.value=.4+value*.6);
303
+ for(const key of ['wasm','data']){URL.revokeObjectURL(assets[key]);delete assets[key]}
304
+ document.querySelector('#loading').hidden=true;canvas.focus();
305
+ if(inviteParams.get('relay')){const invitePoll=setInterval(()=>{if(!instance){clearInterval(invitePoll);return}instance.SendMessage('BrowserBridge','Probe','');if(window.gameProbe?.scene==='MainMenu'){clearInterval(invitePoll);document.querySelector('#session').classList.add('open')}},1000)}
306
+ }catch(error){console.error(error);status.textContent='Game could not start';document.querySelector('#load-error').textContent=String(error?.message||error);const retry=document.querySelector('#start');retry.hidden=false;retry.textContent='Reload and retry';retry.onclick=()=>location.reload()}
307
+ };
308
+ </script>
309
+ </html>
310
+
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@darkshadow2900/lethal-company-web",
3
- "version": "0.1.0-data.9",
3
+ "version": "0.1.0",
4
4
  "license": "UNLICENSED",
5
- "description": "Pinned data for the Lethal Company browser experiment.",
5
+ "unpkg": "index.html",
6
+ "description": "Lethal Company browser port experiment.",
6
7
  "files": [
7
- "*.bin"
8
+ "index.html"
8
9
  ],
9
10
  "publishConfig": {
10
11
  "access": "public"
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file