--!strict -- Generated from hw-content-contract. Fingerprint: b729dd55d384590dd2cdcd1cebf82f1ac6cf88361128c4ded4c8e126541bedf8 -- Reference to character or npc or enemy or animal or structure content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character|npc|enemy|animal|structure export type ActorDefinitionId = string -- An actor left the world; its owner state is gone. export type ActorDespawnedEvent = { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Definition the actor instantiates, resolved when the event was created. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character|npc|enemy|animal|structure definition: ActorDefinitionId, -- Discriminant. kind: "actor_despawned" } -- A living actor's health reached zero (life transition, not despawn). export type ActorDiedEvent = { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Definition the actor instantiates, resolved when the event was created. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character|npc|enemy|animal|structure definition: ActorDefinitionId, -- Actor whose damage caused the death; absent for environmental damage. Length: 1…256; Pattern: ^[\s\S]+$ killer: (ActorRef)?, -- Discriminant. kind: "actor_died", -- Player controlling the killer; absent for AI killers and environmental damage. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)? } -- Opaque reference to one spawned actor instance. Length: 1…256; Pattern: ^[\s\S]+$ export type ActorRef = string -- A new actor entered the world. export type ActorSpawnedEvent = { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Why the actor was spawned. cause: SpawnCause, -- Definition the actor instantiates, resolved when the event was created. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character|npc|enemy|animal|structure definition: ActorDefinitionId, -- Discriminant. kind: "actor_spawned" } -- Copied actor state; contains no engine handles or live mutable data. export type ActorView = { -- Light definitions currently emitted by the actor. Items: 0…4096; Unique entries active_lights: {LightId}, -- Whether this instance can participate in live-actor operations. alive: boolean, -- Definition instantiated or represented by this runtime record. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character|npc|enemy|animal|structure definition: ActorDefinitionId, -- Current hit points; zero denotes exhausted health. Range: 0…2147483647; Unit: hp health: HitPoints, -- Home point the actor returns to, together with its map instance. home: Position, -- Current hunger resource in whole units. Range: 0…2147483647; Unit: count hunger: Count, -- Maximum hit points and upper healing cap. Range: 1…2147483647; Unit: hp max_health: PositiveHitPoints, -- Maximum hunger resource for this character. Range: 0…2147483647; Unit: count max_hunger: Count, -- Maximum stamina resource for this character. Range: 0…2147483647; Unit: count max_stamina: Count, -- Absolute position together with its map instance. position: Position, -- Opaque host-assigned reference to this runtime instance. Length: 1…256; Pattern: ^[\s\S]+$ ref: ActorRef, -- Current stamina resource in whole units. Range: 0…2147483647; Unit: count stamina: Count, -- Unique definition tags used for filtering and classification. Items: 0…4096; Unique entries tags: {TagId} } -- Reference to map.anchor content; resolution checks namespace and target kind. Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.anchor export type AnchorRef = string -- Drawn rotation rate per second of presentation time. Range: 0…2147483647; Unit: mrad/s export type AngularRate = number -- A wild or domestic animal: its body, idle actions, gear and loot. export type AnimalDefinition = { -- Idle action clips in repertoire order; the first is its rest pose. Items: 1…16; Unique entries actions: {Name}, -- Character definition supplying body, stats and movement. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character character: CharacterId, -- Whether it hunts a wielder who struck it twice instead of fleeing. hunts: boolean, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Corpse lifetime; population rules decide any new spawn. lifecycle: TransientLifecycle, -- Inventory and held weapon; dropped at death except natural weapons. loadout: Loadout, -- Additional items dropped at death. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: loot loot: (LootId)?, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Whether village animals of this kind live in the pen. penned: boolean, -- Its call and petting sounds. sounds: AnimalSounds, -- Whether players may pet it and it belongs to the village side. tame: boolean } -- Reference to animal content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: animal export type AnimalId = string -- A village animal placed in a new world, relative to the hearth or the pen. export type AnimalPlacement = { -- Animal definition placed; penned kinds go into the pen. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: animal animal: AnimalId, -- Offset east of the hearth or pen centre. Range: -2147483648…2147483647; Unit: mm x_mm: Millimeters, -- Offset south of the hearth or pen centre. Range: -2147483648…2147483647; Unit: mm z_mm: Millimeters } -- Sounds of an animal. export type AnimalSounds = { -- Its call, now and then near a local player; absent stays quiet. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue call: (AudioCueId)?, -- Volume of the call before its cue's gain, in thousandths. Range: 0…1000; Unit: permille call_volume_permille: Permille, -- While a player pets it; absent stays quiet. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue pet: (AudioCueId)? } -- Character activity that selects an animation clip. export type AnimationAction = "idle" | "walk" | "run" | "attack" | "hurt" | "die" | "talk" | "sit" | "sleep" | "use" -- Animation clip selected by a unique character action. export type AnimationBinding = { -- Character action that selects this animation binding. action: AnimationAction, -- Animation clip definition to play for the action. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: animation animation: AnimationId } -- An animation clip of the engine rig (until native rigs replace it) with its duration. export type AnimationDefinition = { -- Engine clip name of the V75 rig, lowercase with underscores (`celebrate`, `talk_explain`). Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ clip: Name, -- Length of one playback. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Whether the clip repeats while it shows. looping: boolean } -- Reference to animation content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: animation export type AnimationId = string -- Runtime result classifications required by the v1 effect protocol. export type ApiError = "invalid_type" | "unknown_field" | "out_of_range" | "missing_reference" | "scope_denied" | "not_exported" | "budget_exceeded" | "script_error" | "cascade_limit" | "stale_reference" | "precondition_failed" | "inventory_full" | "binding_disabled" | "queue_full" -- Zero-based index into a prefab appearance table. Range: 0…254; Unit: count export type AppearanceIndex = number -- Where a circle attack is centered. export type AreaCenter = "self" | "target" -- Ground shape of an area effect around its centre. export type AreaShape = "circle" | "ring" -- What a worn armor piece adds to its wearer; the pieces of all slots add up. export type ArmorStats = { -- Guard of a shield (offhand only): its arc and the share of the guard's stamina cost it takes. block: (ShieldBlock)?, -- Maximum health added while worn. Range: 0…2147483647; Unit: count health: Count, -- Share of every landing blow the piece absorbs; the worn pieces add up to at most 800. Range: 0…1000; Unit: permille reduction_permille: Permille, -- Share of walking and running speed the piece takes; the worn pieces add up to at most 500. Range: 0…1000; Unit: permille slow_permille: Permille, -- Maximum stamina added while worn. Range: 0…2147483647; Unit: count stamina: Count, -- Primary and secondary color of the worn model; absent keeps the model's own colors. Items: 2…2 tint_rgb: ({{ColorChannel}})? } -- Asset identity, source decoder and mandatory attribution. export type AssetDeclaration = { -- Content category produced by the declared asset decoder. asset_type: AssetKind, -- Attribution lines retained in generated credits. Items: 1…32; Unique entries credits: {DisplayText}, -- Declared decoder for the asset's source bytes. format: AssetFormat, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- License identifier or license terms supplied by the asset author. Length: 1…4096; Pattern: ^[\s\S]*$ license: DisplayText, -- Package-relative source file; traversal and aliases are forbidden. Length: 1…4096; Pattern: ^(?:[a-z0-9_][a-z0-9_-]*/)*[a-z0-9_][a-z0-9_-]*\.(?:json|json\.gz|bin|png|webp|ogg|mp3|wav)$ path: AssetPath } -- Source encoding consumed by an activated asset decoder. export type AssetFormat = "native_prefab" | "native_world_library" | "native_array" | "native_table" | "webp" | "png" | "ogg" | "mp3" | "wav" -- Decoded content category supplied by an asset source. export type AssetKind = "prefab_source" | "world_library" | "world_data" | "texture" | "audio" -- Relative lowercase asset path within the package: JSON, gzip JSON, binary array, PNG, WebP, Ogg, MP3 or WAV. Length: 1…4096; Pattern: ^(?:[a-z0-9_][a-z0-9_-]*/)*[a-z0-9_][a-z0-9_-]*\.(?:json|json\.gz|bin|png|webp|ogg|mp3|wav)$ export type AssetPath = string -- Ground area of an attack, announced on the ground for the tool's whole wind-up and struck at its end. export type AttackArea = { -- Center of the circle. center: AreaCenter, -- Discriminant. kind: "circle", -- Radius. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance } | { -- Full opening angle. Range: 0…359999; Unit: mdeg arc_mdeg: Millidegrees, -- Discriminant. kind: "cone", -- Length of the cone. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance } -- Reference to asset:audio content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:audio export type AudioAssetId = string -- Mixer bus a cue plays on; each has its own volume setting. export type AudioBus = "music" | "effects" | "interface" | "ambient" | "voice" -- A sound: recordings one of which plays (weighted, presentation randomness only), its bus, volume, cooldown and reach. export type AudioCueDefinition = { -- Mixer bus; every variant plays on it. bus: AudioBus, -- Least time between two plays. Range: 0…2147483647; Unit: ms cooldown_ms: Milliseconds, -- Loudest volume of the cue, in thousandths. Range: 0…1000; Unit: permille gain_permille: Permille, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Plays as a loop (ambience, music) instead of once. looped: boolean, -- Distance a world sound is heard at; it fades out towards it. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance, -- Recordings; cues sharing their first recording share the cooldown. Items: 1…16 variants: {AudioVariant} } -- Reference to audio cue content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue export type AudioCueId = string -- Length of a recording, at most 30 minutes. Range: 1…1800000; Unit: ms export type AudioDuration = number -- One recording of a cue. export type AudioVariant = { -- Audio asset of the same package or a dependency. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:audio asset: AudioAssetId, -- Length of the recording (voices end and loops restart by it). Range: 1…1800000; Unit: ms duration_ms: AudioDuration, -- Relative chance among the cue's variants. Range: 1…2147483647; Unit: count weight: PositiveCount } -- Authority script source, event, effect capabilities and parameter declarations. export type AuthorityScript = { -- Unique effect capabilities the handler is permitted to return. Items: 0…4096; Unique entries effects: {EffectKind}, -- Event kind or typed event payload selected by the handler declaration. event: EventKind, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Ordered declarations of the exact parameter names, scalar types and bounds. Items: 0…4096; Unique entries parameters: {ParameterDeclaration}, -- Package-relative source file; traversal and aliases are forbidden. Length: 1…4096; Pattern: ^(?:[a-z0-9_][a-z0-9_-]*/)*[a-z0-9_][a-z0-9_-]*\.luau$ path: ScriptPath, -- Unique deterministic RNG stream names allowed for this script. Items: 0…4096; Unique entries random_streams: {Name}, -- Requested target packages; effective rights also require host approval and event scope. Items: 1…64; Unique entries target_packages: {PackageId} } -- Non-recursive flat or heightfield terrain under a scatter, river or road generator. export type BaseTerrain = { -- Discriminant. operation: "flat", -- Exact closed argument record supplied by the selected definition. parameters: FlatTerrain, -- Stable local salt separating this generator's deterministic seed stream. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ seed_salt: Name, -- Exact supported format or package version; no implicit upgrades. Range: 1…1; Unit: count version: FormatVersion } | { -- Discriminant. operation: "heightfield", -- Exact closed argument record supplied by the selected definition. parameters: HeightfieldTerrain, -- Stable local salt separating this generator's deterministic seed stream. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ seed_salt: Name, -- Exact supported format or package version; no implicit upgrades. Range: 1…1; Unit: count version: FormatVersion } -- What an actor does in a behavior state. export type BehaviorAction = { -- Discriminant. kind: "idle" } | { -- Discriminant. kind: "follow_target", -- Movement profile of the approach. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: movement movement: MovementId, -- Distance at which the actor stops. Range: 1…2147483647; Unit: mm reach_mm: PositiveDistance } | { -- Discriminant. kind: "attack" } | { -- Item with a use. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "use_item", -- Whom it is used on. target: BehaviorUseTarget } | { -- Distance kept from the target. Range: 1…2147483647; Unit: mm distance_mm: PositiveDistance, -- Discriminant. kind: "flee", -- Movement profile of the escape. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: movement movement: MovementId } | { -- Discriminant. kind: "charge", -- Movement profile of the charge. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: movement movement: MovementId, -- Distance at which the charge ends. Range: 1…2147483647; Unit: mm reach_mm: PositiveDistance } | { -- Discriminant. kind: "evade" } | { -- Discriminant. kind: "alarm", -- Radius of the call. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance } | { -- Discriminant. kind: "moves", -- Moves with unique IDs. Items: 1…16; Unique entries moves: {BehaviorMove}, -- How the next move is picked. order: MoveOrder } -- Condition of a behavior transition. export type BehaviorCondition = { -- Discriminant. kind: "always" } | { -- Distance. Range: 1…2147483647; Unit: mm distance_mm: PositiveDistance, -- Discriminant. kind: "target_within" } | { -- Health threshold. Range: 1…2147483647; Unit: hp health: PositiveHitPoints, -- Discriminant. kind: "health_below" } | { -- Least distance of the striker. Range: 1…2147483647; Unit: mm distance_mm: PositiveDistance, -- Discriminant. kind: "struck_from_afar" } | { -- Discriminant. kind: "stamina_below", -- Stamina threshold. Range: 1…2147483647; Unit: count stamina: PositiveCount } -- An ordered behavior graph the engine evaluates every tick for an AI-controlled actor; scripts never run per tick. export type BehaviorDefinition = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- State the graph starts in. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ initial_state: Name, -- States with unique IDs. Items: 1…64; Unique entries states: {BehaviorState} } -- Reference to behavior content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: behavior export type BehaviorId = string -- One attack of a move set: a tool's blow on the target or over an announced area. export type BehaviorMove = { -- Area struck; absent strikes the target like the tool's normal blow or shot. area: (AttackArea)?, -- Ticks after the move before it may be picked again. Range: 0…2147483647; Unit: tick cooldown_ticks: DurationTicks, -- Local move ID, unique in the set. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ id: Name, -- Distance to the target from which the move starts. Range: 1…2147483647; Unit: mm reach_mm: PositiveDistance, -- Tool whose wind-up, recovery, damage, damage type and push the move uses. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: tool tool: ToolId, -- Weight in a random set. Range: 1…2147483647; Unit: count weight: PositiveCount } -- One state of a behavior graph. export type BehaviorState = { -- What the actor does in this state. action: BehaviorAction, -- Local state ID, unique in the graph. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ id: Name, -- Transitions checked every tick in order; at most one is taken. Items: 0…16 transitions: {BehaviorTransition} } -- A guarded transition to another state. export type BehaviorTransition = { -- Condition that takes the transition. condition: BehaviorCondition, -- Target state. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ to: Name } -- Whom an item of a behavior is used on. export type BehaviorUseTarget = "self" | "target" -- A filtered event subscription with one owner source and an explicit snapshot. export type BindingDefinition = { -- Event kind or typed event payload selected by the handler declaration. event: EventKind, -- Definition references that restrict which matching events invoke the binding. filter: EventFilter, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Event field that supplies the invocation owner. owner_from: BindingOwner, -- Exact closed argument record supplied by the selected definition. parameters: Parameters, -- Authority handler declared by the same package. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: script script: ScriptId, -- Explicit visibility requested for the frozen invocation snapshot. snapshot: SnapshotSpec } -- Reference to binding content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: binding export type BindingId = string -- Event field that resolves the owner of an authority binding. export type BindingOwner = "world" | "player" | "actor" | "target" | "timer_owner" -- Hits a block takes before it breaks. Range: 1…255; Unit: count export type BlockHits = number -- Engine voxel material a block item places and a mined block yields. export type BlockMaterial = "wood" | "stone" | "crystal" -- One voxel cell of a map in whole cell coordinates. export type BlockPos = { -- Instantiated map of the cell. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Cell index on the x axis. Range: -2147483648…2147483647; Unit: mm x_cell: Millimeters, -- Cell index on the y axis. Range: -2147483648…2147483647; Unit: mm y_cell: Millimeters, -- Cell index on the z axis. Range: -2147483648…2147483647; Unit: mm z_cell: Millimeters } -- Engine renderer family of a body and how it moves on screen; presentation only, no game effect. export type BodyPresentation = { -- Clothing colors; a figure wears the one its look variant selects. Items: 1…16 clothes_rgb: {{ColorChannel}}, -- Ground speed at which the walk cycle plays fully. Range: 1…2147483647; Unit: mm/s gait_speed_mm_per_s: PresentationSpeed, -- Discriminant. kind: "human", -- Drawn size of the whole figure in thousandths of the standard body; omitted draws it at the standard size. Range: 500…2000; Unit: permille scale_permille: (BodyScale)?, -- Ground distance of one left-right step cycle. Range: 1…2147483647; Unit: mm stride_mm: PositiveDistance, -- Fastest speed the drawn body follows its simulated position. Range: 1…2147483647; Unit: mm/s track_speed_mm_per_s: PresentationSpeed } | { -- Ground speed at which the walk cycle plays fully. Range: 1…2147483647; Unit: mm/s gait_speed_mm_per_s: PresentationSpeed, -- Discriminant. kind: "crawler", -- Ground distance of one step cycle. Range: 1…2147483647; Unit: mm stride_mm: PositiveDistance, -- Fastest speed the drawn body follows its simulated position. Range: 1…2147483647; Unit: mm/s track_speed_mm_per_s: PresentationSpeed } | { -- Wings rest folded against the body. folded_wings: boolean, -- Ground speed of the full walk blend while it fights as an enemy; other animals use the rig's own stride. Range: 1…2147483647; Unit: mm/s gait_speed_mm_per_s: PresentationSpeed, -- The head bobs with the stride. head_bob: boolean, -- Hind legs move together and the body bounces higher (a hopping gait). hop: boolean, -- The tail and head show a hunting stance while hostile. hunting_stance: boolean, -- Discriminant. kind: "animal", -- Ground distance of one step cycle while it fights as an enemy. Range: 1…2147483647; Unit: mm stride_mm: PositiveDistance, -- Tail swing rate of a tame animal. Range: 0…2147483647; Unit: mrad/s tail_rate_mrad_per_s: AngularRate, -- Fastest speed the drawn body follows its simulated position. Range: 1…2147483647; Unit: mm/s track_speed_mm_per_s: PresentationSpeed } -- Proportions of the parts of a human body in thousandths of the standard body; the skeleton stays the same, its bones and the clothes on them scale. export type BodyProportions = { -- Length of the upper arms and forearms. Range: 500…2000; Unit: permille arms_permille: BodyScale, -- Size of the head with its hair, face and headwear. Range: 500…2000; Unit: permille head_permille: BodyScale, -- Length of the thighs and shins. Range: 500…2000; Unit: permille legs_permille: BodyScale, -- Length of the torso from the hips to the neck. Range: 500…2000; Unit: permille torso_permille: BodyScale } -- Character proportion relative to the standard body. Range: 500…2000; Unit: permille export type BodyScale = number -- The fighting ground of a boss: a circle around a map anchor the client marks on the ground while the boss lives; blows and shots from outside it do not reach the boss, what else leaving it means is up to the package's handlers. export type BossArena = { -- Map anchor at the arena's centre. Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.anchor anchor: AnchorRef, -- Radius of the circle. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance } -- How a boss stands out: a world map marker with its name while it lives and a name plate with its title and health bar over its head. export type BossMark = { -- Its arena: a glowing red circle on the ground while it lives. arena: (BossArena)?, -- Localization key of the title under its name on the name plate. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text title: TextKey } -- Half-open map rectangle; coordinates must be ordered and grid-aligned. export type Bounds = { -- Exclusive east edge of the half-open bounds. Range: -2147483648…2147483647; Unit: mm end_x_mm: Millimeters, -- Exclusive south edge of the half-open bounds. Range: -2147483648…2147483647; Unit: mm end_z_mm: Millimeters, -- Inclusive west edge of the half-open bounds. Range: -2147483648…2147483647; Unit: mm start_x_mm: Millimeters, -- Inclusive north edge of the half-open bounds. Range: -2147483648…2147483647; Unit: mm start_z_mm: Millimeters } -- Composition of a camera shot; targets are roles, places or `player`. export type CameraShot = { -- Camera place. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ eye: Name, -- Discriminant. kind: "place", -- Target. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ look: Name } | { -- Discriminant. kind: "look_at", -- Target. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ target: Name } | { -- Discriminant. kind: "path", -- Target. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ look: Name, -- Places in order. Items: 1…16 path: {Name} } | { -- Roles framed. Items: 1…2 actors: {Name}, -- Composition. framing: Framing, -- Discriminant. kind: "frame", -- Mirror the composition to the left. left: boolean, -- Width of the framed space; absent: the engine's. Range: 1…2147483647; Unit: mm size_mm: (PositiveDistance)? } -- How the camera enters a shot. export type CameraTransition = "cut" | "pan" | "follow" -- One role of a cutscene's cast. export type CastMember = { -- Place the member starts at. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ at: (Name)?, -- NPC definition that plays the role. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: npc npc: NpcId, -- Role name, unique in the cast. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ role: Name } -- Actor geometry, movement, health, compatible clips and resistance data. export type CharacterDefinition = { -- Action-to-animation bindings; action names must be unique. Items: 0…4096; Unique entries animations: {AnimationBinding}, -- Engine rig and look of the body until native prefabs and rigs replace it. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ appearance: Name, -- Animation clips the character exposes as emotes. Items: 0…4096; Unique entries emotes: {AnimationId}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Status definitions that cannot be applied to this character. Items: 0…4096; Unique entries immunities: {StatusId}, -- Weight against pushes in thousandths of a standard body. Range: 1…2147483647; Unit: permille mass_permille: PositiveCount, -- Maximum hit points and upper healing cap. Range: 1…2147483647; Unit: hp max_health: PositiveHitPoints, -- Maximum hunger resource for this character. Range: 0…2147483647; Unit: count max_hunger: Count, -- Maximum stamina resource for this character. Range: 0…2147483647; Unit: count max_stamina: Count, -- Movement profile used by this character. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: movement movement: MovementId, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Appearance customization choices offered for this character. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character_options options: (CharacterOptionsId)?, -- Prefab definition supplying the object's geometry. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: prefab prefab: (PrefabId)?, -- Engine renderer family drawing the body and its drawing parameters. presentation: BodyPresentation, -- Damage multipliers indexed by unique damage-type references. Items: 0…4096; Unique entries resistances: {Resistance}, -- Skeleton required by the character's animations and emotes. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: rig rig: (RigId)? } -- Reference to character content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character export type CharacterId = string -- Look choices of a body. A villager or humanoid enemy wears a look seeded from its identity over these pools (world-library wardrobe names); the pools' order is part of the seed. export type CharacterOptionsDefinition = { -- Beards; women wear the first. Items: 1…64; Unique entries beards: {Name}, -- Body builds in thousandths of the standard body. Items: 1…16 builds_permille: {BodyScale}, -- Eye color. Items: 3…3 eyes: {ColorChannel}, -- Hairstyles. Items: 1…64; Unique entries hair: {Name}, -- Hair colors. Items: 1…16 hair_colors: {{ColorChannel}}, -- Body heights in thousandths of the standard body. Items: 1…16 heights_permille: {BodyScale}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Garments every look wears, by slot. Items: 0…16 outfit: {OutfitPiece}, -- Body profile every look wears (a child: smaller limbs, larger head); omitted is the adult body. proportions: (BodyProportions)?, -- Skin colors. Items: 1…16 skins: {{ColorChannel}}, -- Torso garments. Items: 1…64; Unique entries torsos: {Name} } -- Reference to character options content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character_options export type CharacterOptionsId = string -- Policy controlling when persistent checkpoints are taken. export type CheckpointMode = "dawn" | "manual" -- A filled chest placed once in a world, relative to the hearth. export type ChestPlacement = { -- What the chest holds, one stack per item. Items: 1…27; Unique entries items: {ItemStack}, -- Storage structure placed. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure structure: StructureId, -- Offset east of the hearth. Range: -2147483648…2147483647; Unit: mm x_mm: Millimeters, -- Rotation around the vertical axis. Range: 0…359999; Unit: mdeg yaw_mdeg: Millidegrees, -- Offset south of the hearth. Range: -2147483648…2147483647; Unit: mm z_mm: Millimeters } -- Ordered seasons and weighted weather changes on the simulation clock. export type ClimateDefinition = { -- Number of simulation ticks in one full day. Range: 1…2147483647; Unit: tick day_ticks: PositiveTicks, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Season order (the last is followed by the first), duration and weather of each season. Items: 1…64; Unique entries seasons: {SeasonDuration}, -- Interval between deterministic weather selections. Range: 1…2147483647; Unit: tick weather_period_ticks: PositiveTicks } -- Reference to climate content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: climate export type ClimateId = string -- Simulation timestamp and calendar state visible to a handler. export type ClockView = { -- Number of elapsed simulated calendar days. Range: 0…2147483647; Unit: count day: Count, -- Minute of the simulated day, from midnight through 23:59. Range: 0…1439; Unit: minute minute: DayMinute, -- Season definition selected by this calendar entry. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: season season: SeasonId, -- Monotone simulation tick at which the snapshot was taken. Range: 0…9007199254740991; Unit: tick tick: Ticks } -- Positive cylindrical collision extents for a prefab. export type CollisionShape = { -- Vertical extent or terrain surface height in millimeters. Range: 1…2147483647; Unit: mm height_mm: PositiveDistance, -- Spatial extent measured from the center in millimeters. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance } -- One channel of an RGB color. Range: 0…255; Unit: count export type ColorChannel = number -- Package-qualified identity, written package:name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ export type ContentId = string -- Frozen invocation context with checked integer helpers. export type Context = { -- Clamp an integer to inclusive bounds. clamp: (SignedInt, SignedInt, SignedInt) -> SignedInt, -- Checked integer division rounded toward negative infinity. div_floor: (SignedInt, SignedInt) -> SignedInt, -- Typed event payload selected by the script manifest. event: E, -- Stable ID of the originating committed event. Length: 1…256; Pattern: ^[\s\S]+$ event_id: OpaqueRef, -- Format an exact integer without locale-dependent conversion. format_int: (SignedInt) -> DisplayText, -- Stable ID for this handler invocation. Length: 1…256; Pattern: ^[\s\S]+$ invocation_id: OpaqueRef, -- Return the larger integer. max: (SignedInt, SignedInt) -> SignedInt, -- Return the smaller integer. min: (SignedInt, SignedInt) -> SignedInt, -- Checked multiply-then-divide using an exact integer intermediate. mul_div: (SignedInt, SignedInt, SignedInt) -> SignedInt, -- Resolved owner of this invocation. owner: OwnerRef, -- Exact parameter record from the selected content definition. parameters: P, -- Deterministic named-stream draw with an explicit index and inclusive bounds. random_int: (Name, Count, SignedInt, SignedInt) -> SignedInt, -- Read-only functions over the frozen invocation snapshot. read: Read } -- Nonnegative inventory or resource quantity. Range: 0…2147483647; Unit: count export type Count = number -- An actor crafted a recipe. export type CraftedEvent = { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Number of crafts committed. Range: 1…2147483647; Unit: count count: PositiveCount, -- Discriminant. kind: "crafted", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Crafted recipe. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: recipe recipe: RecipeId } -- Sounds of a fighting creature; a missing one falls back to the presentation profile's. export type CreatureSounds = { -- When it dies. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue death: (AudioCueId)?, -- When it is hurt. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue hurt: (AudioCueId)?, -- Now and then while it is awake; absent stays quiet. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue idle: (AudioCueId)?, -- While it winds up a blow or a shot. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue windup: (AudioCueId)? } -- A personal cutscene: duration, skip rule, cast and a declarative visual timeline. export type CutsceneDefinition = { -- Presentation script evaluated per frame of a viewer's cutscene (`VisualFrame -> VisualResult`); the timeline stands in wherever it cannot run. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: script camera_script: (ScriptId)?, -- NPCs that must be present, by unique role. Items: 0…16; Unique entries cast: {CastMember}, -- Host duration of the cutscene. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Places its staging uses. Items: 0…64; Unique entries places: {ScenePlace}, -- Whether the player may skip it. skip: CutsceneSkip, -- Staging of the cast and camera shots, played with the timeline. Items: 0…256 staging: {SceneStep}, -- Camera, subtitle and fade steps; camera spans never overlap. The complete fallback of a camera script. Items: 0…256 timeline: {VisualStep} } -- A player's cutscene ended by host time, a validated skip or a disconnect. export type CutsceneFinishedEvent = { -- Cutscene that ended. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: cutscene cutscene: CutsceneId, -- Host-assigned identity of this dialogue or cutscene session. Length: 1…256; Pattern: ^[\s\S]+$ instance: OpaqueRef, -- Discriminant. kind: "cutscene_finished", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- How the cutscene ended. result: CutsceneResult } -- Reference to cutscene content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: cutscene export type CutsceneId = string -- How a cutscene ended. export type CutsceneResult = "elapsed" | "skipped" | "cancelled" -- Whether the player may skip a cutscene. export type CutsceneSkip = "allowed" | "forbidden" -- A player's personal cutscene started. export type CutsceneStartedEvent = { -- Started cutscene. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: cutscene cutscene: CutsceneId, -- Host-assigned identity of this dialogue or cutscene session. Length: 1…256; Pattern: ^[\s\S]+$ instance: OpaqueRef, -- Discriminant. kind: "cutscene_started", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } -- Committed damage reduced a living actor's health. export type DamageAppliedEvent = { -- Health actually lost, after resistances. Range: 0…2147483647; Unit: hp amount: Count, -- Definition of the damaged actor. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character|npc|enemy|animal|structure definition: ActorDefinitionId, -- Discriminant. kind: "damage_applied", -- Confirmed origin of the damage; absent for environmental sources. Length: 1…256; Pattern: ^[\s\S]+$ source: (ActorRef)?, -- Actor the change applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } -- A named kind of damage selected by tools, statuses and resistances. export type DamageTypeDefinition = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Unique definition tags used for filtering and classification. Items: 0…4096; Unique entries tags: {TagId} } -- Reference to damage type content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: damage_type export type DamageTypeId = string -- Minute since the start of the simulated day. Range: 0…1439; Unit: minute export type DayMinute = number -- Closed catalog of content records activated in this authoring stage. export type Definition = { -- Localized one-line description shown with the item. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text description: (TextKey)?, -- Presence makes this item equippable; at least tool or light is required. equip: (ItemEquipment)?, -- Inventory and hand icon of the item. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:texture icon: (TextureAssetId)?, -- Unique definition ID in the declaring package namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "item", -- Maximum units in one stack. Range: 1…2147483647; Unit: count max_stack: PositiveCount, -- Localized item label, resolved in the package base locale. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- How the item enters the world when placed; absent items cannot be placed. place: (Placement)?, -- Presence makes the item a spell: bound to its owner (never dropped, stored or traded), cast through its use for mana. spell: (ItemSpell)?, -- Unordered unique membership tags; registry sorts them. Items: 0…4096; Unique entries tags: {TagId}, -- Explicit item use contract; absent for items without a use action. use: (ItemUse)? } | { -- Character definition supplying body, stats and movement. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character character: CharacterId, -- Dialogue talking to it opens. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: dialogue dialogue: (DialogueId)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Explicit prompt, reach and action exposed by this object. interaction: (Interaction)?, -- Discriminant. kind: "npc", -- Respawn policy preserving the NPC's persistent identity. lifecycle: NpcLifecycle, -- Inventory and quick slots; absent leaves the NPC empty-handed. loadout: (Loadout)?, -- World-library human it is drawn as; absent: a look seeded from its character options. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ look: (Name)?, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Daily schedule assigned to this named NPC. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: routine routine: RoutineId, -- Unique definition tags used for filtering and classification. Items: 0…4096; Unique entries tags: {TagId}, -- Voice of its lines and mumble. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: voice voice: (VoiceId)? } | { -- Action-to-animation bindings; action names must be unique. Items: 0…4096; Unique entries animations: {AnimationBinding}, -- Engine rig and look of the body until native prefabs and rigs replace it. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ appearance: Name, -- Animation clips the character exposes as emotes. Items: 0…4096; Unique entries emotes: {AnimationId}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Status definitions that cannot be applied to this character. Items: 0…4096; Unique entries immunities: {StatusId}, -- Discriminant. kind: "character", -- Weight against pushes in thousandths of a standard body. Range: 1…2147483647; Unit: permille mass_permille: PositiveCount, -- Maximum hit points and upper healing cap. Range: 1…2147483647; Unit: hp max_health: PositiveHitPoints, -- Maximum hunger resource for this character. Range: 0…2147483647; Unit: count max_hunger: Count, -- Maximum stamina resource for this character. Range: 0…2147483647; Unit: count max_stamina: Count, -- Movement profile used by this character. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: movement movement: MovementId, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Appearance customization choices offered for this character. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character_options options: (CharacterOptionsId)?, -- Prefab definition supplying the object's geometry. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: prefab prefab: (PrefabId)?, -- Engine renderer family drawing the body and its drawing parameters. presentation: BodyPresentation, -- Damage multipliers indexed by unique damage-type references. Items: 0…4096; Unique entries resistances: {Resistance}, -- Skeleton required by the character's animations and emotes. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: rig rig: (RigId)? } | { -- Beards; women wear the first. Items: 1…64; Unique entries beards: {Name}, -- Body builds in thousandths of the standard body. Items: 1…16 builds_permille: {BodyScale}, -- Eye color. Items: 3…3 eyes: {ColorChannel}, -- Hairstyles. Items: 1…64; Unique entries hair: {Name}, -- Hair colors. Items: 1…16 hair_colors: {{ColorChannel}}, -- Body heights in thousandths of the standard body. Items: 1…16 heights_permille: {BodyScale}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "character_options", -- Garments every look wears, by slot. Items: 0…16 outfit: {OutfitPiece}, -- Body profile every look wears (a child: smaller limbs, larger head); omitted is the adult body. proportions: (BodyProportions)?, -- Skin colors. Items: 1…16 skins: {{ColorChannel}}, -- Torso garments. Items: 1…64; Unique entries torsos: {Name} } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "voice", -- Pitch of the mumble in thousandths of the standard voice. Range: 500…2000; Unit: permille pitch_permille: BodyScale, -- Recorded lines; a line without one is mumbled. Items: 0…4096 recordings: {Recording}, -- Brightness of the mumble, from round to reedy. Range: 0…1000; Unit: permille timbre_permille: Permille } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "movement", -- Spatial extent measured from the center in millimeters. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance, -- Distance traveled per simulation tick at normal movement speed. Range: 1…2147483647; Unit: mm/tick speed_mm_per_tick: MovementSpeed, -- Whole stamina units consumed per movement tick. Range: 0…2147483647; Unit: count stamina_per_tick: Count, -- Maximum vertical obstacle traversable without jumping. Range: 0…2147483647; Unit: mm step_height_mm: Distance } | { -- Declared prefab-source asset that supplies geometry. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:prefab_source asset: PrefabAssetId, -- Collision radius and height used independently of presentation. collision: CollisionShape, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "prefab", -- Seat positions and orientations relative to the prefab origin. Items: 0…4096; Unique entries seats: {Seat} } | { -- Takes up arms against raids instead of fleeing. defends: boolean, -- Chronological day; an entry holds until the next. Items: 1…1440; Unique entries entries: {RoutineEntry}, -- Settlement marker of the villager's house (home and sleep). Length: 1…96; Pattern: ^[a-z][a-z0-9_:-]{0,95}$ home: (SettlementMarker)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Idle clips of the human rig between activities. Items: 0…16 idle: {Name}, -- Discriminant. kind: "routine", -- How each season moves the day. Items: 0…16 shifts: {SeasonShift}, -- Thought-cloud motifs of its talk. Items: 0…16 topics: {Name} } | { -- Localization key of the journal description. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text description: TextKey, -- NPC offering it (journal and markers). Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: npc giver: (NpcId)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Stage assigned when a quest has no stored progress. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ initial_stage: Name, -- Discriminant. kind: "quest", -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Shown objectives. Items: 0…16 objectives: {QuestObjective}, -- Rewards shown on the quest card. Items: 0…16 rewards: {QuestReward}, -- Complete set of local quest stage identifiers. Items: 1…256; Unique entries stages: {Name}, -- How its stages show; stages without an entry stay hidden. Items: 0…256 states: {QuestState}, -- Allowed source/destination stage pairs. Items: 1…256; Unique entries transitions: {QuestTransition}, -- Experience the engine grants the quest's player when it reaches a stage of phase done. Range: 1…2147483647; Unit: count xp: (PositiveCount)? } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "variable", -- Kind of persistent owner allowed to store this variable. owner_scope: OwnerScope, -- Typed payload checked against its owning declaration. value: VariableDeclaration } | { -- Event kind or typed event payload selected by the handler declaration. event: EventKind, -- Definition references that restrict which matching events invoke the binding. filter: EventFilter, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "binding", -- Event field that supplies the invocation owner. owner_from: BindingOwner, -- Exact closed argument record supplied by the selected definition. parameters: Parameters, -- Authority handler declared by the same package. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: script script: ScriptId, -- Explicit visibility requested for the frozen invocation snapshot. snapshot: SnapshotSpec } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "season", -- Engine look the client draws for this season; unique within a climate. look: SeasonLook, -- Its day and night pieces; absent plays the soundtrack's. music: (SeasonMusic)?, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey } | { -- Cloud coverage as thousandths of the sky. Range: 0…1000; Unit: permille cloud_permille: Permille, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "weather", -- Engine look the client draws for this weather; unique within a climate. look: WeatherLook, -- Rain intensity as thousandths of the maximum. Range: 0…1000; Unit: permille rain_permille: Permille, -- Wind speed in millimeters per simulated second. Range: 0…2147483647; Unit: mm/s wind_mm_per_second: WindSpeed } | { -- Number of simulation ticks in one full day. Range: 1…2147483647; Unit: tick day_ticks: PositiveTicks, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "climate", -- Season order (the last is followed by the first), duration and weather of each season. Items: 1…64; Unique entries seasons: {SeasonDuration}, -- Interval between deterministic weather selections. Range: 1…2147483647; Unit: tick weather_period_ticks: PositiveTicks } | { -- Red, green and blue channels in that order. Items: 3…3 color_rgb: {ColorChannel}, -- Positive resistance to harvesting or destruction. Range: 1…2147483647; Unit: count hardness: PositiveCount, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "material", -- Rendering family used for this material. shader: MaterialShader, -- Whether this material contributes solid collision geometry. solid: boolean, -- Engine terrain surface; required for and only allowed with the terrain shader. surface: (TerrainSurface)?, -- Voxel material of the map's world library; required for and only allowed with the voxel shader. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ voxel_material: (Name)? } | { -- Named map placements visible or used by this declaration. Items: 1…4096; Unique entries anchors: {MapAnchor}, -- Half-open horizontal area, aligned with the map cell size. bounds: Bounds, -- Positive map grid spacing; all zone bounds align to this grid. Range: 1…2147483647; Unit: mm cell_mm: PositiveDistance, -- Climate definition supplying seasons and weather for this map. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: climate climate: ClimateId, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "map", -- World library supplying prefab templates, rigs, materials and textures of this map. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:world_library library: WorldLibraryId, -- Local anchor identifier used for initial map entry. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ spawn_anchor: Name, -- Generator regions covering the entire map without equal-priority overlap. Items: 1…4096; Unique entries zones: {MapZone} } | { -- Policy that selects persistent checkpoint times. checkpoint_mode: CheckpointMode, -- Lifetime of an uncollected ground item in simulation ticks. Range: 1…2147483647; Unit: tick drop_lifetime_ticks: PositiveTicks, -- Item a pickaxe digs out of sand terrain; without it sand digs as stone. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item dug_sand: (ItemId)?, -- Encounters of the raids, the generator's sites and the wilds. encounters: Encounters, -- Fishing skill levels; absent keeps every angler at level 1. fishing: (FishingRules)?, -- Structure of the village hearth. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure hearth: StructureId, -- Accessible hotbar slots; cannot exceed inventory capacity. Range: 1…2147483647; Unit: count hotbar_slots: PositiveCount, -- Notice to a player put out at the door of a house that fell, was taken down or vanished. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text house_destroyed_notice: TextKey, -- Whole hunger units consumed over one simulated day. Range: 0…2147483647; Unit: count hunger_per_day: Count, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Positive maximum number of inventory slots. Range: 1…2147483647; Unit: count inventory_slots: PositiveCount, -- Discriminant. kind: "ruleset", -- Maximum actor population admitted by this ruleset. Range: 1…2147483647; Unit: count max_actors: PositiveCount, -- Maximum distance for collecting ground items. Range: 1…2147483647; Unit: mm pickup_radius_mm: PositiveDistance, -- Levels, skill points and mana of the players; absent keeps every player at level 1 without mana. progression: (Progression)?, -- Tags of the quick-use keys in key order; a key uses the first owned item carrying its tag. Items: 0…8; Unique entries quick_use: {TagId}, -- Positive delay before a dead player may respawn. Range: 1…2147483647; Unit: tick respawn_delay_ticks: PositiveTicks, -- Positive health assigned when a player respawns. Range: 1…2147483647; Unit: hp respawn_health: PositiveHitPoints, -- Items a building's sign costs. Items: 0…16; Unique entries sign_inputs: {ItemStack}, -- Structure that keeps the stock of a fallen or dismantled house. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure stash: StructureId, -- Village animals of a new world. Items: 0…256 village_animals: {AnimalPlacement}, -- Structure of a village building of the world base without a structure of its own model. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure village_building: StructureId, -- Filled chests placed once in every world, relative to the hearth. Items: 1…16 village_chests: ({ChestPlacement})?, -- Character of the villagers the world generator places. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character villager_character: CharacterId, -- Inventory and quick slots of a new villager. villager_loadout: Loadout, -- The village's residents, spawned in the start map's settlement. Items: 0…64; Unique entries villagers: {NpcId} } | { -- Character definition supplying body, stats and movement. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character character: CharacterId, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "player_profile", -- Inventory, quick slots and held item of a new player's actor. loadout: Loadout, -- Recipes unlocked for a newly created player. Items: 0…4096; Unique entries starting_recipes: {RecipeId} } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "game", -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Profile used when creating a persistent player. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: player_profile new_player: PlayerProfileId, -- Presentation profile supplying the game's interface audio. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: presentation_profile presentation: PresentationProfileId, -- Authoritative gameplay limits selected by this game. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: ruleset ruleset: RulesetId, -- Map instantiated for the start of this game. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: map start_map: MapId } | { -- Mixer bus; every variant plays on it. bus: AudioBus, -- Least time between two plays. Range: 0…2147483647; Unit: ms cooldown_ms: Milliseconds, -- Loudest volume of the cue, in thousandths. Range: 0…1000; Unit: permille gain_permille: Permille, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "audio_cue", -- Plays as a loop (ambience, music) instead of once. looped: boolean, -- Distance a world sound is heard at; it fades out towards it. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance, -- Recordings; cues sharing their first recording share the cooldown. Items: 1…16 variants: {AudioVariant} } | { -- Sounds of creatures that name none of their own (idle stays quiet). creature_sounds: CreatureSounds, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "presentation_profile", -- The soundtrack. music: Soundtrack, -- Cues of the engine's sound moments, each moment at most once. Items: 0…1024 sounds: {SoundBinding} } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "tag", -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey } | { -- General mechanic the tool drives; never chosen by its wielder. action: ToolAction, -- Ranged: item one shot takes from the wielder's inventory; without one in stock the tool does not shoot. Absent: shots need no ammunition. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item ammo: (ItemId)?, -- Melee: cosine of half the swept arc in thousandths; 1000 strikes only straight ahead. Range: 0…1000; Unit: permille arc_permille: Permille, -- Blows of the rhythm in order; empty means the tool never strikes a body. Items: 0…16 combo: {ToolBlow}, -- Damage type of every blow and shot of this tool. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: damage_type damage_type: DamageTypeId, -- Status a hit of this tool applies to its target. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status hit_status: (StatusId)?, -- Melee: bodies this close edge to edge are struck whatever the facing. Range: 0…2147483647; Unit: mm hug_mm: Distance, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "tool", -- Upward throw of a blow. Range: 0…2147483647; Unit: mm/tick lift_mm_per_tick: Count, -- Ranged: projectile the tool fires; required exactly for ranged tools. projectile: (ProjectileKind)?, -- Melee: edge-to-edge reach of a blow. Ranged: range of a shot. Work tools: reach of a stroke. Range: 0…2147483647; Unit: mm reach_mm: Distance, -- Recovery after an AI-controlled wielder's blow or shot. Range: 1…2147483647; Unit: tick recover_ticks: PositiveTicks, -- Ranged: delay from a human's attack to the projectile leaving. Range: 0…2147483647; Unit: tick release_ticks: DurationTicks, -- Damage one blow deals to a building or the hearth. Range: 0…2147483647; Unit: hp siege_damage: Count, -- Stamina one blow or shot costs its wielder, scaled by the power of the blow (a charged one costs more, a jab less); a wielder out of breath does not strike. Absent: blows cost nothing. Range: 1…2147483647; Unit: count stamina: (PositiveCount)?, -- Melee: most bodies one blow strikes, from one to three. Range: 1…2147483647; Unit: count targets: PositiveCount, -- Telegraph before an AI-controlled wielder's blow or shot. Range: 1…2147483647; Unit: tick windup_ticks: PositiveTicks } | { -- Rig attachment point carrying the light. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ attachment: Name, -- Red, green and blue channels in that order. Items: 3…3 color_rgb: {ColorChannel}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Brightness in thousandths of the standard light. Range: 0…1000; Unit: permille intensity_permille: Permille, -- Discriminant. kind: "light", -- Reach of the light. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "damage_type", -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Unique definition tags used for filtering and classification. Items: 0…4096; Unique entries tags: {TagId} } | { -- Damage per tick while active. Range: 0…2147483647; Unit: hp damage_per_tick: Count, -- Damage type of the periodic damage; present exactly when it is nonzero. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: damage_type damage_type: (DamageTypeId)?, -- Duration of one application. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "status", -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Movement speed while active, in thousandths of normal speed. Range: 0…1000; Unit: permille speed_permille: Permille, -- What a repeated application of an active status does. stacking: StatusStacking } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Whether every player may use the recipe without an unlock. initially_available: boolean, -- Items debited exactly once, indexed by unique item definitions. Items: 1…16; Unique entries inputs: {ItemStack}, -- Discriminant. kind: "recipe", -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Maximum distance to the station or repaired structure. Range: 1…2147483647; Unit: mm reach_mm: PositiveDistance, -- Exactly one craft, build or repair result. result: RecipeResult, -- Tag a nearby station must carry; absent recipes need no station. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: tag station: (TagId)? } | { -- What the structure does besides standing: defend, let one sleep or sit. ["function"]: (StructureFunction)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Item the structure is built from and dismantled into; absent for village buildings. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: (ItemId)?, -- Discriminant. kind: "structure", -- Maximum hit points and upper healing cap. Range: 1…2147483647; Unit: hp max_health: PositiveHitPoints, -- Engine prefab kind supplying geometry, placement and interior until native prefabs replace it. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ model: Name, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Localization key of the interaction prompt shown next to it. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text prompt: (TextKey)?, -- Repair recipe whose result names this structure. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: recipe repair_recipe: (RecipeId)? } | { -- Every entry drops a count between min and max from the host's deterministic random stream. Items: 1…64; Unique entries entries: {LootEntry}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "loot" } | { -- Axe strokes that cut the plant down. Range: 1…2147483647; Unit: count hits: PositiveCount, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "flora", -- Items the cut plant drops on the ground. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: loot loot: LootId, -- Foliage prototype `flora:` of the map's world library drawn while ripe or without produce. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ model: Name, -- Localized plant label. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Fruit or berries that hands shake or pick and axe strokes knock down; absent plants bear nothing. produce: (FloraProduce)?, -- Smallest and largest uniform size of a placed plant in thousandths. Items: 2…2; Unit: permille scale_permille: {PositiveCount}, -- Upright trunk that blocks movement, measured from the plant's cell centre; absent plants are walked through. trunk: (CollisionShape)? } | { -- A guard acquires a player this close. Range: 1…2147483647; Unit: mm aggro_mm: PositiveDistance, -- Allies within this distance join the fight when it spots a player or is struck. Range: 1…2147483647; Unit: mm alarm_mm: (PositiveDistance)?, -- Behavior graph the engine runs for it instead of the standard enemy tactic. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: behavior behavior: (BehaviorId)?, -- Marks it as a boss: named on the world map while it lives, with a name plate over its head. boss: (BossMark)?, -- Health of a camp guard of this kind before party scaling. Range: 1…2147483647; Unit: hp camp_health: PositiveHitPoints, -- Character definition supplying body, stats and movement. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character character: CharacterId, -- A guard keeps chasing a player this close. Range: 1…2147483647; Unit: mm chase_mm: PositiveDistance, -- Side it fights on: only enemies of the same faction answer its alarm. Absent: its own kind only. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ faction: (ContentId)?, -- Fight piece its pursuit calls for. fight_music: FightMusic, -- Flight from the fight when hurt badly, with recovery and return. flee: (EnemyFlight)?, -- Share of frontal blows the guard blocks, in thousandths. Range: 0…1000; Unit: permille guard_permille: Permille, -- Added block share per blow of the striker's current series (blows in quick succession), in thousandths. Range: 0…1000; Unit: permille guard_series_permille: Permille, -- How long a raised guard holds; it blocks every frontal blow meanwhile. Range: 1…2147483647; Unit: tick guard_ticks: PositiveTicks, -- Item it uses from its own inventory when hurt. heal: (HealthUse)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "enemy", -- A guard turns home beyond this distance from its post. Range: 1…2147483647; Unit: mm leash_mm: PositiveDistance, -- Corpse lifetime; population rules decide any new spawn. lifecycle: TransientLifecycle, -- Inventory and held weapon; dropped at death except natural weapons. loadout: Loadout, -- Additional items dropped at death. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: loot loot: (LootId)?, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- How a guard's leash holds in a fight and how it returns home: a guard in a fight chases further, one that turns back escapes unhurt and heals at home. Absent: the plain leash. pursuit: (EnemyPursuit)?, -- What it does when a shot or blow from afar strikes it: roll aside or charge the shooter. ranged_reaction: (RangedReaction)?, -- Whether it dodge-rolls away from a wielder about to strike. rolls: boolean, -- Its wind-up, pain, death and idle sounds. sounds: CreatureSounds, -- Stamina it regains per second (its character's maximum stamina caps it; attacks cost the stamina of their tool). Range: 0…2147483647; Unit: count stamina_per_second: Count, -- Whether a hit leaves its wind-up unbroken. steady: boolean, -- Experience every player who helped defeat it gains: its killer and the players within 40 m. Range: 1…2147483647; Unit: count xp: (PositiveCount)? } | { -- Idle action clips in repertoire order; the first is its rest pose. Items: 1…16; Unique entries actions: {Name}, -- Character definition supplying body, stats and movement. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character character: CharacterId, -- Whether it hunts a wielder who struck it twice instead of fleeing. hunts: boolean, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "animal", -- Corpse lifetime; population rules decide any new spawn. lifecycle: TransientLifecycle, -- Inventory and held weapon; dropped at death except natural weapons. loadout: Loadout, -- Additional items dropped at death. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: loot loot: (LootId)?, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Whether village animals of this kind live in the pen. penned: boolean, -- Its call and petting sounds. sounds: AnimalSounds, -- Whether players may pet it and it belongs to the village side. tame: boolean } | { -- How fast and how often it darts on the line. Range: 0…1000; Unit: permille agility_permille: Permille, -- Body colour: red, green and blue channels in that order. Items: 3…3 color_rgb: {ColorChannel}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Item a catch yields (also the resource_harvested item). Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "fish", -- Drawn body length. Range: 1…2147483647; Unit: mm size_mm: PositiveDistance, -- How hard it pulls the catch back while it is off the reel's zone. Range: 0…1000; Unit: permille strength_permille: Permille, -- Waters the species lives in. Items: 1…3; Unique entries waters: {WaterKind}, -- Share among the species of the same water. Range: 1…2147483647; Unit: count weight: PositiveCount } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "encounter", -- Items the cleared site yields when torn down. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: loot loot: (LootId)?, -- Ordered member rules; each spawn takes the first rule it matches and the last rule matches every spawn. Items: 1…32 members: {EncounterMember}, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Health of the encounter's site, torn down by blows once cleared. Range: 1…2147483647; Unit: hp site_health: PositiveHitPoints, -- Distance from the site centre at which blows reach it. Range: 1…2147483647; Unit: mm site_reach_mm: PositiveDistance, -- A player this close wakes the encounter. Range: 1…2147483647; Unit: mm trigger_radius_mm: PositiveDistance, -- Night waves: size, grouping, strength and spawn ring; required for the ruleset's raid. waves: (WaveRules)? } | { -- The binding of this package (event timer_fired, owner_from timer_owner) that receives it. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: binding binding: BindingId, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "timer", -- Kind of owner the timer is set for. owner_scope: OwnerScope } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- State the graph starts in. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ initial_state: Name, -- Discriminant. kind: "behavior", -- States with unique IDs. Items: 1…64; Unique entries states: {BehaviorState} } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "schedule", -- Maps the schedule applies to. Items: 1…64; Unique entries maps: {MapId}, -- Minute of the day. Range: 0…1439; Unit: minute minute: DayMinute } | { -- Greetings by quest state, first match wins; none: the initial node. Items: 0…64 entries: {DialogueEntry}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Node shown first. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ initial_node: Name, -- Discriminant. kind: "dialogue", -- Nodes with unique IDs. Items: 1…256; Unique entries nodes: {DialogueNode}, -- NPC definition the dialogue belongs to. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: npc npc: NpcId } | { -- Presentation script evaluated per frame of a viewer's cutscene (`VisualFrame -> VisualResult`); the timeline stands in wherever it cannot run. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: script camera_script: (ScriptId)?, -- NPCs that must be present, by unique role. Items: 0…16; Unique entries cast: {CastMember}, -- Host duration of the cutscene. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "cutscene", -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Places its staging uses. Items: 0…64; Unique entries places: {ScenePlace}, -- Whether the player may skip it. skip: CutsceneSkip, -- Staging of the cast and camera shots, played with the timeline. Items: 0…256 staging: {SceneStep}, -- Camera, subtitle and fade steps; camera spans never overlap. The complete fallback of a camera script. Items: 0…256 timeline: {VisualStep} } | { -- Engine clip name of the V75 rig, lowercase with underscores (`celebrate`, `talk_explain`). Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ clip: Name, -- Length of one playback. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "animation", -- Whether the clip repeats while it shows. looping: boolean } | { -- Lasting bonuses of the learned node; equal stats add up. Items: 0…4 bonuses: {SkillBonus}, -- Branch of the tree the node belongs to. branch: SkillBranch, -- Column of the node in its row, from 0 to 2. Range: 0…2147483647; Unit: count column: Count, -- Skill points learning the node costs. Range: 1…2147483647; Unit: count cost: PositiveCount, -- Localization key of the tooltip text. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text description: TextKey, -- Icon of the node. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:texture icon: (TextureAssetId)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "skill", -- Player level the node needs. Range: 1…2147483647; Unit: count level: PositiveCount, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Nodes a player must have learned first. Items: 0…4; Unique entries requires: {SkillId}, -- Spell item the node teaches: granted once when it is learned. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item spell: (ItemId)?, -- Row of the node in its branch, from 0 at the root; prerequisites lie in lower rows. Range: 0…2147483647; Unit: count tier: Count } | { -- Area it bursts into where it ends, struck body or ground. burst: (ProjectileBurst)?, -- Damage type of its hit and its burst. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: damage_type damage_type: DamageTypeId, -- Status its hit applies to the struck body for the status's duration. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status hit_status: (StatusId)?, -- Whether it follows the body the caster's aim chose. homing: boolean, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Look of its end (the burst or the hit). Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: fx impact: (FxId)?, -- Discriminant. kind: "projectile", -- Look of the body in flight. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: fx look: FxId, -- Radius a body must come within to be struck. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance, -- Distance it flies before it ends. Range: 1…2147483647; Unit: mm range_mm: PositiveDistance, -- Flight speed. Range: 1…2147483647; Unit: mm/tick speed_mm_per_tick: MovementSpeed } | { -- Core color, red, green and blue. Items: 3…3 color_rgb: {ColorChannel}, -- How long it shows; an orb shows while its body flies. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Glow and particle color, red, green and blue. Items: 3…3 glow_rgb: {ColorChannel}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "fx", -- Point light it casts while it shows. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: light light: (LightId)?, -- Particles it throws. Range: 0…2147483647; Unit: count particles: Count, -- Engine primitive drawing the effect. primitive: FxPrimitive, -- Size: the radius of an orb, the final radius of a burst, ring or nova. Range: 1…2147483647; Unit: mm size_mm: PositiveDistance, -- Sound it plays where it appears. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue sound: (AudioCueId)? } | { -- Share of experience granted on the track that the character level gains too. Range: 0…1000; Unit: permille character_permille: Permille, -- Icon shown with the track. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:texture icon: (TextureAssetId)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Discriminant. kind: "progress_track", -- Player variable (int) the engine keeps at the track's level. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: variable level_variable: (VariableId)?, -- Experience each next level of the track needs, in order (not falling). Items: 1…99 level_xp: {PositiveCount}, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey } -- Closed v1 target-kind vocabulary; definition loading still checks the activated subset. export type DefinitionKind = "game" | "tag" | "binding" | "dialogue" | "item" | "quest" | "recipe" | "ruleset" | "timer" | "variable" | "animal" | "fish" | "behavior" | "character" | "character_options" | "damage_type" | "encounter" | "enemy" | "equipment" | "skill" | "progress_track" | "projectile" | "light" | "loot" | "movement" | "npc" | "player_profile" | "routine" | "status" | "tool" | "biome" | "climate" | "flora" | "map" | "material" | "prefab" | "schedule" | "season" | "structure" | "weather" | "ambient" | "animation" | "audio_cue" | "cutscene" | "fx" | "music" | "palette" | "presentation_profile" | "rig" | "voice" -- How a line is spoken; it shapes the mumble and the subtitle. export type Delivery = "normal" | "whisper" | "shout" -- Direct package dependency pinned to one exact semantic version. export type Dependency = { -- Namespace of this package or an exact dependency. Length: 1…32; Pattern: ^[a-z][a-z0-9_]{0,31}$ package: PackageId, -- Exact supported format or package version; no implicit upgrades. Length: 1…4096; Pattern: ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-(0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*)(\.(0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*))*)?$ version: PackageVersion } -- One choice of a dialogue node. export type DialogueChoice = { -- Local choice ID, unique in its node. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ id: Name, -- Node shown next; absent ends the session. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ next: (Name)?, -- Choice text. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text text: TextKey, -- Conditions the choice needs; all must hold. Items: 0…16 when: {QuestCondition} } -- A player chose an offered choice of its active dialogue session. export type DialogueChoiceEvent = { -- The player's body (it holds the inventory a choice may pay from). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Chosen choice. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ choice: Name, -- Dialogue of the session. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: dialogue dialogue: DialogueId, -- Discriminant. kind: "dialogue_choice", -- Node the choice belongs to. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ node: Name, -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Session revision the choice answered. Range: 0…2147483647; Unit: count revision: Count } -- A conversation graph with one NPC; choices only produce dialogue_choice events. export type DialogueDefinition = { -- Greetings by quest state, first match wins; none: the initial node. Items: 0…64 entries: {DialogueEntry}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Node shown first. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ initial_node: Name, -- Nodes with unique IDs. Items: 1…256; Unique entries nodes: {DialogueNode}, -- NPC definition the dialogue belongs to. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: npc npc: NpcId } -- A greeting: the first entry whose conditions all hold opens the dialogue. export type DialogueEntry = { -- Node it opens on. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ node: Name, -- Conditions; all must hold. Items: 1…16 when: {QuestCondition} } -- A player's dialogue session ended. export type DialogueFinishedEvent = { -- Dialogue of the session. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: dialogue dialogue: DialogueId, -- Host-assigned identity of this dialogue or cutscene session. Length: 1…256; Pattern: ^[\s\S]+$ instance: OpaqueRef, -- Discriminant. kind: "dialogue_finished", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } -- Reference to dialogue content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: dialogue export type DialogueId = string -- One line of a dialogue and the choices it offers; a node without choices ends the session. export type DialogueNode = { -- Clip the NPC shows while speaking. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: animation animation: (AnimationId)?, -- Offered choices with unique IDs. Items: 0…16; Unique entries choices: {DialogueChoice}, -- Mood of the speaker. emotion: Emotion, -- Local node ID, unique in the dialogue. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ id: Name, -- Quest whose card shows beside the line. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: quest quest: (QuestId)?, -- Spoken line. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text text: TextKey } -- A dialogue session of a player with an NPC started. export type DialogueStartedEvent = { -- Dialogue of the session. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: dialogue dialogue: DialogueId, -- Host-assigned identity of this dialogue or cutscene session. Length: 1…256; Pattern: ^[\s\S]+$ instance: OpaqueRef, -- Discriminant. kind: "dialogue_started", -- NPC the player talks to. Length: 1…256; Pattern: ^[\s\S]+$ npc: ActorRef, -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } -- Human-readable text; never an entity or content reference. Length: 1…4096; Pattern: ^[\s\S]*$ export type DisplayText = string -- Nonnegative spatial extent or reach. Range: 0…2147483647; Unit: mm export type Distance = number -- Optional delay; zero disables a repeating respawn. Range: 0…2147483647; Unit: tick export type DurationTicks = number -- Interpolation of a camera span. export type Easing = "linear" | "smooth" -- An explicit state change checked before an atomic handler commit. export type Effect = { -- Number of units; the enclosing operation defines its permitted owner. Range: 1…2147483647; Unit: count count: PositiveCount, -- Actor whose inventory changes: the event actor or the invocation owner. Length: 1…256; Pattern: ^[\s\S]+$ holder: ActorRef, -- Inventory item definition to count, consume or match. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "consume_item" } | { -- Number of units; the enclosing operation defines its permitted owner. Range: 1…2147483647; Unit: count count: PositiveCount, -- Actor whose inventory changes: the event actor or the invocation owner. Length: 1…256; Pattern: ^[\s\S]+$ holder: ActorRef, -- Inventory item definition to count, consume or match. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "grant_item" } | { -- Positive health restored, in whole hit points. Range: 1…2147483647; Unit: hp amount: PositiveHitPoints, -- Discriminant. kind: "heal", -- Actor instance selected by the item-use target contract. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Required source stage before applying this transition. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ from: Name, -- Discriminant. kind: "transition_quest", -- Player instance whose state or inventory the invocation may access. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Quest definition whose stage and revision are selected. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: quest quest: QuestId, -- Destination stage after the transition commits. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ to: Name } | { -- Discriminant. kind: "set_variable", -- Typed payload checked against its owning declaration. value: StateValue, -- Variable declaration that determines type, scope and virtual initial state. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: variable variable: VariableId } | { -- Positive whole units restored. Range: 1…2147483647; Unit: count amount: PositiveCount, -- Discriminant. kind: "restore_need", -- Body resource refilled. need: Need, -- Actor instance selected by the item-use target contract. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Whether the light is on after the commit. enabled: boolean, -- Discriminant. kind: "set_light", -- Light of the currently equipped item. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: light light: LightId, -- Actor instance selected by the item-use target contract. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Discriminant. kind: "teleport", -- Destination together with its map instance. position: Position, -- Actor instance selected by the item-use target contract. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Discriminant. kind: "notify", -- Player instance whose state or inventory the invocation may access. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Localized text key resolved by the receiving player's locale. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text text: TextKey } | { -- Damage before resistances. Range: 1…2147483647; Unit: hp amount: PositiveHitPoints, -- Damage type selecting resistances. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: damage_type damage_type: DamageTypeId, -- Discriminant. kind: "damage", -- Actor the effect applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Duration of this application. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Discriminant. kind: "apply_status", -- Applied status. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status status: StatusId, -- Actor the effect applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Discriminant. kind: "remove_status", -- Status to end. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status status: StatusId, -- Actor the effect applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Item with an equip record in the target's inventory. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "equip", -- Actor the effect applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Discriminant. kind: "unequip", -- Slot emptied. slot: EquipmentSlot, -- Actor the effect applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Units dropped. Range: 1…2147483647; Unit: count count: PositiveCount, -- Item spawned on the ground. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "drop_item", -- Destination together with its map instance. position: Position } | { -- Crafting actor. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Number of crafts. Range: 1…2147483647; Unit: count count: PositiveCount, -- Discriminant. kind: "craft", -- Craft recipe. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: recipe recipe: RecipeId } | { -- Definition the new actor instantiates. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: npc|enemy|animal definition: SpawnDefinitionId, -- Discriminant. kind: "spawn", -- Destination together with its map instance. position: Position, -- Key unique within this result; with the invocation it derives the actor reference. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ spawn_key: Name } | { -- Discriminant. kind: "despawn", -- Actor the effect applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Discriminant. kind: "move_to", -- Movement profile of the order. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: movement movement: MovementId, -- Destination together with its map instance. position: Position, -- Key echoed by movement_finished. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ request_key: Name, -- Actor the effect applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Duration of the override. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Discriminant. kind: "set_weather", -- Map whose weather is set. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Weather of the override. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: weather weather: WeatherId } | { -- Target day of the clock. Range: 0…2147483647; Unit: count day: Count, -- Discriminant. kind: "set_time", -- Target minute of that day. Range: 0…1439; Unit: minute minute: DayMinute } | { -- Dialogue whose npc matches the target. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: dialogue dialogue: DialogueId, -- Discriminant. kind: "start_dialogue", -- NPC the player talks to. Length: 1…256; Pattern: ^[\s\S]+$ npc: ActorRef, -- Player that talks. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } | { -- Cutscene to play. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: cutscene cutscene: CutsceneId, -- Discriminant. kind: "play_cutscene", -- Player the cutscene plays for. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } | { -- Clip compatible with the actor's character. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: animation animation: AnimationId, -- How long the clip shows. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Discriminant. kind: "play_animation", -- Actor the effect applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Audio cue to play. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue cue: AudioCueId, -- Discriminant. kind: "play_audio", -- Where the cue sounds. position: Position } | { -- Building actor. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Discriminant. kind: "build", -- Destination together with its map instance. position: Position, -- Build recipe. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: recipe recipe: RecipeId, -- Rotation of the structure. Range: 0…359999; Unit: mdeg yaw_mdeg: Millidegrees } | { -- Repairing actor. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Discriminant. kind: "repair", -- Repair recipe of the structure. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: recipe recipe: RecipeId, -- Damaged structure. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Discriminant. kind: "set_block", -- Engine block material, as item.place uses it. material: BlockMaterial, -- Cell of the block. position: BlockPos } | { -- Discriminant. kind: "remove_block", -- Cell of the block. position: BlockPos } | { -- Ticks until the timer fires. Range: 1…2147483647; Unit: tick delay_ticks: PositiveTicks, -- Discriminant. kind: "set_timer", -- Timer declared by this package. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: timer timer: TimerId } | { -- Discriminant. kind: "cancel_timer", -- Timer declared by this package. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: timer timer: TimerId } | { -- Discriminant. kind: "unlock_recipe", -- Player that learns the recipe. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Recipe unlocked. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: recipe recipe: RecipeId } | { -- Discriminant. kind: "set_routine", -- Routine with anchors on the NPC's map. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: routine routine: RoutineId, -- Actor the effect applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Behavior graph compatible with the actor. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: behavior behavior: BehaviorId, -- Discriminant. kind: "assign_behavior", -- Actor the effect applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Experience granted. Range: 1…2147483647; Unit: count amount: PositiveCount, -- Discriminant. kind: "grant_xp", -- Player that gains the experience. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Progress track it goes to; absent: the character level. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: progress_track track: (ProgressTrackId)? } | { -- Living actor the projectile leaves from: the event actor or the owner's own body. Length: 1…256; Pattern: ^[\s\S]+$ caster: ActorRef, -- Damage of its hit before resistances; its burst deals a share of it. Range: 1…2147483647; Unit: hp damage: PositiveHitPoints, -- Discriminant. kind: "launch_projectile", -- Projectile definition: flight, hit, burst and look. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: projectile projectile: ProjectileId } | { -- Living actor at the centre: the event actor or the owner's own body. Length: 1…256; Pattern: ^[\s\S]+$ caster: ActorRef, -- Damage to each struck body before resistances; zero only applies the status. Range: 0…2147483647; Unit: hp damage: HitPoints, -- Damage type selecting resistances. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: damage_type damage_type: DamageTypeId, -- Inner radius of a ring; zero for a circle. Range: 0…2147483647; Unit: mm inner_mm: Distance, -- Discriminant. kind: "area_effect", -- Look of the effect around the caster. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: fx look: (FxId)?, -- Outer radius. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance, -- Shape on the ground. shape: AreaShape, -- Status applied to each struck body for the status's duration. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status status: (StatusId)? } -- Names of the activated protocol operations. export type EffectKind = "consume_item" | "grant_item" | "heal" | "transition_quest" | "set_variable" | "restore_need" | "set_light" | "teleport" | "notify" | "damage" | "apply_status" | "remove_status" | "equip" | "unequip" | "drop_item" | "craft" | "spawn" | "despawn" | "move_to" | "set_weather" | "set_time" | "start_dialogue" | "play_cutscene" | "play_animation" | "play_audio" | "build" | "repair" | "set_block" | "remove_block" | "set_timer" | "cancel_timer" | "unlock_recipe" | "set_routine" | "assign_behavior" | "grant_xp" | "launch_projectile" | "area_effect" -- Mood of a speaking figure: its face, talking clip and voice. export type Emotion = "neutral" | "happy" | "sad" | "angry" | "surprised" | "love" | "sleepy" | "sly" | "nervous" -- Who an encounter spawns and how far it reaches: raids, camp garrisons and wildlife. export type EncounterDefinition = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Items the cleared site yields when torn down. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: loot loot: (LootId)?, -- Ordered member rules; each spawn takes the first rule it matches and the last rule matches every spawn. Items: 1…32 members: {EncounterMember}, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Health of the encounter's site, torn down by blows once cleared. Range: 1…2147483647; Unit: hp site_health: PositiveHitPoints, -- Distance from the site centre at which blows reach it. Range: 1…2147483647; Unit: mm site_reach_mm: PositiveDistance, -- A player this close wakes the encounter. Range: 1…2147483647; Unit: mm trigger_radius_mm: PositiveDistance, -- Night waves: size, grouping, strength and spawn ring; required for the ruleset's raid. waves: (WaveRules)? } -- Reference to encounter content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: encounter export type EncounterId = string -- One member rule: the actor spawned when the spawn's index, wave and distance match. export type EncounterMember = { -- Enemy or animal definition spawned by this rule. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: npc|enemy|animal actor: SpawnDefinitionId, -- The rule matches spawn rolls whose remainder by every equals offset. Range: 1…2147483647; Unit: count every: PositiveCount, -- First raid wave the rule applies to; zero applies always. Range: 0…2147483647; Unit: count from_wave: Count, -- Greatest distance of the spawn site from the hearth; zero means unlimited. Range: 0…2147483647; Unit: mm max_distance_mm: Distance, -- Least distance of the spawn site from the hearth. Range: 0…2147483647; Unit: mm min_distance_mm: Distance, -- Remainder of the spawn roll selected by this rule; below every. Range: 0…2147483647; Unit: count offset: Count, -- Which spawn of a group the rule may take. position: MemberPosition } -- Encounters the world generator's site categories and the night raids use. export type Encounters = { -- Garrison of raider camps. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: encounter camp: EncounterId, -- Garrison of forest dens. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: encounter den: EncounterId, -- Garrison of seeded nests. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: encounter nest: EncounterId, -- Night raid waves on the hearth. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: encounter raid: EncounterId, -- Wild animals around players. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: encounter wildlife: EncounterId, -- Prowlers of the woodland around players. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: encounter woodland: EncounterId } -- A hostile actor: its body, gear, loot and fighting tactic. export type EnemyDefinition = { -- A guard acquires a player this close. Range: 1…2147483647; Unit: mm aggro_mm: PositiveDistance, -- Allies within this distance join the fight when it spots a player or is struck. Range: 1…2147483647; Unit: mm alarm_mm: (PositiveDistance)?, -- Behavior graph the engine runs for it instead of the standard enemy tactic. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: behavior behavior: (BehaviorId)?, -- Marks it as a boss: named on the world map while it lives, with a name plate over its head. boss: (BossMark)?, -- Health of a camp guard of this kind before party scaling. Range: 1…2147483647; Unit: hp camp_health: PositiveHitPoints, -- Character definition supplying body, stats and movement. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character character: CharacterId, -- A guard keeps chasing a player this close. Range: 1…2147483647; Unit: mm chase_mm: PositiveDistance, -- Side it fights on: only enemies of the same faction answer its alarm. Absent: its own kind only. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ faction: (ContentId)?, -- Fight piece its pursuit calls for. fight_music: FightMusic, -- Flight from the fight when hurt badly, with recovery and return. flee: (EnemyFlight)?, -- Share of frontal blows the guard blocks, in thousandths. Range: 0…1000; Unit: permille guard_permille: Permille, -- Added block share per blow of the striker's current series (blows in quick succession), in thousandths. Range: 0…1000; Unit: permille guard_series_permille: Permille, -- How long a raised guard holds; it blocks every frontal blow meanwhile. Range: 1…2147483647; Unit: tick guard_ticks: PositiveTicks, -- Item it uses from its own inventory when hurt. heal: (HealthUse)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- A guard turns home beyond this distance from its post. Range: 1…2147483647; Unit: mm leash_mm: PositiveDistance, -- Corpse lifetime; population rules decide any new spawn. lifecycle: TransientLifecycle, -- Inventory and held weapon; dropped at death except natural weapons. loadout: Loadout, -- Additional items dropped at death. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: loot loot: (LootId)?, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- How a guard's leash holds in a fight and how it returns home: a guard in a fight chases further, one that turns back escapes unhurt and heals at home. Absent: the plain leash. pursuit: (EnemyPursuit)?, -- What it does when a shot or blow from afar strikes it: roll aside or charge the shooter. ranged_reaction: (RangedReaction)?, -- Whether it dodge-rolls away from a wielder about to strike. rolls: boolean, -- Its wind-up, pain, death and idle sounds. sounds: CreatureSounds, -- Stamina it regains per second (its character's maximum stamina caps it; attacks cost the stamina of their tool). Range: 0…2147483647; Unit: count stamina_per_second: Count, -- Whether a hit leaves its wind-up unbroken. steady: boolean, -- Experience every player who helped defeat it gains: its killer and the players within 40 m. Range: 1…2147483647; Unit: count xp: (PositiveCount)? } -- An enemy's flight: when a blow takes its health below a share it runs from its foe, recovers health on the way and returns to the fight. export type EnemyFlight = { -- How long it runs before it returns. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Health it recovers per second while it runs. Range: 0…2147483647; Unit: hp heal_per_second: Count, -- Health share a blow must take it below. Range: 0…1000; Unit: permille health_below_permille: Permille } -- A guard's leash in a fight: struck or with its foe in reach within the last fight ticks it chases up to the fight leash; once it turns back it cannot be hurt for a while and heals fully at its post. export type EnemyPursuit = { -- Leash from its post while it fights. Range: 1…2147483647; Unit: mm fight_leash_mm: PositiveDistance, -- How long a blow it took or a foe in its reach keeps it fighting. Range: 1…2147483647; Unit: tick fight_ticks: PositiveTicks, -- How long it cannot be hurt after it turns back home. Range: 1…2147483647; Unit: tick return_shield_ticks: PositiveTicks } -- The content of an equipment slot of an actor changed. export type EquipmentChangedEvent = { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Item now in the slot; absent when the slot is empty. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: (ItemId)?, -- Discriminant. kind: "equipment_changed", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Equipment slot that changed. slot: EquipmentSlot } -- Named body or hand slot available for equipment. export type EquipmentSlot = "hair" | "beard" | "torso" | "legs" | "feet" | "belt" | "gloves" | "head" | "neck" | "hand" | "offhand" -- Committed event payload delivered to an authority handler. export type Event = { -- Discriminant. kind: "world_started", -- Instantiated map in which this event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef } | { -- Activation generation of the package in this world, starting at 1. Range: 0…2147483647; Unit: count activation: Count, -- State version of the previous generation; present only for an update. Range: 0…2147483647; Unit: count from_state_version: (Count)?, -- Discriminant. kind: "package_activated", -- Activated package. Length: 1…32; Pattern: ^[a-z][a-z0-9_]{0,31}$ package: PackageId } | { -- Discriminant. kind: "player_created", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } | { -- Discriminant. kind: "player_joined", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } | { -- Discriminant. kind: "player_left", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } | { -- Acting actor (human- or AI-controlled) that used the item from its own inventory. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Inventory item definition to count, consume or match. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "item_used", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Actor instance selected by the item-use target contract. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Acting actor (human- or AI-controlled) that used the item from its own inventory. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Inventory item definition to count, consume or match. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "item_use_committed", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Actor instance selected by the item-use target contract. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Definition the target instantiates (an NPC, an animal, a structure). Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ definition: ContentId, -- Discriminant. kind: "interacted", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Actor or structure interacted with. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- The player's body (it holds the inventory a choice may pay from). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Chosen choice. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ choice: Name, -- Dialogue of the session. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: dialogue dialogue: DialogueId, -- Discriminant. kind: "dialogue_choice", -- Node the choice belongs to. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ node: Name, -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Session revision the choice answered. Range: 0…2147483647; Unit: count revision: Count } | { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Committed change of the count, never zero. Range: -9007199254740991…9007199254740991; Unit: integer delta: SignedInt, -- Item whose count changed. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "inventory_changed", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)? } | { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Item now in the slot; absent when the slot is empty. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: (ItemId)?, -- Discriminant. kind: "equipment_changed", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Equipment slot that changed. slot: EquipmentSlot } | { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Why the actor was spawned. cause: SpawnCause, -- Definition the actor instantiates, resolved when the event was created. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character|npc|enemy|animal|structure definition: ActorDefinitionId, -- Discriminant. kind: "actor_spawned" } | { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Definition the actor instantiates, resolved when the event was created. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character|npc|enemy|animal|structure definition: ActorDefinitionId, -- Actor whose damage caused the death; absent for environmental damage. Length: 1…256; Pattern: ^[\s\S]+$ killer: (ActorRef)?, -- Discriminant. kind: "actor_died", -- Player controlling the killer; absent for AI killers and environmental damage. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)? } | { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Definition the actor instantiates, resolved when the event was created. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character|npc|enemy|animal|structure definition: ActorDefinitionId, -- Discriminant. kind: "actor_despawned" } | { -- Health actually lost, after resistances. Range: 0…2147483647; Unit: hp amount: Count, -- Definition of the damaged actor. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character|npc|enemy|animal|structure definition: ActorDefinitionId, -- Discriminant. kind: "damage_applied", -- Confirmed origin of the damage; absent for environmental sources. Length: 1…256; Pattern: ^[\s\S]+$ source: (ActorRef)?, -- Actor the change applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Discriminant. kind: "zone_entered", -- Instantiated map in which this position or event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Player instance whose state or inventory the invocation may access. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Named map zone entered by the player. Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.zone zone: ZoneRef } | { -- Discriminant. kind: "zone_left", -- Instantiated map in which this event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Named map zone the player left. Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.zone zone: ZoneRef } | { -- Day of the clock, starting at 0. Range: 0…2147483647; Unit: count day: Count, -- Discriminant. kind: "time_reached", -- Instantiated map in which this event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Minute of the day that was reached. Range: 0…1439; Unit: minute minute: DayMinute, -- Schedule whose minute was reached. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: schedule schedule: ScheduleId } | { -- Weather after the change. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: weather current: WeatherId, -- Discriminant. kind: "weather_changed", -- Instantiated map in which this event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Weather before the change. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: weather previous: WeatherId } | { -- Stage after the transition. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ current: Name, -- Discriminant. kind: "quest_changed", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Stage before the transition. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ previous: Name, -- Quest that changed. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: quest quest: QuestId } | { -- Actor that built the structure. Length: 1…256; Pattern: ^[\s\S]+$ builder: ActorRef, -- Structure definition that was built. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure definition: StructureId, -- Discriminant. kind: "structure_built", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- The new structure. Length: 1…256; Pattern: ^[\s\S]+$ structure: ActorRef } | { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Number of crafts committed. Range: 1…2147483647; Unit: count count: PositiveCount, -- Discriminant. kind: "crafted", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Crafted recipe. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: recipe recipe: RecipeId } | { -- Discriminant. kind: "timer_fired", -- Owner the timer was set for. owner: OwnerRef, -- Timer that fired. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: timer timer: TimerId } | { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Discriminant. kind: "movement_finished", -- Key of the move_to effect that started the order. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ request_key: Name, -- How the order ended. result: MovementResult } | { -- Cutscene that ended. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: cutscene cutscene: CutsceneId, -- Host-assigned identity of this dialogue or cutscene session. Length: 1…256; Pattern: ^[\s\S]+$ instance: OpaqueRef, -- Discriminant. kind: "cutscene_finished", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- How the cutscene ended. result: CutsceneResult } | { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Units harvested. Range: 1…2147483647; Unit: count count: PositiveCount, -- Harvested item. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "resource_harvested", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Where the resource was harvested. position: Position } | { -- Health actually lost. Range: 0…2147483647; Unit: hp amount: Count, -- Structure definition of the target. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure definition: StructureId, -- Discriminant. kind: "structure_damaged", -- Confirmed origin of the damage; absent for environmental sources. Length: 1…256; Pattern: ^[\s\S]+$ source: (ActorRef)?, -- Damaged structure. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Structure definition of the target. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure definition: StructureId, -- Discriminant. kind: "structure_destroyed", -- Confirmed origin of the damage; absent for environmental sources. Length: 1…256; Pattern: ^[\s\S]+$ source: (ActorRef)?, -- Destroyed structure. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Health restored. Range: 0…2147483647; Unit: hp amount: Count, -- Discriminant. kind: "structure_repaired", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Repaired structure. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Discriminant. kind: "status_applied", -- Confirmed origin of the damage; absent for environmental sources. Length: 1…256; Pattern: ^[\s\S]+$ source: (ActorRef)?, -- Applied status. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status status: StatusId, -- Actor the change applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Discriminant. kind: "status_expired", -- Status that ended. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status status: StatusId, -- Actor the change applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } | { -- Dialogue of the session. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: dialogue dialogue: DialogueId, -- Host-assigned identity of this dialogue or cutscene session. Length: 1…256; Pattern: ^[\s\S]+$ instance: OpaqueRef, -- Discriminant. kind: "dialogue_started", -- NPC the player talks to. Length: 1…256; Pattern: ^[\s\S]+$ npc: ActorRef, -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } | { -- Dialogue of the session. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: dialogue dialogue: DialogueId, -- Host-assigned identity of this dialogue or cutscene session. Length: 1…256; Pattern: ^[\s\S]+$ instance: OpaqueRef, -- Discriminant. kind: "dialogue_finished", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } | { -- Started cutscene. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: cutscene cutscene: CutsceneId, -- Host-assigned identity of this dialogue or cutscene session. Length: 1…256; Pattern: ^[\s\S]+$ instance: OpaqueRef, -- Discriminant. kind: "cutscene_started", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } | { -- The player's actor. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Discriminant. kind: "player_defeated", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Confirmed origin of the damage; absent for environmental sources. Length: 1…256; Pattern: ^[\s\S]+$ source: (ActorRef)? } | { -- The player's actor. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Discriminant. kind: "player_revived", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } | { -- Season after the change. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: season current: SeasonId, -- Discriminant. kind: "season_changed", -- Instantiated map in which this event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Season before the change. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: season previous: SeasonId } -- Optional exact definition filters for supported binding events. export type EventFilter = { -- Choice of dialogue_choice. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ choice: (Name)?, -- Cutscene of a cutscene event. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: cutscene cutscene: (CutsceneId)?, -- Definition of the actor or structure an actor or structure event is about. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character|npc|enemy|animal|structure definition: (ActorDefinitionId)?, -- Dialogue of a dialogue event. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: dialogue dialogue: (DialogueId)?, -- Item of an item, inventory, equipment or harvest event. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: (ItemId)?, -- Node of dialogue_choice. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ node: (Name)?, -- Package of package_activated. Length: 1…32; Pattern: ^[a-z][a-z0-9_]{0,31}$ package: (PackageId)?, -- Quest of quest_changed. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: quest quest: (QuestId)?, -- Recipe of crafted. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: recipe recipe: (RecipeId)?, -- Schedule of time_reached. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: schedule schedule: (ScheduleId)?, -- Status of a status event. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status status: (StatusId)?, -- Timer of timer_fired. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: timer timer: (TimerId)?, -- Zone of a zone event. Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.zone zone: (ZoneRef)? } -- Names of the activated protocol operations. export type EventKind = "world_started" | "package_activated" | "player_created" | "player_joined" | "player_left" | "item_used" | "item_use_committed" | "interacted" | "dialogue_choice" | "inventory_changed" | "equipment_changed" | "actor_spawned" | "actor_died" | "actor_despawned" | "damage_applied" | "zone_entered" | "zone_left" | "time_reached" | "weather_changed" | "quest_changed" | "structure_built" | "crafted" | "timer_fired" | "movement_finished" | "cutscene_finished" | "resource_harvested" | "structure_damaged" | "structure_destroyed" | "structure_repaired" | "status_applied" | "status_expired" | "dialogue_started" | "dialogue_finished" | "cutscene_started" | "player_defeated" | "player_revived" | "season_changed" -- Distinguishes binding responses from item-use responses. export type ExpectedResult = HandlerResult | UseResult -- Read-only variable visibility granted to dependent packages. export type Exports = { -- Owned variables that dependent packages may include in snapshots. Items: 0…4096; Unique entries readonly_variables: {VariableId} } -- Nonempty bit mask of occupied 125 mm subcells. Range: 1…255; Unit: count export type FaceMask = number -- Capabilities required by a package and its typed references. export type Feature = "foundation" | "authority" | "actors" | "world" | "presentation" -- Which fight piece an enemy's pursuit calls for. export type FightMusic = "danger" | "wildlife" -- A fish species: the waters it swims in, how it fights on the line and the item a catch yields. export type FishDefinition = { -- How fast and how often it darts on the line. Range: 0…1000; Unit: permille agility_permille: Permille, -- Body colour: red, green and blue channels in that order. Items: 3…3 color_rgb: {ColorChannel}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Item a catch yields (also the resource_harvested item). Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Drawn body length. Range: 1…2147483647; Unit: mm size_mm: PositiveDistance, -- How hard it pulls the catch back while it is off the reel's zone. Range: 0…1000; Unit: permille strength_permille: Permille, -- Waters the species lives in. Items: 1…3; Unique entries waters: {WaterKind}, -- Share among the species of the same water. Range: 1…2147483647; Unit: count weight: PositiveCount } -- Fishing skill: the player variable counting practice and the practice each next level needs. export type FishingRules = { -- Practice needed for level 2, 3, …, increasing; the last entry is the top level. Items: 1…32; Unique entries levels: {PositiveCount}, -- Player-scoped int variable the package's handlers raise; the engine only reads it. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: variable skill: VariableId } -- Isolated authoring test selecting a handler, frozen snapshot and exact expected response. export type Fixture = { -- Event kind or typed event payload selected by the handler declaration. event: Event, -- Expected typed handler response or classified script fault. expect: FixtureExpect, -- Definition that supplies the script, parameters and snapshot declaration. handler: FixtureHandler, -- Local fixture name, unique across the package test files. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ id: Name, -- Resolved state owner for this invocation or snapshot entry. owner: OwnerRef, -- Frozen values supplied to this isolated handler invocation. snapshot: FixtureSnapshot } -- Exact handler response or classified fault expected by a fixture. export type FixtureExpect = { -- Discriminant. kind: "result", -- Exact expected response from the selected handler family. result: ExpectedResult } | { -- Expected stable script fault code. code: FixtureFault, -- Discriminant. kind: "error" } -- Script faults that an isolated authoring fixture may expect. export type FixtureFault = "invalid_type" | "out_of_range" | "script_error" | "budget_exceeded" -- Definition supplying the fixture's handler and exact parameters. export type FixtureHandler = { -- Inventory item definition to count, consume or match. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "item_use" } | { -- Binding definition supplying the fixture handler. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: binding binding: BindingId, -- Discriminant. kind: "binding" } -- Player identity in saved quest fixture data; preserves the authoring format's wider identity limit. Length: 1…4096; Pattern: ^[\s\S]*$ export type FixturePlayerRef = string -- Frozen data supplied to an isolated pure handler test. export type FixtureSnapshot = { -- Actor records visible within the fixture snapshot. Items: 0…256; Unique entries actors: {ActorView}, -- Frozen simulation timestamp, calendar day and current season. clock: ClockView, -- Player-owned quest progress supplied by this fixture. Items: 0…4096; Unique entries quests: {QuestSnapshot}, -- Variable values explicitly admitted to the snapshot. Items: 0…4096; Unique entries variables: {VariableSnapshot} } -- Constant terrain elevation and surface material. export type FlatTerrain = { -- Vertical extent or terrain surface height in millimeters. Range: -2147483648…2147483647; Unit: mm height_mm: Millimeters, -- Material definition used by these terrain or prefab cells. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: material material: MaterialId } -- A plant and its relative selection weight. export type FloraChoice = { -- Flora definition placed at the candidate. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: flora flora: FloraId, -- Positive relative selection weight; need not be normalized. Range: 1…2147483647; Unit: count weight: PositiveCount } -- A harvestable plant of generated maps: a bush or fruit tree that axes cut and hands pick. export type FloraDefinition = { -- Axe strokes that cut the plant down. Range: 1…2147483647; Unit: count hits: PositiveCount, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Items the cut plant drops on the ground. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: loot loot: LootId, -- Foliage prototype `flora:` of the map's world library drawn while ripe or without produce. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ model: Name, -- Localized plant label. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Fruit or berries that hands shake or pick and axe strokes knock down; absent plants bear nothing. produce: (FloraProduce)?, -- Smallest and largest uniform size of a placed plant in thousandths. Items: 2…2; Unit: permille scale_permille: {PositiveCount}, -- Upright trunk that blocks movement, measured from the plant's cell centre; absent plants are walked through. trunk: (CollisionShape)? } -- Reference to flora content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: flora export type FloraId = string -- Weighted plants with a density, a minimum spacing and a hard count limit; one candidate per spacing cell. export type FloraLayer = { -- Plants drawn by relative weight for each accepted candidate. Items: 1…64 choices: {FloraChoice}, -- Expected plants per square kilometre before free ground, spacing and the count limit. Range: 0…2147483647; Unit: count density_per_km2: Count, -- Hard upper limit of plants of this layer; candidates in seeded order win. Range: 0…2147483647; Unit: count max_count: Count, -- Minimum horizontal distance between two plants of the layer; also the candidate grid size. Range: 1…2147483647; Unit: mm min_distance_mm: PositiveDistance, -- Stable local salt separating this layer's deterministic seed stream. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ seed_salt: Name } -- Produce of a plant: what falls when it is harvested, the bare look and the regrowth time. export type FloraProduce = { -- Foliage prototype `flora:` of the map's world library drawn until the produce has grown back. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ bare_model: Name, -- Items that fall to the ground when the ripe plant is harvested. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: loot loot: LootId, -- Simulation ticks until harvested produce is ripe again. Range: 1…2147483647; Unit: tick regrow_ticks: PositiveTicks } -- Supported version of this wire format. Range: 1…1; Unit: count export type FormatVersion = number -- Vertical field of view of a presentation camera. Range: 1000…179000; Unit: mdeg export type FovMillidegrees = number -- Composition of a framed shot. export type Framing = "over_shoulder" | "side" | "front" -- A visual effect drawn by an engine primitive: glow, particles and an optional point light. export type FxDefinition = { -- Core color, red, green and blue. Items: 3…3 color_rgb: {ColorChannel}, -- How long it shows; an orb shows while its body flies. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Glow and particle color, red, green and blue. Items: 3…3 glow_rgb: {ColorChannel}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Point light it casts while it shows. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: light light: (LightId)?, -- Particles it throws. Range: 0…2147483647; Unit: count particles: Count, -- Engine primitive drawing the effect. primitive: FxPrimitive, -- Size: the radius of an orb, the final radius of a burst, ring or nova. Range: 1…2147483647; Unit: mm size_mm: PositiveDistance, -- Sound it plays where it appears. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue sound: (AudioCueId)? } -- Reference to fx content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: fx export type FxId = string -- Engine primitive of a visual effect. export type FxPrimitive = "orb" | "burst" | "ring" | "nova" -- Explicit entry point selecting the map, world rules, player profile and presentation. export type GameDefinition = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Profile used when creating a persistent player. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: player_profile new_player: PlayerProfileId, -- Presentation profile supplying the game's interface audio. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: presentation_profile presentation: PresentationProfileId, -- Authoritative gameplay limits selected by this game. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: ruleset ruleset: RulesetId, -- Map instantiated for the start of this game. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: map start_map: MapId } -- The handler of an invocation: an event binding or an item's use. export type HandlerRef = { -- The binding definition. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: binding binding: BindingId, -- Discriminant. kind: "binding" } | { -- Item whose use handler ran. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "item_use" } -- Atomic effect list returned by an event binding handler. export type HandlerResult = { -- Ordered effects committed atomically when every precondition holds. Items: 0…64 effects: {Effect} } -- An item an AI-controlled actor uses from its own inventory below a health share. export type HealthUse = { -- Health share below which it uses the item. Range: 0…1000; Unit: permille health_below_permille: Permille, -- Inventory item definition to count, consume or match. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId } -- Bounded terrain noise with explicit wavelength and edge blending. export type HeightfieldTerrain = { -- Nonnegative maximum displacement from the base terrain height. Range: 0…2147483647; Unit: mm amplitude_mm: Distance, -- Mean height around which the heightfield varies. Range: -2147483648…2147483647; Unit: mm base_height_mm: Millimeters, -- Positive width over which terrain transitions fade at zone edges. Range: 1…2147483647; Unit: mm edge_fade_mm: PositiveDistance, -- Material definition used by these terrain or prefab cells. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: material material: MaterialId, -- Positive horizontal distance between terrain noise repetitions. Range: 1…2147483647; Unit: mm wavelength_mm: PositiveDistance } -- Current nonnegative health amount. Range: 0…2147483647; Unit: hp export type HitPoints = number -- An actor interacted with a target that offers an interaction. export type InteractedEvent = { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Definition the target instantiates (an NPC, an animal, a structure). Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ definition: ContentId, -- Discriminant. kind: "interacted", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Actor or structure interacted with. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } -- Explicit interaction reach, prompt and behavior. export type Interaction = { -- Selected action or behavior for this record. mode: InteractionMode, -- Localized text shown when this interaction is available. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text prompt: TextKey, -- Maximum permitted reach in millimeters. Range: 1…2147483647; Unit: mm reach_mm: PositiveDistance } -- Action offered when an interaction is accepted. export type InteractionMode = "talk" | "open" | "sit" | "use" -- The inventory of an actor changed by a committed delta of one item. export type InventoryChangedEvent = { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Committed change of the count, never zero. Range: -9007199254740991…9007199254740991; Unit: integer delta: SignedInt, -- Item whose count changed. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "inventory_changed", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)? } -- An inventory item with a localized name, stack limit and optional script-driven use. export type ItemDefinition = { -- Localized one-line description shown with the item. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text description: (TextKey)?, -- Presence makes this item equippable; at least tool or light is required. equip: (ItemEquipment)?, -- Inventory and hand icon of the item. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:texture icon: (TextureAssetId)?, -- Unique definition ID in the declaring package namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Maximum units in one stack. Range: 1…2147483647; Unit: count max_stack: PositiveCount, -- Localized item label, resolved in the package base locale. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- How the item enters the world when placed; absent items cannot be placed. place: (Placement)?, -- Presence makes the item a spell: bound to its owner (never dropped, stored or traded), cast through its use for mana. spell: (ItemSpell)?, -- Unordered unique membership tags; registry sorts them. Items: 0…4096; Unique entries tags: {TagId}, -- Explicit item use contract; absent for items without a use action. use: (ItemUse)? } -- Presence makes this item equippable; at least tool, light or armor is required. export type ItemEquipment = { -- Optional armor values granted while the item is worn in its slot. armor: (ArmorStats)?, -- Optional light emitted while the item is equipped. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: light light: (LightId)?, -- Engine appearance model shown while equipped until equipment definitions replace it. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ model: (Name)?, -- Part of the body: never shown, dropped or picked up. natural: boolean, -- Equipment slot the item occupies; the hand holds tools and lights, armor is worn in head, torso, legs, feet, gloves or offhand. slot: EquipmentSlot, -- Optional tool capability granted while the item is equipped. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: tool tool: (ToolId)? } -- Reference to item content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item export type ItemId = string -- Presence makes an item a spell: bound to its owner, cast through its use for mana. export type ItemSpell = { -- Mana one cast costs; a cast without enough mana is refused before the handler runs. Range: 1…2147483647; Unit: count mana_cost: PositiveCount } -- Item definition and positive number of inventory units. export type ItemStack = { -- Number of units; the enclosing operation defines its permitted owner. Range: 1…2147483647; Unit: count count: PositiveCount, -- Inventory item definition to count, consume or match. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId } -- Explicit item use contract; absent for items without a use action. export type ItemUse = { -- Cooldown starts only after outcome used commits. Range: 1…2147483647; Unit: tick cooldown_ticks: PositiveTicks, -- Exact closed argument record supplied by the selected definition. parameters: Parameters, -- Maximum actor targeting distance. Zero for self. Range: 0…2147483647; Unit: mm reach_mm: Distance, -- Authority script owned by this item package. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: script script: ScriptId, -- Required read scope; fields are described by snapshot_spec. snapshot: SnapshotSpec, -- Whether the validated intent may target another actor. target_scope: TargetScope } -- A successful item use committed; delivered no earlier than the following tick. export type ItemUseCommittedEvent = { -- Acting actor (human- or AI-controlled) that used the item from its own inventory. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Inventory item definition to count, consume or match. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "item_use_committed", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Actor instance selected by the item-use target contract. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } -- The host validated an item intent and selected exactly its declared use handler. export type ItemUsedEvent = { -- Acting actor (human- or AI-controlled) that used the item from its own inventory. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Inventory item definition to count, consume or match. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "item_used", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Actor instance selected by the item-use target contract. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } -- Relative lowercase JSON path within the package. Length: 1…4096; Pattern: ^(?:[a-z0-9_][a-z0-9_-]*/)*[a-z0-9_][a-z0-9_-]*\.json$ export type JsonPath = string -- A light profile an equipped item may emit. export type LightDefinition = { -- Rig attachment point carrying the light. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ attachment: Name, -- Red, green and blue channels in that order. Items: 3…3 color_rgb: {ColorChannel}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Brightness in thousandths of the standard light. Range: 0…1000; Unit: permille intensity_permille: Permille, -- Reach of the light. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance } -- Reference to light content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: light export type LightId = string -- Stable package rejection diagnostics with source locations. export type LoadError = "asset_identity" | "asset_index" | "asset_format" | "coverage_gap" | "duplicate_id" | "duplicate_value" | "empty_equipment" | "fixture_event" | "fixture_failed" | "fixture_filter" | "fixture_item" | "fixture_owner" | "fixture_result" | "fixture_variable" | "foreign_namespace" | "generator_material" | "grid_alignment" | "migration_chain" | "handler_mismatch" | "invalid_anchor" | "invalid_bounds" | "invalid_capacity" | "invalid_filter" | "invalid_initial" | "invalid_parameters" | "invalid_polyline" | "invalid_reach" | "invalid_routine" | "invalid_stage" | "material_binding" | "missing_anchor" | "missing_dependency" | "missing_rig" | "missing_text" | "not_exported" | "npc_respawn" | "population_anchor" | "population_shadowed" | "scatter_limit" | "scope_denied" | "undeclared_effect" | "undeclared_feature" | "unsupported_variant" | "wrong_reference_kind" | "zone_bounds" | "file_set" | "invalid_path" | "size_limit" | "path_limit" | "hash_mismatch" | "invalid_script" | "invalid_json" | "reserved_namespace" | "duplicate_package" | "dependency_cycle" | "dependency_version" | "definition_limit" | "package_limit" | "missing_reference" | "missing_base_locale" | "missing_handler" | "registry" | "internal" | "io" | "archive_limit" | "invalid_archive" | "execution_not_allowed" | "missing_lock" | "unknown_field" | "out_of_range" | "invalid_type" | "equal_priority_overlap" | "invalid_tool" | "invalid_status" | "invalid_recipe" | "invalid_loot" | "invalid_loadout" | "invalid_armor" | "invalid_encounter" | "invalid_graph" | "invalid_timer" | "invalid_skill" -- Inventory, quick slots and held item of a new actor of any controller. export type Loadout = { -- Quick-slot item held in hand at the start; absent keeps the hands free. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item equipped: (ItemId)?, -- Quick slots in order; every entry is one of the loadout's items. Items: 0…64; Unique entries hotbar: {ItemId}, -- Initial inventory stacks indexed by unique item definitions. Items: 0…64; Unique entries items: {ItemStack}, -- Armor pieces worn from the start, one per slot; worn pieces are not part of items. Items: 1…6; Unique entries worn: ({ItemId})? } -- Canonical language tag with optional script and region. Length: 1…12; Pattern: ^[a-z]{2,3}(?:-[A-Z][a-z]{3})?(?:-[A-Z]{2}|-[0-9]{3})?$ export type Locale = string -- Canonical language tag and package-relative text source. export type LocaleDeclaration = { -- Canonical locale tag for the associated text file. Length: 1…12; Pattern: ^[a-z]{2,3}(?:-[A-Z][a-z]{3})?(?:-[A-Z]{2}|-[0-9]{3})?$ language: Locale, -- Package-relative source file; traversal and aliases are forbidden. Length: 1…4096; Pattern: ^(?:[a-z0-9_][a-z0-9_-]*/)*[a-z0-9_][a-z0-9_-]*\.json$ path: JsonPath } -- Package-owned text keys and localized values. export type LocaleFile = {[string]: LocalizedText} -- Nonempty localized text resolved through a package locale. Length: 1…16384; Pattern: ^[\s\S]+$ export type LocalizedText = string -- Items a defeated actor or a razed camp leaves behind besides its inventory. export type LootDefinition = { -- Every entry drops a count between min and max from the host's deterministic random stream. Items: 1…64; Unique entries entries: {LootEntry}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId } -- One item of a loot table and its count range. export type LootEntry = { -- Inventory item definition to count, consume or match. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Most units dropped; at least min. Range: 1…2147483647; Unit: count max: PositiveCount, -- Fewest units dropped. Range: 0…2147483647; Unit: count min: Count } -- Reference to loot content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: loot export type LootId = string -- Package identity, exact source inventory, capabilities and pinned dependencies. export type Manifest = { -- Capabilities required by the package's declarations and references. Items: 1…5; Unique entries api_features: {Feature}, -- Major Game API contract required to load this package. Range: 1…1; Unit: count api_version: FormatVersion, -- Declared asset sources, decoders and attribution. Items: 0…4096; Unique entries assets: {AssetDeclaration}, -- Required fallback locale containing every declared text key. Length: 1…12; Pattern: ^[a-z]{2,3}(?:-[A-Z][a-z]{3})?(?:-[A-Z]{2}|-[0-9]{3})?$ base_locale: Locale, -- JSON files containing the package's definition records. Items: 1…10000; Unique entries definitions: {JsonPath}, -- Direct package dependencies pinned to exact versions. Items: 0…64; Unique entries dependencies: {Dependency}, -- Read-only cross-package state access granted by the owner. exports: Exports, -- Language tags and their package-relative text files. Items: 1…128; Unique entries locales: {LocaleDeclaration}, -- Explicit transitions between saved-state schema versions. Items: 0…4096; Unique entries migrations: {MigrationDeclaration}, -- Namespace of this package or an exact dependency. Length: 1…32; Pattern: ^[a-z][a-z0-9_]{0,31}$ package: PackageId, -- Authority handlers and their exact capabilities and parameters. Items: 0…4096; Unique entries scripts: {ScriptDeclaration}, -- Version of persistent package-owned state. Range: 1…2147483647; Unit: count state_version: PositiveCount, -- Authoring fixtures; hashed but never executed by production loading. Items: 0…4096; Unique entries tests: {JsonPath}, -- Exact supported format or package version; no implicit upgrades. Length: 1…4096; Pattern: ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-(0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*)(\.(0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*))*)?$ version: PackageVersion } -- Named placement coordinate inside a map's declared bounds. export type MapAnchor = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ id: Name, -- Anchor coordinates in x, y, z order. Items: 3…3 position_mm: {Millimeters} } -- A bounded map with local anchors, complete zone coverage and population slots. export type MapDefinition = { -- Named map placements visible or used by this declaration. Items: 1…4096; Unique entries anchors: {MapAnchor}, -- Half-open horizontal area, aligned with the map cell size. bounds: Bounds, -- Positive map grid spacing; all zone bounds align to this grid. Range: 1…2147483647; Unit: mm cell_mm: PositiveDistance, -- Climate definition supplying seasons and weather for this map. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: climate climate: ClimateId, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- World library supplying prefab templates, rigs, materials and textures of this map. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:world_library library: WorldLibraryId, -- Local anchor identifier used for initial map entry. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ spawn_anchor: Name, -- Generator regions covering the entire map without equal-priority overlap. Items: 1…4096; Unique entries zones: {MapZone} } -- Reference to map content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: map export type MapId = string -- Opaque reference to one instantiated map. Length: 1…256; Pattern: ^[\s\S]+$ export type MapRef = string -- Prioritized generator rectangle with explicitly anchored population. export type MapZone = { -- Half-open horizontal area, aligned with the map cell size. bounds: Bounds, -- Harvestable plants scattered over the free natural ground this zone wins; absent zones grow none. Items: 1…16 flora: ({FloraLayer})?, -- Versioned deterministic terrain generator and its closed parameters. generator: ZoneGenerator, -- Package-qualified identity; unique within its declaring namespace. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ id: Name, -- Named spawn groups and their explicit placement anchors. Items: 0…4096; Unique entries population: {Population}, -- Higher-priority zones win in overlapping regions. Range: -2147483648…2147483647; Unit: integer priority: ZonePriority } -- A native material selecting one fixed engine shader family. export type MaterialDefinition = { -- Red, green and blue channels in that order. Items: 3…3 color_rgb: {ColorChannel}, -- Positive resistance to harvesting or destruction. Range: 1…2147483647; Unit: count hardness: PositiveCount, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Rendering family used for this material. shader: MaterialShader, -- Whether this material contributes solid collision geometry. solid: boolean, -- Engine terrain surface; required for and only allowed with the terrain shader. surface: (TerrainSurface)?, -- Voxel material of the map's world library; required for and only allowed with the voxel shader. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ voxel_material: (Name)? } -- Reference to material content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: material export type MaterialId = string -- Rendering family selected by a material definition. export type MaterialShader = "voxel" | "terrain" | "water" -- Which spawn of a group a member rule may take. export type MemberPosition = "any" | "first" | "last" -- Explicit source version and state migration script. export type MigrationDeclaration = { -- Saved-state version accepted as input to this migration. Range: 1…2147483647; Unit: count from_state_version: PositiveCount, -- Migration script declared by the same package. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: script script: ScriptId } -- Migration script source; it receives MigrationInput and returns MigrationResult. export type MigrationScript = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Package-relative source file; traversal and aliases are forbidden. Length: 1…4096; Pattern: ^(?:[a-z0-9_][a-z0-9_-]*/)*[a-z0-9_][a-z0-9_-]*\.luau$ path: ScriptPath } -- Normalized clockwise rotation around the vertical axis. Range: 0…359999; Unit: mdeg export type Millidegrees = number -- Signed world-space coordinate or offset. Range: -2147483648…2147483647; Unit: mm export type Millimeters = number -- Span of presentation time. Range: 0…2147483647; Unit: ms export type Milliseconds = number -- How an attack set picks its next move. export type MoveOrder = "sequence" | "random" -- Integer movement dimensions and per-tick movement costs. export type MovementDefinition = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Spatial extent measured from the center in millimeters. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance, -- Distance traveled per simulation tick at normal movement speed. Range: 1…2147483647; Unit: mm/tick speed_mm_per_tick: MovementSpeed, -- Whole stamina units consumed per movement tick. Range: 0…2147483647; Unit: count stamina_per_tick: Count, -- Maximum vertical obstacle traversable without jumping. Range: 0…2147483647; Unit: mm step_height_mm: Distance } -- A movement order of an actor ended. export type MovementFinishedEvent = { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Discriminant. kind: "movement_finished", -- Key of the move_to effect that started the order. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ request_key: Name, -- How the order ended. result: MovementResult } -- Reference to movement content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: movement export type MovementId = string -- How a movement order ended. export type MovementResult = "arrived" | "blocked" | "cancelled" -- Distance moved during one simulation tick. Range: 1…2147483647; Unit: mm/tick export type MovementSpeed = number -- Local identifier within a definition; starts with a lowercase letter. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ export type Name = string -- Actors around the snapshot centre, sorted by reference. export type NearbyPage = { -- Visible actors within the asked distance, the centre included. Items: 0…256 actors: {ActorView}, -- Whether the snapshot left out actors of its radius (its actor limit). truncated: boolean } -- A body resource that restore_need refills. export type Need = "hunger" | "stamina" -- A persistent non-player character with a daily routine and stable respawn identity. export type NpcDefinition = { -- Character definition supplying body, stats and movement. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character character: CharacterId, -- Dialogue talking to it opens. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: dialogue dialogue: (DialogueId)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Explicit prompt, reach and action exposed by this object. interaction: (Interaction)?, -- Respawn policy preserving the NPC's persistent identity. lifecycle: NpcLifecycle, -- Inventory and quick slots; absent leaves the NPC empty-handed. loadout: (Loadout)?, -- World-library human it is drawn as; absent: a look seeded from its character options. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ look: (Name)?, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Daily schedule assigned to this named NPC. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: routine routine: RoutineId, -- Unique definition tags used for filtering and classification. Items: 0…4096; Unique entries tags: {TagId}, -- Voice of its lines and mumble. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: voice voice: (VoiceId)? } -- Reference to npc content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: npc export type NpcId = string -- Named NPC respawn timing with persistent identity preservation. export type NpcLifecycle = { -- Nonzero delay before the respawn policy may take effect. Range: 1…2147483647; Unit: tick delay_ticks: PositiveTicks, -- Identity policy when this named NPC returns to the world. respawn: RespawnPolicy } -- Source of an objective's shown progress. export type ObjectiveProgress = { -- Discriminant. kind: "variable", -- Player variable. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: variable variable: VariableId } | { -- Item counted. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "item" } -- Opaque invocation or world identifier assigned by the host. Length: 1…256; Pattern: ^[\s\S]+$ export type OpaqueRef = string -- One garment of a fixed outfit. export type OutfitPiece = { -- World-library wardrobe name. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ garment: Name, -- Equipment slot it occupies. slot: EquipmentSlot } -- Exact persistent or runtime owner of a state record. export type OwnerRef = { -- Discriminant. kind: "world", -- Persistent world identity selected by this owner reference. Length: 1…4096; Pattern: ^[\s\S]*$ world: WorldRef } | { -- Discriminant. kind: "player", -- Player instance whose state or inventory the invocation may access. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } | { -- Spawned actor instance selected by this owner reference. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Discriminant. kind: "actor" } -- Kind of persistent owner holding a variable instance. export type OwnerScope = "world" | "player" | "actor" -- A package generation became active in this world; once per activation generation. export type PackageActivatedEvent = { -- Activation generation of the package in this world, starting at 1. Range: 0…2147483647; Unit: count activation: Count, -- State version of the previous generation; present only for an update. Range: 0…2147483647; Unit: count from_state_version: (Count)?, -- Discriminant. kind: "package_activated", -- Activated package. Length: 1…32; Pattern: ^[a-z][a-z0-9_]{0,31}$ package: PackageId } -- Namespace owned by one exact-version content package. Length: 1…32; Pattern: ^[a-z][a-z0-9_]{0,31}$ export type PackageId = string -- Exact semantic version, including optional prerelease and excluding build metadata. Length: 1…4096; Pattern: ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-(0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*)(\.(0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*))*)?$ export type PackageVersion = string -- Named primitive argument and its exact type and allowed domain. export type ParameterDeclaration = { -- Inclusive upper bound accepted by this declaration. Range: -9007199254740991…9007199254740991; Unit: integer max: SignedInt, -- Inclusive lower bound accepted by this declaration. Range: -9007199254740991…9007199254740991; Unit: integer min: SignedInt, -- Local parameter name used by the handler. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ name: Name, -- Discriminant. type: "int" } | { -- Local parameter name used by the handler. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ name: Name, -- Discriminant. type: "bool" } | { -- Local parameter name used by the handler. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ name: Name, -- Exact definition category accepted by this content-ID parameter. target_kind: DefinitionKind, -- Discriminant. type: "content_id" } -- Fields are specialized from the selected script declaration. export type Parameters = {} -- Fraction represented as thousandths of a whole. Range: 0…1000; Unit: permille export type Permille = number -- How an item enters the world when placed. export type Placement = { -- Hits a placed or terrain block of this material takes before it breaks; stairs of the material take as many. Range: 1…255; Unit: count hits: BlockHits, -- Discriminant. kind: "block", -- Engine voxel material of the placed block. material: BlockMaterial } | { -- Discriminant. kind: "stairs", -- Engine voxel material of the placed block. material: BlockMaterial } | { -- Discriminant. kind: "structure", -- Structure definition produced, repaired or placed. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure structure: StructureId } -- A player profile entered this world for the first time. export type PlayerCreatedEvent = { -- Discriminant. kind: "player_created", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } -- A player's actor went down. export type PlayerDefeatedEvent = { -- The player's actor. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Discriminant. kind: "player_defeated", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Confirmed origin of the damage; absent for environmental sources. Length: 1…256; Pattern: ^[\s\S]+$ source: (ActorRef)? } -- A player started a session in this world. export type PlayerJoinedEvent = { -- Discriminant. kind: "player_joined", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } -- A player ended its session in this world. export type PlayerLeftEvent = { -- Discriminant. kind: "player_left", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } -- Character and starting inventory applied once when a player is created. export type PlayerProfileDefinition = { -- Character definition supplying body, stats and movement. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character character: CharacterId, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Inventory, quick slots and held item of a new player's actor. loadout: Loadout, -- Recipes unlocked for a newly created player. Items: 0…4096; Unique entries starting_recipes: {RecipeId} } -- Reference to player profile content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: player_profile export type PlayerProfileId = string -- Opaque reference to one persistent player. Length: 1…256; Pattern: ^[\s\S]+$ export type PlayerRef = string -- A downed player's actor got up again. export type PlayerRevivedEvent = { -- The player's actor. Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Discriminant. kind: "player_revived", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef } -- Named spawn group with explicit anchors and respawn policy. export type Population = { -- Named map placements visible or used by this declaration. Items: 1…256; Unique entries anchors: {Name}, -- Definition instantiated or represented by this runtime record. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: npc|enemy|animal definition: SpawnDefinitionId, -- Package-qualified identity; unique within its declaring namespace. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ id: Name, -- Delay between population replacements; zero disables respawn. Range: 0…2147483647; Unit: tick respawn_ticks: DurationTicks } -- Absolute world coordinates associated with a map instance. export type Position = { -- Instantiated map in which this position or event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- World-space horizontal coordinate on the x axis. Range: -2147483648…2147483647; Unit: mm x_mm: Millimeters, -- World-space vertical coordinate on the y axis. Range: -2147483648…2147483647; Unit: mm y_mm: Millimeters, -- World-space horizontal coordinate on the z axis. Range: -2147483648…2147483647; Unit: mm z_mm: Millimeters } -- Strictly positive quantity or capacity. Range: 1…2147483647; Unit: count export type PositiveCount = number -- Strictly positive spatial extent. Range: 1…2147483647; Unit: mm export type PositiveDistance = number -- Strictly positive health amount or maximum health. Range: 1…2147483647; Unit: hp export type PositiveHitPoints = number -- Nonzero delay or period in simulation ticks. Range: 1…2147483647; Unit: tick export type PositiveTicks = number -- Reference to asset:prefab source content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:prefab_source export type PrefabAssetId = string -- A native source asset with collision dimensions and seat offsets. export type PrefabDefinition = { -- Declared prefab-source asset that supplies geometry. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:prefab_source asset: PrefabAssetId, -- Collision radius and height used independently of presentation. collision: CollisionShape, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Seat positions and orientations relative to the prefab origin. Items: 0…4096; Unique entries seats: {Seat} } -- Reference to prefab content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: prefab export type PrefabId = string -- Native voxel source with indexed appearances and explicit visible faces. export type PrefabSource = { -- Indexed material/color table referenced by prefab cells. Items: 1…255 appearances: {VoxelAppearance}, -- Unique voxel coordinates with appearance and visible-face mask. Items: 1…1000000; Unique entries cells: {VoxelCell}, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:prefab_source id: PrefabAssetId, -- Discriminant selecting the exact closed record shape. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ kind: Name, -- Exact supported format or package version; no implicit upgrades. Range: 1…1; Unit: count version: FormatVersion } -- Sound of the game independent of its rules: the engine moments' cues, the soundtrack and the creatures' fallback sounds. export type PresentationProfileDefinition = { -- Sounds of creatures that name none of their own (idle stays quiet). creature_sounds: CreatureSounds, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- The soundtrack. music: Soundtrack, -- Cues of the engine's sound moments, each moment at most once. Items: 0…1024 sounds: {SoundBinding} } -- Reference to presentation profile content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: presentation_profile export type PresentationProfileId = string -- Presentation script source; it receives VisualFrame and returns VisualResult (a cutscene's camera_script). export type PresentationScript = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Package-relative source file; traversal and aliases are forbidden. Length: 1…4096; Pattern: ^(?:[a-z0-9_][a-z0-9_-]*/)*[a-z0-9_][a-z0-9_-]*\.luau$ path: ScriptPath } -- Drawn distance per second of presentation time. Range: 1…2147483647; Unit: mm/s export type PresentationSpeed = number -- A named progress track besides the character level (fishing, crafting …): its own experience and levels; handlers grant it with grant_xp and read its level through its variable. export type ProgressTrackDefinition = { -- Share of experience granted on the track that the character level gains too. Range: 0…1000; Unit: permille character_permille: Permille, -- Icon shown with the track. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:texture icon: (TextureAssetId)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Player variable (int) the engine keeps at the track's level. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: variable level_variable: (VariableId)?, -- Experience each next level of the track needs, in order (not falling). Items: 1…99 level_xp: {PositiveCount}, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey } -- Reference to progress track content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: progress_track export type ProgressTrackId = string -- How players level up: the experience curve, skill points per level and the mana pool. export type Progression = { -- Mana of a player before skills add to it. Range: 0…2147483647; Unit: count base_mana: Count, -- Player variable (int) the engine keeps at the player's level, so handlers read it. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: variable level_variable: (VariableId)?, -- Experience each next level needs, in order: entry n leads from level n + 1 to level n + 2; the last level is one more than the entries. Items: 1…99 level_xp: {PositiveCount}, -- Mana a living player regains per tick, in thousandths of a point. Range: 0…2147483647; Unit: permille mana_regen_permille: Count, -- Skill points every level reached grants. Range: 1…2147483647; Unit: count points_per_level: PositiveCount } -- The burst of a projectile: every hostile body in the radius takes a share of the hit's damage. export type ProjectileBurst = { -- Share of the projectile's damage each body in the radius takes. Range: 0…1000; Unit: permille damage_permille: Permille, -- Radius around the end point. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance, -- Status the burst applies for the status's duration. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status status: (StatusId)? } -- A flying spell body: its flight, what a hit does and how it looks. export type ProjectileDefinition = { -- Area it bursts into where it ends, struck body or ground. burst: (ProjectileBurst)?, -- Damage type of its hit and its burst. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: damage_type damage_type: DamageTypeId, -- Status its hit applies to the struck body for the status's duration. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status hit_status: (StatusId)?, -- Whether it follows the body the caster's aim chose. homing: boolean, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Look of its end (the burst or the hit). Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: fx impact: (FxId)?, -- Look of the body in flight. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: fx look: FxId, -- Radius a body must come within to be struck. Range: 1…2147483647; Unit: mm radius_mm: PositiveDistance, -- Distance it flies before it ends. Range: 1…2147483647; Unit: mm range_mm: PositiveDistance, -- Flight speed. Range: 1…2147483647; Unit: mm/tick speed_mm_per_tick: MovementSpeed } -- Reference to projectile content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: projectile export type ProjectileId = string -- Projectile primitive a ranged tool fires. export type ProjectileKind = "arrow" | "web" -- A quest of a player moved to another stage. export type QuestChangedEvent = { -- Stage after the transition. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ current: Name, -- Discriminant. kind: "quest_changed", -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Stage before the transition. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ previous: Name, -- Quest that changed. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: quest quest: QuestId } -- Holds while the player's quest is in one of the stages. export type QuestCondition = { -- Quest. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: quest quest: QuestId, -- Stages that satisfy it. Items: 1…256; Unique entries stages: {Name} } -- Declared quest stages and directed transitions. Rewards come only from handlers. export type QuestDefinition = { -- Localization key of the journal description. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text description: TextKey, -- NPC offering it (journal and markers). Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: npc giver: (NpcId)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Stage assigned when a quest has no stored progress. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ initial_stage: Name, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Shown objectives. Items: 0…16 objectives: {QuestObjective}, -- Rewards shown on the quest card. Items: 0…16 rewards: {QuestReward}, -- Complete set of local quest stage identifiers. Items: 1…256; Unique entries stages: {Name}, -- How its stages show; stages without an entry stay hidden. Items: 0…256 states: {QuestState}, -- Allowed source/destination stage pairs. Items: 1…256; Unique entries transitions: {QuestTransition}, -- Experience the engine grants the quest's player when it reaches a stage of phase done. Range: 1…2147483647; Unit: count xp: (PositiveCount)? } -- Reference to quest content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: quest export type QuestId = string -- One shown objective of a quest; handlers advance the quest, this only reports progress. export type QuestObjective = { -- Amount that completes it. Range: 1…2147483647; Unit: count count: PositiveCount, -- NPC the objective sends the player to (a speech bubble over it while open). Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: npc npc: (NpcId)?, -- Where the shown progress comes from. progress: ObjectiveProgress, -- Objective text. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text text: TextKey } -- How the journal, the markers and the quest card show a quest stage. export type QuestPhase = "offered" | "underway" | "ready" | "done" -- A reward shown on the quest card; the handler finishing the quest grants it. export type QuestReward = { -- Amount. Range: 1…2147483647; Unit: count count: PositiveCount, -- Item. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId } -- Player-owned quest progress supplied by an authoring fixture. export type QuestSnapshot = { -- Player instance whose state or inventory the invocation may access. Length: 1…4096; Pattern: ^[\s\S]*$ player: FixturePlayerRef, -- Quest definition whose stage and revision are selected. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: quest quest: QuestId, -- Monotone revision of the selected quest state. Range: 0…2147483647; Unit: count revision: Count, -- Current local quest stage identifier. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ stage: Name } -- How a quest stage shows; a stage without an entry stays hidden. export type QuestState = { -- What the interface shows for it. phase: QuestPhase, -- Declared stage. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ stage: Name } -- Allowed directed edge between two declared quest stages. export type QuestTransition = { -- Required source stage before applying this transition. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ from: Name, -- Destination stage after the transition commits. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ to: Name } -- Declared quest stage and its monotone revision. export type QuestView = { -- Revision, initially zero. Range: 0…2147483647; Unit: count revision: Count, -- Current declared stage, initially the definition's initial_stage. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ stage: Name } -- An enemy's answer to being struck from afar: it rolls aside or charges the striker at a sprint. export type RangedReaction = { -- Speed of the charge as a share of its own. Range: 1…2147483647; Unit: permille charge_speed_permille: PositiveCount, -- A striker at least this far away counts as shooting from afar. Range: 1…2147483647; Unit: mm distance_mm: PositiveDistance, -- Share of such hits it answers with a roll aside; the rest it charges. Range: 0…1000; Unit: permille evade_permille: Permille } -- Snapshot reads never access live simulation state. export type Read = { -- Read a visible actor. actor: (ActorRef) -> ActorView?, -- Read the simulation clock. clock: () -> ClockView, -- Count an item in the inventory of the event actor or the invocation owner. count_item: (ActorRef, ItemId) -> Count, -- Visible actors within this distance of the snapshot centre, at most the declared snapshot radius. nearby: (SnapshotRadius) -> NearbyPage, -- Read a quest stage and revision for the permitted player. quest: (PlayerRef, QuestId) -> QuestView?, -- Read a declared variable, using its virtual initial value when absent. variable: (VariableId, VariableOwner) -> StateValue } -- Ingredients, reach and the one result of crafting, building or repairing. export type RecipeDefinition = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Whether every player may use the recipe without an unlock. initially_available: boolean, -- Items debited exactly once, indexed by unique item definitions. Items: 1…16; Unique entries inputs: {ItemStack}, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Maximum distance to the station or repaired structure. Range: 1…2147483647; Unit: mm reach_mm: PositiveDistance, -- Exactly one craft, build or repair result. result: RecipeResult, -- Tag a nearby station must carry; absent recipes need no station. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: tag station: (TagId)? } -- Reference to recipe content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: recipe export type RecipeId = string -- The single result variant of a recipe. export type RecipeResult = { -- Number of units; the enclosing operation defines its permitted owner. Range: 1…2147483647; Unit: count count: PositiveCount, -- Inventory item definition to count, consume or match. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "craft" } | { -- Discriminant. kind: "build", -- Structure definition produced, repaired or placed. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure structure: StructureId } | { -- Health restored by one repair, capped at the maximum. Range: 1…2147483647; Unit: hp health: PositiveHitPoints, -- Discriminant. kind: "repair", -- Structure definition produced, repaired or placed. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure structure: StructureId } -- A recording of one text in one language. export type Recording = { -- Audio asset. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:audio asset: AudioAssetId, -- Length of the recording; cutscenes plan the line by it. Range: 1…1800000; Unit: ms duration_ms: AudioDuration, -- Language of the recording. Length: 1…12; Pattern: ^[a-z]{2,3}(?:-[A-Z][a-z]{3})?(?:-[A-Z]{2}|-[0-9]{3})?$ locale: Locale, -- The spoken text. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text text: TextKey } -- Damage-type-specific multiplier applied to incoming damage. export type Resistance = { -- Damage category affected by this resistance entry. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: damage_type damage_type: DamageTypeId, -- Multiplier applied to this damage type in thousandths. Range: 0…2147483647; Unit: count multiplier_permille: Count } -- An actor harvested a resource (a tree, rock or crop); the item reached its inventory. export type ResourceHarvestedEvent = { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Units harvested. Range: 1…2147483647; Unit: count count: PositiveCount, -- Harvested item. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: ItemId, -- Discriminant. kind: "resource_harvested", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Where the resource was harvested. position: Position } -- Identity policy for a named NPC after death. export type RespawnPolicy = "same_ref" -- Reference to rig content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: rig export type RigId = string -- Water channel of fixed width and depth along an integer polyline. export type RiverTerrain = { -- Terrain beside and under the channel. base: BaseTerrain, -- Terrain material of the channel bed. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: material bed_material: MaterialId, -- Depth of the channel bed below the water surface. Range: 1…2147483647; Unit: mm depth_mm: PositiveDistance, -- Centre line as x, z points in millimetres; consecutive points differ and segments never cross. Items: 2…256 points_mm: {{Millimeters}}, -- Water surface height inside the channel. Range: -2147483648…2147483647; Unit: mm surface_y_mm: Millimeters, -- Water material of the channel. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: material water_material: MaterialId, -- Full channel width across the centre line. Range: 1…2147483647; Unit: mm width_mm: PositiveDistance } -- Paved path of fixed width along an integer polyline with a limited grade. export type RoadTerrain = { -- Terrain beside the road; the road surface follows it within the grade limit. base: BaseTerrain, -- Terrain material of the road surface. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: material material: MaterialId, -- Largest height change per metre along the centre line. Range: 0…1000; Unit: permille max_grade_permille: Permille, -- Centre line as x, z points in millimetres; consecutive points differ and segments never cross. Items: 2…256 points_mm: {{Millimeters}}, -- Full road width across the centre line. Range: 1…2147483647; Unit: mm width_mm: PositiveDistance } -- Activity assigned by a daily routine entry. export type RoutineActivity = "home" | "work" | "visit" | "sit" | "chat" | "pet" | "sleep" -- A daily schedule starting at minute zero, ordered by unique minutes. export type RoutineDefinition = { -- Takes up arms against raids instead of fleeing. defends: boolean, -- Chronological day; an entry holds until the next. Items: 1…1440; Unique entries entries: {RoutineEntry}, -- Settlement marker of the villager's house (home and sleep). Length: 1…96; Pattern: ^[a-z][a-z0-9_:-]{0,95}$ home: (SettlementMarker)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Idle clips of the human rig between activities. Items: 0…16 idle: {Name}, -- How each season moves the day. Items: 0…16 shifts: {SeasonShift}, -- Thought-cloud motifs of its talk. Items: 0…16 topics: {Name} } -- A routine change at a minute of the day, optionally only in some seasons. export type RoutineEntry = { -- Minute of the simulated day. Range: 0…1439; Unit: minute minute: DayMinute, -- Plans in order of preference. Items: 1…6 plans: {RoutinePlan}, -- Seasons it applies in; empty: every season. Items: 0…16; Unique entries seasons: {SeasonId} } -- Reference to routine content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: routine export type RoutineId = string -- Where a plan of a routine takes its villager: a settlement marker of the world library or a map anchor. export type RoutinePlace = { -- Map anchor instead of a marker. Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.anchor anchor: (AnchorRef)?, -- Settlement marker (a market stall, a seat, `world:hearth`). Length: 1…96; Pattern: ^[a-z][a-z0-9_:-]{0,95}$ marker: (SettlementMarker)?, -- Offset right and forward of the marker's facing. Items: 2…2; Unit: mm offset_mm: {Millimeters}, -- Radius the villager roams within. Range: 0…2147483647; Unit: mm radius_mm: Distance } -- One way to spend a part of the day; the first possible plan of an entry is taken. export type RoutinePlan = { -- Animals to tend or pet there. Items: 0…8; Unique entries animals: {AnimalId}, -- Clips of the human rig to show there. Items: 0…16 animations: {Name}, -- Activity. mode: RoutineActivity, -- Where; home and sleep need none. place: (RoutinePlace)?, -- Thought-cloud motifs of talk there. Items: 0…16 topics: {Name}, -- Villagers to meet (chat). Items: 0…8; Unique entries with: {NpcId} } -- Session-wide inventory, survival, respawn and actor limits. export type RulesetDefinition = { -- Policy that selects persistent checkpoint times. checkpoint_mode: CheckpointMode, -- Lifetime of an uncollected ground item in simulation ticks. Range: 1…2147483647; Unit: tick drop_lifetime_ticks: PositiveTicks, -- Item a pickaxe digs out of sand terrain; without it sand digs as stone. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item dug_sand: (ItemId)?, -- Encounters of the raids, the generator's sites and the wilds. encounters: Encounters, -- Fishing skill levels; absent keeps every angler at level 1. fishing: (FishingRules)?, -- Structure of the village hearth. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure hearth: StructureId, -- Accessible hotbar slots; cannot exceed inventory capacity. Range: 1…2147483647; Unit: count hotbar_slots: PositiveCount, -- Notice to a player put out at the door of a house that fell, was taken down or vanished. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text house_destroyed_notice: TextKey, -- Whole hunger units consumed over one simulated day. Range: 0…2147483647; Unit: count hunger_per_day: Count, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Positive maximum number of inventory slots. Range: 1…2147483647; Unit: count inventory_slots: PositiveCount, -- Maximum actor population admitted by this ruleset. Range: 1…2147483647; Unit: count max_actors: PositiveCount, -- Maximum distance for collecting ground items. Range: 1…2147483647; Unit: mm pickup_radius_mm: PositiveDistance, -- Levels, skill points and mana of the players; absent keeps every player at level 1 without mana. progression: (Progression)?, -- Tags of the quick-use keys in key order; a key uses the first owned item carrying its tag. Items: 0…8; Unique entries quick_use: {TagId}, -- Positive delay before a dead player may respawn. Range: 1…2147483647; Unit: tick respawn_delay_ticks: PositiveTicks, -- Positive health assigned when a player respawns. Range: 1…2147483647; Unit: hp respawn_health: PositiveHitPoints, -- Items a building's sign costs. Items: 0…16; Unique entries sign_inputs: {ItemStack}, -- Structure that keeps the stock of a fallen or dismantled house. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure stash: StructureId, -- Village animals of a new world. Items: 0…256 village_animals: {AnimalPlacement}, -- Structure of a village building of the world base without a structure of its own model. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure village_building: StructureId, -- Filled chests placed once in every world, relative to the hearth. Items: 1…16 village_chests: ({ChestPlacement})?, -- Character of the villagers the world generator places. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: character villager_character: CharacterId, -- Inventory and quick slots of a new villager. villager_loadout: Loadout, -- The village's residents, spawned in the start map's settlement. Items: 0…64; Unique entries villagers: {NpcId} } -- Reference to ruleset content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: ruleset export type RulesetId = string -- Decoration prefab and its relative selection weight. export type ScatterChoice = { -- Prefab placed as decoration without collision or population. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: prefab prefab: PrefabId, -- Positive relative selection weight; need not be normalized. Range: 1…2147483647; Unit: count weight: PositiveCount } -- Weighted decoration prefabs with a density, a minimum spacing and a hard count limit. export type ScatterTerrain = { -- Terrain under the decorations. base: BaseTerrain, -- Prefabs drawn by relative weight for each accepted candidate. Items: 1…256 choices: {ScatterChoice}, -- Expected decorations per square kilometre before spacing and the count limit. Range: 0…2147483647; Unit: count density_per_km2: Count, -- Hard upper limit of decorations in this zone; candidates with the lowest stable ID win. Range: 0…2147483647; Unit: count max_count: Count, -- Minimum horizontal distance between two decorations; also the candidate grid size. Range: 1…2147483647; Unit: mm min_distance_mm: PositiveDistance } -- Origin of a cutscene place. export type SceneAnchor = { -- Discriminant. kind: "player" } | { -- Discriminant. kind: "world", -- Position. Items: 3…3; Unit: mm position_mm: {Millimeters} } | { -- Discriminant. kind: "actor", -- Role. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ role: Name } | { -- Discriminant. kind: "place", -- Place. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ place: Name } | { -- Discriminant. kind: "door_near", -- Role or place. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ near: Name } -- Pace of a camera pan. export type SceneEasing = "linear" | "ease_in" | "ease_out" | "ease_in_out" -- Span of a cutscene step, at most ten minutes. Range: 0…600000; Unit: ms export type SceneMs = number -- A place a cutscene stages its cast at, relative to an anchor. export type ScenePlace = { -- Keep the exact point (a camera position); standing places move to free ground. exact: boolean, -- What it is measured from. from: SceneAnchor, -- Place name, unique in the cutscene. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ id: Name, -- Offset right, up and forward of the anchor's facing. Items: 3…3; Unit: mm offset_mm: {Millimeters}, -- Turn to the left of the anchor's facing. Range: 0…359999; Unit: mdeg turn_mdeg: Millidegrees } -- One staging step of a cutscene. Steps of a sequence follow one another, a step lasts until its own work is done (a walk until the actor arrives, a line until it is read); a parallel group until its longest child is done. Staging only draws; it never moves simulated figures. export type SceneStep = { -- Discriminant. ["do"]: "sequence", -- Steps. Items: 1…64 steps: {SceneStep} } | { -- Discriminant. ["do"]: "parallel", -- Steps. Items: 1…64 steps: {SceneStep} } | { -- Discriminant. ["do"]: "wait", -- Length. Range: 0…600000; Unit: ms ms: SceneMs } | { -- Discriminant. ["do"]: "camera", -- Pace of a pan. easing: SceneEasing, -- Pan length; cut and follow take zero. Range: 0…600000; Unit: ms ms: SceneMs, -- Composition. shot: CameraShot, -- How the camera enters. transition: CameraTransition } | { -- Role. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ actor: Name, -- Place. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ at: Name, -- Discriminant. ["do"]: "actor_place", -- Target to face. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ face: (Name)? } | { -- Role. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ actor: Name, -- A straight line instead of a path (out of a door). direct: boolean, -- Discriminant. ["do"]: "actor_walk_to", -- Walking speed. Range: 1…2147483647; Unit: mm/s speed_mm_per_s: PresentationSpeed, -- Stop this far from the target. Range: 0…2147483647; Unit: mm stop_short_mm: Distance, -- Target. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ to: Name } | { -- Role. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ actor: Name, -- Discriminant. ["do"]: "actor_face", -- Turn time. Range: 0…600000; Unit: ms ms: SceneMs, -- Target. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ target: Name } | { -- Role. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ actor: Name, -- Delivery. delivery: Delivery, -- Discriminant. ["do"]: "actor_say", -- Mood. emotion: Emotion, -- Body clip while speaking; absent: the mood's talking clip. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ gesture: (Name)?, -- Length; absent: the recording's or the reading time. Range: 0…600000; Unit: ms ms: (SceneMs)?, -- Line. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text text: TextKey } | { -- Role. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ actor: Name, -- Discriminant. ["do"]: "actor_emotion", -- Mood. emotion: Emotion } | { -- Role. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ actor: Name, -- Clip. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ clip: Name, -- Discriminant. ["do"]: "actor_animate", -- Length; absent: the clip's. Range: 0…600000; Unit: ms ms: (SceneMs)?, -- Hold the staging until the clip ends. wait: boolean } | { -- Discriminant. ["do"]: "fade", -- Length. Range: 0…600000; Unit: ms ms: SceneMs, -- Opacity at the end. Range: 0…1000; Unit: permille to_permille: Permille } | { -- Cue. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue cue: (AudioCueId)?, -- Discriminant. ["do"]: "music" } | { -- Cue. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue cue: AudioCueId, -- Discriminant. ["do"]: "sound" } -- A minute of the day at which time_reached fires on the listed maps, once per day. export type ScheduleDefinition = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Maps the schedule applies to. Items: 1…64; Unique entries maps: {MapId}, -- Minute of the day. Range: 0…1439; Unit: minute minute: DayMinute } -- Reference to schedule content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: schedule export type ScheduleId = string -- A package script and its execution profile: an authority handler, a state migration or a presentation script. export type ScriptDeclaration = { -- Unique effect capabilities the handler is permitted to return. Items: 0…4096; Unique entries effects: {EffectKind}, -- Event kind or typed event payload selected by the handler declaration. event: EventKind, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Ordered declarations of the exact parameter names, scalar types and bounds. Items: 0…4096; Unique entries parameters: {ParameterDeclaration}, -- Package-relative source file; traversal and aliases are forbidden. Length: 1…4096; Pattern: ^(?:[a-z0-9_][a-z0-9_-]*/)*[a-z0-9_][a-z0-9_-]*\.luau$ path: ScriptPath, -- Unique deterministic RNG stream names allowed for this script. Items: 0…4096; Unique entries random_streams: {Name}, -- Discriminant. runtime: "authority", -- Requested target packages; effective rights also require host approval and event scope. Items: 1…64; Unique entries target_packages: {PackageId} } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Package-relative source file; traversal and aliases are forbidden. Length: 1…4096; Pattern: ^(?:[a-z0-9_][a-z0-9_-]*/)*[a-z0-9_][a-z0-9_-]*\.luau$ path: ScriptPath, -- Discriminant. runtime: "migration" } | { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Package-relative source file; traversal and aliases are forbidden. Length: 1…4096; Pattern: ^(?:[a-z0-9_][a-z0-9_-]*/)*[a-z0-9_][a-z0-9_-]*\.luau$ path: ScriptPath, -- Discriminant. runtime: "presentation" } -- Reference to script content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: script export type ScriptId = string -- Relative lowercase Luau source path within the package. Length: 1…4096; Pattern: ^(?:[a-z0-9_][a-z0-9_-]*/)*[a-z0-9_][a-z0-9_-]*\.luau$ export type ScriptPath = string -- The season of a map changed. export type SeasonChangedEvent = { -- Season after the change. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: season current: SeasonId, -- Discriminant. kind: "season_changed", -- Instantiated map in which this event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Season before the change. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: season previous: SeasonId } -- A named season referenced by climate and clock records. export type SeasonDefinition = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Engine look the client draws for this season; unique within a climate. look: SeasonLook, -- Its day and night pieces; absent plays the soundtrack's. music: (SeasonMusic)?, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey } -- One season in the calendar and its positive day count. export type SeasonDuration = { -- Number of complete simulated days in the season. Range: 1…2147483647; Unit: count days: PositiveCount, -- Season definition selected by this calendar entry. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: season season: SeasonId, -- Positive relative weights of the weather drawn each period of this season. Items: 1…64; Unique entries weather_weights: {WeatherWeight} } -- Reference to season content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: season export type SeasonId = string -- Engine look of a season: ground, foliage and snow cover the client draws. export type SeasonLook = "spring" | "summer" | "autumn" | "winter" -- Day and night pieces of a season. export type SeasonMusic = { -- Piece of the day. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue day: AudioCueId, -- Piece of the night. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue night: AudioCueId } -- A season's shift of a daily routine. export type SeasonShift = { -- Minutes later (negative: earlier) every entry happens. Range: -180…180; Unit: minute minutes: ShiftMinutes, -- Season. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: season season: SeasonId } -- Relative position and facing direction of a usable seat. export type Seat = { -- Seat offset from the prefab origin in x, y, z order. Items: 3…3 offset_mm: {Millimeters}, -- Clockwise seat orientation around the vertical axis. Range: 0…359999; Unit: mdeg yaw_mdeg: Millidegrees } -- Places of a seat. Range: 1…8; Unit: count export type SeatCount = number -- Name of a marker of the world library's settlement (a stall, a seat, `world:hearth`). Length: 1…96; Pattern: ^[a-z][a-z0-9_:-]{0,95}$ export type SettlementMarker = string -- How a shield guards: the arc in front of the wearer it covers and how much of a blow's stamina cost it takes. export type ShieldBlock = { -- Half angle of the guarded arc in front of the wearer. Range: 0…359999; Unit: mdeg arc_mdeg: Millidegrees, -- Share of a guarded blow's stamina cost the shield takes; for a brain, the least chance it raises the shield against a blow. Range: 0…1000; Unit: permille strength_permille: Permille } -- Minutes a season moves a daily routine. Range: -180…180; Unit: minute export type ShiftMinutes = number -- Exactly representable signed integer for script arithmetic. Range: -9007199254740991…9007199254740991; Unit: integer export type SignedInt = number -- One lasting bonus of a learned skill. export type SkillBonus = { -- Amount added, in the unit of the stat. Range: 1…2147483647; Unit: count amount: PositiveCount, -- Value the bonus raises. stat: SkillStat } -- Branch of the skill tree; the engine shows the three side by side. export type SkillBranch = "life" | "strength" | "magic" -- One node of the skill tree: its branch and place, price, prerequisites, lasting bonuses and the spell it teaches. export type SkillDefinition = { -- Lasting bonuses of the learned node; equal stats add up. Items: 0…4 bonuses: {SkillBonus}, -- Branch of the tree the node belongs to. branch: SkillBranch, -- Column of the node in its row, from 0 to 2. Range: 0…2147483647; Unit: count column: Count, -- Skill points learning the node costs. Range: 1…2147483647; Unit: count cost: PositiveCount, -- Localization key of the tooltip text. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text description: TextKey, -- Icon of the node. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:texture icon: (TextureAssetId)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Player level the node needs. Range: 1…2147483647; Unit: count level: PositiveCount, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Nodes a player must have learned first. Items: 0…4; Unique entries requires: {SkillId}, -- Spell item the node teaches: granted once when it is learned. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item spell: (ItemId)?, -- Row of the node in its branch, from 0 at the root; prerequisites lie in lower rows. Range: 0…2147483647; Unit: count tier: Count } -- Reference to skill content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: skill export type SkillId = string -- Player value a skill bonus raises. export type SkillStat = "max_health" | "health_regen" | "melee_damage" | "max_stamina" | "max_mana" | "mana_regen" | "spell_power" -- Maximum visible snapshot radius around the invocation owner. Range: 0…64000; Unit: mm export type SnapshotRadius = number -- Explicit visibility and package access requested before invoking a handler. export type SnapshotSpec = { -- Named map placements visible or used by this declaration. Items: 0…4096; Unique entries anchors: {AnchorRef}, -- Packages whose definitions may be read during this invocation. Items: 1…64; Unique entries definitions_from: {PackageId}, -- Spatial extent measured from the center in millimeters. Range: 0…64000; Unit: mm radius_mm: SnapshotRadius, -- Variable values explicitly admitted to the snapshot. Items: 0…4096; Unique entries variables: {SnapshotVariable} } -- Variable and owner selected for a frozen invocation snapshot. export type SnapshotVariable = { -- Resolved state owner for this invocation or snapshot entry. owner: VariableOwner, -- Variable declaration that determines type, scope and virtual initial state. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: variable variable: VariableId } -- The cue the engine plays for one of its sound moments. export type SoundBinding = { -- Cue played for it. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue cue: AudioCueId, -- Engine sound moment (`hit`, `step-grass`, `ui-click`, `action-Wave` …); unknown moments stay silent. Length: 1…64; Pattern: ^[A-Za-z][A-Za-z0-9-]{0,63}$ moment: SoundMoment } -- Name of an engine sound moment. Length: 1…64; Pattern: ^[A-Za-z][A-Za-z0-9-]{0,63}$ export type SoundMoment = string -- The soundtrack: day and night pieces (seasons may override them) and the fight cues. export type Soundtrack = { -- Piece while a dangerous enemy pursues someone near a local player. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue danger: AudioCueId, -- Piece of the day. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue day: AudioCueId, -- Piece of the night. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue night: AudioCueId, -- Piece during a raid or while a wild creature pursues someone nearby. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: audio_cue wildlife: AudioCueId } -- Why an actor was spawned. export type SpawnCause = { -- Handler whose result spawned the actor. handler: HandlerRef, -- Invocation that committed the spawn. Length: 1…256; Pattern: ^[\s\S]+$ invocation_id: OpaqueRef, -- Discriminant. kind: "script", -- Key of the spawn effect within its result. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ spawn_key: Name } | { -- Discriminant. kind: "population", -- Map the population belongs to. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef } -- Reference to npc or enemy or animal content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: npc|enemy|animal export type SpawnDefinitionId = string -- Closed typed payload used for persistent variable state. export type StateValue = { -- Discriminant. kind: "int", -- Typed payload checked against its owning declaration. Range: -9007199254740991…9007199254740991; Unit: integer value: SignedInt } | { -- Discriminant. kind: "bool", -- Stored boolean state. value: boolean } | { -- Discriminant. kind: "enum", -- One of the variable's declared values. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ value: Name } | { -- Discriminant. kind: "content_id", -- Reference checked against the variable's target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ value: ContentId } -- A status became active on an actor or was renewed by its stacking rule. export type StatusAppliedEvent = { -- Discriminant. kind: "status_applied", -- Confirmed origin of the damage; absent for environmental sources. Length: 1…256; Pattern: ^[\s\S]+$ source: (ActorRef)?, -- Applied status. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status status: StatusId, -- Actor the change applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } -- A timed actor condition with a stacking rule, a speed factor and periodic damage. export type StatusDefinition = { -- Damage per tick while active. Range: 0…2147483647; Unit: hp damage_per_tick: Count, -- Damage type of the periodic damage; present exactly when it is nonzero. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: damage_type damage_type: (DamageTypeId)?, -- Duration of one application. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Movement speed while active, in thousandths of normal speed. Range: 0…1000; Unit: permille speed_permille: Permille, -- What a repeated application of an active status does. stacking: StatusStacking } -- A status of an actor ended by time or removal. export type StatusExpiredEvent = { -- Discriminant. kind: "status_expired", -- Status that ended. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status status: StatusId, -- Actor the change applies to. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } -- Reference to status content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status export type StatusId = string -- Stacking rule of a status applied again while active. export type StatusStacking = "replace" | "max_duration" | "reject" -- A structure was built. export type StructureBuiltEvent = { -- Actor that built the structure. Length: 1…256; Pattern: ^[\s\S]+$ builder: ActorRef, -- Structure definition that was built. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure definition: StructureId, -- Discriminant. kind: "structure_built", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- The new structure. Length: 1…256; Pattern: ^[\s\S]+$ structure: ActorRef } -- Committed damage reduced a structure's health. export type StructureDamagedEvent = { -- Health actually lost. Range: 0…2147483647; Unit: hp amount: Count, -- Structure definition of the target. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure definition: StructureId, -- Discriminant. kind: "structure_damaged", -- Confirmed origin of the damage; absent for environmental sources. Length: 1…256; Pattern: ^[\s\S]+$ source: (ActorRef)?, -- Damaged structure. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } -- A placeable building or furniture piece with health and repair. export type StructureDefinition = { -- What the structure does besides standing: defend, let one sleep or sit. ["function"]: (StructureFunction)?, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Item the structure is built from and dismantled into; absent for village buildings. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item item: (ItemId)?, -- Maximum hit points and upper healing cap. Range: 1…2147483647; Unit: hp max_health: PositiveHitPoints, -- Engine prefab kind supplying geometry, placement and interior until native prefabs replace it. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ model: Name, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey, -- Localization key of the interaction prompt shown next to it. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text prompt: (TextKey)?, -- Repair recipe whose result names this structure. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: recipe repair_recipe: (RecipeId)? } -- A structure's health reached zero and it collapsed. export type StructureDestroyedEvent = { -- Structure definition of the target. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure definition: StructureId, -- Discriminant. kind: "structure_destroyed", -- Confirmed origin of the damage; absent for environmental sources. Length: 1…256; Pattern: ^[\s\S]+$ source: (ActorRef)?, -- Destroyed structure. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } -- Engine mechanic a structure runs, with its values. export type StructureFunction = { -- Damage of one arrow. Range: 1…2147483647; Unit: hp damage: PositiveHitPoints, -- Discriminant. kind: "tower", -- Launch height above the ground. Range: 1…2147483647; Unit: mm launch_height_mm: PositiveDistance, -- Ticks between two arrows. Range: 1…2147483647; Unit: tick period_ticks: PositiveTicks, -- Distance to the targeted enemy. Range: 1…2147483647; Unit: mm range_mm: PositiveDistance } | { -- Damage per simulated minute to each enemy on it. Range: 1…2147483647; Unit: hp damage_per_minute: PositiveHitPoints, -- Discriminant. kind: "spikes", -- Reach beyond the enemy's body radius. Range: 1…2147483647; Unit: mm reach_mm: PositiveDistance } | { -- Healing of the sleeper per simulated minute. Range: 1…2147483647; Unit: hp heal_per_minute: PositiveHitPoints, -- Discriminant. kind: "bed" } | { -- Discriminant. kind: "seat", -- Places side by side. Range: 1…8; Unit: count seats: SeatCount } | { -- Discriminant. kind: "storage" } -- Reference to structure content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: structure export type StructureId = string -- An actor repaired a structure. export type StructureRepairedEvent = { -- Acting actor (human- or AI-controlled). Length: 1…256; Pattern: ^[\s\S]+$ actor: ActorRef, -- Health restored. Range: 0…2147483647; Unit: hp amount: Count, -- Discriminant. kind: "structure_repaired", -- Player controlling the actor; absent for AI-controlled actors. Length: 1…256; Pattern: ^[\s\S]+$ player: (PlayerRef)?, -- Repaired structure. Length: 1…256; Pattern: ^[\s\S]+$ target: ActorRef } -- A localized marker used for typed membership and filters. export type TagDefinition = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text name: TextKey } -- Reference to tag content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: tag export type TagId = string -- Whether the validated intent may target another actor. export type TargetScope = "self" | "actor" -- Fixed engine terrain surface rendered by a terrain material. export type TerrainSurface = "grass" | "path" | "sand" | "stone" | "earth" | "iron" -- Reference to text content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text export type TextKey = string -- Reference to asset:texture content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:texture export type TextureAssetId = string -- Monotone simulation timestamp in ticks. Range: 0…9007199254740991; Unit: tick export type Ticks = number -- The world clock reached a scheduled minute on a map. export type TimeReachedEvent = { -- Day of the clock, starting at 0. Range: 0…2147483647; Unit: count day: Count, -- Discriminant. kind: "time_reached", -- Instantiated map in which this event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Minute of the day that was reached. Range: 0…1439; Unit: minute minute: DayMinute, -- Schedule whose minute was reached. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: schedule schedule: ScheduleId } -- A timer an owner can set; fired only to its one binding and owner. export type TimerDefinition = { -- The binding of this package (event timer_fired, owner_from timer_owner) that receives it. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: binding binding: BindingId, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Kind of owner the timer is set for. owner_scope: OwnerScope } -- A timer of the receiving owner became due; it is removed when the event is created. export type TimerFiredEvent = { -- Discriminant. kind: "timer_fired", -- Owner the timer was set for. owner: OwnerRef, -- Timer that fired. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: timer timer: TimerId } -- Reference to timer content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: timer export type TimerId = string -- General engine mechanic selected by a tool. export type ToolAction = "melee" | "ranged" | "harvest" | "mine" | "repair" | "till" | "fish" -- One blow of a tool's rhythm. export type ToolBlow = { -- Damage dealt to a struck body. Range: 0…2147483647; Unit: hp damage: Count, -- Delay until the next blow may follow. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Push impulse on a body of standard weight. Range: 0…2147483647; Unit: mm/tick push_mm_per_tick: Count } -- What a held item does in anyone's hand: one mechanic, its reach, rhythm and blows. export type ToolDefinition = { -- General mechanic the tool drives; never chosen by its wielder. action: ToolAction, -- Ranged: item one shot takes from the wielder's inventory; without one in stock the tool does not shoot. Absent: shots need no ammunition. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: item ammo: (ItemId)?, -- Melee: cosine of half the swept arc in thousandths; 1000 strikes only straight ahead. Range: 0…1000; Unit: permille arc_permille: Permille, -- Blows of the rhythm in order; empty means the tool never strikes a body. Items: 0…16 combo: {ToolBlow}, -- Damage type of every blow and shot of this tool. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: damage_type damage_type: DamageTypeId, -- Status a hit of this tool applies to its target. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: status hit_status: (StatusId)?, -- Melee: bodies this close edge to edge are struck whatever the facing. Range: 0…2147483647; Unit: mm hug_mm: Distance, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Upward throw of a blow. Range: 0…2147483647; Unit: mm/tick lift_mm_per_tick: Count, -- Ranged: projectile the tool fires; required exactly for ranged tools. projectile: (ProjectileKind)?, -- Melee: edge-to-edge reach of a blow. Ranged: range of a shot. Work tools: reach of a stroke. Range: 0…2147483647; Unit: mm reach_mm: Distance, -- Recovery after an AI-controlled wielder's blow or shot. Range: 1…2147483647; Unit: tick recover_ticks: PositiveTicks, -- Ranged: delay from a human's attack to the projectile leaving. Range: 0…2147483647; Unit: tick release_ticks: DurationTicks, -- Damage one blow deals to a building or the hearth. Range: 0…2147483647; Unit: hp siege_damage: Count, -- Stamina one blow or shot costs its wielder, scaled by the power of the blow (a charged one costs more, a jab less); a wielder out of breath does not strike. Absent: blows cost nothing. Range: 1…2147483647; Unit: count stamina: (PositiveCount)?, -- Melee: most bodies one blow strikes, from one to three. Range: 1…2147483647; Unit: count targets: PositiveCount, -- Telegraph before an AI-controlled wielder's blow or shot. Range: 1…2147483647; Unit: tick windup_ticks: PositiveTicks } -- Reference to tool content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: tool export type ToolId = string -- Lifetime of a defeated transient actor before it is removed. export type TransientLifecycle = { -- Ticks a corpse remains before its final despawn. Range: 1…2147483647; Unit: tick corpse_ticks: PositiveTicks } -- Successful atomic item use or a localized rejection. export type UseResult = { -- Ordered effects committed atomically when every precondition holds. Items: 0…64 effects: {Effect}, -- Discriminant. outcome: "used" } | { -- Discriminant. outcome: "rejected", -- Localized rejection explanation shown once by the host. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text reason: TextKey } -- Sea coast of the valley: a low terraced cliff, a sand bay and the sea; the valley river falls over the cliff at the bay's edge straight into the sea. export type ValleyCoast = { -- Length of the sand bay along the coast, from the river's falls towards larger x; elsewhere the terraces end in the sea. Range: 1…2147483647; Unit: mm bay_length_mm: PositiveDistance, -- Mean width of the dry beach and the swash terrace between the cliff foot and the sea. Range: 1…2147483647; Unit: mm beach_width_mm: PositiveDistance, -- Mean z of the cliff edge on whole metres; the valley lies at smaller z, the sea beyond. Range: -2147483648…2147483647; Unit: mm cliff_z_mm: Millimeters, -- x of the climb: terraces of one block each lead from the cliff top down to the beach there. Range: -2147483648…2147483647; Unit: mm climb_x_mm: Millimeters, -- Terrain material of the cliff terraces and the fallen rocks. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: material rock_material: MaterialId, -- Terrain material of the beach and the sea bed. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: material sand_material: MaterialId, -- Sea surface height; at least one metre below the river surface. Range: -2147483648…2147483647; Unit: mm sea_level_mm: Millimeters, -- Terrain material of the turf on the upper terraces. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: material turf_material: MaterialId, -- Water material of the sea. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: material water_material: MaterialId } -- The valley landscape; its version selects the engine algorithm, an optional coast ends it at a sea cliff. export type ValleyTerrain = { -- Optional sea coast: cliff, beach and sea from the cliff line to the map edge at larger z. coast: (ValleyCoast)? } -- Typed state domain, bounds and virtual initial state. export type VariableDeclaration = { -- Virtual state used until an owner stores an explicit value. initial: boolean, -- Discriminant. type: "bool" } | { -- Virtual state used until an owner stores an explicit value. Range: -9007199254740991…9007199254740991; Unit: integer initial: SignedInt, -- Inclusive upper bound accepted by this declaration. Range: -9007199254740991…9007199254740991; Unit: integer max: SignedInt, -- Inclusive lower bound accepted by this declaration. Range: -9007199254740991…9007199254740991; Unit: integer min: SignedInt, -- Discriminant. type: "int" } | { -- Virtual state used until an owner stores an explicit value. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ initial: Name, -- Discriminant. type: "enum", -- Complete set of allowed symbolic members; duplicates are forbidden. Items: 1…4096; Unique entries values: {Name} } | { -- Virtual state used until an owner stores an explicit value. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ initial: ContentId, -- Exact definition category accepted by this content-ID parameter. target_kind: DefinitionKind, -- Discriminant. type: "content_id" } -- Package-owned state with a typed declaration and virtual initial value. export type VariableDefinition = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Kind of persistent owner allowed to store this variable. owner_scope: OwnerScope, -- Typed payload checked against its owning declaration. value: VariableDeclaration } -- Reference to variable content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: variable export type VariableId = string -- Selects the invocation owner or the shared world state. export type VariableOwner = "self" | "world" -- Owner-specific typed variable state supplied by a fixture. export type VariableSnapshot = { -- Resolved state owner for this invocation or snapshot entry. owner: OwnerRef, -- Typed payload checked against its owning declaration. value: StateValue, -- Variable declaration that determines type, scope and virtual initial state. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: variable variable: VariableId } -- A map anchor of the cutscene's timeline with its position. export type VisualAnchor = { -- The anchor (`package:map/anchor`). Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.anchor anchor: AnchorRef, -- Anchor coordinates in x, y, z order. Items: 3…3; Unit: mm position_mm: {Millimeters} } -- Camera pose of a presentation frame: eye and look point in world millimetres, vertical field of view. export type VisualCamera = { -- Eye position in x, y, z order. Items: 3…3; Unit: mm eye_mm: {Millimeters}, -- Vertical field of view. Range: 1000…179000; Unit: mdeg fov_mdeg: FovMillidegrees, -- Look-at point in x, y, z order. Items: 3…3; Unit: mm look_mm: {Millimeters} } -- Input of one stateless presentation evaluation: one viewer's view of a cutscene at an absolute time. Frames may be dropped or repeated. export type VisualFrame = { -- Every map anchor the timeline names, with its position. Items: 0…64 anchors: {VisualAnchor}, -- Width to height of the viewer's viewport. Range: 1…2147483647; Unit: permille aspect_permille: PositiveCount, -- The cutscene being shown. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: cutscene cutscene: CutsceneId, -- Length of the cutscene. Range: 0…2147483647; Unit: ms duration_ms: Milliseconds, -- Time since the cutscene started. Range: 0…2147483647; Unit: ms elapsed_ms: Milliseconds, -- The declarative timeline at this time; the fallback and base of the result. timeline: VisualTimeline, -- The player whose view evaluates the frame. Length: 1…256; Pattern: ^[\s\S]+$ viewer: PlayerRef } -- Result of one presentation evaluation; every absent field keeps the timeline's value. export type VisualResult = { -- Camera of this frame. camera: (VisualCamera)?, -- Black overlay strength of this frame. Range: 0…1000; Unit: permille fade_permille: (Permille)?, -- Subtitle of this frame; must be a text of the package data. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text subtitle: (TextKey)? } -- One step of a declarative cutscene timeline; no gameplay effects. export type VisualStep = { -- Start of the step. Range: 0…9007199254740991; Unit: tick at_ticks: Ticks, -- Length of the step. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Interpolation. easing: Easing, -- Anchor the camera starts at. Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.anchor from: AnchorRef, -- Discriminant. kind: "camera", -- Anchor the camera ends at. Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.anchor to: AnchorRef } | { -- Start of the step. Range: 0…9007199254740991; Unit: tick at_ticks: Ticks, -- Length of the step. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Discriminant. kind: "subtitle", -- Subtitle text. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text text: TextKey } | { -- Start of the step. Range: 0…9007199254740991; Unit: tick at_ticks: Ticks, -- Length of the step. Range: 1…2147483647; Unit: tick duration_ticks: PositiveTicks, -- Opacity at the start. Range: 0…1000; Unit: permille from_permille: Permille, -- Discriminant. kind: "fade", -- Opacity at the end. Range: 0…1000; Unit: permille to_permille: Permille } -- The declarative timeline evaluated at the frame's time: the values a script result overlays field by field. export type VisualTimeline = { -- Camera of the active camera step, if any. camera: (VisualCamera)?, -- Black overlay strength. Range: 0…1000; Unit: permille fade_permille: Permille, -- Subtitle of the active subtitle step, if any. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text subtitle: (TextKey)? } -- A figure's voice: the mumble's pitch and timbre and its recorded lines. export type VoiceDefinition = { -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Pitch of the mumble in thousandths of the standard voice. Range: 500…2000; Unit: permille pitch_permille: BodyScale, -- Recorded lines; a line without one is mumbled. Items: 0…4096 recordings: {Recording}, -- Brightness of the mumble, from round to reedy. Range: 0…1000; Unit: permille timbre_permille: Permille } -- Reference to voice content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: voice export type VoiceId = string -- Material and color used by indexed prefab cells. export type VoxelAppearance = { -- Red, green and blue appearance channels in that order. Items: 3…3 color: {ColorChannel}, -- Material definition used by these terrain or prefab cells. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: material material: MaterialId } -- Unique voxel coordinate, appearance index and visible-face mask. export type VoxelCell = { -- Zero-based index into this prefab's appearance table. Range: 0…254; Unit: count appearance: AppearanceIndex, -- Nonempty bit mask of the cell's eight occupied 125 mm subcells. Range: 1…255; Unit: count mask: FaceMask, -- Voxel cell coordinates in x, y, z order. Items: 3…3 xyz: {VoxelCoordinate} } -- Signed cell coordinate inside a prefab. Range: -32768…32767; Unit: integer export type VoxelCoordinate = number -- Kind of a body of water, as the engine tells it from the map. export type WaterKind = "river" | "lake" | "sea" -- How large and strong night waves grow and where they gather. export type WaveRules = { -- Each further online player counts this share of the first. Range: 0…1000; Unit: permille extra_player_permille: Permille, -- Ticks between two groups of a wave. Range: 1…2147483647; Unit: tick group_ticks: PositiveTicks, -- Groups a wave arrives in. Range: 1…2147483647; Unit: count groups: PositiveCount, -- The wave number added per player grows up to this wave. Range: 1…2147483647; Unit: count growth_until_wave: PositiveCount, -- Extra health of a wave's enemies per wave after the first. Range: 0…1000; Unit: permille health_step_permille: Permille, -- The health bonus grows up to this wave. Range: 1…2147483647; Unit: count health_until_wave: PositiveCount, -- Upper bound of a wave's enemies. Range: 1…2147483647; Unit: count max_enemies: PositiveCount, -- Enemies per player before the wave number is added. Range: 0…2147483647; Unit: count per_player: Count, -- Outer radius of the spawn ring around the hearth; at least the inner one. Range: 0…2147483647; Unit: mm ring_max_mm: Distance, -- Inner radius of the spawn ring around the hearth. Range: 0…2147483647; Unit: mm ring_min_mm: Distance } -- The weather of a map actually changed. export type WeatherChangedEvent = { -- Weather after the change. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: weather current: WeatherId, -- Discriminant. kind: "weather_changed", -- Instantiated map in which this event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Weather before the change. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: weather previous: WeatherId } -- Cloud, rain and wind settings for a weather state. export type WeatherDefinition = { -- Cloud coverage as thousandths of the sky. Range: 0…1000; Unit: permille cloud_permille: Permille, -- Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ id: ContentId, -- Engine look the client draws for this weather; unique within a climate. look: WeatherLook, -- Rain intensity as thousandths of the maximum. Range: 0…1000; Unit: permille rain_permille: Permille, -- Wind speed in millimeters per simulated second. Range: 0…2147483647; Unit: mm/s wind_mm_per_second: WindSpeed } -- Reference to weather content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: weather export type WeatherId = string -- Engine look of a weather state: sky, precipitation and wind the client draws. export type WeatherLook = "clear" | "wind" | "rain" | "snow" | "thunder" | "storm" -- One weather definition and its positive selection weight. export type WeatherWeight = { -- Weather definition selected by this weight. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: weather weather: WeatherId, -- Positive relative selection weight; need not be normalized. Range: 1…2147483647; Unit: count weight: PositiveCount } -- Wind distance per simulated second. Range: 0…2147483647; Unit: mm/s export type WindSpeed = number -- Reference to asset:world library content; resolution checks namespace and target kind. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: asset:world_library export type WorldLibraryId = string -- Opaque persistent world identity used by world-owned state. Length: 1…4096; Pattern: ^[\s\S]*$ export type WorldRef = string -- The world was created; delivered exactly once per world. export type WorldStartedEvent = { -- Discriminant. kind: "world_started", -- Instantiated map in which this event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef } -- A player entered a zone belonging to the referenced map. export type ZoneEnteredEvent = { -- Discriminant. kind: "zone_entered", -- Instantiated map in which this position or event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Player instance whose state or inventory the invocation may access. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Named map zone entered by the player. Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.zone zone: ZoneRef } -- Closed versioned terrain generator configuration. export type ZoneGenerator = { -- Discriminant. operation: "flat", -- Exact closed argument record supplied by the selected definition. parameters: FlatTerrain, -- Stable local salt separating this generator's deterministic seed stream. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ seed_salt: Name, -- Exact supported format or package version; no implicit upgrades. Range: 1…1; Unit: count version: FormatVersion } | { -- Discriminant. operation: "heightfield", -- Exact closed argument record supplied by the selected definition. parameters: HeightfieldTerrain, -- Stable local salt separating this generator's deterministic seed stream. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ seed_salt: Name, -- Exact supported format or package version; no implicit upgrades. Range: 1…1; Unit: count version: FormatVersion } | { -- Discriminant. operation: "scatter", -- Exact closed argument record supplied by the selected definition. parameters: ScatterTerrain, -- Stable local salt separating this generator's deterministic seed stream. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ seed_salt: Name, -- Exact supported format or package version; no implicit upgrades. Range: 1…1; Unit: count version: FormatVersion } | { -- Discriminant. operation: "river", -- Exact closed argument record supplied by the selected definition. parameters: RiverTerrain, -- Stable local salt separating this generator's deterministic seed stream. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ seed_salt: Name, -- Exact supported format or package version; no implicit upgrades. Range: 1…1; Unit: count version: FormatVersion } | { -- Discriminant. operation: "road", -- Exact closed argument record supplied by the selected definition. parameters: RoadTerrain, -- Stable local salt separating this generator's deterministic seed stream. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ seed_salt: Name, -- Exact supported format or package version; no implicit upgrades. Range: 1…1; Unit: count version: FormatVersion } | { -- Discriminant. operation: "valley", -- Exact closed argument record supplied by the selected definition. parameters: ValleyTerrain, -- Stable local salt separating this generator's deterministic seed stream. Length: 1…96; Pattern: ^[a-z][a-z0-9_]{0,95}$ seed_salt: Name, -- Exact supported format or package version; no implicit upgrades. Range: 1…1; Unit: count version: FormatVersion } -- A player left a zone of the referenced map. export type ZoneLeftEvent = { -- Discriminant. kind: "zone_left", -- Instantiated map in which this event occurs. Length: 1…256; Pattern: ^[\s\S]+$ map: MapRef, -- Player the event belongs to. Length: 1…256; Pattern: ^[\s\S]+$ player: PlayerRef, -- Named map zone the player left. Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.zone zone: ZoneRef } -- Zone precedence; overlapping zones require different priorities. Range: -2147483648…2147483647; Unit: integer export type ZonePriority = number -- Reference to map.zone content; resolution checks namespace and target kind. Length: 1…226; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}/[a-z][a-z0-9_]{0,95}$; Reference: map.zone export type ZoneRef = string return {}