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.
Exhausted Batteries
Battery capacity control for every item: purchases arrive discharged, global & per-item multipliers, charging-station use limit, flashlight dimming, Russian (RTLC) support.
| Last updated | 2 hours ago |
| Total downloads | 1 |
| Total rating | 0 |
| Categories | Mods Items Tweaks & Quality Of Life AI Generated |
| Dependency string | Solon-Exhausted_Batteries-1.0.0 |
| Dependants | 0 other packages depend on this package |
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.2100README
Exhausted Batteries
A Lethal Company mod (BepInEx 5 + Harmony) for flexible control over the battery capacity of every item — vanilla and modded.
English
Features
- Purchases arrive discharged. Store-bought battery items spawn with 0 charge (
SpawnStoreItemsDischarged). - Battery-capacity multiplier for any battery item (including items from other mods).
- Two modes:
- Global multiplier — applies to all battery items at once.
- Individual multipliers — per item, by internal name.
- Priority: an individual multiplier overrides the global one; if it is not set (
-1), the global one is used. - Auto-discovery: the
[IndividualMultipliers]section in the.cfgfills in by itself as items appear in-game. - Modded items pre-declared:
Mapper(restoremapper) andGeigercounter(facilitymeltdown) get their own[ModdedItems]section, visible immediately. - Charging-station limit: cap how many times the ship's charging station can be used, with an optional daily reset (
[ChargingStation]). The remaining count is shown in the station's white hover text, e.g.... [3]. - Flashlight dimming (optional): flashlights get dimmer as the battery drains (
[Flashlight]), with configurable start threshold and minimum brightness. Inspired by FadingFlashlights. - Live updates: capacity changes made via BepInEx.ConfigurationManager apply immediately, no respawn needed.
- Russian localization (RTLC-friendly): the mod's in-game messages auto-switch to Russian when a Russian localization mod (e.g. RTLC) is installed or the system language is Russian; can be forced via the
Languageoption. The hover counter[N]is language-neutral and appends to whatever text RTLC already translated. - Host-authoritative multiplayer: the config is synced from the host to clients, so effects apply only under host authority — no client-side advantage (Thunderstore-compliant).
- Verbose logging with real item names for precise tuning.
How it works (technical notes)
In current Lethal Company the charge is not stored in GrabbableObject.batteryCharge. It lives in insertedBattery (class Battery):
insertedBattery.charge— current charge, normalized 0..1.itemProperties.batteryUsage— the "capacity" in seconds: how long the item runs on a full charge.
So the mod:
- Changes capacity via
itemProperties.batteryUsage *= N(higher = lasts longer). The original value is cached perItemasset so scaling never accumulates across respawns. - Discharges via
insertedBattery.charge = 0; empty = true.
It patches GrabbableObject.Start() (Postfix), which runs for all items — purchases, loot and items already on the ship — so modded items are supported automatically.
The charging-station cap patches ItemCharger.ChargeItem (a "use" is counted only when a battery item is actually charged) and resets the counter in StartOfRound.StartGame when the daily reset is enabled.
batteryUsagelives on the sharedItemScriptableObject, so a multiplier affects every instance of that item type — which is exactly what "type capacity" should do.
Build
Requires the .NET SDK (8.0+). From the project folder:
dotnet build -c Release
Game assemblies and BepInEx are pulled from NuGet automatically (via LethalCompany.GameLibs.Steam); no local game path is needed. Output:
bin/Release/ExhaustedBatteries.dll
Install
- Install BepInEx 5 for Lethal Company.
- Copy
ExhaustedBatteries.dllintoLethal Company/BepInEx/plugins/. - Launch the game once to generate
BepInEx/config/ExhaustedBatteries.cfg. - Tune the config (see
ExhaustedBatteries.cfg.example).
Configuration
The [IndividualMultipliers] section fills in automatically. To see the exact item names (modded ones included), set VerboseLogging = true and check the BepInEx console — each item prints its itemName and class name. Any of those names can be used as a key (case, spaces and dashes do not matter).
Multiplayer (host-authoritative)
The config is synced from the host. When you join a lobby, your client requests the host's settings over the network (Unity Netcode named messages — no custom NetworkObject, so it can't crash lobbies) and applies them locally; the mod's gameplay effects only take place while synced, or while you are the host. This means a client cannot give itself an advantage in someone else's lobby — as required by the Thunderstore Lethal Company rules.
If the host does not have the mod, no gameplay effects apply on your side. Everyone should install the mod; the host's config is what everyone plays with. Language and VerboseLogging stay local (not synced).
Compatibility
- Vanilla items: Flashlight, Pro-flashlight, Walkie-talkie, Jetpack, Boombox, etc.
- Modded items: supported automatically (matched by name/class).
MapperandGeigercounterare pre-declared.
Русский
Возможности
- Покупки прилетают разряженными. Купленные в магазине предметы с батареей спавнятся с зарядом 0 (
SpawnStoreItemsDischarged). - Множитель ёмкости батареи для любого предмета с батареей (в т.ч. из других модов).
- Два режима:
- Глобальный множитель — на все предметы сразу.
- Индивидуальные множители — по внутреннему имени предмета.
- Приоритет: индивидуальный множитель важнее глобального; если он не задан (
-1) — берётся глобальный. - Автообнаружение: секция
[IndividualMultipliers]в.cfgзаполняется сама по мере появления предметов. - Модовые предметы вынесены отдельно:
Mapper(restoremapper) иGeigercounter(facilitymeltdown) имеют собственную секцию[ModdedItems]и видны сразу. - Лимит зарядной станции: ограничение числа использований зарядной станции на корабле, с опциональным сбросом по дням (
[ChargingStation]). Остаток показывается в белом hover-тексте станции, напр.... [3]. - Затухание фонарика (опционально): чем меньше заряд, тем тусклее светит фонарик (
[Flashlight]), с настраиваемым порогом начала затухания и минимальной яркостью. По мотивам FadingFlashlights. - Живое применение: изменения ёмкости через BepInEx.ConfigurationManager применяются сразу, без переспавна.
- Русская локализация (совместимо с RTLC): внутриигровые сообщения мода автоматически переключаются на русский, если установлен русификатор (например, RTLC) или язык системы — русский; можно принудительно задать опцией
Language. Счётчик[N]в hover-тексте не зависит от языка и дописывается к тексту, который уже перевёл RTLC. - Авторитет хоста в мультиплеере: конфиг синхронизируется от хоста к клиентам, эффекты применяются только под авторитетом хоста — без клиентского преимущества (соответствует правилам Thunderstore).
- Подробное логирование с реальными именами предметов для точной настройки.
Как это работает (тех. детали)
В актуальной Lethal Company заряд хранится не в GrabbableObject.batteryCharge, а в объекте insertedBattery (класс Battery):
insertedBattery.charge— текущий заряд, нормализован 0..1.itemProperties.batteryUsage— «ёмкость» в секундах: сколько предмет работает от полного заряда.
Поэтому мод:
- Ёмкость меняет через
itemProperties.batteryUsage *= N(больше → дольше работает). Оригинал кэшируется на каждыйItem-ассет, чтобы множитель не накапливался при переспавнах. - Разряд делает через
insertedBattery.charge = 0; empty = true.
Патчится GrabbableObject.Start() (Postfix) — он вызывается для всех предметов: покупок, лута и вещей на корабле, поэтому модовые предметы поддерживаются автоматически.
Лимит зарядной станции патчит ItemCharger.ChargeItem (использование засчитывается только при реальной зарядке предмета) и сбрасывает счётчик в StartOfRound.StartGame, если включён сброс по дням.
batteryUsageлежит в общемScriptableObjectтипаItem, поэтому множитель действует на все экземпляры данного типа предмета — что и требуется для «ёмкости типа».
Сборка
Требуется .NET SDK (8.0+). Из папки проекта:
dotnet build -c Release
Игровые сборки и BepInEx подтягиваются из NuGet автоматически (через LethalCompany.GameLibs.Steam), путь к игре указывать не нужно. Результат:
bin/Release/ExhaustedBatteries.dll
Установка
- Установите BepInEx 5 для Lethal Company.
- Скопируйте
ExhaustedBatteries.dllвLethal Company/BepInEx/plugins/. - Запустите игру один раз — создастся
BepInEx/config/ExhaustedBatteries.cfg. - Настройте конфиг (см.
ExhaustedBatteries.cfg.example).
Настройка
Секция [IndividualMultipliers] заполняется автоматически. Чтобы увидеть точные имена предметов (включая модовые), включите VerboseLogging = true и посмотрите консоль BepInEx — там для каждого предмета печатается itemName и имя класса. Любое из этих имён можно вписать ключом (регистр, пробелы и дефисы не важны).
Мультиплеер (авторитет хоста)
Конфиг синхронизируется от хоста. При входе в лобби клиент запрашивает настройки хоста по сети (named messages Unity Netcode — без своих NetworkObject, поэтому лобби не крашится) и применяет их локально; эффекты мода работают только когда есть синхронизация или когда ты сам хост. То есть клиент не может дать себе преимущество в чужом лобби — как того требуют правила Thunderstore для Lethal Company.
Если у хоста мода нет — на твоей стороне игровые эффекты не применяются. Мод желательно поставить всем; играете по конфигу хоста. Language и VerboseLogging остаются локальными (не синкаются).
Совместимость
- Ванильные предметы: Flashlight, Pro-flashlight, Walkie-talkie, Jetpack, Boombox и др.
- Модовые предметы: поддерживаются автоматически (по имени/классу).
MapperиGeigercounterобъявлены заранее.