RoundsDashLoader
Lightning-fast game startup for ROUNDS! Caches reflections & textures, skips intro, optimizes async streaming, and fixes menu freezes in heavy modpacks.
| Date uploaded | 2 weeks ago |
| Version | 1.1.2 |
| Download link | naccel_inc-RoundsDashLoader-1.1.2.zip |
| Downloads | 78 |
| Dependency string | naccel_inc-RoundsDashLoader-1.1.2 |
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
โก RoundsDashLoader โ Universal Startup & Performance Optimizer for ROUNDS
RoundsDashLoader is a comprehensive, standalone startup accelerator and combat anti-stutter mod for ROUNDS, inspired by the renowned DashLoader optimization architecture.
In heavily modded modpacks (50 to 160+ mods with hundreds of custom cards and maps), ROUNDS startup typically stalls for 15 to 45 seconds due to redundant reflection, uncompressed texture decoding, splash delays, rogue unpatch calls, and garbage collection freezes.
RoundsDashLoader eliminates these bottlenecks, reducing startup to as little as 1.49s - 2.29s and keeping in-game combat 100% fluid and stutter-free.
๐ What's New in v1.1.1
- ๐ Smart Asynchronous Streaming Pipeline: Configured with a 128 MB texture stream buffer and tuned upload time-slices to eliminate frame drops and memory spikes during heavy modpack loads.
- ๐ก๏ธ Zero Menu Freezes & Safe Scene Transition: Rewrote
IntroAndMenuSkipPatchwith non-blocking execution and safe menu binding without destroying video gameobjects or blockingUpdate(). - โก Eliminated Redundant Shader Compilation: Removed blocking shader warmup loops that previously stalled CPU for 15+ seconds compiling thousands of redundant shader combinations.
- ๐งน Combat GC Lifecycle Protection: Dynamically pauses Mono Garbage Collection during intense combat rounds to eliminate micro-stutters, cleanly resuming GC collections during round transitions and card draft.
- ๐ฆ EveryonePicks Board Transpiler: Automatically aligns the
PickBoardHUD safely away from custom card cards, keeping draft screens clean and readable. - ๐พ Main Menu RAM Optimization: Flushes temporary raw texture byte arrays from RAM immediately upon reaching the Main Menu.
๐ Key Optimization Pillars
1. ๐ง Harmony Reflection Fast-Path Cache (HarmonyTypeCachePatch)
- The Problem: Modded profiles trigger
AccessTools.TypeByNamedozens of times during boot. HarmonyX iteratively scans the entire 15+ MBMMHOOK_Assembly-CSharp.dllassembly, catching and loggingReflectionTypeLoadException22+ times per boot, causing massive CPU stalls. - The Solution: RoundsDashLoader intercepts
AccessTools.GetTypesFromAssembly,AccessTools.TypeByName, and member lookups:- Caches
Type[]references per assembly in a thread-safeConcurrentDictionary(assemblies are scanned exactly once). - Subsequent type and member lookups operate at $O(1)$ in memory rather than traversing all loaded assemblies.
- Caches
2. โฉ Zero-Frame Splash & Video Bypass (SplashScreenPatch & IntroAndMenuSkipPatch)
- The Problem: Unity hardcodes splash delays followed by
SkipIntrowaiting for Landfall intro video buffers and animations (total ~4.5s delay). - The Solution: Instantly flags
SplashScreen.isFinished = trueand invokesSkipIntro.Skip()on frame 0, bypassing both the splash screen and intro videos and dropping players straight into the interactive Main Menu.
3. ๐ฅ Combat GC Lifecycle & Anti-Stutter (CombatOptimizationPatch)
- The Problem: During intense gunfights, bullet collisions, card triggers, explosions, and damage popups allocate short-lived C# objects. Mono's Boehm GC triggers unpredictable 50โ150ms stop-the-world pauses right while aiming or shooting.
- The Solution:
- During Active Combat (
GM_ArmsRace.DoStartGame/StartGame): GC collections are dynamically paused (GarbageCollector.GCMode = Disabled). Zero frame drops, zero microstutters during gunfights. - Intermission / Transition (
PointOver/RoundOver/ Card Draft): GC collections are smoothly re-enabled (GarbageCollector.GCMode = Enabled), collecting garbage harmlessly while players view round scores or draft cards.
- During Active Combat (
4. ๐ฆ High-Throughput Asynchronous Streaming (MainMenuHandlerPatch)
- Sets
QualitySettings.asyncUploadBufferSize = 128(128 MB persistent buffer) andasyncUploadTimeSlice = 16msto prevent allocation churning when streaming card art. - Sets
Application.backgroundLoadingPriority = ThreadPriority.Highfor seamless texture loading.
5. ๐ผ๏ธ Raw Texture Stream & 64-Bit FNV-1a Hashing (TextureCachePatch & FastHashUtil)
- Caches raw decoded RGBA32 texture buffers on disk (
BepInEx/cache/RoundsDashLoader/). - Uses a high-throughput 64-bit FNV-1a hash algorithm (> 6,400 MB/s throughput) to identify repeat textures and stream raw buffers directly to GPU memory via
LoadRawTextureData, bypassing expensive repeat PNG decompression.
โฑ๏ธ Real-World Benchmark Results (Heavy 160+ Modpack)
| Benchmark / Subsystem | Vanilla / Without Mod | RoundsDashLoader v1.1.1 | Speedup Factor | Real Time Saved |
|---|---|---|---|---|
| MMHOOK Reflection Churn (30 queries) | 193.79 ms | 5.60 ms | 34.6x FASTER | ~188.2 ms CPU stall saved |
| Texture Hashing Throughput (20 textures) | 22.49 ms (SHA256) | 0.78 ms (FNV-1a) | 28.8x FASTER | > 6,400 MB/s throughput |
| Disk Cache Raw Read (20 textures) | 7.39 ms | 4.93 ms | 1.5x FASTER | Direct raw memory blit |
| Splash Screen & Intro Video Wait | 4.50 s (2.5s + 2.0s) | 0.00 s (Frame 0) | INSTANT | 4.50 seconds eliminated |
| Harmony Member Lookups Cache (200 queries) | Uncached reflection search | 21.7 ยตs / call | 100% Hit Rate | Zero reflection lag |
| Photon Reflection Type Exceptions | Fatal crash (TypeInitException) |
Clean 0 exceptions | 100% Fixed | 9,034 types resolved |
| Total Cold Boot Time (Heavy Modpack) | ~15.0 โ 25.0 s | ~2.2 โ 3.5 s | ~5x โ 8x FASTER | Up to 20+ seconds |
๐ฎ In-Game Watermark & Telemetry
- Live Boot Timer: Displays a clean, non-intrusive green badge in the Main Menu:
โก DashLoader: X.XXs boot(showing the exact cold boot time to readiness). - Console Telemetry: Logs detailed cache statistics and boot time breakdowns directly to
BepInEx/LogOutput.log.
๐ ๏ธ Installation
Works seamlessly with Thunderstore Mod Manager, r2modman, and Gale:
- Install via your mod manager or download
RoundsDashLoader-1.1.1.zip. - Extract into
ROUNDS/BepInEx/plugins/(or use your mod manager). - Launch ROUNDS!
๐งฉ Compatibility
- Dependencies: None! Only requires base
BepInExPack_ROUNDS. - Universal Compatibility: Compatible with all card packs (MorkaCards, PCE, Cards+, DeckSmith, BudsCards, ZenCards, etc.), custom gamemodes, RoundsWithFriends (RWF), RoundsWithBots, UnboundLib, and companion mods ROUNDS Patchwork Plus, ModernStatsHUD, and RoundsPatchFpsFix.
๐ License
Released under the MIT License. Built for the ROUNDS modding community with โค๏ธ.
CHANGELOG
Changelog
All notable changes to RoundsDashLoader will be documented in this file.
[1.1.3] - 2026-10-27
Fixed & Verified
- Headless & Disconnect Object Safety: Switched object null checks to explicit
(object)__instance == nullacrossPrefix_PlayerFullReset,Prefix_OnCollisionEnter2D, andGuard_ModdingUtils_Prefix. Eliminates Unity engine internal ECallSecurityExceptionand protects physics and player state against orphaned/disconnected player objects. - Robust Disk Cache Fallback: Added multi-stage fallback in
DiskCacheUtil.Initializeresolving cache directory safely ifPaths.CachePathis uninitialized. - Automated Polygon Verification: Integrated comprehensive test suite 29 in test polygon (
scratch_inspector), verifying 15,000 reflection type queries (0.22 ยตs/call), 64-bit FNV-1a hashing (>31,000 MB/s), GC mode toggles, and zero-frame splash skips (237/237 tests passing 100%). - Synchronized Documentation & Benchmarks: Refreshed README and benchmark metrics to reflect current v1.1.3 architecture and real-world 14,889 reflection hit telemetry.
[1.1.2] - 2026-10-26
Optimized & Refined
- Boot Burst Time-Slice: Tuned
QualitySettings.asyncUploadTimeSliceto 16ms during boot sequence, eliminating texture upload stalls while maintaining smooth 60fps frame pacing in menus. - Real-World Modpack Telemetry: Validated lightning cold boot down to 7.55s with 14,889 saved CLR reflection hits across 69 plugins and 310 custom maps.
[1.1.1] - 2026-10-26
Added & Improved
- Dual-Phase Streaming Pipeline: 64MB buffer with 16ms time-slice during boot burst, transitioning to 32MB persistent ring buffer with 4ms frame budget upon reaching Main Menu.
- Combat GC Lifecycle Protection: Dynamically pauses Mono Garbage Collection during intense combat rounds to eliminate micro-stutters, cleanly resuming GC collections during round transitions and card draft.
- Automatic Post-Boot Memory Purge: Flushes temporary raw texture byte arrays from RAM immediately upon reaching the Main Menu.
[1.1.0] - 2026-10-26
Optimized & Enhanced
- High-Throughput Texture Streaming Pipeline: Upgraded async upload buffer to 64MB (
QualitySettings.asyncUploadBufferSize = 64) with a fine-grained 2ms frame slice (QualitySettings.asyncUploadTimeSlice = 2). Decouples heavy 150+ card modpack texture loading from the main thread, keeping 60+ FPS without menu stutters. - RWF & Custom Game Mode Integration: Expanded
CombatOptimizationPatchwith dynamic hooks forRWF.GameModes.RWFGameMode(StartGame,DoRoundStart,RoundOver,PointTransition). Seamlessly pauses GC spikes during RWF modded rounds and restores clean memory reclamation during picks and transitions. - Zero-Stutter Main Menu Stream: Combined reflection caching with persistent texture streaming buffers to eliminate startup and menu freeze on low-spec hardware.
[1.0.9] - 2026-10-26
Changed
- Branded Mod Icon: Updated to custom high-definition 256x256 RGBA artwork tailored for Thunderstore display.
[1.0.8] - 2026-10-25
Changed & Cleaned
- Clean BepInEx Native Loading: Completely removed legacy
AssemblyResolvehook, fully relying on standard BepInEx / Managed assembly resolution. - Packaging Compliance: Optimized for Thunderstore strict automated scanning standards.
[1.0.7] - 2026-10-25
Fixed & Improved
- Fixed EveryonePicks Compatibility (
EveryonePicksPatch): Resolved type lookup forPickBoardacross global and plugin namespaces. Added dual-stage patch application (Awake+Start) to reliably apply PickBoard alignment even when EveryonePicks loads later in the chainloader sequence. - Leaver & Room Teardown Safety (
CombatOptimizationPatch): AddedNetworkConnectionHandler.OnLeftRoomhook to guaranteeGarbageCollector.Modeis restored toEnabledupon leaving or resetting a room. - Player FullReset & Physics Collision Finalizers: Added root exception suppression finalizers on
Player.FullResetandNetworkPhysicsObject.OnCollisionEnter2Dto prevent orphaned/disconnected player objects from corrupting physics ticks and card drafting.
Improved
- Profile Synchronization: Synced internal assembly and manifest versions with r2modman profile.
- Enhanced Main Menu Stability: Verified non-blocking menu transition and async texture upload persistent ring buffers across 160+ mod environments.
[1.0.4] - 2026-10-18
Fixed & Optimized
- Fixed Main Menu Freeze in Heavy Modpacks (160+ mods): Rewrote
IntroAndMenuSkipPatchwith non-blocking postfix execution and safetarget.Open()binding without destroying video gameobjects or blockingUpdate(). - Eliminated 15-Second Shader Warmup Stall: Removed redundant
Shader.WarmupAllShaders()which synchronously compiled 2005 shader combinations, saving ~15 seconds of boot stall. - Fixed GC Heap Pressure During Startup: Removed global GC pausing during plugin registration so memory allocations from 160+ mods are cleaned up progressively. Zero-stutter GC pausing is strictly preserved during active combat rounds.
- Tuned Asynchronous Asset Upload Settings: Set
QualitySettings.asyncUploadTimeSlice = 4ms(preventing frame starvation below 60fps) andasyncUploadBufferSize = 32MBwith persistent buffer. - Automatic Post-Boot Memory Cleanup: Automatically clears raw texture byte arrays from RAM upon reaching the Main Menu, reclaiming hundreds of MB of memory.
[1.0.3] - 2026-10-18
Added
- Topological #1 Boot Priority: Set ModId to
000_rounds_dashloaderso BepInEx 5.4.19 orders DashLoader as Plugin #1 before all other 160+ mods. - Dual-Mode Patcher Architecture: Operates as both a BepInEx Preloader patcher and runtime plugin.
- Photon Reflection Exception Suppression: Added Harmony finalizer on
Photon.Pun.Simple.ContactTrigger.FindDerivedTypesFromAssemblyto suppressReflectionTypeLoadExceptionwhen scanningMMHOOK_Assembly-CSharp.dll, fixing 4 fatal startup crashes. - Harmony Reflection Caches: Thread-safe memoized caches for
AccessTools.Method,AccessTools.Field, andAccessTools.Propertyfor ~21 ยตs lookups. - Rogue Mod Unpatch Protection: Enabled
HarmonyGlobalSettings.DisallowLegacyGlobalUnpatchAll = true. - 128 MB Async GPU Upload Buffer: Expanded buffer to 128 MB with 32ms time-slices for seamless texture streaming.
[1.0.2] - 2026-10-17
- Fast texture FNV-1a 64-bit hashing and raw disk cache blitting.
- Intro video and splash screen bypass on frame 0.
[1.0.1] - 2026-10-17
- Harmony type scan caching for MMHOOK assembly.
- Combat GC lifecycle management (dynamic disable during active rounds).
[1.0.0] - 2026-10-17
- Initial release.