You are viewing a potentially older version of this package.
View all versions.
RoundsPatchworkPlus
Universal compatibility and stability patchwork engine for ROUNDS modpacks. Eliminates NRE cascades, Photon RPC errors, coroutine crashes, leaver desyncs, and mod conflicts.
| Date uploaded | a week ago |
| Version | 1.0.7 |
| Download link | naccel_inc-RoundsPatchworkPlus-1.0.7.zip |
| Downloads | 39 |
| Dependency string | naccel_inc-RoundsPatchworkPlus-1.0.7 |
This mod requires the following mods to function
BepInEx-BepInExPack_ROUNDS
BepInEx pack for ROUNDS. Preconfigured and ready to use.
Preferred version: 5.4.1901README
ROUNDS Patchwork Plus
ROUNDS Patchwork Plus is the all-in-one universal compatibility and stability patchwork engine for ROUNDS.
It silently intercepts, resolves, and suppresses hundreds of game-breaking crashes, NullReferenceExceptions, Photon network RPC desyncs, and coroutine failures common to heavily modded ROUNDS lobbies.
⚡ Key Features & Intercepted Crashes
- EveryonePicks + RoundsWithBots Simultaneous Bot Card Picking: Full integration for simultaneous card draft with bots.
- Eliminates the 25–45s screen freeze where bots took over the interactive draft loop (
IsLocalPlayer(bot) == true). - Bots pick simultaneously in the background with a realistic 1.0–1.8s delay using
RoundsWithBotsweighted AI (botCardPickerAI.PickCard), respecting category blacklists (NotForBots). - Updates the on-screen
PickBoardtoREADYin real time and automatically applies bot card upgrades viaModdingUtils.Utils.Cards.RPCA_AssignCard/ApplyCardStats.Pick.
- Eliminates the 25–45s screen freeze where bots took over the interactive draft loop (
- Menu Navigation Safety (
GoBack.Update): Prevents background menu cascade when pressingEscapeor gamepadAction2inside submenus. Only the currently focused menu page processes back actions, eliminating menu freeze locks. - StatRevealMod Precision & Vanilla Stat Preservation:
- Eliminates banker's rounding bug where fractional stat percentages such as
+0.5%or+12.5%were truncated to+0%or0. - Fixes vanilla reload time additions (
+0.25s,+0.5s) that were erroneously replaced with+0%. - Preserves original card author descriptions by returning
nullon unchanged stats instead of stamping+0%.
- Eliminates banker's rounding bug where fractional stat percentages such as
- RoundsWithBots Pathfinding NRE Spam: Silenced and safely guarded
AIPathfindModule.AttemptPathfindToTargetandUpdate(), stopping continuous hundreds-per-second log spam. - CosmicRounds StarMono VFX NRE: Fixed null reference in
StarMono.<Attack>b__0when projectiles are destroyed before frame 1 delayed VFX callbacks trigger. - Zero Hard Dependencies & Soft Detection: Completely modular architecture. Every patch operates in an isolated try-catch block and detects installed mods dynamically via reflection. If a mod is not present, its patch safely skips with zero overhead.
- RayHitReflect / CareenMono Collision Fixes: Eliminates 80+ frame NREs when projectiles hit walls or trigger reflection effects in
CosmicRounds. Dynamically initializes missingMoveTransformandProjectileHitreferences. - Photon RPC Network Desync Protection: Prevents
ProjectileHit.RPCA_DoHitcrashes from invalid/orphaned Photon view IDs (viewID == 0or missing target), preventing mid-match lobby freezes. - PCE SuperJumpEffect OnUpdate Protection: Stops 119+ frame NREs when dead or inactive players hold jump or trigger PCE card effects.
- Explosion Missing Spawner Guard: Automatically provides fallback spawner contexts for
Explosion.DoExplosionEffects(fixes 59+ explosion NREs). - MapTransition & PlayerManager Coroutine Safety: Intercepts coroutine exceptions during round end and map transition, cleanly terminating destroyed player movements (
yield break) without stalling the match. - Leaver & Disconnect Resilience:
- Prevents crashes in
RWF.AssignPlayerIDandSetPlayerSpriteLayer.Startwhen players disconnect mid-round. - Guards
EmpowerStopBlockObjectFollowandReloadTiggerOnDestroyfrom referencing deleted character stats. - Guards
UnboundLib.Utils.CardManager.DisableCardfrom null references on room left.
- Prevents crashes in
- ModdingUtils & Player.FullReset Protection: Hardens character reset logic across rounds.
📦 Compatibility
Works seamlessly with any mod combination:
- CosmicRounds
- Player-Customization-Extended (PCE)
- Rounds With Friends (RWF)
- EveryonePicks
- UnboundLib
- Cards+ / CardsPlusPlugin
- DemonicPact
- ModdingUtils
- Will's Wacky Cards (WWC)
- StatRevealMod
🛠️ Installation
- Install via r2modman or Thunderstore Mod Manager.
- Alternatively, place
RoundsPatchworkPlus.dll,manifest.json, andicon.pnginto your BepInEx plugins folder:BepInEx/plugins/naccel_inc-RoundsPatchworkPlus/
CHANGELOG
Changelog
[1.1.7] - 2026-10-27
Fixed & Improved
- StickFightMaps & MapsExtended 1.4.2 Compatibility (
MissingMethodExceptionFix):- Fixed 130+ repeated
MissingMethodException: void MapsExt.MapsExtended.OnPhotonMapObjectInstantiateerrors when spawning custom physics map objects (boxes, hinges, chains). In MapsExtended 1.4.2,OnPhotonMapObjectInstantiatewas replaced withAddPhotonInstantiateListener. Added a prefix patch onBossSlothPhysicsObject.Startthat dynamically invokes the modern listener, properly restoring box scaling and hinge physics.
- Fixed 130+ repeated
- DeckCustomization
NewGUINullReferenceException Guard:- Fixed
NullReferenceExceptioninDeckCustomization.NewGUIwhen UnboundLib GUI building runs on a destroyed or closed menu GameObject. Added null check and exception finalizer.
- Fixed
- ASK (Aidan Scyye Keyanlux)
RarityExceptionElimination:- Suppressed early
RarityExceptionduringASK.Main.Awakeand deferredCodRarity = RarityUtils.GetRarity("Call of Duty")toASK.Main.Start, ensuring all custom cards receive their rarity after RarityLib finishes registration.
- Suppressed early
- Inactive Bullet Coroutine Guard (
Bullet_Base(Clone)):- Added hierarchy active check in
ProjectileHit.AddPlayerToHeldto preventCoroutine couldn't be started because the game object 'Bullet_Base(Clone)' is inactive!when blocks or deflections trigger on disabled bullets.
- Added hierarchy active check in
- WillsWackyManagers 200 KB Curse Log Flood Silenced:
- Patched
CurseManager.CanDrawCursesConditionand disabledextremeDebugging = true, eliminating thousands of redundant console log lines per card draft.
- Patched
[1.1.0] - 2026-10-26
Fixed
- CPCCrafter
ProjHitPatch.PrefixNRE Elimination (400+ Crashes Silenced):- Fixed persistent NullReferenceException in
CPCCrafter.Patches.ProjHitPatch.Prefixwhen projectiles hit objects without aPlayercomponent (e.g. walls, crates, shields, destructible boxes). Added safety prefix and finalizer to safely pass through standard vanilla hit handling.
- Fixed persistent NullReferenceException in
- GameModeManager Hook Null Return Safety (
MapShffulerFix):- Fixed
[GAMESTART HOOK] [MapShffuler] threw exception: NullReferenceExceptioncaused byMapShffulerreturning(IEnumerator)nullon GameStart. WrappedGameModeManager.AddHookandAddOnceHookto safely substitute empty enumerators when any mod returns null from a hook.
- Fixed
- InfinityStones
GauntletVisualEffect.StartNRE Elimination:- Fixed NullReferenceException when
GauntletVisualEffect.Start()was triggered in the main menu or outside an active card pick phase with an unassigned player.
- Fixed NullReferenceException when
- Menu
Transform child out of boundsFix:- Added lightweight placeholder children during lazy card visual setup so
ToggleCardsMenuHandler.ChangeCardColumnAmountMenusandToggleCardsCategories.StartPostfixqueryingcardTransform.GetChild(2)never throw out of bounds.
- Added lightweight placeholder children during lazy card visual setup so
- RootCore & RarityMenu
KeyNotFoundExceptionGuard:- Added guards for
RootCore.Patches.ToggleCardsMenuPatchandToggleCardsMenuPatchNewto prevent crashes when the "Root" category is not present in category tabs.
- Added guards for
- RWF GameMode Namespace Correction:
- Corrected
RWF.GameModes.RWFGameModetype resolution for round transition hooks.
- Corrected
[1.0.9] - 2026-10-26
Added & Optimized
- Smart Bot Navigation & Teleport / Portal Awareness (
AIMovementModule):- Fixed an issue where Bot AI broke completely and bots stood frozen in place on custom maps featuring teleporters, portals, or disconnected platforms (e.g.
Root_Maps). - In vanilla
RoundsWithBots,AIMovementModule.PathfindPlayer()silently returned wheneverTargetNode == nullwithout issuing any movement or jump commands. Because the nav scanner only traces continuous walkable ground lines, bots failed to generate paths across portals or disconnected islands. - Implemented dynamic fallback navigation (
RunBotSmartFallbackNavigation):- Automatically discovers and caches active teleporter entrances (
Root_Maps.Scripts.Portaland custom map triggers). When opponents are unreachable via normal ground path, bots navigate directly into the nearest teleporter entrance. - Added dynamic obstacle raycasting: bots detect walls, ledges, and gaps and automatically jump to bridge voids.
- Implemented a stuck watchdog: if a bot's position remains static while trying to move for > 0.35s, it triggers un-wedge jumps and horizontal reverse hops.
- Automatically discovers and caches active teleporter entrances (
- Fixed an issue where Bot AI broke completely and bots stood frozen in place on custom maps featuring teleporters, portals, or disconnected platforms (e.g.
- Ultra-Fast Round & Point Transitions (Eliminates 5-Second Delay):
- Eliminated artificial transition lag between rounds and points in both
RoundsWithFriendsand vanilla:- Patched
RWF.UI.PlayerSpotlight.FadeInandFadeOut: capped fade durations from 1.0–1.5s down to 0.12–0.18s with zero delay, removing the lingering dark screen. - Patched
RWFGameMode.DoRoundStart&DoPointStart: ensured active players are marked ready (isPlaying = true), completely bypassing the multi-frame blocking wait loop. - Patched
PointVisualizer: accelerated point counter ball movements (timeToMove,timeToScale) by 2x. - Patched
MapTransition: accelerated map entrance animation curve from 0.8s down to 0.35s.
- Patched
- Transitions between rounds and points are now snappy and immediate.
- Eliminated artificial transition lag between rounds and points in both
[1.0.8] - 2026-10-26
Added & Optimized
- Instant Main Menu Loading & Lazy Card Visual Engine (Eliminates 30-60s Freeze):
- Fixed severe main menu freeze ("Not Responding") in large modpacks with 1,000+ cards caused by
ToggleCardsMenuHandler(UnboundLib) andCardSpawnMenuHandler(SandboxImprovements). - Previously, both menus fired at 0.5s after boot and synchronously cloned 2,000+ full card GameObject prefabs (complete with particle systems, audio, canvases, and physics) in a single blocking frame on the main thread.
- Implemented an intelligent lazy visual pipeline: card visual instantiation is deferred during batch menu initialization while the menu canvas or category containers are inactive. When a player actively opens a category or searches for cards, visuals are generated on demand frame-by-frame with zero UI stutter.
- Completely eliminates the 30-60 second main menu hang.
- Fixed severe main menu freeze ("Not Responding") in large modpacks with 1,000+ cards caused by
Fixed
- GearUpCards
FixSoundEffect.AwakeNRE Elimination:- Fixed a
NullReferenceExceptioninsideFixSoundEffect.Awake()which crashed the menu card generation pipeline when instantiating GearUP card prefabs in the menu. - Added
FixSoundEffect_Awake_Prefixand exception finalizer to verify thatgun != nullandSoundVolumeManager.Instance.audioMixeris fully initialized before attempting to query audio groups.
- Fixed a
- ZomC-Cards
DoubleViEffect.StartNRE Elimination:- Fixed a
NullReferenceExceptioninsideZomC_Cards.MonoBehaviours.DoubleViEffect.Start()when card prefabs or standalone effects are instantiated without parent projectile references (GetComponentInParent<ProjectileHit>()). - Added
DoubleViEffect_Start_Prefixand exception finalizer to safely skip unparented instances.
- Fixed a
- CardChoice Color Theme Null Safety:
- Added null safety guards for
CardChoice.GetCardColorandCardChoice.GetCardColor2to prevent NullReferenceExceptions during menu card styling whenCardChoice.instanceor theme arrays are uninitialized.
- Added null safety guards for
Fixed
- CosmicRounds
FireballMono&HolyFireMonoFrame Update NRE: Fixed a continuous NullReferenceException occurring every frame on fireball projectiles. Projectiles were missing player contexts becauseFireballMonocalledGetComponent<Player>()on projectiles where no Player component exists. AddedFireballMono_Update_Prefixand exception finalizer to dynamically recover player references fromProjectileHit.ownPlayerand validateplayer.data.currentCardsbefore processing. - CosmicRounds
MistletoeMonoStart & DoHitEffect NRE: Added safety prefix and finalizer forCR.MonoBehaviors.MistletoeMono.StartandDoHitEffect. Dynamically initializes missingProjectileHitand guards against unparented/orphaned mistletoe components or non-player collision targets. - Explosion.Explode NRE Elimination: Fixed NullReferenceException in
Explosion.Explode()caused byspawned.spawner == nullduring team check evaluation (spawned.spawner.gameObject). AddedExplosion_Explode_Prefixto provide valid fallback spawner references and wrappedExplosion.Explodewith a safety finalizer. - Bot Detection Reflection Caching & HarmonyX Warning Suppression: Corrected namespace lookup for
BotsManagertoRoundsWithBots.Handlers.BotsManagerand cached all bot reflection types/methods statically. Completely eliminates thousands of[Warning: HarmonyX] AccessTools.TypeByName: Could not find type named RoundsWithBots.BotsManagerlog warnings. - Bot Interception Log De-duplication: Replaced per-frame logging in
EveryonePicks_IsLocalPlayer_Prefixwith a per-phase unique set (_loggedBotIntercepts). Each bot is now cleanly logged exactly once per drafting phase.
[1.0.6] - 2026-10-26
Fixed
- Human Player False Bot Classification Fix (
IsBotPlayer):- Fixed a critical bug where keyboard/mouse human players were mistakenly classified as bots because their input device (
playerActions.Device) wasnull(standard for InControl keyboard/mouse bindings) and vanilla base player prefabs contain the inactivePlayerAIcomponent. - Added strict Human Host Immunity (
playerID == 0/ host player is never treated as a bot unless explicitly registered byCharacterDataExtension.IsBot == true). - Removed faulty
device == nullandPlayerAIname checks. Bot detection now strictly checksCharacterDataExtension.IsBot,BotsManager.BotList,PlayerAIBase/AdvancedBotAI,ModdingUtils.isAIMinion, and[BOT]nametags. - Human player now reliably receives the interactive draft screen and gets to choose their cards properly.
- Fixed a critical bug where keyboard/mouse human players were mistakenly classified as bots because their input device (
- Bot AI Context & Duplicate Card Selection Fix (
ChooseCardForBot):- Fixed an issue where
RoundsWithBots'sWeightedCardsPicker.PickCardthrewNullReferenceExceptionbecauseCardChoice.instance.pickrIDdid not match the bot'splayerIDduring evaluation. - Automatically sets
CardChoice.instance.pickrID = bot.playerIDduring AI card scoring and restores it cleanly infinally. - Replaced hardcoded fallback
return pool[0]with distinct randomized candidate hands per bot (System.Random(Guid.NewGuid().GetHashCode() ^ bot.playerID)). Bots and humans no longer receive duplicate index 0 cards.
- Fixed an issue where
[1.0.5] - 2026-10-26
Fixed
- EveryonePicks Bot Patch Binding Resolution: Fixed a reflection issue in
ModSafetyFixesPatchwhereGetMethod(..., BindingFlags.NonPublic)failed to locate public patch methods forEveryonePicks.State.IsLocalPlayer,SeedPickers, andApplyRow. Switched toAccessTools.Methodand added explicit verification logging. - Multi-Layered Bot Detection Engine (
IsBotPlayer): Expanded bot detection to 6 independent fallbacks:CharacterDataExtension.IsBot,InputDevice.Nullcheck,PlayerAIBase/AIMovementModulecomponent scan,BotsManager.BotListquery,ModdingUtils.isAIMinion, and[BOT]tag detection. - Plugin Loading Order (Soft Dependencies): Added
BepInDependencysoft-ordering forEveryonePicks(com.redredrain.rounds.simulpicks) andRounds With Bots(com.aalund13.rounds.roundswithbots), guaranteeing all classes are loaded before patch registration. - AiPickCard Coroutine Suppression: Added
ref IEnumerator __resultreturning an empty enumerator toBotCardPickerHandler_AiPickCard_Prefix, safely neutralizing the vanilla sequential bot card picker.
[1.0.4] - 2026-10-26
Added & Fixed
- EveryonePicks + RoundsWithBots Simultaneous Bot Card Picking: Added seamless integration between
EveryonePicksandRoundsWithBotsfor simultaneous draft phases with bots:- Zero Screen Hijack / No 25s Freeze: In vanilla
EveryonePicks, local bots were treated as local human players (IsLocalPlayer(bot) == true), causing them to enterlocalQueueand freeze the screen for 25–45 seconds per bot while waiting for human input.IsLocalPlayernow recognizes bots and exempts them from the local interactive screen queue. - Simulated Background AI Picking:
EveryonePicks.State.SeedPickerstriggers background simulated card picks for entitled bots with a realistic human-like 1.0–1.8s thinking delay. - Weighted AI Decision Engine: Bots evaluate card candidates through
RoundsWithBots.Handlers.BotCardPickerHandler.PickerAI.cardPickerAI.PickCard(hand), respecting configured bot weapon/stat synergies and category blacklists (NotForBots). - Real-Time PickBoard Updates: Picks are immediately reported to
EveryonePicks(StoreResult,StoreSessionDone,StoreStatus), turning the bot's entry on thePickBoardto<color=green>READY</color>in real time. - Guaranteed Card Stat Application: In
ApplyRow, offline bots and skipped picks are directly assigned their chosen cards viaModdingUtils.Utils.Cards.RPCA_AssignCardandApplyCardStats.Pick, ensuring bot card stats and card bar icons apply properly. - Zero Sequential Conflicts: Vanilla sequential
AiPickCardcoroutine inRoundsWithBotsis automatically suppressed whenEveryonePicksis running a draft phase.
- Zero Screen Hijack / No 25s Freeze: In vanilla
- Menu Safety & Cascade Navigation Fix (
GoBack.Update): Fixed a menu desync where pressingEscapeor gamepadAction2while navigating submenus or options triggeredGoBackon every menu page simultaneously. Added active page hierarchy verification (ListMenu.instance.selectedPage == page) so only the currently focused menu page processes the back action.
[1.0.3] - 2026-10-26
Fixed
- StatRevealMod Vanilla & Additive Stat Preservation: Fixed a major bug in
StatRevealModwhere vanilla cards and custom cards with flat stat values (such as+0.25s,+0.5sReload Time) were erroneously replaced with+0%because the mod only checked multiplier ratios (gun.reloadTime == 1.0). Now:- Flat reload additions (
gun.reloadTimeAdd) are preserved and displayed accurately in seconds (e.g.,+0.25s,+0.5s). - Unchanged multiplier stats (delta is 0%) return
nullinstead of+0%, preserving the card author's original descriptions and vanilla stat texts. - Zero-delta ammo (
gun.ammo == 0) returnsnullinstead of overwriting with+0. - Fractional decimal stats (e.g.
+0.5%,+12.5%) retain their exact decimal precision.
- Flat reload additions (
[1.0.2] - 2026-10-26
Fixed
- RoundsWithBots Pathfinding NRE Spam: Silenced and safely guarded
AIPathfindModule.AttemptPathfindToTargetandUpdate(). Prevents continuous hundreds-per-second NRE log spam when bot target or terrain path nodes are null/unmapped. - CosmicRounds StarMono VFX NRE: Fixed NullReferenceException in
StarMono.<Attack>b__0when projectiles are destroyed before the 1-frame delayed sprite initialization callback fires. - Runtime Framework Standardization: Standardized project output to
netstandard2.0matching Unity 2018.4's native Mono CLR.
[1.0.1] - 2026-10-26
Fixed
- StatRevealMod Decimal Truncation: Fixed a critical rounding flaw where fractional stat bonuses (such as
+0.5%or other decimals) were rounded down to+0%or0byStatRevealModdue to banker's roundingToString("0"). Now dynamically hooksStatCalculator.GetStatValueto preserve decimal precision up to 2 decimal places (0.##) when fractional (e.g.,+0.5%,+12.5%) while cleanly rendering whole numbers (+50%).
[1.0.0] - 2026-10-25
Initial Release
- ROUNDS Patchwork Plus: Universal compatibility and bugfix patchwork engine for modpacks.
- Added dynamic component initialization for
RayHitReflect.DoHitEffectandCareenMono(eliminates 80+ NREs). - Added Photon RPC view ID sanitization and finalizer on
ProjectileHit.RPCA_DoHit. - Added inactive & dead player guard on
PCE.MonoBehaviours.SuperJumpEffect.OnUpdate(eliminates 119+ NREs). - Added missing spawner fallback & exception suppression for
Explosion.DoExplosionEffects(eliminates 59+ NREs). - Added coroutine
MoveNext()finalizer onMapTransition.MoveandPlayerManager.Movefor smooth match progression without freezes. - Added player disconnect resilience patches (
SetPlayerSpriteLayer,EmpowerStopBlockObjectFollow,ReloadTigger,UnboundLib.DisableCard). - Zero hard dependencies; fully isolated soft-detection for all patches.