Latest versions of MelonLoader are known to have issues with some games. Use version 0.5.4 until the issue has been fixed!
LootDropBugfix
Fixes bug where dropped loot sometimes does not spawn.
Last updated | 4 months ago |
Total downloads | 2595 |
Total rating | 0 |
Categories | Code Mods |
Dependency string | jakzo-LootDropBugfix-2.1.0 |
Dependants | 0 other packages depend on this package |
README
Fixes bug where dropped loot sometimes does not spawn.
Why does the bug happen?
LootTableData.GetLootItem
returns uses UnityEngine.Random.RandomRange(0, 100)
to get a random percentage and returns the loot item at that percentage point (eg. if there are 10 items with 10% chance each, a random number of 42 would return the 4th item). They do this by iterating through each item then doing if (lower < n && n <= upper) return thisItem;
however this logic will never return any item if the randomly generated number is 0 because lower
starts at 0 and 0 is not less than 0.
There are a couple of issues and likely misunderstandings of RandomRange
by whoever wrote the code because:
RandomRange(0, 100)
returns an integer not a float- The loot table uses floats for item chances in the loot table so a non-integer chance for an item will not make a difference
RandomRange(0, 100)
can return 0 but not 100- The logic uses
n <= 100
for the last item in the loot table but n will never be 100, meaning the last item has a slightly lower chance than the others - Eg. for 10 items with 10% chance each the first item would be returned for n = 1 to 10, second for n = 11 to 20, etc. so 10 values of n each until the last item which only has n = 91 to 99
- The logic uses
SLZ finally fixed the loot drop bug in patch 4 of Bonelab but they did this by changing the lower bound of the random number from 0 to 1, so the issues listed above still remain.
Installation
- Make sure Melon Loader version 0.5.4 is installed in Boneworks
- Download the mod from Thunderstore (click on "Manual Download")
- Open the downloaded
.zip
file and extractMods/LootDropBugfix.dll
intoBONEWORKS/Mods/LootDropBugfix.dll
which is usually at:- Steam:
C:\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS
- Oculus:
C:\Program Files\Oculus\Software\Software\stress-level-zero-inc-boneworks
- Steam:
Links
- Source code: https://github.com/jakzo/SlzMods/tree/main/projects/Boneworks/LootDropBugfix
- Thunderstore: https://boneworks.thunderstore.io/package/jakzo/LootDropBugfix/
Changelog
2.1.0
Added back the fix to stop destructibles being destroyed before level start.
2.0.1
Fixed a silly mistake I made in the algorithm which I didn't detect because I was testing on ammo boxes. 🤦
2.0.0
Found the actual source of the bug and rewrote the mod to patch the broken method. Experimentally verified by breaking 8k+ ammo boxes with a script (included in this mod under the test
configuration option).
1.3.0
Items are now indestructible before load finishes (to prevent the bonebox in Runoff breaking). Also adds a setting to test ammo drops (continuously teleports ammo crates to the player and breaks them until a loot drop bug is encountered).
1.2.0
Fixes. Everything should work now.
1.1.3
Fix spawning replacements
1.1.2
Handle loot spawning before loading finishes.
1.1.1
Fix bad loot chance calculation.
1.1.0
Make replacement items saveable and log warnings on replacement.
1.0.0
Initial release.