Skip to content

feat: 2.5.1 default xml, improved preset handling, fsmp3 image, dependency guard to prevent config corruption#9

Merged
DaymareOn merged 12 commits intoDaymareOn:mainfrom
KaninHop:feat/add-2.5.1-default-xml
Apr 16, 2026
Merged

feat: 2.5.1 default xml, improved preset handling, fsmp3 image, dependency guard to prevent config corruption#9
DaymareOn merged 12 commits intoDaymareOn:mainfrom
KaninHop:feat/add-2.5.1-default-xml

Conversation

@KaninHop
Copy link
Copy Markdown
Contributor

@KaninHop KaninHop commented Apr 16, 2026

Changes

MCM script (FSMPM.psc)

  • Dependency safety: new checkDependencies() verifies JContainers and PapyrusUtil SE at init. If either is missing, the MCM disables itself and shows a "Missing: <dep>" page instead of corrupting configs.xml with empty defaults
  • Improved Preset detection on load: configMatchesPreset() compares current config values against the saved preset (or Default.xml as fallback) and clears the preset label if neither matches, so the MCM reflects reality when the XML was edited externally
  • Welcome page: OnPageReset("") now loads interface/FSMP/Logo.dds via LoadCustomContent (with early return, matching SkyUI's splash pattern)
  • Version upgrade logic: bumped GetVersion() to 302; OnVersionUpdate re-runs init and clears stale preset name on upgrade

Assets

  • New SKSE/Plugins/hdtSkinnedMeshConfigs/configsPresets/2.5.1 Default.xml — stock FSMP 2.5.1 values as a selectable preset
  • New interface/FSMP/Logo.dds — MCM welcome-page banner

Test plan

  • MCM opens with Logo on the default page
  • Load 2.5.1 Default.xml preset; verify values apply and label shows "Loaded!"
  • Modify a value externally in configs.xml; reopen MCM and confirm preset label clears
  • Uninstall JContainers → MCM shows "Missing: JContainers" and configs.xml is not overwritten
  • Uninstall PapyrusUtil SE → same, with correct label
  • Upgrade from v3 save → version notification fires, preset detection runs fresh

You can try it by downloading the build here;

https://github.com/DaymareOn/FSMP-MCM/actions/runs/24492378227

Screenshots:
Skyrim Special Edition 4_15_2026 4_34_47 PM

Note, the help section was something I experimented with, but removed. This is to show the dependency guard is working. Also validated configs.xml files were not corrupted.
Skyrim Special Edition 4_15_2026 10_40_33 PM

Skyrim Special Edition 4_15_2026 10_41_38 PM

Debug messages:
With only 1 missing dependency
image

With both missing dependencies
image

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 16, 2026

📝 Walkthrough

Walkthrough

The pull request adds a new HDT Skinned Mesh Configs preset file and updates the FSMP MCM script to include dependency verification, preset auto-detection, and version management. Additionally, the build workflow now includes the Logo.dds asset in the distribution package.

Changes

Cohort / File(s) Summary
Build Distribution
.github/workflows/build.yml
Adds directory creation and file copying step to include Logo.dds in the packaged FSMP-MCM.zip output under Interface/FSMP/ path.
HDT Skinned Mesh Preset
SKSE/Plugins/hdtSkinnedMeshConfigs/configsPresets/2.5.1 Default.xml
New XML configuration preset defining SMP subsystem settings (logging, NPC face parts, hair, rotation clamping, culling, skeleton auto-adjust), solver parameters (iterations, MLCP, ERP, FPS thresholds), and wind effect configuration.
MCM Script Logic
Source/Scripts/FSMPM.psc
Updated version to 302 with version-upgrade handling; added dependency checking for JContainers and PapyrusUtil SE; implemented preset auto-detection via config matching; added helper functions checkDependencies() and configMatchesPreset(); modified initialization to gate configuration loading on dependency availability and display missing-dependencies page when needed.

Sequence Diagram(s)

sequenceDiagram
    participant MCM as MCM Script
    participant JC as JContainers
    participant PU as PapyrusUtil SE
    participant CF as Config Files
    participant UI as MCM UI

    MCM->>MCM: OnConfigInit() triggered
    MCM->>JC: JMap.object() test
    JC-->>MCM: result received
    MCM->>PU: PapyrusUtil.StringArray() test
    PU-->>MCM: result received
    MCM->>MCM: checkDependencies() evaluates
    alt Dependencies OK
        MCM->>CF: Load configFilePath
        CF-->>MCM: config loaded
        MCM->>CF: Check last preset name
        CF-->>MCM: preset data
        MCM->>MCM: configMatchesPreset() iterate tags
        MCM->>MCM: Auto-detect active preset
        MCM->>UI: Show config pages
    else Dependencies Missing
        MCM->>MCM: Build sMissingDependencies string
        MCM->>UI: Render disabled "Missing Dependencies" page
        MCM->>MCM: Exit early, skip map init
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Poem

🐰 A preset hops into the mix,
Dependencies checked, no more tricks!
Version bumped to 302's glow,
Logo packed, watch our package grow—
Auto-detection steals the show! ✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title comprehensively captures the main changes: 2.5.1 preset addition, preset handling improvements, FSMP logo asset, and dependency guard mechanism to prevent config corruption.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@KaninHop KaninHop changed the title feat: 2.5.1 default xml, improved preset handling, fsmp3 image, dependency guard feat: 2.5.1 default xml, improved preset handling, fsmp3 image, dependency guard to prevent config corruption Apr 16, 2026
@KaninHop KaninHop marked this pull request as ready for review April 16, 2026 04:47
@DaymareOn DaymareOn merged commit 0234f1c into DaymareOn:main Apr 16, 2026
2 checks passed
DaymareOn added a commit to DaymareOn/hdtSMP64 that referenced this pull request Apr 16, 2026
…M-with-backround-image

feat: add support for updated mcm with background image

This just updates Github Actions to include the interface folder if it's available in the MCM repo. Does not fail if the folder is missing

this needs to be merged before DaymareOn/FSMP-MCM#9

[DaymareOn] It wasn't, my bad. Now it is.

Summary by CodeRabbit
Chores
Improved build workflow resilience by implementing conditional handling for optional dependencies, allowing the build pipeline to continue gracefully without failing when certain components are unavailable.
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