BBB NMS Save File Manipulator — Help

Reference arranged like the application

Base Processing

Important limitations before using these controls

  1. Before synchronization, formatting or a structured operation, copy EACH pending Raw JSON pane you need into separate external inspection files. Updating one tab can refresh ALL four editors and overwrite other pending text. Reapply, synchronize and verify only understood Bases, Starships or Teleport Endpoints edits, one pane at a time. Keep Inventory text externally: do not synchronize or Pretty Print it because its current update path is defective. Use the documented structured inventory tools from a trustworthy baseline instead. If pending Inventory text blocks a tool, preserve it, deliberately reload a trustworthy saved baseline when ready to abandon the pending app state, then recreate supported changes through structured tools. Never click Sync in every pending tab just to obtain green indicators.
  2. A parse error is not a safe synchronization: the current handler ignores the failure return, can rebuild the previous model’s tree and turn the synchronization light green while invalid text remains. An empty array ([]) is silently ignored by this path; it is not a reliable way to delete all records. After any error or ignored input, do not trust a green light or proceed to Save: preserve the text, compare both panes and the intended field values, correct and retry, or deliberately reload a known saved baseline.

Follow the same branch you see in the application. Select an item below for its definition and behavior.

Base Processing → Node View

Node View

Shows the loaded context’s PlayerStateData.PersistentPlayerBases array.

Base Processing → Node View → Sort By Gal, Sys, Name

Sort By Gal, Sys, Name

Reorders complete base records by galaxy, then system, then Name. The result is reflected in app data and views; it does not itself write an NMS save.

Before using Sort By Gal, Sys, Name, read the shared safety limitations for this page.

↑ This page’s hierarchy

Base Processing → Node View → Move Freighter to Top on Sort

Move Freighter to Top on Sort

Checked by default. After the ordinary sort, moves the first base whose Name is empty to index 0. The current implementation uses an empty name as its freighter-identification rule.

Before using Move Freighter to Top on Sort, read the shared safety limitations for this page.

↑ This page’s hierarchy

Base Processing → Node View → Base tree

Base tree

Expand or collapse the base-array and individual records.

Base Processing → Node View → Base tree → Base record label

Base record label

Shows a zero-based index, dictionary size, galaxy name, system, Parts count and base name. Parts is the number of entries in the base’s Objects array. Empty names display as Unnamed Freighter Base.

↑ This page’s hierarchy

Base Processing → Node View → Base tree → Left-button drag and drop

Left-button drag and drop

Move complete base records to reorder them. For siblings, an upward drag places the record before the target and a downward drag places it after. Cross-parent drops are placed after the target. The generic guard requires compatible array/dictionary parents and refuses moving a parent’s last child; it does not validate arbitrary game-data restructuring.

Before using Left-button drag and drop, read the shared safety limitations for this page.

↑ This page’s hierarchy

Base Processing → Node View → Base tree → Right-button drag selection → Delete N Nodes

Right-button drag selection → Delete N Nodes

Hold the right mouse button and drag across visible nodes. Releasing opens Delete N Nodes for that selection; confirmation gates removal. Check that the selection contains complete intended records, not unwanted child fields.

Before using Right-button drag selection → Delete N Nodes, read the shared safety limitations for this page.

Base Processing → Node View → Right-click menu → Delete Node → Delete Nodes — confirmation; also Base Processing → Node View → Right-button drag selection → Delete N Nodes → Delete Nodes — confirmation

Delete Nodes — confirmation

Review Delete (N) nodes from the Tree? before acting. For a base or generic tree deletion the selected visible-node count can include expanded child fields. The starship-specific controller instead deduplicates complete occupied ship slots and validates the complete request.

Before using Delete Nodes — confirmation, read the shared safety limitations for this page.

↑ This page’s hierarchy

Base Processing → Node View → Right-click menu → Delete Node → Delete Nodes — confirmation → OK; also Base Processing → Node View → Right-button drag selection → Delete N Nodes → Delete Nodes — confirmation → OK

OK

Confirms this deletion request. Generic deletion removes the chosen tree nodes in app memory; starship deletion uses its guarded fixed-slot transaction instead. There is no automatic live save.

↑ This page’s hierarchy

Base Processing → Node View → Right-click menu → Delete Node → Delete Nodes — confirmation → Cancel; also Base Processing → Node View → Right-button drag selection → Delete N Nodes → Delete Nodes — confirmation → Cancel

Cancel

Rejects the confirmation without performing the requested deletion. Closing this dialog also rejects it.

↑ This page’s hierarchy
↑ This page’s hierarchy

Base Processing → Node View → Base tree → Right-click menu

Right-click menu

Availability depends on whether you click the base-array root, a base record or another node.

Base Processing → Node View → Base tree → Right-click menu → Restore a Base

Restore a Base

Appears when you right-click the top-level base-array node. Opens Restore A Base To First Position In Tree, reads a selected *.nms_base.json file, and adds that base record at index 0. It does not search for or replace a same-name base; duplicates are possible. The change is in app memory until you save.

