Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Condition index

Find a native condition class, its wrapper, and the chapter explaining its fields. Test listener timing and save/load behavior when adapting a condition to your quest.

The condition inventory is Observed in vanilla. Use the named depot paths to inspect matching nodes in your own installation. For a worked example, start with Labs at a glance.

Choose the evaluation schedule first

The same predicate can sit beneath two different graph schedules:

Graph nodeQuestion answered on entryFocused ordinary results
questConditionNodeDefinition“Is this predicate fulfilled now?”True or False
questPauseConditionNodeDefinition“When this predicate becomes fulfilled, continue this active route.”Out after fulfillment

An immediate Condition does not wait on its False route. A Pause Condition does not expose an ordinary False continuation in the focused shape. See Immediate branches and waiting gates.

Read the payload layers

Many condition families use two object layers:

Condition or Pause Condition node
└── condition                    domain wrapper
    └── type                     concrete predicate payload

For example:

questFactsDBCondition
└── questVarComparison_ConditionType

Other wrappers, including questTriggerCondition, carry decisive fields directly. Preserve the actual wrapper/payload pairing; replacing a wrapper while leaving an incompatible nested handle is not a type conversion.

Families reduced to practical property contracts

FamilyWrapperConcrete payload or direct fieldsDecisive valuesBook evidence
Fact comparisonquestFactsDBConditionquestVarComparison_ConditionTypefactName, signed value, comparisonType259 retained instances are Observed in vanilla; exact Lab 1–5 fact predicates are Structurally validated
TriggerquestTriggerConditionDirect type, triggerAreaRef, activatorRef, isPlayerActivatorIsInside, IsOutside, or another specifically evidenced predicate; exact NodeRef and activator214 retained instances are Observed in vanilla; exact Lab 3–5 player gates are Structurally validated
DistancequestDistanceConditionquestDistanceComparison_ConditionType containing operand handlesquestObjectDistance, questValueDistance, comparator, both object identities55 retained instances are Observed in vanilla; no Lab 1–5 distance gate
Journal lifecyclequestJournalConditionquestJournalEntryState_ConditionTypeTyped path, engine state, payload-specific inverted66 retained instances are Observed in vanilla
Journal user statequestJournalConditionquestJournalEntry_ConditionTypeTyped path and user-facing state21 retained instances are Observed in vanilla
Journal visitedquestJournalConditionquestJournalEntryVisited_ConditionTypeTyped path and visitedOne retained instance is Observed in vanilla
Realtime delayquestTimeConditionquestRealtimeDelay_ConditionTypehours, minutes, seconds, native spelling miliseconds146 retained instances are Observed in vanilla; exact Lab 1, 2, and 4 delays are Structurally validated
Game-time delayquestTimeConditionquestGameTimeDelay_ConditionTypedays, hours, minutes, seconds19 retained instances are Observed in vanilla
Character spawnedquestCharacterConditionquestCharacterSpawned_ConditionTypeobjectRef, comparison type/count, entireCommunity73 retained instances are Observed in vanilla; exact Lab 5 Greater 0 community-scoped wait is Structurally validated

The focused authoring fields and validation steps are in Condition payloads. Community readiness adds the identity and activation-order requirements in Activation, readiness, and acquisition.

Fact comparators

The property guide exposes these native values. The count column keeps the retained corpus observation separate from enum availability:

comparisonTypePredicateRetained instances
Equalfact equals authored value55
NotEqualfact does not equal authored value2
Greaterfact is greater than authored value138
GreaterOrEqualfact is at least authored value55
Lessfact is less than authored value9
LessOrEqualfact is at most authored value0

The absence of LessOrEqual from this focused sample is not evidence that the enum cannot represent it.

Facts are signed integers. Equal 1 and Greater 0 are not interchangeable when another writer can store 2.

Trigger predicates

The retained trigger inventory contains:

Direct questTriggerCondition.typeRetained instances
IsInside153
IsOutside56
Entered5

These names are search keys, not proof of exact state-versus-edge behavior through activation, teleportation, streaming, or save/load. The exact Lab 3–5 resources use state-shaped IsInside / IsOutside forms with the player form of the activator fields; test the intended crossing and reload behavior in game.

Time payloads

Concrete payload beneath questTimeConditionRetained instancesCurrent depth
questRealtimeDelay_ConditionType146Property recipe and Structurally validated lab examples
questGameTimeDelay_ConditionType19Property recipe plus vanilla observations
questTimePeriod_ConditionType2Inventory only
questTickDelay_ConditionType1Inventory only

The payload name does not settle pause-menu, time-skip, fast-travel, loading-screen, process-restart, or save-restoration policy. Those are separate runtime cases; see Delays, facts, and persistence boundaries.

Logical condition trees

questLogicalCondition combines child predicates inside one Condition or Pause Condition. It is not a graph-level join or race node.

Direct operationRetained instancesSafe current statement
AND72Every represented child predicate is required by the authored tree; exact evaluation order and short-circuit policy are not inferred
OR14The tree represents alternatives but does not report which child supplied fulfillment
XOR1The four-child serialized shape exists; its multi-true truth policy remains Experimental

The exact nested AND condition in Lab 2 is Structurally validated. There is no generic NOT wrapper in the retained corpus. Use a payload’s own negative form only when that payload owns one—for example NotEqual, IsOutside, or the journal-state payload’s inverted field. See Boolean condition trees.

Do not confuse the table with questLogicalAndNodeDefinition or questLogicalXorNodeDefinition. Those graph nodes combine execution signals and have sockets; questLogicalCondition combines predicate objects and has no listener sockets to cancel.

Object-condition families

The retained corpus contains 60 questObjectCondition wrappers. Their nested payloads account for all 60 definitions:

Concrete payloadRetained instancesExternal owner to identify before authoring
questDevice_ConditionType44Placed device identity, template/controller state, and the producer of the observed device state
questInventory_ConditionType11Item/record identity, inventory owner, quantity or state, and the operation that changes it
questScan_ConditionType3Scannable target identity and scan event/state owner
questDestruction_ConditionType2Target identity and destruction-state producer

All four rows are Observed in vanilla inventory. The device row now has a bounded property/ownership procedure in Advanced devices and interactions, while a new custom-device lifecycle remains Experimental until its exact matrix passes. The other rows remain discovery entries rather than complete property recipes. The shared wrapper does not imply shared fields or runtime behavior.

Character, combat, and workspot families

The 250 retained questCharacterCondition wrappers contain:

Concrete payloadRetained instances
questCharacterSpawned_ConditionType73
questCharacterMount_ConditionType67
questCharacterKilled_ConditionType37
questCharacterStatusEffect_CondtionType29
questCharacterState_ConditionType18
questCharacterCombat_ConditionType11
questCharacterHealth_ConditionType4
questCharacterHit_ConditionType4
questCharacterWorkspot_ConditionType4
questCharacterAttack_ConditionType1
questCharacterGender_CondtionType1
questCharacterQuickHacked_ConditionType1

Condtion is the native spelling in the two class names above. Preserve it when searching. Except for the bounded CharacterSpawned contract taught by Lab 5, these rows remain Observed in vanilla discovery entries. Before authoring one, establish actor/community ownership, reference form, streaming/readiness, the producer of the state change, and cleanup.

Lab 5’s focused spawn wait is:

questCharacterCondition
└── questCharacterSpawned_ConditionType
    ├── objectRef.reference: community NodeRef
    └── comparisonParams
        ├── comparisonType: Greater
        ├── count: 0
        └── entireCommunity: 1

Read it literally: the community-scoped spawned count is greater than zero. It does not prove that every actor in a multi-entry community is ready.

Scene, content, phone, and system families

WrapperConcrete payloadRetained instancesBoundary
questSceneConditionquestSceneNode_ConditionType31Scene state consumer; it does not launch the scene
questContentConditionquestContentLock_ConditionType10Content-lock predicate inventory
questContentConditionquestContentToken_ConditionType5Content-token predicate inventory
questSystemConditionquestPhoneMuted_ConditionType26Phone-muted predicate inventory
questSystemConditionquestCameraFocus_ConditionType24Camera-focus predicate inventory
questSystemConditionquestPhone_ConditionType4Phone-state predicate inventory

Every row is Observed in vanilla. A condition is a consumer of state; it does not create the scene, token, phone call, or camera behavior it observes.

Vehicle and spawning families

WrapperConcrete payloadRetained instancesBoundary
questVehicleConditionquestVehicleSpeed_ConditionType3Identify the exact vehicle, load/spawn owner, and speed comparison
questVehicleConditionquestVehicleTrunk_ConditionType2Identify vehicle/trunk state and the producer of that state
questVehicleConditionquestVehicleWater_ConditionType1Inventory only
questSpawnerConditionquestSpawnerReady_ConditionType7Identify spawner ownership, activation order, failure route, and cleanup

These rare families are Observed in vanilla and remain poor copy-by-name recipes. Test them in a small mod-owned project before integrating them into a quest.

Distance operands

All 55 retained questDistanceCondition wrappers use questDistanceComparison_ConditionType. The focused operand relationship is:

questDistanceComparison_ConditionType
├── distanceDefinition1 -> questObjectDistance
│   ├── entityRef
│   └── nodeRef2
├── distanceDefinition2 -> questValueDistance
│   └── distanceValue
└── comparisonType

Call distanceValue a numeric threshold. The retained shape does not prove a universal measurement unit, the reference points used on each entity, or streaming/teleportation policy.

Focused vanilla search routes

Extract these resources from your own game and retain only focused notes or excerpts. Do not redistribute the CR2W files or full serializations.

FamiliesDepot path
Facts, logical trees, triggers, time, journal, contentbase\open_world\minor_activities\watson\northside\ma_wat_nid_15\ma_wat_nid_15_phase.questphase
Game-time/realtime, journal, content token, phonebase\quest\side_quests\sq011\phases\sq011_concert.questphase
Inventory, scan, scene, character, vehicle trunkbase\open_world\street_stories\heywood\vista_del_rey\sts_hey_rey_09\phases\sts_hey_rey_09_openworld.questphase
Device, killed, spawned, workspot, quickhackbase\open_world\street_stories\watson\little_china\sts_wat_lch_01\phase\sts_wat_lch_01_combat.questphase
Destruction, device, combat, vehicle speedbase\open_world\street_stories\watson\northside_industrial_district\sts_wat_nid_03\phases\sts_wat_nid_03_openworld.questphase
Spawner ready, distance, character mountbase\open_world\street_stories\westbrook\japantown\sts_wbr_jpn_09\phases\sts_wbr_jpn_09_gameplay.questphase

Before using an indexed family

For a condition not yet taught as a practical recipe, retain:

  1. the exact immediate or waiting graph node and socket route;
  2. the wrapper, nested concrete payload, and every decisive field;
  3. ownership and resolution for every external identifier;
  4. the system or graph operation that produces the observed state;
  5. a mod-owned WolvenKit 8.19.0 round trip with non-null compatible handles;
  6. already-true, normal-transition, false/failure, save/load, stream-loss, cancellation, completion, and re-entry cases as applicable;
  7. exact versions, installed filenames, save history, and logs.

Until those checks exist, a corpus row remains Observed in vanilla and a new behavior claim remains Experimental.