This reference covers the shared condition-group evaluator and the fact resolvers used by door rules and location-entry triggers. A fact is available only in the contexts listed below; a field in a map or room configuration is not automatically a condition fact.
A condition group has mode: "all" (AND) or "any" (OR) and 1–16 flat
comparisons. Nested groups are not supported. equals accepts a string,
number, or boolean; at_least and at_most require numeric values.
Missing or unavailable facts evaluate as unknown. For all, any known
non-match makes the group not match; otherwise an unknown keeps it unknown.
For any, any known match wins; otherwise an unknown keeps it unknown.
Location triggers act only on a matched group, so unknown facts never select a
rule. Door access conditions and conditional blocks fail closed on unknown
evidence. The sample preview in admin-web evaluates only operator-supplied
values and is not live BC evidence.
| Context | Fact | Type and meaning |
|---|---|---|
| Location message and delayed appearance | occupantCount |
Number of observed characters inside the configured location, excluding the bot. |
| Location message and delayed appearance | hour |
Number from 0–23 in the configured time zone. |
| Location message and delayed appearance | dayOfWeek |
English weekday name in the configured time zone. |
| Location message and delayed appearance | timeOfDay |
night, morning, afternoon, or evening, derived from local hour. |
| Location message and delayed appearance | locationName |
Configured map location name. |
| Location message and delayed appearance | locationKey |
Stable configured map location key. |
| Location message and delayed appearance | locationType |
Configured map location type. |
| Location message and delayed appearance | playerName |
Entering character’s BC-observed name. |
| Location message and delayed appearance | playerNickname |
Entering character’s BC-observed nickname, or an empty string if absent. |
| Location message and delayed appearance | playerTitle |
BC-observed character title, or an empty string when absent. |
| Location message and delayed appearance | memberNumber |
Entering character’s BC member number. |
| Location message and delayed appearance | wears:<Group>:<Name> |
Boolean exact match against the entering character’s observed appearance. |
| Location message and delayed appearance | hasAppearanceGroup:<Group> |
Boolean indicating whether the observed appearance contains any item in the group. |
| Location message and delayed appearance | reputation:<Type> |
Numeric BC reputation value for the exact type in the latest full character sync; unknown when absent. |
| Location message and delayed appearance | activePose:<PoseName> |
Boolean exact match against the character’s latest BC-observed active-pose list. |
| Location message and delayed appearance | itemExpression:<Group>:<Name> |
Current expression for the exact worn item; none when no expression is set. |
| Location message and delayed appearance | itemLocked:<Group>:<Name> |
Boolean indicating BC-observed lock metadata on the exact worn item; lock-holder identity is not exposed. |
| Location message and delayed appearance | itemRemovalTimeRemainingMs:<Group>:<Name> |
Milliseconds until its BC-observed removal timer; unknown when no valid timer is present. |
| Location message and delayed appearance | arousalProgress |
Number from 0–100 from the latest valid ChatRoomSyncArousal.Progress; unknown until observed. |
| Location message and delayed appearance | hasOwner |
False if absent, true for valid metadata, unknown if malformed; raw owner details stay hidden. |
| Location message and delayed appearance | hasLover |
Boolean indicating at least one lovership exists; raw lover details are not exposed. |
| Location message and delayed appearance | credits |
Current available Veratown credits; excludes reserved credits and is not BC account Money. |
| Location message and delayed appearance | featureAvailable:casino |
available or unavailable from the current casino feature/configuration resolver. |
| Location message and delayed appearance | featureAvailable:shop |
available or unavailable from the current shop configuration resolver. |
| Appearance itemset variants | hasBreasts, hasFlatChest, hasVagina, hasPenis |
Boolean body traits derived from the target’s latest observed BodyUpper and Pussy assets; unknown if absent or unrecognized. |
| Appearance itemset variants | prerequisitesSatisfied:<Group>:<Asset> |
Boolean result from the pinned BC prerequisite evaluator, including the selected option when that asset is configured in the candidate variant; unknown evidence never matches. |
| Door access and conditional block | roomAdmin |
Boolean current BC room-admin role. |
| Door access and conditional block | roomWhitelisted |
Boolean current BC room-whitelist role. |
| Door access and conditional block | validAccessCode |
Boolean code match plus applicable active group membership; always false for auto-open attempts. |
| Door access and conditional block | memberOf:<groupName> |
Boolean current active membership in a group applicable to this door; dynamic role groups use current BC roles. |
| Door access and conditional block | wears:<Group>:<Name> |
Boolean exact match against the member’s latest BC-observed appearance. |
| Door access and conditional block | hasAppearanceGroup:<Group> |
Boolean indicating whether the member’s latest observed appearance contains any item in the group. |
| Door access and conditional block | playerTitle |
BC-observed character title, or an empty string when absent. |
| Door access and conditional block | reputation:<Type> |
Numeric BC reputation value for the exact type in the latest full character sync; unknown when absent. |
| Door access and conditional block | activePose:<PoseName> |
Boolean exact match against the character’s latest BC-observed active-pose list. |
| Door access and conditional block | itemExpression:<Group>:<Name> |
Current expression for the exact worn item; none when no expression is set. |
| Door access and conditional block | itemLocked:<Group>:<Name> |
Boolean indicating BC-observed lock metadata on the exact worn item; lock-holder identity is not exposed. |
| Door access and conditional block | itemRemovalTimeRemainingMs:<Group>:<Name> |
Milliseconds until its BC-observed removal timer; unknown when no valid timer is present. |
| Door access and conditional block | arousalProgress |
Number from 0–100 from the latest valid ChatRoomSyncArousal.Progress; unknown until observed. |
| Door access and conditional block | hasOwner |
False if absent, true for valid metadata, unknown if malformed; raw owner details stay hidden. |
| Door access and conditional block | hasLover |
Boolean indicating at least one lovership exists; raw lover details are not exposed. |
| Door access and conditional block | credits |
Current available Veratown credits; excludes reserved credits and is not BC account Money. |
featureAvailable:<id> accepts identifier-shaped IDs, but only casino and
shop are currently wired. Other IDs resolve as unknown and cannot match a
condition. The location feature resolver reports an unavailable or unknown
feature separately from the player’s authorization to use it.
Map locations. Location facts come from the stored location’s key, name,
and type, plus its point/region geometry. Geometry and current BC-observed
positions determine occupantCount; arbitrary map cells, labels, descriptions,
and metadata keys are not facts. Location message conditions are configured in
data.entryMessage.variants[].when. Delayed appearance conditions are
configured in data.entryAppearance.conditions or an ordered
data.entryAppearance.rules[].conditions.
Room configuration. timeZone is a setting on entryMessage and
entryAppearance, not a fact. It defaults to UTC and controls the three time
facts. Feature availability currently resolves only the wired casino and shop
configuration; arbitrary prototypeGameConfig keys cannot be used as facts.
Characters. Location values use the entering character’s live BC room snapshot: observed name, nickname, member number, position, and appearance. Door role and appearance facts likewise use current BC role state and the latest observed appearance. The runtime does not resolve profile documents, account settings, or arbitrary character fields. Missing appearance or role evidence remains unknown where the resolver cannot establish a value.
Doors and groups. Configure accessConditions and blockConditions on a
door. They apply to keypad attempts and player-triggered auto-open attempts,
including the auto-open expiry recheck. Keypad code and membership checks remain
an independent required gate. memberOf:<groupName> is scoped by the
configured door or a room-wide group; it is not a general query for any
membership record.
The separate blockedAppearanceItems, blockedAppearanceGroups,
requiredAppearanceItems, requiredAppearanceGroups, and
blockedAppearanceRules settings are appearance filters, not condition groups.
Their unlessItems/unlessGroups exceptions apply only to their own matching
block rule.
Pose and relationship facts use validated, live character snapshots.
ChatRoomSyncArousal supplies only the projected numeric progress; timers and
orgasm counters are not retained. If the connection is not synchronized or an
arousal value has not yet been observed, that fact is unknown.
Title and reputation use the validated full character projection; a missing
reputation type is unknown, not an inferred zero. Item-state variables require
an exact worn group/name match. itemLocked reports lock presence only, not the
lock asset or the member who applied it. itemExpression returns none when
the worn item has no expression. itemRemovalTimeRemainingMs is derived from
the BC RemoveTimer absolute epoch-millisecond timestamp and an injected clock.
No timer or a malformed timer is unknown; zero means the timer elapsed, not
that BC has removed the item.
Body facts hasBreasts, hasFlatChest, hasVagina and hasPenis (boolean)
derive from the observed BodyUpper and Pussy assets and are unknown when
those assets are absent or unrecognized. prerequisitesSatisfied:<Group>:<Asset>
is also available to conditional appearance itemset variants.
It evaluates the pinned asset’s prerequisites against the latest character
snapshot; when the asset is one of the candidate variant’s pieces, its selected
typed or modular option is included. BC’s replacement semantics exclude the
current item in the candidate asset’s group while checking its prerequisites.
Missing state or configuration is unknown, not false; only a satisfied
prerequisite selects a variant. The feature editor exposes only catalogued,
supported asset selectors. BC’s RemotesAllowed owner-rule check remains
unknown for the bot’s own character because BlockRemoteSelf is a local setting,
not a synchronized fact.
Appearance itemset variants are not part of the shared core/ condition-group
contract above. Their body checks and pinned-catalog prerequisite checks are
evaluated by the appearance feature and BC adapter against an observed character
snapshot; unknown and unsupported results never count as a match. See the
appearance itemset reference.
The following possible additions are not supported facts or autocomplete suggestions; each requires separate review and a bounded evidence source.
| Candidate | Potential source | Important constraints |
|---|---|---|
nearestPlayerDistanceTiles or distanceToBotTiles |
Other characters’ MapData.Pos, with fresh reports available through the five-second PositionObservations cache. |
Define the distance metric (for example, straight-line tile distance); this is not pathfinding or walkability. Missing/stale positions must be unknown. |
Ownership and lovership are projected only to hasOwner and hasLover; raw
member numbers, names, notes, stages, and dates are not exposed. Deprecated
string fields Owner and Lover are not used.
credits comes from the Veratown economy service’s availableCredits balance,
not BC’s Money field. Reserved Veratown credits are not included. Failed or
invalid balance reads remain unknown, so conditions cannot match on missing
credit evidence. Other room-sync fields are not generic expression variables.
Potential future facts such as map-distance require their own bounded, typed
projection and a clear permission/privacy rationale. The pinned
ServerAccountDataSynced type also omits Money, FriendList, and
AccountName.
The condition editor suggests only the fact families supported by the selected
trigger. Door group suggestions come from stored groups in the current room and
include groups scoped to the selected door or to the room. Location value
suggestions come from stored locations in the current room. Appearance item and
group suggestions come from the pinned BC appearance catalog, including items
that are valid to observe even when the bot cannot mutate them.
Character-fact suggestions name supported variables, not live player values;
poses use the activePose:<PoseName> pattern.
Admin-web has no BC socket or live character/role authority. Autocomplete, stored map values, and the sample preview are configuration aids only; runtime authorization and trigger evaluation use current BC observations.
See the map and doors guide, location entry messages, and delayed location appearance for feature configuration and event timing.