Before using Restore a Base, read the shared safety limitations for this page.

Importing a record is not a merge or a complete cross-save migration. Check the base’s identity, coordinates, ownership-dependent fields and related game data before deciding to write a live save; this app operation does not establish that the game will accept an imported base.

Base Processing → Node View → Base tree → Right-click menu → Restore a Base → File selection — Restore A Base To First Position In Tree

File selection — Restore A Base To First Position In Tree

Select an appropriate .nms_base.json backup file. These filters help locate a record backup; choosing All Files does not make an arbitrary file compatible. Native file-dialog layout and labels are supplied by your operating system.

↑ This page’s hierarchy

Base Processing → Node View → Base tree → Right-click menu → Restore a Base → File selection — Restore A Base To First Position In Tree → Open

Open

Reads the selected record-backup file and attempts the requested import into app memory. Review the resulting data before File → Save NMS Save File; this is not an automatic disk save or game-compatibility check.

Before using Open, read the shared safety limitations for this page.

↑ This page’s hierarchy

Base Processing → Node View → Base tree → Right-click menu → Restore a Base → File selection — Restore A Base To First Position In Tree → Cancel

Cancel

Leaves this file-selection request without writing a backup or applying its selected input.

↑ This page’s hierarchy
↑ This page’s hierarchy

Base Processing → Node View → Base tree → Right-click menu → Backup a Base

Backup a Base

Appears on a complete base record. Writes that base’s Node View data to a selected JSON file, using the *.nms_base.json file filter. The suggested name comes from the base name, or default for an empty name. This is one base record, not a full-save backup.

Base Processing → Node View → Base tree → Right-click menu → Backup a Base → File selection — Save File

File selection — Save File

Choose the output folder and filename for the selected record, using .nms_base.json. The suggested name may be default for an unnamed record. Review an existing filename before replacing that separate backup file.

↑ This page’s hierarchy

Base Processing → Node View → Base tree → Right-click menu → Backup a Base → File selection — Save File → Save

Save

Writes a separate record-backup JSON file, not the loaded live NMS save. A file-save success message reports this export only.

↑ This page’s hierarchy

Base Processing → Node View → Base tree → Right-click menu → Backup a Base → File selection — Save File → Cancel

Cancel

Leaves this file-selection request without writing a backup or applying its selected input.

↑ This page’s hierarchy
↑ This page’s hierarchy

Base Processing → Node View → Base tree → Right-click menu → Toggle Expansion 2 Levels

Toggle Expansion 2 Levels

Collapses an expanded node or expands a collapsed node through the configured two-level helper. This changes only what is visible.

↑ This page’s hierarchy

Base Processing → Node View → Base tree → Right-click menu → Highlight In Text Box

Highlight In Text Box

Selects the corresponding line in Raw JSON without changing data. It refuses if the captured node structure and current text cannot be matched reliably; it does not silently synchronize them.

↑ This page’s hierarchy

Base Processing → Node View → Base tree → Right-click menu → Copy This Node's Text

Copy This Node's Text

Copies the selected node’s displayed label to the clipboard. It does not serialize that node’s full JSON or export the complete record.

This command copies the visible label of the clicked node, not the node’s complete JSON subtree. To copy JSON, select the desired text in Raw JSON and use Copy; use the whole-context clipboard export only when that larger scope is intended.

↑ This page’s hierarchy

Base Processing → Node View → Base tree → Right-click menu → Delete Node

Delete Node

After confirmation, removes the selected node from the in-app structure. Selecting a child field removes that field, not the whole base. Review the target before confirming; saving to live files is separate.

Before using Delete Node, read the shared safety limitations for this page.

↑ This page’s hierarchy
↑ This page’s hierarchy

Base Processing → Divider between Node View and Raw JSON

Node View / Raw JSON pane divider

Base Processing explicitly starts both panes at equal sizes [1000, 1000] with stretch weights 1:1.

Drag the vertical handle of the horizontal QSplitter between the two pane containers to change their widths. This changes layout only: Raw JSON text, shared model values and disk save data remain unchanged. It is not record drag/drop, node movement, synchronization or Pretty Print.

↑ This page’s hierarchy
↑ This page’s hierarchy
↑ This page’s hierarchy

Base Processing → Raw JSON

Raw JSON

Contains the base array, not the full save and not the complete BaseContext.

Base Processing → Raw JSON → Synched to Node View — status indicator

Synched to Node View — status indicator

Reports the app’s synchronization flag, not independent JSON validity. Red means the app has marked this editor unsynchronized. Green can also follow a failed parse with invalid text beside an old tree, or ignored [] input; it does not prove the intended edit reached the model, that another editor’s pending work survived, or that a live save was written.

Before using Synched to Node View — status indicator, read the shared safety limitations for this page.

↑ This page’s hierarchy

Base Processing → Raw JSON → Sync to Node View

Sync to Node View

Attempts to parse this tab’s Raw JSON into the shared in-memory model and rebuild Node View; no live-save write is performed.

