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.
SharedUpgradesPlus
Host-only shared upgrades for R.E.P.O. Chance-based sharing, late join sync, modded upgrade support. Alternative to SharedUpgrades and BetterTeamUpgrades.
| Date uploaded | 2 days ago |
| Version | 1.6.0 |
| Download link | Vippy-SharedUpgradesPlus-1.6.0.zip |
| Downloads | 19946 |
| Dependency string | Vippy-SharedUpgradesPlus-1.6.0 |
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.2305README
SharedUpgradesPlus
Share upgrades with your whole team in R.E.P.O.
HOST ONLY. Only the host needs this installed. Your friends play completely vanilla.
A note from Vippy
After way too long of a break, I'm finally back and working on these again :D Every one of my mods just got a full pass: bugs fixed, reports read, a few things I'd always meant to do. New builds and fixes land in Vippy's Discord before they hit Thunderstore, so come hang out. Thanks for sticking around.
Features
- Chance-based sharing. Set a % chance for upgrades to be shared. Roll it per teammate, or once per purchase so the whole team gets the level together. 100% for full team sharing, lower if you want it to feel earned.
- Shared upgrade limiting. Cap how many times a given upgrade type can be redistributed to the team without limiting how high any one person can take it.
- Per-upgrade toggle. Enable or disable sharing individually for each upgrade type in the config file.
- Late join sync. Players joining mid-run or between runs (with ReturnToLobby) receive the team's upgrades automatically. Loading a save catches up anyone the save file has nothing for, which is what keeps a lobby return from leaving people behind.
- Price scaling. Optional, off by default. One purchase kits out the team, so the shop can charge for the copies. See
ScalePriceWithSharingbelow. - Vanilla and modded upgrade support. Works with MoreUpgrades and other upgrade mods out of the box.
- Auto-discovery. Picks up new upgrades automatically, won't break when R.E.P.O. ships new ones.
Config
General
| Setting | Default | Description |
|---|---|---|
| EnableSharedUpgrades | true |
Enable or disable all upgrade sharing |
| SharedUpgradesChance | 100 |
Percent chance per upgrade level to be shared with each player |
| SharedUpgradesChanceMode | Each player |
Roll the share chance per teammate, or Whole team to roll once per purchase so the whole team gets the upgrade or nobody does |
| LateJoinSync | true |
Sync upgrades to players who join mid-run, and to anyone a loaded save has nothing for |
| EnableModdedUpgrades | true |
Sync upgrades added by other mods |
| AvoidMoreUpgradesDoubleShare | true |
When MoreUpgrades is set to team-share one of its own upgrades, leave that one to it instead of sharing it a second time |
| ScalePriceWithSharing | false |
Charge for the copies: an upgrade in the shop costs more the more teammates it would go out to |
| PricePerExtraCopy | 100 |
Percent of the base price added per teammate who would receive the upgrade, 0 to 300. Only used when ScalePriceWithSharing is on |
| LogLevel | Off |
How much goes in the log: key events only, per-player results (Debug), or the full trace (Verbose) |
Effects
| Setting | Default | Description |
|---|---|---|
| EnableSharedUpgradeHeal | false |
Heal players to full HP when receiving a shared health upgrade |
| EnableShareNotification | true |
Visual effect when upgrades are shared with you |
Per-Upgrade (one entry per upgrade type, auto-generated)
| Setting | Default | Description |
|---|---|---|
| [Upgrade Name] | true |
Enable sharing for this upgrade |
| [Upgrade Name] Share Limit | 0 |
Others won't receive this upgrade past this level (0 = unlimited) |
Supports REPOConfig for live in-game config changes without restarting.
How price scaling counts
With ScalePriceWithSharing on, an upgrade's shop price becomes base * (1 + PricePerExtraCopy% * recipients). recipients is how many teammates that one purchase would hand a copy to: every player who would receive the upgrade under your config (its per-upgrade toggle is on, they are under its share limit, SharedUpgradesChance is above zero), minus one for whoever ends up buying it.
Below 100% share chance the count is still everyone who could receive it, not a roll. The shop has to put a single number on the item before anyone touches it, so a price that rolled the dice would be a lie half the time. The shelf re-prices if someone joins or leaves while you're in the shop.
Turned off, the mod does not touch shop prices at all.
Standing on the shoulders of giants
Mods like SharedUpgrades and BetterTeamUpgrades showed the community what shared upgrades could be. SharedUpgradesPlus builds on that foundation.
Maintenance
SharedUpgradesPlus is feature complete as far as I'm concerned. I'm not planning new features but I'll keep it maintained, so if you run into a bug or have a feature idea that makes sense, open an issue on GitHub and I'll take a look.
Come hang out
I'm Vippy. I make R.E.P.O. mods and I read every bug report.
| Vippy's Discord | Test builds land here before Thunderstore, you get a say in what comes next, and it's the fastest way to get a bug fixed. Come say hi. |
| GitHub Issues | Bug reports and ideas that deserve a paper trail. |
| R.E.P.O. Modding Server | The whole modding scene, not just me. |
| This mod in the modding server | Its #released-mods thread. |
| More of my mods | Everything else I've made for R.E.P.O. |
Keep the mods coming
Everything I make is free and stays free. Two ways to help if you feel like it, neither one expected:
- Ko-fi: buy me a coffee and your name goes on the supporters list in my Discord. Every coffee buys another evening on the next update.
- BisectHosting: hosting a server for Minecraft or anything else your crew plays? Code
vippytakes 25% off, and I get a cut at no cost to you. It's where my own servers live.
CHANGELOG
1.6.0
- New: Price scaling.
ScalePriceWithSharingmakes an upgrade in the shop cost more the more teammates it would go out to, since one purchase kits out the whole team.PricePerExtraCopysets how much, as a percent of the base price per teammate: at the default 100, an upgrade going to three teammates costs four times base. Off by default, so nothing changes unless you turn it on. The count is who could receive it under your config (per-upgrade toggle, share limit, share chance above zero), not a roll, because the shop has to name one price before anyone buys. It leaves out one player for whoever ends up buying it, and it re-prices the shelf if someone joins or leaves while you're in the shop. Host only, like everything else here. - Fixed: Upgrades desyncing after a return to the lobby without a save. Loading a save overwrites the levels of everyone in the file and leaves everyone else at zero, so anyone who joined after the last save came back with nothing while the rest of the team kept their upgrades, and nothing put them back. A save load now re-queues the room and catches up the players the save has nothing for. Players the save does know are left alone, so a teammate who is behind on purpose under a share chance doesn't get a second run at the team's max. Thanks to TooRed2025 for the report.
- Fixed: Hosting on a copied save (someone else's saves folder) left the host with no upgrades while clients got them fine. The save keys every level by steamID, so a non-owner host's own steamID is empty and vanilla loads nothing for them. Late join sync only ever caught up other players, never the host. The host is now part of the same save-load catch-up, and its catch-up is exact rather than rolled, so it mirrors the save the way an owner-host would instead of getting a random fraction. When the original owner hosts it's a no-op.
- Fixed: MoreUpgrades double-share avoidance missed any upgrade MoreUpgrades had imported from REPOLib, so those went out twice. It also matched too loosely in the other direction: a third-party upgrade whose name ended with one of MoreUpgrades' own (
Map Zoom PlusagainstMap Zoom) got skipped for no reason.
1.5.1
- Attention: Chance mode. If you changed the
SharedUpgradesChanceModesetting, in this update you will need to change the setting again. - New: MoreUpgrades double-share avoidance. MoreUpgrades can team-share its own upgrades (its per-upgrade
Allow Team Upgrades/Sync Host Upgradestoggles). When it does, we now leave those upgrades to it instead of sharing them a second time. On by default;AvoidMoreUpgradesDoubleShareturns it off if you really want double. - Added Herobrine added himself.
1.5.0
- New: Chance mode.
SharedUpgradesChanceModedecides how the share chance is rolled.PerPlayer(default) rolls separately for every teammate, the way it always has.PerDistributionrolls once per purchase - the whole team gets the upgrade or nobody does. Late join respects the mode: underPerDistributiona joiner catches straight up to the team's totals instead of re-rolling per level.
1.4.3
- Fixed: Modded upgrades from MoreUpgrades 1.6.9, and anything else on REPOLib 4.x, stopped being shared. REPOLib 4.0 moved upgrade sync off
PunManager.UpdateStatRPConto its ownNetworkedEvent, so the oldUpdateStatRPCpostfix never fired. Detection now hooksPlayerUpgrade.SetLevelandApplyUpgradereflectively, which catches the new path on the host and every other client. - Fixed: Even when modded upgrades were getting through, distribution went via
UpdateStatRPCwhich moves the level number but doesn't invoke the upgrade's action. A shared Sprint Usage would show up in the recipient's stats panel but their stamina drain wouldn't change. Distribution now goes through REPOLib's ownSetLevel, which writes the level and runs the action on the recipient. - Fixed: Late-join sync no longer re-distributes the joining player's synced upgrades back to everyone else. The host's late-join write path now brackets itself with the same re-entry guard the real-time path uses.
1.4.2
- Fixed: Quieter startup.
RepoLibInteropwas usingHarmonyLib.AccessTools.Propertyto look up REPOLib'sPlayerUpgrade.UpgradeIdand the lookup failing (which the surrounding code already handles) was making HarmonyX log aCould not find propertywarning on every cold start. Switched to vanillaType.GetPropertywith explicitBindingFlagsso the lookup is silent. - Changed: README and CHANGELOG cleaned up. No code behavior change.
1.4.1
- Fixed: Modded upgrades weren't being detected on R.E.P.O. v0.4. The mod thought there were zero modded upgrades to share, so things like MoreUpgrades' Sprint Usage or Map Zoom silently never distributed. Discovery now picks them up correctly, and also reads REPOLib's API directly as a backup in case the key prefix changes again the way MoreUpgrades 1.6.7 did.
1.4.0
- Fixed: Modded upgrade sharing was snapping teammates to the host's full upgrade level instead of giving them the same +1 the host just bought. A friend with no magnet upgrades would jump straight to wherever the host happened to be sitting. Teammates now gain the same amount the host did, the way vanilla sharing has always worked.
1.3.3
- Updated: Rebuilt for R.E.P.O. v0.4. 1.3.2 will not load on v0.4. The stats container changed type internally (
DictionarytoSortedDictionary), which is a binary break even though the mod's source did not need to change - Note: v0.4 adds an in-world UpgradeStand kiosk and an auto-strip rule for stat keys prefixed
playerUpgrade*. If upgrades disappear or stand purchases don't sync, open an issue with your config and BepInEx log
1.3.2
- Fixed: Updated Late Join Sync functionality, it no longer has an arbitrary 12 second timeout. This was replaced with a patch that runs after each player is ready.
- Changed: Replaced Reflection usage around the code base with calls using the publicizer
1.3.1
- Fixed: Late join sync could give the joining player more upgrades than teammates had. Caused by the joining player's own save data inflating the team snapshot and a race condition with the game's stat initialization
- Added: Extensive logging, along with a toggle to increase or decrease logging
1.3.0
- Changed: Late join sync now simulates per-level chance rather than a single all-or-nothing roll. Late joiners receive a realistic spread instead of full upgrades or none
- Changed:
LateJoinSyncChanceremoved;SharedUpgradesChancenow applies to both real-time sharing and late join sync - Changed: Config sections consolidated into General and Effects for cleaner layout
- Changed: Updated README to be more consistent with naming - SharedUpgradesPlus
- New: Watermark displays the host's running mod version during debug testing
- Fixed: LateJoinSync rolls lower than 100% now adhere to share limiting
1.2.5
- New: Added toggle for enabling/disabling shared upgrade notifications for those running the mod
- New: REPOLib is now better supported, it's a soft dependency so it's not required but if users have upgrades using REPOLib it will grab them
- Changed: Player Upgrade Object Value and Object Durability from MoreUpgrades default to disabled, these are item upgrades and not technically player upgrades. Could have unintended consequences if enabled
- Fixed: Upgrade registry could persist stale data across runs
1.2.4
- Fixed: Modded upgrades weren't being shared when a non-host player bought them
- Fixed: Visual effects didn't play when receiving a shared modded upgrade
1.2.3
- New: Added toggle to heal the buyer when purchasing a health upgrade (off by default)
1.2.2
- Fixed: Health logic is more accurate now, no longer using stale values
1.2.1
- Fixed: Late-join strength race condition problem when playerUpgradeStrength doesn't contain the player's steamID
1.2.0
- New: Share limiting! Limit how many times each upgrade can be shared with others. Default is infinite
- Fixed: Late-join modded upgrade sync
1.1.4
- Fixed: Non-host player not healed when taking a health upgrade
1.1.3
- New: Upgrading health now heals other players
- New: Visual effect for each player, just like the player who used the upgrade
1.1.2
- Hotfix: Late join sync with some upgrades not always working if not initialized yet
1.1.1
- Fixed: Late Join Sync when combined with return to lobby mods
1.1.0
- New: Per-upgrade toggle, enable or disable sharing per upgrade type in the config file
1.0.3
- Fixed: Late join sync could apply upgrades at the wrong time
- Fixed: Watermark display font
1.0.2
- Fixed: Late join sync now snapshots team state the moment a player joins, making catch-up more reliable
- Fixed: RNG rolls were being wasted when upgrade sharing conditions weren't met
1.0.1
- Fixed: Improved compatibility with latest BepInEx release
1.0.0
- Initial release
