Skip to content

Instantly share code, notes, and snippets.

@matortheeternal
Last active January 21, 2019 06:34
Show Gist options
  • Save matortheeternal/55a96dd685801e2c32d69f3c227fa1f7 to your computer and use it in GitHub Desktop.
Save matortheeternal/55a96dd685801e2c32d69f3c227fa1f7 to your computer and use it in GitHub Desktop.
Initial design notes for zSmash

zSmash Design

1. User selects zSmash from application mode dropdown

2. Modal appears for user to select a smashed patch to manage (or create a new one)

Each patch has a type - "full load order patch" or "patch specific plugins". Full load order patch allows the user to exclude certain plugins from being loaded, where patch specific plugins allow suser to specify specific plugins to load.

3. Plugins are loaded, patch is loaded or generated

Initially, a basic "Smash.All" setting is used to generate the patch. The user can then tweak things to adjust the behavior on a per-plugin basis. Editing the base setting is also possible, for advanced users.

4. User is presented with a tree view (smashTreeView)

  • Tree view only shows record groups in the smashed patch
  • Context menu options:
    • Exclude from patch (top level group or record)
    • Manage exclusions
    • Regenerate patch
    • Show/Hide ITPOs
    • Open in smash record view (records)
    • Open in new smash record view (records)

5. User is presented with a record view (smashRecordView)

  • Does not allow editing fields for plugins other than the smashed patch
  • Hides unassigned fields by default
  • Context menu options:
    • Show/Hide unassigned fields
    • Show/Hide non-conflicting rows
    • Copy value to patch (non-patch value cells)
    • Copy element to patch (non-patch element cells)
    • Remove element from patch (patch element cells)
    • Set custom value (patch value cells)
    • Use algorithm to set value (patch value cells)
    • Add custom entry (patch array cells)

After making a modfication to a record, smash will infer possible rule changes that would make sense for that modification and presents them to the user in a modal.

How rule changes are inferred

Value copied

When value is not top level, user can toggle whether or not parent is treated as a single entity, adjusting options.

  • Copied changed value (not last change)
    • Prioritize changes to {{target}} from {{this plugin}} [default]
    • Ignore changes to {{target}} in plugins: {{list of plugins with non-ITM values on target on this record, excluding this plugin}}
    • Set this value on this record
  • Copied last changed value
    • {{if priority present on conflict loser}}
      • Prioritize changes to {{target}} from {{this plugin}} (use higher priority than {{conflict loser plugin}}) [default]
      • Unprioritize changes to {{target}} from {{conflict loser plugin}}
    • {{if changes ignored on field in plugin}}
      • Unignore changes to {{target}} from {{conflict winner plugin}} [default]
    • Set this value on this record
  • Copied ITM value
    • Ignore change to this in plugins: {{list of plugins with non-ITM values on target on this record}} [default]
    • Set this value on this record

Array entry restored

Array entry removed

6. Final smash patch is saved to disk, user closes the program


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment