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

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":11139,"gzipSha256":"a9fc365faba431fb2a15a5818ce64e70fb2bc82dcbec8b935f2c4436caa7a286","sourceSha256":"8b3f72ecf56e4d6440c989f9f20def57efc0f303d57d17fa1df216c25ba3f743","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.1/a9fc365faba431fb2a15-000.bin","bytes":11139,"sha256":"a9fc365faba431fb2a15a5818ce64e70fb2bc82dcbec8b935f2c4436caa7a286"}]},"framework":{"gzipBytes":202072,"gzipSha256":"98e0351802b33047cbf96c779a848a32a162a28f400896a59d9631473735c6de","sourceSha256":"6b2768149d0e8ee6a13591c119fdea46850e186de20f9596ada1fd82a340f3d2","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.1/98e0351802b33047cbf9-000.bin","bytes":202072,"sha256":"98e0351802b33047cbf96c779a848a32a162a28f400896a59d9631473735c6de"}]},"wasm":{"gzipBytes":46466878,"gzipSha256":"76a3f065f02ef88208114fbd2492f679d0575bd343dbe359bd08be44720121fd","sourceSha256":"40f4eca394fc60550cdafb8b1d6aef5061b350252dfb7afc0894b0976d722771","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.1/76a3f065f02ef8820811-000.bin","bytes":4194304,"sha256":"81312c9d9cc03ae361c2eb4f5d52fff137fc2b779438bb5bb062d1566e67e0b6"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.1/76a3f065f02ef8820811-001.bin","bytes":4194304,"sha256":"d79afe98047e28db89af19ce5359535786bd564e063058923acb48a72ce85f08"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.1/76a3f065f02ef8820811-002.bin","bytes":4194304,"sha256":"682f2d1c732280f4e8a15ffd41d8fe31ff434c96ba7e305c768d980f9bb3e9b9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.1/76a3f065f02ef8820811-003.bin","bytes":4194304,"sha256":"ec43ffd3a85f99674797cebf4bf77b24a01ae840da31d6bb5687156eb12c0028"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.1/76a3f065f02ef8820811-004.bin","bytes":4194304,"sha256":"84d5cc5799e4c1e0e57961c2f096582e33edd90b2c5acd5c669186d52b673d06"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.1/76a3f065f02ef8820811-005.bin","bytes":4194304,"sha256":"0d696ec29520ffdfbb23aedf92719d11fa08efd5f2adc838361e40e76f02ded4"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.1/76a3f065f02ef8820811-006.bin","bytes":4194304,"sha256":"5a8401e504dc3b30dbc770534c4f7d91605618cff452701dfdce6b849a865544"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.2/76a3f065f02ef8820811-007.bin","bytes":4194304,"sha256":"50e4f828f7541ef5dcf281192e965bc892d9cd6e80e5d588c64fb29f106f2cbc"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.2/76a3f065f02ef8820811-008.bin","bytes":4194304,"sha256":"1cfe42d3b335848d8812bae0d157934b6f56af776e8399c041ceb13c3eb00f1b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.2/76a3f065f02ef8820811-009.bin","bytes":4194304,"sha256":"b02df303dbc9795f1c15e0196a14c49d909d5063074e667ab393819b92f4e468"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.2/76a3f065f02ef8820811-010.bin","bytes":4194304,"sha256":"6a975ee2cdb912af7027ad50eeb5df9e5ad1ebe6b0fbaa749c2af758bae9bc4c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.2/76a3f065f02ef8820811-011.bin","bytes":329534,"sha256":"c048fce2eb22467b3f67c34f1e2ad4956d63a0d6326ed5806d2044849070995b"}]},"data":{"gzipBytes":480325085,"gzipSha256":"e407999c2ae432be2334721aaf2d99c6f64680fdd94b5b90221da9245ee7b2f3","sourceSha256":"5c739e162a884d3022cbcfaa1f27b14730d02a1b14c4ea6b21e2bdf98814e29c","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.2/e407999c2ae432be2334-000.bin","bytes":4194304,"sha256":"395fcc64854a617589a236881f830e6144b075413ae9079608574ae514cc839d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.2/e407999c2ae432be2334-001.bin","bytes":4194304,"sha256":"17d8c8fc13b1313db80c79249db94d4b09fd68e2806d7bf2c2bc9d55956a8308"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.2/e407999c2ae432be2334-002.bin","bytes":4194304,"sha256":"b8debe624905d891f7466d47dde82f6f3aeb82f7b2bc25e08e3c62558902fcea"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.3/e407999c2ae432be2334-003.bin","bytes":4194304,"sha256":"b3b3b67a49fc92c1b23053c8e8f31baaa35b9427b705f0bc06158fa2550af775"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.3/e407999c2ae432be2334-004.bin","bytes":4194304,"sha256":"9a7c2082aecab38931784b014006433306385be905a9b9b0f2ce76e304aa31c6"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.3/e407999c2ae432be2334-005.bin","bytes":4194304,"sha256":"a28b4eda23c1895451024d997ee5dc5205018ced8f07e0c159542c7ccfc1494d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.3/e407999c2ae432be2334-006.bin","bytes":4194304,"sha256":"19d229ec404a18d04c1906d511fc89e885bea516f242ea2aa4bf2ed53e4078e0"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.3/e407999c2ae432be2334-007.bin","bytes":4194304,"sha256":"8df3638154d1d8a88d53f47535b4665579a05091439f1804ac57d6288adb9966"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.3/e407999c2ae432be2334-008.bin","bytes":4194304,"sha256":"07ccc0f8497285b22c62f41d2d511208f83cc9fcbe9aec07bf1a78951bb1e46c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.3/e407999c2ae432be2334-009.bin","bytes":4194304,"sha256":"4e5cd3f0644fe73d4cc7fbe845ce0b047f06e86533004d26ec7d3c2a3de63e5b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.3/e407999c2ae432be2334-010.bin","bytes":4194304,"sha256":"2db3fd645f5382d47315393d2b867049e7fd8df151357d52628ef6fc1c9acf83"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.4/e407999c2ae432be2334-011.bin","bytes":4194304,"sha256":"cee736681ed56c011f19aa95ed0c929f0cadbbc12d27584816c8e3d8b38da2ff"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.4/e407999c2ae432be2334-012.bin","bytes":4194304,"sha256":"9afb246d9817d7e9b885cde36212e3192b5f76fd0d666bf6f776e4612e1beb28"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.4/e407999c2ae432be2334-013.bin","bytes":4194304,"sha256":"9443271e1be032b8745cb06d1a5799c14ddb63cb3019c57717c7b884e368eadd"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.4/e407999c2ae432be2334-014.bin","bytes":4194304,"sha256":"884c319c681e463b02ee261d6f86f58f8a6184992e415c3a94337394bca1ac28"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.4/e407999c2ae432be2334-015.bin","bytes":4194304,"sha256":"947bbfde15fc9e47f76731bd7b2dd1a0e4cbc1d18914fe7127b809acf19e09d5"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.4/e407999c2ae432be2334-016.bin","bytes":4194304,"sha256":"95f99995a012fd61dd1f7e7d332487da70984e29d883e529dd29306ac56ec01b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.4/e407999c2ae432be2334-017.bin","bytes":4194304,"sha256":"c5835558b498418bf7159ae728d559c5439d45df765df74e44c54d5ff361937e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.4/e407999c2ae432be2334-018.bin","bytes":4194304,"sha256":"00cb3f48c3a2d12e95ee18fc4f92dfec5472c9c0bd40ad9011c148eb112e76ef"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.5/e407999c2ae432be2334-019.bin","bytes":4194304,"sha256":"0d915e510527f511ceac3a2ce255986d6a68c9b0c1adc7a89d2cfb5c99427505"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.5/e407999c2ae432be2334-020.bin","bytes":4194304,"sha256":"708bb08f09d15bd0dedad8f538b7d2eb05d1a405f7e15e9f9d99aa10e341dd08"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.5/e407999c2ae432be2334-021.bin","bytes":4194304,"sha256":"d0813b4980a69179b846a9ffdb93dd53a89f211d5fd6334733f567409d1b13df"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.5/e407999c2ae432be2334-022.bin","bytes":4194304,"sha256":"c1bddc75a8646bf932a409be35043bce7ca54476e87f0b7c7e787b159bf88405"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.5/e407999c2ae432be2334-023.bin","bytes":4194304,"sha256":"004a9469ecaaaa7ce52c65db0f4d81ea834c60a881b0021963b2a7b429d867ed"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.5/e407999c2ae432be2334-024.bin","bytes":4194304,"sha256":"eabb490d7180cf71f4365d152f4a77391c6ea7513f9a09ee457f7d2870ca5714"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.5/e407999c2ae432be2334-025.bin","bytes":4194304,"sha256":"31dd6dfdd7015d320f2261e9d9428712da2169542630327fef6707c611f21266"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.5/e407999c2ae432be2334-026.bin","bytes":4194304,"sha256":"c2c32229b090f11ef0dd73da687e1ec9d61ba84618d39fa9bf3568f12b1b2d8c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.6/e407999c2ae432be2334-027.bin","bytes":4194304,"sha256":"e3107e8c426f606d257efdb83c6a2cb877e109bc9c241923ac7413bb616ba409"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.6/e407999c2ae432be2334-028.bin","bytes":4194304,"sha256":"cc1ec18d8a50b15367b4b7b3fa39d5cc40eb45cdb00c72572d9209992bb877bc"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.6/e407999c2ae432be2334-029.bin","bytes":4194304,"sha256":"a89943cd80f7340c6b83ee72f877f7266ef07c4d9f29f741db5ec406d7395b96"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.6/e407999c2ae432be2334-030.bin","bytes":4194304,"sha256":"31a5a69b26486a941acff1dee429e3aec29de4edc01e35132a44339b978ec8e0"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.6/e407999c2ae432be2334-031.bin","bytes":4194304,"sha256":"83d852b8343d227dca71b2d8c4c61f217bcbc62096959bbbb5ca47239067f73a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.6/e407999c2ae432be2334-032.bin","bytes":4194304,"sha256":"4beda172dc41377bd5ee2d36f6a5813bee9262215f6522de35a8c2f6feb867c3"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.6/e407999c2ae432be2334-033.bin","bytes":4194304,"sha256":"479b813f0a82e314a79104d969575a0340d41f974ed9b82a2d5d506fd098aec3"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.6/e407999c2ae432be2334-034.bin","bytes":4194304,"sha256":"9d9afff604d3dc6974e8987318cc900a83c8c1bf68762e78dddf8f1119badb82"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.7/e407999c2ae432be2334-035.bin","bytes":4194304,"sha256":"ab689fe86fd8537a8aca90c8800e054f32bdf6ac8a8011437df4d082e42ce4d1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.7/e407999c2ae432be2334-036.bin","bytes":4194304,"sha256":"8552f6318b7b83775bbbe1d3849daa9ac7cfa44756bf60bb874009e55b760e56"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.7/e407999c2ae432be2334-037.bin","bytes":4194304,"sha256":"7be8664c749519a2ec8ff275e12ec83361fc488157c394d4114f537e3101ccc1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.7/e407999c2ae432be2334-038.bin","bytes":4194304,"sha256":"e69159c91594397e1d51c6cfb734e887cbfcbff95d484dc8005f14a07aa83256"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.7/e407999c2ae432be2334-039.bin","bytes":4194304,"sha256":"b6573af0a19ff2aaaf4aae8cc442bcc17c0807598e4e6bdf6299524b278e8b82"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.7/e407999c2ae432be2334-040.bin","bytes":4194304,"sha256":"b54fac96da606b510f00ca2ed679d9f65a7403d5d20a315c60dcbfc27c2f2c28"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.7/e407999c2ae432be2334-041.bin","bytes":4194304,"sha256":"4ec3ac976d61140ee217e6be0c94d12c9c8ea6ec59ff6145b3e922c8be44bd46"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.7/e407999c2ae432be2334-042.bin","bytes":4194304,"sha256":"764110d2e2a8a1e177a691521319348a01ccefa7e15e623cc5fa9b76e1d5bd48"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.8/e407999c2ae432be2334-043.bin","bytes":4194304,"sha256":"33179991f5eb1902f30a16ca47f4838c9b9ded62d42eb30d10fc8c47850c402d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.8/e407999c2ae432be2334-044.bin","bytes":4194304,"sha256":"c1491e2a7dcd35ec44f42556c0b42cdcb8142b23d762b29edcaf85d9d51f64d1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.8/e407999c2ae432be2334-045.bin","bytes":4194304,"sha256":"3aa0ec803bd0c6e563f2b624559b2efd44c6fa55c2e09cc7fefa6ccfd02cdb67"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.8/e407999c2ae432be2334-046.bin","bytes":4194304,"sha256":"cff90fd6490099c8c946584ef61b7c29576d7537b962eebc22c76d2d7ac0fe54"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.8/e407999c2ae432be2334-047.bin","bytes":4194304,"sha256":"94aeb8379af847937e171321555e58852d676850175048c83b4b1bbe82a7f530"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.8/e407999c2ae432be2334-048.bin","bytes":4194304,"sha256":"51d10d222738bc58a895cdccef8f7de7138d339530710de5c854522728c73328"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.8/e407999c2ae432be2334-049.bin","bytes":4194304,"sha256":"e24585729544b5f52227b219dddab2a4f5fddd02470408773be1c72c0ae0afe9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.8/e407999c2ae432be2334-050.bin","bytes":4194304,"sha256":"9981939f3283cbd311486e6bfcd6007c74a245c5a9b3cc1a4b4f8ab7e95ca559"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.9/e407999c2ae432be2334-051.bin","bytes":4194304,"sha256":"25574e7c17dc4f8ef34e37985d4fc04505511491ed87c24d1b4b38908b0bb140"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.9/e407999c2ae432be2334-052.bin","bytes":4194304,"sha256":"5106c6f38e6e33d33d44f58d77db6b00d2f171a2af76408805b1ad528156ab5e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.9/e407999c2ae432be2334-053.bin","bytes":4194304,"sha256":"b551fde419e5e1987f243912c9841a919ff46948132d39cb84b650307d768f1a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.9/e407999c2ae432be2334-054.bin","bytes":4194304,"sha256":"5b847db6fb767617594b6268d0a00a63eb4568770723700435ab64e6bb2e15a5"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.9/e407999c2ae432be2334-055.bin","bytes":4194304,"sha256":"a1084d4028a41db07c7c968e5d6e1edef8f7a5695ca0a3c26da8ebb5c9e808ba"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.9/e407999c2ae432be2334-056.bin","bytes":4194304,"sha256":"8b8bca9ac6daa75aec655cf31a5c712f366280ff679f624625aae71dd7280f88"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.9/e407999c2ae432be2334-057.bin","bytes":4194304,"sha256":"1a3a54bfa5fe88076fae6e62f585ac44a7d807673a096026c50057ab1c4ead03"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.9/e407999c2ae432be2334-058.bin","bytes":4194304,"sha256":"6392c6e72a812a79f3f4aec71b9cfca5c99bf74a1080ef4916dda167c04d5146"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.10/e407999c2ae432be2334-059.bin","bytes":4194304,"sha256":"758b9d9c87dc71490497cb1554c3c7c6696442e8d053e32df9fe850b12b3c7ac"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.10/e407999c2ae432be2334-060.bin","bytes":4194304,"sha256":"2eb7bb41d94bb43e54bc7f3f95293858908c7c61a51202cfd22d49555b0c1c14"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.10/e407999c2ae432be2334-061.bin","bytes":4194304,"sha256":"c561f7bb0f5599e022765c37dc3859eaab81a117372d35293e8b616077ff0400"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.10/e407999c2ae432be2334-062.bin","bytes":4194304,"sha256":"8d5713bf28ebca9c3daabb1395eb3d67f3327aaf5f2d969191376ff55da03176"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.10/e407999c2ae432be2334-063.bin","bytes":4194304,"sha256":"a20639db17f2c6a2d6723de419a77e72fd3021992009e507ab0dc350acf02c36"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.10/e407999c2ae432be2334-064.bin","bytes":4194304,"sha256":"4e3482e70d7bb9a8012eff33e2a01c9ac1e1923c3a9a129a7f363d42ea5426d4"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.10/e407999c2ae432be2334-065.bin","bytes":4194304,"sha256":"5f0d60043b3ee83ef285f3058f53abd0d9e0395e28b19c0f5835936398099dab"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.10/e407999c2ae432be2334-066.bin","bytes":4194304,"sha256":"e1322a887ef90e14f4d6e07e1bd03ada7c7c361e4d6841f870c779af335ecbf5"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.11/e407999c2ae432be2334-067.bin","bytes":4194304,"sha256":"759bb78ca68cf2aa4116ac8bb2da846cf69d97fcab3b4f725f206d019c8a237e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.11/e407999c2ae432be2334-068.bin","bytes":4194304,"sha256":"f7257f0236b2437ff89e9bc25a310c003d330d33c5642b249574c0e9e37738b8"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.11/e407999c2ae432be2334-069.bin","bytes":4194304,"sha256":"119156d683d6f33b4768b1c33a673611aa2c50ac39d930f53b2bc2888af2a9da"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.11/e407999c2ae432be2334-070.bin","bytes":4194304,"sha256":"0b1082483251800ba2ea38e547b1b7dac82f7f93c5061083e897846285a65a9c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.11/e407999c2ae432be2334-071.bin","bytes":4194304,"sha256":"33b7ae0f5e788acf05752f7e26df06adbf0664364f596eda444d62c8c68ea21a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.11/e407999c2ae432be2334-072.bin","bytes":4194304,"sha256":"98a2c50dd21685e65ed81c3478fbc9282058932c8af50629f70d840fc16635e9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.11/e407999c2ae432be2334-073.bin","bytes":4194304,"sha256":"0eb33ade5640bb1eddf54b20fcf04fea8534f6055cfbd04636a977daee78ae7f"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.11/e407999c2ae432be2334-074.bin","bytes":4194304,"sha256":"f5a87fc45c78ff3ef9040ec33f083d6b61e78bc5ee641030686a8e41b8af7b31"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.12/e407999c2ae432be2334-075.bin","bytes":4194304,"sha256":"eef1e71bf3cdc3621dad0b0da03ea430ae60e9a4274a45e34e3dc25feaa3498a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.12/e407999c2ae432be2334-076.bin","bytes":4194304,"sha256":"58094d35d8962ea9dcce278e86c5e4e10b7d2a397d0e6415a2d2cb630873b8a9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.12/e407999c2ae432be2334-077.bin","bytes":4194304,"sha256":"572bec0553d11c35d6407a78991d18170156b49675908b14a6b2aa41d2bafa4c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.12/e407999c2ae432be2334-078.bin","bytes":4194304,"sha256":"bf276adb9898a2a1bc87e8708b34f244170d3b566e32554aa46a9163fb118b73"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.12/e407999c2ae432be2334-079.bin","bytes":4194304,"sha256":"8805c6c8a1c61e86d7b825c6adfd49a76b082e2287f5ea0791376ce5c5f71e78"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.12/e407999c2ae432be2334-080.bin","bytes":4194304,"sha256":"6f008ef71fa11cf4f3e35cf7466bd34ca83d02879d29ee33dc6f866d3b28f786"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.12/e407999c2ae432be2334-081.bin","bytes":4194304,"sha256":"0ba31a060ac7304272e50c80643df15f38a70a903991a4ce139cf2de8624057a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.12/e407999c2ae432be2334-082.bin","bytes":4194304,"sha256":"4042ea6e0c953abd5ea630faee23a7f5a3d42dd19812149b0335f62c96a1769a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.13/e407999c2ae432be2334-083.bin","bytes":4194304,"sha256":"0cb51a9d9ac021292cc4198b3a12bef42b81c8c479aa5bf737751c5200a0ec57"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.13/e407999c2ae432be2334-084.bin","bytes":4194304,"sha256":"d17e08a25d5f294b1c491f6db18903920cbb15d3a784473793805d8b7f5b22bb"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.13/e407999c2ae432be2334-085.bin","bytes":4194304,"sha256":"14f644616a414d0a9a5bc09a0723e7057d5f32270a857a6fd975764844ced210"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.13/e407999c2ae432be2334-086.bin","bytes":4194304,"sha256":"8809ad67530fd19b1c32ee7c6cc0b21dd1e052b97a386f58d1bd482c77ad1ee1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.13/e407999c2ae432be2334-087.bin","bytes":4194304,"sha256":"a9e02f8685a7c292e3ec3a69c5f6033631b85eb27cd94abe83f1ad24a4e3655b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.13/e407999c2ae432be2334-088.bin","bytes":4194304,"sha256":"cf0bae99631a279eadb524117be73c67f3d5e759b63b34f65bfd3556e741500a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.13/e407999c2ae432be2334-089.bin","bytes":4194304,"sha256":"a8da9cef8ae00a96d832c010117411d80e29bb5475af1291adba45dff6c6cfad"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.13/e407999c2ae432be2334-090.bin","bytes":4194304,"sha256":"a4b1f156099822f0c43faffd475e387bbdba7fbf16223b88015901e5b436dc4b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.14/e407999c2ae432be2334-091.bin","bytes":4194304,"sha256":"67477e7e912d58a1b3cf0896ef24f9208835098b865d341df85cf5880431b2b1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.14/e407999c2ae432be2334-092.bin","bytes":4194304,"sha256":"4657af98e6d6f43aba7283a36920465b2d79d7bf28e1340a7e0e617d8c8c1677"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.14/e407999c2ae432be2334-093.bin","bytes":4194304,"sha256":"279845a1c1f5c9e1bc54f1e4071be002850437d6cfd4a6859c031ed1f90b9def"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.14/e407999c2ae432be2334-094.bin","bytes":4194304,"sha256":"29e01d60ef77b1621061a5e2049ad6e14237e51634dd931a8d6fbc92c78eb0a0"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.14/e407999c2ae432be2334-095.bin","bytes":4194304,"sha256":"d147ed3019bea96024b6f4be3e01858416f809126cd8dd6f18c1ffb5b8f66a5d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.14/e407999c2ae432be2334-096.bin","bytes":4194304,"sha256":"06304180a5da037c2b601db4640adfcde051ce862660f43e267b88a7f7f18037"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.14/e407999c2ae432be2334-097.bin","bytes":4194304,"sha256":"3024396e332be32bbd7cafaa7a7512a0a99aa0dc2659a4563595b731c7a80f07"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.14/e407999c2ae432be2334-098.bin","bytes":4194304,"sha256":"8a98de572c2096abe63c8ab9916b924806bd7d94b9a40afe12859547ee2fb345"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.15/e407999c2ae432be2334-099.bin","bytes":4194304,"sha256":"8a7cce6f4c96837d5a86d16b06010797cf07c2f88dac3d1a6d0030c3bc262b02"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.15/e407999c2ae432be2334-100.bin","bytes":4194304,"sha256":"27ec06bfda8d21da501121e56ae1d1fbe7785cf39fffbfc7384617c3817efc86"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.15/e407999c2ae432be2334-101.bin","bytes":4194304,"sha256":"7e97597353fa54580cbc9b80ecbf38a3079349afcac583c46503e3f061e3a79b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.15/e407999c2ae432be2334-102.bin","bytes":4194304,"sha256":"93f1569ee81b9b33e72566d7ab9b12d6d0efdbad6ed888db7db7a508ab72cbd8"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.15/e407999c2ae432be2334-103.bin","bytes":4194304,"sha256":"19c69adb919be0a813b365fc0c7dd4e7a00034952af52b9270ca14cd4df90bf9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.15/e407999c2ae432be2334-104.bin","bytes":4194304,"sha256":"58b705dcc8d3888ff60632470294fa5867c0633b25743b979ef569917abbf6c3"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.15/e407999c2ae432be2334-105.bin","bytes":4194304,"sha256":"8a1d0f74849f79f62e60fa842df8ab45214ddf9a6145e2f489ba1c8d4b02c8df"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.15/e407999c2ae432be2334-106.bin","bytes":4194304,"sha256":"35170bcdeb42b4ed4a7abf93d3ae0a3fd633a49383f54e53bcb71347ba905d39"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.16/e407999c2ae432be2334-107.bin","bytes":4194304,"sha256":"a6684ce3d7d01ed33b2f09c493a239a31a776a0f67d362ca309b91ed3780a926"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.16/e407999c2ae432be2334-108.bin","bytes":4194304,"sha256":"7918f7198aad4f9185a4b9eabb23367c23e98d429a506f08fcd69d4f5ceb3468"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.16/e407999c2ae432be2334-109.bin","bytes":4194304,"sha256":"8427edcd7b371c3a891d0e3bd16d5ab84df3ee9643fc10b2689120e0520f429c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.16/e407999c2ae432be2334-110.bin","bytes":4194304,"sha256":"5d9fdbcd4ce8b1181dc56b32df532a6ea7db9589787ccc9eb80394c176af30b9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.16/e407999c2ae432be2334-111.bin","bytes":4194304,"sha256":"201d966a7eb0aba71a56d4caa97edc581244c731f2b91208171b91bb10d7517d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.16/e407999c2ae432be2334-112.bin","bytes":4194304,"sha256":"b442cd03a4b6c919ea2a52b9df15900028d57ba7882ea35da336e0336b26753a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.16/e407999c2ae432be2334-113.bin","bytes":4194304,"sha256":"ce24cbc20a1cbc2b519f81717b94c75c0220d1d88c7a71683d56e64347b473aa"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.2-data.16/e407999c2ae432be2334-114.bin","bytes":2174429,"sha256":"d4b4db301c8bdb648f4593b7e8f99302c0a3310b3f3b473e1b32ba8e42d5d5af"}]},"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.2-data.9",
3
+ "version": "0.1.2",
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