http://www.uesp.net/wiki/Tes5Mod:SkyProc
Java-based Skyrim Processing Library
What is SkyProc?
SkyProc is a Java library that offers easy to use Java API for importing, manipulating, and exporting mods created by Leviathan1753.
The SkyProc library offers Java programmers the power to create and edit objects that represent Skyrim mods and records. It is able to import mods, or even an entire load order, and give easy access to the records inside. Programmers can then make any changes they wish, and export a working Skyrim patch that is customized to every user's load order.
Its purpose is to facilitate third party creation of smart programs that create custom patches based on any given load order. For many mods, this will help reduce, or completely eliminate conflicts. It is currently quite functional and allows access to the most common GRUPs.
What can SkyProc be used for?
It can be used to make extremely smart and versatile patchers capable of adapting to any load order. It can be used for things such as:
- Customization Patchers
http://skyrim.nexusmods.com/downloads/file.php?id=7654is an example of a mod that uses SkyProc for customization capabilities. Instead of making several esps with varying hardcoded settings, the RL SkyProc patcher reads in an INI file, and adjusts the Realistic Lighting.esp patch to contain the custom settings defined by the user. This gives RL an unprecedented amount of customization for users.
. - Addition Patchers
http://www.gamesas.com/topic/1345186-relzwipz-automatic-spells/is an example of a mod that uses SkyProc to seamlessly add things to the world, without causing incompatibility issues. It reads in the NPC_ and SPEL groups from all the active plugins in a user's entire load order, it then loops over each, adding spells to NPCs based on the spells difficulty, and the NPC's spell skill stats.
A comparable patch made by hand would take an extremely long time to make. In addition, that hard-coded patch would only ever affect Skyrim.esm. If a user wanted the same thing done to say, Midas, the modder would have to do a customized patch for Midas by hand as well. If Midas ever came out with a new set of spells, the modder again would have to adjust by hand.
Doing this type of mod using a SkyProc patcher will work on any mod fed to it, no matter if it's Skyrim.esm, Midas 1.0, Midas 2.0. It will still read in the GRUPs, do its calculations, and hand out the spells accordingly. What this results in is a single patcher that works for all mods. If someone has only Skyrim.esm, it will work. If someone has Midas as well, it will not only will work with Midas, but it will add Midas' spells to Skyrim.esm NPCs, as well as NPCs from other mods.
. - Preparation Patchers
http://tes.nexusmods.com/downloads/file.php?id=37904 is an example of a mod that uses SkyProc (in this case, an ancestral embedded version) to prepare the user's mod setup for in-game scripts. DLL is a spawn system overhaul that needs all the Leveled Lists to be organized in a special way, and have DLL-specific dummy entries with scripts attached to them. DLL comes in two parts. The first is a SkyProc-style patcher that processed the user's load order and creates a patch with all the Leveled Lists in proper format. The second part is a set of in-game scripts that take advantage of the preparation and offer much more dynamic spawning probabilities.
- Mod Creation Patchers
http://www.nexusmods.com/skyrim/mods/2933/ adds many new weapons. Instead of creating each of the slightly different entries by hand a SkyProc patch was used to create the weapon records and set the values as needed. A mod that needs lots of changes that can be done in a determined way can be automated to save the author's time. The final mod does not need to include the patcher but its use can make tedious work much easier with less chance of errors creeping in.
There are probably countless other types of applications that can be made with SkyProc, as it loads in mods, and then lays them on a platter for you to do whatever you want with them.
The possibilities are really up to you as the programmer to flex your coding muscles and take advantage of the power SkyProc gives you.
For more information, documentation, and help tutorials, please visit:
http://www.uesp.net/wiki/Tes5Mod:Skyprochttp://www.uesp.net/wiki/Tes5Mod:SkyProc http://www.uesp.net/wiki/Tes5Mod:SkyProc
Previous threads: 1, http://www.gamesas.com/topic/1384676-rel-skyproc-skyrim-processing-library-thread-2/
What is happening with SkyProc?
Leviathan1753 has been busy with real life of late. Until he has time to catch up with modding I've stepped in to do what I can (hence me posting the new thread instead of him). The SkyProc library is quite well laid out so I've been able to make minor changes and bugfixes. I doubt I'll be able to add large additions like new record types but if you have a feature request or bug report let me know and I'll see what I can do. Many of the existing GRUPs have the data processed but not exposed to the API so if you need something I can probably do it quickly.
The latest official http://code.google.com/p/skyproc.
My changes have http://code.google.com/r/dhtynan-dev/. With the compiled jar on https://db.tt/6rHIcGAz.
My changes so far:
- Fixed crash with BodyTemplate.Get/Set when passed FirstPersonFlags.NONE
- Fixed issues with BODT/BOD2 subrecords acting strangely and writing garbage data. Type is now transparent to the patcher and it should just work.
- Allowed parsing of YNAM, ZNAM, and NAM7 subrecords on Weapons. No access to the data yet but it won't crash.
- Added Head Part get/set flag support. Added genenums.HeadPartFlags enum for use with them.
- Fixed COED entries in NPCs getting scrambled on patching. Containers too since they share the subtype.
- CONT.getScriptPackage()
- HDPT.get/setHDPT_Type()
- Various out of order subrecords
Known issues:
- NPC_ subrecords ATKD and ATKE only handle a single instance instead of repeating pairs. I think I'm close to a fix.
- Record length validation fails for some people with cleaned DLC (other times too?). Any info on this would be a big help.