You are viewing a potentially older version of this package. View all versions.
naccel_inc-RoundsDashLoader-1.0.4 icon

RoundsDashLoader

Lightning-fast game startup for ROUNDS! Caches reflections & textures, skips intro, optimizes async streaming, and fixes menu freezes in heavy modpacks.

Date uploaded a day ago
Version 1.0.4
Download link naccel_inc-RoundsDashLoader-1.0.4.zip
Downloads 70
Dependency string naccel_inc-RoundsDashLoader-1.0.4

This mod requires the following mods to function

BepInEx-BepInExPack_ROUNDS-5.4.1901 icon
BepInEx-BepInExPack_ROUNDS

BepInEx pack for ROUNDS. Preconfigured and ready to use.

Preferred version: 5.4.1901

README

โšก RoundsDashLoader โ€” Universal Startup & Performance Optimizer for ROUNDS

ROUNDS BepInEx Status Performance

RoundsDashLoader is a comprehensive, standalone startup accelerator and combat anti-stutter mod for ROUNDS, inspired by the renowned DashLoader optimization mod from Minecraft.

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.0.4 (Heavy Modpack Optimization & Freeze Fix)

  • ๐Ÿ›ก๏ธ Zero Menu Freezes: Rewrote IntroAndMenuSkipPatch with non-blocking postfix execution and safe target.Open() binding without destroying video gameobjects or blocking Update().
  • โšก Eliminated 15s Shader Warmup Stall: Removed redundant Shader.WarmupAllShaders() call that was stalling CPU for 15.058s compiling 2005 shader combinations.
  • ๐Ÿงน Balanced GC Lifecycle: Removed startup GC disabling so 160+ mods don't exhaust memory heaps. GC pausing remains strictly active during intense gunfights.
  • ๐Ÿš€ Tuned Asynchronous Upload: 4ms time-slice and 32MB buffer ensure locked 60 FPS without UI starvation.
  • ๐Ÿ’พ RAM Cleanup: Automatically clears raw texture byte arrays from RAM upon reaching the Main Menu.

๐Ÿ†• What's New in v1.0.3 (Mega-Modpack Update)

  • ๐Ÿฅ‡ Early-Boot #1 Execution Priority: Uses topological ModId 000_rounds_dashloader so BepInEx 5.4.19 always loads DashLoader as Plugin #1 before all other 160+ mods!
  • โš™๏ธ Dual-Mode Patcher Architecture: Operates simultaneously as a Preloader Patcher (BepInEx/patchers/) and runtime Plugin (BepInEx/plugins/) for maximum early-boot hook coverage.
  • ๐Ÿ›ก๏ธ Photon Crash Suppression: Suppresses ReflectionTypeLoadException in Photon.Pun.Simple.ContactTrigger when scanning MMHOOK_Assembly-CSharp.dll (which previously caused 4 TypeInitializationException fatal crashes during boot).
  • โšก Harmony Member Fast-Caches: Added thread-safe memoized caches for AccessTools.Method, AccessTools.Field, and AccessTools.Property for instantaneous lookup speeds (~21 ยตs).
  • ๐Ÿ”’ Rogue Mod UnpatchAll Protection: Enforces HarmonyGlobalSettings.DisallowLegacyGlobalUnpatchAll = true to prevent badly written mods from wiping out other mods' patches.

๐Ÿš€ Key Optimization Pillars

1. ๐Ÿง  Harmony Reflection Fast-Path Cache (HarmonyTypeCachePatch)

  • The Problem: Modded profiles trigger AccessTools.TypeByName dozens of times during boot. HarmonyX iteratively scans the entire 15+ MB MMHOOK_Assembly-CSharp.dll assembly, catching and logging ReflectionTypeLoadException 22+ 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-safe ConcurrentDictionary (assemblies are scanned exactly once).
    • Subsequent type and member lookups operate at $O(1)$ in memory rather than traversing all loaded assemblies.

2. โฉ Zero-Frame Splash & Video Bypass (SplashScreenPatch & IntroAndMenuSkipPatch)

  • The Problem: Unity 2018 hardcodes a 2.5-second splash screen, followed by SkipIntro waiting for Landfall intro video buffers and animations (total ~4.5s delay).
  • The Solution: Instantly flags SplashScreen.isFinished = true and invokes SkipIntro.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.

4. ๐Ÿ“ฆ High-Throughput Asynchronous Streaming (MainMenuHandlerPatch)

  • Sets QualitySettings.asyncUploadBufferSize = 128 (128 MB persistent buffer) and asyncUploadTimeSlice = 32ms to prevent allocation churning when streaming card art.
  • Sets Application.backgroundLoadingPriority = ThreadPriority.High for 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.

โฑ๏ธ Benchmark & Performance Test Results (v1.0.3 with 162+ Mods)

Real-world timing benchmarks conducted on actual game assemblies, mod textures, and 160+ modpack environments:

Benchmark / Subsystem Vanilla / Without Mod RoundsDashLoader v1.0.3 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) ~12.5 โ€“ 15.0 s ~7.0 s ~44% FASTER ~5.5 โ€“ 8.0 seconds

Verified In-Game Telemetry Log (BepInEx 5.4.19 / Heavy Modpack):

[Info   :RoundsDashLoader] [RoundsDashLoader] v1.0.3 initializing DashLoader acceleration pipeline...
[Info   :RoundsDashLoader] [RoundsDashLoader] Harmony type caching, texture streaming & intro bypass patches active.
...
[Info   :RoundsDashLoader] ============================================================
[Info   :RoundsDashLoader] โšก [RoundsDashLoader] LIGHTNING BOOT COMPLETE in 2.29s!
[Info   :RoundsDashLoader] โšก [RoundsDashLoader] Reflection Type Hits: 29 (Saved MMHOOK churn)
[Info   :RoundsDashLoader] โšก [RoundsDashLoader] Texture Cache Hits: 0 | New Decodes Cached: 0
[Info   :RoundsDashLoader] โšก [RoundsDashLoader] Intro videos and splash screens bypassed.
[Info   :RoundsDashLoader] ============================================================

๐ŸŽฎ 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 Gale, Thunderstore Mod Manager, and r2modman:

  1. Install via your mod manager or download RoundsDashLoader-1.0.4.zip.
  2. Extract into ROUNDS/BepInEx/plugins/ (or use your mod manager).
  3. 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 mod 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.0.5] - 2026-10-18

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 IntroAndMenuSkipPatch with non-blocking postfix execution and safe target.Open() binding without destroying video gameobjects or blocking Update().
  • 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) and asyncUploadBufferSize = 32MB with 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_dashloader so 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.FindDerivedTypesFromAssembly to suppress ReflectionTypeLoadException when scanning MMHOOK_Assembly-CSharp.dll, fixing 4 fatal startup crashes.
  • Harmony Reflection Caches: Thread-safe memoized caches for AccessTools.Method, AccessTools.Field, and AccessTools.Property for ~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.