# Talos main for AI Generated from the same sources as the agent knowledge pack (pack 6123005c3102). Read it once. For anything not here use the `argus-agent` tools (`explain.search`, `explain.rule`, `explain.component`, `explain.api`) or the full docs. ## What Talos is A game engine you drive yourself or through your AI assistant. A project is a folder with `argus.project.json` and scene files (`*.scene.json`): entities with components, validated by a contract of named rules. Game logic is TypeScript behaviours written against `@argus/api` (`ctx`), helpers in `@argus/gameplay`. The running engine serves a query API over HTTP, and `argus-agent` exposes tools over MCP (stdio). Units: metres, Y up, right-handed, forward is -Z; angles in radians unless a field says degrees. ## Agent tools (134, 40 in the default list) The default list, then the toolsets. - activity: Who else works on this project: the roster (agents and the… - behaviour.list: This project's behaviour modules, with what each says it… - behaviour.read: One project behaviour's source, by name or module name. - behaviour.write: [editor or disk] Write a TypeScript behaviour to… - build.apply: Turn files changed outside the workspace API (a save is… - build.status: [editor or service] What the workspace service made of the… - critic.check: Deterministic checks of the scene FILE (save editor edits… - critic.check_ui: UI critic over every screen on the stack across themes, UI… - critic.play: The playtester walks each goal entity in order with the… - editor.click: Press a control by drawn name: cursor move, press, release… - editor.controls: Every control the editor drew last frame, by name, with… - editor.start: [disk (starts an editor)] Start an editor on this project… - entity.add: [editor or disk] A new entity in the scene, as one undo… - entity.add_behaviour: [editor or disk] Attach a behaviour: a script component… - entity.reparent: [editor or disk] Reparent (null: root), keeping world… - entity.set_component: [editor or disk] Put this component on this entity… - example.behaviour: The smallest compiling behaviour module doing what you… - explain.api: One @argus/api symbol or @argus/gameplay helper: its… - explain.component: A component kind's fields (type, default, values), nested… - explain.rule: What a refusal's or finding's code means: severity… - explain.search: Find what the explain tools and argus:// resources hold… - export.compose: [disk (with a Ready build)] Compose the player's native… - notes.append: Record one thing about THIS project for the next session… - notes.read: What earlier sessions recorded about this project. - play.capture: Render a frame of the running game, overlays optional… - play.input: Press input-map actions through their bound keys, as the… - play.query: One request to Play's query API: /entities, /entity/{id}… - play.start: Play the open scene in the editor; waits until it runs. - play.step: Pause Play and advance exactly this many fixed ticks, to… - play.stop: End Play; back to authoring, scene and camera as they were. - project.create: Make a project from a template and take it as this… - project.open: Take this project as the session's, which every other tool… - revert: Undo one of your changes as a new revert change. - scene.list: Every scene in the project, the open one, and the one a… - scene.open: [editor or disk] Make this the open scene: the editor's… - scene.patch: [editor or disk] An RFC 6902 JSON Patch on the scene, ONE… - scene.read: [editor or disk] The scene as canonical JSON… - tools.enable: Add toolsets to this session's list. - ui.screens: [editor or disk] The stack bottom-first with each screen's… - ui.tree: The live UI tree across the screen stack: per node its… Toolsets (`tools.enable` adds one; its tools then list their own arguments): - assets: asset.derived, asset.import, asset.place, asset.reprocess, asset.ruler, entity.align, entity.fit_proxies, project.files - audio: audio.synth - buildings: bridge.generate, building.generate, building.kit, dress, network.grow, parcels.subdivide, settlement.generate, wall.generate - editor: editor.capture, editor.hover, editor.key, editor.set, editor.state, editor.type, entity.copy, entity.paste - foliage: foliage.generate, foliage.preset, foliage.preview, foliage.species, foliage.stats - kit: kit.check, kit.piece, kit.sheet - library: library.gate, library.generate, library.import, library.process, library.search, library.share - materials: material.compare, material.measure, material.preview, material.write - measure: play.measure, play.roads, play.save, road.edit, road.sample - music: music.add - prefabs: prefab, prefab.place - profile: play.desync, profile.blame, profile.capture, profile.diff, profile.explain, profile.view, replay.verify - release: export.info, export.run, plugin, project.settings.get, project.settings.set - selftest: critic.selftest - shaders: shader.library, shader.measure, shader.preview, shader.write - terrain: terrain.apply, terrain.create, terrain.edit, terrain.ops, terrain.preview, terrain.sample, terrain.stack, terrain.stats - ui: ui.activate, ui.focus, ui.input, ui.locale, ui.pop, ui.push, ui.scale, ui.schema, ui.theme, ui.viewport - vfx: vfx.describe, vfx.explain, vfx.patch, vfx.read, vfx.report, vfx.sheet - view: look.apply, view.render ## Scene components Fields marked * are required. The contract refuses unknown keys. - `animator`: asset*:string, states*:AnimState[], initial*:string, parameters:AnimParam[], events:AnimEvent[], ik:AnimIk[], pelvis:AnimPelvis, footLock:AnimFootLock, lookAt:AnimLookAt, retarget:AnimRetarget, layers:AnimLayer[], rootMotionFrom:string, feet:string[] - `attach`: to*:string, bone:string, socket:GripSocket, position:Vec3, rotation:Quat, activeWhile:string - `audio`: asset*:string, spatial*:boolean, loop*:boolean, volume*:number, autoplay:boolean, range:number - `buoyancy`: probes:BuoyancyProbe[], resolution:number, volumeScale:number, linearDrag:number, quadraticDrag:number, waterVelocity:boolean, angularDrag:number - `camera`: kind*:CameraKind, fov*:number, primary:boolean, target:string, distance:number, far:number, projection:CameraProjection, orthoSize:number, pixelsPerUnit:number, pixelSnap:boolean, referenceResolution:unknown[], pixelPerfect:boolean, priority:number, layers:string[], hideLayers:string[], output:CameraOutput, sensor:CameraSensor, viewport:unknown[], texture:CameraTexture, order:number, blendIn:CameraBlend, rig:CameraRigSettings - `collider`: shape*:ColliderShape, size:Vec3, radius:number, height:number, center:Vec3, isTrigger:boolean, material:PhysicsMaterial, detail:PhysicsColliderDetail - `controller`: kind*:ControllerKind, speed*:number, jump*:number, crouch:boolean, input:ControllerInputMode, inputBasis:ControllerInputBasis, gravity:number, maxFallSpeed:number, accel:number, decel:number, turnRate:number, step:number - `face`: blink:number, gaze:number, expression:number, headMotion:number, head:string, eyes:string[], seed:number - `foliage`: prototypes*:FoliagePrototype[], density:number, seed:integer, collisionLayout:InstanceCollisionLayout - `giVolume`: size*:Vec3, indirectIntensity*:number, blend:number, mode:GiVolumeMode, probeSpacing:number - `goal`: id*:string, labelKey*:string, order:number - `gradeVolume`: size:Vec3, unbound:boolean, look*:RenderLook, blend:number, priority:number, weight:number - `hud`: element*:HudElement, textKey:string - `hullMask`: center:Vec3, halfLength*:number, halfWidth*:number, bowLength:number, bowWidth:number, edgeSoftness:number, capHeight:number, skirtWidth:number, skirtCap:number - `instancedMesh`: asset*:string, material:string, materials:object, color:string, castShadow:boolean, receiveShadow:boolean, source*:string, colliderMode:ColliderMode, collisionLayout:InstanceCollisionLayout, customData:string[], cullDistance:number, cellSize:number - `joint`: kind*:JointKind, connectedTo:string, anchor:Vec3, connectedAnchor:Vec3, axis:Vec3, limits:Vec2, motor:JointMotor, collideConnected:boolean - `junction`: arms*:JunctionArm[], cornerRadiusM:number, stopLines:boolean, keepLeft:boolean, material:PhysicsMaterial - `label`: textKey*:string, size*:number, billboard*:boolean - `light`: kind*:LightKind, color*:string, intensity*:number, castShadow:boolean, range:number, angle:number, shadowTint:LightShadowTint, indirectIntensity:number - `lipsync`: track:string, gain:number - `mesh`: asset*:string, material:string, materials:object, color:string, castShadow:boolean, receiveShadow:boolean, colliderMode:ColliderMode, collide:boolean - `multirotor`: preset:MultirotorPreset, rotors:MultirotorRotor[], thrustToWeight:number, motorTime:number, dragArea:number, maxTilt:number, maxRate:number, maxYawRate:number, maxSpeed:number, maxClimb:number, maxDescent:number, endurance:number, mode:MultirotorMode, input:ControllerInputMode, propellers:string[] - `navagent`: radius*:number, speed*:number - `navarea`: walkable*:boolean - `navlink`: to*:Vec3, kind*:NavLinkKind, bidirectional:boolean, action:string, radius:number, hold:number - `particles`: preset:ParticlePreset, rate:number, color:string, material:string, class:string, effect:string, params:object - `rigidbody`: kind*:BodyKind, mass:number, friction:number, restitution:number, ccd:boolean, lockAxes:LockAxes, planar:boolean - `road`: source*:string, material:PhysicsMaterial, barrierMaterial:PhysicsMaterial - `script`: module*:string, props:object - `spawn`: for*:string, player:integer - `splat`: asset*:string, radianceNits:number, visible:boolean, axes:SplatAxes - `springBones`: chains*:SpringChain[], colliders:SpringCollider[] - `sprite`: frames*:SpriteFrame[], animations:SpriteAnimation[], animation:string, pixelsPerMetre:number, billboard:SpriteBillboard, anchor:Vec2, sortLayer:number, order:number, flipX:boolean, flipY:boolean, color:string, opacity:number, alphaCutoff:number, filter:SpriteFilter, lit:boolean, emissive:string, visible:boolean - `terrain`: source*:string, render:TerrainRenderMode, collision:TerrainCollisionMode, nav:boolean, groundCover:TerrainGroundCover, horizon:boolean - `terrainmod`: terrain:string, priority:integer, op*:TerrainOp - `tilemap`: tileset*:TilemapTileset, legend*:object, layers*:TilemapLayer[], cellSize:Vec2, alphaCutoff:number, filter:SpriteFilter, lit:boolean - `trigger`: event*:string, once:boolean - `uiPanel`: screen*:string, props:object, size*:Vec2, pixels:Vec2, lit:boolean, input:boolean - `vehicle`: preset:string, model:VehicleModel, chassis:VehicleChassis, wheels:string[], drivetrain:VehicleDrivetrain, brakes:VehicleBrakes, tyres:VehicleTyres, aero:VehicleAero, assists:VehicleAssists, steering:VehicleSteering, drift:VehicleDrift, handling:VehicleHandling, recovery:VehicleRecovery, contact:VehicleContact, offRoad:VehicleOffRoad, water:VehicleWater, input:ControllerInputMode - `water`: size*:Vec2, shape:WaterShape, windMps:number, windDirectionRad:number, seed:number, priority:number, look:LakeLook - `waterWake`: strength:number, halfLength:number, halfWidth:number, draft:number, armFoam:number, trailFoam:number, fillFoam:number, trailWidth:number, trailGrowth:number, trailMaxWidth:number, armLife:number, trailLife:number, fillLife:number, solve:WaterWakeSolve - `waterways`: terrain:string, rivers:boolean, waterfalls:boolean, lakes:boolean, look:WaterwaysLook, roughness:number, flowScale:number, foam:number, mist:number, overrides:WaterwaysOverride[] - `wheel`: radius:number, width:number, suspension:VehicleSuspension, tyre:VehicleTyres, inertia:number, steerable:number, driven:number, braked:number, handbrake:boolean, visuals:string[] - `xrOrigin`: mode:XrTrackingMode, eyeHeight:number ## Script API ### ctx (Ctx) - entity: EntityHandle - world: WorldQuery - nav: NavAgent | null - input: InputState | null - controller: Controller | null - animator: Animator | null - body: RigidBody | null - joint: Joint | null - vehicle: Vehicle | null - wheel: Wheel | null - sprite: Sprite | null - tilemap: Tilemap | null - data: DataHandle - events: EventBus - hud: HudHandle - ui: UiHandle - time: TimeInfo - xr: XrHandle - environment: EnvironmentInfo - water: WaterHandle - wind: WindHandle - camera: CameraHandle - players: PlayersHandle - views: ViewsHandle - audio: AudioHandle - particles: ParticlesHandle - labels: LabelsHandle - render: RenderHandle - screenEffects: ScreenEffectsHandle - strings: StringsHandle - save: SaveHandle - files: FilesHandle - session: SessionHandle - debug: DebugHandle - state: S - props: P - log(msg: string, data?: unknown): void ### ctx.entity (EntityHandle) - readonly id: string - readonly name: string - readonly tags: readonly string[] - readonly alive: boolean - position: Vec3 - readonly worldPosition: Vec3 - rotation: Quat - scale: Vec3 - translate(delta: Vec3): void - moveToward(target: Target, maxStep: number): boolean - distanceTo(target: Target): number - teleport(position: Vec3, yaw?: number): boolean - lookAt(target: Target, opts?: { flat?: boolean }): void - yaw: number - readonly forward: Vec3 - readonly right: Vec3 - readonly up: Vec3 - visible: boolean - readonly parent: EntityHandle | null - setParent(parent: EntityHandle | string | null, opts?: { keepWorld?: boolean }): void - setWaterWake(feed: WaterWakeFeed | null): boolean - fly(command: FlightCommand): boolean - flight(): FlightState | null - readonly children: EntityHandle[] - readonly body: RigidBodyView | null - readonly vehicle: VehicleView | null - hasTag(tag: string): boolean - hasComponent(type: string): boolean - component(type: string): Record | null - overrides(component: T): Partial | null - set(component: T, patch: WritableComponents[T]): void - despawn(): boolean ### ctx.world (WorldQuery) - query(filter?: QueryFilter): EntityHandle[] - find(id: string): EntityHandle | null - junction(id: string): Junction | null - readonly weather: { rain: number; wetness: number } | null - setWeather(weather: { rain?: number; wetness?: number }): void - road(id: string): RoadLine | null - instances(entity: string | EntityHandle): Instances | null - readonly count: number - raycast(from: Vec3, dir: Vec3, max?: number, opts?: CastOptions): Hit | null - raycastMany(from: Float32Array | number[], dir: Float32Array | number[], max?: number, opts?: CastOptions &… - positions(entities: readonly (string | EntityHandle)[]): Float32Array - nearestMany(from: Float32Array | number[], to: Float32Array | number[], radius: number): Int32Array - shapeCast(shape: CastShape, from: Vec3, dir: Vec3, max?: number, opts?: CastOptions): Hit | null - overlap(shape: CastShape, position: Vec3, rotation?: Quat, opts?: CastOptions): EntityHandle[] - overlaps(entity: EntityHandle | string): EntityHandle[] | null - setSensor(entity: EntityHandle | string, on: boolean): boolean - pick(from: Vec3, dir: Vec3, max?: number, opts?: PickOptions): Hit | null - hold(holder: EntityHandle | string, target: EntityHandle | string, opts?: HoldOptions): boolean - release(target: EntityHandle | string, opts?: ReleaseOptions): boolean - heldBy(target: EntityHandle | string): EntityHandle | null - holding(holder: EntityHandle | string): EntityHandle[] - path(from: Vec3, to: Vec3): Vec3[] | null - spawn(options: SpawnOptions): EntityHandle ### ctx.nav (NavAgent) - goTo(target: Target, speed?: number): void - stop(): void - readonly arrived: boolean - readonly stuck: boolean - readonly target: Vec3 | null ### ctx.input (InputState) - axis(name: string): Vec2 - axisParts(name: string): AxisParts - readonly pointer: InputPointer | null - action(name: string): ActionState - pressed(name: string): boolean - held(name: string): boolean - released(name: string): boolean - readonly context: string - setContext(name: string): boolean - actions(): string[] - bindings(action: string, context?: string): ActionBinding | null - rebind(action: string, binding: Binding, context?: string): void - resetBindings(): void - rumble(strength: number, seconds: number): void ### ctx.controller (Controller) - move(dir: Vec3, speed: number): void - jump(height?: number): void - crouch(on: boolean): void - setVelocity(v: Vec3): void - addVelocity(v: Vec3): void - readonly grounded: boolean - readonly velocity: Vec3 - readonly groundNormal: Vec3 | null - readonly groundEntity: EntityHandle | null - readonly groundVelocity: Vec3 - readonly squeezedBy: EntityHandle | null - readonly wallNormal: Vec3 | null - readonly blocked: boolean - gravityScale: number - moveWithGround: boolean ### ctx.animator (Animator) - set(state: string): void - readonly state: string | null - param(name: string, value: number): void - rootDelta(): Vec3 - groundSpeed(clip: string): number | null - window(name: string): boolean - bone(name: string, pose?: BonePoseKind | { pose?: BonePoseKind }): BonePose | null - ik(chain: string, target: Vec3 | EntityHandle | null, weight?: number): void - lookAt(target: Vec3 | EntityHandle | null): void - play(name: string, opts?: AnimatorPlayOptions): boolean - warp(opts: AnimatorWarpOptions | null): boolean - layerWeight(layer: string, weight?: number): number - setMorph(name: string, weight: number | null): number - morph(name: string): number - stopLayer(layer: string): void - speed: number ### ctx.events (EventBus) - emit(name: string, data?: unknown): void - emitTo(target: string | EntityHandle, name: string, data?: unknown): void - on(name: N, handler: (ev: GameEvent>) => void, opts?: ListenOptions): void - once(name: N, handler: (ev: GameEvent>) => void, opts?: ListenOptions): void - off(name: N, handler?: (ev: GameEvent>) => void): void ### ctx.hud (HudHandle) - set(field: HudField, value: string | number | null, options?: HudFieldOptions): void - objective(textKey: string): void - prompt(textKey: string | null): void - timer(seconds: number | null): void - score(value: number): void - hittable(field: HudField | string, on?: boolean): void ### ctx.time (TimeInfo) - readonly now: number - readonly frame: number - readonly dt: number - readonly scale: number - after(seconds: number, event: string, data?: unknown, opts?: AfterOptions): void ### ctx.camera (CameraHandle) - set(kind: CameraKind, params?: CameraParams): void - follow(target: EntityHandle | string | null): void - shake(amplitude: number, seconds?: number, frequency?: number): void - readonly yaw: number - readonly pitch: number - readonly viewYaw: number - readonly fov: number - readonly viewSize: ViewSize | null - screenToRay(x: number, y: number, view?: number): Ray | null - pick(x: number, y: number, opts?: CameraPickOptions): PickHit | null - worldToScreen(point: Vec3, view?: number): { x: number; y: number } | null - readonly arm: CameraArm ### ctx.audio (AudioHandle) - play(asset: string, opts?: AudioOptions): number - stop(handle: number): void - setPitch(handle: number, rate: number, opts?: AudioRampOptions): void - setVolume(handle: number, volume: number, opts?: AudioRampOptions): void - bus(name: AudioBus): AudioBusHandle - snapshot(name: string): boolean - listenFrom(mode: AudioListenFrom): void - setListenerPolicy(policy: AudioListenerPolicy): void - readonly music: AudioMusicHandle ### ctx.particles (ParticlesHandle) - emit(preset: ParticlePreset, at: Vec3, params?: Record): void - play(effect: string, at: Vec3, params?: Record): void - setParam(name: string, value: ParticleParamValue, target?: string | EntityHandle): boolean - burst(count: number, target?: string | EntityHandle, emitter?: string): boolean ### ctx.labels (LabelsHandle) - set(id: string, textKey: string, at: Target): void - clear(id: string): void ### ctx.render (RenderHandle) - setShaderParam(entity: EntityHandle, name: string, value: number | boolean): void - setMaterialParam(material: string, name: string, value: ShaderParamValue): void ### ctx.strings (StringsHandle) - get(key: string): string - has(key: string): boolean ### ctx.session (SessionHandle) - restart(): void - quit(): void - loadScene(path: string): void - pause(): void - resume(): void - paused(): boolean - scene(): string ## Rule codes Scene and critic findings, by severity. A message opens with its code. ### Error (232) - animator-blend-coverage: A blend tree's points do not cover its parameter space: two at one… - animator-blend-degenerate: A blend tree has too few points for its kind: fewer than two on a… - animator-blend-parameters: A blend tree reads the wrong number of parameters, one the animator… - animator-damp-invalid: An animator parameter's `damp` is negative (a smoothing time cannot… - animator-event-data-invalid: An animation event's `data` has too many keys or is too large. - animator-event-invalid: An animation event sits outside its clip (`at` not in 0..1), or names… - animator-event-window-invalid: An animation event's `until` / `untilFrame` is not a window: not above… - animator-feet-invalid: An `animator.feet` names fewer than two or more than four joints, an… - animator-ik-invalid: An IK chain has a duplicate name, a bone listed twice, both kinds of… - animator-initial-undefined: `animator.initial` is not one of the animator's state names. - animator-invalid: Animator states, transitions, blend trees, events and clips resolve - animator-layer-invalid: An animator layer that cannot be built: an empty or repeated name, a… - animator-look-at-invalid: A look-at has no bones, a bone listed twice, an empty bone name, a… - animator-loop-range-invalid: An animator state's or blend point's `loopStart`/`loopEnd` is outside… - animator-not-finite: A blend point, a parameter value, an animation event position or a… - animator-once-invalid: A one-shot state (`once`) loops, hands over to a state that does not… - animator-rest-pose-straight: A rig with foot IK rests with its legs bent enough to plant a foot… - animator-retarget-duplicate: Two of a retarget map's keys name the same bone of the target rig, so… - animator-retarget-unmapped: A retarget map leaves a bone the built-in clips animate unmapped… - animator-speed-invalid: An animator state's or blend point's `speed`, or a `speedParam.scale`… - animator-state-duplicate: Two of an animator's states share a name, so `initial` and every… - animator-state-source: An animator state has both a `clip` and a `blend`, or neither. - animator-transition-undefined: An animator transition targets a state that does not exist. - asset-builtin-unknown: An `assets[*].path` of `builtin:` names nothing built in: a… - asset-forward-invalid: An `assets[*].forward` sits on an asset that is not a model, so there… - asset-import-invalid: An `assets[*].import` declares a scale or an axis pair that cannot be… - asset-path-not-relative: An `assets[*].path` is absolute, names a drive, or climbs out with `..`. - attach-bone-or-socket: An `attach` that names both a `bone` and a grip `socket`, or neither… - attach-owner-missing: An `attach.to` that names no entity of the scene, or the attached… - attach-owner-no-animator: An `attach.to` that names an entity with no `animator` component, so… - buoyancy-without-body: A `buoyancy` component on an entity that has no `rigidbody` of kind… - buoyancy-without-ocean: A `buoyancy` component in a scene with no `meta.environment.ocean` and… - camera-layers-invalid: A camera sets both `layers` and `hideLayers`, or one of them is an… - camera-point-invalid: `GET /camera/project` or `GET /camera/ray` was given a missing or… - camera-projection-invalid: A `camera`'s `orthoSize` or `pixelsPerUnit`, or a side of its… - camera-rig-invalid: A camera's `rig`, `output`, `texture` or `blendIn` cannot work: a… - camera-view-unknown: `GET /camera/project` or `GET /camera/ray` named a `view` the running… - collider-material-invalid: A `collider.material` has a negative friction, a restitution outside… - controller-invalid: A `controller.gravity` is negative, a `controller.maxFallSpeed` is 0… - dangling-asset: An asset reference names a key that is not in `scene.assets`. - dangling-parent: `entity.parent` names an entity that is not in the scene. - dangling-ref: Asset, script, parent and target references resolve - dangling-target: `camera.target` names an entity that is not in the scene. - duplicate-entity-id: Two entities share an id. - face-invalid: A `face` that is wrong whatever the model is: no `animator` on the… - feel/action-window-unreachable: an action's cancel window (cancel, combo, chain) opens after the… - feel/anim-backwards: the character walks backwards: its planted foot is carried the body's… - feel/anim-bind-pose: a skinned character stood in its bind (T-)pose: no clip reached the… - feel/anim-foot-slide: the planted foot slid over the ground: the locomotion clip's pace does… - feel/anim-frozen: an animator's clip did not advance: the playhead and pose stayed still… - feel/anim-no-handle: a behavior read ctx.animator and got null (the engine's null-handle… - feel/anim-pop: a joint turned far more in one tick than on the ticks either side… - feel/anim-stuck: the body moved but the animator stayed in the state and clip it had… - feel/anim-unknown-name: ctx.animator.set or play named a state or clip this animator does not… - feel/buried: a body a script or kinematic body moves went more than 0.15 m into the… - feel/camera-clip: the camera's near plane was inside a collider: the frame showed the… - feel/camera-wall-collapse: walked into a wall, the camera's arm pulled in under 1 m though the… - feel/controls-dead: no stick direction moved the player (after the probe held input for… - feel/controls-rotated: a stick direction moved the player the wrong way on screen: over 30°… - feel/look-capped: mouse look has a top speed: a fast synthetic mouse sweep turned the… - feel/player-died-in-probe: the player died or respawned during a probe, so later rows are… - feel/teleport-facing-ignored: a tool's teleport with a heading faced the player at something, and a… - feel/viewmodel-static: the first-person view-model (an image in the lower middle of the… - floor-gap: No holes in the floor under the walkable areas or around a spawn - fog-density-and-visibility: `meta.environment.fog` writes both `density` and `visibilityM`, two… - fog-value-range: A `meta.environment.fog` value is outside its range (density 0..1… - gi-intensity-range: An `indirectIntensity` (`meta.environment.gi`, a light, or a… - gi-volume-shape: A `giVolume` that cannot be built: a `size` axis of 0 or less or not… - globe-provider-format: A globe provider file's `format` that does not fit its `kind`… - globe-provider-grid: A globe provider file's `grid` that is missing (heights and imagery… - globe-provider-host: A globe provider file's `url` whose host is not one of its `hosts`… - globe-provider-keyed-default: A globe provider file with `auth` (a key) whose… - globe-provider-template: A globe provider file's `url` that is not an `https://` address, or… - goal-order: Goals carrying `order` do not form the strict sequence 1..n. - grade-volume-shape: A `gradeVolume` that cannot be built: no `size` and not `unbound`, a… - ground-cover-layer-invalid: A ground cover layer or document with a value out of range: an empty… - ground-cover-no-terrain: A scene with ground cover and no terrain to grow it on. - ground-cover-source-unknown: A ground cover layer whose `source.channel` is not a channel of the… - ground-cover-too-dense: A ground cover layer whose `densityPerM2` is above 200. - hud-layout-invalid: A `meta.hud` element declares a size, colour, offset or number format… - joint-invalid: A `joint` that cannot be built: `connectedTo` names no entity, the… - junction-invalid: A `junction` with fewer than two arms (a through road counts twice)… - layer-unknown: An entity's `layer`, or a camera's `layers`, `hideLayers` or… - layers-in-project-scene: A scene inside a project declares `meta.layers`: the project's… - layers-invalid: A standalone scene's `meta.layers` is not a layer table: more than 32… - light-shadow-tint-range: A light's `shadowTint` with a `strength` that is not a finite number… - lipsync-invalid: A `lipsync` component that cannot move a mouth: its entity has no… - lipsync-track-unknown: `lipsync.track` names a scene asset whose kind is not `visemes`. - material-graph-cycle: The nodes of a `maskGraph` feed each other in a loop; the graph must… - material-graph-too-many-nodes: A `*.material.json` `maskGraph` has more than 32 nodes. - material-graph-unknown-node: A node of a `maskGraph` names (in `in`) or an output (in `layers`)… - material-height-from-mixed: The layers of one `*.material.json` that have `maskFrom.heightM`… - material-layer-needs-graph: A material with a `maskGraph` can have up to 6 layers (HD), but a… - material-mask-from-wear-both: A layer of a `*.material.json` has more than one of `maskFrom.edge`… - material-shader-missing: A `*.material.json` `shader` names no file the project holds, or its… - material-shader-param-range: A `*.material.json` `params` value is outside the `[min, max]` its… - material-shader-param-unknown: A `*.material.json` `params` key is not a `param` or `texture` the… - material-texture-invalid: A `*.material.json` texture reference is empty, absolute, names a… - material-value-range: A `*.material.json` number is outside its range or not finite: a… - missing-collider: Dynamic bodies have a collider; triggers have a trigger collider - multirotor-invalid: A `multirotor` needs 4 to 8 `rotors`, each `spin` 1 or -1. - multirotor-without-body: A `multirotor` without a dynamic `rigidbody`. - navlink-invalid: A `navlink.hold` is negative or not finite. - navmesh-failed: The navmesh builds and has polygons - navmesh-trap: No walkable region the player can get into and not out of - ocean-bathymetry-asset-missing: `meta.environment.ocean.bathymetry.asset` names an asset that is not… - ocean-bathymetry-not-16bit: The bathymetry asset is not a 16-bit greyscale PNG: not a `texture`… - ocean-bathymetry-range-invalid: A bathymetry value that cannot describe a raster: `sizeM` not above 0… - ocean-layer-field-mismatch: An ocean wave layer with fields of the other kind: `windSpeedMps` or… - ocean-swell-without-period: An ocean `swell` layer with no `periodS`: a swell is defined by its… - ocean-wave-mask-asset-missing: `meta.environment.ocean.waveMask.asset` names an asset that is not in… - ocean-wave-mask-not-greyscale: The wave mask asset is not a greyscale PNG: not a `texture` asset, or… - ocean-wave-mask-range-invalid: A wave mask value that cannot describe a raster: `sizeM` not above 0… - ocean-weather-not-ascending: A `meta.environment.ocean.weather` whose `timeS` values are not… - out-of-bounds: An entity's world position is outside `meta.bounds` (critic.check also… - over-budget: Triangles, draw calls, texture MB and dynamic bodies within meta.budgets - parent-cycle: Parent chain loops back on itself. - particles-source: Exactly one of `particles.preset` and `particles.effect` is required… - physics-quality-invalid: A `meta.physics.overrides` number is outside its range… - plant-material-missing: A foliage recipe whose `materials` names a project file that does not… - plant-param-invalid: A foliage recipe value the generator cannot take: a parameter that is… - plant-species-unknown: A foliage recipe whose `species` is not one of the closed species list. - plant-template-locked: A foliage recipe that sets a parameter its template locks, because… - plant-template-unknown: A foliage recipe whose `template` names no library or project template. - plant-too-heavy: A plant whose level-0 mesh has more than 150,000 triangles. - plant-variants-invalid: A foliage recipe with `variants` outside 1..64, or more than 8 `ages`. - play/bad-start: critic.play's from named no goal or entity of the scene, or the player… - play/fell-out: the player fell below the scene's bounds on the way to a goal - play/no-player: no entity carries a controller or a vehicle component, so the… - play/no-response: the playtester pressed every action the game declares, each one many… - play/nothing-to-drive: no entity carries a controller or a vehicle, and the input context in… - play/player-script-error: the player's own behaviour threw or overran its budget during the run… - play/stuck: the bot stopped moving on the way to a goal (blocked by an entity, or… - play/timeout: the run spent its simulated time budget before reaching every goal - play/trigger-noop: the player walked through a trigger volume and its event never fired - play/unknown-goal: critic.play was asked for a goal id the scene does not have - player-spawn: No entity carries a `spawn` component with `for: "player"`. - prefab-cycle: A prefab that contains itself, through `source` instances… - prefab-depth: Prefabs nested more than 8 levels deep (the scene instance's own… - prefab-id-collision: An instance expands to an entity id the scene already has, or its… - prefab-invalid: A prefab file that cannot be used: its shape, not exactly one root, an… - prefab-missing: A prefab instance's `source` does not resolve to a readable… - prefab-too-large: One instance that expands to more than 10,000 entities, counted as it… - primary-camera: The scene does not have exactly one camera with `primary: true`. - project-default-invalid: A scene rule's error on a value the scene takes from its project's… - render-value-range: `meta.render.exposure` is not more than 0 and at most 64, or… - scale-zero: A scale axis is exactly zero. - schema-shape: The document does not match the schema: wrong type, missing field… - shader-compile-error: The shader's WGSL does not compile (a name that does not exist, a type… - shader-cost-over-cap: The shader's static cost estimate (cost units per pixel, or texture… - shader-forbidden: The shader uses something the sandbox refuses: a module-scope `var`… - shader-header-invalid: A `*.shader.wgsl` header or file shape that cannot be read: an unknown… - shader-loop-unbounded: The shader has a `while` or `loop`, a `for` whose trip count is not a… - shader-model-mismatch: The functions and the `model` disagree: `model: stylized` without both… - shader-param-invalid: A `param` or `instance` header line that cannot be built: a name that… - shader-raw-disabled: A `*.shader.wgsl` says `kind: raw` or `kind: pass` (the escape hatch)… - shader-texture-invalid: A `texture` header line that cannot be built: a name that is not… - shader-variants-over-cap: The project's shaders compile to more pipeline families than the cap… - shot-keys-unordered: A path shot's key times are not strictly ascending, or a key is past… - shot-target-missing: A shot names an entity (`follow.entity`, a `look` or orbit `center`… - shots-invalid: A `meta.shots` timeline that cannot play as written: no shots or an… - sky-asset-wrong-kind: `sky.asset`, or the deprecated `envMap`, names an asset whose `kind`… - sky-hdr-needs-asset: `sky.kind` is `"hdr"` and no `sky.asset` names the panorama to use. - sky-value-range: A `sky` number is outside its stated range, or is NaN or infinite, or… - spring-collider-invalid: A `springBones` collider with a `radius` that is not above 0 and at… - spring-invalid: A `springBones` chain that is wrong whatever the rig is: it gives both… - sprite-frame-missing: A `sprite` name that resolves to nothing: an animation lists a frame… - sprite-invalid: A `sprite` that cannot draw as written: no frames; pixelsPerMetre, fps… - sprite-rotation-count-invalid: A `sprite` frame with a number of views other than 1 (the same from… - steering-gameplay: No behaviour reads ctx.controller.steering, which the engine removed - terrain-dem-missing: An `import.dem` op's DEM file cannot be read, or its SHA-256 is not… - terrain-extent-invalid: A terrain file whose `extentM` is not above zero on both axes, or is… - terrain-in-2d-scene: A `terrain` component in a 2D-kind project: terrain is a 3D feature. - terrain-layer-unknown: A `shoreline`, `material.rules`, `volume.shape` or `volume.cliff` op… - terrain-layers-too-many: A terrain file declares more than 8 `layers`. - terrain-multiple: A scene with more than one `terrain` component. - terrain-op-id-duplicate: Two ops of a terrain file's `stack` share an `id`. - terrain-sample-invalid: A terrain file's `sampleM`, or a `detail` entry's, that is not 0.25… - terrain-transform: An entity with a `terrain` component whose own transform is rotated or… - terrain-volume-invalid: A `volume.shape` or `volume.cliff` op cannot be built. - terrain-volume-order: A height or material op of a terrain file's `stack` comes after a… - terrainmod-no-terrain: A `terrainmod` whose `terrain` names no entity with a `terrain`… - tick-rate-invalid: `meta.tickRate` that is not a whole number from 1 to 240. - tilemap-invalid: A `tilemap` that cannot draw as written: a tileset image that is not a… - tilemap-tile-unknown: A `tilemap` tile that resolves to nothing: a legend index that is not… - tilemap-too-large: A `tilemap` too big to load in one piece: more than 16 layers, a layer… - transform-not-finite: A transform component is not finite (NaN or infinity). - ui-clipped: an interactive node a clipping ancestor cuts into - ui-expectation: the live tree is not what the component library meant to build - ui-field-no-label: an editable field with nothing saying what it is for - ui-font-face-missing: Every @font-face rule names a font file, and a bitmap font an atlas… - ui-matrix-refused: an engine refused a cell of the matrix - ui-no-way-back: a screen that takes input, cannot be dismissed, and has no way off it - ui-offscreen: an interactive node outside the viewport - ui-overlap: two interactive rectangles on top of each other - ui-panel-invalid: A `uiPanel` whose `size` entry is not finite, not above 0 or above 100… - ui-start-screen: `meta.ui.startScreen` is a name no `defineScreen` could have given a… - ui-undefined-token: a stylesheet reads a token a theme leaves undefined - ui-unknown-prop: a node that is not a text carries words, which nothing draws - ui-unreachable: a focusable node Tab and directional navigation never reach - unreachable-goal: Every goal is reachable from the player spawn - vehicle-invalid: A `vehicle` that cannot be built: an unknown `preset`; a part or field… - vfx-collide-invalid: A `*.vfx.json` `collide` module names no surface, a surface that is… - vfx-distort-invalid: A `*.vfx.json` sprite's `render.bend` is not a share of the screen in… - vfx-effect-missing: `particles.effect` names no effect: not a scene asset of kind… - vfx-event-invalid: A `*.vfx.json` emitter's `role` or `events` break the event rules: an… - vfx-expr-invalid: A `*.vfx.json` emitter's expressions are wrong: a string that does not… - vfx-extends-invalid: A `*.vfx.json` that `extends` a parent is wrong: an unknown preset, a… - vfx-gas-invalid: A `*.vfx.json` with `gas` cannot have one: it is also `shared`, or an… - vfx-inherit-invalid: A `*.vfx.json` emitter's `init.inherit` (the share of the emitter's… - vfx-max-screen-invalid: A `*.vfx.json` sprite's `render.maxScreen` is not a share of the… - vfx-min-screen-invalid: A `*.vfx.json` sprite's or ribbon's `render.minScreenPx` is not a… - vfx-param-invalid: A `*.vfx.json` binding names a param the effect does not declare, a… - vfx-preset-invalid: A `*.vfx.json` that names an effect preset (`"preset"… - vfx-render-invalid: A `*.vfx.json` emitter's `render` is wrong: more than 3 renderers or… - vfx-shape-invalid: A `*.vfx.json` sprite names an unknown `render.shape` (allowed: disc… - vfx-shared-invalid: A `*.vfx.json` with `shared: true` has an emitter that spawns by… - vfx-source-invalid: A `*.vfx.json` `mesh` or `image` shape names its file in a way that… - vfx-source-missing: A `*.vfx.json` `mesh` or `image` shape names a file that is not there… - vfx-stateless-invalid: A `*.vfx.json` emitter with `stateless: true` does something that… - vfx-texture-invalid: A `*.vfx.json` sprite texture is empty, absolute, names a drive or… - vfx-texture-missing: An export packs an effect (`*.vfx.json`) whose sprite, ribbon or decal… - vfx-value-range: A `*.vfx.json` number is outside its range, a curve or gradient has… - water-shape-invalid: A `water` component whose `size` has an axis that is not a finite… - water-waves-invalid: A `water` component with a wave value out of range: `windMps` outside… - watercraft-invalid: A `vehicle` `water` number out of its documented range (a negative… - watercraft-without-buoyancy: A `vehicle` with a `water` block on an entity with no `buoyancy`… - waterways-look-invalid: A `waterways` value out of range: `roughness` outside 0.02..0.15… - waterways-override-invalid: A `waterways` override that names none or more than one of river… - waterways-without-terrain: A `waterways` component with no terrain: `terrain` names no entity… - weather-invalid: An `environment.weather` with a `rain` or `wetness` outside 0..1, or a… - wheel-invalid: A `wheel` that cannot work: no dynamic rigidbody above it; a number… ### Warning (117) - air-out-of-range: `meta.environment.air` with a value outside its range: `density`… - animator-root-motion-source: A state with `rootMotion` reads a parameter bound to a… - audio-bus-unknown: Every bus meta.audio names is a bus meta.audio declares - audio-missing-file: Every sound the scene names is an audio asset that exists - audio-orphan: Spatial audio sits on something with a position you can see - behavior-position-ignores-teleport: A behaviour that writes a position every tick from its own state… - behavior-wrap-drops-event: A behaviour that runs another's init or update forwards its onEvent too - camera-clip: The camera's default position is not inside or behind geometry - camera-hides-everything: A camera's `layers` / `hideLayers` leaves out every layer the scene's… - camera-priority-tie: Two or more screen cameras share the top priority and none of them is… - character-unanimated: A skinned character with a controller has an animator whose states… - collider-detail-ignored: A `collider.detail` sits where nothing reads it: on a box, sphere or… - dynamic-needs-collider: A `rigidbody` of kind `dynamic` has no non-trigger collider. - feel/action-out-of-reach: an action's hit volume (an attached trigger collider) never came… - feel/anim-loop-seam: a looping state plays a clip whose last frame does not meet its first… - feel/anim-no-air-state: the character left the ground and the animator kept its grounded… - feel/anim-run-in-place: a walk or run clip played while the body stood still (not reported for… - feel/anim-slow-response: the player's animator answered a press (move or jump) more than 6… - feel/audio-loops-stacked: three or more copies of one loop played at once with none placed in… - feel/audio-none: the scene has gameplay events (a jump, goals, triggers, emitted… - feel/audio-silent: not one voice started: the player jumped or reached goals, or 30 s… - feel/audio-unplayable: the game called ctx.audio.play for assets with no sound behind them… - feel/camera-close: the camera sat within 0.3 m of solid geometry in more than 15% of… - feel/camera-collapsed: the camera's arm (or its distance to the player) was under 1 m in more… - feel/camera-occluded: something solid hid the player from the camera for longer than a second - feel/camera-target-hidden: the focus target (the lock target, else the nearest opponent, else the… - feel/facing-actions-silent: the aimed buttons (fire, use, interact) raised no event once a… - feel/impact-no-reaction: the victim of an impact did not react within 300 ms: it moved under 5… - feel/impact-silent: an impact (the player's sensor on something, another character's… - feel/movement-facing-off: at steady speed the character faced over 60 degrees off the way it… - feel/movement-slippery: the walker took over 1.5 s to stop after the stick was let go: it slides - feel/movement-sluggish: the walker took over 1.5 s to reach 90% of its top speed with the… - feel/movement-steer-dead: a full steer at 90% of top speed turned the vehicle under 3 deg/s: the… - feel/movement-turn-slow: the character turned under 60 deg/s to a 90 degree stick flick at… - feel/player-fell-off: the player walked off the level and fell (nothing under it), so the… - feel/response-dead: pressing a gameplay action changed nothing in half a second: no bus… - feel/response-slow: a gameplay action's press was answered (animator state, pose, velocity… - feel/roll-mismatch: a ball moving along the ground spun against its travel (backwards… - feel/telegraph-unreactable: another character's strike opened less than 250 ms (a person's… - gi-volume-limit: More than 8 `giVolume` components of one mode; only the first 8 in… - grade-volume-limit: More than 16 `gradeVolume` components; only the first 16 in scene… - hd-only-ignored: A field or component only the HD renderer draws (a `splat` component)… - hull-mask-out-of-range: A `hullMask` with a value outside its range: `halfLength` outside… - input-conflict: No two actions in one context share a device source - input-key-unknown: A `meta.input` key name the runtime binds nothing to ("Back"… - input-reader-not-player: A behaviour that reads `ctx.input` runs on an entity player input is… - input-unbound: Every action a script reads is bound by the scene's action map - light-directional-horizontal: Every directional light in the scene lies within 5 degrees of the… - light-shadow-tint-ignored: A `shadowTint` on a point or spot light: only a directional light's… - lighting-map-unlit: A `sprite` with a `normalImage`, an `emissiveImage` or `emissive`, or… - material-field-ignored: A `*.material.json` field that nothing reads: `alphaCutoff` without… - material-graph-over-budget: A material with a `maskGraph` costs more than an HD budget tier allows… - mesh-collide-conflict: A mesh's `colliderMode` and its deprecated `collide` disagree. - missing-string: Every text key resolves in meta.strings - multirotor-out-of-range: A `multirotor` number out of range; the engine clamps it. - nav-undeclared: A `navlink` in a scene that declares no navigation (no `meta.nav`, no… - ocean-shore-without-bathymetry: `meta.environment.ocean.shore` sets `shoaling` or `breakerIndex`… - ocean-wind-out-of-range: An ocean wind or fetch outside its range (wind above 60 m/s or below… - outliner-folder-stale: Every Outliner folder entry names a root entity - outliner-folder-unknown-entity: A `meta.outliner.folders` entry names no root entity: no entity has… - play/dead-button: a menu button that, pressed, changed nothing: no screen opened or… - play/dialog-never-closes: a blocking dialog kept turning pages (each press changed what it… - play/drive-hits: a driven player hit obstacles (entities tagged cone, pylon, barrier… - play/ended-early: the game put up a screen that owns the input and could not be answered… - play/interaction-noop: the bot walked to an interactable, pressed interact, and nothing… - play/interaction-unreached: the interaction sweep could not walk to an interactable or a trigger… - play/menu-dead-end: a screen reached from the menus that neither Back nor any of its… - play/no-goals: the scene has no goal component, so the playtester had nowhere to… - play/over-budget: at the pace the run was making, the goals left would not fit in the… - play/script-error: a behaviour other than the player's threw or overran its budget during… - play/softlock: no progress toward a goal and no change anywhere in the world for a… - play/untested-flows: the scene has no goal component and its project has no self-test… - prefab-override-stale: Every prefab override still points at something in its prefab - prefab-override-unknown: An override on an instance does not apply to its prefab: no such… - render-clouds-without-atmosphere: `sky.clouds` is set on a sky whose `kind` is not `"atmosphere"` (no… - render-field-ignored: A `meta.environment.fog` field its mode does not read: density or… - render-ocean-without-hd: `meta.environment.ocean` in a project whose `render.profile` is not… - render-waterways-without-hd: A `waterways` component in a project whose `render.profile` is a known… - ripples-out-of-range: `meta.environment.ripples` with a value outside its range: `cells`… - scene-over-triangle-budget: The scene's meshes add up to more full-detail triangles (each mesh at… - shader-cost-high: The shader's static cost estimate is over the soft cap for the… - shot-blend-long: A shot's `blendIn.time` is longer than the shot, so the blend never… - sky-color-ignored: `meta.environment.skyColor` is set and the sky is not `"kind"… - sky-envmap-conflict: `sky.asset` and the deprecated `envMap` name different assets. - spring-needs-animator: A `springBones` on an entity with no `animator`: there is no skeleton… - static-overlap: Static trimeshes do not intersect - terrain/entity-buried: a collider's base is more than 0.25 m under the terrain's ground at… - terrain/entity-floating: a static collider's base is more than 0.5 m above the terrain's ground… - terrain/look-far-ground-off: the terrain is over a kilometre across and surface.groundDetail is… - terrain/look-far-rock-off: more than 1% of the terrain is steeper than 35 degrees and… - terrain/look-rock-detail-off: more than 1% of the terrain is steeper than 35 degrees and… - terrain/look-tint-clamped: a terrain layer's tint is over 4 on a channel: the renderer clamps… - terrain/road-buried: a stretch of road (its centre, its edges and the footprint of each… - terrain/spawn-slope: a spawn stands on ground steeper than a character can stand on (the… - tick-rate-low: `meta.tickRate` below 15 ticks a second: motion, physics contacts and… - trigger-needs-trigger-collider: A `trigger` component sits on an entity with no `isTrigger` collider. - trigger-volume-unheard: A trigger volume that behaviours listen for has a trigger component - ui-colour-only: a state that differs from its siblings only in colour - ui-contrast: text below the minimum contrast against its resolved background - ui-default-font: The game's screens draw in a face of its own, not only the engine's… - ui-ellipsis: text cut off by an ellipsis, a line limit or a clip, where the rest of… - ui-locale-gap: a key the base table has and this locale does not translate - ui-missing-string: a text key with no string in this locale - ui-reduced-motion: a transition still running when reduced motion is on - ui-relayout: a node relaid out between two frames with nothing touched - ui-scroll-hidden: a container that clips content it cannot scroll to - ui-target-size: an interactive target below the minimum size - ui-text-overflow: text that does not fit the box it was laid out into - ui-untranslated: a visible string with no key, in a locale that cannot translate it - unlit: Something lights the scene - vehicle-cannot-steer-or-brake: No wheel has `steerable` above 0, or none has `braked` above 0. - vehicle-capability-absent: The scene carries a `vehicle` component and this build of the engine… - vehicle-geometry: A wheel sits outside the chassis collider's bounds, a wheel's… - vehicle-needs-dynamic-body: The entity has no dynamic rigidbody, or no non-trigger collider, so… - vehicle-value-implausible: A wheel radius outside 0.15..0.6 m or a chassis mass outside 400..8000… - vfx-capacity-short: A `*.vfx.json` emitter's `capacity` is under the slots it can ask for… - water-wake-out-of-range: A `waterWake` with a value outside its range: `strength` outside 0..1… ### Info (11) - feel/audio-jump-silent: the jump made no sound, though the game plays sounds elsewhere - feel/skipped: a feel probe could not run on this scene and says why - instanced-mesh-candidate: No <…> or more copies of one static mesh written out as separate… - play/quit: the game called ctx.session.quit() during the run; a headless engine… - play/respawned: the game moved the player somewhere at once on the way to a goal (a… - prefab-candidate: No <…> or more identical entities written out one by one - prefab-depth-high: No instance nests prefabs more than <…> levels deep - prefab-override-redundant: No prefab override repeats the prefab's own value - prefab-override-shadowed: No override stored in a nested prefab is hidden by the instance's own - prefab-unused: Every prefab file is placed in a scene or named by a script - scene-unorganized: A big scene is filed into Outliner folders ## Runtime codes What a script is thrown, a query refuses with, or the log prints. A code that is also a rule code is listed there. - input-unknown-action: the context (the live one, or the one `rebind` named) binds no… - input-unknown-context: `ctx.input.rebind` or `bindings` named a context the scene's… - input-unknown-key: a `keys` entry, or a `key:`-prefixed token, is not a key name - input-unknown-binding: a bare token matched no device, or a `pad:`/`mouse:` name is… - input-binding-arity: the wrong number of keys for the action's kind: a 2D axis… - input-no-map: this world has no action map, so there is nothing to rebind - save-bad-key: the key is not 1 to 64 characters of `A-Z a-z 0-9 . - save-full: writing the value would take the save file past its size limit - files-path-refused: the path is not a file under the project's `data/` folder: it… - files-missing: the project has no file at that path, the path names a folder… - files-too-large: the file is over 1 MiB, the most `ctx.files` reads - files-not-text: the file is not UTF-8 text - files-bad-json: `readJson` was given a file that is not JSON; the message has… - entity-despawned: a handle kept across frames names an entity that has since… - entity.not-finite: `entity.yaw` was set to NaN or an infinite number… - entity.parent-cycle: `entity.setParent` was given this entity or one of its… - entity.parent-despawned: `entity.setParent` was given a handle whose entity has been… - entity.parent-unknown: `entity.setParent` was given a scene id no live entity has… - component-absent: the entity has no component of that kind to read or write… - component-not-writable: that component cannot be written at run time; `entity.set`… - component-field-unknown: the component has no writable field by that name - component-field-type: a field was given a value of the wrong type (a colour that is… - spawn-no-source: `ctx.world.spawn` was called with neither `like` nor `prefab`… - spawn-two-sources: `ctx.world.spawn` was given both `like` and `prefab`; it… - spawn-unknown-source: no live entity has the id `like` names; spawn copies an entity… - spawn-unknown-prefab: `prefab` names no prefab file of the scene's project, or one… - spawn-prefab-cycle: `prefab` names a prefab that nests itself, directly or through… - spawn-bad-override: an `overrides` key does not apply to the prefab (no such… - spawn-duplicate-id: the `id` asked for is empty or already taken by a live entity - spawn-unsupported: this world cannot spawn entities (a headless or mock world) - animator-play-unknown: `play` named a state, or a `then`, the animator does not have… - animator-play-invalid: a `blend` or `blendOut` time is negative or not a number… - animator-param-unknown: the animator declares no parameter by that name, or the entity… - animator-ik-unknown: the animator declares no IK chain by that name, or the entity… - animator-look-at-missing: the animator component declares no `lookAt`, or the entity has… - animator-layer-unknown: `play(name, { layer })`, `layerWeight` or `stopLayer` named a… - animator-morph-unknown: `ctx.animator.setMorph` or `morph` named a morph channel the… - animator-layer-bone-unknown: a layer's `mask` (`include`, `exclude` or `weights`) names a… - animator-loop-seam: a looping state plays a clip whose last frame is far from its… - animator-stride-rate: a point of a stride-matched blend tree plays at more than 3x… - animator-clip-missing: an animator state's `clip` is not a clip of the asset nor of… - animator-window-unreachable: a one-shot state (`once`, or `ctx.animator.play` with… - animator-retarget-clips-invalid: an asset in `retarget.clips` has no skeleton and clips, or its… - animator-retarget-suspect: the retarget map is legal but probably wrong: its left and… - animator-root-motion-hips: a `rootMotion` state plays a clip whose root does not travel… - animator-root-motion-joint-missing: the animator's `rootMotionFrom` names a joint the rig does not… - animator-transition-unheard: an animator has transitions whose `on` nothing hands to it… - animator-unknown: `set` named a state the animator does not have, so nothing… - sprite-play-unknown: `play` named an animation the sprite's component does not… - sprite-frame-unknown: `ctx.sprite.frame` was set to a name no frame of the sprite has - sprite-image-missing: a sprite picture's asset did not load: it is not in… - sprite-map-size: a sprite's `normalImage` or `emissiveImage`, or a tileset's… - sprite-rect-outside: a view's `rect` reaches outside its image, so it was clamped… - tilemap-layer-unknown: `ctx.tilemap.get`, `set` or `size` named a layer the component… - tilemap-sheet-short: the tileset image is smaller than `grid` × `tileSize` (with… - scene-load-failed: a scene switch was refused and the current scene is still… - scene-no-root: this world was opened from a document, not a file, so it has… - scene-path-refused: the scene path breaks a project-path rule (absolute, `..`… - scene-missing: there is no scene file at that path in this project - scene-invalid: the scene file is not a valid scene; the message lists the… - script-import: a behaviour imports something the engine does not bundle: an… - author-failed: an authoring script (`authoring/.ts`, run by… - data.record: `ctx.data.record(name, value)` was given a name that is not 1… - script-error: a behaviour threw, ran away (work budget or hard cap) or was… - web-unsupported: a behaviour running in the web runtime called a `ctx` member… - script-warning: a behaviour did something the engine accepted but that is… - camera-fov-overrides-scene: a script's `ctx.camera.set(kind, { fov })` differs from the… - camera-probe-wider-than-body: `ctx.camera.set`'s `probeRadius` is wider than the body the… - views-layout-unknown: `ctx.views.setLayout` was given a name that is not a layout… - views-out-of-range: a `ctx.views` member was given a view number that is not a… - camera-overlay-not-drawn: the scene has a camera with `output: "overlay"`, which the… - audio-loops-stacked: three or more loops of one sound play at once with none placed… - audio-reach-invalid: `ctx.audio.play` was given a `range` or `lowPassAtRange` that… - particles-override-ignored: a `ctx.particles.emit` override key is not a particle… - particles-param-unknown: an effect param was not applied: the `particles` component's… - particles-effect-unknown: `ctx.particles.play` named an effect the scene did not load… - particles-texture-missing: a `*.vfx.json` emitter's sprite texture did not load, so that… - particles-shape-missing: a `*.vfx.json` `mesh` or `image` shape could not be baked from… - particles-collide-unavailable: a `*.vfx.json` effect has a `collide` module, but the engine… - teleport-heading-ignored: a tool's `POST /entity/{id}/teleport` gave the character the… - behaviour-prop-unknown: a `class X extends Behaviour` was given a script prop with no… - behaviour-hook-unknown: a `class X extends Behaviour` has a method `Behaviour` never… - behaviour-detached: a `Behaviour` instance's engine members were used on an… - input-read-without-routing: A behaviour read `ctx.input` on an entity that has the handle… - script-unknown-hook: a behaviour's default export has a member named like another… - script-module-state: a behaviour's `update`, `updateAll`, `pausedUpdate` or an… - script-state-handle: a behaviour keeps an engine object, such as an entity handle… - resim-mismatch: the re-simulate-twice check (`POST /desync { "resim": true… - xr.hand-unknown: `ctx.xr.hand` or `ctx.xr.vibrate` was given a hand other than… - xr.vibrate-invalid: `ctx.xr.vibrate` was given `seconds` or `frequency` that are… - time.after-invalid: `ctx.time.after` was given seconds that are negative or not… - null-handle: a behaviour read `ctx.animator`, `ctx.controller`, `ctx.nav`… - script-call-inapplicable: a behaviour called `entity.visible = …` on an entity with no… - teleport-position-ignored: a tool's teleport (`POST /entity/{id}/teleport`, an editor… - body.not-finite: a `ctx.body` force, torque, impulse or point has a NaN or… - body.velocity-not-dynamic: `ctx.body.velocity` was assigned on a kinematic or static… - body.space-invalid: a `ctx.body` push was given a `space` other than `"world"` or… - joint.motor-invalid: `ctx.joint.setMotor` was given a target that is not finite, a… - joint.limits-invalid: `ctx.joint.setLimits` was given something other than `[min… - physics.layer-unknown: an entity's `layer` (or a camera's `layers`, `hideLayers` or… - physics.controller-enclosed: a character's `controller` capsule as the scene placed it… - physics.mesh-collider-moved: an entity with a mesh collider moved after the collider was… - vehicle.not-finite: `ctx.vehicle.drive` was given a `throttle`, `brake`, `steer`… - vehicle.boost-invalid: `vehicle.boost(speed, seconds)` was given a `speed` or… - vehicle.not-own: `drive`, `reset` or `wheels` through another entity's vehicle… - vehicle.flight-invalid: `entity.fly` got an unknown field or a wrong value… - body.not-own: `wheels` through another entity's body (`other.body` in a… - wheel.not-finite: `ctx.wheel.setMotorTorque`, `setBrakeTorque`, `setSteer` or… - wheel.tyre-invalid: `ctx.wheel.setTyre` was given a negative `grip` or `rolling` - world.weather-invalid: `ctx.world.setWeather` was given a `rain` or `wetness` outside… - fluid.sample-invalid: `ctx.water.sample`, `ctx.wind.sample`, `ctx.water.poke` or… - water.sea-invalid: `ctx.water.setSea` was given something it cannot use: no… - wind.set-invalid: `ctx.wind.set` was given something that is not an object of… - physics.buoyancy.probe-cap: a `buoyancy` hull asked for more than 256 probes (an `auto`… - physics.water.lake-cap: the scene has more than 4 `water` components; only the 4 with… - physics.water.river-cap: the terrain's hydrology has more than 32 rivers or 256 k… - render.hd.water.river-id-unknown: a `waterways` override names a river, waterfall or lake id the… - render.hd.water.river-junction-gap: a tributary ends more than 5 cm above or below the river it… - render.hd.water.river-flow-inconsistent: for one river the discharge its drawn geometry carries (width… - physics.buoyancy.force-refused: the solver refused a buoyancy force on a body that should be… - render.camera-texture-missing: a material names `"camera:"` as a texture, but the scene… - render.hd.unavailable: the HD renderer could not start on this device, so the… - project-kind-2d-hd: a project with `kind` `"2d"` asks for `render.profile` `"hd"`… - render-backend-forced-unavailable: the project forces a graphics backend (`render.backend`… - render.hd.black_frame: an HD frame read back for `--record`, `--out` or a capture… - render.hd.rt_unavailable: the device or build has no ray tracing, so HD3 ray-traced… - render.hd.rt_mesh_too_large: a mesh's geometry does not fit HD's ray-tracing vertex and… - render.hd.rt_mesh_proxied: a static mesh's geometry does not fit HD's ray-tracing vertex… - render.hd.cloud_shadow_unavailable: the device allows fewer than 17 sampled textures per shader… - render.hd.horizon_map_unavailable: the device allows fewer than 18 sampled textures per shader… - render.hd.vg_streaming_auto: the virtual-geometry meshes' pages no longer fit one resident… - render.hd.vg_resident_full: a headless run, capture or `--record` keeps frames exact, so… - render-lut-missing: `meta.render.look.lut` names a `.cube` file that is not in the… - render-lut-invalid: `meta.render.look.lut`'s file is not a 3D `.cube` LUT (a 1D… - render-tonemap-substituted: `meta.render.tonemap` names a curve the renderer does not… - render.hd.rt-proxy-invalid: a virtual-geometry mesh was given its own ray-tracing proxy… - render.hd.rt-deform-over-budget: swaying virtual-geometry instances within the ray-tracing… - render.hd.screen-fx-views: a frame of several views (a headset's stereo pair) on HD… - render.hd.pass-point-skipped: a `kind: pass` escape-hatch shader at `afterOpaque` or… - render.standard.layer-mask-from-ignored: a material file's layer has `maskFrom` reading the mesh's… - render.uv-scroll-ignored: a material file sets `uvScroll` but is drawn by a renderer… - material-graph-variants: more than 16 distinct material `maskGraph`s are in the scene… - material-layer-rows: a material asks for more than 3 layers (through a `maskGraph`)… - render.hd.shading_substituted: a material draws with vertex (Gouraud) shading… - render.hd.splat_format: a Gaussian splat file is not one the loader reads (not a 3DGS… - render.hd.splat_truncated: a Gaussian splat file ends before the data its header… - render.hd.splat_too_large: a splat capture has more splats than one HD renderer holds… - render.sky.background_hd: a scene's `sky.background` is drawn by the standard renderer… - splat-view-outside: the camera stood more than 1 m outside where a `splat` capture… - quality-value-out-of-range: a quality knob was outside its range and was clamped - quality-value-not-finite: a quality knob was NaN or infinite and the preset's value was… - quality-value-not-a-step: a quality knob was in range but not one of its steps (a shadow… - quality-unsupported-on-device: the GPU cannot do what the knob asks, so it fell back to what… - quality-custom-defaults: a custom quality profile without `basedOn` left out optional… - quality-custom-missing: the preset is Custom and no Custom knobs were given, so High… - quality-not-available-in-renderer: this renderer has no path for that value yet, so the knob fell… - quality-value-unknown: a quality knob named a value this engine does not know (a… - look-value-out-of-range: a camera look (post-processing) value was outside its range… - look-value-not-finite: a camera look value was NaN or infinite and its default was used - look-range-inverted: a look range's minimum was above its maximum; the maximum was… - look-lut-path-empty: a colour LUT was given with no path, so it was dropped - render-decal-value-out-of-range: a decal value was outside its range and was clamped - render-decal-value-not-finite: a decal value was NaN or infinite and its default was used - render-decal-range-inverted: a decal fade ended before it started; the end was moved to the… - render-decal-rotation-not-unit: a decal rotation was not a unit quaternion and was normalised… - render-decal-texture-unknown: a decal named a texture that was never registered, so that… - render-decals-over-budget: more decals than the budget; the lowest-priority ones were… - render-decals-unsupported: the device cannot run the decal pass, so no decal is drawn - render.shader.fallback: a user shader's pipeline failed to compile, once per shader… - render.shader.reload-failed: an edited shader's new version could not replace the running… - render.shader.param-dropped: a hot reload changed a param's type (a colour became a number… - render.shader.compiled-after-load: a user shader's pipeline was first compiled after the scene… - render.shader.downgraded: a shader effect this device or renderer cannot draw was… - render.shader.vg-skipped: a mesh whose shader has `vertex()` is drawn by HD's raster… - render.shader.families-many: more shader families are visible than the advised count for… - render.hd.user-shader-partial: HD draws a user shader family in some paths and not in others… - render.hd.user-rt-static: HD's ray-traced paths (reflections, global illumination… - render.screen-effect: a screen effect listed in the scene's render settings was… - screen-effects.param-invalid: `ctx.screenEffects.setParam` was given an `effect` that is… - screen-effects.param-refused: a `ctx.screenEffects.setParam` write is not drawn: the scene… - environment.override-invalid: `ctx.environment.override` was given something that is not a… - environment.override-refused: the environment a `ctx.environment.override` makes breaks a… - bad_request: 400: the body or query parameters are wrong; the message… - not_found: 404: the named entity, frame or navmesh does not exist - unsupported: 501: this engine or source does not implement that endpoint - timeout: 503: the simulation did not answer in time (paused in a… - unavailable: 503: the command queue is full or the simulation is shutting… - at_capacity: 503: a bounded resource is full, so the request was refused… - internal: 500: the engine failed while answering - stale_stamp: 409: an exact read named a committed state the server no… - session_mismatch: 409: the session id or nonce is another server's (a restarted… - capability_denied: 403: the session does not grant what the endpoint needs - session_required: 428: this endpoint needs a session identity and the request… - host_rejected: 403: the `Host` header does not name this server by a loopback… - origin_rejected: 403: the request came from a web page on another site (`Origin`) - unsupported_media_type: 415: a POST body that is not `Content-Type: application/json` - nav-bounds-required: 400 on `GET /navmesh`: the navmesh has more polygons than one… - nav-bounds-too-large: 400 on `GET /navmesh`: more polygons fall inside the bounds… - ui.unavailable: this world has no UI runtime, so every `ctx.ui` call is refused - ui.screen.unknown: no screen answers to that name; the message lists the ones… - ui.screen.bad-json: the screen's description has an error, or its `render` threw… - ui.player.input: `ctx.ui.push(name, props, { player })` named a screen that… - ui.player.invalid: `ctx.ui.push`'s `{ player }` is not a whole number from 1 to… - ui.screen.duplicate: a push or replace named a screen already on the stack, or two… - ui.stack.empty: `pop` with nothing on the stack - ui.panel.unknown: a `ctx.ui.panel*` call named an entity that has no `uiPanel`… - ui.set.unknown-node: no screen on the stack holds that id, or a bare id is ambiguous - ui.fx.unknown-node: `ctx.ui.fx` named a node no screen on the stack holds, or a… - ui.fx.unknown-preset: `ctx.ui.fx` named a preset that is not in the library - ui.fx.bad-options: `ctx.ui.fx`'s options were not `{ duration?, delay? - ui.set.unknown-prop: the property is not bindable; the message carries the hint - ui.set.bad-value: the property is bindable and the value is the wrong kind for it - ui.get.unknown-node: no screen on the stack holds that id, or a bare id two screens… - ui.get.unknown-prop: that property cannot be read - ui.get.not-a-field: the node is not a text field, so it has no value to read - ui.activate.no-such-node, ui.focus.no-such-node: no screen on the stack holds that id - ui.activate.hidden: the node is under `display: none`, so it is not laid out or… - ui.activate.disabled: the node is disabled, and a disabled node refuses activation - ui.activate.clipped: a clipping ancestor removes every pixel of the node, and no… - ui.activate.not-hittable: the node answers no hit test; on a click-through screen a node… - ui.activate.not-interactive: neither the node nor any ancestor of it takes activation - ui.activate.blocks: the node is a blocker: it takes a click only to stop one… - ui.activate.occluded: another node is painted over the point a click would land on - ui.activate.not-on-top: the node's screen is not the topmost screen taking input - ui.focus.not-focusable: the node does not take focus, or is disabled - ui.focus.unreachable: the node takes focus and Tab never arrives at it - ui.input.no-field: text arrived and no text field holds focus, so there is… - ui.input.bad-key: no key by that name - ui.theme.unknown: the project's stylesheets declare no theme by that name - ui.scale.out-of-range: the UI-scale multiplier is outside the supported range - ui.locale.unknown: the project ships no locale by that name; the message lists… - ui.viewport.no-surface: this source has no surface of its own, so there is nothing to… - ui.screen.tools: the screen describer could not start, so no screen was… - ui.screen.compile: a screen file failed to compile; it is not registered - ui.screen.prepared: an exported build's prepared screens are missing or unreadable - ui.screen.props-unbound: `render` reads props and the screen declares no scenario, so… - ui.screen.scenarios: a screen declares fewer than two scenarios, so the critic and… - ui.locale.missing-glyphs: a locale has characters no font in the project's font chain… - ui.font.unusable: a font file under the project's `ui/fonts/` (or named by an… - ui.tree.duplicate-id: two nodes in one screen claim one id - ui.tree.invalid-id: a node id holds `/` or `:`, the id grammar's own separators… - ui.style.unknown-token: a `var(--…)` or token names no declared token - ui.style.token-cycle: tokens refer to one another in a loop - ui.style.token-kind: a token's value is the wrong kind for the property using it (a… - ui.style.gradient-stops: a gradient's stops are malformed or out of order - ui.style.unsupported-value: a value the engine cannot draw for that property - ui.style.root-size-ignored: a width or height on a screen's root is ignored; the root… - ui.layout.grid-unsupported: that part of grid is not in the supported subset - ui.layout.failed: layout could not place the tree - ui.layout.grid-placement-ignored: `grid-column` or `grid-row` on an item whose parent is not… - ui.layout.grid-tracks-truncated: a track list longer than the engine's limit; only the first… - ui.focus.nav-target-missing: a `nav-up`/`nav-down`/`nav-left`/`nav-right` names a node that… - ui.focus.target-missing: the initial-focus target names a node that is not there - ui.focus.no-focusable: a screen that takes input has nothing a pad or keyboard can… - ui.screen.missing: a screen names another screen that does not exist - ui.screen.stack-empty: the screen stack was left empty where a screen was expected - ui.screen.no-exit: a screen that takes input has no way back out of it - ui.transition.not-animatable: a `transition` names a property that cannot be animated; it… - ui.draw.rotate-unsupported: a rotation in `transform`; the node is drawn unrotated - ui.draw.gradient-truncated: a gradient has more stops than the renderer draws; the rest… - ui.draw.group-opacity: opacity on a group is applied to each child rather than the… - ui.diagnostics.overflow: more diagnostics than the sink holds; the count of the dropped… - ui.css.syntax: the stylesheet does not parse at that point - ui.css.unknown-property: a property the engine does not support - ui.css.unknown-value: a value the property does not take - ui.css.unknown-unit: a unit the engine does not support - ui.css.unknown-function: a CSS function the engine does not support - ui.css.unknown-selector: a selector form outside the supported subset - ui.css.combinator-depth: a selector chains more than two child or descendant… - ui.css.unknown-at-rule: an at-rule the engine does not support - ui.css.important: `!important` is not supported - ui.css.media-query: media queries are not supported - ui.css.calc: `calc()` is not supported - ui.css.value-range: a value outside the range the property takes - ui.css.unknown-semantic: a semantic colour or token name the theme does not define - ui.css.unknown-size-class: a size class the engine does not define - ui.css.reserved-token: an attempt to define a token the engine reserves - ui.css.deferred-property: a property this engine has not implemented yet - ui.css.physical-side: a physical side (`left`, `margin-right`) where a logical one… - ui.css.duplicate-declaration: the same property twice in one rule; the last wins - ui.describe.format: the screen description is not the format the engine reads - ui.describe.unknown-role: a node's role is not one the engine knows - ui.describe.unknown-prop: a prop the element does not take - ui.describe.value: a prop's value is the wrong kind, a key repeats among… - ui.describe.too-large: the description is past the size the engine reads - ui.describe.root-id: the screen's root carries an id; it is kept as an alias of… - ui.describe.model-view-subject.tentative: TENTATIVE (code to be numbered): a `model-view` names neither… - ui.describe.model-view-value.tentative: TENTATIVE: a `model-view` attribute is not a documented… - ui.model-view.count-cap.tentative: TENTATIVE: more than 4 `model-view` nodes are visible; the… - ui.model-view.unresolved.tentative: TENTATIVE: a `model-view`'s asset path or entity name did not… - ui.bind.unknown-node: a binding names a node the screen does not have - ui.bind.unknown-prop: a binding names a property that is not bindable - ui.bind.value-kind: the bound value is the wrong kind for the property - ui.asset.image-missing: an `Image` or `Icon` names a file that is not in the project… - ui.asset.atlas-budget: the project's UI images are over the 32 MB atlas budget - ui.scroll.not-scrollable: `scroll-top` or `scroll-left` written to a node that is not a… - ui.locale.file: a `ui/locales/.json` the engine cannot use; that one… - ui.locale.missing-param: a `{name}` slot in a string has no parameter; it draws… - ui.draw.view-box-outside: an `object-view-box` reaches past its image; the part inside… - ui.font.face: an `@font-face` file is missing or not a font the engine… - ui.font.glyph-missing: a bitmap font has no cell for a character in the text; it is… - ui.layout.image-zero-size: an `image` whose file loaded laid out with no width or no… - ui.font.unavailable: the project has screens and no font was found, so the text on… - build.typecheck: a behaviour has a TypeScript type error at the line and column… - build.transpile: a behaviour does not compile (esbuild's error) - build.import: a behaviour imports something the engine does not bundle (an… - build.sandbox: a behaviour touches something the engine's sandbox does not… - build.module-load: a behaviour threw while its module was evaluated - build.module-not-found: a scene names a script module with no `.ts` or `.js` file - build.module-outside-project: a script module path leads outside the project - build.module-unreadable: a built-in module could not be read - build.plugin: a plugin the project lists does not resolve (not installed… - build.scene-invalid: a scene breaks a contract rule; the message opens with the… - build.scene-warning: a scene triggers a contract warning; the message opens with… - build.startup-scene-missing: the project's `startupScene` is not in this revision - build.asset-missing: a file the scene names (an asset, a texture its material file… - build.material-layer-missing: a file a material file's `layers` need (a layer material named… - build.material-height-on-mesh: a mesh or instancedMesh names (as `material`, or in… - build.font-unusable: a `.ttf`/`.otf` under the revision's `ui/fonts/` does not… - build.shader-scene-prewarm-heavy: a scene's predicted shader pre-warm (pipeline count times the… - build.shader-hd-partial: an HD project's export packs a user shader that HD's G-buffer… - build.shader-pass-not-exported: the project contains a `*.shader.wgsl` with `//! - build.asset-outside-project: an asset path leads outside the project, so no revision holds it - build.toolchain-unavailable: the TypeScript toolchain could not be found, so behaviours… - build.transpile-failed: esbuild itself did not run to its end, or a `.js` behaviour… - build.typecheck-failed: the TypeScript checker itself did not run to its end - build.infrastructure: the build could not read its own inputs - build.not-published: every check passed, but publishing the build failed - build-not-ready: the revision asked for has no Ready build - build-pipeline-running: a build pipeline already runs for this workspace - build-pipeline-stopping: the build pipeline is stopping - not-newest-revision: a newer revision has been submitted, so this one is not built - snapshot-modified: the revision's files changed on disk after it was recorded - plugin-native: a plugin the project lists has a compiled-in part this engine… - plugin-failed: a plugin's compiled-in part could not start (its UDP port… - plugin-stopped: a plugin's WebAssembly part was stopped mid-run: it ran past… - replay-bad-file: the replay file cannot be read, is not a Talos replay, is a… - replay-desync: a replay's playback parted from its recording: at a per-system… - replay-load-mismatch: the replay was recorded with other simulation-affecting load… - replay-engine-mismatch: the replay was recorded by another engine version, which does… - replay-scene-mismatch: the scene that loaded is not the one the replay was recorded… - replay-seed-mismatch: `--seed` names a different seed than the replay was recorded… - replay-start-mismatch: the world is not at the tick the replay starts from - replay-web-unsupported: a replay was asked to play in the web build, which leaves out… - replay-camera-unknown: `--replay-camera entity:ID` names an entity the scene does not… - journal-defs-invalid: a journal definitions file does not parse, or one of its kinds… - environment-refused: an `environment` command (`POST /session/command`) could not… - environment-sea-refused: an `environment` command's `seaState` was refused by the sea… - environment-weather-refused: an `environment` command's `rain` or `wetness` was refused by… - external-input-dropped: a plugin submitted external input (`World::submit_external`)… - timeline-restore-inexact: a review (`POST /timeline {load}`) restored a keyframe, ran to… - journal-kind-undeclared: an entry of a kind no definitions file declares was journaled… - peer-protocol-mismatch: the other peer's hello is in another peer protocol (`proto`)… - peer-engine-mismatch: the other peer runs another engine or engine version, which… - peer-determinism-mismatch: the peers' script configs differ (`HostConfig::determinism_dige… - peer-scene-mismatch: the peers loaded different scenes (the SHA-256 of the scene… - peer-tick-rate-mismatch: the peers step a different number of ticks a second - peer-seed-mismatch: the peers' world seeds differ, so every seeded draw… - plant-bake-missing: a recipe has no cooked meshes in the project's state folder… - plant-bake-stale: the cooked meshes are from an older recipe, an older template… - render.hd.ground-cover-over-budget: reserved: the HD renderer will report this when a frame's… - render.hd.ground-cover-no-height: reserved: the HD renderer will report this when a layer's… - road-source-missing: the `road` component's `source` file is missing or unreadable… - road-source-invalid: the road file is there but is not a valid road (bad JSON, too… - road-material-unknown: the road file's `surface.material` is not a key of the scene's… - road.at: `ctx.world.road(name).at(s)` was given an `s` that is NaN or… - instances-source-missing: the `instancedMesh` component's `source` file is missing or… - instances-source-invalid: the file is there but is not a valid instances file (wrong… - instances-format-unsupported: the `.instances` file is a later format version or encoding… - mesh-material-name-unknown: a `materials` key is not the name of any material of the model… - mesh-uv-missing: a model has textured meshes and some meshes with no… - attach-bone-unknown: the `attach` component's `bone` is not a bone of the owner's… - attach-socket-unavailable: the `attach` component's `socket` cannot be placed on the… - attach-skeleton-missing: the `attach` owner has no animator that built (its asset has… - sensor-shape-unsupported: the attached entity's trigger collider is not a box, sphere or… - lipsync-degraded: the face cannot make every viseme as written: its model lacks… - face-degraded: `: ; that part is off`: the model has… - spring-bone-unknown: a chain or collider names a bone the skeleton does not have… - spring-chain-bad: a chain is not a path down the skeleton: its `tip` is not… - synth-bad-name: `name` is missing or is not 1 to 64 of `a-z 0-9 - _` starting… - synth-bad-spec: the description names both `preset` and `voices` or neither… - synth-unknown-preset: `preset` is not one of the recipe's: `blip`, `whoosh`… - synth-bad-param: a parameter is the wrong kind or out of its range: a frequency… - synth-bad-sample-rate: `sampleRate` is not a whole number from 8,000 to 48,000, or… - synth-too-long: the sound would be longer than 12 s, an echo's tail included - synth-too-large: the WAV would be over 1 MiB (about 11.9 s at 44.1 kHz) - synth-not-found: Node, or the recipe's `synth.mjs` (under the SDK folder or a… - synth-failed: the synthesiser ran and did not write the sound (it threw… - unchecked-content: a headless worker started with `--require-checked` was given… - web-exporter-missing: no Node, or no engine CLI, to run the web exporter: not named… - web-exporter-failed: the engine CLI ended with neither a report nor an error line… - web-export-cancelled: the web export was cancelled and the CLI stopped; the output… - selftest-not-found: the named scenario is not `selftest/.json` (or the… - selftest-bad-scenario: the scenario is not JSON, lacks `"selfTest": 1`, has a key the… - selftest-too-long: `maxFrames` is over 36,000 (ten simulated minutes), or… - selftest-load-failed: the scene did not load (it does not validate, or a file it… - selftest-crashed: the engine stopped with an internal error while playing the… ## Migrating No migration notes are recorded for this version.