Before using Sync to Node View, read the shared safety limitations for this page.

Before using Sync to Node View, read the shared safety limitations for this page.

A Processing notice can remain visible after the Node View appears to update. Wait for owner-controlled dismissal; it reports synchronization work, not successful validation or a live save.

Base Processing → Raw JSON → Sync to Node View → Processing — Node View synch

Processing — Node View synch

The text-only notice reads: Processing the Node View synch. This can take a few seconds after the Node View appears to update...

This window-modal notice has no Close or Cancel button; Escape does not cancel the operation. The app dismisses it when the enclosing synchronization completes or raises an error. It may also cover the work that follows a confirmed generic node deletion.

↑ This page’s hierarchy
↑ This page’s hierarchy

Base Processing → Raw JSON → Pretty Print

Pretty Print

Pretty Print is not display-only: it attempts a model update from the editor, reloads indented text from the model and rebuilds Node View.

Before using Pretty Print, read the shared safety limitations for this page.

The current formatting handler reloads the previous model text even after a parse failure or ignored empty array. This can discard pending invalid text; copy it out before formatting. Formatting or a refreshed tree does not prove the intended edit was applied. Compare actual values before saving.

↑ This page’s hierarchy

Base Processing → Raw JSON → JSON text editor

JSON text editor

Displays the loaded context’s base-array data. You can edit the JSON directly. Line numbers identify text lines; the current line is highlighted. Text is not line-wrapped, so long lines scroll horizontally.

Keep a separate copy of pending text before Sync, Pretty Print or structured changes: a model refresh can replace editor contents in other tabs. Work and verify one tab at a time. Text editing is not an automatic model update or disk write.

The editor displays line numbers and does not wrap long JSON lines. Use the editor’s own horizontal scrollbar to inspect a long value. Selecting or copying text does not edit the save; typing, cutting, deleting or pasting does. A text edit is not automatically a successful synchronization or a disk save.

↑ This page’s hierarchy

Base Processing → Raw JSON → Right-click menu

Right-click menu

The editor supplies its standard editing commands plus Search Text.

Base Processing → Raw JSON → Right-click menu → Standard editing commands

Standard editing commands

Undo, Redo, Cut, Copy, Paste, Delete and Select All operate on the text editor, subject to its current selection and available edit history. These are text operations, not a general undo facility for tree operations.

Base Processing → Raw JSON → Right-click menu → Standard editing commands → Undo

Undo

Reverses the most recent text-editor edit when an undo step is available. It is not an application-wide undo for sorting, upgrades, node deletion or inventory organization.

↑ This page’s hierarchy

Base Processing → Raw JSON → Right-click menu → Standard editing commands → Redo

Redo

Reapplies a text-editor change that was undone, when redo history is available.

↑ This page’s hierarchy

Base Processing → Raw JSON → Right-click menu → Standard editing commands → Cut

Cut

Removes selected text and places it on the clipboard. This marks the Raw JSON changed.

↑ This page’s hierarchy

Base Processing → Raw JSON → Right-click menu → Standard editing commands → Copy

Copy

Copies selected text to the clipboard without changing JSON.

↑ This page’s hierarchy

Base Processing → Raw JSON → Right-click menu → Standard editing commands → Paste

Paste

Inserts clipboard text at the cursor, replacing any selected text. It does not automatically synchronize the Node View.

↑ This page’s hierarchy

Base Processing → Raw JSON → Right-click menu → Standard editing commands → Delete

Delete

Removes selected text. This is different from Node View → Delete Node.

↑ This page’s hierarchy

Base Processing → Raw JSON → Right-click menu → Standard editing commands → Select All

Select All

Selects the complete text of this tab’s Raw JSON editor.

↑ This page’s hierarchy
↑ This page’s hierarchy

Base Processing → Raw JSON → Right-click menu → Search Text

Search Text

Opens Search Dialog for this tab’s Raw JSON.

Base Processing → Raw JSON → Right-click menu → Search Text → Enter search term

Enter search term

Text to locate in the current Raw JSON document.

↑ This page’s hierarchy

Base Processing → Raw JSON → Right-click menu → Search Text → Search Backward

Search Backward

Finds the preceding occurrence from the current cursor. No more occurrences produces End of Search; the implementation does not wrap to the opposite end.

↑ This page’s hierarchy

Base Processing → Raw JSON → Right-click menu → Search Text → Search Forward

Search Forward

Finds the next occurrence from the current cursor. The match is selected and brought into view.

↑ This page’s hierarchy

Base Processing → Raw JSON → Right-click menu → Search Text → Close

Close

Closes the Search Dialog without changing JSON.

↑ This page’s hierarchy

Searching follows the current text cursor in the chosen direction. No more occurrences found. means the search reached its end; it does not automatically wrap to the other end. To search again from the beginning or end, close the dialog, reposition the Raw JSON cursor and reopen Search Text.

↑ This page’s hierarchy
↑ This page’s hierarchy
↑ This page’s hierarchy