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.
LateGamePerformance
Performance for long runs plus intro skip, crit overstacking, bug fixes, item sharing, chest cleanup, auto sprint, a damage meter, and character stat points. In-game settings menu.
By Scorn_Dogs
| Last updated | a day ago |
| Total downloads | 189 |
| Total rating | 1 |
| Categories | Mods |
| Dependency string | Scorn_Dogs-LateGamePerformance-1.5.0 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
bbepis-BepInExPack
Unified BepInEx all-in-one modding pack - plugin framework, detour library
Preferred version: 5.4.2121README
LateGamePerformance
Performance, fixes, and quality-of-life for Risk of Rain 2. Every change comes from the game's own code.
Settings
Press F4 at any time. Pick a feature on the left. Set its values on the right. A switch takes effect at once, with no restart, and every change saves by itself. The page uses the game's own panel, font, and colors, and it scales with the screen.
Stat points have their own window. You spend them as you play, so they are not a setting. A badge appears on screen when you have points waiting. Click the badge, or press F3.
The page lists the gameplay features only. The performance fixes have no
downside and no effect on play, so they stay on. Click "Show fixes and
tuning" to see them, or edit the config file at
BepInEx/config/com.tim.LateGamePerformance.cfg.
The damage meter shows during a run. F5 hides it. The performance readout starts closed. F6 shows it. Its log line runs either way.
What it does
Eighteen independent patch groups. Each has an on/off switch in the
config file (BepInEx/config/com.tim.LateGamePerformance.cfg).
Seventeen are on by default. Sharing is off, because it changes the
balance of a run for every player in the game. Turn it on in the F4
page if you want it.
Performance
| Group | What it fixes |
|---|---|
| BuffStatsFilter | Bleed and poison stacks force a full stat recalculation on every tick. The patch skips that recalculation for buffs that do not touch stats. It keeps vanilla behavior while a player holds Growth Nectar. |
| NavPathBudget | The game ships a per-frame budget for AI path computation, but it never subtracts from that budget. A whole spawn wave computes paths in one frame every two seconds. The patch enforces the budget (default 4 per tick) and staggers repath timers. |
| TargetSearchGc | Target searches for missiles, drones, turrets, and AI allocate a list and several closures per call. The patch reuses buffers and removes the closures. Less garbage means fewer GC stutters. |
| DamageNumberBatch | Each damage number copies the data of every live number particle in and out. A large AOE hit makes that quadratic. The patch batches all numbers of a frame into one copy. Numbers can appear one frame later. |
| RaycastThrottle | Every moving AI fires up to three obstruction raycasts per physics tick. The game defines a 0.2 s interval for this and never uses it. The patch applies a 0.1 s interval (configurable). |
| HealthBarThrottle | Health bars rebuild every frame, because the game zeroes its own 0.1 s throttle on load. The patch restores a 0.05 s throttle. |
| TeamItemCountCache | Teleporter events scan every character in the run up to six times per frame for team item counts. The patch caches the counts for 0.25 s. |
| ModelCameraPass | CharacterModel.OnSceneCameraPreRender walks every character model twice per camera per frame. The first walk measures a distance to every hurtbox of every model, including models that draw nothing. The patch makes one walk, asks about renderer visibility first, and skips the measurement for anything off screen. The overlay scan reads about twenty-five buffs per model. The patch runs that scan on a frame stride instead of every frame. The hit and heal flash stay exact, because that color travels in the material property block. |
| PerfReadout | Frame time, frames per second, and the worst frame of the last ten seconds. Also the worst frame of the run, character and hurtbox counts, garbage collections per second, and heap size. On screen, and in the log every thirty seconds. |
| FixedTimeCatchup | One slow frame lets the engine run up to 20 catch-up physics ticks, which makes the next frame slower. That feedback loop is the endgame freeze. The patch clamps catch-up to 2 ticks during a run. The game slows down under extreme load instead of freezing. |
Fixes and quality of life
| Group | What it does |
|---|---|
| SkipIntro | The game boots straight to the title screen. No startup video. |
| BugFixes | Guards for vanilla code that throws exceptions during play. It covers menu tag profile reads, crosshair stock displays, and target searches on broken hurtboxes. It also covers tether VFX indexing, light cookie teardown, and two log-spam test states. |
| CritOverstack | Crit chance above 100 percent converts into extra crit damage. 150 percent chance gives a guaranteed crit at 1.5 times the normal crit bonus. |
| Sharing | Off by default. A player pickup grants the same item to every other player. Tier filters live in the menu. Lunar and void items are off by default. Gold works the same way. Every player gets the full amount of all gold. That includes the kill gold, which the base game splits between you. The mod can share equipment as well, and that is off by default. The equipment it replaces drops next to its owner. Printer, cauldron, and scrapper output stays private unless you ask for it. Void Fields, Simulacrum waves, and Scavenger bags drop no extra copies. The base game drops one reward for each player, because players compete for them. Sharing already gives everybody a copy. The host runs this feature. Other players need no mod. |
| EmptyChests | Opened chests, used barrels, and spent multishops despawn after a delay. Adaptive (roulette) chests stay for now. Scavenger bags stay by default. |
| AutoSprint | Your character sprints by itself while it moves. The sprint key reverses: hold it to walk. The vanilla direction rule stays, so characters without the any-direction flag do not sprint sideways or backward. After a skill that cancels sprint, a short pause lets the animation finish. |
| DpsMeter | A table on screen shows the damage each player did on the stage you are on. It also gives the share of the total. Two more columns show damage per second: one over the whole stage, one over the last six seconds. Every connected player has a row. Damage from drones, turrets, and other minions counts toward the player who owns them. F5 hides the table. The host and a player who joins both see the same numbers. The game already sends every damage event to every client. |
| StatPoints | Your character earns a point every few levels. Spend it on maximum health, regeneration, damage, attack speed, crit chance, armor, or move speed. Press F3 during a run, or click the badge, to spend points. Take them back at any time. You can set every value. It works with every survivor, modded ones included, because it raises the same base stats the game uses. Points last for the current run. Only the host can spend points. A player who joins still sees the window and the points earned, but the buttons stay off. A point spent on that machine would never reach the machine that runs the game. |
Requirements
- BepInEx 5 (BepInExPack for Risk of Rain 2)
No other mod is required.
Install
With a mod manager (recommended):
- Install r2modman and set it up for Risk of Rain 2.
- Install BepInExPack from the online list.
- Use "Settings" > "Import local mod" and select this zip.
- Start the game through the mod manager.
Manual install:
- Install BepInExPack into the game folder.
- Copy
LateGamePerformance.dllintoBepInEx\plugins\LateGamePerformance\. - If no plugin loads and the log reports a missing
Newtonsoft.Json, put the officialNewtonsoft.Json.dll(v12+) intoBepInEx\core\.
In multiplayer each player can run the mod on their own. The AI and pathfinding fixes act on the machine that hosts the game. The visual fixes act on each machine that has the mod.
Compatibility notes
-
The mod replaces five methods whole. Another mod that patches the inside of one of these methods loses its changes. Turn off the group named beside it if a conflict appears.
Method Group BullseyeSearch.RefreshCandidatesTargetSearchGcBullseyeSearch.GetResultsTargetSearchGcDamageNumberManager.SpawnDamageNumberDamageNumberBatchNodeGraphNavigationSystem.UpdateAgentsNavPathBudgetCharacterModel.OnSceneCameraPreRenderModelCameraPassPatches on
CheckVisibleandCheckLoSstay effective. -
Run one item-sharing mod at a time.
Sharingand ShareSuite both grant their own copy of a pickup, so together they give two.Sharingis off by default, so this only matters if you turn it on. -
A mod that adds a postfix to
Util.GetItemCountForTeamcan apply its adjustment twice while a cached value lives. Turn offTeamItemCountCachein that case. -
FixedTimeCatchupis a local setting, like a graphics option. In multiplayer each player runs their own value. -
A larger
HealthBarThrottleinterval slows the trailing damage bar. The range stops at 0.1 s for this reason.
Multiplayer
The ten performance groups change no damage, no spawn, no drop, and no networked decision. Path timing and raycast timing change only on the machine that simulates the AI (the host). Clients keep full vanilla behavior for all server-authoritative state.
Three groups do change play, and the host decides for the whole game:
| Group | Default | What the group changes |
|---|---|---|
Sharing |
off | Items and gold for every player. |
CritOverstack |
on | Crit chance above 100 percent becomes crit damage. |
StatPoints |
on | The stats of the host character. A player who joins cannot spend. |
Uninstall
Remove the mod at any time. This is safe.
The game keeps intro_skip and splash_skip in its own config.cfg.
Those two switches break a vanilla start if they stay on. The mod writes
them back to off before the game saves that file. The file always holds
the vanilla value.
Delete BepInEx\plugins\LateGamePerformance\. Delete
BepInEx\config\com.tim.LateGamePerformance.cfg as well if you do not
plan to return. Stat points last for one run and store nothing.