Lethal Company
You are viewing a potentially older version of this package. View Latest Version
Install with App

Details

Date Uploaded
Downloads
2.2K
Size
137KB

BaconFixer

Fixes for big Lethal Company modpacks, in one mod. It changes nothing on the network, so players can use it without everyone in the lobby having it.

Mods it fixes

Each entry says what goes wrong, why, and how to see it yourself. Versions are the ones tested on game v81. If a mod has been updated since, its problem may already be gone.

To compare, disable BaconFixer in your mod manager, launch and follow the test, then enable it and repeat. Log lines are in BepInEx/LogOutput.log in your profile.

MrovLib 0.4.15, shown by TerminalFormatter 0.3.9: $0 store prices

  • Affects: LethalLevelLoader unlockables, such as items from Farming and Cooking Mod by MelanieMelicious, and Magic sphere from Wesley's Moons.
  • Why: MrovLib reads the price from the item's info node, which is often $0. BaconFixer uses the real price from the buy node.
  • Test: Host a lobby and type store in the terminal. Without BaconFixer these items show $0. With it they show their real price, and the log has Fixed store price for 'Magic sphere': $140.

loaforcsSoundAPI.LethalCompany 1.0.2: DunGen load errors

  • Why: It still looks for DunGen inside Assembly-CSharp, but the game moved DunGen to DunGen.dll. Its dungeon name condition throws during AudioSource.Play, which interrupts ambient sounds. BaconFixer forwards those types to DunGen.dll in memory, and game files on disk are not changed.
  • Test: Land on a moon. Without BaconFixer the log has RoundManagerPatch::Reporting(). Error: System.TypeLoadException. With it that error is gone, and the log has Forwarding 133 DunGen types from Assembly-CSharp to DunGen.dll.

DunGenReferenceFixer 0.0.1: loading crash

  • Why: Its native hook rewrites a Unity function, MonoManager::GetMonoClassWithAssemblyName, on every call with no lock, so two loading threads can collide and crash the game. BaconFixer's forwarders answer the same lookups, so that mod isn't needed. Remove it if you have it, because BaconFixer can't turn its hook off.
  • Test: This can't be triggered on demand. It was seen once in 51 launches, as an access violation at UnityPlayer.dll+0x7842E0, the function it hooks. If your log has Patched MonoManager::GetMonoClassWithAssemblyName(), the hook is still active.

LethalModDataLib 1.2.2: mod data not registering

  • Affects: Plugins that load after any plugin that failed to load, such as WesleysInteriorShenanigans inside Wesley's Interiors 5.0.19.
  • Why: It loops over every plugin, and a failed plugin aborts the loop, so plugins after it never register their mod data. BaconFixer skips failed plugins and carries on.
  • Test: Launch to the main menu with both installed. Without BaconFixer the log has a NullReferenceException from ModDataAttributeCollector. With it the log has ModDataFix: scanned N plugin(s), skipped 1 that failed to load.

LethalResonance 4.7.8, loaded by loaforcsSoundAPI 2.0.13: sound pack errors

  • Why: Its meltdown.json replaces sounds from FacilityMeltdown. Without that mod installed, SoundAPI logs errors on every launch. BaconFixer stops those errors, and your sounds stay the same.
  • Test: Launch without FacilityMeltdown. Without BaconFixer the log has 2 fail(s) while loading for meltdown.json, and Mapping: '#FacilityMeltdown:warning_voice' has not been found. With it those lines are gone.

Wesley's Interiors 5.0.19 and Wesley's Moons 7.0.18: duplicate prefab errors

  • Why: Several of their bundles ship the same prefab, such as Gastank. Netcode keeps the first copy and logs an error for the others. BaconFixer keeps the same result without the error.
  • Test: Launch to the main menu. Without BaconFixer the log has NetworkPrefab (Gastank) has a duplicate GlobalObjectIdHash source entry value of: 298664861!. With it the log has Skipped duplicate network prefab 'Gastank' (hash 298664861).

TerminalUtils 0.0.18 and WeatherRegistry 0.8.8: terminal stutter

  • Why: They call HarmonyX's AccessTools.TypeByName, which can scan every type in every assembly. BaconFixer caches the results.
  • Test: In a big pack, type moons or store for the first time after launching. Without BaconFixer it stalls for 1-2 seconds the first time. With it there is no stall.

Chameleon 2.4.6 with Wesley's Interiors 5.0.19: Spooky Manor windows

  • Why: Spooky Manor is built from the manor's tiles, including its fake windows, but Chameleon only sets windows up in the vanilla manor. In Spooky Manor they always show the default pasture view and stay on when the power goes out. BaconFixer runs Chameleon's window setup there too, so they follow its window lists and PowerOffWindows.
  • Test: Land on a moon with a different window list, such as Rend, when Spooky Manor generates, and find a room with windows. Without BaconFixer they show the default view. With it they show that moon's view, and the log has Cached window tile instance.

Base game v81, RoundManager: dark interiors

  • Why: An interior can destroy a light after the game has built its light list. The loop that switches lights then throws, so later lights keep their old state and part of the building can stay dark. BaconFixer removes destroyed lights from the list before each step.
  • Test: This needs an interior that destroys a light, and most don't. Without BaconFixer the log has a NullReferenceException with RoundManager+<turnOnLights> in its stack. With it that error is gone.

Big modpacks: game freezing on quit

  • Why: The cause isn't known yet. The game can stop during its final shutdown, after every mod's quit code has run, leaving a frozen window until you end the process. With about 100 mods it happened on 2 of 6 quits after landing on a moon, and never on quits without a landing.
  • What BaconFixer does: This doesn't fix the cause. If the game is still running 15 seconds after you quit, BaconFixer closes it. A normal quit finishes first, so the timer never fires. It closed a freeze forced on purpose in testing, but a natural freeze hasn't happened with it yet.
  • Test: This can't be triggered on demand. After a frozen quit, Player.log in %USERPROFILE%\AppData\LocalLow\ZeekerssRBLX\Lethal Company stops after Input System module state changed to: Shutdown., with no Memory Statistics: line. With BaconFixer the window closes by itself within 15 seconds.

Terminal additions

Both need WeatherRegistry.

  • Moons list and route pages (needs TerminalUtils): weather shows its bonuses, such as Eclipsed $+35% loot+15%. $ is scrap value and loot is scrap amount.
  • Route confirm page (needs TerminalFormatter): a SCRAP BONUS line and a DANGER line that explain the weather.

Limits

Fixes for other mods check that those mods are installed, and skip themselves if they are not.

Different prefabs that share a hash still spawn as the first one registered, because a real fix needs every player's game to agree. BaconFixer logs a warning for these, such as Network hash 3155849242 is shared by 'GASteelDoorMapModel' and 'SteelDoorMapModel2'.

Two log messages remain. DawnLib logs Couldn't match DestroyItemInSlot when DestroyItemInSlotFix is installed, which JLL's package does, though that mod fixes the same bug. WesleysInteriorShenanigans, inside Wesley's Interiors, warns that it could not be instantiated. It was built for an older game version and stays off on purpose.

Feedback

Found a bug, or know a mod BaconFixer should fix or support? Message me on Discord: bac_kun.

AI disclosure

The code and this README were generated with Claude Code, Anthropic's AI coding agent. The author directed the work and tested the mod in game.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.