Skip to content

Item Catalog

Valkerran edited this page Sep 29, 2026 · 2 revisions

Item Catalog

One bundled data file gives the UI friendly names and icons for the game's raw type ids, and says which items can be used in logistics. It is app-only — never read from or written to a save file — and an id PCEdit does not know still loads, still edits, and still moves between inventories.

File Contents Used by
PCEdit.App.Core/Data/ItemCatalog.json 628 items in 17 categories Inventories — item name + category icon · Logistics Editor — the demand / supply pick-list

It is an embedded resource read through IItemCatalog. ILogisticsGroupCatalog is a projection of the same data, not a separate file: the logistics pick-list is every item flagged canDemand / canSupply that is not deprecated — 212 groups today.

Note

Until v1.4.0 the logistics groups lived in a separate LogisticsGroups.json, generated by gen_logistics_groups.py. Both are gone; the flags live on the catalog items instead.

ItemCatalog.json

{
  "fallbackCategory": "misc",
  "categories": {
    "ore": { "displayName": "Ore & Minerals", "icon": "cat_ore.png" }
  },
  "items": {
    "Iron": {
      "displayName": "Iron",
      "category": "ore",
      "canDemand": true,
      "canSupply": true,
      "deprecated": false,
      "addedIn": null,
      "deprecatedIn": null
    }
  }
}
  • Keyed by WorldObject.gId.
  • An unknown id renders as the raw id with the fallbackCategory icon. Nothing breaks.
  • An item may carry its own "icon", which overrides the category icon — drop item_<name>.png into PCEdit.Desktop/Assets/Icons/ and add the field. No code change.
  • canDemand / canSupply — whether the item appears in the logistics pick-lists.
  • deprecated / deprecatedIn — an item the game has retired (e.g. Phytoplankton2 / 3 in 2.102). It still resolves, so existing saves keep their names, but it is left out of the logistics pick-lists.
  • addedIn — the game version that introduced the item, where the developer changelog says so. Most base resources predate the tracked notes and stay null. The app loads these version fields but does not display them yet.

Regenerating

The JSON is generated. Edit the tables in the scripts, then re-run them from the repo root:

python tools/item-catalog/gen_catalog.py   # -> PCEdit.App.Core/Data/ItemCatalog.json
python tools/item-catalog/gen_icons.py     # -> PCEdit.Desktop/Assets/Icons/cat_*.svg

gen_catalog.py holds four tables:

Table Holds
ITEMS gId → (displayName, category)
CATEGORIES category → displayName, icon
LOGISTICS_IDS the items usable in logistics (sets both canDemand and canSupply)
VERSION_INFO filled by added("<version>", …) / deprecated("<version>", …) calls, one block per game release, sourced from the developer version history

The generator asserts that every item's category exists and that every LOGISTICS_IDS / VERSION_INFO id is in ITEMS; ItemCatalogTests re-checks the category rule at build time.

Important

Never hand-edit the JSON. Since v1.4.1 CI re-runs gen_catalog.py and fails the build if the committed ItemCatalog.json differs from what the generator produces — so a hand edit, or a generator edit that was never re-run, is caught.

Finding what is missing

After a new game version, or a save from a planet the sample saves never visited:

python tools/item-catalog/report_missing.py <save> [<save> ...]

It lists every WorldObject.gId and unlockedGroups entry absent from ItemCatalog.json, and every demandGrps / supplyGrps id that is missing the matching logistics flag, with occurrence counts — so the ids worth naming first come out on top. Curate the output into the generator tables and re-run.

History: the catalog was seeded from a single Prime save (278 items), grew to 466 for the 2.102 release once Humble / Toxicity / Aqualis / Selenea saves were mined, and reached 628 in v1.4.0, when every item was matched to its real in-game name and backfilled from the developer changelog. Every item id in the repository's sample saves is now named. See New Game Version.

Icons

gen_icons.py emits one 64×64 rounded-tile SVG per category — coloured background, white pictogram — so the icons read on both light and dark inventory cards. The SVGs are the source; the .png shipped beside each one is rasterised out of band.

Contributing a name

A missing item name is one of the easiest useful contributions:

  1. Run report_missing.py against your save, or note the raw type id from the Inventories page (hover an item to see it).

  2. Add an entry to the ITEMS table in gen_catalog.py, matching the game's own wording:

    ("Uranim", ("Uranium", "ore")),   # the game's own spelling of the id

    If the item can be used in logistics, add its id to LOGISTICS_IDS; if the version history says which release added it, add it to that release's added(...) block.

  3. Re-run the generator, run dotnet test PCEdit.App.Core.Tests, and commit both the script and the regenerated JSON.

See Contributing.

Clone this wiki locally