Talos docs

Rule codes

Every rule the contract and the critics can raise. A message opens with its code.

NameSummary
animator-blend-coverageA blend tree's points do not cover its parameter space: two at one coordinate, or a plane's worth all on one line.
animator-blend-degenerateA blend tree has too few points for its kind: fewer than two on a line, fewer than three on a plane.
animator-blend-parametersA blend tree reads the wrong number of parameters, one the animator does not declare, the same one twice, or gives a point the wrong number of coordinates.
animator-damp-invalidAn animator parameter's damp is negative (a smoothing time cannot be); a non-finite one is animator-not-finite.
animator-event-invalidAn animation event sits outside its clip (at not in 0..1), or names no clip or no event.
animator-feet-invalidAn animator.feet names fewer than two or more than four joints, an empty name, or one name twice.
animator-ik-invalidAn IK chain has a duplicate name, a bone listed twice, both kinds of pole, a pole bone from its own chain, a weight outside 0..1, or an empty name.
animator-initial-undefinedanimator.initial is not one of the animator's state names.
animator-invalidAnimator states, transitions, blend trees, events and clips resolve
animator-look-at-invalidA look-at has no bones, a bone listed twice, an empty bone name, a limit outside 0..180 degrees, a weight outside 0..1, or a negative smoothing time.
animator-loop-range-invalidAn animator state's or blend point's loopStart/loopEnd is outside 0..1, or loopStart is not below loopEnd, or the range is on a state that does not loop, a one-shot, a clips list, or at state level on a blend state (a tree takes it per point). Non-finite values are animator-not-finite.
animator-not-finiteA blend point, a parameter value, an animation event position or a transition blend time is NaN or infinite.
animator-once-invalidA one-shot state (once) loops, hands over to a state that does not exist or to itself, lets an undefined state interrupt it, has a negative blendOut, or raises an empty event name.
animator-rest-pose-straightA rig with foot IK rests with its legs bent enough to plant a foot downhill
animator-retarget-duplicateTwo of a retarget map's keys name the same bone of the target rig, so one of the two limbs loses its animation to the other.
animator-retarget-unmappedA retarget map leaves a bone the built-in clips animate unmapped, names a bone the profile does not have, or maps one to an empty name.
animator-root-motion-sourceA state with rootMotion reads a parameter bound to a measured-velocity source, which is a closed loop. Warning: see SEVERITY.
animator-speed-invalidAn animator state's or blend point's speed, or a speedParam.scale, is negative, NaN or infinite, or a speedParam names a parameter the animator does not declare.
animator-state-duplicateTwo of an animator's states share a name, so initial and every transition are ambiguous.
animator-state-sourceAn animator state has both a clip and a blend, or neither.
animator-transition-undefinedAn animator transition targets a state that does not exist.
asset-builtin-unknownAn assets[*].path of builtin:<name> names nothing built in: a glb asset whose name is not one of the built-in meshes (cube, sphere, capsule, plane, cylinder, cone), or a builtin: path on a kind that has no built-ins (only glb and audio do).
asset-forward-invalidAn assets[*].forward sits on an asset that is not a model, so there is no nose to turn.
asset-import-invalidAn assets[*].import declares a scale or an axis pair that cannot be applied.
asset-path-not-relativeAn assets[*].path is absolute, names a drive, or climbs out with ...
audio-bus-unknownEvery bus meta.audio names is a bus meta.audio declares
audio-missing-fileEvery sound the scene names is an audio asset that exists
audio-orphanSpatial audio sits on something with a position you can see
behavior-wrap-drops-eventA behaviour that runs another's init or update forwards its onEvent too
buoyancy-without-bodyA buoyancy component on an entity that has no rigidbody of kind dynamic: forces only move a dynamic body.
buoyancy-without-oceanA buoyancy component in a scene with no meta.environment.ocean and no water component: there is no water to float on.
camera-clipThe camera's default position is not inside or behind geometry
camera-hides-everythingA camera's layers / hideLayers leaves out every layer the scene's meshes and sprites are on, so it draws nothing. Warning: see SEVERITY.
camera-layers-invalidA camera sets both layers and hideLayers, or one of them is an empty list.
camera-priority-tieTwo or more screen cameras share the top priority and none of them is primary, so scene order picks the view. Warning: see SEVERITY.
camera-projection-invalidA camera's orthoSize or pixelsPerUnit that is not a finite number above zero: an orthographic view has no size to draw at. 2D camera.
camera-rig-invalidA camera's rig, output or blendIn cannot work: a following rig with no target, viewport without output: "viewport" or the reverse, a rectangle outside the window or with no area, an overlay or viewport camera that is primary, a negative blend time.
character-unanimatedA skinned character with a controller has an animator whose states follow movement
collider-detail-ignoredA collider.detail sits where nothing reads it: on a box, sphere or capsule, or on a trimesh whose entity is not a dynamic body (static and kinematic trimeshes are always exact). Warning: see SEVERITY.
collider-material-invalidA collider.material has a negative friction, a restitution outside 0..1, or a slope limit outside 0..90 degrees.
controller-invalidA controller.gravity is negative, a controller.maxFallSpeed is 0 or less, or a controller.step is not more than 0 and under 1.8 m (the standing height); any of them NaN or infinite.
dangling-assetAn asset reference names a key that is not in scene.assets.
dangling-parententity.parent names an entity that is not in the scene.
dangling-refAsset, script, parent and target references resolve
dangling-targetcamera.target names an entity that is not in the scene.
duplicate-entity-idTwo entities share an id.
dynamic-needs-colliderA rigidbody of kind dynamic has no non-trigger collider. Warning: see SEVERITY.
feel/anim-bind-posea skinned character stood in its bind (T-)pose: no clip reached the skeleton while the probe drove it (an error for the player and what moves with it, a warning for any other animator)
feel/anim-foot-slidethe planted foot slid over the ground: the locomotion clip's pace does not match the ground speed (a warning past 50% of the body's speed, an error past 75% for the player and what moves with it)
feel/anim-frozenan animator's clip did not advance: the playhead and the pose stayed still while the state said it was playing (an error for the player and what moves with it, a warning for any other animator; a rig with one clip whose playhead has advanced is not frozen)
feel/anim-loop-seama looping state plays a clip whose last frame does not meet its first (or, in a clips state, one clip that does not meet the next), so the pose jumps at every wrap; the engine measured it when the animator was built (runtime animator-loop-seam)
feel/anim-no-air-statethe character left the ground and the animator kept its grounded state: no jump or fall pose
feel/anim-no-handlea behavior read ctx.animator and got null (the engine's null-handle warning): the entity has no running animator, so every animation call it makes goes nowhere
feel/anim-popa joint turned far more in one tick than on the ticks either side while the probes drove the character: a pose that jumps rather than moves (an error for the player and what moves with it, a warning for any other animator, and for a state change cut with no blend or a blend parameter that stepped)
feel/anim-run-in-placea walk or run clip played while the body stood still (not reported for an animator the stick does not drive whose rig plays one clip)
feel/anim-slow-responsethe player's animator answered a press (move or jump) more than 6 ticks late: the state or its blend parameter changed after the body did, which reads as input lag
feel/anim-stuckthe body moved but the animator stayed in the state and clip it was in while standing, so the character glides (an error for the player and what moves with it, a warning for any other animator; a rig with one clip that plays is not stuck)
feel/anim-unknown-namectx.animator.set or play named a state or clip this animator does not have; set changes nothing, so the character never enters it
feel/audio-jump-silentthe jump made no sound, though the game plays sounds elsewhere
feel/audio-loops-stackedthree or more copies of one loop played at once with none placed in the world: in the centre they add up to one louder sound that masks the rest of the mix (usually one loop per entity, such as every car's engine)
feel/audio-nonethe scene has gameplay events (a jump, goals, triggers, emitted events) and no audio anywhere: no audio asset, component, meta.audio sound or behavior that plays one
feel/audio-silentnot one voice started: the player jumped or reached goals, or 30 s went by, in silence
feel/audio-unplayablethe game called ctx.audio.play for assets with no sound behind them, so nothing played
feel/burieda body a script or a kinematic body moves went into the ground under it (its bounds more than 0.15 m below the surface for 3 reads running: an error), or its height jumped up more than 0.5 m between two reads with little travel, a sunk body snapped back out (a warning when that is all that was seen)
feel/camera-clipthe camera's near plane was inside a collider: the frame showed the inside of a wall
feel/camera-closethe camera sat within 0.3 m of solid geometry in more than 15% of samples: most of the frame is a surface up against the lens
feel/camera-collapsedthe camera's arm (or its distance to the player) was under 1 m in more than 5% of samples, so the view is the back of the character's head
feel/camera-occludedsomething solid hid the player from the camera for longer than a second
feel/camera-wall-collapsewalked into a wall, the camera's arm pulled in under 1 m though the space behind the character along the arm was open: the view went into the character's head with room to spare
feel/controls-deadno stick direction moved the player (after the probe held input for the wait cap, 12 s of simulated time by default, so a start countdown shorter than that is not this)
feel/controls-rotateda stick direction moved the player the wrong way on screen: more than 30° off by half a second (up did not move away from the camera, right not screen-right), or more than 45° off after 3 s held while the camera moved
feel/facing-actions-silentthe aimed buttons (fire, use, interact) raised no event at all once a teleport faced the player at something the game runs, though the same presses at the player's own heading raised events: the buttons stop working when the player is faced by teleport
feel/look-cappedmouse look has a top speed: a fast synthetic mouse sweep turned the view fewer degrees per pixel than a slow one (under 60%), so a flick turns no faster than a stick; the view reads the mouse as a rate (axis × speed × dt, clamped) instead of an angle
feel/roll-mismatcha ball moving along the ground spun against its travel: backwards (backspin at the rolling rate reads as sliding), about the wrong axis, or under 30% of the rolling rate, in over half the stretches judged
feel/skippeda feel probe could not run on this scene and says why
feel/teleport-facing-ignoreda tool's teleport with a heading faced the player at something the game runs, and a few ticks later the view still faced another way: a behaviour writes the old heading back, so every shot and use a tester aims by teleport goes the old way (judged only where the look stick turns the camera)
feel/viewmodel-staticthe first-person view-model (an image in the lower middle of the screen) stood still while the player walked a metre or more: nothing bobs it, so it reads as a picture stuck to the lens; forgiven only where its screen says data-bob=\"off\" (a rig given bob: false)
floor-gapNo holes in the floor under the walkable areas or around a spawn
fog-value-rangeA meta.environment.fog value is outside its range (density 0..1, heightFalloff 0.001..10, start 0 or more, end past start, maxOpacity 0..1, hd.sunAnisotropy 0..0.95, hd.skyDistanceM 1..1000000) or not finite, or a colour is not #RGB/#RRGGBB.
gi-intensity-rangeAn indirectIntensity (meta.environment.gi, a light, or a giVolume) that is not a finite number within 0..16.
gi-volume-limitMore than 8 giVolume components of one mode; only the first 8 in scene order count. Warning: see SEVERITY.
gi-volume-shapeA giVolume that cannot be built: a size axis of 0 or less or not finite, a blend below 0 or not finite, or in region mode a blend of more than half the smallest extent.
goal-orderGoals carrying order do not form the strict sequence 1..n.
ground-cover-layer-invalidA ground cover layer or document with a value out of range: an empty id, a duplicate id, a range with min above max, a colour channel outside 0..1, more than 32 layers, a flower share or palette that does not fit, seed heads on a flowers or mat layer. The message names the layer and the field.
ground-cover-no-terrainA scene with ground cover and no terrain to grow it on. Reserved: nothing emits it until a scene can hold ground cover.
ground-cover-source-unknownA ground cover layer whose source.channel is not a channel of the terrain. Reserved: it needs the terrain's channels beside the document, and nothing holds both yet (a scene has no ground cover component).
ground-cover-too-denseA ground cover layer whose densityPerM2 is above 200.
hd-only-ignoredA field or component only the HD renderer draws (a splat component) on a project whose render.profile is not hd: the scene draws without it. Reported only when the validator is told the project's profile. Warning: see SEVERITY.
hud-layout-invalidA meta.hud element declares a size, colour, offset or number format that cannot be drawn.
input-conflictNo two actions in one context share a device source
input-key-unknownA meta.input key name the runtime binds nothing to ("Back", "Rigth"): input-keys.ts is the list Key::from_name reads. The message names the nearest key, or the gamepad button a pad word is. Warning: see SEVERITY.
input-reader-not-playerA behaviour that reads ctx.input runs on an entity player input is not routed to (the scene's spawn { for: "player" } entity beside another component, else the first controller, else the first vehicle), so every action reads false. Warning: see SEVERITY. Reported by the critic, which reads the behaviour; the same mistake at run time is the input-read-without-routing script warning (docs/RUNTIME-CODES.md).
input-unboundEvery action a script reads is bound by the scene's action map
joint-invalidA joint that cannot be built: connectedTo names no entity, the owner itself, or an entity with no dynamic or kinematic rigidbody; the owner has none either; a revolute or prismatic axis is zero or not finite; limits are not finite or min > max; a motor's maxForce, stiffness or damping is negative or not finite; or an entity carries two joints.
layer-unknownAn entity's layer, or a camera's layers, hideLayers or rig.collisionLayers, names a layer the scene's table does not declare (the project's layers, or a standalone scene's meta.layers). The message names the nearest layer. Layers and cameras, 81 (81-87).
layers-in-project-sceneA scene inside a project declares meta.layers: the project's layers is the one table.
layers-invalidA standalone scene's meta.layers is not a layer table: more than 32, a repeated or badly formed name, default not first, or ignores naming no layer.
material-field-ignoredA *.material.json field that nothing reads: alphaCutoff without alphaMode mask, a normalScale with no normal map, an emissive map on a black emissive. Warning: see SEVERITY.
material-shader-missingA *.material.json shader names no file the project holds, or its reference is empty, absolute, names a drive or climbs out with .. (the same path rule as a texture). A header error in the file it names is reported under that error's own code.
material-shader-param-rangeA *.material.json params value is outside the [min, max] its shader's header declares.
material-shader-param-unknownA *.material.json params key is not a param or texture the shader declares (an instance value is set per entity by a behaviour, not by the material). The message suggests the closest declared name.
material-texture-invalidA *.material.json texture reference is empty, absolute, names a drive or climbs out with .., or both ormTexture and metallicRoughnessTexture are set.
material-value-rangeA *.material.json number is outside its range or not finite: a colour or factor outside 0..1, a negative strength, an ior below 1, a uvTransform scale of 0. docs/MATERIALS.md.
missing-colliderDynamic bodies have a collider; triggers have a trigger collider
missing-stringEvery text key resolves in meta.strings
nav-undeclaredA navlink in a scene that declares no navigation (no meta.nav, no navagent): no navmesh is built, so it does nothing. Warning: see SEVERITY. The same code is what ctx.world.path throws in such a scene (docs/RUNTIME-CODES.md).
navlink-invalidA navlink.hold is negative or not finite.
navmesh-failedThe navmesh builds and has polygons
navmesh-trapNo walkable region the player can get into and not out of
ocean-bathymetry-asset-missingmeta.environment.ocean.bathymetry.asset names an asset that is not in assets. Shoreline, 102 (102-105).
ocean-bathymetry-not-16bitThe bathymetry asset is not a 16-bit greyscale PNG: not a texture asset, or a path that does not end in .png (and, at load, a PNG whose header says otherwise). The raster is not used.
ocean-bathymetry-range-invalidA bathymetry value that cannot describe a raster: sizeM not above 0 or not finite, stepM not above 0, a non-finite originXz or baseM, or minDepthM outside 0.01..1.
ocean-layer-field-mismatchAn ocean wave layer with fields of the other kind: windSpeedMps or fetchKm on a swell, heightM or periodS on a wind layer.
ocean-shore-without-bathymetrymeta.environment.ocean.shore without a bathymetry: nothing for the shoreline controls to act on, so they are ignored. Warning: see SEVERITY.
ocean-swell-without-periodAn ocean swell layer with no periodS: a swell is defined by its period.
ocean-wave-mask-asset-missingmeta.environment.ocean.waveMask.asset names an asset that is not in assets. Wave paint (appended after terrain).
ocean-wave-mask-not-greyscaleThe wave mask asset is not a greyscale PNG: not a texture asset, or a path that does not end in .png (and, at load, a PNG whose header is not greyscale). The mask is not used.
ocean-wave-mask-range-invalidA wave mask value that cannot describe a raster: sizeM not above 0 or not finite, a non-finite originXz, minScale outside 0..1 or maxScale outside 1..4.
ocean-weather-not-ascendingA meta.environment.ocean.weather whose timeS values are not strictly ascending (a repeat counts). The blend needs ordered keys. Ocean and buoyancy, 92 (92-98).
ocean-wind-out-of-rangeAn ocean wind or fetch outside its range (wind above 60 m/s or below 0, fetch outside 1..2000 km): the sea uses the nearest limit. Warning: see SEVERITY.
out-of-boundsAn entity's world position is outside meta.bounds (critic.check also reads a scale axis under a millimetre or over a kilometre as this code).
outliner-folder-staleEvery Outliner folder entry names a root entity
outliner-folder-unknown-entityA meta.outliner.folders entry names no root entity: no entity has that id, or it has a parent (a child, or a part of a prefab instance), which follows its parent rather than a folder. Warning: see SEVERITY.
over-budgetTriangles, draw calls, texture MB and dynamic bodies within meta.budgets
parent-cycleParent chain loops back on itself.
physics-quality-invalidA meta.physics.overrides number is outside its range: solverIterations 1..64 and substeps 1..16 (whole numbers), sleep values 0 or more.
plant-material-missingA foliage recipe whose materials names a project file that does not exist. procedural: names are always present. Emitted by the foliage.* tools, which can see the project.
plant-param-invalidA foliage recipe value the generator cannot take: a parameter that is not a number or a [min, max] pair with min at most max, an unsupported version, an ages entry outside 0..1, or (from the generator) a parameter the species lacks or one outside its allowed range. The message names the parameter.
plant-species-unknownA foliage recipe whose species is not one of the closed species list. Emitted by the recipe validator and by the generator.
plant-template-lockedA foliage recipe that sets a parameter its template locks, because changing it breaks the template's look. Emitted by the generator.
plant-template-unknownA foliage recipe whose template names no library or project template. Emitted by the generator and the foliage.* tools (the template library is not part of the contract).
plant-too-heavyA plant whose level-0 mesh has more than 150,000 triangles. Emitted by the generator.
plant-variants-invalidA foliage recipe with variants outside 1..64, or more than 8 ages.
play/bad-startcritic.play's from named no goal or entity of the scene, or the player could not be put there
play/dialog-never-closesa blocking dialog kept turning pages (each press changed what it shows) and was still up after 24 of them, so the walk could not go on
play/drive-hitsa driven player hit obstacles (entities tagged cone, pylon, barrier, …) or drew the game's penalty on the way to a goal; the message lists each hit with where it stood, the speed and frame, the game's penalty events and HUD penalty lines, and a careful retry of that section at 6 m/s
play/ended-earlythe game put up a screen that owns the input and could not be answered (its own results or game-over screen) before the playtester reached a goal, so the goals after it were not played
play/fell-outthe player fell below the scene's bounds on the way to a goal
play/interaction-noopthe bot walked to an interactable, pressed interact, and nothing happened: no event, no change in the world, none on screen
play/interaction-unreachedthe interaction sweep could not walk to an interactable or a trigger to try it
play/no-goalsthe scene has no goal component, so the playtester had nowhere to walk; nothing was driven, no route was tested, and passed only means nothing failed
play/no-playerno entity carries a controller or a vehicle component, so the playtester has nothing to drive
play/player-script-errorthe player's own behaviour threw or overran its budget during the run; when the engine disabled it and it is what moves the player (input script), the player's behaviour died and the player cannot move, so the playtest stops there
play/quitthe game called ctx.session.quit() during the run; a headless engine keeps running
play/respawnedthe game moved the player somewhere at once on the way to a goal (a respawn at a checkpoint, a send-back to the start): a jump of more than 2 m in a tick the bot did not make; the bot reset its link attempts and tried again
play/script-errora behaviour other than the player's threw or overran its budget during the run, and the engine disabled it (a throw used to show only in the editor's log), so whatever it did stopped happening
play/softlockno progress toward a goal and no change anywhere in the world for a while
play/stuckthe bot stopped moving on the way to a goal (blocked by an entity, or no path there), or kept moving for 20 s without its route getting shorter (slid back, fell off the route, missed a jump link)
play/timeoutthe run spent its simulated time budget before reaching every goal
play/trigger-noopthe player walked through a trigger volume and its event never fired
play/unknown-goalcritic.play was asked for a goal id the scene does not have
player-spawnNo entity carries a spawn component with for: "player".
prefab-candidateNo <…> or more identical entities written out one by one
prefab-id-collisionAn instance expands to an entity id the scene already has, or its prefab declares an asset key the scene means differently.
prefab-invalidA prefab file that cannot be used: its shape, not exactly one root, an entity outside the root's tree, an id with / or used twice, or a prefab instance inside it (no nesting). Also an instance with tags or components of its own.
prefab-missingA prefab instance's source does not resolve to a readable .prefab.json in the project.
prefab-override-redundantNo prefab override repeats the prefab's own value
prefab-override-staleEvery prefab override still points at something in its prefab
prefab-override-unknownAn override on an instance does not apply to its prefab: no such entity, component or path, or the value does not fit there. Warning: see SEVERITY.
prefab-unusedEvery prefab file is placed in a scene or named by a script
primary-cameraThe scene does not have exactly one camera with primary: true.
project-default-invalidA scene rule's error on a value the scene takes from its project's defaults (argus.project.json physics, graphics.render, input, audio). The message names the rule, and the manifest pointer to fix. A warning there keeps its own code.
render-clouds-without-atmospheresky.clouds is set on a sky whose kind is not "atmosphere" (no sky means the default procedural one): clouds are drawn only over the HD renderer's atmosphere sky, so nothing draws them. Fix: set "kind": "atmosphere", or remove clouds. Warning: see SEVERITY.
render-field-ignoredA meta.environment.fog field its mode does not read: density or height on linear fog, height or end on exponential, end on height. Warning: see SEVERITY.
render-ocean-without-hdmeta.environment.ocean in a project whose render.profile is not hd: the standard renderer draws the sea as a flat lit plane at seaLevel. Buoyancy still works. Warning: see SEVERITY.
render-value-rangemeta.render.exposure is not more than 0 and at most 64, or meta.render.scale is outside 0.1..1.
render-waterways-without-hdA waterways component in a project whose render.profile is a known profile other than hd: rivers are drawn as flat tinted ribbons, and falls and lakes are not drawn. Warning: see SEVERITY.
scale-zeroA scale axis is exactly zero.
scene-unorganizedA big scene is filed into Outliner folders
schema-shapeThe document does not match the schema: wrong type, missing field, unknown key, bad enum member.
shader-compile-errorThe shader's WGSL does not compile (a name that does not exist, a type mismatch, a uniformity error). Reported in the agent's own line numbers, with a "did you mean" where one fits. Not emitted by validation: it needs the shader compiler.
shader-cost-highThe shader's static cost estimate is over the soft cap for the project's targets but under the hard cap. Warning: see SEVERITY. Not emitted by validation: it needs the shader compiler.
shader-cost-over-capThe shader's static cost estimate (cost units per pixel, or texture fetches) is over the hard cap for the project's targets. Not emitted by validation: it needs the shader compiler.
shader-forbiddenThe shader uses something the sandbox refuses: a module-scope var, @group/@binding, an entry point, override, an enable directive, textureStore, atomics, barriers, arrayLength, a raw texture or sampler, or discard. Not emitted by validation: it needs the shader compiler.
shader-header-invalidA *.shader.wgsl header or file shape that cannot be read: an unknown //! key, a malformed or repeated line, a header line after the first line of WGSL, no fn surface(, a fn vertex( with no bounds (or bounds with none), a bounds that is not above 0, or a source over 16 KB. The agent's own line:col is in the message; docs/SHADERS.md.
shader-loop-unboundedThe shader has a while or loop, a for whose trip count is not a constant of at most 32, more than 256 iterations across nested loops, or an induction variable that is written other than by an increment. Not emitted by validation: it needs the shader compiler.
shader-model-mismatchThe functions and the model disagree: model: stylized without both fn light( and fn ambient(, either of them under another model, or tonemap on a model that is not unlit.
shader-param-invalidA param or instance header line that cannot be built: a name that is not camelCase or is declared twice, an unknown type, a default of the wrong type, a [min, max] that is backwards or on a bool, a default outside it, more than 256 B of params, or more than 4 instance floats. Also a material params value of the wrong type for the shader's param.
shader-raw-disabledA *.shader.wgsl says kind: raw or kind: pass (the escape hatch) in a project that has not set render.shaders.raw: true. Reported by the shader compiler, not by validation.
shader-texture-invalidA texture header line that cannot be built: a name that is not camelCase or is declared twice, an unknown kind, a default that is not "white", "black", "flat", "builtin:noise" or a relative path, or more than 6 textures. Also a material params texture that names an unknown builtin: texture.
shader-variants-over-capThe project's shaders compile to more pipeline families than the cap allows. Not emitted by validation: it needs every shader of the project.
shot-blend-longA shot's blendIn.time is longer than the shot, so the blend never finishes, or the first shot has a blendIn with nothing to blend from. Warning: see SEVERITY.
shot-keys-unorderedA path shot's key times are not strictly ascending, or a key is past the shot's duration.
shot-target-missingA shot names an entity (follow.entity, a look or orbit center entity) the scene does not have.
shots-invalidA meta.shots timeline that cannot play as written: no shots or an empty path, a duration not above zero, an orbit radius not above zero, a fov outside 0..180 (on a shot or a key), a number that is not finite, a look or orbit center that names both an entity and a point or neither, or a negative blendIn.time. Camera shots, 95 (95-98).
sky-asset-wrong-kindsky.asset, or the deprecated envMap, names an asset whose kind is not envmap.
sky-color-ignoredmeta.environment.skyColor is set and the sky is not "kind": "color" (no sky means the default procedural one), so nothing reads it and the scene does not show that colour. Fix: add "sky": { "kind": "color", "intensity": 1, "rotation": 0 } to use the colour, or remove skyColor. Warning: see SEVERITY.
sky-envmap-conflictsky.asset and the deprecated envMap name different assets. Warning: see SEVERITY.
sky-hdr-needs-assetsky.kind is "hdr" and no sky.asset names the panorama to use.
sky-value-rangeA sky number is outside its stated range, or is NaN or infinite.
sprite-frame-missingA sprite name that resolves to nothing: an animation lists a frame the sprite does not have, or has no frames; animation names an animation it does not have; or two frames or two animations share a name.
sprite-invalidA sprite that cannot draw as written: no frames; pixelsPerMetre, fps or a duration not above zero; opacity or alphaCutoff outside 0..1; a durations list whose length is not the frames'; a rect outside its image's origin or of zero size; a pivot not finite; an image that is not a texture asset; or a second sprite on one entity.
sprite-rotation-count-invalidA sprite frame with a number of views other than 1 (the same from every side) or 2, 4, 8 or 16 (one per direction).
static-overlapStatic trimeshes do not intersect
steering-gameplayNo behaviour reads ctx.controller.steering, which the engine removed
terrain-extent-invalidA terrain file whose extentM is not above zero on both axes, or is not a whole multiple of its cellSize, or whose cellSize is not above zero.
terrain-in-2d-sceneA terrain component in a 2D-kind project: terrain is a 3D feature. Needs the project's kind (SceneContext.projectKind); silent without it.
terrain-layer-unknownA shoreline or material.rules op of a terrain file names a layer the file's layers does not declare. The message names the nearest layer.
terrain-multipleA scene with more than one terrain component. Whether two terrains overlap needs their files' extents, which a scene rule cannot read, so a second terrain is refused outright until WorldStream places several.
terrain-op-id-duplicateTwo ops of a terrain file's stack share an id. The id seeds the op and names it in agent tools, so it must be unique.
terrain-sample-invalidA terrain file's sampleM, or a detail entry's, that is not 0.25, 0.5, 1, 2 or 4; or a detail region that is not a rectangle whose corners sit on cell boundaries.
terrain-transformAn entity with a terrain component whose own transform is rotated or scaled: the entity's translation is the terrain's origin and nothing else.
terrain/entity-burieda collider's base is more than 0.25 m under the terrain's ground at its x and z: the entity is sunk into the hill
terrain/entity-floatinga static collider's base is more than 0.5 m above the terrain's ground at its x and z (a dynamic body, a controller or a spawn settles by itself and is not checked)
terrain/spawn-slopea spawn stands on ground steeper than a character can stand on (the terrain layer's physics slopeLimit there, else the controller's 45 degrees), so it slides off at once
terrainmod-no-terrainA terrainmod whose terrain names no entity with a terrain component, or, with no terrain named, in a scene that has none.
tilemap-invalidA tilemap that cannot draw as written: a tileset image that is not a texture asset; tileSize or grid not whole numbers above zero; margin or spacing not whole numbers from 0; cellSize not above zero; alphaCutoff outside 0..1; a legend key that is not one character, or is "." or " "; no layers, or two with one name; a layer's sortLayer or order out of range; rows of different lengths; a collision layer on an entity with its own collider or rigidbody; or a second tilemap on one entity.
tilemap-tile-unknownA tilemap tile that resolves to nothing: a legend index that is not a whole number below the tileset's columns × rows, or a row character that is neither a legend key nor empty ("." or " ").
tilemap-too-largeA tilemap too big to load in one piece: more than 16 layers, a layer of more than 1024 rows or a row of more than 1024 cells, or more than 1,048,576 cells over all layers. Split it over entities.
transform-not-finiteA transform component is not finite (NaN or infinity).
trigger-needs-trigger-colliderA trigger component sits on an entity with no isTrigger collider. Warning: see SEVERITY.
ui-clippedan interactive node a clipping ancestor cuts into
ui-colour-onlya state that differs from its siblings only in colour
ui-contrasttext below the minimum contrast against its resolved background
ui-default-fontThe game's screens draw in a face of its own, not only the engine's fallback mono font
ui-ellipsistext cut off by an ellipsis, a line limit or a clip, where the rest of the string is not on screen
ui-expectationthe live tree is not what the component library meant to build
ui-field-no-labelan editable field with nothing saying what it is for
ui-font-face-missingEvery @font-face rule names a font file, and a bitmap font an atlas image, that the project has
ui-locale-gapa key the base table has and this locale does not translate
ui-matrix-refusedan engine refused a cell of the matrix
ui-missing-stringa text key with no string in this locale
ui-no-way-backa screen that takes input, cannot be dismissed, and has no way off it
ui-offscreenan interactive node outside the viewport
ui-overlaptwo interactive rectangles on top of each other
ui-reduced-motiona transition still running when reduced motion is on
ui-relayouta node relaid out between two frames with nothing touched
ui-scroll-hiddena container that clips content it cannot scroll to
ui-start-screenmeta.ui.startScreen is a name no defineScreen could have given a screen.
ui-target-sizean interactive target below the minimum size
ui-text-overflowtext that does not fit the box it was laid out into
ui-undefined-tokena stylesheet reads a token a theme leaves undefined
ui-unknown-propa node that is not a text carries words, which nothing draws
ui-unreachablea focusable node Tab and directional navigation never reach
ui-untranslateda visible string with no key, in a locale that cannot translate it
unlitSomething lights the scene
unreachable-goalEvery goal is reachable from the player spawn
vehicle-cannot-steer-or-brakeNo wheel has steerable above 0, or none has braked above 0. Warning: see SEVERITY.

| vehicle-capability-absent | The scene carries a vehicle component and this build of the engine has no vehicle capability, so the scene loads and the vehicle is not there.

The first code NO VALIDATOR EMITS — see {@link CODES_NOT_EMITTED_BY_VALIDATION}. | | vehicle-geometry | A wheel sits outside the chassis collider's bounds, a wheel's suspension travel exceeds the ground clearance under the chassis, or the centre of mass is above the collider's top. Warning: see SEVERITY. | | vehicle-invalid | A vehicle that cannot be built: an unknown preset; a part or field missing with no preset to fill it; wheels empty; two wheels sharing an id; no wheel with driven above 0; an empty or unsorted torqueCurve; empty gears; a number non-finite, non-positive where it must be positive, or a fraction outside 0..1; or a wheel visual that names no entity. | | vehicle-needs-dynamic-body | The entity has no dynamic rigidbody, or no non-trigger collider, so there is nothing for the wheels to carry. Warning: see SEVERITY. | | vehicle-value-implausible | A wheel radius outside 0.15..0.6 m or a chassis mass outside 400..8000 kg: most likely a unit mistake. Warning: see SEVERITY. | | water-shape-invalid | A water component whose size has an axis that is not a finite number above 0: a lake needs an outline. Lakes, 109 (109-110). | | water-waves-invalid | A water component with a wave value out of range: windMps outside 0..30 or not finite, a non-finite windDirectionRad, a seed that is not a whole number from 0, or a priority that is not a whole number within -100..100. | | waterways-look-invalid | A waterways value out of range: roughness outside 0.02..0.15, flowScale outside 0..4, foam or mist outside 0..2, or a non-finite number, in the component or an override. | | waterways-override-invalid | A waterways override that names none or more than one of river, waterfall and lake, a non-whole or negative id, or more than 64 overrides. | | waterways-without-terrain | A waterways component with no terrain: terrain names no entity with a terrain component, or it is absent and neither this entity nor exactly one other entity is a terrain. Waterways, first of 4. | | wheel-invalid | A wheel that cannot work: no dynamic rigidbody above it; a number non-finite, non-positive where it must be positive, or a fraction outside 0..1; no radius on a wheel no vehicle composes; a second wheel component on one entity; or an entity in its visuals that cannot turn with it (missing, the wheel or above it, below it, with a rigidbody, on another body, or drawn by another wheel). |