ExponentialItemsReloaded
Items stack exponentially. 1 → 2 → 4 → 8 → chaos.Exponential Items Reloaded
What it does
Configurable exponential item grants on authoritative inventory pickups:
effectiveGrant = Clamp(vanillaCount * LinearPickupMultiplier * ExponentialBase ^ stacksBeforePickup, spareRoomUnderCap).
Blacklist / whitelist entries only change how the count is evaluated — loot tables, printers, chests, director cards, etc. never change.
Classic pacing with defaults: pickups grow like 1 → 2 → 4 → 8 → ….
Artifact
Registers Artifact of Exponents. When RequireArtifact is enabled (default), the math only engages while this artifact is on for the run (server-checked).
Set RequireArtifact = false to mirror always-on cheat-style profiles.
Build (source in this repo)
References BepInEx core and R2API from your Thunderstore profile’s BepInEx\plugins siblings (nested R2API.Core.dll paths). References RoR2 itself from Ro2ManagedDir=…\Risk of Rain 2_Data\Managed.
Thunderstore zip (one command)
From PowerShell inside this repo:
.\BuildAndZipThunderstore.ps1 -Ro2InstallDir "YOUR_STEAM_PATH\Risk of Rain 2"
You get CryptidLabs-ExponentialItemsReloaded-<version>.zip with manifest.json, README.md, optional icon.png, and plugins\ExponentialItemsReloaded.dll — suitable for uploading at Thunderstore – create package.
Or build manually:
dotnet build -c Release /p:Ro2ManagedDir="…\Risk of Rain 2_Data\Managed"
Key files:
| File | Responsibility |
|---|---|
Configuration/ModConfig.cs |
BepInEx ConfigEntry layout (Thunderstore-visible sections/order). |
Configuration/KeyValueListParser.cs / ConfigParser.cs |
Reusable parsers for delimited identifiers and Key=Value rows. |
Services/ItemConfigRegistry.cs |
Resolves textual identifiers against ItemCatalog, caches Dictionary<ItemDef,int>. |
Services/ExponentialGrantEvaluator.cs |
Multiplayer-safe grant math after blacklist / caps / artifact gates. |
Hooks/InventoryGrantPatches.cs |
Harmony prefix on Inventory.GiveItem(ItemDef,int) (single patch to avoid double-applying). |
Content/ExponentArtifact.cs |
ContentAddition.AddArtifactDef + LanguageAPI strings. |
Config tips
- Prefer
ItemDef.namevalues (e.g.PaulsGoatHoof,BoostSyringe,Feather) — not English pick-up text. - Unknown names log warnings and are skipped.
- Toggle
9_Debug.VerboseLoggingfor successful registrations, filter hits, and final grant traces. - Edits apply live (BepInEx
SettingChangedrebuilds cached dictionaries when the catalog is ready).
Credits
Original idea by Horse5333
Updated for modern RoR2 by mr.cleann__
