Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
SneakyMasks
Comedy and Tragedy masks hold the use key for you. 1-5 silent seconds after reaching your hand, then the mask takes over - and it only attacks once it has climbed all the way onto your face. Interrupt the climb and nobody dies. Client-side.
| Date uploaded | 3 hours ago |
| Version | 1.2.0 |
| Download link | Solon-SneakyMasks-1.2.0.zip |
| Downloads | 18 |
| Dependency string | Solon-SneakyMasks-1.2.0 |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2305README
SNEAKY MASKS
Language / Язык: English · Русский
SNEAKY MASKS
Author: Solo00n
Comedy and Tragedy stop waiting to be used: the mask holds the button for you, and it only kills once it has climbed all the way onto your face.
WHAT IT DOES
- A mask in your hand arms itself after a hidden delay of 1 to 5 seconds. Nothing is drawn, nothing is played, nothing moves while that delay runs.
- When it expires the mask takes the use key and holds it down, exactly as if you had decided to raise the mask yourself. Your character lifts it, and the people around you can see that.
- A protection window of 2 seconds follows, during which the mask is not allowed to start climbing. Putting it away here is always safe.
- After that the base game takes over untouched: a 65% roll every 5 seconds, and on a hit the mask starts climbing.
- The attack happens only at the top of the climb. A mask that has not seated itself on your face cannot kill you, and nothing else can kill through it.
- Interrupting a climb — dropping the mask, or stowing it — cancels it outright, and nothing carries over to the next time.
- Tragedy and Comedy climb at different speeds, so which one you picked up decides how long you have.
- Every pickup rolls a new delay, so a mask you have carried before tells you nothing about the next one.
HOW IT WORKS
The base game already contains nearly all of this. HauntedMaskItem.Update rolls 65% every 5 seconds while a flag called maskOn is set, and on a hit calls BeginAttachment, which starts the climb. Vanilla only ever sets that flag from ItemActivate — the use key. This mod calls UseItemOnClient, the same entry point your own input uses, so the press is a real press with the animation and networking that come with it, not a flag flipped behind the game's back.
The kill is the one thing genuinely taken away from vanilla. In the base game the climb and the kill are not connected: BeginAttachment starts a five-second stopwatch and when it runs out you die, whether or not the mask ever got anywhere. That stopwatch is refused here, and the kill is moved onto MaskClampToHeadAnimationEvent, the event the attach animation raises at the top of its travel. The animation is no longer decoration over a countdown; it is the thing that decides.
That also makes the animation's speed the whole of your reaction window, which is where Tragedy and Comedy are told apart. The base game plays both at the same speed; this mod does not.
Vanilla locks you out of dropping an item while the use key is held. That is fair when it is your finger on the button — a mask never lets go, so the lock is lifted by default. Set PreventDropping to true if you want a mask in the hand to be close to a death sentence.
MULTIPLAYER
This mod is client-side, not host-authoritative. It is safe to run in a lobby where only some players have it.
Everything runs on the client that owns the mask, which is the only client the game runs this logic on in the first place. Nothing extra crosses the network: the press goes out through the game's own ActivateItemRpc, and the attachment through its own AttachServerRpc and AttachClientRpc, so other players see the climb whether or not they have the mod. A player without it simply has vanilla masks, and no state can disagree between machines.
REQUIREMENTS
- Lethal Company V81
- BepInEx 5.4.21 or newer
INSTALLATION
Through a mod manager (recommended): install from Thunderstore with r2modman or the Thunderstore app, and the dependency is handled for you.
Manually: install BepInEx, then drop SneakyMasks.dll into
Lethal Company/BepInEx/plugins/
Launch the game once to generate BepInEx/config/Timofey.SneakyMasks.cfg.
CONFIGURATION
Section [General]:
| Key | Default | Description |
|---|---|---|
Enabled | true | Master switch. Off returns masks to vanilla entirely. |
MinDelay | 1.0 | Shortest silent wait, in seconds, before the mask takes the use key. |
MaxDelay | 5.0 | Longest silent wait. Set equal to MinDelay for a fixed, learnable delay. |
ProtectionTime | 2.0 | Seconds of guaranteed safety before the mask may start climbing. Replaces vanilla's own 10 seconds. |
PreventDropping | false | Whether the mask holding the key also locks you out of dropping and slot switching. |
DebugMode | false | Logs each rolled delay, each climb and how long it took, and every kill allowed or refused. |
Section [Climb Speed], a multiplier on the climb animation. Because the kill happens at the top of the climb, this is the same thing as how long you have to react. Entries are written for every haunted mask the game knows about, so masks added by other mods appear here too.
| Key | Default | Description |
|---|---|---|
Tragedy | 1.6 | Climbs faster than vanilla. The unforgiving one. |
Comedy | 0.7 | Climbs slower than vanilla, leaving noticeably more time to react. |
The base game runs both masks at the same speed. The split is this mod's doing — set both to 1 to put it back the way the game has it.
COMPATIBILITY
- Works on every moon, vanilla and modded alike.
- Modded masks are supported as long as they use the game's own
HauntedMaskItem. Each one is given its own climb speed entry, defaulting to vanilla speed. - The 65% chance, the 5-second interval, the attach animation itself and the checks that keep masks inert in orbit are all left alone, so mods that touch those keep working.
BUILD
Requires the .NET SDK. Game assemblies come from LethalCompany.GameLibs.Steam, so no local game install is needed to compile.
dotnet build SneakyMasks.csproj -c Release
build-package.ps1 builds Release and assembles the Thunderstore zip into dist/. Set the LC_PLUGINS environment variable to have the built DLL copied straight into your plugins folder.
CREDITS
SNEAKY MASKS
Автор: Solo00n
Комедия и Трагедия больше не ждут, пока их применят: маска сама зажимает кнопку, и убивает только тогда, когда доползла до вашего лица полностью.
ЧТО ДЕЛАЕТ МОД
- Маска в руке взводится после скрытой задержки от 1 до 5 секунд. Пока идёт задержка, не появляется ничего: ни индикатора, ни звука, ни движения.
- Когда задержка истекает, маска забирает кнопку использования и держит её — ровно так, как если бы вы сами решили поднести маску к лицу. Персонаж поднимает её, и это видят окружающие.
- Дальше идёт защитное окно в 2 секунды, в течение которого маске запрещено начинать натягиваться. Убрать её здесь безопасно всегда.
- После этого работает нетронутая ванильная логика: проверка 65% каждые 5 секунд, и при успехе маска начинает натягиваться.
- Атака происходит только на пределе анимации. Маска, которая не села на лицо полностью, убить не может, и никакое другое условие убить через неё не может тоже.
- Прерванное натягивание — выбросить маску или убрать в слот — отменяется полностью, и ничего не переносится на следующий раз.
- Трагедия и Комедия натягиваются с разной скоростью, поэтому то, какая маска попалась, решает, сколько у вас времени.
- Каждое взятие в руку заново разыгрывает задержку, так что прошлый опыт с маской ничего не говорит о следующей.
КАК ЭТО РАБОТАЕТ
Почти всё это уже есть в самой игре. HauntedMaskItem.Update проверяет 65% каждые 5 секунд, пока выставлен флаг maskOn, и при успехе вызывает BeginAttachment, который запускает натягивание. Ваниль выставляет этот флаг единственным способом — из ItemActivate, то есть с зажатой кнопки. Мод вызывает UseItemOnClient, ту же точку входа, что и ваш собственный ввод, поэтому нажатие настоящее, со всей анимацией и сетевой синхронизацией, а не подменённый втихую флаг.
Единственное, что действительно отобрано у ванили, — условие убийства. В игре натягивание и смерть не связаны между собой: BeginAttachment запускает пятисекундный секундомер, и когда тот истекает, вы умираете независимо от того, куда доползла маска. Здесь этот секундомер отклоняется, а убийство перенесено на MaskClampToHeadAnimationEvent — событие, которое анимация подъёма выдаёт на пределе своего хода. Анимация перестала быть украшением поверх отсчёта и стала тем, что решает исход.
Из этого же следует, что скорость анимации и есть всё ваше окно на реакцию — именно ею и различаются Трагедия и Комедия. В самой игре обе маски идут с одинаковой скоростью, здесь — нет.
Ваниль запрещает выбрасывать предмет, пока зажата кнопка использования. Это честно, когда кнопку держит игрок, — маска не отпустит никогда, поэтому запрет по умолчанию снимается. Поставьте PreventDropping в true, если хотите, чтобы маска в руке была почти приговором.
МУЛЬТИПЛЕЕР
Мод клиентский, не host-authoritative. Его безопасно запускать в лобби, где он установлен не у всех.
Вся логика выполняется на клиенте, владеющем маской, — том самом единственном клиенте, на котором эту логику выполняет и сама игра. Ничего дополнительного по сети не передаётся: нажатие уходит через штатный ActivateItemRpc, а натягивание — через штатные AttachServerRpc и AttachClientRpc, поэтому другие игроки видят процесс независимо от того, стоит ли у них мод. У игрока без мода маски просто ванильные, и рассинхрона состояний между машинами возникнуть не может.
ТРЕБОВАНИЯ
- Lethal Company V81
- BepInEx 5.4.21 или новее
УСТАНОВКА
Через менеджер модов (рекомендуется): установите с Thunderstore через r2modman или приложение Thunderstore — зависимости подтянутся сами.
Вручную: установите BepInEx, затем положите SneakyMasks.dll в
Lethal Company/BepInEx/plugins/
Запустите игру один раз, чтобы создался файл BepInEx/config/Timofey.SneakyMasks.cfg.
НАСТРОЙКА
Секция [General]:
| Ключ | По умолчанию | Описание |
|---|---|---|
Enabled | true | Общий выключатель. При false маски полностью возвращаются к ванильному поведению. |
MinDelay | 1.0 | Минимальная скрытая задержка в секундах, прежде чем маска заберёт кнопку. |
MaxDelay | 5.0 | Максимальная задержка. Приравняйте к MinDelay для фиксированной, предсказуемой паузы. |
ProtectionTime | 2.0 | Секунды гарантированной безопасности до начала натягивания. Заменяет ванильные 10 секунд. |
PreventDropping | false | Блокирует ли зажатая маской кнопка выбрасывание предмета и переключение слотов. |
DebugMode | false | Пишет в консоль каждую разыгранную задержку, каждое натягивание с его длительностью и каждое разрешённое или отклонённое убийство. |
Секция [Climb Speed] — множитель скорости анимации натягивания. Поскольку убийство происходит на пределе этой анимации, это ровно то же самое, что и время на реакцию. Записи создаются для всех masked-масок, которые знает игра, поэтому маски из других модов тоже появятся здесь.
| Ключ | По умолчанию | Описание |
|---|---|---|
Tragedy | 1.6 | Натягивается быстрее ванили. Непрощающая маска. |
Comedy | 0.7 | Натягивается медленнее ванили, заметно больше времени на реакцию. |
В самой игре обе маски идут с одинаковой скоростью. Разделение — инициатива этого мода: поставьте обеим 1, чтобы вернуть как в оригинале.
СОВМЕСТИМОСТЬ
- Работает на всех лунах, ванильных и модовых.
- Маски из других модов поддерживаются, если используют штатный
HauntedMaskItem. Каждая получает собственную запись скорости со значением ванильной скорости по умолчанию. - Шанс 65%, интервал 5 секунд, сама анимация натягивания и проверки, удерживающие маски неактивными на орбите, не тронуты, поэтому моды, работающие с ними, продолжают работать.
СБОРКА
Нужен .NET SDK. Сборки игры берутся из LethalCompany.GameLibs.Steam, поэтому установленная игра для компиляции не требуется.
dotnet build SneakyMasks.csproj -c Release
build-package.ps1 собирает Release и упаковывает архив для Thunderstore в dist/. Переменная окружения LC_PLUGINS заставит копировать собранный DLL сразу в папку плагинов.
БЛАГОДАРНОСТИ
CHANGELOG
Changelog
1.2.0
- Tragedy and Comedy no longer climb at the same speed. Since the kill happens at the top of
the climb, the animation's speed is the whole of the reaction window, so that is what the new
[Climb Speed]section sets. Tragedy defaults to 1.6x and Comedy to 0.7x; the base game runs both at 1x, and setting both back to 1 restores that. - The section is keyed by mask name and written in full on first launch, so masks added by other mods get their own entry without this mod needing to know about them.
DebugModenow prints how long each climb actually took, in seconds, which is the practical way to tune the speeds.
1.1.0
- The mask now holds the use key for you rather than setting the game's flag behind its back.
It goes through
UseItemOnClient, the same call your own mouse makes, so the hold animation and the networking that come with a real press happen too — your character visibly raises the mask, and the people around you can see it. - The kill is now the animation's to decide. Vanilla kills on a five-second stopwatch started when the mask begins climbing, regardless of where the mask actually got to. That stopwatch is now refused, and the kill happens on the animation event raised when the mask seats itself. A mask that has not climbed all the way onto your face cannot attack you, and nothing else can kill through it.
- New
PreventDroppingoption. Vanilla locks you out of dropping and slot switching while the use key is held; the mod lifts that lock by default so putting the mask away stays possible. Set it totrueto keep the lock and make a mask in the hand close to a death sentence.
1.0.0
First release.
- Haunted masks lift themselves to the face on their own, after a hidden delay of 1-5 seconds in the hand. Nothing is shown or heard while that delay runs.
- A protection window of 2 seconds once the mask reaches the face, during which the game's roll to take the player cannot happen at all.
- Putting the mask away at any point resets it; the next time it comes out, a new delay is rolled.
- Configurable delay range, protection window, and a switch to turn the whole thing off.