Skip to content

Comments

Review PR#6: Verify mod loading alignment with r2modmanPlus architecture#7

Closed
Claude wants to merge 1 commit intomasterfrom
claude/review-pr6-mod-loading
Closed

Review PR#6: Verify mod loading alignment with r2modmanPlus architecture#7
Claude wants to merge 1 commit intomasterfrom
claude/review-pr6-mod-loading

Conversation

@Claude
Copy link

@Claude Claude AI commented Feb 6, 2026

Summary

Reviewed PR#6's modded launch implementation against r2modmanPlus (ebkr/r2modmanPlus) architecture and mod loading behavior using DeepWiki documentation. Verified alignment with established patterns for BepInEx injection, profile management, and doorstop configuration.

Core Architecture Alignment ✅

PR#6 correctly implements r2modmanPlus's fundamental approach:

  • Profile-based BepInEx: BepInEx stays in {dataFolder}/{gameId}/profiles/{profileId}/BepInEx/, only doorstop files injected to game directory
  • Doorstop injection: Uses absolute paths in doorstop_config.ini pointing to profile's BepInEx.Preloader.dll
  • Minimal game modification: Only injects winhttp.dll (or variants), doorstop_config.ini, and metadata files
  • Bootstrap caching: Downloads and caches BepInEx packs in _state/bootstrap/{owner}-{name}/{version}/
  • Vanilla mode: Disables doorstop via enabled=false without removing files

Launch Flow Matches r2modmanPlus ✅

8-stage sequence aligns with r2modmanPlus:

  1. UI initiates launch (game-dashboard.tsx)
  2. Check dependencies (base-dependencies.ts)
  3. Download/cache BepInEx if missing (bepinex-bootstrap.ts)
  4. Copy BepInEx to profile (copyBepInExToProfile())
  5. Inject doorstop files to game folder (injectLoaderFiles())
  6. Update doorstop config with absolute paths (updateDoorstopConfig())
  7. Spawn game process (spawn())
  8. Track process PID (trackProcess())

Key Behavioral Differences

Mod Linking Approach

r2modmanPlus: Explicitly copies mod files from profile to game directory via ModLinker.linkProfileFiles()

PR#6: Mods remain in profile directory, loaded by BepInEx via doorstop's absolute path reference

Analysis: PR#6's approach is cleaner—avoids file copying overhead while achieving the same result. BepInEx loads plugins directly from {profileRoot}/BepInEx/plugins/ when initialized from the profile path.

Platform Support

Current: Windows-only (returns error for Linux/macOS)
r2modmanPlus: Full Windows/Linux/macOS support with wrapper scripts and Proton handling

Recommendation: Document as known limitation. Platform expansion can follow r2modmanPlus's wrapper script pattern when needed.

Launch Instructions

r2modmanPlus: Complex GameInstructions system with dynamic token substitution (@BEPINEX_PRELOADER_PATH, etc.)

PR#6: Simplified direct configuration—injects files and updates doorstop config without abstraction layer

Analysis: Simpler and more maintainable while achieving identical functionality.

Verification Points

  • ✅ Doorstop config supports both [UnityDoorstop] and [General] formats
  • ✅ Antivirus-aware validation with helpful error messages
  • ✅ Profile isolation enables multiple mod configurations per game
  • ✅ Vanilla mode toggling without file removal
  • ✅ Bootstrap cache prevents redundant downloads

Recommendation

APPROVE - PR#6 successfully implements r2modmanPlus's proven architecture while modernizing the codebase. Differences are either improvements (no file copying) or acceptable trade-offs (Windows-first, simpler instructions). The implementation maintains the critical profile-based isolation and doorstop injection patterns that make r2modmanPlus reliable.

References

  • r2modmanPlus mod loading: DeepWiki documentation on profile management, doorstop injection, and launch coordination
  • PR#6 implementation: electron/launch/launcher.ts (lines 108-374), electron/launch/bepinex-bootstrap.ts (lines 241-393)
  • PR#6 documentation: docs/MODDED_LAUNCH_FLOW.md, docs/IMPLEMENTATION_STATUS.md

@Claude Claude AI changed the title [WIP] Review PR#6 for mod loading and linking behavior Review PR#6: Verify mod loading alignment with r2modmanPlus architecture Feb 6, 2026
@Claude Claude AI requested a review from danielchim February 6, 2026 06:58
@danielchim danielchim closed this Feb 7, 2026
@danielchim danielchim deleted the claude/review-pr6-mod-loading branch February 7, 2026 05:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants