requirements One gating vocabulary, defined once and used everywhere.
One object answering one question: does this actor, right now, meet these conditions. It appears in sixteen places and behaves identically in all of them.
Where it appears ability.requiresgate.requiresgate.bypassdialogueOption.requiresdialogueNode.redirectWhen.requiresquest.requiresobjective.requiresreaction.requiresbehaviour.requirestrigger.requireslootTable.requireslootEntry.requiresencounterGroup.requiresarea.requiresroomTemplate.requiresnpc.shop.requirestextVariant.requires
The shape Every clause is optional. Those present must all hold.
{
"description": "Why this gate exists. Shown in the editor and in refusals.",
"minLevel": 3, "maxLevel": 8,
"classes": ["warden", "stalker"],
"attributes": [ { "attribute": "might", "min": 14 } ],
"skills": [ { "skill": "lore", "minRank": 2, "minTier": "adept" } ],
"items": [ { "item": "brass_key", "quantity": 1, "consume": true } ],
"quests": [ { "quest": "the_mill_door", "status": "complete" } ],
"factions": [ { "faction": "wardens", "minStanding": 10 } ],
"memories": [ { "deedKind": "theft", "who": "speaker", "known": false } ],
"flags": [ { "flag": "mill_clear", "equals": true } ],
"without": { "items": ["cursed_idol"], "conditions": ["frightened"] },
"anyOf": [ { "items": [ { "item": "brass_key" } ] },
{ "skills": [ { "skill": "lockpicking", "minRank": 5 } ] } ],
"custom": { "gte": [ { "ref": "flags.morale" }, 5 ] }
}without A quest offered only before you have met someone. A shrine admitting only the unarmed. A merchant who deals with you only while you are not carrying stolen goods.
anyOf is one level deep Branches do not nest. Use custom for anything deeper.
An empty requirement passes It is skipped entirely and costs nothing.
How it runs A requirement becomes an ordinary predicate . { "minLevel": 3 } becomes { "gte": [ { "ref": "actor.level" }, 3 ] }.
Every field
Field Type Req Default What it does descriptionstring ""Why this gate exists. Shown in the editor and in refusals. minLevelnumber Lowest character level that passes. maxLevelnumber Highest character level that passes. classescontent.classes [] []Passes if the actor is any one of these classes. ancestriescontent.ancestries [] []Passes if the actor is any one of these ancestries. abilitiescontent.abilities [] []The actor must know all of these. attributesobject [] []Attribute floors and ceilings the actor must sit inside. skillsobject [] []Skill ranks or mastery tiers the actor must have reached. creatureTypesrules.creatureTypes [] []Passes if the actor is any one of these creature types. alignmentsrules.alignments [] []Passes if the actor is any one of these alignments. languagesrules.languages [] []The actor must speak all of these. currencynumber Money the actor must be carrying. itemsobject [] []Items the actor must hold, optionally equipped or spent. questsobject [] []Quests that must stand at a given status. factionsobject [] []Standing or rank the actor must hold with a faction. memoriesobject [] []What someone must, or must not, know about a deed. flagsobject [] []World flags that must be set, or set to a value. loreobject [] Lore entries the actor must know. withoutobject {}What the actor must lack. As common as what they must have. custompredicate Raw predicate for a gate the clauses cannot say. anyOfobject [] []Alternatives. Any one branch passing satisfies the whole gate.
Field Type Req Default What it does attributerules.attributes yes Which attribute is being checked. minnumber Lowest value that passes. maxnumber Highest value that passes.
Field Type Req Default What it does skillcontent.skills yes Which skill is being checked. minRanknumber 1Lowest trained rank that passes. minTierrules.masteryTiers Lowest mastery tier that passes, instead of naming a rank.
Field Type Req Default What it does itemcontent.items yes Which item is being checked. quantitynumber 1How many are needed. consumeboolean falseTrue to spend them on passing. This is how a key is used up. equippedboolean falseTrue when carrying is not enough and it must be worn or wielded.
Field Type Req Default What it does questnarrative.quests yes Which quest is being checked. statusavailableactivecompletefailedunstarted"complete"The status it must stand at. Unstarted means never taken. objectiveid Ask for one finished objective instead of the whole quest.
Field Type Req Default What it does factioncontent.factions yes Which faction is being checked. minStandingnumber Lowest standing that passes. maxStandingnumber Highest standing that passes. minRankid Lowest rank that passes, instead of naming a number.
Field Type Req Default What it does deedKindnarrative.deedKinds yes Which kind of deed is being asked about. whospeakerpartyanyonefaction"speaker"Whose memory is consulted. The speaker, the party, anyone, or the faction. knownboolean trueTrue to require they know it, false to require they do not. withinDaysnumber Only count the memory if it is fresher than this.
Field Type Req Default What it does flagstring yes Flag name. A free string, not a checked reference. equalsstring | number | boolean Value it must hold. Omit to require only that it is set.
Field Type Req Default What it does entrynarrative.lore yes Which lore entry is being checked. knownboolean trueTrue to require it is known, false to require it is not.
Field Type Req Default What it does classescontent.classes [] []Fails if the actor is any of these classes. abilitiescontent.abilities [] []Fails if the actor knows any of these. itemscontent.items [] []Fails if the actor is carrying any of these. questsobject [] []Fails if any of these quests stands at the named status. flagsobject [] []Fails if any of these flags is set. conditionsrules.conditions [] []Fails if the actor is under any of these conditions. lorenarrative.lore [] Fails if the actor knows any of these lore entries.
Field Type Req Default What it does descriptionstring ""Why this branch exists. Shown in the editor. minLevelnumber Lowest character level that passes this branch. maxLevelnumber Highest character level that passes this branch. classescontent.classes [] []Branch passes if the actor is any one of these classes. ancestriescontent.ancestries [] []Branch passes if the actor is any one of these ancestries. abilitiescontent.abilities [] []The actor must know all of these for this branch. attributesobject [] []Attribute bounds this branch checks. skillsobject [] []Skill ranks or tiers this branch checks. creatureTypesrules.creatureTypes [] []Branch passes if the actor is any one of these creature types. alignmentsrules.alignments [] []Branch passes if the actor is any one of these alignments. languagesrules.languages [] []The actor must speak all of these for this branch. currencynumber Money this branch needs the actor to be carrying. itemsobject [] []Items this branch needs. questsobject [] []Quest statuses this branch checks. factionsobject [] []Faction standing this branch checks. memoriesobject [] []Memory this branch checks. flagsobject [] []Flags this branch checks. loreobject [] Lore this branch checks. withoutobject {}What this branch needs the actor to lack. custompredicate Raw predicate for this branch. Branches do not nest further.