Jump to content

Crash fixes by meh321


Deathwing514

Recommended Posts

So I just spotted this mod on Nexus, and was curious if anyone in the STEP community tried out this plugin.

 

The Author states "I have been using this for a while now (week+) and seems like game is more stable. Haven't had problems with my save games. Post your results here, it would help. Especially comparisons with and without plugin if you are doing tests. You can turn each individual fix on / off in the SKSE/Plugins/CrashFixPlugin.ini, default settings recommended but if you have problems with something and you know what you're doing you can change. If you want to see exactly what crashes are fixed (with addresses) and a small explanation of my best understanding of the crash then check the INI file.

This plugin is meant to fix some common crashes AFTER you have followed STEP guides and sensible modding rules! It does not fix problems that come from modding irresponsibly or conflicts between mods.:

 

He seems to promise a more stable game, and if he truly does speak the truth, It could resolve a lot of common CTD's that many people experience.

 

However, I am skeptical, and wanted to hear the STEP communities thoughts on this plugin.

 

Link: https://www.nexusmods.com/skyrim/mods/72725/?

Link to comment
Share on other sites

Meh321's testing strategies are questionable at best.

He claims that test with ugrids at 15 or higher he cannot load the game without safetyload which I wouldn't disagree with however using anything above the default can cause all sort of issues and unknowns; I can see using 7 and maybe 9 but 15 is too absurd and I doubt the engine is even equipped to handle it because keep in mind increasing ugrids is exponentially more intensive.

 

I do not have a fully loaded game to properly put his methods to the test but i feel that I am eligable to make an educated guess that the current methods of skse mem tweaks + enboost is all that users need.

Anything more is either irrelevant or redundant.

 

However I'm glad to have someone prove me wrong as it would be more info.

 

I will agree with about half of what he claims on the mod page but the rest is incorrect by current standards.

Link to comment
Share on other sites

Here's a quick overview of what his SKSE plugin addresses.  Looks like workarounds for bad engine coding:

 

 

; Info: Game crashes when strcmp is passed NULL char*
; Address: D573A8
; Cause: Most frequently happens in TthkbClipGenerator::activate (0xBF2FB3),
; tracked issue to skeleton was deleted in another thread while
; this function is attempting to use it. Have seen in other places
; too.
; Solution: Unknown. This doesn't really fix it for BF2FB3 because it just pops up in foot IK.
; If patched in foot IK it pops up in hand IK, the problem is larger than just this.
; Still enabled because it may fix crashes in other places too this is a very common function.
; There's really no reason not to have it since the game would crash certainly with this off.
StrCmp=1

; Info: Game crashes when strlen is used on NULL char*
; Address: 46EDF0
; Cause: NiNode names are compared, one of the NiNode's name is NULL.
; Code:
; NiNode ** v72 = NiNode::children.data - this is iterated until count
; NiNode * v69 = ...
; const char * v56 = v69->name;
; if ( v56 )
; {
; const char * v57 = v72[v49]->name; // <- v57 name is not checked for NULL for some reason ?
; _strnicmp(v56, v57, strlen(v57)); <- strlen on NULL, also result is not even used anywhere!
; }
; Solution: Unknown, temporarily bypass whole strcmp since it's unused.
StrLen=1

; Info: Unknown, reported as loading save game.
; Address: 8B437C - vtable seems to be 0 or wrong pointer is used.
; Cause: Unknown
; Solution: Skip since this is the last part of the function and already has a check anyway
UnkUniqueId=1

; Info: Unknown, reported as loading save game. Possibly related to rendering. First
; argument is gNiDX9Renderer->unk_650 which is a pointer.
; Address: CEC5EC - null pointer is passed as second argument to function, this function does not expect it
; Cause: Unknown
; Solution: Bypass using argument if it's null. Maybe doesn't fix.
Render650=1

; Info: Unknown, no info was provided. // char __thiscall TESObjectREFR::unk_4D4EB0(TESObjectREFR *this)
; Address: 4D4EB9 - vtable of base form is 0
; Cause: Unknown
; Solution: Bypass and pretend that base form is 0 since the function does this check itself already
UnkObjRef4D4EB0=1

; Info: Game is saving location's seen data to save game. The data is NULL.
; Address: 4C6031
; Cause: Game doesn't check for null pointer
; Code:
; TESObjectCELL * v3 = ...
; v5 = BaseExtraList::GetSeenData_40D980(&v3->extraData);
; result = (void *)(*((int (__thiscall **)(_DWORD, _DWORD))*v5 + 1))(v5, v2); // <-- v5 can be null! but not checked
; v5 is IntSeenData, size is known.
; Solution: Only solution seems to be temporarily creating an empty IntSeenData and writing this to stream instead.
NullSeenData=1

; Info: BSFixedString::Set is called with NULL argument.
; Address: A51285
; Cause: Don't know
; Solution: Ignore call when NULL argument. Not really a solution :P probably better than crashing though.
StringRefSetNull=1

; Info: This crash happens because StrLen crash was prevented.
; Address: 46EE1D
; Cause:
; Solution: Skip over it.
SkipStrLenCrash=1

