veratown-prototype

Condition Facts And Rules

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.

Shared condition format

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.

Supported fact inventory

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.

Configuration and evidence sources

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.

Evidence and privacy boundaries

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.

Admin-web autocomplete

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.