Savegame script scalpel - Disassembler - Diagnostic Tool - Papyrus Data Transfer by flexcreator
Skyrim » Utilities
Added: 16/04/2014 - 04:07AM
Updated: 01/03/2015 - 01:12AM

6,430 Endorsements

1.2.c Latest version

51,485 Unique D/Ls

91,649 Total D/Ls

413,835 Total Views

Uploaded by flexcreator


Last updated at 1:12, 1 Mar 2015 Uploaded at 4:07, 16 Apr 2014

This a new version of Papyrus Data Transfer with advanced options and GUI wrapper. This tool is designed to work with the papyrus section of the savegames.

- Analyse the state of the savegame.
- Show the script instances located in the savegame in readable format (with all the variable values,
correct inherritance)
- Bytecode Disassembler. Can disassemble all the compiled functions right from the savegame.
- Change the values of script variables (including array elements)
- Transfer variable values from one savegame to another
- Cleaning options:
* Remove Unattached script Instances
* Remove Undefined (orphan) script instances
* Terminate active threads WITHOUT removing script instances
- Advanced filtering system (you can remove single instance, not the whole class)
- Create NEW script instances inside your savegame

Not only this tool can be used to fix issues that any other savegame editing program (for this moment) can't handle (proof in the files section), it can be also used as everyday diagnostic tool:

The tool will keep the history and provide a clear charts that will show you how your savegame changes in time. The size of the savegame doesn't matter much, DYNAMICS does! This can help you to detect problems at the early stage and just revert to the previous save without even need to clean anything!

The tool will create backups automatically, just make sure not to delete them
The tool will NEVER rewrite the original save, the first edit operation will create a file called EDIT_<TIMESTAMP>.ess, all the changes will be written to this file

Removing Unattached Instances will help you in most cases. Start from this.
The game will release corresponding threads automatically. Please, note that sometimes several steps should be taken, like this:
Removing Unattached Instances => Load => Save the game
Removing Unattached Instances => Load => Save the game

With each step the count of unattached instances (and related threads) should be lowered
The chart will help you.

If it's failed, consider using Terminate Threads.
It it's also failed, then you have to make some research and remove some instances using the filter expression. To specify the filter, right click on the script, variable or function in the tree. You can always edit the filter manually.

Video Tutorial:

Please, note that there is NO one button solution for all the cases and never will be. It's hard to detect what is garbage and what is not automatically. Some mods can use risky techniques deliberately.

BTW, you don't have to "load" the savegame to apply the edit operation. Just specify the path without pushing "Load Papyrus Section" and select the option you want.

This is a long term project started back in Feb 2013.

Papyrus Data Transfer was the first tool that was able to read the Papyrus section from ESS. Actually, we didn't know anything about the section format when I started to write this program. The first details about how script instances are stored inside the savegames were discovered in the process of the PDT development (Special thanks to Tossapon who helped with the arrays and some unknown guys who continued research after me)

Details 1
Details 2
Details 3
Details 4
Details 5
Details 6

Demystifying Skyrim

Sorry for the wall of text. Actually, I was planning to write a video with comments, but I found that my accent is awful >_<

People believe in myths since the very beginning of the history.

Skyrim surely has it’s own and I’m not talking about the story. People don’t have full understanding about how the scripting system affects their savegames. Most of these statements you find on forums and articles have zero technical background. I know this. I am just like you. It is easy to become the victim of fallacy, because you don’t want to spend a lot of time on research, thinking and asking the questions.

BUT, believe me, if you don’t do this, you will waste even more time playing again from Helgen.
Every experienced programmer will tell you that IT-industry is not a place for myths.
If we really want to go into the right direction, we should not rely on these statements blindnessly. Instead, we should use the common scientific approach:

- collect the data
- make the assumtion
- prove or reject the assumption ( by setting the experiment)
- fix the bug

Don’t do anything without a reason. Think before you act.

Myth: Saving a game into a new slot cause savegame corruption => FALSE

Myth: Orphan instances from old mods cause problems in the future => NO PROOF FOUND, MOST LIKELY FALSE

I really tried to kill my save with old scripts, But it looks like script records that left after uninstalling the mods DO NOT causes crashes or savegame bloat.

Uninstalling the scripted mod should be ok. You WILL have orphan instances in the end, but they don't perform any processing, THEY WILL NEVER HAVE ACTIVE FUNCTIONS ATTACHED TO THEM. You will never see any errors except missing classes.

Orphan instances NEVER cause serious savegame bloat (you can have a minor bloat, but... 12 bytes for instance is still just 12 bytes)!

Basic scheme of what script-related entities are stored in ESS:

Every class can have multiple instances

Script Instances are the MEMORY of the game!!!!

Updating the scripted mod when it has active threads is NOT ok, if the old versions of functions are working.

Both crashes and bloat issues are related to the scripts from ACTIVE MODS! The most common issue: script instances that are not attached to any real object in the game (somehow the object was removed before the thread related to the corresponding script instance finished to work)

There is also a problem with messed up vanilla variables, it can be easily fixed by filtered transfer, but it hard to detect it in automatic way (Papyrus logs are useless) :/

Tutorial - How to change variable values:

Feel free to ask any questions.