@darkshadow2900/lethal-company-web 0.1.3-data.8 → 0.1.3

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":11138,"gzipSha256":"72950eace6ec8c79e6f67cec174eb48764ae36b5426fd074cac410702c88b7da","sourceSha256":"b274c67f03aff6268d0019e7ac741b7733aef7975172a07dfce5182527dc0ea0","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.1/72950eace6ec8c79e6f6-000.bin","bytes":11138,"sha256":"72950eace6ec8c79e6f67cec174eb48764ae36b5426fd074cac410702c88b7da"}]},"framework":{"gzipBytes":202054,"gzipSha256":"ab31dc09e1468a2f904bb20e88c3edb30f2acce322bcb42b1dd6b1682cdb7312","sourceSha256":"341701a3025c1a43df260c1e5e536708b6f979a9d6fb833675e592a94ca723b5","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.1/ab31dc09e1468a2f904b-000.bin","bytes":202054,"sha256":"ab31dc09e1468a2f904bb20e88c3edb30f2acce322bcb42b1dd6b1682cdb7312"}]},"wasm":{"gzipBytes":46494532,"gzipSha256":"518328cc605c1b25f503aa17d948eb618a605ad737963cddc42f57ca25af49f4","sourceSha256":"2e2dde91cafdd3ba9a66737d2b296f1b746e36d65596bf20f39ebbcc4ceeb3ee","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.1/518328cc605c1b25f503-000.bin","bytes":4194304,"sha256":"6bd359fedb07e2fb37e5c3c75a84c10c09f4c12e9b8f2e76d30ee4fc82c353fb"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.1/518328cc605c1b25f503-001.bin","bytes":4194304,"sha256":"ff4d105a0d74a4845620d6dc1192fee4fe2023a62a49be71809cf8f88ce4e2fa"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.1/518328cc605c1b25f503-002.bin","bytes":4194304,"sha256":"14e2dcd7894cba6d0ae77c8ba51d4df82e8c15d5eaf981d4bed78f3a33272331"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.1/518328cc605c1b25f503-003.bin","bytes":4194304,"sha256":"1c44da73ad00be2995999623b93adeb27ee1acb101b8e1d5c0f6b1f9888691bd"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.1/518328cc605c1b25f503-004.bin","bytes":4194304,"sha256":"facc1104e39338e70d17c66208320a0528353183125cefa7219839dcdbe6d65b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.1/518328cc605c1b25f503-005.bin","bytes":4194304,"sha256":"b733857eef7640d4ccef49f4a03830c0c1ac0abef2f681abe2dc088013c3a60a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.1/518328cc605c1b25f503-006.bin","bytes":4194304,"sha256":"089a596342fba95f8571ad65f1b41d81dfdd1d91f809aa39d5271e006f462bdc"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.2/518328cc605c1b25f503-007.bin","bytes":4194304,"sha256":"1648a9e59f518911886f0a7f7f3a10b7773457ce35a446b72dd07a3db2ada812"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.2/518328cc605c1b25f503-008.bin","bytes":4194304,"sha256":"ea072fa4ad2ecd99380a0c022c287aeb9ee1e457150c0e106b9a927503f34258"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.2/518328cc605c1b25f503-009.bin","bytes":4194304,"sha256":"f25fe483dbec227899c12d59ecb6f89893e596d675ab4896f559e3bdbe3c200f"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.2/518328cc605c1b25f503-010.bin","bytes":4194304,"sha256":"2973e96cfe80bc022f820657552759c3bafe51e6c2995d92bdc9a95699719c59"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.2/518328cc605c1b25f503-011.bin","bytes":357188,"sha256":"acd93c87e20f16b4f9d1bcb0b06a3e11a15d31cd1a120e038ab8ed0b752b2104"}]},"data":{"gzipBytes":480682344,"gzipSha256":"8711c21361bd5586c95dd84a1beeba1d791fe873488006b2290e44ac88738de2","sourceSha256":"46886985ea466aa91c65fb3f685d3640f6a0068ee0acfc517d97ad99c78b4895","parts":[{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.2/8711c21361bd5586c95d-000.bin","bytes":4194304,"sha256":"c1dd6490bab85cda6d8f0ece1c36be7bed1b73c4049d8e895f3796cac153d04c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.2/8711c21361bd5586c95d-001.bin","bytes":4194304,"sha256":"3a9f47f328985b3f252f4f1ff2e688308213e4fce33120a7621b9ebd49e950c1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.2/8711c21361bd5586c95d-002.bin","bytes":4194304,"sha256":"ae9840cb7b1f9ac6b6a21af3ace761e4dbc69c1d793f98d4f91213885d9e4f25"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.3/8711c21361bd5586c95d-003.bin","bytes":4194304,"sha256":"8ccc67d2f07e44ae2c2243fc216ac500069fe4b37af25871f664e8d64cf205f0"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.3/8711c21361bd5586c95d-004.bin","bytes":4194304,"sha256":"0db9ac4e170202b1392e1d60a27b0583ef0ed2b643ca195b261843f2e7710d3c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.3/8711c21361bd5586c95d-005.bin","bytes":4194304,"sha256":"d4bc86f42c844b7619b8e8bac791aa605d9379fb9998efe2673d630b2e5b19f7"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.3/8711c21361bd5586c95d-006.bin","bytes":4194304,"sha256":"f309ff2bd145eb1fa7dc714a8c7bc3b4a18f0f72c82745bf07ea233b1ff14707"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.3/8711c21361bd5586c95d-007.bin","bytes":4194304,"sha256":"d563fc47cf1a27e28c6823530a780ad5f7f64f61f87948faafc8d35a5a8fb23d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.3/8711c21361bd5586c95d-008.bin","bytes":4194304,"sha256":"571455c3d7699ee1ca8668e2f2c763b1684fe88e49c5707d81e03e32b0db5932"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.3/8711c21361bd5586c95d-009.bin","bytes":4194304,"sha256":"bfbe357d1ba44fa1810f45ea617de1bd390c6335b4cd78ab504c6ff1a10f0c0a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.3/8711c21361bd5586c95d-010.bin","bytes":4194304,"sha256":"6472f3aa1da6af584f1033e2cced8a0ed7f35ec6a02e7cb05c82a7ed666db83b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.4/8711c21361bd5586c95d-011.bin","bytes":4194304,"sha256":"aa06918fa2f42f19059fd5e39962cbd8f6c7248d912f317378ce75df61f4f129"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.4/8711c21361bd5586c95d-012.bin","bytes":4194304,"sha256":"5c3105d2263eee6de65c57094c079600d85a5dcbbcd88ebfec87e5633b7ae7f1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.4/8711c21361bd5586c95d-013.bin","bytes":4194304,"sha256":"4f7f3f001402e87f643593e2d2666789e4cca8af706d9b906603ab9bb3a0e859"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.4/8711c21361bd5586c95d-014.bin","bytes":4194304,"sha256":"071894f1f71cc544fe6742366d0c316f4c9d6ed36a63678d576753a975609da8"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.4/8711c21361bd5586c95d-015.bin","bytes":4194304,"sha256":"56b7bf6b31d6d0af38db07444da76472c834293f44a09b78f325f95b39ce48a2"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.4/8711c21361bd5586c95d-016.bin","bytes":4194304,"sha256":"a785c7e5937960f25a155184be1ea1d8c6fe9a4734e617e579fb5c1597f3706e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.4/8711c21361bd5586c95d-017.bin","bytes":4194304,"sha256":"fff1bc33a16e9d092acd5c7bee404e7404fb3ed85ae35ce4c2976c42ac968706"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.4/8711c21361bd5586c95d-018.bin","bytes":4194304,"sha256":"0b38a757780a185d8d9f42ef9e595822dfe81550bfaed212706822026591e1dc"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.5/8711c21361bd5586c95d-019.bin","bytes":4194304,"sha256":"541bc4f97d98c1ddc225a3804e5dbb9036b422a32854aac5c717c97d7485e309"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.5/8711c21361bd5586c95d-020.bin","bytes":4194304,"sha256":"1df3ef890588a32f7327432cdc8e76c36853456b5d38a8b0cd69eef72bb2f1c0"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.5/8711c21361bd5586c95d-021.bin","bytes":4194304,"sha256":"0488508e1a97da095d1510a570e801de9e442aef521f302e3f004fc5a3a3f8ea"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.5/8711c21361bd5586c95d-022.bin","bytes":4194304,"sha256":"0ef7057cdcb912bf8c25a74fa54f4c1b5e5ad7c3ae95daf9341b72fbd62c2b2d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.5/8711c21361bd5586c95d-023.bin","bytes":4194304,"sha256":"24daa0e4af5b78c2e5d5b939fccf1e6ac6a269da4ced239a89266c4423640ce6"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.5/8711c21361bd5586c95d-024.bin","bytes":4194304,"sha256":"fee53147ef2ed9760d695d3b2ff8e67f99ffd0b43cc552f2d71cdd2877e61fd0"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.5/8711c21361bd5586c95d-025.bin","bytes":4194304,"sha256":"59b62b508fa4f928c5c8f60790870d5b95dd0de76c6e57945a1a5da9ab2ee8cf"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.5/8711c21361bd5586c95d-026.bin","bytes":4194304,"sha256":"84fa1ccf8dc83ecfa88e343e310fdd8fabbbb032f34873f2c0caeda72ff3ece5"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.6/8711c21361bd5586c95d-027.bin","bytes":4194304,"sha256":"2b7b81a64e753806162369dc265c95a7cc5ca4beb9b38aed338e5e7cacb3b6d6"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.6/8711c21361bd5586c95d-028.bin","bytes":4194304,"sha256":"f72b40015b26bf58bed3f2aa3e8574eec8edd320bffe4cc2294998d574b5173e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.6/8711c21361bd5586c95d-029.bin","bytes":4194304,"sha256":"f9b231fcd1e1d55dd0edd107d3543aa3e9cdf740be6bd6e42243c1e3003496c1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.6/8711c21361bd5586c95d-030.bin","bytes":4194304,"sha256":"585c830da850b6723838c9e88a697af3f9ff7babf609a7236409c0010f2cb073"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.6/8711c21361bd5586c95d-031.bin","bytes":4194304,"sha256":"2c5f6d14ed0760fbc27a10ae7cad494a763e9d3d6c6168a5ee05616df758d62b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.6/8711c21361bd5586c95d-032.bin","bytes":4194304,"sha256":"b0d975678fd2bf1e312466f5eba43433719be1fc5782dd9421a14f6379d56bcf"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.6/8711c21361bd5586c95d-033.bin","bytes":4194304,"sha256":"79fc542590fb15f4e054732ce6537199ccffb2a873813a0a43242290bca67b19"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.6/8711c21361bd5586c95d-034.bin","bytes":4194304,"sha256":"80edbdb5094193ffefe0a2360c286237257de9183a1d344d6152a3564b6c7779"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.7/8711c21361bd5586c95d-035.bin","bytes":4194304,"sha256":"5a0bd15df396d9dcbc754ba8235b60b8d16436571987838625108e67b2946c90"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.7/8711c21361bd5586c95d-036.bin","bytes":4194304,"sha256":"8eebb50fb0134b4cb57a5e77c90bf6248b2f6c3e1a04c70bd140cc8be1614656"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.7/8711c21361bd5586c95d-037.bin","bytes":4194304,"sha256":"75b07d51116bbec3e29498d7e44168838bc8ae8814046fa2b7cf13a9185cad8c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.7/8711c21361bd5586c95d-038.bin","bytes":4194304,"sha256":"c4828480fb56c5bdcdc20588770c755205b17c3a55bee5386d3955592410fbaa"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.7/8711c21361bd5586c95d-039.bin","bytes":4194304,"sha256":"192cd9e4001698bc6e01787e9d7ed7cbf406f960074b1412748f12baf4f7d328"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.7/8711c21361bd5586c95d-040.bin","bytes":4194304,"sha256":"05bfe8aeb90247e281a18a748444334d83c69e9cf2d69977398d1ee033a12e83"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.7/8711c21361bd5586c95d-041.bin","bytes":4194304,"sha256":"18cb3d8631676cad5679edfb2fc6d86d60dc55f07e08380a83c60ca6495ce79c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.7/8711c21361bd5586c95d-042.bin","bytes":4194304,"sha256":"28ba56cd099c29b29ecdf5ff33a677803b3603f32ef51329b6d609590f3ff04e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.8/8711c21361bd5586c95d-043.bin","bytes":4194304,"sha256":"f035266f7062a3c97f745d8717f2fcc73d76f2576bf71ea661818ec3a2232ca2"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.8/8711c21361bd5586c95d-044.bin","bytes":4194304,"sha256":"c4f24929185330263634a08be7b302df8d276a19e8f3e077a4d62012bb6c37f8"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.8/8711c21361bd5586c95d-045.bin","bytes":4194304,"sha256":"8553f882d35d7f03cca2a6c2af63311eab48249033a308fff7255496269a822f"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.8/8711c21361bd5586c95d-046.bin","bytes":4194304,"sha256":"a7e96cbee607d141a9b95442ee95a373b4e60dd9250f84be6591988eccbc3fe3"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.8/8711c21361bd5586c95d-047.bin","bytes":4194304,"sha256":"0e1e4dbbb2e59eb98daff0c4992034d9c4409ac20dafdf7bed62558f8efb8559"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.8/8711c21361bd5586c95d-048.bin","bytes":4194304,"sha256":"4b0b19fe8f22d410fd3a4ec2037966bee7e2b392e70c204224f823e2ca3ab303"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.8/8711c21361bd5586c95d-049.bin","bytes":4194304,"sha256":"b575705bcad9911cbf3eb426677ee4fcf18a6fcf7e360465ed49433695b72d50"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.8/8711c21361bd5586c95d-050.bin","bytes":4194304,"sha256":"d325544ed75f6c3d00d75965723fe6124d3da7663678f4320b5f0ebf1e66c6f9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.9/8711c21361bd5586c95d-051.bin","bytes":4194304,"sha256":"1bd20444f6abe2eaeb968bab6ec72324cca33914a2ed6c045786909a015476ac"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.9/8711c21361bd5586c95d-052.bin","bytes":4194304,"sha256":"17d0bfdb3828b073173ee7799b6955c3fad025a6568dcfc6cf37068bf7927257"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.9/8711c21361bd5586c95d-053.bin","bytes":4194304,"sha256":"36425be941c9fbb58f0e34b19675a828fcf2a6ebc699d910d34c5edf3015e4ef"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.9/8711c21361bd5586c95d-054.bin","bytes":4194304,"sha256":"2a479d5015e3585c907b295dafea7085f14b543c5cb24a8396e10c8a75ed6991"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.9/8711c21361bd5586c95d-055.bin","bytes":4194304,"sha256":"5b3fddbd4ffc145e36375fb66e4d574eddc634e9c0be6eb6a96585fdabb69afc"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.9/8711c21361bd5586c95d-056.bin","bytes":4194304,"sha256":"2cde8e5b943e14c6bcc7165d8258393bb3aea6ab8797f05a16e748cf0f39a78f"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.9/8711c21361bd5586c95d-057.bin","bytes":4194304,"sha256":"6f05771c4d21bfd8950536966cbc4bb406e01ac6e6de3bbecaf7a2308fe153ad"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.9/8711c21361bd5586c95d-058.bin","bytes":4194304,"sha256":"b793b24bc79879ec361d0c793c36193cfc3bc34bd4bb88367bcac704e6bf221c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.10/8711c21361bd5586c95d-059.bin","bytes":4194304,"sha256":"19f88745532a2a81a1759533440920ad28629e05518f7c208db3c7265d6c11ea"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.10/8711c21361bd5586c95d-060.bin","bytes":4194304,"sha256":"14ddda9bb423c5d7d502daa94cd15b1bc596ef4036e01356c7069a26f49d6e08"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.10/8711c21361bd5586c95d-061.bin","bytes":4194304,"sha256":"74a4d22bfc210198f84a75a240df68f0b736b5610dbcc9d1c1d521d2e8944143"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.10/8711c21361bd5586c95d-062.bin","bytes":4194304,"sha256":"88de909011af9640b16cbd459a1a22a32c7d5d96c77fec1d688283abc6fa7138"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.10/8711c21361bd5586c95d-063.bin","bytes":4194304,"sha256":"4a16b479fca21100ad59d40f8ed66d7946f762a2d19cc9d36fd7a0d584ec8b2f"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.10/8711c21361bd5586c95d-064.bin","bytes":4194304,"sha256":"946e6bf33349bf52145721f07cb55ae07d65e37373b2125b4527f686efbbc223"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.10/8711c21361bd5586c95d-065.bin","bytes":4194304,"sha256":"22dd1bdd1ea39998562338a7d31676a436d54fcba688cb9ec38822781a94e23a"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.10/8711c21361bd5586c95d-066.bin","bytes":4194304,"sha256":"c05c75e5fda14896d25c85199b6759bb175b35cc47adfaa9b2dc54e9501bc1e9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.11/8711c21361bd5586c95d-067.bin","bytes":4194304,"sha256":"658d9a8967616c908fb804c851b5a4e7b4b9617219ca000c818e379e1f1efd0b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.11/8711c21361bd5586c95d-068.bin","bytes":4194304,"sha256":"643c8bce6cbb2bb5a8316c490a0064c79092146f2dcdf7d2f951f153bf687943"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.11/8711c21361bd5586c95d-069.bin","bytes":4194304,"sha256":"96cb1c92ab56c705a84c449e4091cedcffdb8e4842d6f79afdca5ef10aac8b63"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.11/8711c21361bd5586c95d-070.bin","bytes":4194304,"sha256":"81091d5e7969a1221bb79e1fc141a5aeebcde6f6e90fc8c1eae839e190d3521c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.11/8711c21361bd5586c95d-071.bin","bytes":4194304,"sha256":"08c4f89b60197f10dd4c2731b67edabc7bd3444cc4805502945811b26987e892"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.11/8711c21361bd5586c95d-072.bin","bytes":4194304,"sha256":"339d5c9150aaa2e37eec9b77cefe49c8115222feb90dc0111880feeaea16c112"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.11/8711c21361bd5586c95d-073.bin","bytes":4194304,"sha256":"49d91fdb47288ee99e7b8583dfe5ee5c888aa03429c8b1c41a44c84b9265396b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.11/8711c21361bd5586c95d-074.bin","bytes":4194304,"sha256":"bcee5fadfe203d6471a4a5e4e20d7586d2b3c089bdf87379aabe5b380e05c21c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.12/8711c21361bd5586c95d-075.bin","bytes":4194304,"sha256":"8e2605bf2f73b6174566d875a364c0731620843d65c7c0e084d7fe84b1c2a6a4"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.12/8711c21361bd5586c95d-076.bin","bytes":4194304,"sha256":"8694c5b1e4a642f3ff389e151f87e9d789b2e5a1327d02539b46b62cdf2ef81c"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.12/8711c21361bd5586c95d-077.bin","bytes":4194304,"sha256":"66ccc3199dcdd5998d8f983c48a68376c3743e8b71e8240ef46798d2bb2c8baf"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.12/8711c21361bd5586c95d-078.bin","bytes":4194304,"sha256":"23fa51af800c485a0ed2e53095f0302662dc75f4b9e0da9172f887b26d9966ba"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.12/8711c21361bd5586c95d-079.bin","bytes":4194304,"sha256":"dc95161b61f6b7de36859787b9495e5a80dd8479b2a80d3e04dca6f4f38852b5"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.12/8711c21361bd5586c95d-080.bin","bytes":4194304,"sha256":"de04cad2771f6e5da45f2fc64ba9242ceb902ba3716eb8ed502155b22bdd1fb2"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.12/8711c21361bd5586c95d-081.bin","bytes":4194304,"sha256":"aa7b9c2c553a4ad3ccc40765fa820215f12d398af0b0f13384a3e0ce305e5fcd"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.12/8711c21361bd5586c95d-082.bin","bytes":4194304,"sha256":"f86e270b4f97709cfbf7c0722b3434e27f16dc2f9df2d5ca78a9f34ddbb25c7b"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.13/8711c21361bd5586c95d-083.bin","bytes":4194304,"sha256":"0dd82a5f5eea4c1720b1b12af8560258b9fec124aeb492737e60b1e5e1b03e65"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.13/8711c21361bd5586c95d-084.bin","bytes":4194304,"sha256":"b72e22e70801e342081859555fa81ecaa5cc5fcc7c1b4975a7a96b76086a7465"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.13/8711c21361bd5586c95d-085.bin","bytes":4194304,"sha256":"310c65bf62aca97bdbe9c6d4209f8ab4402235d7cf4f0e46d81234c44206672d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.13/8711c21361bd5586c95d-086.bin","bytes":4194304,"sha256":"3af6e9668c8e10b45ca7e27bd74d2fde9b537b52abf3c4898d5a2a13d9fa81c5"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.13/8711c21361bd5586c95d-087.bin","bytes":4194304,"sha256":"74a89524d5499c1d7d133c78b526ba44e044439400ac8c3011c2513b9428cecc"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.13/8711c21361bd5586c95d-088.bin","bytes":4194304,"sha256":"d0ca69e3a9138a416809ec3b469aa8fd69641c667767ae8f5460f815f2445ead"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.13/8711c21361bd5586c95d-089.bin","bytes":4194304,"sha256":"30850a52575dd11fc9421b742fab01aaf567b46663604b93a9ba6cf28dc373b0"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.13/8711c21361bd5586c95d-090.bin","bytes":4194304,"sha256":"196d81fa477a43a7ba6359f5f8dd8a0b79238906590ecf3b4fadadc2a0c241b7"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.14/8711c21361bd5586c95d-091.bin","bytes":4194304,"sha256":"7fc25cf1b49a3b625d0d51db7744408640ccadf736eead77780cdb6989e4272e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.14/8711c21361bd5586c95d-092.bin","bytes":4194304,"sha256":"b7e5f03b4c246eedb339c05f650529fb93b00669f7c4045a79be08f61442136d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.14/8711c21361bd5586c95d-093.bin","bytes":4194304,"sha256":"11393f6c01a12a7a98149f25ce5b264ac459deaf13aa6afccf3928e5a06fbcc1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.14/8711c21361bd5586c95d-094.bin","bytes":4194304,"sha256":"4a0eacca2af51feb310a341bdea5e91257f9fe7d4620ff1090e9826329749c1e"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.14/8711c21361bd5586c95d-095.bin","bytes":4194304,"sha256":"064eb51214d9ed9f0c22461ea772da2b4447550b2f885d23444f36553889bd28"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.14/8711c21361bd5586c95d-096.bin","bytes":4194304,"sha256":"12d1264ed0b2669a03a97e5582b9856d7d1f41889d62dff2e2b905f0a09decdc"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.14/8711c21361bd5586c95d-097.bin","bytes":4194304,"sha256":"6e817ba19b57a9de76d40f9aaf32ac3005b455492495c9bdc250aab92e99414d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.14/8711c21361bd5586c95d-098.bin","bytes":4194304,"sha256":"e21add22d711872fed94f1788ce1049dba28b2ababaeae744dea618c2da4a194"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.15/8711c21361bd5586c95d-099.bin","bytes":4194304,"sha256":"95f9aca1ab3243df6376730ff11ffa5545e91ec27eb884d504878cdeba16feb6"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.15/8711c21361bd5586c95d-100.bin","bytes":4194304,"sha256":"98b6b9c1babf51b78a19f8dcdef7c0ff8abd811faca4ec1c8100dfde9cfa24f1"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.15/8711c21361bd5586c95d-101.bin","bytes":4194304,"sha256":"e16ce1d79724fb6c2d3ba364db81140c6861344d3241d971eca0693a9910299d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.15/8711c21361bd5586c95d-102.bin","bytes":4194304,"sha256":"a9a61794a84a38ee89b1b2fed41ab89fd748c01be7108b0849ff2acc78c23852"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.15/8711c21361bd5586c95d-103.bin","bytes":4194304,"sha256":"0f8271f451206a8a9914824ca26a7fde17c317c686c76bf9d3aff4d385705f97"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.15/8711c21361bd5586c95d-104.bin","bytes":4194304,"sha256":"a5393c2340a2fceb190caf4d6ea76946e8cb36e687fb84876e664837135e84d9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.15/8711c21361bd5586c95d-105.bin","bytes":4194304,"sha256":"d10bacdc3f82df80d260a4d03753da82d63f04da1a73f7eafe1d112808107ae6"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.15/8711c21361bd5586c95d-106.bin","bytes":4194304,"sha256":"48447e233e95b89f4af760156e4418b398ce60254d909911e931a7e190eb26ce"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.16/8711c21361bd5586c95d-107.bin","bytes":4194304,"sha256":"bc6ae4cdd262d7f0bc274f89bd99e842c9471e24da6122a5a1e820c89dc8808d"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.16/8711c21361bd5586c95d-108.bin","bytes":4194304,"sha256":"41634c95e6276663cf3c56359e71becf90457cc4da88fb1b05062fb252327737"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.16/8711c21361bd5586c95d-109.bin","bytes":4194304,"sha256":"95a6f14f82de37be86026a5baa87b556149dc07a42199633b12fcc1185b59281"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.16/8711c21361bd5586c95d-110.bin","bytes":4194304,"sha256":"123141c86944ec5040cf100cbfa30e5769a7ef20c7a743895e0a2417632097c9"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.16/8711c21361bd5586c95d-111.bin","bytes":4194304,"sha256":"8f10fc26da13b8615f2c94e9b5fed0bcdab24e0fc353f5897ee83740e564bb90"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.16/8711c21361bd5586c95d-112.bin","bytes":4194304,"sha256":"01918369b766af854f4dc092e3f61f15405737b779fdda4d483bbfd4a62176d5"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.16/8711c21361bd5586c95d-113.bin","bytes":4194304,"sha256":"d50dfeb3944f534a4392c6815c9f8fbc0ff2219bfc913dde531cc3ef6e275e6f"},{"url":"https://unpkg.com/@darkshadow2900/lethal-company-web@0.1.3-data.16/8711c21361bd5586c95d-114.bin","bytes":2531688,"sha256":"5270af05431394de0159b8181d29d1d90186420c4bf5ec116b0292817956925d"}]},"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.3-data.8",
3
+ "version": "0.1.3",
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