This is the most actual stability guide that will help you to fix known crashes, technical problems, bugs and improve overall gaming experience as much as the old 32-bit game engine allows.
Philosophy of Crashes
Complete text
Before we start to work on something we should understand what exactly we will work with. Crashes-To-Desktop (CTD) always caused by Unhandled Exceptions inside the game process. It means something went bad in a way when the game engine cannot continue its work. For example, we need to read a value in some configuration file. We read the file, find the required variable and parse its value. But what if we try to read a file that is not exist? - Exception will be thrown that potentially may crash your game. Developers must check first if the file exists and only then try to read it.
Skyrim is a game, considered to be a modding sandbox. It was developed to be modded, special tools was shared for modmakers to help them create new content for the game. Everything was done in a way to allow players make mods. Except file validation.
You can replace any file you want for the game whether it will be esp, animation, texture or skeleton, but the game engine completely have no checks for what is that file. You can simply create a txt file, rename it to skeleton.hkx, put it for some creature and the game seriously will consider the file as a skeleton. No checks for structure, no checks for resource data at all. And this is the most common reason of CTDs in 2020 skyrim.
Let's say, you downloaded a new remodel for sweetrolls, it has a mesh and the mesh was built with some new format that game engine doens't know. It will have the same extension and look like valid, it will even work, but under some circumstances some data inside the mesh will be different, the game engine will not expect that and in result it may lead to crash. Simply because the mesh format is not correspond to one, expected by engine. Is it fault of modmaker? - No, this is a completely developer's fault. If a file is expected to be replaced it must pass checks and only then used.
Ofcourse, this is not the only reason for CTDs. The second most common reason of crashes are bad designed mods/scripts. The game gives to modders quite wide opporunities to create stuff. If a modder doesn't know how to use them properly or simply made a mistake it may also lead to unhappy consequences, especially with SKSE usage. The game can crash and even ruin your gamesave because of one 10-lines script.
The game also have unsafe memory design, internal bugs, 32-bit app limitations, legacy code that works by miracle, but these 2 reasons above cover 95% of CTDs of modern skyrim by my analysis. In other words, if you're modding your game you're always risking to get crashes.
TL;DR
Most of modern skyrim crashes caused by 2 main reasons:
- The game engine has no resource checks
- Bad designed mods
If you're modding your game you're always risking to get crashes.
Part I - Memory Patches
Skyrim's memory model was designed to work with fixed sized memory blocks. There're a lot of memory blocks in the game process, but we're insterested in 2 main blocks. These blocks hold dynamic in-game data such as NPCs, quests, items and models of everything you see in the game together with script data and something else. It's obvious, the more you mod your game the more data will be stored inside these blocks. But, their sizes are fixed and if stored data overflow crash happens.
We have 2 ways to fix the problem:
- SSME: Largely increase their size to fit appetite of modern skyrim.
- OSAllocators: Remove these blocks and store its data in shared area using OS allocations.
Both ways work, both ways have its pros and cons, and both ways will be shown here. You can choose yourself what path to go:
SSME (Recommended):
+ Found by me as the most stable way
+ Uses default alloc method that engine supposed to work with
- Block size increased but still limited (enough for vast majority of players)
- Size of Block 2 cannot be modified (but it's very hard to overflow the block even with a hardly modded game)
OS Allocators:
+ Blocks completely unlimited, all data stored in shared process area
+ Supposed to be faster
- Less stable by my tests and much more sensitive to resource data
- May require additional calibrations
Opinion: I always prefer SSME way. for me it behaves more stable and less buggy, however, if your game is very very extremely modded limitations of SSME way may affect. However, I met only one person yet who was able to mod the game to such condition. If you still don't know what to choose go SSME way, it will fit 99% of players.
SSME way:
SKSE configuration
SKSE is an extender for Skyrim that expands its script language, allows mod makers to create native functions and much more. It is mandatory to have installed SKSE nowadays. In case for some reason you didn't install SKSE yet, it can be found here: https://skse.silverlock.org/
After installation you need to create a file named SKSE.ini in directory Data/SKSE. If you already have it make sure that u have right values for variables as below. The most important config here is DefaultHeapInitialAllocMB it is responsible for Block 1 size, we set it to 1280 (default 256) that will fit even extremely hard modded games.
[General]
# Warns us if some mod is missing when we load a game save
EnableDiagnostics=1
# Skse will do clean up if u have dirty removed some mod from a game save
ClearInvalidRegistrations=1
[Memory]
# Memory patches with recommended values
DefaultHeapInitialAllocMB=1280
ScrapHeapSizeMB=256
[Display]
# Higher quality of makeup textures for characters. 2048 should be pretty enough. Default: 256
iTintTextureResolution=2048
[Debug]
# If your skyrim has crashed it will create a mini crashdump that we may use to determine the reason of it
WriteMinidumps=1
CrashFixPlugin
This is the main stability plugin for Skyrim LE as it fixes many consequences caused by lack of resource checking as well as other crashing places. Can be found here: https://www.nexusmods.com/skyrim/mods/72725/
EnbSeries
It is mandatory to enbseries be installed for skyrim nowadays not just because it's beautiful, but for memory management and other features. Install the last version from here (if not installed): http://enbdev.com/download_mod_tesskyrim.htm
Once installed find your enblocal.ini in the main directory. It is a config file with basic local options for enbseries.
ReduceSystemMemoryUsage - delegates texture data storage to another process(es). This is the most important option that should always be enabled. Greatly frees the game process memory from texture data what prevents the game from crashes caused by 32-bit app memory limitations.
VideoMemorySizeMb - don't forget to put here the amount of your video memory size (mb). This way enb will know how much it can use. Or if you are too lazy or just don't know turn AutodetectVideoMemorySize to true.
ExpandSystemMemoryX64 - experimental option that enables blocks storage on the bottom of the process memory. May help with stutterings. Not recommended due to inability to work with block 1 more than 768mb. You can play with the option if you want but firstly you should set DefaultHeapInitialAllocMB=768 in SKSE.ini, otherwise CTD on loading happens.
EnableFPSLimit - disable this if you want to play with uncapped or higher than 60 fps.
If you still have some technical problems with enb or the game itself try to use the ISSUES AND BUG FIXES section here: https://www.nexusmods.com/skyrim/mods/38649 If your PC is not strong enough you also may find enboost useful.
DO NOT REPLACE YOUR enblocal.ini WITH ANY ENB PRESETS! This is your own configuration file for your PC.
Safety Load
This mod fixes the annoying bug when your loading between cells becomes infinite. It happens because of deadlock which the mod fixes. Can be found here: https://www.nexusmods.com/skyrim/mods/46465
OS Allocators way:
SKSE configuration
SKSE is an extender for Skyrim that expand its script language, allows mod makers to create native functions and much more. It is mandatory to have installed SKSE nowadays. In case for some reason you didn't install SKSE yet, it can be found here: https://skse.silverlock.org/
After installation you need to create a file named SKSE.ini in directory Data/SKSE. If you already have it make sure that u have right values for variables as below:
[General]
# Warns us if some mod is missing when we load a game save
EnableDiagnostics=1
# Skse will do clean up if u have dirty removed some mod from a game save
ClearInvalidRegistrations=1
[Display]
# Higher quality of makeup textures for characters. 2048 should be pretty enough. Default: 256
iTintTextureResolution=2048
[Debug]
# If your skyrim has crashed it will create a mini crashdump that we may use to determine the reason of it
WriteMinidumps=1
CrashFixPlugin
This is the main stability plugin for Skyrim LE as it fixes many consequences caused by lack of resource checking as well as other crashing places. Can be found here: https://www.nexusmods.com/skyrim/mods/72725/
Also we need a plugin preloader to make it work proper: https://www.nexusmods.com/skyrim/mods/75795/ (be sure to put the dll to the same directory with skyrim.exe)
Once everything installed find the config file: Data/SKSE/Plugins/CrashFixPlugin.ini and set UseOSAllocators=1.
If you have any problems you can also take attention on options like CustomMemoryBlock and others. All options are pretty well described.
EnbSeries
It is mandatory to enbseries be installed for skyrim nowadays not just because it's beautiful, but for memory management and other features. Install the last version from here (if not installed): http://enbdev.com/download_mod_tesskyrim.htm
Once installed find your enblocal.ini in the main directory. It is a config file with basic local options for enbseries.
ReduceSystemMemoryUsage - delegates texture data storage to another process(es). This is the most important option that should always be enabled. Greatly frees the game process memory from texture data what prevents the game from crashes caused by 32-bit app memory limitations.
VideoMemorySizeMb - don't forget to put here the amount of your video memory size (mb). This way enb will know how much it can use. Or if you are too lazy or just don't know turn AutodetectVideoMemorySize to true.
EnableFPSLimit - disable this if you want to play with uncapped or higher than 60 fps.
If you still have some technical problems with enb or the game itself try to use the ISSUES AND BUG FIXES section here: https://www.nexusmods.com/skyrim/mods/38649 If your PC is not strong enough you also may find enboost useful.
DO NOT REPLACE YOUR enblocal.ini WITH ANY ENB PRESETS! This is your own configuration file for your PC.
Part II - Animation Fixes
Installing too many animations may bring unwanted consequences, in the worst case you'll not be able to load or start a new game. Even if you don't have additional animations it's still recommended to go through the part.
FootIK Solution
When you install too many animations the first problem you meet will be the FootIK error. Usually it happens on the first game loading in open spaces. There're several ways to fix the error. Choose one.
ContinueGameNoCrash
This mod will help us to prevent FootIK error (and probably others) when loading a game save with many fnis animations installed. It works with a simple trick: if we load a game save directly we risk to get error, but if we start a new game and only then load the save the error never happens. And this is what exactly the mod does. Can be found here: https://www.nexusmods.com/skyrim/mods/78557/
I recommend to put esp of the mod on top of load order.
Warning: the version has a little bug, when you start a new game and want to load another save you need to load it twice. Happens only once after a new game creation. Can be fixed with pressing F5 F9 F9.
Load Game CTD Fix
The new version of ContinueGameNoCrash. Works without esp, dll only. Also fixes first loading bug and correctly shows messages with missed esp's. Can be found here: https://www.nexusmods.com/skyrim/mods/85443
Warning: may impact on fps. I found the dll consumes up to 5 fps for me what made me refuse the solution for personal usage.
Animation Loading Fix v1.0 (Recommended)
Is a modern solution that preloads animations what allows to pass FootIK initialization correctly. I didn't use the solution for long but it should be the best one. Can be found here: https://www.nexusmods.com/skyrim/mods/98204 Get version 1.0.
Warning: VERSION MUST BE STRICTLY 1.0. DO NOT INSTALL VERSION 1.1 OR HIGHER, IT'S INCOMPATIBLE WITH THE NEXT PLUGIN.
Animation Limit Solution
Skyrim has internal limit of numStatcNodes when passing which the game will always crash on loading until you remove some animations. There're 2 solutions to fix this. Choose one.
Animation Limit Crash Fix LE (Recommended)
This plugin was created by me while debugging the crash. It always drops the numStatcNodes register what prevents crashing and also may increase FPS and loading speed. Can be found here: https://www.nexusmods.com/skyrim/mods/100672
Details about performance impact can be found here: https://www.nexusmods.com/skyrim/articles/52477
Animation Loading Fix v1.1
This plugin since version 1.1 has it's own solution to fix the limit problem but with no performance impact. If you don't care about FPS and don't want to hold additional dll's you can use this solution. Can be found here https://www.nexusmods.com/skyrim/mods/98204 Get version 1.1.
Part III - Optional
This part is not strictly required, however can improve overall game quality and/or stability under specific circumstances.
HDT Physics Extensions Crash Fix
If you're using HDT-PE (the mod that gives you physics for hair, body and other things) you may suffer from random CTD's on game loading. Or may not. Btw, I recommend to install the plugin if you're using HDT-PE because the problem can appear anytime as the cause is not yet completely clarified, especially why one suffers from it and another one not. My bet is it depends on physics preset, so if you gonna change it you probably risks to obtain the problem.
The plugin can be found here: https://www.loverslab.com/files/file/12301-hdt-physics-extensions-crash-fix/
Papyrus performance
Do you have any problems with papyrus (e.g. big delays between scripted actions, something happens longer than intended, actions happens not in the right time)?
No
Then you don't need to do anything.
Yes
It may happens because of the overloaded script engine or a bad designed mod. As tests shown, it shoudn't happen in a normal working game with well tested mods. Highly likely you have a mod that causes these problems or the mod where it happens have problems by itself. However, for overloaded script engine may help these options:
[Papyrus]
fUpdateBudgetMS=1.6
fExtraTaskletBudgetMS=1.6
fPostLoadUpdateTimeMS=1000.0
iMaxMemoryPageSize=8192
iMinMemoryPageSize=256
iMaxAllocatedMemoryBytes=67108864
bEnableLogging=0
bEnableTrace=0
bLoadDebugInformation=0
bEnableProfiling=0
Put them to the Documents/My Games/Skyrim/Skyrim.ini
It will not cure your problems, but may smooth them.
If you want to continue configuring Skyrim.ini I recommend to use this guide: https://wiki.step-project.com/Guide:Skyrim_Configuration_Settings But be careful and make backup before any changes.
High FPS Patches
This section mainly designed for those who want to play with uncapped fps, but will be useful for everybody.
Havok Fix
Havoc (physic engine) should be synchronized with frame rate, but it's static by default and can be configured with fMaxTime option. By default it's configured to work with 60 fps, if your fps goes above or below physic and/or sound glitches may appear. Havok Fix Plugin was created to synchronize frame rate with Havok update time what prevents these glitches. Can be found here: https://www.nexusmods.com/skyrim/mods/91598
Warning: may impact on fps as it works every frame. To lower the performance impact I recommend to set fixed update time with 'freq' option. I play with 50.
BugFixPlugin
As the name mentions, it fixes several game bugs. Also option FixVerticalLookSensitivity fixes the annoying camera sensity bug with high fps. Mod can be found here: https://www.nexusmods.com/skyrim/mods/76747
Windows 7 users warning
If you're a user of Windows 7 x64 your 32 bit Skyrim cannot work with more than 2GB (by default). It caused by Data Execution Prevention which doesn't work properly with LAA (Large Adress Aware) flag in this version of Windows. To allow Skyrim consume up to 4GB you should disable DEP for exact this application. You can easily do this following this instruction: https://www.online-tech-tips.com/windows-xp/disable-turn-off-dep-windows/
It is very important for Skyrim to have enough memory. If at some point the game engine will not be able to find enough memory it will simply crash.
Critter Spawn Fix
Vanilla critter spawn in Skyrim has very poor performance and architecture, it damages our papyrus viability and may lead to problems in some cases, especially for heavy scripted skyrim. Completely redone critter spawn can be found here: https://www.nexusmods.com/skyrim/mods/76139
Dangerous Mods
PlayerSuccubusQuest (https://www.loverslab.com/files/file/667-psq-playersuccubusquest-for-sexlab/) - cum inflation feature of this mod produces infinite threads what eventually breaks papyrus script engine together with your game save. Disable this feature if you want to play the mod safety.
Simply Knock & StorageUtil (https://www.nexusmods.com/skyrim/mods/73236) - this mod uses StorageUtil on gamesave loading to get configuration with relative access "../SimplyKnockData/Common.json". The path is converting by StorageUtil with codecvt function which in that case may work incorrect on Windows OS and access null ptr what crashes the game. It is not really a Simply Knock or PapyrusUtil problem, however are triggering by them. Crash is platform dependent and not guaranteed to pop up for everybody.
Dragonborn In Distress (https://www.loverslab.com/files/file/8215-dragonborn-in-distress/) - may cause CTD while save attempt in active quest stage for unknown reasons (I didn't investigate it). Since ver 2.03+ seems to be fixed.
Recommendations
- Don't alt-tab from the game. It's simply not supported by Bethesda even with vanilla game. But if you really need to alt-tab at least make a savegame, because returning back you may meet a CTD.
- Do not disable your mods from load order during game time. It may break your scripts, quest and gamesave completely even if clean it up.
- Always make backups. For everything. For example some mods replace vanilla scripts and if you turn off a mod like this it may break the script completely. So it is very important to do a proper clean up and restoration after deletion. Backups saved my Skyrim many times.
- Keep your main save away from new mods and even mod updates. You cannot know will you like this mod or not, will it bring any problems and so on. If you want to try a new mod i recommend to start a new game and try it out. And after some time if everything looks good include the mod to your main save.
- If you pack your mods into BSA be careful with seq files. BSA archive should have proper flags if contains a seq file. Otherwise it will be unable read and break the mod. Furthermore, new game will be required even if you fixed it.
- If you want to try a new mod, at first better to put it at the end of the load order. If you do it this way the new mod will override everything it needs and it will be less chances to break something for the new mod because of incompatibility with others. However, with this action you still can break old mods in case of incompatibility.
Useful
Game paths
Papyrus logs: Documents/My Games/Skyrim/Logs/Script
SKSE crashdumps: Documents/My Games/Skyrim/SKSE/Crashdumps
Regedit Skyrim installation path: HKEY_LOCAL_MACHINE/SOFTWARE/WOW6432Node/Bethesda Softworks/Skyrim
Loadorder: %AppData%/Local/Skyrim
Links
Wide collection of guides and useful links to solve many game related problems by @worik https://www.loverslab.com/blogs/entry/6768-patchwork-how-do-i-fix-this-and-that-a-link-collection/
Well done blog about how to properly setup and mod the game by @donttouchmethere https://www.loverslab.com/blogs/entry/7521-conglomerate-01-basic-setup-for-modifing-skyrim-le-well-my-skyrim-got-messy-now-i-have-to-clean-it-up-so-i-thought-to-myself-why-not-start-a-blog-about-that/
36 Comments
Recommended Comments