[WIP] Mator Smash - Thread #2

Post » Mon Oct 26, 2015 3:02 pm

Mator Smash

https://www.livecoding.tv/matortheeternal/ 10/25/2015, 3:22PM


Purpose
Mator Smash is an application built on the xEdit framework developed to replace the primary functionality of Wyre Bash - the creation of patch files to combine (or merge) conflicting overrides to overcome Bethesda's http://www.gamesas.com/topic/775917-compatibility-and-you/. Wyre Bash used to provide this functionality in the days of Oblivion through the usage of bash tags, keywords that would be put in the description of the mod that would then tell Wyre Bash what types of records it should try patching. However, the current status is that Wyre Bash only provides this for a handful of record types for Skyrim, and this has been the case for quite a while now. There are several users (most notably Sharlikran) who have been working to update Wyre Bash's codebase to work with Skyrim, but it's been an uphill battle. As of now, it's not certain whether Wyre Bash will ever offer the same functionality it did in the days of Oblivion for Skyrim mods. That's where Mator Smash comes in.

Why is this necessary?
As per Skyrim's http://www.gamesas.com/topic/775917-compatibility-and-you/, any two mods that modify the same record but in different ways will conflict with each other in a way that can't be resolved asides from the creation of a compatibility patch. Because the number of Skyrim mods exceeds 40,000, there is no conceivable way to manually build enough compatibility patches to make every possible load order (or even a small fraction of them) work with each mod operating as intended. Mator Smash automates the most important part of the task of compatibility patch creation - the combining of conflicting edits. This is something that we've been needing for a very, very long time.

How does it work?
Warning: technical jargon ahead. Where Wyre Bash has separate procedures for the patching of individual record types, Mator Smash has a few generic procedures for the patching of ALL record types. This means that Mator Smash has, with very little development effort, achieved the capacity to patch more records than Wyre Bash has ever been capable of patching. This is achieved through a recursive traversal method which traverses override record structure, comparing subrecords between a master record, a source override record, and a destination override record. Upon the basis of this comparison, certain subrecords are written to the destination record while others are skipped and others are deleted from it.

Development Status
I began development of Mator Smash as a standalone application built on top of the xEdit API 10/18/2015. Here's http://github.com/matortheeternal/smash. Check out https://github.com/matortheeternal/smash/tree/master/design for various files relating to my design process. I'll be https://www.livecoding.tv/matortheeternal/ most of my development on livecoding.tv. I'll be streaming mainly on weekends 9:00AM-9:00PM PST. Because of major code reuse from merge plugins standalone, smash will be entering public beta very soon.

Mator Smash is currently available as a proof of concept script (which is slow and lacking in features/a clean user experience). You can download v0.9.4 of that script http://puu.sh/h1VKB.zip. This script can currently correctly patch a massive number of different types of records. FAR MORE than Wyre Bash or any other currently available solution, and more than any solution that has ever existed for Skyrim or any other game.

Planned Features

  • Dynamic, flexible settings: Smash settings will be comprised of a tree which has information on how records/subrecords should be handled. This will allow users to control how a patch is created on a per-subrecord basis. This will make smash relevant regardless of the nature of the mods being patched, or the game the mods come from. Each node (record/subrecord) will have the following data associated with it-
    • Skip: Whether or not smash should perform conflict resolution for this node.
    • Priority: A number between 0-255. Used to determine conflict priority asides from load order. A node with higher priority will override mods with lower priorities.
    • Ignore deletions: If a mod deletes a subrecord inside of this node, that deletion will not be preserved in the generated patch.
    • Treat as single entity: If a mod overrides any subrecord in this node, the entire node will be replaced with that mod's version of it.
  • Plugin setting recommendations: Used a particular smash setting with a particular plugin and got a good result? Recommend other users to use the same setting with that plugin! Recommendations will be built into a dictionary file that will be shared between all users.
  • Shared smash settings: Mod author, or hardcoe patcher? Share your smash settings with other users so they can benefit from your research and hard work! Settings will be distributed from a backend to users who request them. Submitted smash settings will be reviewed by other patchers prior to being published to users.
  • Managed smashed patches: Patches you build will be tracked in the program, so you can quickly and easily rebuild them when your load order changes. You can also have multiple patches for your load order, if you feel that is desirable.
  • Multi-language support: I built a really clean, extensible, and easy to use language system when I developed Merge Plugins Standalone. Smash will use the same language system to support multiple languages out-of-the-box. As a translator, all you have to do is make a text file to create a translation and have users install it in their lang folder. The rest is handled by the program.
  • Fast and easy setting creation: Select some plugins to build a setting to specifically handle the conflicts they are capable of creating in a load order. Combine settings to handle more record types.

Old Threads

  • http://www.gamesas.com/topic/1513199-wip-mator-smash/
User avatar
sarah simon-rogaume
 
Posts: 3383
Joined: Thu Mar 15, 2007 4:41 am

Return to V - Skyrim