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.
WeightsRebalanced
Customize item weights in kg with working multiplayer sync, global/category multipliers, presets, hot reload and unit selection.
CHANGELOG
Changelog
All notable changes to Weights Rebalanced will be documented in this file.
[2.1.0] - 2026-07-05
New Features
- Global Weight Multiplier - one slider scaling all item weights at once
- Per-Category Multipliers - separate multipliers for Scrap / Equipment / Store / Modded items
- Display Unit selection - HUD weight counter can show Kilograms, Pounds (vanilla) or Both
- Weights of 0 kg are now allowed (vanilla weightless items like the flashlight stay weightless)
Fixed
- Multiplayer sync never actually fired - the host only tried to sync 2 s after StartOfRound.Start (before any client is connected) and never subscribed to OnClientConnectedCallback. Clients now receive weights the moment they connect, including late joiners.
- Sync broke after the first lobby - the message handler was registered once per game session, but Netcode recreates CustomMessagingManager on every StartHost/StartClient. It is now re-registered for each session.
- Client configs were overwritten on disk by the host's weights - synced values are now kept in a runtime-only override table; the local config file is never touched, so nothing can be lost on crash.
- Wrong kg conversion factor - the game displays (carryWeight - 1) * 105 lb; the mod used * 100, so all displayed/configured weights were ~5% off from vanilla. Now uses the exact vanilla factor.
- Changing the weight of a held item corrupted carry weight permanently - the game subtracts the CURRENT item weight on drop; the mod now adjusts every holder's carryWeight by the delta when weights change mid-game.
- Modded item detection never worked - item.GetType().Assembly is always the vanilla assembly. Modded items are now detected through LethalLib's registration lists via reflection.
- Presets were saved with the system locale (e.g. "12,5" on Polish systems) making them non-shareable - now always invariant culture, with backward-compatible parsing.
- HUD weight is now updated by a postfix on HUDManager.UpdateWeightCounter (the only place vanilla writes "lb") instead of patching HUDManager.Update every frame.
- HUD value is derived from the real carryWeight, so dead bodies and other mods' weight changes are displayed correctly.
- Removed dead code: scan-node lb->kg patch (scan nodes never show lb and used the wrong UI type) and the DisplayNewScrapFound patch.
Technical
- Built against BepInEx 5.4.23.5
- Weight application centralized in WeightApplier with original-asset-weight tracking
[2.0.1] - 2026-01-10
- Fixed manifest
[2.0.0] - 2026-01-09
Major Features
- Multiplayer Synchronization - Host-to-client weight sync via Unity Netcode
- Automatic sync on client connect
- Late joiner support
- Hot reload broadcasts to all clients
- Original config restoration on disconnect
- Dynamic Item Detection - Removed hardcoded item lists
- Assembly-based vanilla vs modded detection
- Automatic categorization (Scrap/Equipment/Store/Modded)
- Works with any mod without updates needed
- Preset System - Save and load weight configurations
- Save current weights as preset
- Load vanilla weights preset
- Import/export for sharing with friends
- Simple text format for easy editing
- Hot Reload - Change weights mid-game without restart
- Config watcher monitors changes
- Updates all active items in real-time
- Broadcasts to clients if host
Improvements
- Config Validation - All weights clamped to 0.1-500 kg range
- Enhanced Descriptions - Config shows vanilla weight and valid range
- Safety Helpers - Comprehensive error handling and validation
- Optimized HUD Updates - Cached inventory hash reduces CPU usage
- Performance - Event-based patching with Update fallback
LethalConfig Integration
- New buttons:
- Save Current as Preset
- Load Vanilla Weights
- Network Sync Status
- Diagnostic: Print Item Detection
- Updated slider ranges with validation
- Real-time updates without restart
Technical
- Added
ConfigValidator.cs- Weight validation system - Added
SafetyHelpers.cs- Error handling utilities - Added
ItemDetection/namespace:ItemClassifier.cs- Vanilla/modded detectionCategoryDetector.cs- Item categorizationDiagnosticCommands.cs- Debug tools
- Added
Presets/PresetManager.cs- Preset management - Added
HotReload/ConfigWatcher.cs- Real-time config monitoring - Added
Networking/namespace:WeightSyncManager.cs- Multiplayer synchronization
- Added
Patches/NetworkPatches.cs- Network event hooks - Improved
Patches/WeightPatches.cs- Optimized HUD updates
Bug Fixes
- Fixed HUD showing "lb" instead of "kg" in all scenarios
- Fixed potential null reference exceptions
- Fixed item validation edge cases
- Fixed network sync timing issues
Removed
- Hardcoded vanilla item lists (42 scrap, 17 store, 3 equipment items)
- Update-only HUD patching (replaced with hybrid approach)
[1.0.0] - Initial Release
Features
- Customize item weights in kilograms
- Per-item configuration
- LethalConfig integration (optional)
- Weight display in kg instead of pounds
- Basic item categorization
Note: Version 1.0.0 was the initial internal release. Version 2.0.0 is the first public Thunderstore release with major enhancements.