Advertisement
dunc001

CrashFixPlugin.ini

Aug 11th, 2016
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.68 KB | None | 0 0
  1. [Patch]
  2.  
  3. ; Info: Completely disable Skyrim's memory allocator and use regular C malloc. That means memory blocks will not exist anymore
  4. ; and game will not crash at some arbitrary limit. Theoretically it should also be faster (especially loading screens)
  5. ; and eliminate most ILS or freezing issues.
  6. ; IMPORTANT!!: You NEED custom plugin loader to run this so CrashFixPlugin.dll gets loaded before the game initializes!
  7. ; Here is the link to "SKSE Plugin Preloader": http://www.nexusmods.com/skyrim/mods/75795/?
  8. ; When this is enabled then Safety Load and SSME/SKSE memory patch are not needed, but they don't cause any trouble if you do have them.
  9. UseOSAllocators=1
  10.  
  11. ; Info: When the game crashes unexpectedly then write the relevant information from crash to Data/SKSE/Plugins/CrashLog/crash_time.txt
  12. ; If game crashes when running out of memory or has other issues it's possible for the file to not appear or become empty!
  13. ; If the game crashes in SKSE dll or a SKSE plugin dll then it's possible for the crash information to not appear.
  14. ; This setting's value is treated as flags where:
  15. ; 1 - enabled (TL;DR set this for normal enable)
  16. ; 2 - don't write timestamp into file name but instead always write to crash_last.txt (overwritten by default)
  17. ; 4 - don't ignore already known crashes, usually ones that display a message box are ignored
  18. ; 8 - append file if it already exists instead of replacing
  19. ; 16 - when the game crashes CTD without a message box about game stopped responding
  20. RecordCrashInfo=1
  21.  
  22. ; Write messages that appear in error box also to file in "Data/SKSE/Plugins/CrashFixPluginLog.txt"
  23. LogMessageToFile=1
  24.  
  25. ; Info: Warn user on startup if ENB settings are incorrect.
  26. WarnBadENB=1
  27.  
  28. ; Info: Crash happens unknown constructor (TESObjectLAND::unk_24 object), movaps instruction is used
  29. ; but heap allocate did not allocate this object to have 16 align. Crash happens more frequently
  30. ; with high Ugrids because more cells are loaded and greater chance to misalign.
  31. ; Solution: Could align only this object or align all objects. Trying with all to see what happens since
  32. ; same error could be elsewhere as well and I think I have seen it elsewhere.
  33. ; Result: Fixes these type of crashes. Some people report longer loading times and higher memory usage with this enabled!
  34. ; Update: Disabled by default since it's incompatible with some ENB settings, higher memory usage and longer loading times.
  35. ; It's safe and probably good to enable if you are ok with those downsides. I have not personally experienced
  36. ; any incompatibility with ENB, some people say it messes up their game that's why I wrote it here.
  37. AlignHeapAllocate=0
  38.  
  39. ; Info: Game crashes when strcmp is passed NULL char*
  40. ; Address: D573A8
  41. ; Cause: Most frequently happens in TthkbClipGenerator::activate (0xBF2FB3),
  42. ; tracked issue to skeleton was deleted in another thread while
  43. ; this function is attempting to use it. Have seen in other places
  44. ; too.
  45. ; Solution: Unknown. This doesn't really fix it for BF2FB3 because it just pops up in foot IK.
  46. ; If patched in foot IK it pops up in hand IK, the problem is larger than just this.
  47. ; Still enabled because it may fix crashes in other places too this is a very common function.
  48. ; There's really no reason not to have it since the game would crash certainly with this off.
  49. ; Enable one. NoTry may be slightly faster but catches less crashes.
  50. StrCmp=1
  51. ;StrCmpNoTry=1
  52.  
  53. ; Info: Game crashes when strlen is used on NULL char*
  54. ; Address: 46EDF0
  55. ; Cause: NiNode names are compared, one of the NiNode's name is NULL.
  56. ; Code:
  57. ; NiNode ** v72 = NiNode::children.data - this is iterated until count
  58. ; NiNode * v69 = ...
  59. ; const char * v56 = v69->name;
  60. ; if ( v56 )
  61. ; {
  62. ; const char * v57 = v72[v49]->name; // <- v57 name is not checked for NULL for some reason ?
  63. ; _strnicmp(v56, v57, strlen(v57)); <- strlen on NULL, also result is not even used anywhere!
  64. ; }
  65. ; Solution: Unknown, temporarily bypass whole strcmp since it's unused.
  66. ; Result: Seems to have stopped the crash for me.
  67. StrLen=1
  68.  
  69. ; Info: Unknown, reported as loading save game.
  70. ; Address: 8B437C - vtable seems to be 0 or wrong pointer is used.
  71. ; Solution: Skip since this is the last part of the function and already has a check anyway
  72. UnkUniqueId=1
  73.  
  74. ; Info: Unknown, reported as loading save game. Possibly related to rendering. First
  75. ; argument is gNiDX9Renderer->unk_650 which is a pointer.
  76. ; Address: CEC5EC - null pointer is passed as second argument to function, this function does not expect it
  77. ; Solution: Bypass using argument if it's null. Maybe doesn't fix.
  78. Render650=1
  79.  
  80. ; Info: Unknown, no info was provided. // char __thiscall TESObjectREFR::unk_4D4EB0(TESObjectREFR *this)
  81. ; Address: 4D4EB9 - vtable of base form is 0
  82. ; Solution: Bypass and pretend that base form is 0 since the function does this check itself already
  83. UnkObjRef4D4EB0=1
  84.  
  85. ; Info: Game is saving location's seen data to save game. The data is NULL.
  86. ; Address: 4C6031
  87. ; Cause: Game doesn't check for null pointer
  88. ; Code:
  89. ; TESObjectCELL * v3 = ...
  90. ; v5 = BaseExtraList::GetSeenData_40D980(&v3->extraData);
  91. ; result = (void *)(*((int (__thiscall **)(_DWORD, _DWORD))*v5 + 1))(v5, v2); // <-- v5 can be null! but not checked
  92. ; v5 is IntSeenData, size is known.
  93. ; Solution: Only solution seems to be temporarily creating an empty IntSeenData and writing this to stream instead.
  94. NullSeenData=1
  95.  
  96. ; Info: BSFixedString::Set is called with NULL argument.
  97. ; Address: A51285
  98. ; Solution: Ignore call when NULL argument. Not really a solution :P probably better than crashing though.
  99. StringRefSetNull=1
  100.  
  101. ; Info: This crash happens because StrLen crash was prevented.
  102. ; Address: 46EE1D
  103. ; Solution: Skip over it.
  104. ; Result: See StrLen.
  105. SkipStrLenCrash=1
  106.  
  107. ; Info: This crash happens because unknown reasons during loading. Something to do with behavior graph.
  108. ; One of the more common crashes I get.
  109. ; Address: C27A8F
  110. ; Solution: Don't know, trying to let game think the value is 0 and see what happens.
  111. ; Result: Haven't had this crash since.
  112. bhvGraphUpdateLoad=1
  113.  
  114. ; Info: Crash happens during loading, no idea. Might be related to rendering.
  115. ; Address: D822D8
  116. ; Solution: Tried patch something but it probably doesn't work.
  117. Unk11=1
  118.  
  119. ; Info: Incompatible skeleton, but could be something else too.
  120. ; Address: 46ECF5 - NiNode children access
  121. ; Solution: No solution from here, but since it's going to crash anyway we could at least
  122. ; warn user about possible incompatible skeleton and let them fix it. Shows messagebox
  123. MissingNode=1
  124.  
  125. ; Info: Crash, it's function array and index goes out of bounds which causes it to call invalid address.
  126. ; Address: 6F3A31
  127. ; Solution: Check index before calling.
  128. ; Result: Haven't had this crash since.
  129. IndexError1=1
  130.  
  131. ; Info: Crash happens in "MovementPlannerAgentWarp" function, unknown what it does. LookupFormById returns
  132. ; NULL and game does not check or expect this to happen.
  133. ; Address: 76E358
  134. ; Solution: Game has a check for if returned isn't actor it sets 0 as value, we will do same if NULL is returned.
  135. MovementPlannerAgentWarp=1
  136.  
  137. ; Info: Crash happens in DDB0A0, seems to be used in some havok animated object's vtables.
  138. ; Normally these crashes are fixed by aligning allocated memory with 16 bytes. But
  139. ; this one isn't because it can be used on static memory locations which aren't using
  140. ; Skyrim's allocator at all, this means that memory isn't guaranteed to be 16 byte aligned.
  141. ; Address: DDB0B2
  142. ; Solution: Use movups instruction instead of movaps.
  143. UnallocatedMovaps=1
  144.  
  145. ; Info: Weird crash with NULL ptr in TESWorldSpace::GetCellByCoordMask_4375D0, don't know why it happens.
  146. ; Address: 437604
  147. ; Solution: return 0 if this crash would happen.
  148. ; Result: Haven't had this crash since, but it's rare anyway so it could be coincidence.
  149. CellNullCrash=1
  150.  
  151. ; Info: Crash when trying to do: v14 = MagicItem::unk_406C70(a3)->properties.projectile;
  152. ; This 406C70 function is something like "GetMainMagicEffect". Sometimes though it may return
  153. ; NULL and in 90% of places the game expects this and checks for NULL result, this patch will
  154. ; fix the remaining locations.
  155. ; Address: 7E39EC, 657677, 6577D5, 65FEEC, 8127CF
  156. ; Solution: Check for NULL and skip (depends on location) if it is.
  157. GetMainMagicEffect=1
  158.  
  159. ; Info: Crash when game searches node "NPC COM [COM ]" on actor but the node was not found. This is unexpected
  160. ; for game because it uses the result without checking for NULL. This whole thing has something to do
  161. ; with mounting. The function that does this whole thing is present in "StopMountCameraHandler" and
  162. ; "MountInteraction" vtable. Also it seems that this has something to do with updating position.
  163. ; More info: Was reported that this could happen if non-humanoid tries to mount a horse. This is a rather specific
  164. ; error with a mod. Instead we will show error message to user when this happens so they can
  165. ; fix or uninstall that mod.
  166. ; Address: 6E7F85
  167. ; Solution: Check for NULL and if it is NULL then use base node of actor instead of this. It's fine because
  168. ; we only take X and Y position from it.
  169. ; Solution2: Show error message and crash after.
  170. MountNodeCrash=0
  171. MountNodeWarn=1
  172.  
  173. ; Info: Crash when game is trying to setup foot IK but there's a problem. Real cause is unknown but for me.
  174. ; So we will display a message box when this crash happens. Seems related to the
  175. ; StrCmp crash in BF2FB3, maybe. Try reducing the amount of installed animations.
  176. ; Address: BFECC1
  177. ; Solution: No solution from here, display warning with helpful tips.
  178. IKCrashWarn=1
  179.  
  180. ; Info: Crash happens when rendering and saving. I think this is when it renders the save game image.
  181. ; if ( v8 ) // <- not null
  182. ; {
  183. ; if ( v8 )
  184. ; v9 = *(v8 + 8); // <- *(v8 + 8) is null
  185. ; else
  186. ; v9 = 0;
  187. ; v10 = *(v9 + 140) * *(a2 + 4) // <- crash because null
  188. ; + *(v9 + 136) * *a2
  189. ; + *(v9 + 144) * *(a2 + 8);
  190. ; v21 = v10 - *(*(v8 + 8) + 148) * a3;
  191. ; }
  192. ; Address: CB051A
  193. ; Solution: We will skip this if block when *(v8 + 8) is null, as if v8 was null.
  194. RenderSave=1
  195.  
  196. ; Info: Crash was reported as casting spell. Only happens sometimes. Happens in movement controller.
  197. ; Seems like vtable is NULL.
  198. ; Address: 76636B
  199. ; Solution: This happens in a for loop and it happens in if clause. We can skip if this crash would happen.
  200. MoveControllerCast=1
  201.  
  202. ; Info: Crash when saving game and trying to render (possibly save game image again?). It's trying to get
  203. ; vtable of NULL pointer which will crash.
  204. ; if ((*a2 + 76)(a2, a1)) // a2 is null
  205. ; {
  206. ; *(0x1BA9344) = a1;
  207. ; *(0x1BA9340) = a2;
  208. ; }
  209. ; else
  210. ; {
  211. ; *(0x1BA9340) = 0;
  212. ; *(0x1BA9344) = 0;
  213. ; }
  214. ; Address: CAF9F7
  215. ; Solution: Skip function call and set return value to false so we don't have to use the NULL value.
  216. SaveRenderCrash=1
  217.  
  218. ; Info: Crash when game tries to get loaded node but it is set to NULL. Only ever seen this on two people.
  219. ; It is most likely actually related to corrupted mesh being unable to be loaded and game does not expect it.
  220. ; NiNode * node = a->GetLoadedStateNiNode();
  221. ; v2 = node->(*(vtable+0x14))(); // <- node is NULL
  222. ; if(v2) { *((int*)(v2 + 212)) = 0; } // <- we can skip this part since it has a check anyway
  223. ; Address: 4C119E
  224. ; Solution: Real solution would be to find the broken mesh and remove it. So lets notify user instead of ignoring this part.
  225. ; Enable one of the following, ignore problem and try to continue or show message box with object reference form ID and form Type.
  226. NullLoadedNodeIgnore=0
  227. NullLoadedNodeNotify=1
  228.  
  229. ; Info: Crash in GarbageCollector::Add when actor argument's base form is NULL. Game does not check this, when in
  230. ; some other places it does check for this possibility.
  231. ; Address: 690A69
  232. NullActorBaseForm=1
  233.  
  234. ; Info: Crash when modifying actor value but the pointer is bad, possibly due to actor being invalid. This happens often
  235. ; when script engine is lagged and spells want to modify actor values a lot.
  236. ; Address: 6E07C6
  237. AVSetCrash=1
  238.  
  239. ; Info: If your scripts use more than 65535 different strings then the save game will be corrupt and not possible to load.
  240. ; This fixes it by changing the save file format slightly if string count is higher than 65520. That means if you
  241. ; have this option enabled and your save game would have become corrupt it changes format instead and vanilla game
  242. ; or save game tools will not be able to open it! Opposite is true as well, if the count goes below 65520 after
  243. ; and you save again then the format reverts to vanilla.
  244. ; TLDR: Fix for https://forums.nexusmods.com/index.php?/topic/3924850-corrupt-saves-strcount-0xffff-ctd-on-load/
  245. ; Address: Around 30 different parts of code had to be patched.
  246. StringCount32=1
  247.  
  248. ; Info: Warn if SKSE memory patch is not active. This checks if default heap size is 256 or less and warns if you try to
  249. ; click New, Continue or Load in main menu. Still lets you play the game, just shows a warning.
  250. WarnSKSEMemoryPatch=1
  251.  
  252. ; Info: If AlignHeapAllocate is disabled by user then fix that one movaps crash manually. There's no downside to having this enabled.
  253. ; Address: 4BD832
  254. FixMovApsManuallyIfAlignedAllocateIsDisabled=1
  255.  
  256. ; Info: Overwrite array allocator directly when UseOSAllocators is set to 1. Don't understand the code enough yet to
  257. ; say if it's safe or not. At this point it's just here for testing.
  258. OverwriteArrayAllocator=0
  259.  
  260. ; Info: Player's NiNode (not necessarily same as loaded node) is NULL while drawing world.
  261. ; Address: 69B84B
  262. NullPlayerNode=1
  263.  
  264. ; Info: Function TESObjectREFR::CanBeMoved_4D9CF0 is called on an object reference that has NULL base form. This is not expected
  265. ; and will crash. We will instead return false from that function if that's the case. The problem is most likely larger than
  266. ; just this, if you prefer to crash instead disable it.
  267. ; Address: 4D9D09
  268. NullBaseFormMove=1
  269.  
  270. ; Info: Game tries to iterate child nodes of a NiAVObject but it's possible that the target is not a NiNode and can't have child nodes.
  271. ; This ends up in a NULL pointer crash.
  272. ; v26 = v22->vtable->sub_5EADD0(v22); // Returns "this" if v22 is a NiNode and returns "NULL" if not.
  273. ; for ( i = 0; i < v26->children.emptyRunStart; ++i ) // crash because v26 is NULL.
  274. ; Address: 46CA06
  275. NullRefNode=1
  276.  
  277. ; Info: Something is done with outfit of NPC, but one or more entry is NULL and game crashes.
  278. ; Address: 561FF7
  279. NullOutfitEntry=1
  280.  
  281. ; Info: Actor is being deleted and base form is NULL.
  282. ; Address: 6BAC9A
  283. ActorDeleteNullBase=1
  284.  
  285. ; Info: Does two things:
  286. ; 1. Tracks the last X files opened by game.
  287. ; 2. If the game crashes while reading binary data stream (e.g. NIF file but could be others too) then show message box listing
  288. ; those files.
  289. ; This can be helpful to track down a corrupted NIF file.
  290. DebugStream=1
  291.  
  292. ; Info: When the game fails to create texture in memory should we display a warning and exit game? Recommended yes because you will
  293. ; see purple textures couple of seconds and then the game will crash anyway since it's not expected for this to be a NULL value.
  294. WarnTextureFailure=1
  295.  
  296. ; Info: Something is done with face gen animation on BSFaceGenNiNode but the parent node is NULL which is unexpected.
  297. ; Address: 5A8808
  298. NullParentNode=1
  299.  
  300. ; Info: For debugging purposes, on game startup run allocator benchmark and write results to "AllocatorBenchmark.txt" in Skyrim root
  301. ; directory. This compares vanilla, aligned vanilla, malloc, aligned_malloc and custom memory block implementation. When you reach
  302. ; main menu the game will start the test, wait for a message box to say the test is completed, then close game and disable this option.
  303. RunAllocatorBenchmark=0
  304. ; Info: How many objects to allocate and free for each size (8, 12 and 16).
  305. CountAllocatorBenchmark=1000000
  306. ; Info: How many times to run each test.
  307. TimesAllocatorBenchmark=2
  308. ; Info: How many threads to run concurrently. Most accurate is only running one thread, although you can also try 2 to see the performance
  309. ; of thread-safe code.
  310. ThreadsAllocatorBenchmark=1
  311.  
  312. ; Info: Enable custom block allocator for small sizes. May help with memory fragmentation problem. This option does nothing if UseOSAllocators
  313. ; is not enabled.
  314. CustomMemoryBlock=1
  315.  
  316. ; Info: Set total megabytes allocated for the custom block allocators. This amount is sensibly divided between each block.
  317. ; Has no effect if CustomMemoryBlock is not enabled. The more you allocate here the less memory you have for other stuff!
  318. CustomMemoryBlockTotalSizeMb=160
  319.  
  320. ; Info: Show usage of each memory block in per cent when you open console. Has no effect if CustomMemoryBlock is not enabled.
  321. ; This can help you tweak the CustomMemoryBlockTotalSizeMb value.
  322. MemoryInfoConsole=1
  323.  
  324. ; Info: Fixes two crashes specific to Enderal mod. Seems like something to do with havok.
  325. ; Address: EBC0A6 and ECD92E
  326. EnderalSpecific=1
  327.  
  328. ; Info: Active effect list of actors is not thread safe but accessed and modified from multiple threads, this will add mutex to each actor's
  329. ; effect list.
  330. FixUnsafeEffectList=1
  331.  
  332. ; Info: Game crashes when actor's combat style form is NULL for some reason. Warn the user and try to display the actor's reference and base ID.
  333. ; Address: 8368B1
  334. WarnNullCombatStyle=1
  335.  
  336. ; Info: Set OS update frequency to 1 millisecond (regular is around 16) and replace GetTickCount with timeGetTime. This is for debug only! Don't use.
  337. ; May reduce performance.
  338. HighFrequencyOSTimer=0
  339.  
  340. ; Info: Make game's update timer more accurate. This is for debug only! Don't use.
  341. HighFrequencyGameTimer=0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement