-
Notifications
You must be signed in to change notification settings - Fork 6
Class Pivot
⚗ Experimental tab (off by default). Works over captured snapshots (or a live DataTable).
The Class Pivot tab is a spreadsheet-style pivot over a game's data. It groups one class's instances by a key (a key field's value like ItemID, or by object identity) and projects the value fields per group — so you can see, at a glance, every inventory item by ItemID with its Count, or every enemy by team with its stats.
Differing values inside one group render as a collision ⟨N: v1, v2, +M⟩. Since a snapshot capture is all-numeric, keys are int/enum IDs.
The 🔍 Suggest targets — find what changed panel is the automatic front door:
- Capture 2–4 snapshots around an in-game action you want to isolate (spend gold, take damage, …) — tick them in the picker (oldest → newest = Before … After).
- 🔍 Discover ranks the (class, property) targets that moved — scored by how much each looks like game state (named fields, specific changes, low noise).
- Pick a row and Use → (pivot this) to load it into the pivot below. No class/key guessing.
Discover result columns: Class · Property · Changed · Δ · Category · Shape · Sample (oldest → newest) · Score.
How it works & limits:
- Capture 2–4 snapshots around the action (Before … After).
- Use 3–4 to separate a one-time change from constant per-frame noise (rotation, timers, positions); with only 2, both just look "changed".
- Only fields that moved appear — a value that never changed between your captures won't show.
- Across a game restart, only objects that re-appear with a stable identity (GameInstance / PlayerState / Pawn / components / GAS) re-join reliably; randomly-spawned actors may not.
- The scan runs server-side over the snapshot's numeric fields; on a large capture it can take several seconds (cancellable).
The ⚙ Pivot target section (collapsible) chooses what to pivot. Pick a Source:
| Source | What it pivots | Key |
|---|---|---|
| Snapshot | One class's instances in a captured snapshot. | A key field value, or object identity (see Group by). |
| Snapshot Array | A captured struct array (e.g. Cargo) by its inner-key value. |
Key = inner-key value — reorder- and session-immune. |
| DataTable | A live game DataTable (use 🔄 Find DataTables to list them). | Key = RowName — zero-config, no discovery needed. |
For the Snapshot sources, pick the Snapshot and filter the Class list (type to filter, then pick). Then Run Pivot. To reach the underlying object, select a group and use Open in Live Walker / Copy Address (hands the group's representative instance to Cheat Engine), or 🌍 / ⚙ to Locate it in GWorld / GameEngine.
For the plain Snapshot source, Group by chooses how instances are keyed (the Snapshot Array and DataTable sources have no Group by — they always key by the inner-key value / RowName respectively):
-
Identity (object path) — groups spawn-normalised siblings (
BP_Enemy_C_0/_1/ …) together. Good for "all instances of this class". -
Field — group by a Key field value. This is the right choice for transient objects whose object path is identical (e.g.
//Engine/Transient/Item) — Identity mode would merge them all into one group, but a Field key likeItemIDkeeps them separate.
Tick which columns matter:
- Value — project this field's value per group (the pivot's output columns).
-
Key — add this field to the group key. Ticking more than one builds a composite key — e.g.
(Team · Slot)groups by the combination (Field mode only).
The picker also shows each field's Type · Distinct · Instances · Key score — the Key score hints which field makes a good key (high-cardinality, ID-shaped fields score best).
One row per group, with columns Count · Key · Projected values, and a filter results… box. A group whose members disagree on a projected value shows the collision form ⟨N: v1, v2, +M⟩, which is itself a signal (a field that's constant within a group but varies across groups is likely that group's identity/stat).
You can Hide selected class from picker to keep the class list focused; hidden classes appear as removable chips under Hidden classes (Pivot only). This denylist is scoped to the Pivot tab.
- Snapshot — capture the snapshots Class Pivot (and Discover) work over.
- SPC Query — the direction-chain view of the same snapshots (per-field, across N snapshots).
- Detect Stats — a quicker, less precise "which field is HP/MP/Gold" guesser.
- Live Walker — where Open in Live Walker / 🌍 / ⚙ land.