; Info: This crash happens because unknown reasons during loading. Something to do with behavior graph.
; One of the more common crashes I get.
; Address: C27A8F
; Cause:
; Solution: Don't know, trying to let game think the value is 0 and see what happens.
bhvGraphUpdateLoad=1

; Info: Crash happens during loading, no idea. Might be related to rendering.
; Address: D822D8
; Cause:
; Solution: Tried patch something but it probably doesn't work.
Unk11=1

; Info: Incompatible skeleton, but could be something else too.
; Address: 46ECF5 - NiNode children access
; Cause:
; Solution: No solution from here, but since it's going to crash anyway we could at least
; warn user about possible incompatible skeleton and let them fix it. Shows messagebox
MissingNode=1

; Info: Crash happens unknown constructor (TESObjectLAND::unk_24 object), movaps instruction is used
; but heap allocate did not allocate this object to have 16 align. Crash happens more frequently
; with high Ugrids because more cells are loaded and greater chance to misalign.
; Solution: Could align only this object or align all objects. Trying with all to see what happens since
; same error could be elsewhere as well and I think I have seen it elsewhere.
AlignHeapAllocate=1

; Info: Crash, it's function array and index goes out of bounds which causes it to call invalid address.
; Address: 6F3A31
; Solution: Check index before calling.
IndexError1=1

; Info: Not really a crash but, this is INI setting bInitiallyLoadAllClips:Animation. Seems to lessen CTD
; on load if set to 1. This is here so users don't have to mess with their INI. Disable if you for
; some reason have a problem with this.
InitialAnimationLoad=1

; Info: Crash happens in "MovementPlannerAgentWarp" function, unknown what it does. LookupFormById returns
; NULL and game does not check or expect this to happen.
; Address: 76E358
; Solution: Game has a check for if returned isn't actor it sets 0 as value, we will do same if NULL is returned.
MovementPlannerAgentWarp=1

; Info: Crash happens in DDB0A0, seems to be used in some havok animated object's vtables.
; Normally these crashes are fixed by aligning allocated memory with 16 bytes. But
; this one isn't because it can be used on static memory locations which aren't using
; Skyrim's allocator at all, this means that memory isn't guaranteed to be 16 byte aligned.
; Address: DDB0B2
; Solution: Use movups instruction instead of movaps.
UnallocatedMovaps=1

; Info: Weird crash with NULL ptr in TESWorldSpace::GetCellByCoordMask_4375D0, don't know why it happens.
; Address: 437604
; Solution: return 0 if this crash would happen.
CellNullCrash=1

; Info: Crash when trying to do: v14 = MagicItem::unk_406C70(a3, result)->properties.projectile;
; Function may return NULL and other places that call this function check for NULL return.
; Address: 7E39EC
; Solution: Check for NULL and skip if it is.
CombatMEProjectile=1

Link to comment
Share on other sites

I've always had CTD and freeze problems with the following that I've been unable to correct, even after hours of manually combining compatibility patches for them all and resolving conflicts in TES5Edit. Might be a good place to start?

 

  • STEP: Extended
  • Falskaar
  • Wyrmstooth
  • Summerset Isle
  • JK's Lite
  • Expanded Towns and Cities
  • Civil War Overhaul
  • Immersive Patrols
  • Helgen Reborn
  • Immersive College of Winterhold
  • Immersive Armors
  • Immersive Weapons
  • Immersive Creatures
  • SkyTEST
  • Campfire
  • Hunterborn
  • Frostfall
  • Realistic Needs and Diseases
Edited by Electrocutor
Link to comment
Share on other sites

; Info: Crash when trying to do: v14 = MagicItem::unk_406C70(a3, result)->properties.projectile;
; Function may return NULL and other places that call this function check for NULL return.
; Address: 7E39EC
; Solution: Check for NULL and skip if it is.

 

I've reported the 7E39EC address some time ago and Meh321 incorporated a workaround for the error, I had thought this wasn't of any use to the author, since everyone's load order can be very different and might not help anyone, I was proven wrong. It turned out that the error can be present in a few cases, the fix he made is genuine, I think the crash was caused by Requiem's magic or possibly some ability from Imperious race mod, since I do not run any other magic altering overhauls.

 

Under some circumstances during combat I would crash due to this error.

 

With only this applied and nothing else, I can run around Skyrim indefinitely for 20min+ in UGrids 5 and other .ini settings at S.T.E.P recommended defaults.

 

I have disabled other settings from Crash Fixes to test if crashes may happen under any other circumstances and so far my load order of 170+ mods is 99% crash free since applying this one setting. With the combination of tweaking Enhanced Blood Textures (notorious for crashes) and replacing a combat overhaul with something less stressful.

 

I don't think this plugin would have fixed the CTD's I had say one or two years ago. So even if it was available in it's current state, it probably wouldn't have helped me since there were so many variables that were making the game engine unstable.

 

When I stumbled upon Crash Fixes on the site that would not be named, I was intrigued, and it seemed similar to what a stability mod for FO:NV does. The author seems to know what he is doing, his test methods are called unorthodox here, I do agree, but in the end there doesn't seem to be any concrete evidence that Meh321's causes anything to go wrong with save games at the moment.

 

