⟳ Last Commit ⚠ Issues ⚖ License ⬆ Releases
Description
Disabled Reference Integrity Fix is a lightweight SKSE plugin that fixes micro-stutter caused by broken references and navmesh data placed below Skyrim's worldspace floor. In heavy load orders, some records end up with Z values below the engine boundary (below z=−30000). That can create constant background work for the engine and lead to stutter spikes. This plugin intercepts those references before their meshes and textures ever load, and corrects invalid data automatically.
Requirements
What It Fixes
Heavily inspired by Z-Floor Patcher, this SKSE plugin operates under defined and strict rules to ensure only the problematic records are being fixed. The rules are the following:
If a record is flagged as initially disabled and is not persistent / has no parent / not linked to a quest and has a Z position ≠ −30000, then it is auto set to −30000.
- If a record is set to −30000 or below but not initially disabled, then it is given the flag.
- If a record is flagged as deleted and is not a navmesh, then remove the deleted flag, add the init disabled flag and put to −30K.
- Places all vertices of an initially disabled navmesh to −30000 in accordance with what the Z-Floor Patcher does.
- For every ref that gets changed by the DLL, the playerRef parent is also added with the flag "set enable state opposite to parent" to ensure they are never re-enabled by accident. This is a synchronisation safety measure, many plugins with disabled refs already do this.
Skyrim can tolerate many data issues, but bad placement coordinates are particularly annoying because they still get rendered, and in particular, deleted references can in some cases lead to crashes.
Basically, this plugin fixes objects in-game that are not correctly disabled and therefore still render. It also fixes objects marked as "deleted" (you should never remove an object this way, it can cause issues) and fixes navmeshes with vertices set to a too-low vertical position.
Disabled Reference Integrity Fix does not try to be a general "performance magic" mod. It solves small mistakes made by mod authors to ensure that only what we want seen is rendered.
Core Behavior
The core plugin function of manipulating record flags and positions was adapted from Base Object Swapper source code.
The plugin can run in two phases:
Phase 1: Primary
InitItemImpl + Load3D Hooks
Intercepts references before their meshes and textures load. This is where actual stutter prevention happens. References at −30000 without the initially disabled flag are caught and gated here unconditionally, no exclusion logic can cause them to be silently skipped.
Phase 2: Secondary
Cell Load & Save Events
Runs on cell load events and on save load. Handles Disable() calls, enable parent attachment, navmesh vertex correction, and acts as a safety net for anything the hooks may have missed. Fires after meshes are already loaded but ensures correct game state going forward.
This keeps correction automatic while avoiding broad, blind edits. The plugin is script-free and lightweight, no scripts, no MCM, no UI frameworks, no gameplay systems. Event-driven behavior instead of constant polling. The plugin only engages during cell processing.
Configuration
Everything is configurable in DisabledReferenceIntegrityFix.ini:
Exclusions and Control
By default only marker-type references are excluded from correction. Any other form type sitting at −30000 without the initially disabled flag will be processed.
You can exclude known sensitive content via the INI:
Exclude by plugin name Exclude by FormID
This lets you keep known edge-case content untouched while still benefiting from automated cleanup elsewhere. DynDOLOD.esp is excluded by default, as the effect of position changes on the initially disabled records it modifies is not yet confirmed.
Logging and Diagnostics
Logging is built-in and configurable.
Standard Mode
Useful operational summaries without noise.
Verbose Mode
Available for deep troubleshooting sessions.
Log Levels
1=error · 2=warn · 3=info · 4=debug · 5=trace
Logging keeps track of the record type and FormID so you can see exactly what was problematic. If you want to verify in-game that fixes are being applied, use the Prid console command to select a reference regardless of its state, then inspect it with More Informative Console. Example: Prid 0xFECF0871
Compatibility
Built for Skyrim SE / AE / VR. Compatible with 1.5.97 and 1.6.1170. Other versions are untested.
✓ Compatible with any mod that creates or modifies records.
✓ Complements load-order cleanup and conflict resolution, but does not replace them.
✓ No known conflicts with other SKSE plugins.
As always, if you enable experimental settings, test in your own setup first.
Performance Expectations and Limitations
This mod correctly disables and stops rendering of unwanted records, mostly caused by other mods.
What to expect
- Less micro-stuttering
- Fewer crashes or bugs caused by deleted records
What not to expect
- It will not fix unrelated bottlenecks (scripts, drawcalls, textures, CPU limits…)
- It is not a generic FPS booster, just a record fixer.
Results scale with the number of mods you have. This mod only fixes non-base-game content, so a noticeable performance boost is only likely if the mods you use are truly broken.
There is a possibility this mod touches (despite the strict rule system) unintended records. Some records are disabled but not set to −30000 because they are used by quests, have linked parents, or are persistent. Some record types such as Markers must not be touched. If you find any issue, please report it so specific references or plugins can be excluded. You can also blacklist them yourself via the INI.
If you are experienced enough, it is always better to manually fix these issues in xEdit rather than fully relying on this plugin. This is an additional layer of protection, not a replacement for proper load-order management.
FAQ
Is this safe to install mid-save?
Yes.
Should I enable all options immediately?
Start with defaults, playtest, then enable experimental options only if you have a clear reason.
Do I need verbose logging all the time?
No. Keep verbose off for normal play. Use it temporarily when debugging.
Credits & Source Code
SKSE Team for SKSE
Ryan McKenzie for CommonLibSSE
CharmedBaryon for CommonLibSSE-NG-VR
doodlum for pointing out core malfunctions
Supertron for ClibDT - CommonLib Dev Toolkit
powerofthree for Base Object Swapper source code, used as a template
patchulidev, Quantumyilmaz, shazdeh2, J3w3ls, aglowinthefield for assistance, troubleshooting and ideas
Modding Guild and all beta testers for their time testing and providing feedback
If you'd like to support development:
Instructions
Download and install like any other mod. Don't forget to check and configure the ini to your liking.
Requirements
Optional Requirements
Disabled Reference Integrity Fix AE (SKSE)
For Skyrim 1.6.640 - 1.6.1170. Also works for 1.6.1179 (GOG) Don't forget to endorse the mod if you want to support it!
Disabled Reference Integrity Fix SE (SKSE)
For Skyrim 1.5.97. Don't forget to endorse the mod if you want to support it!
Disabled Reference Integrity Fix VR (SKSE)
For Skyrim VR. Untested. Don't forget to endorse the mod if you want to support it!