Skip to content
k-mods.com

Type: sinkpoints

Set AWESOME Sink point values for items, understand registration timing, and keep sink scoring separate from Resource Nodes.

This document type runs in the SubsystemMods stage, after all content-generation stages. Its entries key is entries, and the track: field accepts Default or Exploration, defaulting to Default.

This one’s simple in shape but strict about timing: it sets how many AWESOME Sink points an item is worth.

type: sinkpoints
track: Default # or Exploration
entries:
- item: /KDataForge/Gen/MyPack.Gen_MyPack_MySuperIngot
points: 8
- item: /Game/FactoryGame/Resource/Parts/IronIngot/Desc_IronIngot.Desc_IronIngot_C
points: 100
overridden: 50 # optional a separate "overridden" point value some UI paths read
  • item: must resolve to an UFGItemDescriptor subclass. Both the bare generated-content id shortcut (e.g. item: MySuperIngot instead of the full /KDataForge/Gen/... path, see Generated Content Short Ids) and the bare class-name shortcut work here too (see Targeting → bare class name), though sticking to full paths in a published pack is still the safer habit.
  • points: is a plain integer. overridden: is optional, and it’s only needed if you specifically want a distinct “overridden” points value separate from the base one.
  • One sinkpoints document builds one UDataTable and registers it against whichever track: you picked. Multiple documents, even across packs, just add more rows to the sink subsystem: they don’t need to be merged into one file.

An entry may replace item: with an ofClass: scope (default /Script/FactoryGame.FGItemDescriptor) plus the scope filters (matchName:, matchTag:, where:, …). Every loaded item descriptor class that passes the filters gets the entry’s points: (and overridden:):

type: sinkpoints
entries:
- ofClass: /Script/FactoryGame.FGItemDescriptor
where:
path: mForm
in: [RF_LIQUID, RF_GAS] # every fluid and gas: not sinkable
points: 0
- ofClass: /Script/FactoryGame.FGItemDescriptor
matchName: Desc_Nuclear* # everything nuclear is worth a fixed 500
points: 500

Filter entries expand against the descriptor classes loaded when the document applies, and the load report warns when a filter matched nothing. A later explicit item: row for the same descriptor in the same document wins, because rows are keyed by class name.

Registration timing and Resource Node boundary

Section titled “Registration timing and Resource Node boundary”

KDataForge queues sink point tables during initialization and registers them per world before SML’s content registry freezes. /kdf reload re-reads and validates the document, but cannot replace a table inside that already-frozen registry. Restart the session or dedicated server before judging a sink-point change.

Sink points only control item scoring in the AWESOME Sink. They do not place Resource Nodes, change purity, or grant scanner visibility. See Resources and Resource Nodes for those systems.

  • Changed points do not appear: restart the session or dedicated server.
  • Points show as 0, or unchanged in-game: check that item: actually resolved (/kdf report lists a failed patch if the class path was wrong), and make sure you’re looking at the right track: (Default vs. Exploration are separate tables).
  • Sink points for a freshly generated item are part of the combined pack in End-to-End Pack.
  • A resource still has no mineable node or scanner entry: Sink scoring is unrelated. Follow the descriptor, world-node, and scanner steps on the Resources page.