You are viewing a potentially older version of this package. View all versions.
Scorn_Dogs-LateGamePerformance-1.5.0 icon

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.

Date uploaded 2 days ago
Version 1.5.0
Download link Scorn_Dogs-LateGamePerformance-1.5.0.zip
Downloads 368
Dependency string Scorn_Dogs-LateGamePerformance-1.5.0

This mod requires the following mods to function

bbepis-BepInExPack-5.4.2121 icon
bbepis-BepInExPack

Unified BepInEx all-in-one modding pack - plugin framework, detour library

Preferred version: 5.4.2121

README

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):

  1. Install r2modman and set it up for Risk of Rain 2.
  2. Install BepInExPack from the online list.
  3. Use "Settings" > "Import local mod" and select this zip.
  4. Start the game through the mod manager.

Manual install:

  1. Install BepInExPack into the game folder.
  2. Copy LateGamePerformance.dll into BepInEx\plugins\LateGamePerformance\.
  3. If no plugin loads and the log reports a missing Newtonsoft.Json, put the official Newtonsoft.Json.dll (v12+) into BepInEx\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.RefreshCandidates TargetSearchGc
    BullseyeSearch.GetResults TargetSearchGc
    DamageNumberManager.SpawnDamageNumber DamageNumberBatch
    NodeGraphNavigationSystem.UpdateAgents NavPathBudget
    CharacterModel.OnSceneCameraPreRender ModelCameraPass

    Patches on CheckVisible and CheckLoS stay effective.

  • Run one item-sharing mod at a time. Sharing and ShareSuite both grant their own copy of a pickup, so together they give two. Sharing is off by default, so this only matters if you turn it on.

  • A mod that adds a postfix to Util.GetItemCountForTeam can apply its adjustment twice while a cached value lives. Turn off TeamItemCountCache in that case.

  • FixedTimeCatchup is a local setting, like a graphics option. In multiplayer each player runs their own value.

  • A larger HealthBarThrottle interval 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.

CHANGELOG

Changelog

1.5.0

  • The menus are rebuilt on the game's own interface. They now use the game's panel, font, and colors. Those come from the skin asset the game uses for its own screens. They also scale with the screen by themselves. The old fixed canvas is gone, and the pages stay the right size at any resolution.
  • Every page moved across: the settings page, the damage meter, the performance readout, and the stat point badge.
  • Stat points keep their own window, rebuilt on the game's interface. You spend points as you play, so they are not a setting. They do not sit inside the settings page. The badge and F3 open the window. The badge hides while the window is up.
  • The performance readout starts closed. Press F6 to show it. The log line still runs either way, so a long run leaves its record.
  • Settings show as proper controls: switches, sliders with a value, and a key binder that waits for a key press.
  • Money sharing has a scale. At 1 every player receives the full amount of every payment. That multiplies the group's buying power by the player count. Set it to 1 divided by your player count to match the split the base game uses.
  • Sharing is off by default now. It changes the balance of a run for every player in the game, so the host turns it on.
  • Fixed: the game saved intro_skip and splash_skip as on. Both carry the archive flag. The value went into the game's own config file. It stayed there after the mod was removed. A vanilla start with those switches on lands on the profile screen and loses character materials. The mod now writes them back to off before every save. The file always holds the vanilla value, and the game in play keeps the skip.
  • Only the host can spend stat points. Every machine kept its own count, and none of them reached the machine that runs the game. So a player who joined paid a point and got nothing. That player now sees the window, the level, and the points earned. The buttons stay off, and the reason shows on screen. The badge stays hidden there.
  • Fixed: a closed page still caught mouse clicks. A hidden canvas still answers the pointer. So the settings page and the stat point window kept taking clicks after they closed.

1.4.0

  • New: a damage meter. 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 stage, one over the last six seconds. A bar behind each row runs the full width for the player at the top. Everybody else gets a part of it. Minion damage counts toward the player who owns the minion. Press F5 to hide the table.
  • New: a performance readout. Frame time, frames per second, and the worst frame of the last ten seconds. Also the worst frame of the run, live character counts, and garbage collection. It writes a line to the log every thirty seconds as well, so a long run leaves a record. Press F6 to hide the panel.
  • New: cheaper character drawing. The camera walked over every character twice per frame, and measured hurtbox distances even for characters that draw nothing. Now it walks once and skips the measurement for anything off screen. The overlay scan, which reads about twenty-five buffs per character, runs on a frame stride instead of every frame. The hit flash stays exact.
  • Sharing: Void Fields, Simulacrum waves, and Scavenger bags no longer multiply. The base game drops one reward for each player, because players compete for them. So with sharing on, a group of four received four times what it should.
  • Sharing: equipment can now be shared as well. Off by default. The equipment it replaces drops on the floor next to its owner.
  • Sharing: a switch for printer, cauldron, and scrapper output. Off by default, because one player paid for it.

1.3.1

  • Fixed a boot failure caused by the intro skip. The game's own intro_skip switch changes to the title scene before startup is complete. That throw stopped the startup routine, which left the player on the profile creation screen and every character without materials. The skip now waits for the load to finish.
  • The logo screen is cut by default. It is safe now, and it no longer holds the boot after the load is done.

1.3.0

  • Replaced skill mastery with character stat points. Earn a point every few levels and spend it on health, regeneration, damage, attack speed, crit, armor, or move speed. Points can be taken back.
  • A badge shows on screen while points are waiting. Click it, or press F3, for a small window to spend them.
  • The sprint key reverses: you sprint by default and hold the key to walk.
  • All gold is shared now, including the kill gold the game used to split between players. This matches full item sharing.
  • The intro skip uses the game's own skip switches, so the ship cutscene no longer plays. The engine logo is cut short as well. The game's logo screen stays, because it covers save loading, and cutting it drops you on the profile creation screen. There is a switch for anyone who wants it anyway.
  • Settings live in the mod's own menu on F4. The Risk of Options dependency is gone.
  • The menu lists gameplay features only. Fixes and performance stay on.
  • Menus scale with the screen, so they stay readable above 1080p.

1.2.0

  • New: a settings menu. Press F4 in game. Install Risk of Options and the settings also appear in the game options screen.
  • Features switch on and off while the game runs. No restart.
  • Skill mastery levels now also raise that skill's damage and give armor.
  • Money sharing is on by default.

1.1.0

  • New: SkipIntro. The game boots straight to the title screen.
  • New: CritOverstack. Crit chance above 100 percent converts into extra crit damage.
  • New: BugFixes. Guards for seven vanilla exception sources.
  • New: Sharing. Item sharing with tier filters, optional money sharing. Host-side only.
  • New: EmptyChests. Spent chests, barrels, and multishops despawn.
  • New: AutoSprint. Sprint holds by itself while moving.
  • New: SkillMastery. Skill slots level up through use, for all survivors including modded ones.
  • Target searches now skip hurtboxes without a health component.

1.0.0

  • First release.
  • Eight patch groups: BuffStatsFilter, NavPathBudget, TargetSearchGc, DamageNumberBatch, RaycastThrottle, HealthBarThrottle, TeamItemCountCache, FixedTimeCatchup.