
PersonalLoot
Test build: identical personal loot from enemy corpses and world chests, including lootable bosses and boss reward chests.Personal Loot — test build 0.1.1
A separate mod for Outward Definitive Edition (Steam, default-mono). Each player gets their own copy of the same original loot. Taking an item does not remove another player's copy.
Changes in 0.1.1
Addresses the reported empty client loot window by replacing Unity JSON messages with explicit Photon string-array packets. Each response carries an item count; truncated lists are rejected rather than silently shown empty. Successful responses display their entry count. Requests, received messages, and host replies now log their request IDs and item counts in BepInEx/LogOutput.log. Failed sends and incompatible responses display errors.
This is a candidate fix: the original failure was not reproduced in a live multiplayer session. The new packets pass round-trip tests through the installed game's Photon serializer. Confirm with two computers before relying on it in a campaign.
Upgrade every player, including the host, to 0.1.1 and restart the game. Disable/remove the older PersonalLoot entry first if r2modman lists it under another author (for example Greeeny); enable only one copy. The network format changed, so 0.1.0 and 0.1.1 must not be mixed. Keep BepInEx/config/PersonalLoot; existing claims remain compatible.
If a client still has no rows, compare the host and client log lines for the same request ID. Share both BepInEx/LogOutput.log files and the exact popup text. Do not delete the claim ledger to troubleshoot networking.
How it works
Open a lootable enemy corpse or a world treasure chest normally. A Personal Loot window appears over the inventory. Click Take beside an item or silver entry. Items are delivered to that character's pouch, including their stack quantity and serialized item properties. Click Close or press Escape when finished. Mouse controls are required for this first window implementation. Only one local personal-loot window is open at a time.
World treasure chests, lootable mob corpses, lootable boss corpses, and boss reward treasure chests are covered. Player bags, player corpses, house stashes, legacy chests, merchants, and special crafting containers keep their normal behavior. Quest rewards and loose items lying on the ground are outside this mod's scope. A boss that has no corpse loot or reward chest does not gain invented drops.
The host retains the original contents as a common source and creates an individual item for each claim. Items already removed before installing the mod cannot be recovered. Late joiners can claim their own copies while the original corpse or chest still exists. New skinning drops can be added to a corpse's snapshot. The same type of loot with a new game item identity after a world reset is treated as new loot.
Install with r2modman
- Close Outward. Select your Outward Definitive Edition profile.
- Open Settings → Import local mod and select
Local-PersonalLoot-0.1.1.zipwithout extracting it. - Install the same version on the host and every other player's computer. Keep BepInEx enabled.
- Launch with Start modded. Personal Loot is independent of Կյաժ Power; both may be enabled.
SideLoader and Loot_Manager are not required. The network event code defaults to 182, separate from Կյաժ Power's 181. If another mod uses 182, change Network / EventCode in BepInEx/config/local.personal_loot.cfg to the same unused value from 1–199 on every computer, then restart.
Save data and first-test limits
The host stores personal claim records in the profile's BepInEx/config/PersonalLoot folder, one XML file per host character, plus a .bak copy. Keep these files when sharing or backing up the host's profile. The file records each player's character ID, the original source/item IDs, serialized loot, and completed or pending claims.
Normal closing/reopening and loading the same claim file preserve remaining loot. Inventory delivery and these claim files are not one atomic game-save operation: a crash or restoring an older game save without matching claim data can leave a claim recorded without its item in the restored inventory. Back up the test character saves and this folder together before the first co-op test. Do not treat this first build as validated for an established campaign.
Original source contents stay in the world. If you uninstall Personal Loot, vanilla shared looting can expose those originals again. All participants must have the mod enabled to avoid mixing personal and shared looting.
Items containing nested inventories, mod-specific item behaviors, simultaneous split-screen interactions, unusual boss loot scripts, and chest resets still need in-game verification. The code copies serialized item fields, but does not recursively copy contents of nested bags/containers.
Loot_Manager and compatibility
GymMed's Loot_Manager lets mods assign enemy loot and make unique enemies lootable. It does not describe per-player inventories. Personal Loot captures the contents present when opened, so it is designed to include drops another mod has already added. Compatibility with Loot_Manager is not yet runtime-tested; no Loot_Manager code is bundled. Mods that multiply or auto-collect loot may alter this behavior.
References checked:
Validation
The DLL compiles against the installed Definitive Edition game and BepInEx 5.4.19. Twelve automated ledger checks cover distinct player claims, repeated requests, different sources, new loot identities, save/reload, pending-delivery identities, XML and Unicode preservation, backup creation, and refusing corrupt claim files. Ten additional network checks exercise requests, complete item lists, Unicode, quantities, silver, error replies, malformed packets, and exclusion of host save data through the installed Photon serializer. Gameplay and multiplayer item delivery have not been executed by the developer in a running game.
Suggested first co-op check:
- Both players open the same freshly generated chest and compare item names, quantities, and silver.
- Player A takes an item. It should disappear only from A's personal window and appear once in A's pouch.
- Player B takes the same item. B should receive a separate copy.
- Close/reopen, save/reload, and reconnect. Claimed entries must remain absent for the corresponding character.
- Repeat with a mob corpse and a boss corpse or reward chest. Check silver and durability/enchantments.
- Verify a normal chest respawn creates new loot and that skinning additions do not restore previously claimed entries.
Check BepInEx/LogOutput.log for Personal Loot if a source cannot load or an item stays pending. A missing host response shows an explicit message in the loot window.
Build and tests
Install a .NET SDK. Build.ps1 reads game and BepInEx assemblies from the specified local installation; it does not redistribute them or install the plugin. It accepts -GameDirectory and -ProfileDirectory overrides. The compiled DLL appears under package/BepInEx/plugins/PersonalLoot.
Test.ps1 runs the standalone ledger tests using the .NET Framework 4.7.2 reference assemblies. Use -OutputDirectory to select where test artifacts are written.