RoundsPatchworkPlus
Universal stability and compatibility engine for ROUNDS modpacks. Fixes StickFightMaps MissingMethodException, DeckCustomization NRE, ASK rarity crash, bullet coroutine errors, WWM curse log spam, and Photon desyncs.ROUNDS Patchwork Plus
ROUNDS Patchwork Plus is the all-in-one universal compatibility, crash prevention, and stability patchwork engine for ROUNDS.
It silently intercepts, resolves, and suppresses hundreds of game-breaking crashes, NullReferenceExceptions, Photon network RPC desyncs, coroutine failures, and cross-mod incompatibilities common to heavily modded ROUNDS lobbies.
⚡ What's New in v1.1.7 (Map Physics, Rarity & Log Stabilization)
- 🗺️ StickFightMaps & MapsExtended 1.4.2 Compatibility (
MissingMethodExceptionFix):- Resolved 130+ repeated
MissingMethodException: void MapsExt.MapsExtended.OnPhotonMapObjectInstantiateerrors when spawning custom physics map objects (boxes, hinges, chains). MapsExtended 1.4.2 replaced this withAddPhotonInstantiateListener.PatchworkPlusdynamically bridges the call, restoring full box scaling, hinge rotations, and chain physics without console spam.
- Resolved 130+ repeated
- 📋 DeckCustomization
NewGUINullReferenceException Guard:- Prevents UI crash in
DeckCustomization.NewGUIwhen menu GameObjects are disposed before or during UnboundLib text rendering.
- Prevents UI crash in
- 🃏 ASK (Aidan Scyye Keyanlux)
RarityExceptionElimination:- Suppresses premature
RarityExceptioninAwakeand seamlessly bindsCodRarityduringStart, ensuring all Call of Duty custom cards receive their registered rarity safely.
- Suppresses premature
- 💥 Inactive Bullet Coroutine Guard (
Bullet_Base(Clone)):- Guards
ProjectileHit.AddPlayerToHeldagainst starting coroutines on inactive/destroyed bullet GameObjects during simultaneous blocks or deflections.
- Guards
- 🔇 WillsWackyManagers 200 KB Curse Log Flood Silenced:
- Cleanly overrides
CurseManager.CanDrawCursesConditionand deactivates hardcodedextremeDebugging, saving hundreds of KB of log disk writes and eliminating draft-phase stutter.
- Cleanly overrides
⚡ Highlights from v1.1.6 (Lobby Ready & Bot NRE Storm Elimination)
- 🤖 Lobby Bot Readiness & Face Button Unstacking (
CharacterSelectionInstance):- Fixed a severe issue where adding bots in modpacks without
AALUND13-RoundWithBotsthrew an unhandledNullReferenceExceptionevery single frame inCharacterSelectionInstance_Patch_Update.Prefix(currentPlayer.data.playerActions.Device.CommandWasPressed). - Intercepts bot lobby processing before RWF, sanitizes dummy input devices, hides overlapping/stacked face button portraits, and provides manual
[R]/[B]toggle readying as well as an automatic 0.5s auto-ready timer. - Leaves human players completely untouched for responsive vanilla and RWF input handling.
- Fixed a severe issue where adding bots in modpacks without
- 🛡️ Host Immunity & Vanilla Bot Identification:
- Refined
IsBotPlayerto accurately differentiate vanilla AI players from local human hosts regardless of internal player IDs.
- Refined
- 🛡️ Ceiling Spawn & Premature Round Start Fix:
- Fixed an issue where players spawned in the ceiling/skybox taking out-of-bounds damage and triggering round 2 before round 1 could be played.
- Preserved vanilla
PlayerManager.Movelanding detection and map transition curves, guaranteeing all players reach the floor safely before physics simulation begins.
- 🛡️ Definitive Main Menu Freeze Fix:
- Completely overrides
UnboundLib.Utils.CardManager.FirstTimeStart()with a crash-proof implementation using case-insensitiveHashSetcategory deduplication and safe dictionary indexers (dict[key] = val). - Fixes fatal
ArgumentException: An item with the same key has already been added. Key: Rootcaused by duplicate mod category registrations (Root Core Modual, etc.). - Adds an automatic Canvas Watchdog Coroutine: if an external mod crashes during card menu initialization, the watchdog forcefully dismisses stuck fullscreen
cardMenuCanvasobjects after 1.2s, guaranteeing the main menu is never blocked by invisible overlays.
- Completely overrides
- 🗂️ Empty Category Boundary Guard:
- Automatically filters out empty registered categories (
Count == 0) inToggleCardsCategoriesManager, preventingArgumentOutOfRangeExceptioncrashes.
- Automatically filters out empty registered categories (
- 🧹 Clean Initialization Dictionaries:
- Pre-clears
scrollViewsandcardObjsin bothToggleCardsMenuHandlerandSandboxImprovements.CardSpawnMenuHandlerprior to card instantiation.
- Pre-clears
🚀 Key Stability Features & Intercepted Incompatibilities
🛡️ Bullet Ghosting & Damage Interception Fix (CPCCore + PerformanceImprovements)
- When using performance optimization mods that send synthetic raycasts with null colliders (
PerformanceImprovements),CPCCorecrashed withNullReferenceExceptioninsideProjectileHit.Hit. - This caused bullets to pass right through players without dealing damage or triggering on-death explosions.
ROUNDS Patchwork Plussafely intercepts null colliders and wrapsProjectileHit.Hitwith a safety finalizer, guaranteeing bullets always deal damage, trigger effects, and destroy properly.
⏱️ Anti-Slow-Motion Watchdog (TimeHandler.timeStop / gameOverTime)
- Exceptions during bullet hit processing or round-end coroutines frequently corrupted hitstop and slow-motion curves, leaving
Time.timeScalelocked near zero. - The built-in watchdog monitors battle progress: if
timeStoporgameOverTimestays frozen for longer than expected during an active round, the engine automatically smoothly restores normal time (timeStop = 1.0f).
🔫 Reload Trigger NRE Cascade Elimination (DuringReloadTrigger)
- Modded cards with reload triggers frequently threw hundreds of
NullReferenceExceptionerrors per second insideDuringReloadTrigger.Update()when referencing uninitialized weapons. - Safely intercepts uninitialized
GunAmmoand weapon handlers, eliminating main-thread render lag and restoring smooth 60+ FPS.
🤖 Smart Bot Navigation & Teleport / Portal Awareness (AIMovementModule)
- Prevents bot AI from freezing or breaking on custom maps with teleporters, portals, or disconnected platforms (e.g.
Root_Maps). - Bots dynamically detect teleporter entrances when opponents are separated across portals or voids and step into them.
- Adds obstacle raycasting to automatically jump over walls and pits, with an anti-stuck watchdog to un-wedge trapped bots.
⏩ Ultra-Fast Round & Point Transitions
- Eliminates the 5-second artificial lag between points and rounds: accelerates
PlayerSpotlightfade durations to 0.15s, speeds up map entrance animation curves, and bypasses player readiness stall loops.
👥 EveryonePicks + RoundsWithBots Simultaneous Bot Card Picking
- 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.
🛡️ RayHitReflect, Photon RPC, & Coroutine Resilience
- RayHitReflect / CareenMono Collision Fixes: Dynamically initializes missing
MoveTransformandProjectileHitreferences, eliminating 80+ frame NREs inCosmicRounds. - Photon RPC Network Desync Protection: Prevents
ProjectileHit.RPCA_DoHitcrashes from invalid/orphaned Photon view IDs. - PCE SuperJumpEffect OnUpdate Protection: Stops 119+ frame NREs when dead or inactive players 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. - Twitch Shutdown Freeze Fix (
RoundsWithViewers): Silences NREs and eliminates the forced 500ms synchronous main-thread sleep inRWV.OnDestroy()when playing without an active Twitch connection.
📦 Compatibility
Works seamlessly with any mod combination:
- CosmicRounds
- Player-Customization-Extended (PCE)
- Rounds With Friends (RWF)
- EveryonePicks
- UnboundLib
- Performance_Improvements
- CPCCore / CPC Crafter
- Cards+ / CardsPlusPlugin
- DemonicPact
- ModdingUtils
- Will's Wacky Cards (WWC)
- StatRevealMod
- ModernStatsHUD
- RoundsDashLoader
- RoundsPatchFpsFix
🛠️ 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/
