MJOLNIR Tag Editor changelog
MJOLNIR Tag Editorv0.19.0

Undo, and blocks that copy and paste

Ctrl+Z and Ctrl+Y step a tag's edits back and forward; block elements can be inserted, copied and pasted between tags, and a whole block can go out and come back as tab-separated text.

Until now the only way back from an edit was to revert the field, and the only way back from a revert was to type the value again. The editor now keeps a journal per tag: every change to its edits — a value set, an element added, duplicated or removed, a field or the whole tag reverted — records the recipe as it stood before, and a step back restores exactly that.

Added

  • Undo and redo. Ctrl+Z steps the open tag's edits back, Ctrl+Y (or Ctrl+Shift+Z) forward; the edit bar shows both as buttons with how many steps remain. Undoing all the way leaves the bar in place so the way back is still there. A new change after an undo forks history, the way a text editor does. Text fields keep their own undo: the shortcut only reaches the tag when the keys did not land in one.
  • Insert. Every block's section bar gained ins, which puts a fresh element in front of the selected one; add still appends.
  • Copy and paste elements. copy takes the selected element as a recipe — every field as the text you would type, nested blocks included — and paste puts it after the selected element of any block of the same kind, in this tag or another. A paste is one undo step; fields that will not take their value (a data field, or a reference this installation cannot resolve) are reported rather than stopping the rest. Values the target already holds are not recorded as edits.
  • Angles in degrees. A rad / deg toggle beside the view modes shows every angle, angle bounds and euler field in degrees and takes typed values in degrees, converting at the edge; the tag, the recipe a copy makes and a TSV all keep radians. The choice is remembered.
  • Expert view. An expert toggle beside the view modes shows every byte of the layout: padding, custom markers and the terminator appear as read-only raw fields at their offsets, in both the form and the tree, for checking a definition against the bytes. Off, the views are as before.
  • Diff. A diff button beside the view modes compares the open tag as shipped with the tag as this mod leaves it, field by field, with the values on each side and a filter; right-click any tag in the list for Compare With Open Tag to set two tags of one group side by side. Copy the result as tab-separated text.
  • References. A refs button (and References… in the list's menu) opens the graph behind a tag: what it references, and what those reference, to a chosen depth, each row opening the tag, the whole tree copying as indented text. Unresolved references are marked.
  • Unreferenced only. A checkbox under the tag search lists only the group's tags that no tag body references. A tag the Unreal side loads directly — a scenario, the globals — counts as unreferenced and is still in use; the first use builds the reverse index.
  • TSV in and out. Right-click a block's bar: Copy Block as TSV writes one row per element and one column per field (structs flattened, nested blocks left out) to the clipboard, for a spreadsheet; Paste TSV into Block… takes rows back — the header names the fields, each row becomes a new element, appended or replacing what is there.

Fixed

  • Fields whose names carry a dot, a bracket or a trailing space — the Havok v.i family, the HUD's message anchor v[0,1], mopp data block — could not be edited: the path the inspector sent split at the dot or the bracket, or failed to match the padded name. Paths now escape those characters and match names with their padding ignored. Every field of the first tag of every group round-trips through the same path a paste takes.

Known limits

  • The journal lives in memory for the session and covers field and element edits. Script and texture changes are not journaled; the mod panel remains the way to take those back. The project file holds the current recipe, which is what a reopened project starts from.