BBB NMS Save File Manipulator — Help

Reference arranged like the application

Starship 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.

Starship Processing → Node View

Node View

Shows PlayerStateData.ShipOwnership for the loaded context.

Starship Processing → Node View → Upgrade Starships

Upgrade Starships

Opens Which Starships Would You Like To Upgrade? after checking that all tabs are synchronized. Applies selected upgrades to app memory; saving game files remains separate.

Open Upgrade Starships help →

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

Open Upgrade Starships help →

Starship Processing → Node View → Upgrade Starships → Upgrade behavior notice

Upgrade behavior notice

Selected ships receive reference statistics and S-class settings. Non-Corvette technology items are replaced entirely with reference equipment; existing extras, trails, figurines and module seeds can be lost. Corvettes preserve equipment/build parts and add missing technology. Capacity targets 60 technology slots; equipment/capacity failure can skip that portion while statistics/class still apply. Unsupported models or invalid statistics/class references are rejected.

↑ This page’s hierarchy

Starship Processing → Node View → Upgrade Starships → Starship checkboxes

Starship checkboxes

All checkboxes start unchecked; tree selection is not upgrade selection. Named occupied ships display only their saved Name: duplicate names can look identical, and the ownership index is stored invisibly rather than shown beside the name. Unoccupied slots display Slot N - (unoccupied); unnamed occupied slots use Starship N (unnamed).

Rows remain in ownership-list order, including empty slots. Identify the intended zero-based tree index before opening the picker; its row is that index plus one when counting every checkbox from the top, including unoccupied rows. Select only the confidently identified row; Cancel if uncertain. Empty selection and Cancel perform no upgrade.

↑ This page’s hierarchy

Starship Processing → Node View → Upgrade Starships → OK

OK

Accepts the selected ships, runs the upgrade, refreshes app data when changes exist and opens Starship Upgrade Results. It does not save the game files.

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

Starship Processing → Node View → Upgrade Starships → OK → Upgrading starships, please wait…

Upgrading starships, please wait…

The text-only notice reads exactly: Upgrading starships, please wait…

The upgrade controller owns this non-cancellable modal while reading references, planning, publishing changes and preparing results. It dismisses progress in cleanup before the result dialog or failure warning and restores interaction. The notice is not a live-save confirmation.

There are no Cancel or Close buttons in this notice. Wait for the owning operation to finish; no separate user-dismissal or cancellation control is provided here.

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

Starship Processing → Node View → Upgrade Starships → Cancel

Cancel

Closes without upgrading or altering app data.

↑ This page’s hierarchy

Starship Processing → Node View → Upgrade Starships → Starship Upgrade Results

Starship Upgrade Results

Lists every selected ship and its actual outcome.

Starship Processing → Node View → Upgrade Starships → Starship Upgrade Results → Upgraded / Already up to date / Stats/class applied; tech skipped / Rejected

Upgraded / Already up to date / Stats/class applied; tech skipped / Rejected

Distinguishes full changes, no-op records, partial upgrades and whole-ship refusals. Rejected names and unoccupied-slot labels are red. Brief reasons appear under Upgrade notes when needed.

↑ This page’s hierarchy

Starship Processing → Node View → Upgrade Starships → Starship Upgrade Results → OK

OK

Closes the report. There is no automatic save or second upgrade action here.

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

Starship Processing → Node View → Starship tree

Starship tree

Lists owned-ship slots and nested ship data.

Starship Processing → Node View → Starship tree → Unoccupied slots

Unoccupied slots

The ordinary tree uses Starship N captions with the stored Name or No name provided; it does not display the Upgrade Starships picker’s occupancy-aware Slot X - (unoccupied) caption. Do not decide occupancy from the tree name alone.

Check Resource.Filename in the actual record: a named position can still be empty, while an unnamed ship can be occupied. In the Upgrade Starships picker/results, Slot X - (unoccupied) identifies an unoccupied position; this is not the ordinary tree label. Use the picker’s ownership order carefully and do not treat every unnamed record as empty.

↑ This page’s hierarchy

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

Left-button drag and drop

The shared tree supports structural drag and drop with parent-type and last-child guards. These generic checks are not proof that an arbitrary ship move preserves every game-side association. Use a backup and inspect results; the broader ship move/swap/sort design is separate from the deletion safeguards.

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

↑ This page’s hierarchy

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

Right-button drag selection → Delete N Nodes

Collects a visible-node range and routes deletion through the ship-specific controller. Only valid complete ownership records may be deleted; arbitrary nested-field deletion is refused.

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

Starship Processing → Node View → Right-click menu → Delete Node → Delete Nodes — confirmation; also Starship 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

Starship Processing → Node View → Right-click menu → Delete Node → Delete Nodes — confirmation → OK; also Starship 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

Starship Processing → Node View → Right-click menu → Delete Node → Delete Nodes — confirmation → Cancel; also Starship 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

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

Right-click menu

Commands apply to the clicked ship node.

Starship Processing → Node View → Starship 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

Starship Processing → Node View → Starship 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

Starship Processing → Node View → Starship 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

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

Delete Node

Routes single Delete Node and right-drag requests through the same guarded fixed-slot starship-deletion controller and shared Delete Nodes confirmation. It accepts complete ownership-slot nodes, not isolated child fields or the ownership-list root; empty slots are no-ops. It preserves ownership-slot positions with empty templates and applies associated appearance/build cleanup. This changes app memory only.

The app refuses a request that would remove every occupied ship as a whole, with no partial deletion or override. The exact app-policy notice is “NMS does not allow that last ship to be deleted from inventory; aborting”. This describes the implemented policy, not independently verified game behavior.

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

The guarded action checks all tabs’ synchronization flags and rejects unsynchronized work or a stale/changed request. Those flags are not independent proof of valid text; preserve pending editors and verify actual model values before any deletion.

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

Starship Processing → Divider between Node View and Raw JSON

Node View / Raw JSON pane divider

Starship Processing sets Node View/Raw JSON stretch weights to 5:7; it does not explicitly set equal initial sizes.

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

Starship Processing → Raw JSON

Raw JSON

Contains the ship-ownership array for the loaded context.

Starship 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

Starship 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.

Starship 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

Starship 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

Starship Processing → Raw JSON → JSON text editor

JSON text editor

Displays the loaded context’s ShipOwnership array. 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

Starship Processing → Raw JSON → Right-click menu

Right-click menu

The editor supplies its standard editing commands plus Search Text.

Starship 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.

Starship 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

Starship 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

Starship 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

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

Copy

Copies selected text to the clipboard without changing JSON.

↑ This page’s hierarchy

Starship 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

Starship 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

Starship 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

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

Search Text

Opens Search Dialog for this tab’s Raw JSON.

Starship 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

Starship 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

Starship 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

Starship 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