Warning, ramble below:

 

I must stress that, rarely do I ever appear to report any issues since nobody would learn anything from my particular experience, since my Skyrim setup is very specific to my OS, hardware and load order configuration.

 

My only 2 threads that I have created have resolved themselves by essentially changing everything since I upgraded my system. It was for the better, which I am quite happy with after losing so much faith with modding in general, in the past 4 years I had many failures to face but not without a bright side to it.

Edited by EntropyZ
Link to comment
Share on other sites

Completely BTW: what were those tweaks to EBT?

Most people aren't aware 'cause they don't read the description since it's a very popular download. Those settings are in the MCM menu. You just delay the scripts and/or reduce the damage it takes for blood to splash or whatever.

 

The problem is that when you use overhauls that change damage you're going to have to take a shot in the dark to change these appropriately so there's blood but not too much since the game is really finicky when it comes to script latency and FPS. The game engine becomes really unstable, I think I found a masterlist of poorly running mods on reddit that outright said that it isn't recommended to use this mod at all or just turn off the scripts and use only the textures.

 

The default settings with Requiem overhaul are insane tbh, since the damage is so ramped up. It was one of the main causes of my crashes and I only realized that after 2 years since using both Requiem and EBT together. I got so angry I split my keyboard in two, now I sit with my rubber dome Microsoft Comfort Curve 3000 happily. I was relieved after all that, I removed one of the four main causes of crashes on my system, and currently I have 0 crashes after carefully cleaning, patching, tweaking and load ordering mods. I have achieved what I thought was impossible with mods. You could say nearly 7 years of Bethesda game modding has finally payed off.

 

Now I wonder if I can ever make Oblivion or Fallout: New Vegas run fine.

Edited by EntropyZ
Link to comment
Share on other sites

Hi, I'm usually sceptical (and wary) of this "magical solving" patches, and honestly, I rarely CTD, but I do have microstutters, specially when strafing, I have a fair amount of mods (200ish), some of them very script heavy.
 
Anyway, using this and turning of the ReduceSystemMemoryUsage option in enboost, in Win 10 (which caps the ram usage of skyrim to 4096mb anyway), has really improved my game's microstutters, it always ran at 60+ fps but without this patch I had some microstutters, now is silk smooth.
 
Now I'm wondering if it's really this patch or the fact that I'm not using enboost.exe anymore.
 
 
P.D: Anyway, here is another mod from the same author, which I think Gopher would love to have had in his lets plays https://www.nexusmods.com/skyrim/mods/64588/?

Kinda removes the total need of the lockpicking perk tree, and some artifacts, but for those who really hate the minigames, this is a blessing.

Edited by Hackfield
Link to comment
Share on other sites

  • 3 months later...

Everyone still skeptical about this?  He's just posted the latest version up and now he's making some seriously interesting claims:

 

 

Added optional patch to completely remove Skyrim's memory allocation system and use regular C (VC++ 140) malloc instead. This has been tested by multiple people so far. It seems to reduce load times because it's a lot faster and uses less locking. It removes all memory blocks usage (no 1 GB max limit) so don't have to worry about configuring those. Removes the bug where game can deadlock / freeze when running out of memory so Safety Load is not needed with this patch enabled.

... of course, it requires cooperation from the skse team.

 

I have no idea what all this guy is doing, but he's gaining a critical mass of Kool-aid drinkers.

Link to comment
Share on other sites

Everyone still skeptical about this?  He's just posted the latest version up and now he's making some seriously interesting claims:

 

... of course, it requires cooperation from the skse team.

 

I have no idea what all this guy is doing, but he's gaining a critical mass of Kool-aid drinkers.

It's take everything with a grain of salt at this point, until people like Sheson can verify his claims. It was Sheson that fixed the memory issues in Skyrim and that which the SKSE Team adopted so we all know it's good, sound stuff. This...reminds me of a mod a while back (can't recall the name) which as touting all this great stuff and when it was scrutinized it was found to be mainly complete nonsense. I'm not saying this is nonsense, but until we have some verification of the source code...I wouldn't drink the kool-aid.

Link to comment
Share on other sites

reminds me of a mod a while back (can't recall the name) which as touting all this great stuff and when it was scrutinized it was found to be mainly complete nonsense.

I suspect you are referring to this.  Big claims, closed comments.  That said, this guy is a bit more approachable.  If anyone wants to put him to the question, he's hanging out on both his mod page and over at Reddit.

Link to comment
Share on other sites

I have been watching this guy for some time now, purely because he does a lot of SKSE work and he posts his source on the Nexus. It is really a good way to both, check his work and keep my coding knowledge current.

 

If you examine the source code you will see that he is making some very good checks and fixes in the assembly level of the game engine, ie. check memory address at one location and move to a new location when needed, that sort of thing.

Based on my level of Machine Level Assembler (it's nearly 20 years since I last coded anything in Assembler), I think it is safe to say he knows what he is doing and the fixes he is implemeting are made in good faith and he isn't "peddling snake oil".

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site, you agree to our Guidelines, Privacy Policy, and Terms of Use.